yahyahy 3 年之前
父节点
当前提交
3780537b30
共有 57 个文件被更改,包括 15422 次插入1553 次删除
  1. 15 0
      src/api/login.js
  2. 11 0
      src/api/system/config.js
  3. 32 2
      src/api/system/dept.js
  4. 52 0
      src/api/system/dict/menuDict.js
  5. 124 0
      src/api/system/time.js
  6. 二进制
      src/assets/images/delei.png
  7. 二进制
      src/assets/images/icon_tc_add.png
  8. 二进制
      src/assets/images/icon_tc_addrt.png
  9. 二进制
      src/assets/images/icon_tc_del.png
  10. 二进制
      src/assets/images/pic_dlcg@2x.png
  11. 2 2
      src/components/DynamicFormsteo/index.vue
  12. 509 0
      src/components/FileUpload/DynamicFormsteo/index.vue
  13. 509 0
      src/components/FlowChartComponent/DynamicFormsteo/index.vue
  14. 1 1
      src/layout/components/Sidebar/Logo.vue
  15. 7 0
      src/main.js
  16. 21 21
      src/router/index.js
  17. 2 2
      src/settings.js
  18. 1333 1337
      src/views/index.vue
  19. 340 86
      src/views/login.vue
  20. 32 8
      src/views/system/dept/index.vue
  21. 6 1
      src/views/system/menu/index.vue
  22. 320 0
      src/views/system/menudict/ageInterval/index.vue
  23. 320 0
      src/views/system/menudict/askLeave/index.vue
  24. 320 0
      src/views/system/menudict/car/index.vue
  25. 320 0
      src/views/system/menudict/city/index.vue
  26. 320 0
      src/views/system/menudict/commonStatus/index.vue
  27. 320 0
      src/views/system/menudict/contraindication/index.vue
  28. 320 0
      src/views/system/menudict/education/index.vue
  29. 320 0
      src/views/system/menudict/famous/index.vue
  30. 320 0
      src/views/system/menudict/grantType/index.vue
  31. 320 0
      src/views/system/menudict/jobGroup/index.vue
  32. 320 0
      src/views/system/menudict/jobStatus/index.vue
  33. 320 0
      src/views/system/menudict/jobType/index.vue
  34. 320 0
      src/views/system/menudict/keyIndustry/index.vue
  35. 320 0
      src/views/system/menudict/leaveType/index.vue
  36. 319 0
      src/views/system/menudict/moratoriumOnVaccination/index.vue
  37. 320 0
      src/views/system/menudict/normalDisable/index.vue
  38. 320 0
      src/views/system/menudict/noticeStatus/index.vue
  39. 320 0
      src/views/system/menudict/noticeType/index.vue
  40. 320 0
      src/views/system/menudict/operType/index.vue
  41. 320 0
      src/views/system/menudict/otherStatus/index.vue
  42. 320 0
      src/views/system/menudict/place/index.vue
  43. 320 0
      src/views/system/menudict/political/index.vue
  44. 320 0
      src/views/system/menudict/seqTime/index.vue
  45. 320 0
      src/views/system/menudict/showHide/index.vue
  46. 319 0
      src/views/system/menudict/status/index.vue
  47. 319 0
      src/views/system/menudict/userJobType/index.vue
  48. 319 0
      src/views/system/menudict/userOptType/index.vue
  49. 319 0
      src/views/system/menudict/userSex/index.vue
  50. 320 0
      src/views/system/menudict/vaccinationSite/index.vue
  51. 320 0
      src/views/system/menudict/vaccineName/index.vue
  52. 319 0
      src/views/system/menudict/week/index.vue
  53. 319 0
      src/views/system/menudict/yesNo/index.vue
  54. 15 7
      src/views/system/role/index.vue
  55. 30 78
      src/views/system/surface/index.vue
  56. 2104 0
      src/views/system/time/index.vue
  57. 44 8
      src/views/system/user/index.vue

+ 15 - 0
src/api/login.js

@@ -39,4 +39,19 @@ export function getCodeImg() {
     url: '/code',
     method: 'get'
   })
+}
+
+// 获取二维码code
+export function getLoginCode() {
+  return request({
+    url: '/auth/getQrCode',
+    method: 'post'
+  })
+}
+// 二维码是否扫码
+export function getScanStatus(code) {
+  return request({
+    url: `/auth/getPool/${code}`,
+    method: 'get',
+  })
 }

+ 11 - 0
src/api/system/config.js

@@ -36,6 +36,17 @@ export function listIndextherr(query) {
   })
 }
 
+// 统计
+export function tjList(query) {
+  return request({
+    url: '/boman-web-core/vaccination/statisticYmjz',
+    method: 'get'
+    // params: query listIndextherr
+  })
+}
+
+
+
 // 查询参数详细
 export function getConfig(id) {
   return request({

+ 32 - 2
src/api/system/dept.js

@@ -9,6 +9,26 @@ export function listDept(query) {
   })
 }
 
+
+// 查询部门列表
+export function listDeptri(query) {
+  return request({
+    url: '/system/dept/treeselect',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询部门列表
+export function listDeptrity(query) {
+  return request({
+    url: '/system/dept/deptList',
+    method: 'get',
+    params: query
+  })
+}
+
+
 // 查询部门列表(排除节点)
 export function listDeptExcludeChild(id) {
   return request({
@@ -26,10 +46,20 @@ export function getDept(id) {
 }
 
 // 查询部门下拉树结构
-export function treeselect() {
+export function treeselect(query) {
   return request({
     url: '/system/dept/treeselect',
-    method: 'get'
+    method: 'get',
+	params: query
+  })
+}
+
+// 查询部门下拉树结构
+export function treeselectdepts(query) {
+  return request({
+    url: '/system/dept/depts',
+    method: 'get',
+	params: query
   })
 }
 

+ 52 - 0
src/api/system/dict/menuDict.js

@@ -0,0 +1,52 @@
+import request from '@/utils/request'
+
+// 查询字典数据列表
+export function listData(query) {
+  return request({
+    url: '/system/dict/data/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询字典数据详细
+export function getData(dictCode) {
+  return request({
+    url: '/system/dict/data/' + dictCode,
+    method: 'get'
+  })
+}
+
+// 根据字典类型查询字典数据信息
+export function getDicts(dictType) {
+  return request({
+    url: '/system/dict/data/type/' + dictType,
+    method: 'get'
+  })
+}
+
+// 新增字典数据
+export function addData(data) {
+  return request({
+    url: '/system/dict/data',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改字典数据
+export function updateData(data) {
+  return request({
+    url: '/system/dict/data',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除字典数据
+export function delData(dictCode) {
+  return request({
+    url: '/system/dict/data/' + dictCode,
+    method: 'delete'
+  })
+}

+ 124 - 0
src/api/system/time.js

@@ -0,0 +1,124 @@
+import request from '@/utils/request'
+
+// 查询疫苗信息列表
+export function listInfo(query) {
+  return request({
+    url: '/boman-web-core/core/info/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询疫苗信息详细
+export function getInfo(id) {
+  return request({
+    url: '/boman-web-core/core/info/' + id,
+    method: 'get'
+  })
+}
+
+// 户籍地址 新增修改
+export function listRoleer(data) {
+  return request({
+    url: '/boman-web-core/administrativeInfo/treeSelect',
+    method: 'get',
+    // data
+  })
+}
+
+// 户籍地址搜索
+export function listRoleerseavh(data) {
+  return request({
+    url: '/boman-web-core/administrativeInfo/treeSelectVillage',
+    method: 'get',
+    // data
+  })
+}
+
+
+// 新增疫苗信息
+export function addInfo(data) {
+  return request({
+    url: '/boman-web-core/core/info',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改疫苗信息
+export function updateInfo(data) {
+  return request({
+    url: '/boman-web-core/core/info',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除疫苗信息
+export function delInfo(id) {
+  return request({
+    url: '/boman-web-core/core/info/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出疫苗信息
+export function exportInfo(query) {
+  return request({
+    url: '/boman-web-core/core/info/export',
+    method: 'post',
+    data: query
+  })
+}
+
+// 查询身份证信息
+export function idces(query) {
+  return request({
+    url: '/boman-web-core/core/info/findHjInfo',
+    method: 'post',
+    data: query
+  })
+}
+// 导出参数
+export function exportConfig(query) {
+  return request({
+    url: '/boman-file/common/file/async/export',
+    method: 'post',
+    data: query
+  })
+}
+
+// 导出参数
+export function exportConfigtyr(query) {
+  return request({
+    url: '/boman-file/common/file/before/download ',
+    method: 'get',
+    params: query
+  })
+}
+
+// 删除疫苗名称信息
+export function delInfort(id) {
+  return request({
+    url: '/boman-web-core/core/info/vaccineInfoUser/' + id,
+    method: 'get'
+  })
+}
+
+// 列表查看疫苗信息
+export function yiaoe(query) {
+  return request({
+    url: '/boman-web-core/core/info/findInfoUser',
+    method: 'post',
+	data: query
+  })
+}
+
+// 导出错误日志
+export function importLog(query){
+  return request({
+    url: '/boman-web-core/ymjzImportError/list',
+    method: 'get',
+    data: query
+  })
+}

二进制
src/assets/images/delei.png


二进制
src/assets/images/icon_tc_add.png


二进制
src/assets/images/icon_tc_addrt.png


二进制
src/assets/images/icon_tc_del.png


二进制
src/assets/images/pic_dlcg@2x.png


+ 2 - 2
src/components/DynamicFormsteo/index.vue

@@ -31,7 +31,7 @@
            :placeholder="'请选择'+formConfig.columnComment"
            @getCheckedNodes = 'getCheckedNodes'
            @change="handleChangety(config[formConfig.columnName])"
-           :props="{checkStrictly: true,value:'id',label:'dictLabel',children: 'children'}"
+           :props="{checkStrictly: true,value:'dictValue',label:'dictLabel',children: 'children'}"
            ></el-cascader>
    </div>
    <!-- <div class="head-container" > -->
@@ -284,7 +284,7 @@
                 if(this.formConfig.tableName =='boman_temp_leaveform'){
                   // consolelog(123456)
                   // if(){
-                    
+
                   // }
                 }
               }

+ 509 - 0
src/components/FileUpload/DynamicFormsteo/index.vue

@@ -0,0 +1,509 @@
+<template>
+  <!-- <el-row  class="row-bg"> -->
+  <el-col :span="ieug !== null? ieug : 8 "  >
+  <el-form-item label-width="140px" :label="formConfig.columnComment" style="display: inline-block;" :prop="formConfig.columnName">
+    <!-- 输入框 -->
+    <el-input v-if="formConfig.htmlType == 'input'" @change="iChange" v-model="config[formConfig.columnName]" :placeholder="'请输入'+formConfig.columnComment"
+      clearable @keyup.enter.native="handleQuery" :disabled="formConfig.disabshow" />
+    <!-- 多行输入框 -->
+    <el-input v-if="formConfig.htmlType == 'textarea'" @change="iChange" type="textarea" v-model="config[formConfig.columnName]"
+      :placeholder="'请输入'+formConfig.columnComment" clearable @keyup.enter.native="handleQuery" :disabled="formConfig.disabshow" />
+    <!-- 下拉框 -->
+   <el-select v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'select'&&(!formConfig.fkInfo)"
+      filterable :placeholder="'请输入'+formConfig.columnComment" :disabled="formConfig.disabshow">
+      <el-option v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictLabel"
+        :value="itemChild.dictValue">
+      </el-option>
+    </el-select>
+    <!-- 下拉框搜索 -->
+   <el-select :disabled="formConfig.disabshow" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'select'&&(formConfig.fkInfo)"
+      filterable remote :remote-method="remoteMethod" :loading="loading" :placeholder="'请输入'+formConfig.columnComment">
+     <el-option v-for="itemChild in filterList" :key="itemChild[formConfig.fkInfo.fkColumnName]" :label="itemChild[formConfig.fkInfo.dkColumnName]"
+       :value="itemChild[formConfig.fkInfo.fkColumnName]">
+     </el-option>
+
+    </el-select>
+    <!-- 树形结构 -->
+   <div v-if="formConfig.htmlType == 'cascader'&&(!formConfig.fkInfo)">
+        <el-cascader
+           v-model="config[formConfig.columnName]"
+           :options="formConfig.sysDictData"
+           :placeholder="'请选择'+formConfig.columnComment"
+           @getCheckedNodes = 'getCheckedNodes'
+           @change="handleChangety(config[formConfig.columnName])"
+           :props="{checkStrictly: true,value:'dictValue',label:'dictLabel',children: 'children'}"
+           ></el-cascader>
+   </div>
+   <!-- <div class="head-container" > -->
+<!-- <div class="head-container">
+       <el-tree
+         :data="deptOptions"
+         :props="defaultProps"
+         :expand-on-click-node="false"
+         :filter-node-method="filterNode"
+         ref="tree"
+         node-key="id"
+         :current-node-key="5"
+         @node-click="handleNodeClick"
+         :highlight-current = 'true'
+         :default-expanded-keys="[2, 3]"
+       />
+     </div> -->
+     <!-- <treeselect  v-model="config[formConfig.columnName]" :options="deptOptionsthre" :normalizer="normalizerty" :flat="true" @select="djieskletwo" :maxHeight="350" :placeholder="'请输入'+formConfig.columnComment" /> -->
+
+    <!-- 复选框 -->
+    <el-checkbox-group :disabled="formConfig.disabshow" v-model="config" v-if="formConfig.htmlType == 'checkbox'">
+      <el-checkbox @change="handleCheckedCitiesChange" v-for="itemChild in formConfig.sysDictData" :label="itemChild.dictValue"
+        :key="itemChild.dictLabel">
+        {{itemChild.dictLabel}}
+      </el-checkbox>
+    </el-checkbox-group>
+    <!-- 单选框 -->
+    <el-radio-group :disabled="formConfig.disabshow" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'radio'">
+      <el-radio v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictValue">{{itemChild.dictLabel}}</el-radio>
+    </el-radio-group>
+    <!-- 时间控件日期 -->
+    <el-date-picker :disabled="formConfig.disabshow" @change="iChange" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'datetime-date'"
+      type="date" :placeholder="'请输入'+formConfig.columnComment">
+    </el-date-picker>
+    <!-- 时间控件小时分钟 -->
+    <el-date-picker :disabled="formConfig.disabshow" @change="iChange" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'datetime'"
+                    type="datetime" :placeholder="'请输入'+formConfig.columnComment"  value-format="yyyy-MM-dd hh:mm:ss" >
+    </el-date-picker>
+    <!-- 上传图片 -->
+    <el-upload :disabled="formConfig.disabshow" v-if="formConfig.htmlType == 'imageUpload'" :headers="{Authorization: 'Bearer ' + getToken()}"
+      :action="process + '/boman-file/upload'" :file-list="config" list-type="picture-card" :on-preview="handlePictureCardPreview"
+      :on-success="upImageFn" :on-remove="reseImage">
+      <i class="el-icon-plus"></i>
+    </el-upload>
+    <el-dialog :disabled="formConfig.disabshow" :visible.sync="dialogVisible" v-if="formConfig.htmlType == 'imageUpload'">
+      <img :src="dialogImageUrl" alt="">
+    </el-dialog>
+    <!-- 上传文件 -->
+    <el-upload :disabled="formConfig.disabshow" class="upload-demo" :headers="{Authorization: 'Bearer ' + getToken()}"
+      v-if="formConfig.htmlType == 'fileUpload'" :action="process + '/boman-file/upload'" :on-change="handleChange"
+      :on-success="upImageFn" :on-error="err" :on-remove="reseImage" :file-list="config">
+      <el-button size="small" type="primary">点击上传</el-button>
+      <div slot="tip" class="el-upload__tip">只能上传jpg/png/txt/word/pdf/exe/RAR/ZIP文件,且不超过10MB</div>
+    </el-upload>
+    <!-- 富文本 -->
+    <editor :disabled="formConfig.disabshow" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'editor'"
+      :min-height="192" />
+  </el-form-item>
+  </el-col>
+  <!-- </el-row> -->
+</template>
+
+<script>
+  const defaultSettings = require('@/settings.js')
+  import Editor from '@/components/Editor';
+  import {
+    listIndexfou,listIndextime
+  } from "@/api/tool/gen";
+  import {getUserProfile, } from "@/api/system/config";
+  import {
+    getToken
+  } from "@/utils/auth";
+  import { treeselect } from "@/api/system/dept";
+  import Treeselect from "@riophae/vue-treeselect";
+  import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+  export default {
+    components: {  Treeselect},
+    data() {
+      return {
+        fileList: [],
+        defaultSettings,
+        dialogImageUrl: '',
+        process: process.env.VUE_APP_BASE_API,
+        dialogVisible: false,
+        disabled: false,
+        loading: false,
+        filterList: [],
+        value:[],
+        config: {},
+        aliemg: {
+          table: '',
+          orderBy: 'create_time desc',
+          pageNo: 1,
+          pageSize: 10,
+          fixedData: {
+            condition: {}
+          },
+          ieug:8
+        },
+        // 部门名称
+        deptName: undefined,
+         defaultProps: {
+                  children: 'children',
+                  label: 'label'
+                },
+                huetge:{},
+                leavefrom_starttime:{
+                  leavefrom_start_time:undefined
+                },
+                leavefrom_end:{
+                  leavefrom_end_time:undefined
+                },
+        deptOptions: [],
+        oieutgs:[],
+        shoeuw:true,
+        jueg:0
+      }
+    },
+    components: {
+      Editor
+    },
+    props: {
+      queryData: {
+        type: Object,
+        default: res => {
+          return {
+            showData: []
+          }
+        }
+      },
+      formConfig: {
+        type: Object,
+        required: true,
+        'default': {
+          sysDictData: []
+        }
+      },
+      type: {
+        type: Number,
+        default: 1
+      },
+    },
+    created() {
+      this.config = {}
+
+      if(this.type){
+        if(this.formConfig.tableid == -1){
+          // console.log(-1)
+          // console.log(this.formConfig.mask.slice(1,2))
+          this.shoeuw = false
+          if(this.formConfig.readonly == true){
+            this.formConfig.disabshow = true
+          }else if(this.formConfig.mask.slice(1,2) == '0' || this.formConfig.isonliy == true){
+               this.formConfig.disabshow = true
+          }else{
+            this.formConfig.disabshow = false
+          }
+          if(this.formConfig.fkInfo == null){
+            this.formConfig.fkInfo=false
+          }
+        }else{
+          // console.log(0)
+          this.shoeuw = true
+          if(this.formConfig.readonly == true){
+            this.formConfig.disabshow = true
+          }else if(this.formConfig.mask.slice(3,4) == '0' || this.formConfig.isonliy == true){
+               this.formConfig.disabshow = true
+          }else{
+            this.formConfig.disabshow = false
+          }
+          if(this.formConfig.fkInfo == null){
+            this.formConfig.fkInfo=false
+          }
+        }
+      }
+      if(this.formConfig.tableColumnuy == null){
+        this.ieug = null
+      }else{
+        this.ieug = 24 / (this.formConfig.tableColumnuy -0)
+      }
+      this.init()
+      if (this.formConfig.extendedAttributes) {
+        let extend = JSON.parse(this.formConfig.extendedAttributes)
+        this.extFn(extend.col, extend.comp)
+      }
+      if(this.formConfig.htmlType == 'imageUpload' || this.formConfig.htmlType == 'fileUpload'){
+        this.config = []
+        if(this.formConfig.columnValue !== null && this.formConfig.columnValue !== '[]'  ){
+          this.config = JSON.parse(this.formConfig.columnValue)
+        }
+
+      }
+    },
+   watch: {
+     'config': {
+       handler: function() {
+         this.$emit('modelFn', this.formConfig.columnName, this.config[this.formConfig.columnName])
+       },
+       deep: true
+     },
+     'queryData': {
+       handler: function() {
+         if (this.formConfig.extendedAttributes) {
+           let extend = JSON.parse(this.formConfig.extendedAttributes)
+           this.formConfig.extend=extend
+           console.log(this.jueg,789)
+           this.extFn(extend.col, extend.comp)
+         }
+       },
+       deep: true
+     },
+     // 根据名称筛选部门树
+     deptName(val) {
+       console.log(this.$refs.tree)
+       this.$refs.tree.filter(val);
+     }
+   },
+    mounted() {
+      // this.getUser()
+      console.log(this.formConfig)
+    },
+    methods: {
+      iChange(val){
+        console.log(val,45)
+        if(this.formConfig.isUseExtend){
+          this.shoeuw = false
+          this.jueg = 1
+          // console.log( this.shoeuw)
+          this.$emit('iChange',this.formConfig.columnName,val)
+        }
+      },
+      extFn(col, comp) {
+        // console.log(col, this.queryData.showData,comp,45)
+        console.log(this.formConfig.tableName)
+         let str = this.getDyn(col, this.queryData.showData,comp)
+        console.log(str,457)
+        this.huetge.dept_id = this.formConfig.depdid
+        if(this.shoeuw == false){
+          console.log(this.shoeuw)
+          let str = this.getDyn(col, this.queryData.showData,comp)
+          if(str !== undefined){
+            let hue = []
+            hue = str.split('-')
+
+            this.huetge.leavefrom_end_time = str.substring(0,19)
+            this.huetge.leavefrom_start_time = str.substring(20)
+            listIndextime( this.huetge).then(response => {
+              if (response.code == 200) {
+                this.config[this.formConfig.columnName] = response.data
+                if(this.formConfig.tableName =='boman_temp_leaveform'){
+                  // consolelog(123456)
+                  // if(){
+
+                  // }
+                }
+              }
+              this.loading = false;
+            })
+            console.log(this.huetge)
+          }
+        }else{
+          console.log(this.jueg)
+          console.log(this.formConfig.columnName,12)
+          // let str = this.getDyn(col, this.queryData.showData,comp)
+           this.queryData.showData.filter(route => {
+             route.hrChildren.filter(routerst => {
+               if (routerst.columnName == 'leavefrom_start_time') {
+                 console.log(routerst.columnValue)
+                 this.huetge.leavefrom_start_time = routerst.columnValue
+               }
+               if(routerst.columnName == 'leavefrom_end_time'){
+                  this.huetge.leavefrom_end_time = routerst.columnValue
+               }
+
+             })
+           })
+           listIndextime( this.huetge).then(response => {
+             if (response.code == 200) {
+               this.config[this.formConfig.columnName] = response.data
+             }
+             this.loading = false;
+           })
+
+        }
+
+      },
+      eval(code){
+        let fun = new Function(`return ${code}`)();
+        return fun
+      },
+      listIndexfouFn() {
+        listIndexfou(this.aliemg).then(response => {
+          if (response.data) {
+            this.filterList = response.data.rows
+            console.log(this.filterList,876)
+          }
+          this.loading = false;
+        })
+      },
+      remoteMethod(query) {
+        if (query !== '') {
+          this.loading = true;
+          this.aliemg.fixedData.condition[this.formConfig.fkInfo.dkColumnName] = query
+          this.listIndexfouFn()
+        } else {
+          this.filterList = [];
+        }
+      },
+      upImageFn(res, file) {
+        this.config.push(res.data);
+        console.log(this.config)
+      },
+      err(){
+       console.log(35)
+      },
+      init() {
+        if (this.formConfig.htmlType == 'checkbox' || this.formConfig.htmlType == 'imageUpload' || this.formConfig.htmlType ==
+          'fileUpload') {
+          this.config = []
+        } else {
+          this.$set(this.config, this.formConfig.columnName, ((this.formConfig.columnValue ? this.formConfig.columnValue :
+            this.formConfig.defaultValue) || ''))
+        }
+        if (this.formConfig.htmlType == 'cascader'){
+          console.log(this.formConfig.sysDictData,987)
+
+          for(var i = 0 ; i< this.formConfig.sysDictData.length; i++){
+            this.getChilds(this.formConfig.sysDictData[i])
+          }
+
+        }
+
+
+        if (this.formConfig.fkInfo) {
+          this.aliemg.table = this.formConfig.fkInfo.fkTableName
+          if (this.formConfig.fkInfo.value) {
+            this.aliemg.fixedData.condition[this.formConfig.fkInfo.dkColumnName] = this.formConfig.fkInfo.value
+            this.formConfig.fkInfo.name = this.formConfig.fkInfo.name - 0
+            this.formConfig.columnValue  = this.formConfig.columnValue - 0
+            console.log(this.formConfig.fkInfo.name,this.formConfig.columnValue)
+          }
+          this.listIndexfouFn()
+        }
+      },
+      handleChange(file, fileList) {
+        this.fileList = fileList.slice(-3);
+      },
+      getToken() {
+        return getToken()
+      },
+      reseImage(file, fileList) {
+        let urls = ""
+        if (file.response) {
+          urls = file.response.url
+        } else {
+          urls = file.url
+        }
+        for (let i = this.config.length - 1; i >= 0; i--) {
+          if (this.config[i].url == urls) {
+            this.config.splice(i, 1);
+          }
+        }
+      },
+      reseImage1(file, fileList) {
+        let urls = ""
+        if (file.response) {
+          urls = file.response.url
+        } else {
+          urls = file.url
+        }
+        for (let i = this.config.length - 1; i >= 0; i--) {
+          if (this.config[i].url == urls) {
+            this.config.splice(i, 1);
+          }
+        }
+      },
+      handlePictureCardPreview(file) {
+        console.log(file)
+        this.dialogImageUrl = file.url;
+        this.dialogVisible = true;
+      },
+      handleDownload(file) {
+        console.log(file);
+      },
+      handleQuery() {
+        this.$emit('btns')
+      },
+      handleCheckedCitiesChange(value) {
+        console.log(this.config)
+      },
+      /** 转换组数据结构 */
+      normalizerty(node) {
+        return {
+          id: node.id,
+          label: node.groupName,
+        };
+      },
+      djieskletwo(node, instanceId) {
+        // this.members(node.id);
+        // this.elezu = node.id
+        console.log(node, instanceId);
+      },
+      // 筛选节点
+      filterNode(value, data) {
+        console.log(value,data)
+        if (!value) return true;
+        return data.label.indexOf(value) !== -1;
+      },
+      // 节点单击事件
+      handleNodeClick(data) {
+        console.log(data);
+        // this.queryParams.deptId = data.id;
+        // this.staff(data.id);
+        // this.quandet = false
+        // this.getList();
+      },
+      handleChangety(value,ik){
+        // if(value.length ==1){
+        //   this.queryParams.referralList[1].sysDeptId = value.join(',')
+        // }else{
+        //   this.queryParams.referralList[1].sysDeptId = value[value.length-1]
+        // }
+        //1
+      console.log(value,ik)
+      },
+      getCheckedNodes(value){
+        // console.log(value)
+      },
+      formateDate(datetime) {
+          function addDateZero(num) {
+              return (num < 10 ? "0" + num : num);
+          }
+          let d = new Date(datetime);
+          let formatdatetime = d.getFullYear() + '-' + addDateZero(d.getMonth() + 1) + '-' + addDateZero(d.getDate()) + ' ' + addDateZero(d.getHours()) + ':' + addDateZero(d.getMinutes()) + ':' + addDateZero(d.getSeconds());
+          return formatdatetime;
+      },
+      // 递归
+      getChilds(data){
+        console.log(data,67)
+        if(data !== null){
+          console.log(7)
+          if(data.children.length == 0){
+            data.children = undefined
+          }else{
+            for(var i = 0 ; i< data.children.length; i++){
+              if(data.children[i].length == 0){
+                // data.children[i] = undefined
+                // console.log(data.children[i],8)
+              }else{
+                // console.log(data.children[i],9)
+                this.getChilds(data.children[i])
+              }
+              // console.log(data.children[i],10)
+            }
+          }
+
+        }
+
+        // if(data.children.length == 0){
+        //   data.children = null
+        // }else{
+        //   this.getChilds(data.children)
+        // }
+      },
+      getUser() {
+        getUserProfile().then(response => {
+          this.huetge.dept_id = response.data.deptId;
+        });
+      },
+    }
+  }
+</script>
+
+<style>
+</style>

+ 509 - 0
src/components/FlowChartComponent/DynamicFormsteo/index.vue

@@ -0,0 +1,509 @@
+<template>
+  <!-- <el-row  class="row-bg"> -->
+  <el-col :span="ieug !== null? ieug : 8 "  >
+  <el-form-item label-width="140px" :label="formConfig.columnComment" style="display: inline-block;" :prop="formConfig.columnName">
+    <!-- 输入框 -->
+    <el-input v-if="formConfig.htmlType == 'input'" @change="iChange" v-model="config[formConfig.columnName]" :placeholder="'请输入'+formConfig.columnComment"
+      clearable @keyup.enter.native="handleQuery" :disabled="formConfig.disabshow" />
+    <!-- 多行输入框 -->
+    <el-input v-if="formConfig.htmlType == 'textarea'" @change="iChange" type="textarea" v-model="config[formConfig.columnName]"
+      :placeholder="'请输入'+formConfig.columnComment" clearable @keyup.enter.native="handleQuery" :disabled="formConfig.disabshow" />
+    <!-- 下拉框 -->
+   <el-select v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'select'&&(!formConfig.fkInfo)"
+      filterable :placeholder="'请输入'+formConfig.columnComment" :disabled="formConfig.disabshow">
+      <el-option v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictLabel"
+        :value="itemChild.dictValue">
+      </el-option>
+    </el-select>
+    <!-- 下拉框搜索 -->
+   <el-select :disabled="formConfig.disabshow" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'select'&&(formConfig.fkInfo)"
+      filterable remote :remote-method="remoteMethod" :loading="loading" :placeholder="'请输入'+formConfig.columnComment">
+     <el-option v-for="itemChild in filterList" :key="itemChild[formConfig.fkInfo.fkColumnName]" :label="itemChild[formConfig.fkInfo.dkColumnName]"
+       :value="itemChild[formConfig.fkInfo.fkColumnName]">
+     </el-option>
+
+    </el-select>
+    <!-- 树形结构 -->
+   <div v-if="formConfig.htmlType == 'cascader'&&(!formConfig.fkInfo)">
+        <el-cascader
+           v-model="config[formConfig.columnName]"
+           :options="formConfig.sysDictData"
+           :placeholder="'请选择'+formConfig.columnComment"
+           @getCheckedNodes = 'getCheckedNodes'
+           @change="handleChangety(config[formConfig.columnName])"
+           :props="{checkStrictly: true,value:'dictValue',label:'dictLabel',children: 'children'}"
+           ></el-cascader>
+   </div>
+   <!-- <div class="head-container" > -->
+<!-- <div class="head-container">
+       <el-tree
+         :data="deptOptions"
+         :props="defaultProps"
+         :expand-on-click-node="false"
+         :filter-node-method="filterNode"
+         ref="tree"
+         node-key="id"
+         :current-node-key="5"
+         @node-click="handleNodeClick"
+         :highlight-current = 'true'
+         :default-expanded-keys="[2, 3]"
+       />
+     </div> -->
+     <!-- <treeselect  v-model="config[formConfig.columnName]" :options="deptOptionsthre" :normalizer="normalizerty" :flat="true" @select="djieskletwo" :maxHeight="350" :placeholder="'请输入'+formConfig.columnComment" /> -->
+
+    <!-- 复选框 -->
+    <el-checkbox-group :disabled="formConfig.disabshow" v-model="config" v-if="formConfig.htmlType == 'checkbox'">
+      <el-checkbox @change="handleCheckedCitiesChange" v-for="itemChild in formConfig.sysDictData" :label="itemChild.dictValue"
+        :key="itemChild.dictLabel">
+        {{itemChild.dictLabel}}
+      </el-checkbox>
+    </el-checkbox-group>
+    <!-- 单选框 -->
+    <el-radio-group :disabled="formConfig.disabshow" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'radio'">
+      <el-radio v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictValue">{{itemChild.dictLabel}}</el-radio>
+    </el-radio-group>
+    <!-- 时间控件日期 -->
+    <el-date-picker :disabled="formConfig.disabshow" @change="iChange" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'datetime-date'"
+      type="date" :placeholder="'请输入'+formConfig.columnComment">
+    </el-date-picker>
+    <!-- 时间控件小时分钟 -->
+    <el-date-picker :disabled="formConfig.disabshow" @change="iChange" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'datetime'"
+                    type="datetime" :placeholder="'请输入'+formConfig.columnComment"  value-format="yyyy-MM-dd hh:mm:ss" >
+    </el-date-picker>
+    <!-- 上传图片 -->
+    <el-upload :disabled="formConfig.disabshow" v-if="formConfig.htmlType == 'imageUpload'" :headers="{Authorization: 'Bearer ' + getToken()}"
+      :action="process + '/boman-file/upload'" :file-list="config" list-type="picture-card" :on-preview="handlePictureCardPreview"
+      :on-success="upImageFn" :on-remove="reseImage">
+      <i class="el-icon-plus"></i>
+    </el-upload>
+    <el-dialog :disabled="formConfig.disabshow" :visible.sync="dialogVisible" v-if="formConfig.htmlType == 'imageUpload'">
+      <img :src="dialogImageUrl" alt="">
+    </el-dialog>
+    <!-- 上传文件 -->
+    <el-upload :disabled="formConfig.disabshow" class="upload-demo" :headers="{Authorization: 'Bearer ' + getToken()}"
+      v-if="formConfig.htmlType == 'fileUpload'" :action="process + '/boman-file/upload'" :on-change="handleChange"
+      :on-success="upImageFn" :on-error="err" :on-remove="reseImage" :file-list="config">
+      <el-button size="small" type="primary">点击上传</el-button>
+      <div slot="tip" class="el-upload__tip">只能上传jpg/png/txt/word/pdf/exe/RAR/ZIP文件,且不超过10MB</div>
+    </el-upload>
+    <!-- 富文本 -->
+    <editor :disabled="formConfig.disabshow" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'editor'"
+      :min-height="192" />
+  </el-form-item>
+  </el-col>
+  <!-- </el-row> -->
+</template>
+
+<script>
+  const defaultSettings = require('@/settings.js')
+  import Editor from '@/components/Editor';
+  import {
+    listIndexfou,listIndextime
+  } from "@/api/tool/gen";
+  import {getUserProfile, } from "@/api/system/config";
+  import {
+    getToken
+  } from "@/utils/auth";
+  import { treeselect } from "@/api/system/dept";
+  import Treeselect from "@riophae/vue-treeselect";
+  import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+  export default {
+    components: {  Treeselect},
+    data() {
+      return {
+        fileList: [],
+        defaultSettings,
+        dialogImageUrl: '',
+        process: process.env.VUE_APP_BASE_API,
+        dialogVisible: false,
+        disabled: false,
+        loading: false,
+        filterList: [],
+        value:[],
+        config: {},
+        aliemg: {
+          table: '',
+          orderBy: 'create_time desc',
+          pageNo: 1,
+          pageSize: 10,
+          fixedData: {
+            condition: {}
+          },
+          ieug:8
+        },
+        // 部门名称
+        deptName: undefined,
+         defaultProps: {
+                  children: 'children',
+                  label: 'label'
+                },
+                huetge:{},
+                leavefrom_starttime:{
+                  leavefrom_start_time:undefined
+                },
+                leavefrom_end:{
+                  leavefrom_end_time:undefined
+                },
+        deptOptions: [],
+        oieutgs:[],
+        shoeuw:true,
+        jueg:0
+      }
+    },
+    components: {
+      Editor
+    },
+    props: {
+      queryData: {
+        type: Object,
+        default: res => {
+          return {
+            showData: []
+          }
+        }
+      },
+      formConfig: {
+        type: Object,
+        required: true,
+        'default': {
+          sysDictData: []
+        }
+      },
+      type: {
+        type: Number,
+        default: 1
+      },
+    },
+    created() {
+      this.config = {}
+
+      if(this.type){
+        if(this.formConfig.tableid == -1){
+          // console.log(-1)
+          // console.log(this.formConfig.mask.slice(1,2))
+          this.shoeuw = false
+          if(this.formConfig.readonly == true){
+            this.formConfig.disabshow = true
+          }else if(this.formConfig.mask.slice(1,2) == '0' || this.formConfig.isonliy == true){
+               this.formConfig.disabshow = true
+          }else{
+            this.formConfig.disabshow = false
+          }
+          if(this.formConfig.fkInfo == null){
+            this.formConfig.fkInfo=false
+          }
+        }else{
+          // console.log(0)
+          this.shoeuw = true
+          if(this.formConfig.readonly == true){
+            this.formConfig.disabshow = true
+          }else if(this.formConfig.mask.slice(3,4) == '0' || this.formConfig.isonliy == true){
+               this.formConfig.disabshow = true
+          }else{
+            this.formConfig.disabshow = false
+          }
+          if(this.formConfig.fkInfo == null){
+            this.formConfig.fkInfo=false
+          }
+        }
+      }
+      if(this.formConfig.tableColumnuy == null){
+        this.ieug = null
+      }else{
+        this.ieug = 24 / (this.formConfig.tableColumnuy -0)
+      }
+      this.init()
+      if (this.formConfig.extendedAttributes) {
+        let extend = JSON.parse(this.formConfig.extendedAttributes)
+        this.extFn(extend.col, extend.comp)
+      }
+      if(this.formConfig.htmlType == 'imageUpload' || this.formConfig.htmlType == 'fileUpload'){
+        this.config = []
+        if(this.formConfig.columnValue !== null && this.formConfig.columnValue !== '[]'  ){
+          this.config = JSON.parse(this.formConfig.columnValue)
+        }
+
+      }
+    },
+   watch: {
+     'config': {
+       handler: function() {
+         this.$emit('modelFn', this.formConfig.columnName, this.config[this.formConfig.columnName])
+       },
+       deep: true
+     },
+     'queryData': {
+       handler: function() {
+         if (this.formConfig.extendedAttributes) {
+           let extend = JSON.parse(this.formConfig.extendedAttributes)
+           this.formConfig.extend=extend
+           console.log(this.jueg,789)
+           this.extFn(extend.col, extend.comp)
+         }
+       },
+       deep: true
+     },
+     // 根据名称筛选部门树
+     deptName(val) {
+       console.log(this.$refs.tree)
+       this.$refs.tree.filter(val);
+     }
+   },
+    mounted() {
+      // this.getUser()
+      console.log(this.formConfig)
+    },
+    methods: {
+      iChange(val){
+        console.log(val,45)
+        if(this.formConfig.isUseExtend){
+          this.shoeuw = false
+          this.jueg = 1
+          // console.log( this.shoeuw)
+          this.$emit('iChange',this.formConfig.columnName,val)
+        }
+      },
+      extFn(col, comp) {
+        // console.log(col, this.queryData.showData,comp,45)
+        console.log(this.formConfig.tableName)
+         let str = this.getDyn(col, this.queryData.showData,comp)
+        console.log(str,457)
+        this.huetge.dept_id = this.formConfig.depdid
+        if(this.shoeuw == false){
+          console.log(this.shoeuw)
+          let str = this.getDyn(col, this.queryData.showData,comp)
+          if(str !== undefined){
+            let hue = []
+            hue = str.split('-')
+
+            this.huetge.leavefrom_end_time = str.substring(0,19)
+            this.huetge.leavefrom_start_time = str.substring(20)
+            listIndextime( this.huetge).then(response => {
+              if (response.code == 200) {
+                this.config[this.formConfig.columnName] = response.data
+                if(this.formConfig.tableName =='boman_temp_leaveform'){
+                  // consolelog(123456)
+                  // if(){
+
+                  // }
+                }
+              }
+              this.loading = false;
+            })
+            console.log(this.huetge)
+          }
+        }else{
+          console.log(this.jueg)
+          console.log(this.formConfig.columnName,12)
+          // let str = this.getDyn(col, this.queryData.showData,comp)
+           this.queryData.showData.filter(route => {
+             route.hrChildren.filter(routerst => {
+               if (routerst.columnName == 'leavefrom_start_time') {
+                 console.log(routerst.columnValue)
+                 this.huetge.leavefrom_start_time = routerst.columnValue
+               }
+               if(routerst.columnName == 'leavefrom_end_time'){
+                  this.huetge.leavefrom_end_time = routerst.columnValue
+               }
+
+             })
+           })
+           listIndextime( this.huetge).then(response => {
+             if (response.code == 200) {
+               this.config[this.formConfig.columnName] = response.data
+             }
+             this.loading = false;
+           })
+
+        }
+
+      },
+      eval(code){
+        let fun = new Function(`return ${code}`)();
+        return fun
+      },
+      listIndexfouFn() {
+        listIndexfou(this.aliemg).then(response => {
+          if (response.data) {
+            this.filterList = response.data.rows
+            console.log(this.filterList,876)
+          }
+          this.loading = false;
+        })
+      },
+      remoteMethod(query) {
+        if (query !== '') {
+          this.loading = true;
+          this.aliemg.fixedData.condition[this.formConfig.fkInfo.dkColumnName] = query
+          this.listIndexfouFn()
+        } else {
+          this.filterList = [];
+        }
+      },
+      upImageFn(res, file) {
+        this.config.push(res.data);
+        console.log(this.config)
+      },
+      err(){
+       console.log(35)
+      },
+      init() {
+        if (this.formConfig.htmlType == 'checkbox' || this.formConfig.htmlType == 'imageUpload' || this.formConfig.htmlType ==
+          'fileUpload') {
+          this.config = []
+        } else {
+          this.$set(this.config, this.formConfig.columnName, ((this.formConfig.columnValue ? this.formConfig.columnValue :
+            this.formConfig.defaultValue) || ''))
+        }
+        if (this.formConfig.htmlType == 'cascader'){
+          console.log(this.formConfig.sysDictData,987)
+
+          for(var i = 0 ; i< this.formConfig.sysDictData.length; i++){
+            this.getChilds(this.formConfig.sysDictData[i])
+          }
+
+        }
+
+
+        if (this.formConfig.fkInfo) {
+          this.aliemg.table = this.formConfig.fkInfo.fkTableName
+          if (this.formConfig.fkInfo.value) {
+            this.aliemg.fixedData.condition[this.formConfig.fkInfo.dkColumnName] = this.formConfig.fkInfo.value
+            this.formConfig.fkInfo.name = this.formConfig.fkInfo.name - 0
+            this.formConfig.columnValue  = this.formConfig.columnValue - 0
+            console.log(this.formConfig.fkInfo.name,this.formConfig.columnValue)
+          }
+          this.listIndexfouFn()
+        }
+      },
+      handleChange(file, fileList) {
+        this.fileList = fileList.slice(-3);
+      },
+      getToken() {
+        return getToken()
+      },
+      reseImage(file, fileList) {
+        let urls = ""
+        if (file.response) {
+          urls = file.response.url
+        } else {
+          urls = file.url
+        }
+        for (let i = this.config.length - 1; i >= 0; i--) {
+          if (this.config[i].url == urls) {
+            this.config.splice(i, 1);
+          }
+        }
+      },
+      reseImage1(file, fileList) {
+        let urls = ""
+        if (file.response) {
+          urls = file.response.url
+        } else {
+          urls = file.url
+        }
+        for (let i = this.config.length - 1; i >= 0; i--) {
+          if (this.config[i].url == urls) {
+            this.config.splice(i, 1);
+          }
+        }
+      },
+      handlePictureCardPreview(file) {
+        console.log(file)
+        this.dialogImageUrl = file.url;
+        this.dialogVisible = true;
+      },
+      handleDownload(file) {
+        console.log(file);
+      },
+      handleQuery() {
+        this.$emit('btns')
+      },
+      handleCheckedCitiesChange(value) {
+        console.log(this.config)
+      },
+      /** 转换组数据结构 */
+      normalizerty(node) {
+        return {
+          id: node.id,
+          label: node.groupName,
+        };
+      },
+      djieskletwo(node, instanceId) {
+        // this.members(node.id);
+        // this.elezu = node.id
+        console.log(node, instanceId);
+      },
+      // 筛选节点
+      filterNode(value, data) {
+        console.log(value,data)
+        if (!value) return true;
+        return data.label.indexOf(value) !== -1;
+      },
+      // 节点单击事件
+      handleNodeClick(data) {
+        console.log(data);
+        // this.queryParams.deptId = data.id;
+        // this.staff(data.id);
+        // this.quandet = false
+        // this.getList();
+      },
+      handleChangety(value,ik){
+        // if(value.length ==1){
+        //   this.queryParams.referralList[1].sysDeptId = value.join(',')
+        // }else{
+        //   this.queryParams.referralList[1].sysDeptId = value[value.length-1]
+        // }
+        //1
+      console.log(value,ik)
+      },
+      getCheckedNodes(value){
+        // console.log(value)
+      },
+      formateDate(datetime) {
+          function addDateZero(num) {
+              return (num < 10 ? "0" + num : num);
+          }
+          let d = new Date(datetime);
+          let formatdatetime = d.getFullYear() + '-' + addDateZero(d.getMonth() + 1) + '-' + addDateZero(d.getDate()) + ' ' + addDateZero(d.getHours()) + ':' + addDateZero(d.getMinutes()) + ':' + addDateZero(d.getSeconds());
+          return formatdatetime;
+      },
+      // 递归
+      getChilds(data){
+        console.log(data,67)
+        if(data !== null){
+          console.log(7)
+          if(data.children.length == 0){
+            data.children = undefined
+          }else{
+            for(var i = 0 ; i< data.children.length; i++){
+              if(data.children[i].length == 0){
+                // data.children[i] = undefined
+                // console.log(data.children[i],8)
+              }else{
+                // console.log(data.children[i],9)
+                this.getChilds(data.children[i])
+              }
+              // console.log(data.children[i],10)
+            }
+          }
+
+        }
+
+        // if(data.children.length == 0){
+        //   data.children = null
+        // }else{
+        //   this.getChilds(data.children)
+        // }
+      },
+      getUser() {
+        getUserProfile().then(response => {
+          this.huetge.dept_id = response.data.deptId;
+        });
+      },
+    }
+  }
+</script>
+
+<style>
+</style>

+ 1 - 1
src/layout/components/Sidebar/Logo.vue

@@ -36,7 +36,7 @@ export default {
   },
   data() {
     return {
-      title: '潜山市云数据中心',
+      title: '潜山市防疫数据平台',
       logo: logoImg
     }
   }

+ 7 - 0
src/main.js

@@ -18,6 +18,11 @@ import router from './router'
 import permission from './directive/permission'
 import { download } from '@/utils/request'
 import { getDyn } from '@/utils/currencyFn'
+import { pcaa } from 'area-data-vue';
+
+import 'area-linkage-vue/dist/index.css';
+
+import VueAreaLinkage from 'area-linkage-vue';
 
 import '@/utils/dateApi'
 
@@ -51,6 +56,8 @@ Vue.prototype.selectDictLabels = selectDictLabels
 Vue.prototype.download = download
 Vue.prototype.getDyn = getDyn
 Vue.prototype.handleTree = handleTree
+Vue.prototype.$pcaa = pcaa;
+Vue.use(VueAreaLinkage);
 
 Vue.prototype.msgSuccess = function (msg) {
   this.$message({ showClose: true, message: msg, type: "success" });

+ 21 - 21
src/router/index.js

@@ -71,27 +71,27 @@ export const constantRoutes = [
         name: '首页',
         meta: { title: '首页', icon: 'dashboard', noCache: true, affix: true }
       },
-      {
-        path: 'index/approval',
-        hidden: false,
-        component: approval,
-        name: '待我审批',
-        meta: { title: '待我审批', icon: 'dashboard', noCache: false},
-      },
-      {
-        path: 'index/handled',
-        hidden: false,
-        component: handled,
-        name: '已办理',
-        meta: { title: '已办理', icon: 'dashboard', noCache: false},
-      },
-      {
-        path: 'index/tongj',
-        hidden: false,
-        component: tongj,
-        name: '打卡记录',
-        meta: { title: '打卡记录', icon: 'dashboard', noCache: false},
-      },
+      // {
+      //   path: 'index/approval',
+      //   hidden: false,
+      //   component: approval,
+      //   name: '待我审批',
+      //   meta: { title: '待我审批', icon: 'dashboard', noCache: false},
+      // },
+      // {
+      //   path: 'index/handled',
+      //   hidden: false,
+      //   component: handled,
+      //   name: '已办理',
+      //   meta: { title: '已办理', icon: 'dashboard', noCache: false},
+      // },
+      // {
+      //   path: 'index/tongj',
+      //   hidden: false,
+      //   component: tongj,
+      //   name: '打卡记录',
+      //   meta: { title: '打卡记录', icon: 'dashboard', noCache: false},
+      // },
       // {
       //   path: '',
       //   name: '流程工作台',

+ 2 - 2
src/settings.js

@@ -1,8 +1,8 @@
 module.exports = {
-  title: '潜山市云数据中心',
+  title: '潜山市防疫数据平台',
   // urls: `http://118.178.139.79:7090`,
   // urls: `http://192.168.101.110:8090`,
-   urls: `http://192.168.101.11:8090`,
+   urls: `https://qsfy.qs163.cn`,
 
   /**
    * 侧边栏主题 深色主题theme-dark,浅色主题theme-light

+ 1333 - 1337
src/views/index.vue

@@ -1,115 +1,87 @@
 <template>
-  <div class="app-container home">
-    <el-row :gutter="5">
-      <el-col :sm="24" :lg="17" >
-        <div class="index_heade">
-          <img src="../assets/images/icon_more.png" alt="" class="index_headerImg">
-          <p class="index_headetab">
-            <span :class="[num == index ? ' spanto' : '']" v-for="(item,index) in editableTabs" :key="index" @click="tabSbu(item.dictValue)">{{item.dictLabel}}</span>
-          </p>
-                <div style="height: 87%;">
-                  <ul class="index_headerUl">
-                    <li v-for="(item,index) in configList" :key="index" @click="headerCld(item)">
-                        <img src="../assets/images/icon_list_sj.png" alt="">
-                        <p>{{item.notice_title}}</p>
-                        <span>{{item.create_time}}</span>
-                    </li>
-                  </ul>
-                  <div class="index_haderPagin">
-                    <el-pagination
-                          v-show="total>0"
-                         @size-change="handleSizeChange"
-                         @current-change="handleCurrentChange"
-                         :current-page.sync="currentPage3"
-                         :page-size="queryParams.pageSize"
-                         layout="prev, pager, next, jumper"
-                         :total="total">
-                    </el-pagination>
-                    <span>共 {{total}} 条  每页显示 10 条  </span>
-                  </div>
-                </div>
-        </div>
-        <!-- 列表 -->
-          <!-- <el-col :sm="24" :lg="24"  style="margin-top: 20px;" >
-               <div class="index_heade index_headeNav" v-show="true">
-                 <img src="../assets/images/icon_more.png" alt="" class="index_headerImg">
-                 <p class="index_headetab">
-                   <span :class="[numlist == index ? ' spanto' : '']" v-for="(item,index) in attendance" :key="index" @click="tabList(index)">{{item}} <p class="tab_i">3</p></span></span>
-                 </p>
-
-                         <div v-if="num == 0">
-                           <el-table :data="tableDataalid" style="width: 100%;margin-top: 10px;"  :stripe="true"   >
-                                  <el-table-column label="序号" align="center" prop="noticeId" width="60" height="53" max-height="53" />
-                                  <el-table-column
-                                    label="申请人"
-                                    align="center"
-                                    prop="name"
-                                    :show-overflow-tooltip="true"
-                                    width="70"
-                                  />
-                                  <el-table-column
-                                    label="部门"
-                                    align="center"
-                                    prop="name"
-
-                                    width="70"
-                                  />
-                                  <el-table-column
-                                    label="请假类型"
-                                    align="center"
-                                    prop="status"
-
-                                    width="75"
-                                  />
-                                  <el-table-column label="请假事由" align="center" prop="createBy" width="100"  :show-overflow-tooltip="true"/>
-                                  <el-table-column label="请假时间" align="center" prop="date" width="150"/>
-                                  <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-                                    <template slot-scope="scope">
-                                      <el-button
-                                        size="small"
-                                        type="success"
-                                        @click="handleUpdate(scope.row)"
-                                        v-hasPermi="['system:notice:edit']"
-                                      >详情</el-button>
-                                      <el-button
-                                        size="small"
-                                        type="primary"
-                                        @click="handleDelete(scope.row)"
-                                        v-hasPermi="['system:notice:remove']"
-                                      >同意</el-button>
-                                      <el-button
-                                        size="small"
-                                        type="danger"
-                                        @click="handleDelete(scope.row)"
-                                        v-hasPermi="['system:notice:remove']"
-                                      >驳回</el-button>
-                                    </template>
-                                  </el-table-column>
-                                 </el-table>
-                           <div class="index_haderPagin">
-                             <el-pagination
-                                  @size-change="handleSizeChange"
-                                  @current-change="handleCurrentChange"
-                                  :current-page.sync="currentPage3"
-                                  :page-size="pageSize"
-                                  layout="prev, pager, next, jumper"
-                                  :total="1000">
-                             </el-pagination>
-                             <span>共 85 条  每页显示 5 条  当前 1/17 页</span>
-                           </div>
-                         </div>
-               </div>
-          </el-col> -->
-        <!-- </el-row> -->
-        <!-- 公司概况 -->
-        <el-col :sm="24" :lg="24">
+	<div class="app-container home">
+		<el-row :gutter="5">
+			<el-col :sm="24" :lg="17">
+				<div class="index_heade index_headeNav" >
+					<div  style="padding-top: 20px;">
+						<el-table height="500" max-height="500" :data="tjsli" style="width: 100%;margin-top: 10px;" :stripe="true">
+							<el-table-column  fixed prop="xz" label="乡镇" align="center" ></el-table-column>
+							<el-table-column   label="18岁以上第一针完成情况" align="center">
+								<el-table-column fixed  prop="zrws" label="总任务数"  align="center"></el-table-column>
+								<!-- <el-table-column label="地址"> -->
+									<el-table-column  prop="zjzs" label="总接种数" align="center"></el-table-column>
+									<el-table-column  prop="wcl1" label="完成率" align="center"></el-table-column>
+									<el-table-column  prop="wwcs" label="未完成数 " align="center"></el-table-column>
+									<el-table-column  prop="drjzs" label="当日接种数" align="center"></el-table-column>
+									
+								<!-- </el-table-column> -->
+							</el-table-column>
+							<el-table-column label="第二针当日完成情况" align="center">
+								<el-table-column  prop="drrws" label="当日任务数" align="center"></el-table-column>
+								<el-table-column label="接种数" align="center">
+									<el-table-column  prop="dez" label="第二针" align="center" ></el-table-column>
+									<el-table-column  prop="dsz" label="第三针" align="center" ></el-table-column>
+									<el-table-column  prop="hj" label="合计" align="center" ></el-table-column>
+									
+								
+								</el-table-column>
+								<el-table-column  prop="wcl2" label="完成率" align="center" ></el-table-column>
+							</el-table-column>
+						</el-table>
+						<div class="index_haderPagin">
+							<!-- <el-pagination
+								@size-change="handleSizeChange"
+								@current-change="handleCurrentChange"
+								:current-page.sync="currentPage3"
+								:page-size="pageSize"
+								layout="prev, pager, next, jumper"
+								:total="1000"
+							></el-pagination>
+							<span>共 85 条 每页显示 5 条 当前 1/17 页</span> -->
+						</div>
+					</div>
+				</div>
+				<!-- 列表 -->
+				<el-col :sm="24" :lg="24" style="margin-top: 20px; ">
+					<div class="index_heade">
+						<img src="../assets/images/icon_more.png" alt="" class="index_headerImg" />
+						<p class="index_headetab">
+							<span :class="[num == index ? ' spanto' : '']" v-for="(item, index) in editableTabs" :key="index" @click="tabSbu(item.dictValue)">
+								{{ item.dictLabel }}
+							</span>
+						</p>
+						<div style="height: 87%;">
+							<ul class="index_headerUl">
+								<li v-for="(item, index) in configList" :key="index" @click="headerCld(item)">
+									<img src="../assets/images/icon_list_sj.png" alt="" />
+									<p>{{ item.notice_title }}</p>
+									<span>{{ item.create_time }}</span>
+								</li>
+							</ul>
+							<div class="index_haderPagin">
+								<el-pagination
+									v-show="total > 0"
+									@size-change="handleSizeChange"
+									@current-change="handleCurrentChange"
+									:current-page.sync="currentPage3"
+									:page-size="queryParams.pageSize"
+									layout="prev, pager, next, jumper"
+									:total="total"
+								></el-pagination>
+								<span>共 {{ total }} 条 每页显示 10 条</span>
+							</div>
+						</div>
+					</div>
+					
+				</el-col>
+				<!-- </el-row> -->
+				<!-- 公司概况 -->
+				<!-- <el-col :sm="24" :lg="24">
            <div class="index_heade  index_headeProfile">
              <img src="../assets/images/icon_tjbj.png" alt="" class="index_headerImg">
             <p class="index_headetab">
               <span :class="[numprofile == index ? ' spanto' : '']" v-for="(item,index) in editableTabsteo" :key="index" @click="tabSbuprofile(item.dictValue)">{{item.dictLabel}} </span>
             </p>
-            <!-- <el-tabs v-model="activeName" @tab-click="handleClick">
-                 <el-tab-pane label="用户管理" name="first"> -->
                    <div style="height: 84%;">
                         <div style="height: 85%;">
                           <h3 style="text-align: center; margin: 35px 0; margin-bottom: 0;" v-html="tieku"></h3>
@@ -117,7 +89,6 @@
                             <div class="index_profilep" v-html="comg"></div>
                           </pre>
                         </div>
-                                      <!-- {{getLisprofileone[0].info_content}} -->
                                       <div class="index_haderPagin">
                                         <el-pagination
                                              @size-change="handleSizeChangeprofile"
@@ -131,1266 +102,1291 @@
                                       </div>
                    </div>
            </div>
-        </el-col>
-      </el-col>
+        </el-col> -->
+			</el-col>
 
-      <el-col :sm="24" :lg="7" style="padding-left: 15px">
-         <div class="index_nav">
-          <div class="index_navTime">
-            <p class="index_navTimep" @click="handleAdd">
-              <span>日程</span>
-              <span><i class="el-icon-date" ></i>创建日程</span>
-            </p>
-            <el-calendar id="calendar">
-                <!-- 这里使用的是 2.5 slot 语法,对于新项目请使用 2.6 slot 语法-->
-                <template
-                  slot="dateCell"
-                  slot-scope="{date, data}">
-                  <!--自定义内容-->
-                  <div>
-                    <div class="calendar-day" style="text-align: center">
-                      <el-tooltip v-if="brightDate.indexOf(data.day) != -1" class="item" effect="dark" :content="content(data.day)" placement="right">
-                        <span class="everyDay">{{ data.day.split('-').slice(2).join('-') }}</span>
-                      </el-tooltip>
-                      <span v-else>{{ data.day.split('-').slice(2).join('-') }}</span>
-                      <!-- <p :class="data.isSelected ? 'is-selected' : ''">
+			<el-col :sm="24" :lg="7" style="padding-left: 15px">
+				<div class="index_nav">
+					<div class="index_navTime">
+						<p class="index_navTimep" @click="handleAdd">
+							<span>日程</span>
+							<span>
+								<i class="el-icon-date"></i>
+								创建日程
+							</span>
+						</p>
+						<el-calendar id="calendar">
+							<!-- 这里使用的是 2.5 slot 语法,对于新项目请使用 2.6 slot 语法-->
+							<template slot="dateCell" slot-scope="{ date, data }">
+								<!--自定义内容-->
+								<div>
+									<div class="calendar-day" style="text-align: center">
+										<el-tooltip v-if="brightDate.indexOf(data.day) != -1" class="item" effect="dark" :content="content(data.day)" placement="right">
+											<span class="everyDay">
+												{{
+													data.day
+														.split('-')
+														.slice(2)
+														.join('-')
+												}}
+											</span>
+										</el-tooltip>
+										<span v-else>
+											{{
+												data.day
+													.split('-')
+													.slice(2)
+													.join('-')
+											}}
+										</span>
+										<!-- <p :class="data.isSelected ? 'is-selected' : ''">
                             {{ data.day.split('-').slice(1).join('-') }} {{ data.isSelected ? '✔️' : ''}}
                       </p> -->
-                    </div>
-                  </div>
-                </template>
-              </el-calendar>
-            <img src="../assets/images/pic_kpbg.png" alt="" class="index_navTimeimg">
-          </div>
-         </div>
-         <!-- 备忘录 -->
-         <el-col :sm="24" :lg="24" >
-           <div class="index_nav index_memoranduNnavTime">
-            <div class="index_navTime ">
-              <p class="index_navTimep">
-                <span>备忘录</span>
-                <span @click="memoere"><i class="el-icon-date"></i>创建备忘录</span>
-              </p>
-              <ul >
-                <li v-for="(item,index) in getmemorandum" :key="index" >
-                  <p>{{item.memorandum_title}}
-                  </p>
-                  <div class="index_navspande">
-                    <span>
-                    {{item.remind_time}}
-                    </span>
-                    <img src="../assets/images/deletety.png" alt="" v-if="shower" @click="index_deledetfe(item.id)">
-                  </div>
-                </li>
-
-              </ul>
-              <img src="../assets/images/icon_more.png" alt="" class="imjud">
-<!--              <el-calendar v-model="value">
+									</div>
+								</div>
+							</template>
+						</el-calendar>
+						<img src="../assets/images/pic_kpbg.png" alt="" class="index_navTimeimg" />
+					</div>
+				</div>
+				<!-- 备忘录 -->
+				<el-col :sm="24" :lg="24">
+					<div class="index_nav index_memoranduNnavTime">
+						<div class="index_navTime ">
+							<p class="index_navTimep">
+								<span>备忘录</span>
+								<span @click="memoere">
+									<i class="el-icon-date"></i>
+									创建备忘录
+								</span>
+							</p>
+							<ul>
+								<li v-for="(item, index) in getmemorandum" :key="index">
+									<p>{{ item.memorandum_title }}</p>
+									<div class="index_navspande">
+										<span>{{ item.remind_time }}</span>
+										<img src="../assets/images/deletety.png" alt="" v-if="shower" @click="index_deledetfe(item.id)" />
+									</div>
+								</li>
+							</ul>
+							<img src="../assets/images/icon_more.png" alt="" class="imjud" />
+							<!--              <el-calendar v-model="value">
               </el-calendar> -->
 
-              <img src="../assets/images/pic_kpbg.png" alt="" class="index_navTimeimg">
-            </div>
-           </div>
-         </el-col >
-         <!-- 通讯录 -->
-         <el-col :sm="24" :lg="24">
-           <div class="index_nav index_memoranduMail">
-                       <div class="index_navTime ">
-                         <p class="index_navTimep">
-                           <span>通讯录</span>
-                           <img src="../assets/images/icon_more.png" alt="" class="index_navTimeimgtwo">
-                           <!-- <span><i class="el-icon-date"></i>创建日程</span> -->
-                         </p>
-                        <div class="index_memoranduMailnav">
-                           <div class="tab_tol">
-                             <el-form class="iejgu" :model="queryParamsail" ref="queryForm" :inline="true" >
-                               <dynamic-forms :type="0" :ref="item.columnName" :config="queryParamsail" @inputs="changeFn" :formConfig="item"
-                                 v-for="(item,index) in queryDataali.queryList" :key='index' />
-                               <el-form-item style="width: 20%; text-align: right;">
-                                 <el-button type="primary"  size="mini" @click="handleQuerygty">搜索</el-button>
-
-                               </el-form-item>
-                             </el-form>
-                             <el-table  stripe v-loading="loading" :data="postList.rows" @selection-change="handleSelectionChange">
-                               <el-table-column :width="item.columnComment == 'id'? '40' : item.columnComment == '姓名'? '60' : '110'"  :label="item.columnComment" align="left" :prop="item.columnName" v-for="(item,index) in postList.tableHeadList" :key="index"  />
-                             </el-table>
-                           </div>
-                          <div class="index_haderPagin index_haderPaginfoiu">
-                            <!-- getLisail -->
-                            <el-pagination
-                                 @size-change="handleSizeChangeali"
-                                 @current-change="handleCurrentChangeali"
-                                 :current-page.sync="currentPage3"
-                                 :page-size="queryParamsail.pageSize"
-                                 :small= "true"
-                                 layout="prev, pager, next, jumper"
-                                 :total="totalali">
-                            </el-pagination>
-                          </div>
-                        </div>
-                      <img src="../assets/images/pic_kpbg.png" alt="" class="index_navTimeimg">
-                       </div>
-            </div>
-         </el-col>
-
-
-      </el-col>
-    </el-row>
-    <!-- <el-divider /> -->
-  <!-- 添加或修改公告对话框 -->
-  <el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="980px" append-to-body>
-            <el-form ref="form" :model="form" :rules="queryData.rules" label-width="160px" class="from_index">
-              <el-row>
-                <el-col :span="24" >
-                 <dynamic-forms @modelFn="modelFn"   :ref="item.columnName" :config="form.fixedData" @inputs = "changeFn" :formConfig="item" v-for="(item,index) in queryData.showData" :key='index' />
-                </el-col>
-              </el-row>
-            </el-form>
-            <div slot="footer" class="dialog-footer">
-              <el-button type="primary" @click="handleQuery">确 定</el-button>
-              <el-button @click="cancel">取 消</el-button>
-            </div>
-  </el-dialog>
-  <!-- 通知公告弹窗 -->
-  <el-dialog class="index_ese" :close-on-click-modal="false" :title="title" :visible.sync="openety" width="980px" append-to-body>
-           <div class="index_headertan" >
-               <p v-html="actingk.notice_title == undefined? '暂无数据' : actingk.notice_title"></p>
-               <p>{{actingk.create_time == undefined? '暂无数据' : actingk.create_time}} 发布人:{{actingk.create_by}}</p>
-               <pre>
+							<img src="../assets/images/pic_kpbg.png" alt="" class="index_navTimeimg" />
+						</div>
+					</div>
+				</el-col>
+				<!-- 通讯录 -->
+				<el-col :sm="24" :lg="24">
+					<div class="index_nav index_memoranduMail">
+						<div class="index_navTime ">
+							<p class="index_navTimep">
+								<span>通讯录</span>
+								<img src="../assets/images/icon_more.png" alt="" class="index_navTimeimgtwo" />
+								<!-- <span><i class="el-icon-date"></i>创建日程</span> -->
+							</p>
+							<div class="index_memoranduMailnav">
+								<div class="tab_tol">
+									<el-form class="iejgu" :model="queryParamsail" ref="queryForm" :inline="true">
+										<dynamic-forms
+											:type="0"
+											:ref="item.columnName"
+											:config="queryParamsail"
+											@inputs="changeFn"
+											:formConfig="item"
+											v-for="(item, index) in queryDataali.queryList"
+											:key="index"
+										/>
+										<el-form-item style="width: 20%; text-align: right;">
+											<el-button type="primary" size="mini" @click="handleQuerygty">搜索</el-button>
+										</el-form-item>
+									</el-form>
+									<el-table stripe v-loading="loading" :data="postList.rows" @selection-change="handleSelectionChange">
+										<el-table-column
+											:width="item.columnComment == 'id' ? '40' : item.columnComment == '姓名' ? '60' : '110'"
+											:label="item.columnComment"
+											align="left"
+											:prop="item.columnName"
+											v-for="(item, index) in postList.tableHeadList"
+											:key="index"
+										/>
+									</el-table>
+								</div>
+								<div class="index_haderPagin index_haderPaginfoiu">
+									<!-- getLisail -->
+									<el-pagination
+										@size-change="handleSizeChangeali"
+										@current-change="handleCurrentChangeali"
+										:current-page.sync="currentPage3"
+										:page-size="queryParamsail.pageSize"
+										:small="true"
+										layout="prev, pager, next, jumper"
+										:total="totalali"
+									></el-pagination>
+								</div>
+							</div>
+							<img src="../assets/images/pic_kpbg.png" alt="" class="index_navTimeimg" />
+						</div>
+					</div>
+				</el-col>
+			</el-col>
+		</el-row>
+		<!-- <el-divider /> -->
+		<!-- 添加或修改公告对话框 -->
+		<el-dialog :close-on-click-modal="false" :title="title" :visible.sync="open" width="980px" append-to-body>
+			<el-form ref="form" :model="form" :rules="queryData.rules" label-width="160px" class="from_index">
+				<el-row>
+					<el-col :span="24">
+						<dynamic-forms
+							@modelFn="modelFn"
+							:ref="item.columnName"
+							:config="form.fixedData"
+							@inputs="changeFn"
+							:formConfig="item"
+							v-for="(item, index) in queryData.showData"
+							:key="index"
+						/>
+					</el-col>
+				</el-row>
+			</el-form>
+			<div slot="footer" class="dialog-footer">
+				<el-button type="primary" @click="handleQuery">确 定</el-button>
+				<el-button @click="cancel">取 消</el-button>
+			</div>
+		</el-dialog>
+		<!-- 通知公告弹窗 -->
+		<el-dialog class="index_ese" :close-on-click-modal="false" :title="title" :visible.sync="openety" width="980px" append-to-body>
+			<div class="index_headertan">
+				<p v-html="actingk.notice_title == undefined ? '暂无数据' : actingk.notice_title"></p>
+				<p>{{ actingk.create_time == undefined ? '暂无数据' : actingk.create_time }} 发布人:{{ actingk.create_by }}</p>
+				<pre>
                  <div v-html="actingk.notice_content"></div>
                </pre>
-           </div>
-
-  </el-dialog>
-
-  </div>
+			</div>
+		</el-dialog>
+	</div>
 </template>
 
 <script>
-import { listIndex, getUserProfile, listIndextwo, listIndextherr, listIndexfou, listIndextanl, getConfig, delConfig, addConfig, addConfigindex, updateConfig, clearCache, delIndexnabd,listIndexber, getTableQuery } from "@/api/system/config";
+import {
+	listIndex,
+	getUserProfile,
+	listIndextwo,
+	listIndextherr,
+	listIndexfou,
+	listIndextanl,
+	getConfig,
+	delConfig,
+	addConfig,
+	addConfigindex,
+	updateConfig,
+	clearCache,
+	delIndexnabd,
+	listIndexber,
+	getTableQuery,
+	tjList
+} from '@/api/system/config';
 import Editor from '@/components/Editor';
 export default {
-  name: "index",
-  components: {
-    Editor
-  },
-  data() {
-    return {
-      // 版本号
-      version: "2.5.0",
-       currentPage3: 1,
-       total:0,
-       totalprofile:0,
-       totalali:0,
-       pageSize:6,
-       activeName: 'second',
-       // 是否显示弹出层
-       open: false,
-       // 弹出层标题
-       title: "",
-       value: new Date(),
-       editableTabs: [],
-       attendance:['待我审批','已办理','我的流程','驳回审批'],
-       editableTabsteo:[],
-       configList:[],
-       queryParams:{
-        table:'sys_notice',
-        orderBy:'create_time desc',
-        pageNo:1,
-        pageSize:10,
-        fixedData:{
-          condition:{
-            notice_type:1,
-            status:0
-          }
-        }
-
-      },
-      queryParamstab:{
-        table:'sys_notice',
-        orderBy:'create_time desc',
-        pageNo:1,
-        pageSize:6,
-        condition:{
-          notice_type:1
-        }
-      },
-      // 公司概况
-      queryParamstabprofile:{
-        table:'sys_info',
-        orderBy:'create_time desc',
-        pageNo:1,
-        pageSize:1,
-        fixedData:{
-          condition:{
-            info_type:1
-          }
-        }
-
-      },
-      // 日历
-      queryParamscalendar:{
-        table:'sys_schedule',
-        orderBy:'create_time desc',
-        pageNo:1,
-        pageSize:10,
-        fixedData:{
-          condition:{
-            create_by:''
-          }
-        }
-      },
-      // 备忘录
-      queryParamstabmemorandum:{
-        table:'sys_memorandum',
-        orderBy:'create_time desc',
-        pageNo:1,
-        pageSize:6,
-        fixedData:{
-          condition:{
-            create_by:''
-          }
-        }
-      },
-      // 通讯录
-      queryParamsail:{
-        table:'sys_contacts',
-        orderBy:'create_time desc',
-        pageNo:1,
-        pageSize:3,
-        fixedData:{
-          condition:{
-
-          }
-        }
-      },
-      // 通讯录搜索
-      queryParamsailss:{
-       table: '',
-       pageNo: 1,
-       isUi: false,
-       pageSize: 10,
-       orderBy: 'create_time desc',
-       fixedData: {
-         condition: {
-
-         }
-       }
-      },
-      queryParamsijeu:{
-        table:'sys_contacts',
-      },
-      num:0,
-      numlist:0,
-      numprofile:0,
-      dictType:'sys_notice_type',
-      // 公司概况
-      dictTypetwo:'sys_describe_type',
-      gettabList:[],
-      getLisprofileone:[],
-      // 备忘录
-      getmemorandum:[],
-      //通讯录参数
-      aliemg:{
-        table:'sys_contacts',
-        orderBy:'create_time desc',
-        pageNo:1,
-        pageSize:4,
-      },
-      tableDataalid:[],
-      getLisaillie:[],
-      alendarList:[],
-      calendarData: [
-            ],
-      ary:[],
-      tieku:'',
-      comg:'',
-      aekti:'',
-      // 弹框数据
-      form:{
-      },
-      // 表单校验
-      rules: {
-      },
-      //日历弹框
-      calendaradd:{
-        table:'sys_schedule',
-        isUi:false,
-        fixedData:{
-          id:-1
-        }
-
-      },
-      //备忘录弹框
-      calendaraddmer:{
-        table:'sys_memorandum',
-        isUi:false,
-        fixedData:{
-          id:-1
-        }
-      },
-      // input
-      inputList:[],
-      // 时间
-      dataList:[],
-      //单选框
-      radiolist:[],
-      // 复选框
-      chekbosList:[],
-      //下拉框
-      selectList:[],
-      editorList:[],
-      queryData: {},
-      queryDatatwo:{},
-      queryDatathre:{},
-      queryDataali:{},
-      nummer:0   ,//0 是日历  1 是备忘录
-      forme:{
-        table:'',
-        objId:-1,
-        fixedData:{}
-      },
-      rjtu:[],
-      truew:[],
-      fales:[],
-      postList:{},
-      arr:'2,2,3,3,4,4',
-      // 删除参数
-      deledlid:{
-        table:'sys_memorandum',
-        idList:[],
-        user: {
-          oldPassword: undefined,
-          newPassword: undefined,
-          confirmPassword: undefined
-        },
-        shower:true, //判断删除图标是否显示
-      },
-      titlees:'通知公告',//通知公告弹框
-      openety:false,
-      actingk:{}
-    };
-  },
-
-  created() {
-    // console.log(this.user)
-    this.unique(this.arr)
-    this.getList()
-    this.getListtab()
-    this.getLiser()
-    this.getLisprofile()
-    // 用户信息
-    this.getUser()
-    // this.getLismemorandum()  //备忘录
-    this.getLisail()//通讯录
-    this.getLisailtwo()
-    this.init()
+	name: 'index',
+	components: {
+		Editor
+	},
+	data() {
+		return {
+			// 版本号
+			version: '2.5.0',
+			currentPage3: 1,
+			total: 0,
+			totalprofile: 0,
+			totalali: 0,
+			pageSize: 6,
+			activeName: 'second',
+			// 是否显示弹出层
+			open: false,
+			// 弹出层标题
+			title: '',
+			value: new Date(),
+			editableTabs: [],
+			attendance: ['待我审批', '已办理', '我的流程', '驳回审批'],
+			editableTabsteo: [],
+			configList: [],
+			queryParams: {
+				table: 'sys_notice',
+				orderBy: 'create_time desc',
+				pageNo: 1,
+				pageSize: 10,
+				fixedData: {
+					condition: {
+						notice_type: 1,
+						status: 0
+					}
+				}
+			},
+			queryParamstab: {
+				table: 'sys_notice',
+				orderBy: 'create_time desc',
+				pageNo: 1,
+				pageSize: 6,
+				condition: {
+					notice_type: 1
+				}
+			},
+			// 公司概况
+			queryParamstabprofile: {
+				table: 'sys_info',
+				orderBy: 'create_time desc',
+				pageNo: 1,
+				pageSize: 1,
+				fixedData: {
+					condition: {
+						info_type: 1
+					}
+				}
+			},
+			// 日历
+			queryParamscalendar: {
+				table: 'sys_schedule',
+				orderBy: 'create_time desc',
+				pageNo: 1,
+				pageSize: 10,
+				fixedData: {
+					condition: {
+						create_by: ''
+					}
+				}
+			},
+			// 备忘录
+			queryParamstabmemorandum: {
+				table: 'sys_memorandum',
+				orderBy: 'create_time desc',
+				pageNo: 1,
+				pageSize: 6,
+				fixedData: {
+					condition: {
+						create_by: ''
+					}
+				}
+			},
+			// 通讯录
+			queryParamsail: {
+				table: 'sys_contacts',
+				orderBy: 'create_time desc',
+				pageNo: 1,
+				pageSize: 3,
+				fixedData: {
+					condition: {}
+				}
+			},
+			// 通讯录搜索
+			queryParamsailss: {
+				table: '',
+				pageNo: 1,
+				isUi: false,
+				pageSize: 10,
+				orderBy: 'create_time desc',
+				fixedData: {
+					condition: {}
+				}
+			},
+			queryParamsijeu: {
+				table: 'sys_contacts'
+			},
+			num: 0,
+			numlist: 0,
+			numprofile: 0,
+			dictType: 'sys_notice_type',
+			// 公司概况
+			dictTypetwo: 'sys_describe_type',
+			gettabList: [],
+			getLisprofileone: [],
+			// 备忘录
+			getmemorandum: [],
+			//通讯录参数
+			aliemg: {
+				table: 'sys_contacts',
+				orderBy: 'create_time desc',
+				pageNo: 1,
+				pageSize: 4
+			},
+			tableDataalid: [],
+			getLisaillie: [],
+			alendarList: [],
+			calendarData: [],
+			tjsli:[],
+			ary: [],
+			tieku: '',
+			comg: '',
+			aekti: '',
+			// 弹框数据
+			form: {},
+			// 表单校验
+			rules: {},
+			//日历弹框
+			calendaradd: {
+				table: 'sys_schedule',
+				isUi: false,
+				fixedData: {
+					id: -1
+				}
+			},
+			//备忘录弹框
+			calendaraddmer: {
+				table: 'sys_memorandum',
+				isUi: false,
+				fixedData: {
+					id: -1
+				}
+			},
+			// input
+			inputList: [],
+			// 时间
+			dataList: [],
+			//单选框
+			radiolist: [],
+			// 复选框
+			chekbosList: [],
+			//下拉框
+			selectList: [],
+			editorList: [],
+			queryData: {},
+			queryDatatwo: {},
+			queryDatathre: {},
+			queryDataali: {},
+			nummer: 0, //0 是日历  1 是备忘录
+			forme: {
+				table: '',
+				objId: -1,
+				fixedData: {}
+			},
+			rjtu: [],
+			truew: [],
+			fales: [],
+			postList: {},
+			arr: '2,2,3,3,4,4',
+			// 删除参数
+			deledlid: {
+				table: 'sys_memorandum',
+				idList: [],
+				user: {
+					oldPassword: undefined,
+					newPassword: undefined,
+					confirmPassword: undefined
+				},
+				shower: true //判断删除图标是否显示
+			},
+			titlees: '通知公告', //通知公告弹框
+			openety: false,
+			actingk: {}
+		};
+	},
 
-  },
-  computed: {
+	created() {
+		// console.log(this.user)
+		this.unique(this.arr);
+		this.getList();
+		this.getListtab();
+		this.getLiser();
+		this.getLisprofile();
+		// 用户信息
+		this.getUser();
+		// this.getLismemorandum()  //备忘录
+		this.getLisail(); //通讯录
+		this.getLisailtwo();
+		this.init();
+		// 统计列表
+		this.tiheyu()
+	},
+	computed: {
+		// 时间高亮的数组
+		brightDate() {
+			// let ary = []
+			var that = this;
+			if (that.calendarData.length !== null) {
+				for (var i = 0; i < that.calendarData.length; i++) {
+					that.calendarData[i].love = 'yu';
+					if (that.calendarData[i].remind_time !== undefined) {
+						that.ary.push(that.calendarData[i].remind_time);
+					}
+				}
+			}
+			return that.ary;
+		}
+	},
+	methods: {
+		// 通讯录搜索
+		init() {
+			console.log(1243);
+			getTableQuery({
+				table: this.queryParamsijeu.table
+			}).then(res => {
+				let data = res.data;
+				this.queryDataali = data;
+			});
+		},
+		// Tooltip 文字提示
+		content(date) {
+			let data = date;
+			let datase = date;
+			let content = '';
+			let conert = '';
+			let conertre = '';
+			let nujue = 0;
+			for (var i = 0; i < this.calendarData.length; i++) {
+				if (this.calendarData[i].schedule_content !== undefined) {
+					this.calendarData[i].schedule_content = this.calendarData[i].schedule_content.replace(/<\/?[^>]*>/g, '');
+				}
+				if (data == this.calendarData[i].remind_time) {
+					if (content == this.calendarData[i].schedule_content + '、') {
+						content = content;
+					} else {
+						content = content + this.calendarData[i].schedule_content + '、';
+					}
+				}
+			}
+			return content;
+		},
+		modelFn(obj, cont) {
+			this.$set(this.form, obj, cont);
+		},
+		//数据  第一部分列表
+		getList() {
+			this.loading = true;
+			this.configList = [];
+			listIndex(this.queryParams).then(response => {
+				if (response.data.rows !== null) {
+					this.configList = response.data.rows;
+				} else {
+					this.configList.push({ notice_title: '暂无数据' });
+				}
+				this.total = response.data.total;
+				this.loading = false;
+			});
+		},
+		//数据  第二部分列表
+		getListtabone() {
+			this.loading = true;
+			listIndex(this.queryParams).then(response => {
+				this.configList = response.data.rows;
+				this.total = response.data.total;
+				this.loading = false;
+			});
+		},
+		//数据  第三部分列表
+		getLisprofile() {
+			// this.loading = true;
+			listIndexber(this.queryParamstabprofile).then(response => {
+				if (response.data !== undefined) {
+					this.getLisprofileone = response.data.rows;
+					if (response.data.rows !== null) {
+						this.tieku = this.getLisprofileone[0].info_title;
+						this.comg = this.getLisprofileone[0].info_content;
+					} else {
+						this.tieku = '暂无数据';
+						this.comg = '暂无数据';
+					}
+					this.totalprofile = response.data.total;
+				}
+				this.loading = false;
+			});
+		},
+		//数据  日历数据列表
+		getLisalendar() {
+			this.loading = true;
+			this.queryParamscalendar.fixedData.condition.create_by = this.user.userName;
+			listIndex(this.queryParamscalendar).then(response => {
+				if (response.data !== undefined) {
+					this.calendarData = response.data.rows;
+				}
+				this.loading = false;
+			});
+		},
+		//数据  备忘录数据列表
+		getLismemorandum() {
+			this.loading = true;
+			this.getmemorandum = [];
+			this.queryParamstabmemorandum.fixedData.condition.create_by = this.user.userName;
+			listIndex(this.queryParamstabmemorandum).then(response => {
+				if (response.data !== undefined) {
+					if (response.data.rows !== null) {
+						this.shower = true;
+						this.getmemorandum = response.data.rows;
+					} else {
+						this.shower = false;
+						this.getmemorandum.push({ memorandum_title: '暂无数据', shower: false });
+					}
+				}
+				this.loading = false;
+			});
+		},
+		// 数据列表   通讯录数据
+		getLisailtwo() {
+			this.loading = true;
+			listIndex(this.queryParamsail).then(response => {
+				if (response.data !== undefined) {
+					this.getLisaillie = response.data.rows;
+				}
+				this.totalali = response.data.total;
+				this.loading = false;
+			});
+		},
+		//tab 公告 栏数据
+		getListtab() {
+			this.loading = true;
+			listIndextwo(this.dictType).then(response => {
+				this.editableTabs = response.data;
+				this.queryParams.dictType = response.data[1].dictType;
+				// this.total = response.total;
+				this.loading = false;
+			});
+		},
+		// 公司概况  tab
+		getLiser() {
+			this.loading = true;
+			listIndextherr(this.dictTypetwo).then(response => {
+				this.editableTabsteo = response.data;
+				// this.total = response.total;
+				this.loading = false;
+			});
+		},
+		// 通讯录表头
+		getLisail() {
+			this.loading = true;
+			listIndexfou(this.queryParamsail).then(response => {
+				if (response.data !== undefined) {
+					this.tableDataalid = response.data.tableHeadList;
+					this.postList = response.data;
+					if (this.postList.rows !== null) {
+						this.postList.rows.filter(route => {
+							// route.dept_id = route.dept_id.value
+							for (var item in route) {
+								if (typeof route[item] == 'object') {
+									route[item] = route[item].value;
+								}
+							}
+						});
+					}
 
-     // 时间高亮的数组
-     brightDate () {
-       // let ary = []
-       var that =  this
-       if(that.calendarData.length !==null){
-         for (var i = 0 ; i < that.calendarData.length; i++) {
-           that.calendarData[i].love="yu"
-           if(that.calendarData[i].remind_time !== undefined){
-             that.ary.push(that.calendarData[i].remind_time)
-           }
-         }
-       }
-       return that.ary
-     }
+					this.totalali = response.data.total;
+				}
+				this.loading = false;
+			});
+		},
+		//日历新增弹框数据
+		getLisalendaraddd() {
+			this.loading = true;
+			this.queryData = [];
+			listIndextanl(this.calendaradd).then(response => {
+				if (response.data !== undefined) {
+					this.queryData = response.data;
+				}
+				this.loading = false;
+			});
+		},
+		//备忘录新增弹框数据
+		getLisalendaradddmer() {
+			this.loading = true;
+			this.queryData = [];
+			listIndextanl(this.calendaraddmer).then(response => {
+				if (response.data !== undefined) {
+					this.queryData = response.data;
+				}
+				this.loading = false;
+			});
+		},
+		goTarget(href) {
+			window.open(href, '_blank');
+		},
+		handleSizeChange(val) {},
+		handleCurrentChange(val) {
+			this.queryParams.pageNo = val;
+			this.getList();
+		},
+		// 公司概况
+		handleSizeChangeprofile(val) {},
+		handleCurrentChangeprofile(val) {
+			this.queryParamstabprofile.pageNo = val;
+			this.getLisprofile();
+		},
+		// 通讯录
+		handleSizeChangeali(val) {},
+		handleCurrentChangeali(val) {
+			this.queryParamsail.pageNo = val;
+			this.getLisail();
+		},
+		handleClick(tab, event) {},
+		// 第一部分tab点击
+		tabSbu(index) {
+			this.num = index - 1;
+			this.queryParams.fixedData.condition.notice_type = index;
+			this.getList();
+		},
+		// 第二部分tab点击numlist
+		tabList(index) {
+			this.numlist = index;
+		},
+		// 第三部分tab点击
+		tabSbuprofile(index) {
+			this.numprofile = index - 1;
+			this.queryParamstabprofile.fixedData.condition.info_type = index;
+			this.getLisprofile();
+		},
+		// 表单重置
+		reset() {
+			(this.form = {}), this.resetForm('form');
+		},
+		// 取消按钮
+		cancel() {
+			this.open = false;
+			this.openety = false;
+			this.reset();
+		},
+		/** 新增按钮操作 */
+		handleAdd() {
+			this.nummer = 0;
+			this.reset();
+			this.form = {};
+			this.getLisalendaraddd();
+			this.open = true;
+			this.title = '添加日程';
+		},
+		/** 提交按钮操作 */
+		handleQuery() {
+			for (let item of this.queryData.showData) {
+				if (item.htmlType == 'checkbox' || item.htmlType == 'imageUpload' || item.htmlType == 'fileUpload') {
+					this.form[item.columnName] = this.$refs[item.columnName][0].config;
+				} else {
+					this.form[item.columnName] = this.$refs[item.columnName][0].config[item.columnName];
+				}
+			}
+			// this.forme = this.form
+			if (this.nummer == 0) {
+				this.forme.table = 'sys_schedule';
+				this.forme.objId = -1;
+				this.forme.fixedData = this.form;
+				// if(this.forme.fixedData.remind_type !== undefined){
+				//   this.forme.fixedData.remind_type = this.forme.fixedData.remind_type.join(',');
+				// }
+				//日历
+				addConfigindex(this.forme).then(response => {
+					this.msgSuccess('新增成功');
+					// this.open = false;
+					this.getLisalendar();
+					this.cancel();
+				});
+			} else if (this.nummer == 1) {
+				// this.form.table = 'sys_memorandum'
+				this.forme.table = 'sys_memorandum';
+				this.forme.objId = -1;
+				this.forme.fixedData = this.form;
 
-   },
-  methods: {
-    // 通讯录搜索
-    init() {
-      console.log(1243)
-      getTableQuery({
-        table: this.queryParamsijeu.table
-      }).then(res => {
-        let data = res.data
-        this.queryDataali = data
-      })
-    },
-      // Tooltip 文字提示
-        content (date) {
-          let data = date
-          let datase = date
-          let content = ''
-          let conert = ''
-          let conertre = ''
-          let nujue= 0
-          for (var i = 0 ; i < this.calendarData.length; i++) {
-            if(this.calendarData[i].schedule_content !== undefined){
-           this.calendarData[i].schedule_content = this.calendarData[i].schedule_content.replace(/<\/?[^>]*>/g, '')
-            }
-            if(data == this.calendarData[i].remind_time){
-              if(content  == this.calendarData[i].schedule_content + '、'){
-                content  = content
-              }else{
-                content  = content  + this.calendarData[i].schedule_content + '、'
-              }
-            }
-          }
-         return content
-        },
-      modelFn(obj, cont) {
-        this.$set(this.form,obj,cont)
-      },
-    //数据  第一部分列表
-    getList() {
-      this.loading = true;
-      this.configList = []
-      listIndex(this.queryParams).then(response => {
-          if(response.data.rows !== null){
-            this.configList = response.data.rows;
-          }else {
-            this.configList.push({notice_title: "暂无数据"});
-          }
-          this.total = response.data.total;
-          this.loading = false;
-        }
-      );
-    },
-    //数据  第二部分列表
-    getListtabone() {
-      this.loading = true;
-      listIndex(this.queryParams).then(response => {
-          this.configList = response.data.rows;
-          this.total = response.data.total;
-          this.loading = false;
-        }
-      );
-    },
-    //数据  第三部分列表
-    getLisprofile() {
-      // this.loading = true;
-      listIndexber(this.queryParamstabprofile).then(response => {
-          if(response.data !== undefined){
-            this.getLisprofileone = response.data.rows;
-            if(response.data.rows !== null){
-              this.tieku = this.getLisprofileone[0].info_title
-              this.comg = this.getLisprofileone[0].info_content
-            }else {
-              this.tieku = '暂无数据'
-              this.comg = '暂无数据'
-            }
-            this.totalprofile = response.data.total;
-          }
-         this.loading = false;
-        }
-      );
-    },
-    //数据  日历数据列表
-    getLisalendar() {
-      this.loading = true;
-      this.queryParamscalendar.fixedData.condition.create_by = this.user.userName
-      listIndex(this.queryParamscalendar).then(response => {
-          if(response.data !== undefined){
-            this.calendarData = response.data.rows;
-          }
-          this.loading = false;
-        }
-      );
-    },
-    //数据  备忘录数据列表
-    getLismemorandum() {
-      this.loading = true;
-      this.getmemorandum = []
-      this.queryParamstabmemorandum.fixedData.condition.create_by = this.user.userName
-      listIndex(this.queryParamstabmemorandum).then(response => {
-          if(response.data !== undefined){
-            if(response.data.rows !== null){
-              this.shower = true
-              this.getmemorandum = response.data.rows;
-            }else{
-              this.shower = false
-              this.getmemorandum.push({memorandum_title:'暂无数据',shower:false})
-            }
-          }
-          this.loading = false;
-        }
-      );
-    },
-    // 数据列表   通讯录数据
-    getLisailtwo() {
-      this.loading = true;
-      listIndex(this.queryParamsail).then(response => {
-          if(response.data !== undefined){
-            this.getLisaillie = response.data.rows;
-          }
-          this.totalali = response.data.total
-          this.loading = false;
-        }
-      );
-    },
-    //tab 公告 栏数据
-    getListtab() {
-      this.loading = true;
-      listIndextwo(this.dictType).then(response => {
-          this.editableTabs = response.data;
-          this.queryParams.dictType = response.data[1].dictType
-          // this.total = response.total;
-          this.loading = false;
-        }
-      )
-    },
-    // 公司概况  tab
-    getLiser() {
-      this.loading = true;
-      listIndextherr(this.dictTypetwo).then(response => {
-          this.editableTabsteo = response.data;
-          // this.total = response.total;
-          this.loading = false;
-        }
-      )
-    },
-   // 通讯录表头
-   getLisail() {
-     this.loading = true;
-     listIndexfou(this.queryParamsail).then(response => {
-         if(response.data !== undefined){
-           this.tableDataalid = response.data.tableHeadList;
-           this.postList = response.data
-           if(this.postList.rows !== null){
-             this.postList.rows.filter(route => {
-               // route.dept_id = route.dept_id.value
-               for(var item in route){
-                 if(typeof route[item] == 'object'){
-                   route[item]= route[item].value
-                 }
-               }
-             })
-           }
+				//备忘录
+				addConfigindex(this.forme).then(response => {
+					this.msgSuccess('新增成功');
+					// this.open = false;
+					this.getLismemorandum();
+					this.cancel();
+				});
+			}
+			// this.getList();
+		},
+		// 弹框
+		changeFn(obj) {
+			console.log(obj);
+			for (let key in obj) {
+				this.form.fixedData[key] = obj[key];
+			}
+		},
+		// 新增备忘录
+		memoere() {
+			this.nummer = 1;
+			this.open = true;
+			this.title = '添加备忘录';
+			this.getLisalendaradddmer();
+		},
+		// 备忘录删除
+		index_deledetfe(id) {
+			var that = this;
+			that.deledlid.idList = [];
+			that.deledlid.idList.push(id);
 
-           this.totalali = response.data.total;
-         }
-         this.loading = false;
-       }
-     );
-   },
-   //日历新增弹框数据
-   getLisalendaraddd() {
-     this.loading = true;
-     this.queryData = []
-     listIndextanl(this.calendaradd).then(response => {
-         if(response.data !== undefined){
-           this.queryData = response.data
+			this.$confirm('是否确认删除', '警告', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			})
+				.then(function() {
+					return delIndexnabd(that.deledlid);
+				})
+				.then(() => {
+					this.getLismemorandum();
+					this.msgSuccess('删除成功');
+					// this.$router.go(-1)
+				});
+		},
 
-         }
-         this.loading = false;
-       }
-     );
-   },
-   //备忘录新增弹框数据
-   getLisalendaradddmer() {
-     this.loading = true;
-     this.queryData = []
-     listIndextanl(this.calendaraddmer).then(response => {
-         if(response.data !== undefined){
-           this.queryData = response.data
-         }
-         this.loading = false;
-       }
-     );
-   },
-    goTarget(href) {
-      window.open(href, "_blank");
-    },
-     handleSizeChange(val) {
-      },
-    handleCurrentChange(val) {
-      this.queryParams.pageNo = val
-      this.getList()
-      },
-      // 公司概况
-      handleSizeChangeprofile(val) {
-        },
-      handleCurrentChangeprofile(val) {
-        this.queryParamstabprofile.pageNo = val
-        this.getLisprofile()
-        },
-     // 通讯录
-     handleSizeChangeali(val) {
-       },
-     handleCurrentChangeali(val) {
-       this.queryParamsail.pageNo = val
-       this.getLisail()
-       },
-    handleClick(tab, event) {
-      },
-      // 第一部分tab点击
-    tabSbu(index){
-     this.num = index - 1
-     this.queryParams.fixedData.condition.notice_type = index
-     this.getList()
-    },
-    // 第二部分tab点击numlist
-    tabList(index){
-      this.numlist = index
-    },
-    // 第三部分tab点击
-    tabSbuprofile(index){
-      this.numprofile = index - 1
-      this.queryParamstabprofile.fixedData.condition.info_type = index
-      this.getLisprofile()
-    },
-    // 表单重置
-    reset() {
-      this.form ={
-      },
-      this.resetForm("form");
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.openety = false
-      this.reset();
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.nummer = 0
-      this.reset();
-      this.form ={
-      }
-      this.getLisalendaraddd()
-      this.open = true;
-      this.title = "添加日程";
-    },
-    /** 提交按钮操作 */
-    handleQuery() {
-      for(let item of this.queryData.showData){
-        if(item.htmlType == 'checkbox' || item.htmlType == 'imageUpload' || item.htmlType == 'fileUpload'){
-          this.form[item.columnName] = this.$refs[item.columnName][0].config
-        } else{
-          this.form[item.columnName] = this.$refs[item.columnName][0].config[item.columnName]
-        }
-      }
-      // this.forme = this.form
-      if(this.nummer == 0){
-        this.forme.table = 'sys_schedule'
-        this.forme.objId = -1
-        this.forme.fixedData = this.form
-        // if(this.forme.fixedData.remind_type !== undefined){
-        //   this.forme.fixedData.remind_type = this.forme.fixedData.remind_type.join(',');
-        // }
-        //日历
-        addConfigindex(this.forme).then(response => {
-          this.msgSuccess("新增成功");
-          // this.open = false;
-          this.getLisalendar()
-          this.cancel();
-        });
-      }else if(this.nummer == 1){
-        // this.form.table = 'sys_memorandum'
-        this.forme.table = 'sys_memorandum'
-        this.forme.objId = -1
-        this.forme.fixedData = this.form
-
-        //备忘录
-       addConfigindex(this.forme).then(response => {
-         this.msgSuccess("新增成功");
-         // this.open = false;
-         this.getLismemorandum()
-         this.cancel();
-       });
-      }
-      // this.getList();
-    },
-    // 弹框
-    changeFn(obj) {
-      console.log(obj)
-      for(let key in obj){
-        this.form.fixedData[key] = obj[key]
-      }
-    },
-    // 新增备忘录
-    memoere(){
-     this.nummer = 1
-     this.open = true;
-     this.title = "添加备忘录";
-     this.getLisalendaradddmer()
-    },
-    // 备忘录删除
-    index_deledetfe(id){
-      var that =  this
-      that.deledlid.idList = []
-      that.deledlid.idList.push(id)
-
-     this.$confirm('是否确认删除', "警告", {
-         confirmButtonText: "确定",
-         cancelButtonText: "取消",
-         type: "warning"
-       }).then(function() {
-         return delIndexnabd(that.deledlid);
-       }).then(() => {
-         this.getLismemorandum();
-         this.msgSuccess("删除成功");
-         // this.$router.go(-1)
-       })
-    },
-
-    handleSelectionChange() {
-
-    },
-    // 字符串去重
-    unique(arr) {
-      let arfe = []
-      let serfgt = []
-      arfe = arr.split(',')
-      for(var i = 0 ; i < arfe.length; i++){
-         if (serfgt.indexOf(arfe[i]) === -1) {
-            serfgt.push(arfe[i])
-            }
-      }
-     // const res = new Map();
-     // return arr.filter((arr) => !res.has(arr.id) && res.set(arr.id, 1));
-    },
-    getUser() {
-      getUserProfile().then(response => {
-        this.user = response.data;
-        this.getLisalendar()
-        this.getLismemorandum()
-      });
-    },
-    // 通知公告弹窗
-    headerCld(index){
-      this.title = '通知公告'
-       this.openety = true,
-       this.actingk=index
-    },
-    // 搜索
-    handleQuerygty(){
-    this.queryParams.pageNo = 1;
-    this.grabFn(this.queryDataali.queryList, this.queryParamsail.fixedData.condition)
-    this.getLisail()
-
-    },
-    // 抓取参数
-    grabFn(arr, parForm) {
-      for (let item of arr) {
-        if (item.htmlType == 'checkbox' || item.htmlType == 'imageUpload' || item.htmlType == 'fileUpload') {
-          if (this.$refs[item.columnName][0].config.length) {
-            parForm[item.columnName] = this.$refs[item.columnName][0].config
-          }
-        } else {
-          parForm[item.columnName] = this.$refs[item.columnName][0].config[item.columnName]
-        }
-      }
-    },
-    // 搜索重置  通讯录
-    resetQuery(){
-      console.log(12436)
-     this.queryParamsail.fixedData.condition = {}
-     this.queryParamsail.pageNo = 1
-     // this.resetForm("queryParamsail");
-     console.log(this.queryParamsail)
-     this.getLisail()
-    }
-  },
+		handleSelectionChange() {},
+		// 字符串去重
+		unique(arr) {
+			let arfe = [];
+			let serfgt = [];
+			arfe = arr.split(',');
+			for (var i = 0; i < arfe.length; i++) {
+				if (serfgt.indexOf(arfe[i]) === -1) {
+					serfgt.push(arfe[i]);
+				}
+			}
+			// const res = new Map();
+			// return arr.filter((arr) => !res.has(arr.id) && res.set(arr.id, 1));
+		},
+		getUser() {
+			getUserProfile().then(response => {
+				this.user = response.data;
+				this.getLisalendar();
+				this.getLismemorandum();
+			});
+		},
+		// 通知公告弹窗
+		headerCld(index) {
+			this.title = '通知公告';
+			(this.openety = true), (this.actingk = index);
+		},
+		// 搜索
+		handleQuerygty() {
+			this.queryParams.pageNo = 1;
+			this.grabFn(this.queryDataali.queryList, this.queryParamsail.fixedData.condition);
+			this.getLisail();
+		},
+		// 抓取参数
+		grabFn(arr, parForm) {
+			for (let item of arr) {
+				if (item.htmlType == 'checkbox' || item.htmlType == 'imageUpload' || item.htmlType == 'fileUpload') {
+					if (this.$refs[item.columnName][0].config.length) {
+						parForm[item.columnName] = this.$refs[item.columnName][0].config;
+					}
+				} else {
+					parForm[item.columnName] = this.$refs[item.columnName][0].config[item.columnName];
+				}
+			}
+		},
+		// 搜索重置  通讯录
+		resetQuery() {
+			console.log(12436);
+			this.queryParamsail.fixedData.condition = {};
+			this.queryParamsail.pageNo = 1;
+			// this.resetForm("queryParamsail");
+			console.log(this.queryParamsail);
+			this.getLisail();
+		},
+		// 统计列表
+		tiheyu(){
+			tjList().then(response => {
+				this.tjsli = response.data;
+			});
+		}
+	}
 };
 </script>
 
 <style lang="scss">
-  .iejgu{
-     .el-form-item__label{
-       width: 40px !important;
-        .el-input__inner{
-          width: 60%;
-        }
-     }
-     .el-form-item{
-       width: 71%;
-     }
-     .el-form--inline .el-form-item{
-
-     }
-     .el-form--inline .el-form-item__content{
-       width: 76%;
-     }
-  .el-form-item__content{
-    width: 75%;
-  }
-  }
-  .index_ese{
-    .el-dialog__body{
-      padding-top: 10px !important;
-    }
-
-  }
-  .home{
-    .el-tabs__header{
-     margin-bottom: 5px !important;
-    }
-    .el-calendar-table tr td:first-child{
-      border: 0 !important;
-    }
-    .el-calendar-table tr:first-child td{
-      border: 0 !important;
-    }
-    .el-calendar-table td{
-      border: 0 !important;
-    }
-    .el-calendar-table .el-calendar-day{
-      height: 30px;
-      text-align: center;
-      line-height: 30px;
-      border-radius: 30px;
-      padding: 0;
-      // background-color: #0B18E8;
-    }
-    .el-calendar-table td.is-selected{
-      // background-color: #0B18E8;
-       border-radius: 30px;
-    }
-    .el-calendar__header{
-      border: 0;
-      padding: 0 20px;
-    }
-    .el-calendar__body{
-      padding-top: 0;
-      padding-bottom: 0;
-    }
-    .el-pagination{
-      padding-left: 0;
-    }
-    .index_headeNav{
-      .el-tabs__item{
-        position: relative;
-      }
-    }
-    .el-table th.is-leaf, .el-table td{
-       border: 0 !important;
-    }
-    .el-calendar__title{
-      font-size: 12px;
-    }
-     .el-table td{
-       padding:  6px 0;
-     }
-     .index_haderPaginfoiu{
-       .el-pagination__jump{
-         display: block !important;
-         text-align: center;
-         margin-left: 0;
-       }
-     }
-   .everyDay {
-     display: inline-block;
-     width: 20px;
-     height: 20px;
-     line-height: 20px;
-     background-color: #409eff;
-     color: #fff;
-     border-radius: 50%;
-     margin-top: 5px;
-   }
-  }
+.iejgu {
+	.el-form-item__label {
+		width: 40px !important;
+		.el-input__inner {
+			width: 60%;
+		}
+	}
+	.el-form-item {
+		width: 71%;
+	}
+	.el-form--inline .el-form-item {
+	}
+	.el-form--inline .el-form-item__content {
+		width: 76%;
+	}
+	.el-form-item__content {
+		width: 75%;
+	}
+}
+.index_ese {
+	.el-dialog__body {
+		padding-top: 10px !important;
+	}
+}
+.home {
+	.el-tabs__header {
+		margin-bottom: 5px !important;
+	}
+	.el-calendar-table tr td:first-child {
+		border: 0 !important;
+	}
+	.el-calendar-table tr:first-child td {
+		border: 0 !important;
+	}
+	.el-calendar-table td {
+		border: 0 !important;
+	}
+	.el-calendar-table .el-calendar-day {
+		height: 30px;
+		text-align: center;
+		line-height: 30px;
+		border-radius: 30px;
+		padding: 0;
+		// background-color: #0B18E8;
+	}
+	.el-calendar-table td.is-selected {
+		// background-color: #0B18E8;
+		border-radius: 30px;
+	}
+	.el-calendar__header {
+		border: 0;
+		padding: 0 20px;
+	}
+	.el-calendar__body {
+		padding-top: 0;
+		padding-bottom: 0;
+	}
+	.el-pagination {
+		padding-left: 0;
+	}
+	.index_headeNav {
+		.el-tabs__item {
+			position: relative;
+		}
+	}
+	.el-table th.is-leaf,
+	.el-table td {
+		// border: 0 !important;
+	}
+	.el-table thead.is-group th{
+		background-color: #f8f8f8 !important;
+	}
+	.el-table--medium td{
+		padding: 12px 0 !important;
+	}
+	.el-calendar__title {
+		font-size: 12px;
+	}
+	.el-table td {
+		padding: 6px 0;
+	}
+	.index_haderPaginfoiu {
+		.el-pagination__jump {
+			display: block !important;
+			text-align: center;
+			margin-left: 0;
+		}
+	}
+	.everyDay {
+		display: inline-block;
+		width: 20px;
+		height: 20px;
+		line-height: 20px;
+		background-color: #409eff;
+		color: #fff;
+		border-radius: 50%;
+		margin-top: 5px;
+	}
+}
 </style>
 
-
 <style scoped lang="scss">
 .home {
-  // tab
-  .index_headetab{
-    display: flex;
-    border-bottom: 1px solid #E5E5E5;
-    height: 65px;
-    padding-top: 10px;
-    padding-bottom: 10px;
-   span{
-     cursor:pointer;
-     width: 80px;
-     // flex: 1;
-     text-align: center;
-     line-height: 55px;
-     height: 55px;
-     font-size: 15px;
-     font-family: PingFang SC;
-     font-weight: bold;
-     color: #666;
-     position: relative;
-     overflow: hidden;
-     white-space: nowrap;
-     text-overflow: ellipsis;
-     // flex: 1;
-     // border-bottom: ;
-   }
-   .span{
-     content: '';
-     display: block;
-     width: 18px;
-     height: 8px;
-     border-radius: 3px;
-     background-color: #3C8DBC;
-     color: #3C8DBC !important;
-     // position: absolute;
-     // border-bottom: ;
-   }
-  .spanto{
-    color:#3C8DBC ;
-    border-bottom: 3px solid #3C8DBC;
-  }
-  }
-  p{
-    margin: 0;
-
-  }
-  ul{
-    margin: 0;
-    padding: 0;
-  }
-  background-color: #eef0ff;
-  blockquote {
-    padding: 10px 20px;
-    margin: 0 0 20px;
-    font-size: 17.5px;
-    border-left: 5px solid #eee;
-  }
-  .index_heade{
-    // border: 1px solid #eee;
-    // width: 100%;
-    padding: 0 20px;
-    height: 570px;
-    background-color: #fff;
-    position: relative;
-    border-radius: 6px;
-    .index_headerImg{
-      width: 23px;
-      height: 6px;
-      position: absolute;
-      right: 20px;
-      top:32px;
-    }
-    .index_headerUl{
-      width: 100%;
-      padding: 0;
-      margin: 0;
-      height: 85%;
-      li{
-        margin: 0;
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        height: 43px;
-        cursor:pointer;
-        img{
-          width: 11px;
-          height: 13px;
-        }
-        p{
-          font-size: 14px;
-          font-family: PingFang SC;
-          font-weight: 400;
-          color: #343434;
-          line-height: 36px;
-          margin: 0;
-          text-align: left;
-          flex: 1;
-          padding: 0 18px;
-          overflow:hidden;
-          	text-overflow:ellipsis;
-          	white-space:nowrap
-        }
-        span{
-          font-size: 14px;
-          font-family: PingFang SC;
-          font-weight: 400;
-          color: #343434;
-          line-height: 36px;
-        }
-      }
-    }
-    .index_haderPagin{
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      margin-top: 30px;
-      span{
-        flex: 1;
-        font-size: 12px;
-        font-family: PingFang SC;
-        font-weight: 400;
-        color: #343434;
-        text-align: right;
-        // line-height: 36px;
-      }
-    }
-  }
-  //表格样式
-  .index_headeNav{
-    padding: 0 20px;
-    height: 550px;
-    background-color: #fff;
-    position: relative;
-    border-radius: 6px;
-     .tab_i{
-       position: absolute;
-       right: 1px;
-       top:5px;
-       border-radius: 50%;
-     // display: block;
-     width: 15px ;
-     height: 15px;
-     line-height: 15px;
-     text-align: center;
-     color: #fff;
-     background-color: red;
-     overflow:hidden; //超出的文本隐藏
-     text-overflow:ellipsis; //溢出用省略号显示
-     white-space:nowrap; //溢出不换行
-     font-size: 11px;
-     font-family: PingFang SC;
-     font-weight: bold;
-
-      }
-  }
-  .index_nav{
-    // border: 1px solid #eee;
-    background-color: #fff;
-    height: 315px;
-    box-shadow: 0px 4px 4px 0px rgba(130, 150, 162, 0.64);
-    border-radius: 6px;
-    .index_navTime{
-      height: 270px;
-      position: relative;
-    }
-    .index_navTimeimg{
-      height: 47px;
-      width: 100%;
-      position: absolute;
-      bottom: -76px;
-      left: 0;
-    }
-    .index_navTimep{
-      padding: 10px 0;
-      margin: 0 20px;
-      margin-bottom: 10px;
-      border-bottom: 1px solid #E5E5E5;
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-       span:nth-child(1){
-         font-size: 15px;
-         font-family: PingFang SC;
-         font-weight: bold;
-         color: #3C8DBC;
-       }
-       span:nth-child(1)::before{
-          content: "";
-         display: block;
-         width: 18px;
-         height: 8px;
-         background: #3C8DBC;
-         border-radius: 3px;
-
-       }
-       span:nth-child(2){
-         font-size: 12px;
-         font-family: PingFang SC;
-         font-weight: 400;
-         color: #3C8DBC;
-         cursor:pointer;
-       }
-    }
-  }
-  // 公司概况样式
-  .index_headeProfile{
-    margin-top: 40px;
-    margin-bottom: 20px;
-    height: 590px;
-    .index_profilep{
-      font-size: 12px;
-      font-family: PingFang SC;
-      font-weight: bold;
-      color: #343434;
-      line-height: 27px;
-      text-indent:2em;
-      height: 368px;
-      overflow-y: hidden;
-       // p{
+	// tab
+	.index_headetab {
+		display: flex;
+		border-bottom: 1px solid #e5e5e5;
+		height: 65px;
+		padding-top: 10px;
+		padding-bottom: 10px;
+		span {
+			cursor: pointer;
+			width: 80px;
+			// flex: 1;
+			text-align: center;
+			line-height: 55px;
+			height: 55px;
+			font-size: 15px;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #666;
+			position: relative;
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			// flex: 1;
+			// border-bottom: ;
+		}
+		.span {
+			content: '';
+			display: block;
+			width: 18px;
+			height: 8px;
+			border-radius: 3px;
+			background-color: #3c8dbc;
+			color: #3c8dbc !important;
+			// position: absolute;
+			// border-bottom: ;
+		}
+		.spanto {
+			color: #3c8dbc;
+			border-bottom: 3px solid #3c8dbc;
+		}
+	}
+	p {
+		margin: 0;
+	}
+	ul {
+		margin: 0;
+		padding: 0;
+	}
+	background-color: #eef0ff;
+	blockquote {
+		padding: 10px 20px;
+		margin: 0 0 20px;
+		font-size: 17.5px;
+		border-left: 5px solid #eee;
+	}
+	.index_heade {
+		// border: 1px solid #eee;
+		// width: 100%;
+		padding: 0 20px;
+		height: 570px;
+		background-color: #fff;
+		position: relative;
+		border-radius: 6px;
+		.index_headerImg {
+			width: 23px;
+			height: 6px;
+			position: absolute;
+			right: 20px;
+			top: 32px;
+		}
+		.index_headerUl {
+			width: 100%;
+			padding: 0;
+			margin: 0;
+			height: 85%;
+			li {
+				margin: 0;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				height: 43px;
+				cursor: pointer;
+				img {
+					width: 11px;
+					height: 13px;
+				}
+				p {
+					font-size: 14px;
+					font-family: PingFang SC;
+					font-weight: 400;
+					color: #343434;
+					line-height: 36px;
+					margin: 0;
+					text-align: left;
+					flex: 1;
+					padding: 0 18px;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					white-space: nowrap;
+				}
+				span {
+					font-size: 14px;
+					font-family: PingFang SC;
+					font-weight: 400;
+					color: #343434;
+					line-height: 36px;
+				}
+			}
+		}
+		.index_haderPagin {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 30px;
+			span {
+				flex: 1;
+				font-size: 12px;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #343434;
+				text-align: right;
+				// line-height: 36px;
+			}
+		}
+	}
+	//表格样式
+	.index_headeNav {
+		padding: 0 20px;
+		height: 550px;
+		background-color: #fff;
+		position: relative;
+		border-radius: 6px;
+		.tab_i {
+			position: absolute;
+			right: 1px;
+			top: 5px;
+			border-radius: 50%;
+			// display: block;
+			width: 15px;
+			height: 15px;
+			line-height: 15px;
+			text-align: center;
+			color: #fff;
+			background-color: red;
+			overflow: hidden; //超出的文本隐藏
+			text-overflow: ellipsis; //溢出用省略号显示
+			white-space: nowrap; //溢出不换行
+			font-size: 11px;
+			font-family: PingFang SC;
+			font-weight: bold;
+		}
+	}
+	.index_nav {
+		// border: 1px solid #eee;
+		background-color: #fff;
+		height: 315px;
+		box-shadow: 0px 4px 4px 0px rgba(130, 150, 162, 0.64);
+		border-radius: 6px;
+		.index_navTime {
+			height: 270px;
+			position: relative;
+		}
+		.index_navTimeimg {
+			height: 47px;
+			width: 100%;
+			position: absolute;
+			bottom: -76px;
+			left: 0;
+		}
+		.index_navTimep {
+			padding: 10px 0;
+			margin: 0 20px;
+			margin-bottom: 10px;
+			border-bottom: 1px solid #e5e5e5;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			span:nth-child(1) {
+				font-size: 15px;
+				font-family: PingFang SC;
+				font-weight: bold;
+				color: #3c8dbc;
+			}
+			span:nth-child(1)::before {
+				content: '';
+				display: block;
+				width: 18px;
+				height: 8px;
+				background: #3c8dbc;
+				border-radius: 3px;
+			}
+			span:nth-child(2) {
+				font-size: 12px;
+				font-family: PingFang SC;
+				font-weight: 400;
+				color: #3c8dbc;
+				cursor: pointer;
+			}
+		}
+	}
+	// 公司概况样式
+	.index_headeProfile {
+		margin-top: 40px;
+		margin-bottom: 20px;
+		height: 590px;
+		.index_profilep {
+			font-size: 12px;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #343434;
+			line-height: 27px;
+			text-indent: 2em;
+			height: 368px;
+			overflow-y: hidden;
+			// p{
 
-       // }
-    }
-    .index_haderPagin{
-      margin-top: 25px;
-    }
-    .index_headerImg{
-      width: 21px;
-      height: 21px;
-      top:19px;
-    }
-  }
-  // 备忘录样式
-  .index_memoranduNnavTime{
-    height: 335px;
-    margin-top: 90px;
-    position: relative;
-    .index_navTimep{
-      padding: 20px 0;
-      // margin-bottom: 20px;
-    }
-    .index_navTimeimg{
-      height: 47px;
-      width: 100%;
-      position: absolute;
-      bottom: -76px;
-      left: 0;
-      bottom: -96px;
-    }
-    .imjud{
-      width: 23px;
-      height: 6px;
-      position: absolute;
-      right: 20px;
-      bottom: -50px;
-    }
-    ul{
-      padding: 0 20px;
-      li{
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        border-bottom: 1px dashed #E5E5E5;
-        p{
-          font-size: 12px;
-          font-family: PingFang SC;
-          font-weight: 400;
-          color: #343434;
-          line-height: 36px;
-          flex: 1;
-        }
-        .index_navspande{
-          display: flex;
-          justify-content: space-between;
-          align-items: center;
-          span{
-            font-size: 12px;
-            font-family: PingFang SC;
-            font-weight: 400;
-            color: #343434;
-            line-height: 36px;
-            flex: 1;
-          }
-          img{
-            width: 16px;
-            height: 16px;
-            margin-left: 5px;
-            cursor: pointer;
-          }
-
-        }
-
-      }
-    }
-  }
-  //通讯录样式
-  .index_memoranduMail{
-    height: 363px;
-    margin-top: 100px;
-    .index_navTimeimgtwo{
-      width: 23px;
-      height: 6px;
-    }
-    .index_navTimep{
-      padding: 20px 0;
-    }
-    .index_memoranduMailnav{
-      padding: 0 20px;
-      height: 90%;
-    }
-    .index_navTimeimg{
-      height: 47px;
-      width: 100%;
-      position: absolute;
-      bottom: -76px;
-      left: 0;
-      bottom: -126px;
-    }
-   .index_haderPagin{
-     margin-top: 10px;
-   }
-  }
+			// }
+		}
+		.index_haderPagin {
+			margin-top: 25px;
+		}
+		.index_headerImg {
+			width: 21px;
+			height: 21px;
+			top: 19px;
+		}
+	}
+	// 备忘录样式
+	.index_memoranduNnavTime {
+		height: 335px;
+		margin-top: 90px;
+		position: relative;
+		.index_navTimep {
+			padding: 20px 0;
+			// margin-bottom: 20px;
+		}
+		.index_navTimeimg {
+			height: 47px;
+			width: 100%;
+			position: absolute;
+			bottom: -76px;
+			left: 0;
+			bottom: -96px;
+		}
+		.imjud {
+			width: 23px;
+			height: 6px;
+			position: absolute;
+			right: 20px;
+			bottom: -50px;
+		}
+		ul {
+			padding: 0 20px;
+			li {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				border-bottom: 1px dashed #e5e5e5;
+				p {
+					font-size: 12px;
+					font-family: PingFang SC;
+					font-weight: 400;
+					color: #343434;
+					line-height: 36px;
+					flex: 1;
+				}
+				.index_navspande {
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					span {
+						font-size: 12px;
+						font-family: PingFang SC;
+						font-weight: 400;
+						color: #343434;
+						line-height: 36px;
+						flex: 1;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						// width: 20%;
+					}
+					img {
+						width: 16px;
+						height: 16px;
+						margin-left: 5px;
+						cursor: pointer;
+					}
+				}
+			}
+		}
+	}
+	//通讯录样式
+	.index_memoranduMail {
+		height: 363px;
+		margin-top: 100px;
+		.index_navTimeimgtwo {
+			width: 23px;
+			height: 6px;
+		}
+		.index_navTimep {
+			padding: 20px 0;
+		}
+		.index_memoranduMailnav {
+			padding: 0 20px;
+			height: 90%;
+		}
+		.index_navTimeimg {
+			height: 47px;
+			width: 100%;
+			position: absolute;
+			bottom: -76px;
+			left: 0;
+			bottom: -126px;
+		}
+		.index_haderPagin {
+			margin-top: 10px;
+		}
+	}
 }
 
 // table
-.tab_tol{
-  // display: flex;
-  height: 80%;
-  .tr_one{
-    display: flex;
-    justify-content: space-around;
-    width: 100%;
-    th{
-      flex: 1;
-      font-size: 12px;
-      font-family: PingFang SC;
-      font-weight: bold;
-      color: #343434;
-      line-height: 36px;
-      overflow: hidden;
-      text-overflow:ellipsis;
-      white-space: nowrap;
-    }
-  }
-  .two_tr{
-    display: flex;
-    justify-content: space-around;
-    font-size: 12px;
-    font-family: PingFang SC;
-    font-weight: bold;
-    color: #343434;
-    line-height: 36px;
-    td{
-      flex: 1;
-      overflow: hidden;
-      text-overflow:ellipsis;
-      white-space: nowrap;
-    }
-  }
-  .two_trtwo{
-    background-color: #F2F2F2;
-  }
+.tab_tol {
+	// display: flex;
+	height: 80%;
+	.tr_one {
+		display: flex;
+		justify-content: space-around;
+		width: 100%;
+		th {
+			flex: 1;
+			font-size: 12px;
+			font-family: PingFang SC;
+			font-weight: bold;
+			color: #343434;
+			line-height: 36px;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+		}
+	}
+	.two_tr {
+		display: flex;
+		justify-content: space-around;
+		font-size: 12px;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #343434;
+		line-height: 36px;
+		td {
+			flex: 1;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+		}
+	}
+	.two_trtwo {
+		background-color: #f2f2f2;
+	}
 }
 // 通知公告弹窗
-.index_headertan{
-  margin: 0 30px;
-  p{
-    margin: 0;
-  }
-  p:nth-child(1){
-    font-size: 24px;
-    font-family: PingFang SC;
-    font-weight: bold;
-    color: #343434;
-    line-height: 42px;
-    text-align: center;
-    margin-bottom: 10px;
-    text-indent:0em;
-  }
-  p:nth-child(2){
-    font-size: 16px;
-    font-family: PingFang SC;
-    font-weight: 400;
-    color: #666666;
-    line-height: 24px;
-    text-align: center;
-    margin-bottom: 20px;
-    text-indent:0em;
-  }
-  pre{
-    font-size: 16px;
-    font-family: PingFang SC;
-    font-weight: 400;
-    color: #343434;
-  }
+.index_headertan {
+	margin: 0 30px;
+	p {
+		margin: 0;
+	}
+	p:nth-child(1) {
+		font-size: 24px;
+		font-family: PingFang SC;
+		font-weight: bold;
+		color: #343434;
+		line-height: 42px;
+		text-align: center;
+		margin-bottom: 10px;
+		text-indent: 0em;
+	}
+	p:nth-child(2) {
+		font-size: 16px;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: #666666;
+		line-height: 24px;
+		text-align: center;
+		margin-bottom: 20px;
+		text-indent: 0em;
+	}
+	pre {
+		font-size: 16px;
+		font-family: PingFang SC;
+		font-weight: 400;
+		color: #343434;
+	}
+}
+pre {
+	white-space: pre-wrap;
 }
-  pre{
-    white-space:pre-wrap;
-  }
-
 </style>

+ 340 - 86
src/views/login.vue

@@ -1,10 +1,10 @@
 <template>
   <div class="login">
     <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
-      <img src="../assets/images/icon_dl_ewm@2x.png" v-if="statusFlag==1" @click="statusFlag=2" alt="" class="icon_rw">
-      <img src="../assets/images/icon_dl_madl@2x.png" v-if="statusFlag==2" alt="" @click="statusFlag=1" class="icon_mim">
-      <h3 class="title"> 潜山市云数据中心</h3>
-      <div v-if="statusFlag==2">
+      <img src="../assets/images/icon_dl_ewm@2x.png" v-if="stageType==1" @click="dhiwyrei" alt="" class="icon_rw">
+      <img src="../assets/images/icon_dl_madl@2x.png" v-if="stageType==2" alt="" @click="stageType=1" class="icon_mim">
+      <h3 class="title"> 潜山市防疫数据平台</h3>
+      <!-- <div v-if="statusFlag==2">
         <div class="erw_img">
           <img src="" alt="" class="imgs">
           <p>请使用手机扫描上方二维码登录</p>
@@ -12,8 +12,34 @@
         <div class="mim_p">
           密码登录
         </div>
+      </div> -->
+	  <!-- 2 -->
+	  <div v-show="stageType==2" class="login-erw">
+      <h2 class="logerw_tit">
+        二维码快速登录
+      </h2>
+      <p>请扫描下方的二维码</p>
+      <p>安全登录,防止盗号</p>
+      <div class="logerw_img" ref="qrCodeUrl">
       </div>
-      <div v-if="statusFlag==1">
+      <div class="ts_p" v-if="isInvalid">
+        二维码已过期,请点击<span @click="getQecode">刷新</span>重试
+      </div>
+      <!-- <div class="logerw_fot" @click="two_fn">
+        账号密码登录
+      </div> -->
+    </div>
+	<div v-show="stageType==3" class="login-erw-thre">
+	  <div class="log_erw_thre_img">
+	    <img src="../assets/images/pic_dlcg@2x.png" alt="" class="img">
+	  </div>
+	  <div class="log_erw_thre_rig">
+	    <h3>{{ success_status?'页面超时,请重新扫描二维码':'扫描成功,请在手机上确认是否授权登录'}}</h3>
+	    <p v-if="!success_status">使用其他方式登录,请<span @click="three_fn">返回</span></p>
+	    <div v-if="success_status" class="thre_btn" @click="three_sj_fn">返回上一页</div>
+	  </div>
+	</div>
+      <div v-if="stageType==1">
       <el-form-item prop="username">
         <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
           <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
@@ -97,93 +123,220 @@
 </template>
 
 <script>
-import { getCodeImg } from "@/api/login";
-import Cookies from "js-cookie";
-import { encrypt, decrypt } from '@/utils/jsencrypt'
+  import {
+    getCodeImg,
+    getLoginCode,
+    getScanStatus
+  } from "@/api/login";
+  import Cookies from "js-cookie";
+  import QRCode from 'qrcodejs2'
+  import settings from "@/settings";
+  import {
+    encrypt,
+    decrypt
+  } from '@/utils/jsencrypt'
+  import {setToken} from '@/utils/auth'
 
-export default {
-  name: "Login",
-  data() {
-    return {
-      statusFlag: 1,
-      codeUrl: "",
-      cookiePassword: "",
-      loginForm: {
-        username: "",
-        password: "",
-        rememberMe: false,
-        code: "",
-        uuid: ""
-      },
-      loginRules: {
-        username: [
-          { required: true, trigger: "blur", message: "用户名不能为空" }
-        ],
-        password: [
-          { required: true, trigger: "blur", message: "密码不能为空" }
-        ],
-        code: [{ required: true, trigger: "change", message: "验证码不能为空" }]
-      },
-      loading: false,
-      redirect: undefined
-    };
-  },
-  watch: {
-    $route: {
-      handler: function(route) {
-        this.redirect = route.query && route.query.redirect;
-      },
-      immediate: true
-    }
-  },
-  created() {
-    this.getCode();
-    this.getCookie();
-  },
-  methods: {
-    btns() {
-      this.msgInfo('暂未开放')
+  export default {
+    name: "Login",
+    data() {
+      return {
+        stageType: 1, //1密码登录  2扫码登录 3扫码成功
+        isInvalid: false, // true失效  false有效
+        setInStatus: '', // 校验是否扫码 时间函数
+        codeUrl: "",
+        cookiePassword: "",
+        loginForm: {
+          username: "",
+          password: "",
+          rememberMe: false,
+          code: "",
+          uuid: ""
+        },
+        loginRules: {
+          username: [{
+            required: true,
+            trigger: "blur",
+            message: "用户名不能为空"
+          }],
+          password: [{
+            required: true,
+            trigger: "blur",
+            message: "密码不能为空"
+          }],
+          code: [{
+            required: true,
+            trigger: "change",
+            message: "验证码不能为空"
+          }]
+        },
+        setInStatus_num: 0,
+        loading: false,
+        qecode: '', // code
+        redirect: undefined,
+        success_status: false, // 扫描成功 是否超时
+        setInSuccess_fn: '', // 扫码成功函数
+        setInSuccess_num: 0, // 扫码成功计时
+      };
     },
-    getCode() {
-      getCodeImg().then(res => {
-        this.codeUrl = "data:image/gif;base64," + res.img;
-        this.loginForm.uuid = res.uuid;
-      });
+    watch: {
+      $route: {
+        handler: function(route) {
+          this.redirect = route.query && route.query.redirect;
+        },
+        immediate: true
+      }
     },
-    getCookie() {
-      const username = Cookies.get("username");
-      const password = Cookies.get("password");
-      const rememberMe = Cookies.get('rememberMe')
-      this.loginForm = {
-        username: username === undefined ? this.loginForm.username : username,
-        password: password === undefined ? this.loginForm.password : decrypt(password),
-        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
-      };
+    created() {
+      this.getCode();
+      this.getCookie();
     },
-    handleLogin() {
-      this.$refs.loginForm.validate(valid => {
-        if (valid) {
-          this.loading = true;
-          if (this.loginForm.rememberMe) {
-            Cookies.set("username", this.loginForm.username, { expires: 30 });
-            Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
-            Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
-          } else {
-            Cookies.remove("username");
-            Cookies.remove("password");
-            Cookies.remove('rememberMe');
-          }
-          this.$store.dispatch("Login", this.loginForm).then(() => {
-            this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
-          }).catch(() => {
-            this.loading = false;
-            this.getCode();
-          });
+    methods: {
+		btns() {
+		  this.msgInfo('暂未开放')
+		},
+      getCode() {
+        getCodeImg().then(res => {
+          this.codeUrl = "data:image/gif;base64," + res.img;
+          this.loginForm.uuid = res.uuid;
+        });
+      },
+      two_fn() {
+        this.stageType = 1
+        this.setInStatus_num = 0
+        this.isInvalid = false
+        if(this.setInStatus){
+          clearInterval(this.setInStatus)
+        }
+      },
+      three_sj_fn() {
+        this.getQecode()
+      },
+      three_fn() {
+        this.stageType = 1
+        this.setInSuccess_num = 0
+        this.success_status = false
+        if(this.setInSuccess_fn){
+          clearInterval(this.setInSuccess_fn)
         }
-      });
+      },
+      creatQrCode(url) {
+        const _this = this
+        this.$refs.qrCodeUrl.innerHTML="";
+        let qrcode = new QRCode(_this.$refs.qrCodeUrl, {
+          text: url, // 需要转换为二维码的内容
+          width: 200,
+          height: 200,
+          colorDark: '#000000',
+          colorLight: '#ffffff',
+          correctLevel: QRCode.CorrectLevel.H
+        })
+        console.log(qrcode,987)
+        this.setInStatus_fn()
+      },
+      setInStatus_fn() {
+        this.setInStatus = setInterval(red => {
+          this.setInStatus_num ++
+          if(this.setInStatus_num==180){
+            this.setInStatus_num = 0
+            this.isInvalid = true
+            clearInterval(this.setInStatus)
+          }else{
+            getScanStatus(this.qecode).then(res => {
+              if(res.msg == 'has_scan'){
+                clearInterval(this.setInStatus)
+                this.setInStatus_num = 0
+                this.stageType=3
+                this.succes_fn()
+              }
+            })
+          }
+        },1000)
+      },
+      succes_fn() {
+        this.setInSuccess_fn = setInterval(red => {
+          this.setInSuccess_num++
+          if(this.setInSuccess_num==180){
+            this.setInSuccess_num = 0
+            this.success_status = true
+            clearInterval(this.setInSuccess_fn)
+          }else{
+            getScanStatus(this.qecode).then(res => {
+              if(res.msg.includes('login_success:')){
+                clearInterval(this.setInSuccess_fn)
+                let token = res.msg.replace('login_success:','')
+                setToken(token)
+                this.$store.commit('SET_TOKEN', token)
+                this.$router.push({
+                  path: this.redirect || "/"
+                }).catch(() => {});
+              }
+            })
+          }
+        },1000)
+      },
+      getQecode() {
+        getLoginCode().then(res => {
+          this.qecode = res.data
+          console.log(res.msg,67)
+          let apiurl = settings.urls
+          // if(apiurl.includes('118.178.139.79')){
+          //   apiurl = 'https://video.zhongxinyun.com.cn/api'
+          // }
+		  // /dev-api
+          let urls = `${apiurl}/prod-api/auth/scanCode/${res.data}`
+          console.log(urls,987)
+          this.creatQrCode(urls)
+          this.isInvalid = false
+          this.stageType = 2
+        })
+      },
+	  dhiwyrei(){
+		  this.stageType=2
+		  this.getQecode()
+	  },
+      getCookie() {
+        const username = Cookies.get("username");
+        const password = Cookies.get("password");
+        const rememberMe = Cookies.get('rememberMe')
+        this.loginForm = {
+          username: username === undefined ? this.loginForm.username : username,
+          password: password === undefined ? this.loginForm.password : decrypt(password),
+          rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
+        };
+      },
+      handleLogin() {
+        this.$refs.loginForm.validate(valid => {
+          if (valid) {
+            this.loading = true;
+            if (this.loginForm.rememberMe) {
+              Cookies.set("username", this.loginForm.username, {
+                expires: 30
+              });
+              Cookies.set("password", encrypt(this.loginForm.password), {
+                expires: 30
+              });
+              Cookies.set('rememberMe', this.loginForm.rememberMe, {
+                expires: 30
+              });
+            } else {
+              Cookies.remove("username");
+              Cookies.remove("password");
+              Cookies.remove('rememberMe');
+            }
+            this.$store.dispatch("Login", this.loginForm).then(() => {
+              this.$router.push({
+                path: this.redirect || "/"
+              }).catch(() => {});
+            }).catch(() => {
+              this.loading = false;
+              this.getCode();
+            });
+          }
+        });
+      }
     }
-  }
-};
+  };
 </script>
 
 <style rel="stylesheet/scss" lang="scss">
@@ -355,4 +508,105 @@ export default {
 .login-code-img {
   height: 38px;
 }
+
+ .login-erw-thre {
+    border-radius: 4px;
+    background: #ffffff;
+    padding: 0;
+    text-align: center;
+    display: flex;
+    align-items: center;
+
+    .log_erw_thre_img {
+      width: 181px;
+      height: 270px;
+
+      .img {
+        width: 100%;
+        height: 100%;
+      }
+    }
+
+    .log_erw_thre_rig {
+      h3 {
+        font-size: 16px;
+        color: #343434;
+        margin: 0 0 40px;
+      }
+       .thre_btn{
+         width: 120px;
+         height: 36px;
+         color: #24B2FA;
+         border: 1px solid #24B2FA;
+         box-sizing: border-box;
+         border-radius: 18px;
+         cursor: pointer;
+         margin: 0 auto;
+         line-height: 36px;
+       }
+      p {
+        font-size: 14px;
+        color: #666666;
+        text-align: left;
+
+        span {
+          color: #24B2FA;
+          margin-left: 4px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+
+  .login-erw {
+    border-radius: 4px;
+    background: #ffffff;
+    width: 335px;
+    padding: 35px 31px 24px;
+    position: relative;
+    text-align: center;
+
+    .logerw_tit {
+      color: #343434;
+      font-size: 23px;
+      margin: 0 0 20px;
+    }
+
+    p {
+      color: #343434;
+      font-size: 15px;
+      margin: 0;
+      line-height: 22px;
+    }
+
+    .logerw_img {
+      width: 200px;
+      height: 200px;
+      margin: 22px auto 15px;
+      border: 1px solid #E4E4E4;
+      padding: 6px;
+      box-sizing: border-box;
+      img {
+        width: 100%;
+        height: 100%;
+      }
+    }
+    .ts_p{
+      font-size: 14px;
+      margin-bottom: 25px;
+      color: #343434;
+      span{
+        margin: 0 3px;
+        color: #24B2FA;
+        cursor: pointer;
+      }
+    }
+
+    .logerw_fot {
+      text-align: right;
+      font-size: 15px;
+      color: #666666;
+      cursor: pointer;
+    }
+  }
 </style>

+ 32 - 8
src/views/system/dept/index.vue

@@ -44,9 +44,12 @@
       v-loading="loading"
       :data="deptList"
       row-key="id"
-      default-expand-all
+	  lazy
+	  :load="load"
+      :default-expand-all="false"
       :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
     >
+	<!-- deptName -->
       <el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
       <el-table-column prop="orderNum" label="排序" width="200"></el-table-column>
       <el-table-column prop="status" label="状态" :formatter="statusFormat" width="100"></el-table-column>
@@ -139,7 +142,7 @@
 </template>
 
 <script>
-import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept";
+import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild, listDeptri,listDeptrity } from "@/api/system/dept";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 
@@ -202,6 +205,9 @@ export default {
     this.getDicts("sys_normal_disable").then(response => {
       this.statusOptions = response.data;
     });
+	listDeptrity().then(response => {
+	      this.deptOptions = this.handleTree(response.data, "id");
+	});
   },
   methods: {
     /** 查询部门列表 */
@@ -212,6 +218,19 @@ export default {
         this.loading = false;
       });
     },
+	// 列表懒加载
+	load(row, treeNode, resolve){
+		console.log(row, treeNode, resolve)
+		this.resetForm("queryForm");
+		this.queryParams.id = row.id
+		listDept(this.queryParams).then(response => {
+		  // this.deptList = this.handleTree(response.data, "id");
+		  resolve(response.data)
+		  this.loading = false;
+		});
+		 
+	},
+		
     /** 转换部门数据结构 */
     normalizer(node) {
       if (node.children && !node.children.length) {
@@ -248,11 +267,13 @@ export default {
     },
     /** 搜索按钮操作 */
     handleQuery() {
+		this.queryParams.id = undefined
       this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
+	  
       this.handleQuery();
     },
     /** 新增按钮操作 */
@@ -263,21 +284,24 @@ export default {
       }
       this.open = true;
       this.title = "添加部门";
-      listDept().then(response => {
-	        this.deptOptions = this.handleTree(response.data, "id");
-      });
+      
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
+	  console.log(row)
       getDept(row.id).then(response => {
         this.form = response.data;
+		if(this.form.parentId == undefined){
+			this.form.parentId = 0
+		}
+		console.log(this.form.parentId)
         this.open = true;
         this.title = "修改部门";
       });
-      listDeptExcludeChild(row.id).then(response => {
-	        this.deptOptions = this.handleTree(response.data, "id");
-      });
+      // listDeptExcludeChild(row.id).then(response => {
+	     //    this.deptOptions = this.handleTree(response.data, "id");
+      // });
     },
     /** 提交按钮 */
     submitForm: function() {

+ 6 - 1
src/views/system/menu/index.vue

@@ -133,6 +133,11 @@
               </el-popover>
             </el-form-item>
           </el-col>
+					<el-col :span="24">
+					  <el-form-item label="额外参数" prop="extraParam">
+					    <el-input v-model="form.extraParam" placeholder="请输入额外参数" />
+					  </el-form-item>
+					</el-col>
           <el-col :span="12">
             <el-form-item label="菜单名称" prop="menuName">
               <el-input v-model="form.menuName" placeholder="请输入菜单名称" />
@@ -255,7 +260,7 @@ export default {
         ],
         path: [
           { required: true, message: "路由地址不能为空", trigger: "blur" }
-        ]
+        ],
       }
     };
   },

+ 320 - 0
src/views/system/menudict/ageInterval/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "age_interval",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/askLeave/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_ask_leave",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/car/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_car",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/city/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_city",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/commonStatus/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_common_status",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/contraindication/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "contraindication",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/education/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_education",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/famous/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_famous",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/grantType/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_grant_type",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/jobGroup/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_job_group",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/jobStatus/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_job_status",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/jobType/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_job_status",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/keyIndustry/index.vue

@@ -0,0 +1,320 @@
+file:///E:/projects/ui/shujuju-web/src/views/system/menudict/vaccineName<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "key_trades",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/leaveType/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_job_type",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 319 - 0
src/views/system/menudict/moratoriumOnVaccination/index.vue

@@ -0,0 +1,319 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "moratorium_on_vaccination",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>

+ 320 - 0
src/views/system/menudict/normalDisable/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_normal_disable",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/noticeStatus/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_notice_status",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/noticeType/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_notice_type",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/operType/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_oper_type",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/otherStatus/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "other_status",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/place/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_place",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/political/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_political",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/seqTime/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_seq_time",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/showHide/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_show_hide",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 319 - 0
src/views/system/menudict/status/index.vue

@@ -0,0 +1,319 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_status",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>

+ 319 - 0
src/views/system/menudict/userJobType/index.vue

@@ -0,0 +1,319 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "user_job_type",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>

+ 319 - 0
src/views/system/menudict/userOptType/index.vue

@@ -0,0 +1,319 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "user_opt_type",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>

+ 319 - 0
src/views/system/menudict/userSex/index.vue

@@ -0,0 +1,319 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_user_sex",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>

+ 320 - 0
src/views/system/menudict/vaccinationSite/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "vaccination_site",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 320 - 0
src/views/system/menudict/vaccineName/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "vaccine_name",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>
+<strong></strong>

+ 319 - 0
src/views/system/menudict/week/index.vue

@@ -0,0 +1,319 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_week",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>

+ 319 - 0
src/views/system/menudict/yesNo/index.vue

@@ -0,0 +1,319 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" v-show="showSearch" :inline="true">
+      <el-form-item label="字典标签" prop="dictLabel">
+        <el-input
+          v-model="queryParams.dictLabel"
+          placeholder="请输入字典标签"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="数据状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:dict:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:dict:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:dict:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:dict:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="字典编码" align="center" prop="id" />
+      <el-table-column label="字典标签" align="center" prop="dictLabel" />
+      <el-table-column label="字典键值" align="center" prop="dictValue" />
+      <el-table-column label="字典排序" align="center" prop="dictSort" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
+      <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" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:dict:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dict:remove']"
+          >删除</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-dialog :close-on-click-modal="false" :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="字典类型">
+          <el-input v-model="form.dictType" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="数据标签" prop="dictLabel">
+          <el-input v-model="form.dictLabel" placeholder="请输入数据标签" />
+        </el-form-item>
+        <el-form-item label="数据键值" prop="dictValue">
+          <el-input v-model="form.dictValue" placeholder="请输入数据键值" />
+        </el-form-item>
+        <el-form-item label="显示排序" prop="dictSort">
+          <el-input-number v-model="form.dictSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictValue"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import { listData, getData, delData, addData, updateData } from "@/api/system/dict/menuDict";
+  import { listType } from "@/api/system/dict/type";
+
+  export default {
+    name: "Data",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 字典表格数据
+        dataList: [],
+        // 默认字典类型
+        defaultDictType: "",
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 状态数据字典
+        statusOptions: [],
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          dictName: undefined,
+          dictType: "sys_yes_no",
+          status: undefined
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          dictLabel: [
+            { required: true, message: "数据标签不能为空", trigger: "blur" }
+          ],
+          dictValue: [
+            { required: true, message: "数据键值不能为空", trigger: "blur" }
+          ],
+          dictSort: [
+            { required: true, message: "数据顺序不能为空", trigger: "blur" }
+          ]
+        }
+      };
+    },
+    created() {
+      const dictId = this.$route.params && this.$route.params.dictId;
+      this.getDicts("sys_normal_disable").then(response => {
+        this.statusOptions = response.data;
+      });
+      this.getList();
+    },
+    methods: {
+      /** 查询字典数据列表 */
+      getList() {
+        this.loading = true;
+        listData(this.queryParams).then(response => {
+          this.dataList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 数据状态字典翻译
+      statusFormat(row, column) {
+        return this.selectDictLabel(this.statusOptions, row.status);
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          id: undefined,
+          dictLabel: undefined,
+          dictValue: undefined,
+          dictSort: 0,
+          status: "0",
+          remark: undefined
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加字典数据";
+        this.form.dictType = this.queryParams.dictType;
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.id)
+        this.single = selection.length!=1
+        this.multiple = !selection.length
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids
+        getData(id).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改字典数据";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateData(this.form).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addData(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const ids = row.id || this.ids;
+        this.$confirm('是否确认删除字典编码为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delData(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('system/dict/data/export', {
+          ...this.queryParams
+        }, `data_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>

+ 15 - 7
src/views/system/role/index.vue

@@ -103,7 +103,7 @@
 
     <el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="角色编号" prop="roleId" width="120" />
+      <el-table-column label="角色编号" prop="id" width="120" />
       <el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" />
       <el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" width="150" />
       <el-table-column label="显示顺序" prop="roleSort" width="100" />
@@ -136,8 +136,9 @@
             type="text"
             icon="el-icon-circle-check"
             @click="handleDataScope(scope.row)"
-            v-hasPermi="['system:role:edit']"
+            
           >数据权限</el-button>
+		  <!-- v-hasPermi="['system:role:edit']" -->
           <el-button
             size="mini"
             type="text"
@@ -361,6 +362,7 @@ export default {
     getMenuTreeselect() {
       menuTreeselect().then(response => {
         this.menuOptions = response.data;
+		console.log(this.menuOptions)
       });
     },
     /** 查询部门树结构 */
@@ -409,7 +411,7 @@ export default {
           cancelButtonText: "取消",
           type: "warning"
         }).then(function() {
-          return changeRoleStatus(row.roleId, row.status);
+          return changeRoleStatus(row.id, row.status);
         }).then(() => {
           this.msgSuccess(text + "成功");
         }).catch(function() {
@@ -436,7 +438,7 @@ export default {
       this.deptExpand = true,
       this.deptNodeAll = false,
       this.form = {
-        roleId: undefined,
+        id: undefined,
         roleName: undefined,
         roleKey: undefined,
         roleSort: 0,
@@ -490,8 +492,10 @@ export default {
     },
     // 树权限(父子联动)
     handleCheckedTreeConnect(value, type) {
+		
       if (type == 'menu') {
         this.form.menuCheckStrictly = value ? true: false;
+		console.log(value,this.form.menuCheckStrictly)
       } else if (type == 'dept') {
         this.form.deptCheckStrictly = value ? true: false;
       }
@@ -499,7 +503,7 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
-      // this.getMenuTreeselect();
+      this.getMenuTreeselect();
       this.open = true;
       this.title = "添加角色";
     },
@@ -532,6 +536,7 @@ export default {
     },
     /** 分配数据权限操作 */
     handleDataScope(row) {
+	 console.log(row.id)
       const roleDeptTreeselect = this.getRoleDeptTreeselect(row.id);
       getRole(row.id).then(response => {
         this.form = response.data;
@@ -546,9 +551,11 @@ export default {
     },
     /** 提交按钮 */
     submitForm: function() {
+		console.log(2345)
       this.$refs["form"].validate(valid => {
         if (valid) {
-          if (this.form.roleId != undefined) {
+			console.log(234)
+          if (this.form.id != undefined) {
             this.form.menuIds = this.getMenuAllCheckedKeys();
             updateRole(this.form).then(response => {
               this.msgSuccess("修改成功");
@@ -568,7 +575,8 @@ export default {
     },
     /** 提交按钮(数据权限) */
     submitDataScope: function() {
-      if (this.form.roleId != undefined) {
+		console.log(345678,this.form.id)
+      if (this.form.id != undefined) {
         this.form.deptIds = this.getDeptAllCheckedKeys();
         dataScope(this.form).then(response => {
           this.msgSuccess("修改成功");

+ 30 - 78
src/views/system/surface/index.vue

@@ -21,29 +21,20 @@
       <el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="45" style="color: red;" align="center" />
         <template v-for="(item, index) in tabData">
-          <el-table-column :width="item.columnComment =='编号'? '50' : tabData.length>11?zjFn(item.columnComment)*19:'auto'" :label="item.columnComment" align="center" :prop="item.columnName" :key="index" show-overflow-tooltip>
+          <el-table-column :width="item.columnComment =='编号'? '50' : tabData.length>13?zjFn(item.columnComment)*19:'auto'" :label="item.columnComment" align="center" :prop="item.columnName" :key="index" show-overflow-tooltip>
           <!-- :style="scope.row.list_class" scope.row[scope.column.property] -->
             <template slot-scope="scope"  >
-              <img class="img_icon" v-if="item.htmlType=='imageUpload' && scope.row[scope.column.property] && scope.row[scope.column.property] !== '[]' " @click="imgBtn(JSON.parse(scope.row[scope.column.property])[0].url)"
+              <img class="img_icon" v-if="item.htmlType=='imageUpload' && scope.row[scope.column.property] && scope.row[scope.column.property] !== '[]'" @click="imgBtn(JSON.parse(scope.row[scope.column.property])[0].url)"
                 :src="scope.row[scope.column.property] == '[]' ? '' : JSON.parse(scope.row[scope.column.property])[0].url  " alt="">
-             <span  v-else-if="item.htmlType=='imageUpload' && scope.row[scope.column.property] && scope.row[scope.column.property] == '[]' || scope.row[scope.column.property] == ''">暂无数据</span>
+             <span :style="scope.row.list_class" v-else-if="item.htmlType=='imageUpload' && scope.row[scope.column.property] && scope.row[scope.column.property] == '[]'">暂无图片</span>
               <span :style="scope.row.list_class" v-else-if="item.columnName == 'status' ">{{ scope.row[scope.column.property] }}</span>
               <div v-else>
                 <span v-if="item.fkInfo">{{scope.row[scope.column.property].value}}</span>
                 <span v-else>{{scope.row[scope.column.property]}}</span>
               </div>
             </template>
-
           </el-table-column>
         </template>
-        <el-table-column  label="操作" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button type="text" :icon="item == 'A' ? 'el-icon-plus' : item == 'M' ? 'el-icon-edit' : item == 'D' ? 'el-icon-delete' : 'el-icon-view'" plain @click.stop="headerBtn(item,scope.row,2)" size="small" v-for="(item,index) in queryData.buttonList.split('').filter((res) => {return res!='S' && res!='A' && res!='Q' && res!='U'})"
-              :key="index +'name'"  >{{item | btnConversion}}</el-button>
-              <!-- this.tabName -->
-               <el-button type="text" icon="el-icon-delete" size="mini" @click="xiaoj(scope.row,2)" v-if="tabName == 'boman_temp_leaveform'">销假</el-button>
-          </template>
-        </el-table-column>
       </el-table>
       <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
         @pagination="getList" />
@@ -59,8 +50,7 @@
     addbjectSave,
     getByTableName,
     delMenu,
-    getObject,
-    ancellation
+    getObject
   } from '@/api/system/table.js'
   import {
     mapGetters,
@@ -108,9 +98,7 @@
 
             }
           }
-        },
-        // 销假参数
-        anges:[]
+        }
       };
     },
     filters: {
@@ -144,15 +132,25 @@
         meta,
         path
       } = route;
+	  console.log(this.$route,1234)
       let items = this.sidebarRouters.filter(res => {
         return res.path == ('/' + path.split('/')[1])
       })[0].children.filter(res => {
         return res.path == path.split('/')[2]
       })[0]
+	  console.log(items,987)
+	  let nuda = JSON.parse(items.extraParam)
+	  if(nuda == null ||  nuda == undefined){
+		  this.queryParams.fixedData.condition = {}
+	  }else{
+		  if(nuda == '{}'){
+			  this.queryParams.fixedData.condition = {}
+		  }else{
+			  this.queryParams.fixedData.condition = nuda
+		  }
+	  }
+	 
       this.tabName = items.sysTableName
-      if(this.tabName == 'boman_temp_leaveform'){
-        this.queryParams.fixedData.condition.leave_status = 'N'
-      }
       this.queryParams.table = items.sysTableName
       this.form.table = items.sysTableName
       this.init();
@@ -206,7 +204,7 @@
           })
         }
       },
-      headerBtn(item,inhe) {
+      headerBtn(item) {
         const _this = this
         switch (item) {
           case 'A':
@@ -215,58 +213,29 @@
               return
             }
           case 'M':
-          {
-            if (this.single && inhe == undefined) {
-              this.msgInfo('请勾选一条信息')
+            {
+              if (this.single) {
+                this.msgInfo('请勾选一条信息')
+                return
+              }
+              const id = this.ids.join(',')
+              this.routerFn(id, this.tabName)
               return
             }
-            // const id = inhe.id ||  this.ids.join(',')
-            let id = []
-            if(inhe !== undefined){
-              let jie = []
-              jie.push(inhe.id)
-              id = jie.join('')
-            }else{
-              id =  _this.ids.join('')
-              console.log(id)
-            }
-            this.routerFn(id, this.tabName)
-            return
-          }
-            // {
-            //   if (this.single) {
-            //     this.msgInfo('请勾选一条信息')
-            //     return
-            //   }
-            //   const id = this.ids.join(',')
-            //   this.routerFn(id, this.tabName)
-            //   return
-            // }
           case 'D':
             {
-              if (this.multiple && inhe == undefined) {
+              if (this.multiple) {
                 this.msgInfo('请勾选一条信息')
                 return
               }
-              //  console.log(_this.ids.join(','))
-              let id = []
-              if(inhe !== undefined){
-                let jie = []
-                jie.push(inhe.id)
-                 id = jie
-              }else{
-                id =  _this.ids
-                console.log(id)
-              }
-              console.log(id)
-              this.$confirm('是否确认删除?', "警告", {
+              this.$confirm('是否确认删除岗位编号为"' + this.ids + '"的数据项?', "警告", {
                 confirmButtonText: "确定",
                 cancelButtonText: "取消",
                 type: "warning"
               }).then(function() {
                 return delMenu({
                   table: _this.tabName,
-                  idList: id
+                  idList: _this.ids
                 });
               }).then(() => {
                 _this.getList();
@@ -274,8 +243,6 @@
               })
 
               return
-
-              return
             }
           case 'Q':
             {
@@ -373,22 +340,7 @@
           this.queryData = data
         })
       },
-      handleChange(val) {},
-      // 点击销假
-      xiaoj(val,index){
-        console.log(val)
-        this.anges.push(val.id)
-        this.anges =JSON.stringify(this.anges)
-        console.log(this.anges)
-        ancellation(this.anges).then(res =>{
-           console.log(res)
-           if(res.code == 200){
-             this.msgSuccess("操作成功");
-             this.queryParams.fixedData.condition.leave_status = 'N'
-             this.getList()
-           }
-        })
-      }
+      handleChange(val) {}
     },
   };
 </script>

+ 2104 - 0
src/views/system/time/index.vue

@@ -0,0 +1,2104 @@
+<template>
+	<div class="app-container">
+		<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="80px">
+			<el-row>
+				<el-col :span="24">
+					<el-row>
+						<el-col :span="8">
+							<el-form-item label="姓名" prop="userName">
+								<el-input v-model="queryParams.userName" placeholder="请输入姓名" style="width:240px;" clearable @keyup.enter.native="handleQuery" />
+							</el-form-item>
+						</el-col>
+						<el-col :span="8">
+							<el-form-item label="身份证号" prop="idCard">
+								<el-input v-model="queryParams.idCard" placeholder="请输入身份证号码" style="width:240px;" clearable @keyup.enter.native="handleQuery" />
+							</el-form-item>
+						</el-col>
+						<el-col :span="8">
+							<el-form-item label="联系号码" prop="phoneNum">
+								<el-input v-model="queryParams.phoneNum" placeholder="请输入联系号码" style="width:240px;"clearable @keyup.enter.native="handleQuery" />
+							</el-form-item>
+						</el-col>
+					</el-row>
+				</el-col>
+
+				<el-col :span="24">
+					<el-row>
+						<el-col :span="8">
+							<el-form-item label="剂次" prop="jici">
+								<el-select style="width:240px;" v-model="queryParams.jici" placeholder="剂次" clearable :disabled="shouwestwo">
+									<el-option v-for="dict in typeOptionstimesgt" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" />
+								</el-select>
+							</el-form-item>
+						</el-col><el-col :span="8">
+							<el-form-item label="年龄阶段" >
+								<el-select v-model="queryParams.params.age" placeholder="年龄阶段" style="width:240px;" clearable>
+									<el-option v-for="dict in angesList" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" />
+								</el-select>
+							</el-form-item>
+						</el-col>
+						<el-col :span="4.8">
+							<el-form-item label="重点行业" prop="keyIndustries">
+								<el-select v-model="queryParams.keyIndustries" placeholder="重点行业" clearable style="width:240px;">
+									<el-option v-for="dict in typeOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" />
+								</el-select>
+							</el-form-item>
+						</el-col>
+					</el-row>
+				</el-col>
+				<el-col :span="24">
+					<el-row>
+						<el-col :span="8">
+							<el-form-item label="疫苗名称" prop="vaccineName">
+								<el-select style="width:240px;" v-model="queryParams.vaccineName" placeholder="疫苗名称" clearable :disabled="shouwestwo" >
+									<el-option v-for="dict in typeOptionsname" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictLabel" />
+								</el-select>
+							</el-form-item>
+						</el-col>
+						<el-col :span="8">
+							<el-form-item label="接种时间" prop="vaccinationTime">
+							  <el-date-picker
+							    clearable
+							    v-model="queryParams.vaccinationTime"
+							    type="date"
+							    value-format="yyyy-MM-dd"
+							    format="yyyy-MM-dd"
+							    placeholder="选择接种时间"
+								style="width:240px;"
+								:disabled="shouwestwo"
+							  ></el-date-picker>
+							</el-form-item>
+						</el-col>
+						<el-col :span="8">
+							<el-form-item label="接种地点" prop="vaccinationPlace">
+								<el-select v-model="queryParams.vaccinationPlace" placeholder="接种地点" style="width:240px;" clearable :disabled="shouwestwo">
+									<el-option v-for="dict in typeOptionsvaccinatio" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictLabel" />
+									<!-- dictValue -->
+								</el-select>
+							</el-form-item>
+						</el-col>
+					</el-row>
+				</el-col>
+				<el-col :span="24">
+					<el-row>
+						<el-col :span="8" class="jehak">
+							<el-form-item label="户籍地址" prop="villagerGroup">
+								<el-cascader
+									placeholder="点击选择户籍地址"
+									:options="options"
+									filterable
+									@change="chahetwo"
+									:props="optionPropstwo"
+									style="width: 110%;"
+									@keyup.enter.native="handleQuery"
+									clearable
+								></el-cascader>
+							</el-form-item>
+						</el-col>
+						<el-col :span="14" class="jehak">
+							<el-form-item label="居住地址" prop="villagerGroup">
+								<!-- <el-cascader
+									placeholder="点击选择居住地址"
+									:options="options"
+									filterable
+									@change="chahetwo"
+									:props="optionProps"
+									style="width: 100%;"
+									@keyup.enter.native="handleQuery"
+									clearable
+								></el-cascader> -->
+								<area-select
+								type="text"
+								v-if="nhue"
+								v-model="selectedtwo"
+								:data="$pcaa"
+								:level="2"
+								style="display: flex;line-height: 18px;"
+								@change="onSelectedtwo"
+								@blur="dakousr"
+								class="hues"
+							></area-select>
+							</el-form-item>
+						</el-col>
+					</el-row>
+				</el-col>
+				<el-col :span="24">
+					<el-row>
+						<el-col :span="5">
+							<el-form-item label="接种情况" prop="isVaccination">
+								<el-radio-group v-model="queryParams.isVaccination" @change="gywoatwo">
+									<el-radio v-for="dict in typeOptionsty" :key="dict.dictValue" :label="dict.dictValue">{{ dict.dictLabel }}</el-radio>
+								</el-radio-group>
+							</el-form-item>
+						</el-col>
+						<el-col :span="5">
+							<el-form-item label="应种未种" prop="shouldBe">
+								<el-radio-group v-model="queryParams.shouldBe" style="width: 100%;" :disabled="!shouwestwo">
+									<el-radio v-for="dict in typeOptionsty" :key="dict.dictValue" :label="dict.dictValue">{{ dict.dictLabel }}</el-radio>
+								</el-radio-group>
+								<!-- <el-input
+												v-model="queryParams.shouldBe"
+												placeholder="请输入应种未种
+							"
+												clearable
+												size="small"
+												@keyup.enter.native="handleQuery"
+											/> -->
+							</el-form-item>
+						</el-col>
+						<el-col :span="5">
+							<el-form-item label="应续未续" prop="shouldSlow">
+								<el-radio-group v-model="queryParams.shouldSlow" style="width: 100%;">
+									<el-radio v-for="dict in typeOptionsty" :key="dict.dictValue" :label="dict.dictValue">{{ dict.dictLabel }}</el-radio>
+								</el-radio-group>
+								<!-- <el-input
+												v-model="queryParams.shouldBe"
+												placeholder="请输入应种未种
+							"
+												clearable
+												size="small"
+												@keyup.enter.native="handleQuery"
+											/> -->
+							</el-form-item>
+						</el-col>
+
+						<el-col :span="4" style="text-align: center;">
+							<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-col>
+					</el-row>
+				</el-col>
+			</el-row>
+		</el-form>
+
+		<el-row :gutter="10" class="mb8">
+			<el-col :span="1.5"><el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['core:info:add']">新增</el-button></el-col>
+			<el-col :span="1.5">
+				<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['core:info:edit']">修改</el-button>
+			</el-col>
+			<el-col :span="1.5">
+				<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['core:info:remove']">删除</el-button>
+			</el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+        >导入</el-button>
+      </el-col>
+	  <el-col :span="1.5">
+	    <el-button
+	     type="danger"
+	      plain
+	      icon="el-icon-view"
+	      size="mini"
+	      @click="handleImporthg"
+	    >导入错误日志</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:info:export']">导出</el-button>
+			</el-col> -->
+			<el-col :span="1.5">
+				<el-button type="primary" plain icon="el-icon-view" size="mini" @click="handleExportjy" :disabled="exportflag" v-hasPermi="['core:info:export']">导出进度</el-button>
+			</el-col>
+			<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+		</el-row>
+
+		<el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange" stripe style="width: 100%" height="350">
+			<el-table-column type="selection" width="55" align="center" />
+			<el-table-column label="姓名" align="center" prop="userName" fixed />
+			<el-table-column label="是否完成" align="center" prop="progress" fixed />
+			<el-table-column label="最后一次的接种时间" align="center" prop="vaccinationTime" width="150" />
+			<el-table-column label="下次应接时间" align="center" prop="vaccinationTimeNext" width="150"/>
+			<el-table-column label="联系方式" align="center" prop="phoneNum" width="110" />
+			<!-- <el-table-column label="性别" align="center" prop="gender" /> -->
+			<el-table-column label="受种者编号" align="center" prop="code"   width="170"/>
+			<el-table-column label="身份证号码" align="center" prop="idCard" width="180" />
+
+			<!-- <el-table-column label="现居省份" align="center" prop="province" />
+			<el-table-column label="现居市" align="center" prop="city" />
+			<el-table-column label="现居县区" align="center" prop="region" /> -->
+			<el-table-column label="户籍地址" align="center" prop="domicileSelect" width="250" />
+			<el-table-column label="居住地址" align="center" prop="nowInSelect" width="250" />
+
+			<!-- <el-table-column label="户籍乡镇" align="center" prop="villageTowns" />
+			<el-table-column label="户籍村居" align="center" prop="village" />
+			<el-table-column label="户籍村民组" align="center" prop="villagerGroup" /> -->
+			<!-- <el-table-column label="户主" align="center" prop="houseType" /> -->
+
+			<!-- <el-table-column label="重点行业" align="center" prop="keyIndustries" /> -->
+			<!-- <el-table-column label="接种情况" align="center" prop="isVaccination" /> -->
+			<!-- <el-table-column label="接种记录" align="center" class-name="small-padding fixed-width">
+				<template slot-scope="scope">
+					<el-button size="mini" type="text" @click="chakei(scope.row)">查看</el-button>
+
+				</template>
+			</el-table-column> -->
+			<!-- v-hasPermi="['core:info:edit']" -->
+			<!-- <el-table-column
+				label="应种未种
+"
+				align="center"
+				prop="shouldBe"
+			/> -->
+			<!-- <el-table-column label="工作单位" align="center" prop="other" /> -->
+			<!-- <el-table-column label="进度" align="center" prop="vaccineInfoUserList[0].progress" /> -->
+			<!-- <el-table-column label="备注" align="center" prop="remark" /> -->
+			<!-- <el-table-column label="状态" align="center" prop="status">
+        <template slot-scope="scope">
+        	<span>{{ scope.row.status==0?'启用' :'停用' }}</span>
+        </template>
+      </el-table-column> -->
+			<!-- <el-table-column label="是否删除" align="center" prop="isDel" /> -->
+			<el-table-column label="操作" align="left" class-name="small-padding fixed-width" fixed="right" >
+				<template slot-scope="scope">
+					<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['core:info:edit']">查看修改</el-button>
+					<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" class="hueya" v-hasPermi="['core:info:remove']">删除</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-dialog :title="title" :visible.sync="opens" width="1240px" append-to-body>
+			<el-form ref="form" :model="form" :rules="rules" label-width="100px">
+				<el-row>
+					<el-col :span="8">
+						<el-form-item label="身份证号" prop="idCard"><el-input v-model="form.idCard" placeholder="请输入身份证号码" @blur="idcde" /></el-form-item>
+					</el-col>
+					<el-col :span="8">
+						<el-form-item label="姓名" prop="userName"><el-input v-model="form.userName" placeholder="请输入姓名" /></el-form-item>
+					</el-col>
+					<!-- <el-col :span="6">
+						<el-form-item label="出生日期" prop="birthday">
+							<el-date-picker
+								clearable
+								v-model="form.birthday"
+								type="date"
+								value-format="yyyy-MM-dd"
+								format="yyyy-MM-dd "
+								style="width: 100%;"
+								placeholder="选择出生日期"
+							></el-date-picker>
+						</el-form-item>
+					</el-col> -->
+					<el-col :span="8">
+						<el-form-item label="性别" prop="gender">
+							<!-- <el-input v-model="form.gender" placeholder="请输入性别" /> -->
+							<el-select v-model="form.gender" placeholder="性别" clearable style="width: 100%;">
+								<el-option v-for="dict in statusOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" />
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-row>
+							<el-col :span="8">
+								<el-form-item label="联系号码" prop="phoneNum"><el-input v-model="form.phoneNum" placeholder="请输入联系号码" /></el-form-item>
+							</el-col>
+							<!-- <el-col :span="6">
+								<el-form-item label="编号" prop="code"><el-input v-model="form.code" placeholder="请输入编号" /></el-form-item>
+							</el-col> -->
+							<el-col :span="8">
+								<el-form-item label="重点行业" prop="keyIndustries">
+									<el-select v-model="form.keyIndustries" placeholder="重点行业" clearable style="width: 100%;">
+										<el-option v-for="dict in typeOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" />
+									</el-select>
+								</el-form-item>
+							</el-col>
+							<el-col :span="8">
+								<el-form-item label="年龄" prop="age"><el-input v-model="form.age" placeholder="请输入年龄" /></el-form-item>
+							</el-col>
+						</el-row>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="现居地" prop="region">
+							<area-select
+								type="text"
+								v-model="selected"
+								v-if="jue"
+								:data="$pcaa"
+								:level="2"
+								style="display: flex;line-height: 18px;"
+								@change="onSelected"
+								class="hues"
+							></area-select>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="详细地址" prop="nowIn"><el-input v-model="form.nowIn" type="input" placeholder="请输入内容" /></el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-row>
+							<el-col :span="12">
+								<el-form-item label="户籍地址" prop="villageTowns">
+									<!-- <el-input v-model="form.villageTowns" type="textarea" placeholder="请输入内容" /> -->
+									<!-- <treeselect v-model="form.parentId" :options="deptOptionstwo" :normalizer="normalizer" :flat="true" :maxHeight="150" @select="djieskle" :multiple=true placeholder="点击选择户籍地" /> -->
+									<el-cascader
+										placeholder="点击选择户籍地址"
+										:options="options"
+										:filterable="true"
+										separator="/"
+										@change="chahe"
+										v-model="villageTownshy"
+										:props="optionProps"
+										style="width: 100%;"
+										ref="myCascader"
+									></el-cascader>
+								</el-form-item>
+							</el-col>
+
+							<el-col :span="12">
+								<el-form-item label="详细地址" prop="domicile"><el-input v-model="form.domicile" type="input" placeholder="请输入户籍详细地址" /></el-form-item>
+							</el-col>
+						</el-row>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="工作单位" prop="work_unit"><el-input v-model="form.workUnit" placeholder="请输入工作单位" /></el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="备注" prop="remark"><el-input v-model="form.remark" placeholder="请输入备注" /></el-form-item>
+					</el-col>
+					<!-- <el-col :span="12">
+						<el-form-item label="人群分类" prop="crowd_classification"><el-input v-model="form.crowd_classification" placeholder="请输入人群分类" /></el-form-item>
+					</el-col> -->
+
+					<el-col :span="24">
+						<el-col :span="12">
+							<el-form-item label="户主" prop="houseType">
+								<!-- <el-select v-model="form.houseType" placeholder="请选择户别"><el-option label="请选择字典生成" value="" /></el-select> -->
+								<!-- <el-input v-model="form.houseType" placeholder="请输入内容" /> -->
+								<el-select v-model="form.houseType" placeholder="户主" clearable style="width: 100%;">
+									<el-option v-for="dict in typeOptionshuuj" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" />
+								</el-select>
+							</el-form-item>
+						</el-col>
+						<el-col :span="12">
+							<el-form-item label="受种者编号" prop="code">
+							<el-input v-model="form.code" placeholder="请输入受种者编号"/>
+							</el-form-item>
+						</el-col>
+					</el-col>
+					<el-col :span="24">
+						<el-row>
+							<el-col :span="5.5">
+								<el-form-item label="接种情况" prop="isVaccination">
+									<!-- <el-input v-model="form.isVaccination" placeholder="请输入接种情况" /> -->
+									<el-radio-group v-model="form.isVaccination" @change="gywoa">
+										<el-radio v-for="dict in typeOptionsty" :key="dict.dictValue" :label="dict.dictValue">{{ dict.dictLabel }}</el-radio>
+									</el-radio-group>
+								</el-form-item>
+							</el-col>
+							<!-- <el-col :span="3">
+								<el-form-item label="应种未种" prop="shouldBe">
+									<el-checkbox :disabled="shouwes" v-model="form.shouldBe" true-label="是" false-label="否"></el-checkbox>
+								</el-form-item>
+							</el-col> -->
+							<!-- <el-col :span="5">
+								<el-form-item label="应续未续" prop="shouldSlow">
+									<el-checkbox v-model="form.shouldSlow" true-label="是" false-label="否"></el-checkbox>
+								</el-form-item>
+							</el-col> -->
+						</el-row>
+					</el-col>
+					<el-col :span="24" style="height: 40px;"><el-form-item label="接种记录 :" prop="shouldBe"></el-form-item></el-col>
+					<el-col :span="24" v-for="(item, index) in form.vaccineInfoUserList" :key="index">
+						<el-row type="flex">
+							<!-- <el-col :span="4"> -->
+								<el-form-item label="疫苗名称" class="iejghiadh">
+									<el-select v-model="item.vaccineName" placeholder="疫苗名称" style="width:123px" clearable :disabled="naneme  ||  item.disableg " @change="changeheu(index)">
+										<el-option
+											v-for="dict in typeOptionsname"
+											:key="dict.dictValue"
+											:label="dict.dictLabel"
+											:value="{ value: dict.dictValue, label: dict.dictLabel }"
+										/>
+									</el-select>
+								</el-form-item>
+							<!-- </el-col> -->
+							<!-- <el-col :span="4" class="oiuyty"> -->
+								<el-form-item label="接种时间" class="oiuyty">
+									<el-date-picker
+										clearable
+										v-model="item.vaccinationTime"
+										type="datetime"
+										value-format="yyyy-MM-dd HH:mm:ss"
+										format="yyyy-MM-dd HH:mm:ss"
+										placeholder="选择接种时间"
+										style="width: 167px;"
+										:disabled="naneme ||  item.disableg"
+									></el-date-picker>
+								</el-form-item>
+							<!-- </el-col> -->
+							<el-col :span="5" class="ijeuhdy">
+								<el-form-item label="接种地点" >
+									<el-select :disabled="naneme || item.disableg " v-model="item.vaccinationPlace" placeholder="接种地点" clearable size="small" style="100%">
+										<el-option v-for="dict in typeOptionsvaccinatio" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictLabel" />
+										<!-- dict.dictValue -->
+									</el-select>
+								</el-form-item>
+							</el-col>
+							<!-- <el-col :span="3"> -->
+								<el-form-item label="剂次"  class="jhy">
+									<!-- <el-input v-model="form.jici" placeholder="请输入剂次" /> -->
+									<el-select @change="changeheujici(index)" v-model="item.jici" placeholder="剂次" clearable style="width:75px" :disabled="naneme ||  item.disableg" >
+										<el-option
+											v-for="dict in typeOptionstimes"
+											:key="dict.dictValue"
+											:label="dict.dictLabel"
+											:value="{ value: dict.dictValue, label: dict.dictLabel }"
+										/>
+									</el-select>
+								</el-form-item>
+							<!-- </el-col> -->
+
+							<!-- <el-col style="width: 135px;">
+								<el-form-item label="进度"  class="jhy">
+									<el-select v-model="item.progress" placeholder="进度" clearable style="width:100%" :disabled="naneme ||  item.disableg">
+										<el-option v-for="dict in statusOptionstue" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictLabel" />
+									</el-select>
+								</el-form-item>
+							</el-col> -->
+							<el-col :span="3">
+								<el-form-item class="jdueuh">
+									<div class="jdidur  jdoier">
+										<el-tooltip class="item" effect="dark" content="请上传png/jpg文档,且不超过50MB" placement="top-start">
+										<el-upload
+											:disabled="naneme"
+											class="upload-demo"
+											:headers="{ Authorization: 'Bearer ' + getToken() }"
+											:action="process + '/boman-file/upload'"
+											:on-change="handleChangertwo"
+											:on-success="upImageFntwo"
+											:on-error="errtwo"
+											:on-remove="reseImagetwo"
+											:file-list="item.url == '' ? item.url : JSON.parse(item.url)"
+											:on-preview="handlePictureCardPreviewtwo"
+											:before-upload="beforstwo"
+										>
+											<el-button size="small" type="primary">附件上传</el-button>
+										</el-upload>
+										</el-tooltip>
+										<!-- <div class="el-upload__tip" style="margin-left: 5px; color: red; margin-top: 0;">请上传png/jpg文档,且不超过50MB</div> -->
+										<div class="hyeoa">
+											 <el-tooltip class="item" effect="dark" content="新增疫苗信息,请慎重操作" placement="top-start">
+											      <img src="../../../assets/images/icon_tc_add.png" alt="" class="hueyde" @click="tijea(index)" />
+											    </el-tooltip>
+												<el-tooltip class="item" effect="dark" content="删除无法恢复,请慎重操作" placement="top-start">
+												     <img src="../../../assets/images/delei.png" alt="" class="hueydele" @click="naeyrfakjf(index, item)" />
+												   </el-tooltip>
+										</div>
+									</div>
+								</el-form-item>
+							</el-col>
+
+							<!-- <el-col :span="2" class="hjdoecdre"> -->
+
+							<!-- </el-col> -->
+						</el-row>
+					</el-col>
+					<el-col :span="24">
+						<el-row>
+							<el-col :span="7" style="width: 360px;">
+								<el-row>
+									<el-col :span="16">
+										<el-form-item label="禁忌症" prop="contraindication" class="ehiqya">
+											<el-select :disabled="shouwes" v-model="form.contraindication" placeholder="禁忌症" clearable size="small" style="width: 100%;">
+												<el-option v-for="dict in typeOptionscont" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" />
+											</el-select>
+										</el-form-item>
+									</el-col>
+									<el-col :span="6" style="margin-left: 10px;">
+										<div class="jdidur">
+											<el-tooltip class="item" effect="dark" content="请上传png/jpg文档,且不超过50MB" placement="top-start">
+											<el-upload
+												:disabled="shouwes"
+												class="upload-demo"
+												:headers="{ Authorization: 'Bearer ' + getToken() }"
+												:action="process + '/boman-file/upload'"
+												:on-change="handleChangert"
+												:on-success="upImageFn"
+												:on-error="err"
+												:on-remove="reseImage"
+												:file-list="config"
+												:on-preview="handlePictureCardPreview"
+												:before-upload="befors"
+											>
+												<el-button size="small" type="primary">附件上传</el-button>
+											</el-upload>
+											</el-tooltip>
+											<!-- <div class="el-upload__tip" style="margin-left: 5px; color: red; margin-top: 0;">请上传png/jpg文档,且不超过50MB</div> -->
+										</div>
+									</el-col>
+
+								</el-row>
+							</el-col>
+							<el-col :span="9">
+								<el-row>
+									<el-col :span="18" class="znshu">
+								<el-form-item label="暂缓接种" prop="suspend">
+									<!-- <el-input
+                  						v-model="form.suspend"
+                  						placeholder="请输入暂缓"
+                  					/> -->
+									<el-select :disabled="shouwes" v-model="form.suspend" placeholder="暂缓接种" clearable size="small" style="width: 100%;">
+											<el-option v-for="dict in typeOptionstyzandeh" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictLabel" />
+											<!-- dict.dictValue -->
+									</el-select>
+								</el-form-item>
+							</el-col>
+									<el-col :span="5" style="margin-left: 10px;">
+										<div class="jdidur">
+											<el-tooltip class="item" effect="dark" content="请上传png/jpg文档,且不超过50MB" placement="top-start">
+											<el-upload
+												:disabled="shouwes"
+												class="upload-demo"
+												:headers="{ Authorization: 'Bearer ' + getToken() }"
+												:action="process + '/boman-file/upload'"
+												:on-change="handleChangerther"
+												:on-success="upImageFnther"
+												:on-error="err"
+												:on-remove="reseImagether"
+												:file-list="configther"
+												:on-preview="handlePictureCardPreviewther"
+												:before-upload="beforsther"
+											>
+												<el-button size="small" type="primary">附件上传</el-button>
+											</el-upload>
+											</el-tooltip>
+											<!-- <div class="el-upload__tip" style="margin-left: 5px; color: red; margin-top: 0;">请上传png/jpg文档,且不超过50MB</div> -->
+										</div>
+									</el-col>
+
+								</el-row>
+							</el-col>
+							<el-col :span="7">
+								<el-row>
+									<el-col :span="12" class="heioangd">
+										<el-form-item label="其他" prop="other" class="ehiqya">
+											<el-select :disabled="shouwes" v-model="form.other" placeholder="其他" clearable size="small" style="width: 100%;">
+												<el-option v-for="dict in typeOptionscontqit" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictLabel"/>
+												<!-- dictValue -->
+											</el-select>
+										</el-form-item>
+									</el-col>
+									<el-col :span="8" style="margin-left: 10px;">
+										<div class="jdidur">
+											<el-tooltip class="item" effect="dark" content="请上传png/jpg文档,且不超过50MB" placement="top-start">
+											<el-upload
+												:disabled="shouwes"
+												class="upload-demo"
+												:headers="{ Authorization: 'Bearer ' + getToken() }"
+												:action="process + '/boman-file/upload'"
+												:on-change="handleChangerfor"
+												:on-success="upImageFnfor"
+												:on-error="errfor"
+												:on-remove="reseImagefor"
+												:file-list="configfor"
+												:on-preview="handlePictureCardPreviewfor"
+												:before-upload="beforsfor"
+											>
+												<el-button size="small" type="primary">附件上传</el-button>
+											</el-upload>
+											</el-tooltip>
+											<!-- <div class="el-upload__tip" style="margin-left: 5px; color: red; margin-top: 0;">请上传png/jpg文档,且不超过50MB</div> -->
+										</div>
+									</el-col>
+
+								</el-row>
+							</el-col>
+
+						</el-row>
+					</el-col>
+				</el-row>
+			</el-form>
+			<div slot="footer" class="dialog-footer">
+				<el-button type="primary" @click="submitForm">确 定</el-button>
+				<el-button @click="cancel">取 消</el-button>
+			</div>
+		</el-dialog>
+		<!-- 图片预览 -->
+		<el-dialog :close-on-click-modal="false" title="预览" :visible.sync="imashow" width="1200px" append-to-body>
+			<div class="demo-image__preview">
+				<img :src="dialogImageUrl" alt="" style="width: 100%;" />
+				<!-- <iframe v-if="shouewhu" :src="dialogImageUrl" frameborder="0" style="width: 100%; height: 100vh;"></iframe>
+      <a v-if="exelshow"  :href="dialogImageUrl" :download="dialogImageUrlname" >{{dialogImageUrlname}} <span style="color: #039BE5;">点击下载</span></a> -->
+			</div>
+		</el-dialog>
+		<!-- 接种记录 -->
+		<el-dialog :close-on-click-modal="false" title="接种记录" :visible.sync="jiezhong" width="1200px" append-to-body class="ojhgy">
+			<el-table :data="jiezheList" stripe style="width: 100%">
+				<el-table-column label="疫苗名称" align="center" prop="vaccineName" />
+				<el-table-column label="剂次" align="center" prop="jici" />
+				<el-table-column label="接种时间" align="center" prop="vaccinationTime" width="180">
+					<template slot-scope="scope">
+						<span>{{ scope.row.vaccinationTime }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column label="接种地点" align="center" prop=".vaccinationPlace" />
+			</el-table>
+		</el-dialog>
+    <!-- 用户导入对话框 -->
+    <el-dialog :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.opens" width="400px" append-to-body>
+		<!-- :action="upload.url + '?updateSupport=' + upload.updateSupport" -->
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          <!-- <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据 -->
+          <!-- <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link> -->
+		  <a style="color: #1890ff;" href="http://118.178.139.79:5002/statics/template/疫苗接种导入模板.xls" download="疫苗接种导入模板">下载模板</a>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.opens = false">取 消</el-button>
+      </div>
+    </el-dialog>
+    <!-- 导出日志错误 -->
+    <el-dialog :close-on-click-modal="false" title="导入错误日志" :visible.sync="errorlog" width="1200px" append-to-body class="ojhgy">
+    	<el-table :data="errorList" stripe style="width: 100%">
+    		<el-table-column label="姓名" align="center" prop="username" />
+    		<el-table-column label="所在乡镇" align="center" prop="town" />
+    		<el-table-column label="疫苗名称" align="center" prop="vaccineName" />
+    		<el-table-column label="剂次" align="center" prop="jici" />
+    		<el-table-column label="接种时间" align="center" prop="vaccinationTime" width="180">
+    			<template slot-scope="scope">
+    				<span>{{ scope.row.vaccinationTime }}</span>
+    			</template>
+    		</el-table-column>
+    		<el-table-column label="接种地点" align="center" prop="vaccinationPlace" />
+    	</el-table>
+    </el-dialog>
+
+	</div>
+</template>
+
+<script>
+import { listInfo, getInfo, delInfo, addInfo, updateInfo, exportInfo, listRoleer, idces, delInfort,yiaoe,exportConfig,exportConfigtyr,importLog } from '@/api/system/time';
+import { treeselect } from '@/api/system/dept';
+import Treeselect from '@riophae/vue-treeselect';
+import { getToken } from '@/utils/auth';
+import '@riophae/vue-treeselect/dist/vue-treeselect.css';
+export default {
+	name: 'Info',
+	components: { Treeselect },
+	data() {
+		return {
+			// 遮罩层
+			loading: true,
+			// 选中数组
+			ids: [],
+			// 非单个禁用
+			single: true,
+			// 非多个禁用
+			multiple: true,
+			// 显示搜索条件
+			showSearch: true,
+			// 总条数
+			total: 0,
+			// 疫苗信息表格数据
+			infoList: [],
+			dialogImageUrl: '',
+			// 弹出层标题
+			title: '',
+			// 是否显示弹出层
+			opens: false,
+			process: process.env.VUE_APP_BASE_API,
+			// 查询参数
+			queryParams: {
+				pageNum: 1,
+				pageSize: 10,
+				villageTowns: null,
+				village: null,
+				villagerGroup: null,
+				houseType: null,
+				domicile: null,
+				province: null,
+				city: null,
+				region: null,
+				userName: null,
+				gender: null,
+				idCard: null,
+				phoneNum: null,
+				keyIndustries: null,
+				isVaccination: null,
+				vaccineName: null,
+				jici: null,
+				vaccinationTime: null,
+				vaccinationPlace: null,
+				contraindication: null,
+				suspend: null,
+				death: null,
+				lostInMissing: null,
+				shouldBe: null,
+				other: null,
+				progress: null,
+				status: null,
+				isDel: null,
+				params:{
+					age:''
+				}
+			},
+			config: [],
+			comfietg:[],
+			configther:[],
+			configfor:[],
+			// 表单参数
+			form: {
+				nowIn: '',
+				age:'',
+				code:'',
+				vaccineInfoUserList: [
+					{
+						vaccineName: '',
+						vaccinationTime: '',
+						vaccinationPlace: '',
+						jici: '',
+						progress: '',
+						url:null,
+						disableg:false
+					}
+				]
+			},
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        opens: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/boman-web-core//file/common/importYmjz"
+      },
+			// 表单校验
+			rules: {
+				region: [{ required: true, message: '区不能为空', trigger: 'blur' }],
+				idCard: [{ required: true, message: '身份证号码不能为空', trigger: 'blur' }],
+				userName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
+				villageTowns:[{ required: true, message: '户籍地址不能为空或不能只选潜山市', trigger: 'blur' }],
+				code:[{
+					required: true, message: '受种者编号不能为空', trigger: 'blur'
+				}]
+			},
+			selected: ['安徽省', '安庆市', '潜山市'],
+			selectedtwo: [],
+			statusOptions: [
+				{
+					dictValue: '女',
+					dictLabel: '女'
+				},
+				{
+					dictValue: '男',
+					dictLabel: '男'
+				}
+			],
+			statusOptionstue: [
+				{
+					dictValue: '已完成',
+					dictLabel: '已完成'
+				},
+				{
+					dictValue: '未完成',
+					dictLabel: '未完成'
+				}
+			],
+			typeOptionshuuj: [
+				{
+					dictValue: '是',
+					dictLabel: '是'
+				},
+				{
+					dictValue: '否',
+					dictLabel: '否'
+				}
+			],
+			deptOptionstwo: [],
+			options: [],
+			optionProps: {
+				value: 'label',
+				label: 'label',
+				children: 'children',
+				checkStrictly: true
+			},
+			optionPropstwo: {
+				value: 'id',
+				label: 'label',
+				children: 'children',
+				checkStrictly: true
+			},
+			heuiq: [],
+			typeOptions: [],
+			typeOptionsty: [
+				{
+					dictValue: '是',
+					dictLabel: '是'
+				},
+				{
+					dictValue: '否',
+					dictLabel: '否'
+				}
+			],
+			typeOptionstyzandeh:[],
+			angesList: [
+
+			],
+			typeOptionsname: [],
+			typeOptionstimes: [],
+			typeOptionsvaccinatio: [],
+			typeOptionscont: [],
+			typeOptionscontty: [],
+			typeOptionscontqit:[],
+			// 剂次
+			typeOptionstimesgt: [
+				{
+					dictValue: '1',
+					dictLabel: '1'
+				},
+				{
+					dictValue: '2',
+					dictLabel: '2'
+				},
+				{
+					dictValue: '3',
+					dictLabel: '3'
+				},
+				{
+					dictValue: '加强针',
+					dictLabel: '加强针'
+				}
+			],
+			imashow: false,
+			naneme: false,
+			shouwes: false,
+			shouwestwo:false,
+			villageTownshy: undefined,
+			naiseurya: '',
+			hsuej: '',
+			jdourdjoaj: false,
+			jiezhong: false,
+			jiezheList: [],
+			fireLise:{config:[]},
+			nameutaiL:0,
+			jue:false,
+			nhue:true,
+      exportflag:true,
+      errorlog:false,
+      errorList:[],
+		};
+	},
+	created() {
+		this.getList();
+		this.getTreeselectjue();
+		// 重点行业
+		this.getDicts('key_trades').then(response => {
+			this.typeOptions = response.data;
+		});
+		// 疫苗名称
+		this.getDicts('vaccine_name').then(response => {
+			this.typeOptionsname = response.data;
+		});
+
+		// 接种地点
+		this.getDicts('vaccination_site').then(response => {
+			this.typeOptionsvaccinatio = response.data;
+		});
+		// 暂缓接种
+		this.getDicts('moratorium_on_vaccination').then(response => {
+			this.typeOptionstyzandeh = response.data;
+		});
+		// typeOptionscontty
+		// 禁忌症
+		this.getDicts('contraindication').then(response => {
+			this.typeOptionscont = response.data;
+		});
+		// 其他 typeOptionscontqit
+		this.getDicts('other_status').then(response => {
+			this.typeOptionscontqit = response.data;
+		});
+		// 年龄阶段
+		this.getDicts('age_interval').then(response => {
+			this.angesList = response.data;
+		});
+
+		// this.form.province = this.selected[0];
+		// this.form.city = this.selected[1];
+		// this.form.region = this.selected[2];
+		console.log(this.selected,456)
+		// this.queryParams.province = this.selectedtwo[0];
+		// this.queryParams.city = this.selectedtwo[1];
+		// this.queryParams.region = this.selectedtwo[2];
+		// this.naiseurya = this.form.province + this.form.city + this.form.region;
+	},
+	mounted() {
+		console.log(136)
+	},
+	methods: {
+		onSelected(data) {
+			console.log(data, 125);
+			// province
+			this.form.province = data[0];
+			this.form.city = data[1];
+			this.form.region = data[2];
+			this.naiseurya = this.form.province + this.form.city + this.form.region;
+			if (this.jdourdjoaj == false) {
+				// 修改
+				this.form.nowIn = '';
+			}
+			// this.form.nowIn = undefined
+			// this.form.villageTowns = data[3]
+		},
+		dakousr() {
+			console.log(2345);
+		},
+		onSelectedtwo(data) {
+			console.log(data);
+			// province
+			this.queryParams.province = data[0];
+			this.queryParams.city = data[1];
+			this.queryParams.region = data[2];
+			// this.queryParams.villageTowns = data[3]
+		},
+		/** 查询疫苗信息列表 */
+		getList() {
+			this.loading = true;
+			listInfo(this.queryParams).then(response => {
+				this.infoList = response.rows;
+				this.total = response.total;
+				this.loading = false;
+			});
+		},
+		getToken() {
+			return getToken();
+		},
+		getTreeselectjue() {
+			this.loading = true;
+			listRoleer(this.queryParams).then(response => {
+				this.options = response.data;
+				this.loading = false;
+			});
+		},
+		/** 转换角色数据结构 */
+		normalizer(node) {
+			// if (node.children && !node.children.length) {
+			//   delete node.children;
+			// }
+			return {
+				id: node.id,
+				label: node.roleName
+			};
+		},
+		// 点击组/角色
+		djieskle(node, instanceId) {
+			// this.personnel(node.id);
+			console.log(node, instanceId);
+		},
+		// 身份证
+		idcde(event) {
+			console.log(event);
+			// 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
+			let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
+			if (reg.test(this.form.idCard)) {
+				this.idea();
+				// this.go(this.form.idCard.length);
+				// callback()
+			} else {
+				// callback(new Error('身份证号码不正确'))
+				this.msgInfo('身份证号码不正确');
+			}
+		},
+		// 实现自动生成生日,性别,年龄
+		go(val) {
+			let iden = this.form.idCard;
+			let sex = null;
+			let birth = null;
+			let birthr = '';
+			let myDate = new Date();
+			let month = myDate.getMonth() + 1;
+			let day = myDate.getDate();
+			let age = 0;
+
+			if (val === 18) {
+				age = myDate.getFullYear() - iden.substring(6, 10) - 1;
+				sex = iden.substring(16, 17);
+				birth = iden.substring(6, 10) + '-' + iden.substring(10, 12) + '-' + iden.substring(12, 14);
+				if (iden.substring(10, 12) < month || (iden.substring(10, 12) == month && iden.substring(12, 14) <= day)) age++;
+			}
+			if (val === 15) {
+				age = myDate.getFullYear() - iden.substring(6, 8) - 1901;
+				sex = iden.substring(13, 14);
+				birth = '19' + iden.substring(6, 8) + '-' + iden.substring(8, 10) + '-' + iden.substring(10, 12);
+				if (iden.substring(8, 10) < month || (iden.substring(8, 10) == month && iden.substring(10, 12) <= day)) age++;
+			}
+
+			if (sex % 2 === 0) sex = '女';
+			else sex = '男';
+			this.form.gender = sex;
+			// this.baseInfo.age = age;
+			birthr = birth + '';
+			console.log(birthr);
+			// this.form.birthday = birthr;
+			// this.$set(this.form.birthday, birthr)
+			// this.baseInfo.birthplace = this.area[iden.substring(0,2)];
+		},
+		// 请求身份证数据
+		idea() {
+			idces({ idCard: this.form.idCard }).then(response => {
+				console.log(response);
+				this.form.gender = response.data.gender;
+				// this.form.birthday = response.data.birthday;
+				this.form.age = response.data.age
+				this.form.code = response.data.code
+				if (response.data.userName == null) {
+					this.form.userName = undefined;
+				} else {
+					this.form.userName = response.data.userName;
+				}
+			});
+		},
+		// 取消按钮
+		cancel() {
+			this.opens = false;
+			this.jiezhong = false;
+			this.imashow = false;
+      this.errorlog=false;
+			this.reset();
+		},
+		gywoa() {
+			console.log(this.form.isVaccination);
+			if (this.form.isVaccination !== null) {
+				if (this.form.isVaccination == '是') {
+					// 接种疫苗
+					this.naneme = false,
+					this.shouwes = true;
+				}else {
+					this.naneme = true,
+					this.shouwes = false,
+					this.form.vaccineInfoUserList = [{
+						vaccineName: '',
+						vaccinationTime: '',
+						vaccinationPlace: '',
+						jici: '',
+						progress: '',
+						url:null
+					}
+				]
+				}
+			}
+		},
+		gywoatwo() {
+			console.log(this.queryParams.isVaccination);
+			if (this.queryParams.isVaccination !== null) {
+				if (this.queryParams.isVaccination == '是') {
+					// 接种疫苗
+					// (this.naneme = false), (this.shouwes = true);
+					this.shouwestwo = false
+				} else {
+					// (this.naneme = true), (this.shouwes = false);
+					this.shouwestwo = true
+				}
+			}
+		},
+		// 上传前控制
+		befors(res, file) {
+			console.log(res, file);
+			console.log(res.name.substr(0, res.name.length - 4));
+			// if(res.type !== 'application/pdf'){
+			//   this.msgSuccess('只能上传pdf文件');
+			//   return false
+			// }else{
+			//   return true
+			// }
+			return true;
+		},
+		// 图片预览
+		handlePictureCardPreview(file) {
+			console.log(file, 87);
+			console.log(file.name.split('.'));
+			let hegs = file.name.split('.');
+			console.log(hegs[hegs.length - 1]);
+			if (hegs[hegs.length - 1] == 'pdf') {
+				this.shouewhu = true;
+			} else {
+				if (hegs[hegs.length - 1] == 'jpg' || hegs[hegs.length - 1] == 'png') {
+					this.shouewhu = false;
+					this.exelshow = false;
+				} else {
+					this.exelshow = true;
+				}
+			}
+			console.log(this.shouewhu, this.exelshow);
+			this.dialogImageUrl = file.url;
+			this.dialogImageUrlname = file.name;
+			console.log(this.dialogImageUrlname);
+			this.dialogVisible = true;
+			this.imashow = true;
+		},
+		// 上传文件
+		handleChangert(file, fileList) {
+			this.fileList = fileList.slice(-3);
+		},
+		upImageFn(res, file) {
+			if (res.code !== 200) {
+				this.msgInfo('上传失败');
+				return false;
+			} else {
+				this.msgSuccess('上传成功');
+				this.config.push(res.data);
+				this.config.filter( router=> {
+					router.name = '禁忌症附件'
+				})
+				console.log(res.data);
+				console.log(res.data.name.substr(0, res.data.name.length - 4));
+				this.form.url = this.config;
+				this.form.url = JSON.stringify(this.form.url);
+			}
+			// querjtgoe.message_title
+			console.log(res);
+			console.log(res.data.name.substr(-4));
+		},
+		err() {
+			this.msgInfo('上传失败');
+			console.log(35);
+		},
+		reseImage(file, fileList) {
+			let urls = '';
+			if (file.response) {
+				urls = file.response.url;
+			} else {
+				urls = file.url;
+			}
+			for (let i = this.config.length - 1; i >= 0; i--) {
+				if (this.config[i].url == urls) {
+					this.config.splice(i, 1);
+				}
+			}
+			if (this.config.length == 0) {
+				this.form.url = undefined;
+			} else {
+				this.form.url = JSON.stringify(this.config);
+			}
+		},
+		// 上传前控制
+		beforstwo(res, file) {
+			console.log(res, file);
+			// console.log(res.name.substr(0, res.name.length - 4));
+			// if(res.type !== 'application/pdf'){
+			//   this.msgSuccess('只能上传pdf文件');
+			//   return false
+			// }else{
+			//   return true
+			// }
+			return true;
+		},
+		// 图片预览
+		handlePictureCardPreviewtwo(file) {
+			console.log(file, 87);
+			console.log(file.name.split('.'));
+			let hegs = file.name.split('.');
+			console.log(hegs[hegs.length - 1]);
+			if (hegs[hegs.length - 1] == 'pdf') {
+				this.shouewhu = true;
+			} else {
+				if (hegs[hegs.length - 1] == 'jpg' || hegs[hegs.length - 1] == 'png') {
+					this.shouewhu = false;
+					this.exelshow = false;
+				} else {
+					this.exelshow = true;
+				}
+			}
+			console.log(this.shouewhu, this.exelshow);
+			this.dialogImageUrl = file.url;
+			this.dialogImageUrlname = file.name;
+			console.log(this.dialogImageUrlname);
+			this.dialogVisible = true;
+			this.imashow = true;
+		},
+		// 上传文件
+		handleChangertwo(file, fileList) {
+			// this.fileList = fileList.slice(-3);
+		},
+		upImageFntwo(res, file) {
+			this.comfietg = []
+
+			if (res.code !== 200) {
+				this.msgInfo('上传失败');
+				return false;
+			} else {
+				this.msgSuccess('上传成功');
+				this.comfietg.push(res.data);
+				this.comfietg.filter( router=> {
+					router.name = '附件'
+				})
+				console.log(this.comfietg);
+				this.form.vaccineInfoUserList[this.nameutaiL].url = []
+				console.log(res.data.name.substr(0, res.data.name.length - 4));
+				console.log(this.nameutaiL)
+				this.form.vaccineInfoUserList[this.nameutaiL].url = this.comfietg
+				// this.form.url = this.config;
+				this.form.vaccineInfoUserList[this.nameutaiL].url = JSON.stringify(this.form.vaccineInfoUserList[this.nameutaiL].url);
+			}
+			// querjtgoe.message_title
+			console.log(this.form.vaccineInfoUserList[this.nameutaiL].url);
+			console.log(res.data.name.substr(-4));
+		},
+		errtwo() {
+			this.msgInfo('上传失败');
+			console.log(35);
+		},
+		reseImagetwo(file, fileList) {
+			let urls = '';
+			if (file.response) {
+				urls = file.response.url;
+			} else {
+				urls = file.url;
+			}
+			for (let i = this.config.length - 1; i >= 0; i--) {
+				if (this.comfietg[i].url == urls) {
+					this.comfietg.splice(i, 1);
+				}
+			}
+			if (this.comfietg.length == 0) {
+				this.form.vaccineInfoUserList[this.nameutaiL].url = null;
+			} else {
+				this.form.vaccineInfoUserList[this.nameutaiL].url = JSON.stringify(this.form.vaccineInfoUserList[this.nameutaiL].url);
+			}
+		},
+		// 暂缓
+		// 上传前控制
+		beforsther(res, file) {
+			console.log(res, file);
+			// console.log(res.name.substr(0, res.name.length - 4));
+			// if(res.type !== 'application/pdf'){
+			//   this.msgSuccess('只能上传pdf文件');
+			//   return false
+			// }else{
+			//   return true
+			// }
+			return true;
+		},
+		// 图片预览
+		handlePictureCardPreviewther(file) {
+			console.log(file, 87);
+			console.log(file.name.split('.'));
+			let hegs = file.name.split('.');
+			console.log(hegs[hegs.length - 1]);
+			if (hegs[hegs.length - 1] == 'pdf') {
+				this.shouewhu = true;
+			} else {
+				if (hegs[hegs.length - 1] == 'jpg' || hegs[hegs.length - 1] == 'png') {
+					this.shouewhu = false;
+					this.exelshow = false;
+				} else {
+					this.exelshow = true;
+				}
+			}
+			console.log(this.shouewhu, this.exelshow);
+			this.dialogImageUrl = file.url;
+			this.dialogImageUrlname = file.name;
+			console.log(this.dialogImageUrlname);
+			this.dialogVisible = true;
+			this.imashow = true;
+		},
+		// 上传文件
+		handleChangerther(file, fileList) {
+			// this.fileList = fileList.slice(-3);
+		},
+		upImageFnther(res, file) {
+			this.configther = []
+			if (res.code !== 200) {
+				this.msgInfo('上传失败');
+				return false;
+			} else {
+				this.msgSuccess('上传成功');
+				this.configther.push(res.data);
+				this.configther.filter( router=> {
+					router.name = '暂缓附件'
+				})
+				console.log(this.configther);
+				console.log(res.data.name.substr(0, res.data.name.length - 4));
+				console.log(this.nameutaiL)
+				this.form.suspendUrl = this.configther
+				// this.form.url = this.config;
+				this.form.suspendUrl = JSON.stringify(this.form.suspendUrl);
+			}
+			// querjtgoe.message_title
+			console.log(this.form.suspendUrl);
+			console.log(res.data.name.substr(-4));
+		},
+		errther() {
+			this.msgInfo('上传失败');
+			console.log(35);
+		},
+		reseImagether(file, fileList) {
+			let urls = '';
+			if (file.response) {
+				urls = file.response.url;
+			} else {
+				urls = file.url;
+			}
+			for (let i = this.config.length - 1; i >= 0; i--) {
+				if (this.comfietg[i].url == urls) {
+					this.comfietg.splice(i, 1);
+				}
+			}
+			if (this.comfietg.length == 0) {
+				this.form.suspendUrl = undefined
+			} else {
+				this.form.suspendUrl = JSON.stringify(this.form.suspendUrl);
+			}
+		},
+		// 其他
+		// 上传前控制
+		beforsfor(res, file) {
+			console.log(res, file);
+			// console.log(res.name.substr(0, res.name.length - 4));
+			// if(res.type !== 'application/pdf'){
+			//   this.msgSuccess('只能上传pdf文件');
+			//   return false
+			// }else{
+			//   return true
+			// }
+			return true;
+		},
+		// 图片预览
+		handlePictureCardPreviewfor(file) {
+			console.log(file, 87);
+			console.log(file.name.split('.'));
+			let hegs = file.name.split('.');
+			console.log(hegs[hegs.length - 1]);
+			if (hegs[hegs.length - 1] == 'pdf') {
+				this.shouewhu = true;
+			} else {
+				if (hegs[hegs.length - 1] == 'jpg' || hegs[hegs.length - 1] == 'png') {
+					this.shouewhu = false;
+					this.exelshow = false;
+				} else {
+					this.exelshow = true;
+				}
+			}
+			console.log(this.shouewhu, this.exelshow);
+			this.dialogImageUrl = file.url;
+			this.dialogImageUrlname = file.name;
+			console.log(this.dialogImageUrlname);
+			this.dialogVisible = true;
+			this.imashow = true;
+		},
+		// 上传文件
+		handleChangerfor(file, fileList) {
+			// this.fileList = fileList.slice(-3);
+		},
+		upImageFnfor(res, file) {
+			this.configfor = []
+			if (res.code !== 200) {
+				this.msgInfo('上传失败');
+				return false;
+			} else {
+				this.msgSuccess('上传成功');
+				this.configfor.push(res.data);
+				this.configfor.filter( router=> {
+					router.name = '其他附件'
+				})
+				console.log(this.configfor);
+				console.log(res.data.name.substr(0, res.data.name.length - 4));
+				console.log(this.nameutaiL)
+				this.form.otherUrl = this.configfor
+				// this.form.url = this.config;
+				this.form.otherUrl = JSON.stringify(this.form.otherUrl);
+			}
+			// querjtgoe.message_title
+			console.log(this.form.otherUrl);
+			console.log(res.data.name.substr(-4));
+		},
+		errfor() {
+			this.msgInfo('上传失败');
+			console.log(35);
+		},
+		reseImagefor(file, fileList) {
+			let urls = '';
+			if (file.response) {
+				urls = file.response.url;
+			} else {
+				urls = file.url;
+			}
+			for (let i = this.config.length - 1; i >= 0; i--) {
+				if (this.configfor[i].url == urls) {
+					this.configfor.splice(i, 1);
+				}
+			}
+			if (this.configfor.length == 0) {
+				this.form.otherUrl = undefined
+			} else {
+				this.form.otherUrl = JSON.stringify(this.form.otherUrl);
+			}
+		},
+		// 表单重置
+		reset() {
+			this.form = {
+				id: null,
+				villageTowns: null,
+				village: null,
+				age:'',
+				code:'',
+				villagerGroup: null,
+				houseType: null,
+				domicile: null,
+				province: null,
+				city: null,
+				region: null,
+				userName: null,
+				gender: null,
+				idCard: null,
+				phoneNum: null,
+				keyIndustries: null,
+				isVaccination: null,
+				vaccinationPlace: null,
+				contraindication: null,
+				suspend: null,
+				death: null,
+				lostInMissing: null,
+				shouldBe: null,
+				other: null,
+				nowIn: '',
+				remark: null,
+				status: '0',
+				createBy: null,
+				createTime: null,
+				updateBy: null,
+				updateTime: null,
+				isDel: null,
+				vaccineInfoUserList: [
+					{
+						vaccineName: '',
+						vaccinationTime: '',
+						vaccinationPlace: '',
+						jici: '',
+						progress: '',
+						url:null,
+						disableg:false
+					}
+				]
+			};
+			this.resetForm('form');
+		},
+		/** 搜索按钮操作 */
+		handleQuery() {
+			this.queryParams.pageNum = 1;
+			console.log(this.queryParams)
+			this.getList();
+		},
+		/** 重置按钮操作 */
+		resetQuery() {
+			this.nhue = false
+			this.selectedtwo = []
+			setTimeout( ()=>{
+				this.nhue = true
+			},100)
+			this.queryParams.province = undefined;
			this.queryParams.city = undefined;
			this.queryParams.region = undefined;
+			this.resetForm('queryForm');
+			this.handleQuery();
+		},
+		// 多选框选中数据
+		handleSelectionChange(selection) {
+			this.ids = selection.map(item => item.id);
+			this.single = selection.length !== 1;
+			this.multiple = !selection.length;
+		},
+		/** 新增按钮操作 */
+		handleAdd() {
+			this.reset();
+			this.opens = true;
+			(this.naneme = false),
+			(this.shouwes = false);
+			this.selected = ['安徽省', '安庆市', '潜山市'],
+			this.form.province = this.selected[0];
+			this.villageTownshy = '';
+			this.naiseurya = '';
+			this.hsuej = '';
+			this.form.city = this.selected[1];
+			this.form.region = this.selected[2];
+			this.title = '添加疫苗信息';
+			this.jdourdjoaj = true;
+			this.jue = true
+			console.log(this.form)
+		},
+		/** 修改按钮操作 */
+		handleUpdate(row) {
+			this.reset();
+			const id = row.id || this.ids;
+			getInfo(id).then(response => {
+				this.form = response.data;
+				this.jue = false
+				if(response.data.province !== null){
+					this.selected[0] = response.data.province;
+				}else{
+					this.selected[0] ='安徽省'
+				}
+				if(response.data.city !== null){
+					this.selected[1] = response.data.city;
+				}else{
+					this.selected[1] = '安庆市'
+				}
+				if(response.data.region !== null){
+					this.selected[2] = response.data.region;
+				}else{
+					this.selected[2] = '潜山市'
+				}
+				this.onSelected(this.selected)
+				setTimeout( ()=>{
+					this.jue = true
+				},100)
+				// this.jue = true
+				console.log(this.selected,98767)
+				// if(this.form){
+				if (this.form.isVaccination !== null) {
+					if (this.form.isVaccination == '是') {
+						// 接种疫苗
+						(this.naneme = false), (this.shouwes = true);
+					} else {
+						(this.naneme = true), (this.shouwes = false);
+					}
+				} else {
+					this.naneme = false;
+					this.shouwes = false;
+				}
+
+				if (this.form.dictValue !== null && this.form.dictValue !== undefined) {
+					this.jicheru(this.form.dictValue);
+				}
+				if (this.form.villageTowns !== null) {
+					this.villageTownshy = this.form.villageTowns;
+					if (this.form.village !== null) {
+						this.villageTownshy = this.form.village;
+						if (this.form.villagerGroup !== null) {
+							this.villageTownshy = this.form.villagerGroup;
+						}
+					}
+				}else{
+					this.villageTownshy = '';
+				}
+
+				if (this.form.vaccineInfoUserList !== null) {
+					if (this.form.vaccineInfoUserList.length == 0) {
+
+						this.form.vaccineInfoUserList = [
+							{
+								vaccineName: '',
+								vaccinationTime: '',
+								vaccinationPlace: '',
+								jici: '',
+								progress: '',
+								url:null,
+								disableg:false
+							}
+						];
+					}else {
+						this.form.isVaccination = '是'
+						this.form.vaccineInfoUserList.filter(router =>{
+							if(router.url == undefined){
+								router.url = null
+							}else if(router.url == []){
+								router.url = null
+							}
+							router.disableg = true
+						})
+					}
+				}
+				// villageTownshy
+				// }
+				// this.heuiq.push()
+				this.naiseurya = '';
+				this.hsuej = '';
+				this.opens = true;
+				this.jdourdjoaj = false;
+				this.title = '查看编辑疫苗信息';
+			});
+		},
+		chahe(data) {
+			console.log(data);
+			// let labelValue = this.$refs['myCascader'].inputValue
+			// console.log(labelValue)
+			console.log(this.$refs['myCascader'])
+			this.form.villageTowns = data[1];
+			this.form.village = data[2];
+			this.form.villagerGroup = data[3];
+			if (this.form.villageTowns !== undefined) {
+				this.hsuej = this.form.villageTowns;
+				if (this.form.village !== undefined) {
+					this.hsuej = this.form.villageTowns + this.form.village;
+					if (this.form.villagerGroup !== undefined) {
+						this.hsuej = this.form.villageTowns + this.form.village + this.form.villagerGroup;
+					}
+				}
+			}
+
+			this.form.domicile = '';
+		},
+		chahetwo(data) {
+			console.log(data)
+			// this.queryParams.villageTowns = data[1];
+			// this.queryParams.village = data[2];
+			// this.queryParams.villagerGroup = data[3];
+			this.queryParams.deptId = data[ data.length - 1]
+		},
+		/** 提交按钮 */
+		submitForm() {
+			this.$refs['form'].validate(valid => {
+				console.log(this.selected);
+				if (valid) {
+					if (this.form.id != null) {
+						// this.form.nowIn = this.naiseurya + this.form.nowIn;
+						// this.form.domicile = this.hsuej + this.form.domicile;
+						updateInfo(this.form).then(response => {
+							this.msgSuccess('修改成功');
+							this.opens = false;
+							this.getList();
+						});
+					} else {
+						// this.form.nowIn = this.naiseurya + this.form.nowIn;
+						// this.form.domicile = this.hsuej + this.form.domicile;
+						// if (this.form.nowIn == 'undefined') {
+						// 	this.form.nowIn = null;
+						// }
+						console.log(this.form)
+						// return
+						addInfo(this.form).then(response => {
+							this.msgSuccess('新增成功');
+							this.opens = false;
+							this.getList();
+						});
+					}
+				}
+			});
+		},
+		/** 删除按钮操作 */
+		handleDelete(row) {
+			const ids = row.id || this.ids;
+			this.$confirm('是否确认删除疫苗信息编号为"' + ids + '"的数据项?', '警告', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			})
+				.then(function() {
+					return delInfo(ids);
+				})
+				.then(() => {
+					this.getList();
+					this.msgSuccess('删除成功');
+				});
+		},
+		/** 导出按钮操作 */
+		handleExport() {
+			var heuia = {
+                tableName: "vaccine_info",
+                empty: false,
+                condition: {}
+            }
+            var that=this;
+            heuia.condition = this.queryParams
+			const queryParams = this.queryParams
+			this.$confirm('是否确认导出?', "警告", {
+			    confirmButtonText: "确定",
+			    cancelButtonText: "取消",
+			    type: "warning"
+			  }).then(function() {
+			    return exportConfig(heuia);
+			  }).then(response => {
+				  const jues= response.data
+          that.exportflag=false;
+          that.$alert('数据导入中,系统将自动处理数据,请稍后查看结果', "导出结果", { dangerouslyUseHTMLString: true });
+          // that.msgSuccess('数据导入中,系统将自动处理数据,请稍后查看结果');
+				// exportConfigtyr().then(responsr => {
+				// 			console.log(responsr)
+				// 			if(responsr.data == true){
+				// 				// this.download(jues);
+				// 				// window.location.href = jues
+				// 				window.open(jues)
+				// 			}else{
+				// 				this.msgSuccess('数据暂未加载完成,请稍后点击导出进度按钮查看');
+				// 			}
+				// 		});
+
+			  })
+
+
+			// this.download('/boman-web-core/core/info/export',
+			// 	{
+			// 		...this.queryParams
+			// 	},
+			// 	`post_${new Date().getTime()}.xlsx`
+			// );
+
+		},
+		// 疫苗名称改变
+		changeheu(index, data) {
+			console.log(index, data);
+			let hueya = this.form.vaccineInfoUserList[index].vaccineName;
+			// this.form.vaccineName = this.form.vaccineName.label;
+			this.form.vaccineInfoUserList[index].vaccineName = hueya.label;
+			console.log(this.form.vaccineInfoUserList[index].vaccineName);
+			this.jicheru(hueya.value);
+		},
+
+		// 剂次
+		jicheru(data) {
+			// 计次
+			this.getDicts(data).then(response => {
+				this.typeOptionstimes = response.data;
+			});
+		},
+		// 剂次改变
+		changeheujici(index) {
+			console.log(index);
+			let hueya = this.form.vaccineInfoUserList[index].jici;
+			// this.form.vaccineName = this.form.vaccineName.label;
+			this.form.vaccineInfoUserList[index].jici = hueya.label;
+			console.log(this.form.vaccineInfoUserList[index].jici);
+			if (hueya.value == this.typeOptionstimes.length) {
+				this.form.vaccineInfoUserList[index].progress = '已完成';
+			} else {
+				this.form.vaccineInfoUserList[index].progress = '未完成';
+			}
+		},
+		// 剂次
+		jicherutwo(data) {
+			// 计次
+			this.getDicts(data).then(response => {
+				this.typeOptionstimes = response.data;
+			});
+		},
+		// 疫苗名称改变
+		changeheutwo(data) {
+			console.log(data);
+			this.queryParams.vaccineName = this.queryParams.vaccineName.label;
+			console.log(this.queryParams.vaccineName);
+			this.jicherutwo(data.value);
+		},
+		// 点击新增
+		tijea(index) {
+			console.log(index+ 1)
+			this.nameutaiL = index+ 1
+			this.form.vaccineInfoUserList.push({
+				vaccineName: '',
+				vaccinationTime: '',
+				vaccinationPlace: '',
+				jici: '',
+				progress: '',
+				url:null,
+				disableg:false
+			});
+		},
+		// 点击删除
+		naeyrfakjf(index, item) {
+			var that = this
+			this.$confirm('是否确认删除疫苗信息?', '警告', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			})
+				.then(function() {
+					return that.delseeug(index,item)
+				})
+				.then(() => {
+					// this.getList();
+					this.msgSuccess('删除成功');
+				});
+
+		},
+		delseeug(index,item){
+			console.log(234)
+			if (this.form.vaccineInfoUserList.length == 1) {
+				// if (this.jdourdjoaj == true) {
+				// 	// 新增
+				// 	this.form.vaccineInfoUserList = [{
+				// 		vaccineName: '',
+				// 		vaccinationTime: '',
+				// 		vaccinationPlace: '',
+				// 		jici: '',
+				// 		progress: '',
+				// 		url:null,
+				// 		disableg:false
+				// 	}]
+				// } else {
+				// 	// 修改
+				// 	let ide = this.form.vaccineInfoUserList[index].id;
+				// 	console.log(this.form.vaccineInfoUserList[index]);
+				// 	// ()
+				// 	console.log(ide);
+				// 	if (ide !== undefined) {
+				// 		console.log(234);
+				// 		delInfort(ide).then(response => {
+				// 			this.msgSuccess('操作成功');
+				// 		});
+				// 	}
+				// 	this.form.vaccineInfoUserList = [{
+				// 		vaccineName: '',
+				// 		vaccinationTime: '',
+				// 		vaccinationPlace: '',
+				// 		jici: '',
+				// 		progress: '',
+				// 		url:null,
+				// 		disableg:false
+				// 	}]
+				// }
+				return false;
+			}
+			if (this.jdourdjoaj == true) {
+				// 新增
+				this.form.vaccineInfoUserList.splice(index, 1);
+			} else {
+				// 修改
+				let ide = this.form.vaccineInfoUserList[index].id;
+				console.log(this.form.vaccineInfoUserList[index]);
+				// ()
+				console.log(ide);
+				if (ide !== undefined) {
+					console.log(234);
+					delInfort(ide).then(response => {
+						this.msgSuccess('操作成功');
+					});
+				}
+				this.form.vaccineInfoUserList.splice(index, 1);
+			}
+		},
+		// 点击查看
+		chakei(row) {
+			console.log(row);
+			yiaoe({idCard:row.idCard}).then(response => {
+				// this.msgSuccess('操作成功');
+				if(response.code == 200){
+					this.jiezheList = response.data
+				}
+			});
+
+			this.jiezhong = true;
+		},
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "数据导入";
+      this.upload.opens = true;
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.opens = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      // this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+	  this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+	/** 下载模板操作 */
+	importTemplate() {
+	  this.download('system/user/importTemplate', {
+	    ...this.queryParams
+	  }, `user_${new Date().getTime()}.xlsx`)
+	},
+	// 导入进度查询
+	handleImporthg(){
+    importLog().then(res=>{
+      if(res.code==200){
+        this.errorList=res.rows;
+        this.errorlog=true;
+      }
+    })
+	},
+	// 导出进度查询
+	handleExportjy(){
+		exportConfigtyr().then(responsr => {
+					// console.log(responsr)
+					if(responsr.data == true){
+						// this.download(jues);
+						// window.location.href = jues
+            this.exportflag=true;
+						window.open(responsr.msg)
+					}else{
+						this.msgSuccess('数据暂未加载完成,请稍后点击导出进度按钮查看');
+					}
+				});
+	}
+	}
+};
+</script>
+<style lang="scss">
+	.jdueuh{
+		.el-form-item__label {
+			width: 0px !important;
+		}
+		.el-form-item__content {
+			margin-left: 10px !important;
+			// width: 70%;
+		}
+	}
+	.ijeuhdy{
+		.el-form-item__label {
+			width: 80px !important;
+		}
+		.el-form-item__content {
+			margin-left: 80px !important;
+			// width: 70%;
+		}
+	}
+	.znshu{
+		.el-form-item__label {
+			width: 80px !important;
+			// padding-left: 30px;
+		}
+		.el-form-item__content {
+			margin-left: 80px !important;
+
+			// width: 70%;
+		}
+		.el-input__inner{
+			padding-left: 0 !important;
+		}
+	}
+	.heioangd{
+		.el-form-item__label {
+			width: 70px !important;
+		}
+		.el-form-item__content {
+			margin-left: 70px !important;
+			// width: 70%;
+		}
+	}
+.hues {
+	.area-select {
+		margin-left: 0 !important;
+		margin-right: 10px;
+	}
+}
+.jehak {
+	.el-form-item {
+		width: 100%;
+	}
+	.el-form-item__content {
+		width: 60%;
+	}
+}
+.oiuyty {
+	.el-form-item__label {
+		width: 80px !important;
+	}
+	.el-form-item__content {
+		margin-left: 80px !important;
+		// width: 70%;
+	}
+	input {
+		padding-right: 0 !important;
+	}
+}
+.el-dialog__body {
+	padding-top: 0;
+	padding-bottom: 0;
+}
+.jhy {
+	// width: 100%;
+	// .el-form-item__content {
+	// 	width: 100%;
+	// 	margin-left: 0 !important;
+	// }
+	.el-form-item__content {
+		margin-left: 55px !important;
+		// width: 70%;
+	}
+	.el-form-item__label {
+		width: 55px !important;
+	}
+}
+.ehiqya {
+	.el-form-item__content {
+		display: flex;
+		.jdidur {
+			flex: 1;
+			margin-left: 10px;
+			// text-align: left;
+			display: flex;
+		}
+	}
+	.upload-demo {
+		display: flex;
+	}
+}
+.jdoier{
+	display: flex;
+	align-items: center;
+	.upload-demo {
+		display: flex;
+	}
+}
+.hueyde {
+	width: 18px;
+	height: 18px;
+	margin: 0 5px;
+	margin-right: 10px;
+}
+.hueydele {
+	width: 15px;
+	height: 18px;
+}
+.hyeoa {
+	height: 100%;
+	display: flex;
+	align-items: center;
+}
+.hjdoecdre {
+	// margin-top: 50%;
+	transform: translateY(50%);
+}
+.ojhgy {
+	.el-dialog {
+		padding-bottom: 40px;
+		padding-top: 10px;
+	}
+	.el-dialog__header {
+		padding-bottom: 20px;
+	}
+	.el-table .cell {
+		line-height: 50px;
+	}
+}
+.hueya{
+	margin-left: 0 !important;
+}
+.iejghiadh{
+	.el-input__inner{
+		padding-right: 0 !important;
+		padding-left: 5px !important;
+	}
+}
+</style>

+ 44 - 8
src/views/system/user/index.vue

@@ -19,8 +19,10 @@
             :props="defaultProps"
             :expand-on-click-node="false"
             :filter-node-method="filterNode"
+			 node-key="id"
             ref="tree"
-            default-expand-all
+			:load="loadNode"
+			lazy
             @node-click="handleNodeClick"
           />
         </div>
@@ -214,7 +216,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="归属部门" prop="deptId">
-              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
+              <treeselect v-model="form.deptId" :options="deptOptionsyu" :show-count="true" placeholder="请选择归属部门" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -345,7 +347,7 @@
 <script>
 import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus } from "@/api/system/user";
 import { getToken } from "@/utils/auth";
-import { treeselect } from "@/api/system/dept";
+import { treeselect,treeselectdepts } from "@/api/system/dept";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 
@@ -372,6 +374,7 @@ export default {
       title: "",
       // 部门树选项
       deptOptions: undefined,
+	  deptOptionsyu:undefined,
       // 是否显示弹出层
       open: false,
       // 部门名称
@@ -488,8 +491,8 @@ export default {
     },
     /** 查询部门下拉树结构 */
     getTreeselect() {
-      treeselect().then(response => {
-        this.deptOptions = response.data;
+      treeselectdepts().then(response => {
+        this.deptOptionsyu = response.data;
       });
     },
     // 筛选节点
@@ -502,6 +505,37 @@ export default {
       this.queryParams.deptId = data.id;
       this.getList();
     },
+	// 懒加载事件
+	loadNode(node, resolve){
+		console.log(node.key)
+		 if (node.level === 0) {
+			 treeselect().then(response => {
+			   // this.deptOptions = response.data;
+			   return resolve(
+			   response.data
+			   );
+			   // resolve();
+			 });
+		          
+		}
+		if (node.level >= 1) { // 点击之后触发
+		treeselect({id:node.key}).then(response => {
+		  // this.deptOptions = response.data;
+		  return resolve(response.data);
+		  // resolve(response.data);
+		});
+		                    
+		                }
+		  //       if (node.level > 1) return resolve([]);
+				// if(node.level == 1){
+					
+				// }
+		// treeselect(node.id).then(response => {
+		//   // this.deptOptions = response.data;
+		//   resolve(response.data);
+		// });
+		 
+	},
     // 用户状态修改
     handleStatusChange(row) {
       let text = row.status === "0" ? "启用" : "停用";
@@ -542,13 +576,15 @@ export default {
     },
     /** 搜索按钮操作 */
     handleQuery() {
-      this.queryParams.page = 1;
+      // this.queryParams.page = 1;
       this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {
       this.dateRange = [];
+	  this.queryParams.deptId = undefined
       this.resetForm("queryForm");
+	  // this.queryForm.page = undefined
       this.handleQuery();
     },
     // 多选框选中数据
@@ -560,7 +596,7 @@ export default {
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
-      this.getTreeselect();
+      // this.getTreeselect();
       getUser().then(response => {
         this.postOptions = response.posts;
         this.roleOptions = response.roles;
@@ -572,7 +608,7 @@ export default {
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
-      this.getTreeselect();
+      // this.getTreeselect();
       const id = row.id || this.ids;
       getUser(id).then(response => {
         this.form = response.data;