bihuisong 1 hónapja
szülő
commit
009cbf519f

+ 55 - 0
system_ui/src/api/data/communication/communication.js

@@ -0,0 +1,55 @@
+import request from '@/utils/request'
+
+// 查询通讯录列表
+export function listCommunication(query) {
+  return request({
+    url: '/system/communication/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询通讯录详细
+export function getCommunication(id) {
+  return request({
+    url: '/system/communication/' + id,
+    method: 'get'
+  })
+}
+
+// 新增通讯录
+export function addCommunication(data) {
+  return request({
+    url: '/system/communication',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改通讯录
+export function updateCommunication(data) {
+  return request({
+    url: '/system/communication',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除通讯录
+export function delCommunication(id) {
+  return request({
+    url: '/system/communication/' + id,
+    method: 'delete'
+  })
+}
+
+export function updateRelease(ids, releaseStatus){
+  return request({
+    url: 'system/communication/handlePublish',
+    method:'post',
+    data: {
+      "ids": ids,
+      "releaseStatus": releaseStatus
+    }
+  })
+}

+ 44 - 0
system_ui/src/api/data/daily/daily.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询日报列表
+export function listDaily(query) {
+  return request({
+    url: '/system/daily/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询日报详细
+export function getDaily(id) {
+  return request({
+    url: '/system/daily/' + id,
+    method: 'get'
+  })
+}
+
+// 新增日报
+export function addDaily(data) {
+  return request({
+    url: '/system/daily',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改日报
+export function updateDaily(data) {
+  return request({
+    url: '/system/daily',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除日报
+export function delDaily(id) {
+  return request({
+    url: '/system/daily/' + id,
+    method: 'delete'
+  })
+}

+ 64 - 0
system_ui/src/api/data/leave/leave.js

@@ -0,0 +1,64 @@
+import request from '@/utils/request'
+
+// 查询请假列表
+export function listLeave(query) {
+  return request({
+    url: '/sooka-sponest-system/leave/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询请假详细
+export function getLeave(id) {
+  return request({
+    url: '/sooka-sponest-system/leave/' + id,
+    method: 'get'
+  })
+}
+
+// 新增请假
+export function addLeave(data) {
+  return request({
+    url: '/sooka-sponest-system/leave',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改请假
+export function updateLeave(data) {
+  return request({
+    url: '/sooka-sponest-system/leave',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除请假
+export function delLeave(id) {
+  return request({
+    url: '/sooka-sponest-system/leave/' + id,
+    method: 'delete'
+  })
+}
+export function changeStatus(id,forestLeaveStatus) {
+  return request({
+    url: '/sooka-sponest-system/leave/change',
+    method: 'put',
+    data:{
+      "id": id,
+      "forestLeaveStatus":forestLeaveStatus
+    }
+  })
+}
+
+export function listLeaveCount(query) {
+  return request({
+    url: '/sooka-sponest-system/leave/leaveList',
+    method: 'get',
+    params: query
+  })
+}
+
+

+ 60 - 0
system_ui/src/api/data/leave/linleader.js

@@ -0,0 +1,60 @@
+import request from '@/utils/request';
+
+// 查询林长管理列表
+export function listLinleader(query) {
+  return request({
+    url: '/sooka-sponest-center-data/linleader/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询林长管理详细
+export function getLinleader(id) {
+  return request({
+    url: '/sooka-sponest-center-data/linleader/' + id,
+    method: 'get'
+  })
+}
+
+// 新增林长管理
+export function addLinleader(data) {
+  return request({
+    url: '/sooka-sponest-center-data/linleader',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改林长管理
+export function updateLinleader(data) {
+  return request({
+    url: '/sooka-sponest-center-data/linleader',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除林长管理
+export function delLinleader(id) {
+  return request({
+    url: '/sooka-sponest-center-data/linleader/' + id,
+    method: 'delete'
+  })
+}
+
+export function listAllGrid(data) {
+  return request({
+    url: '/sooka-sponest-center-data/grid/listAll',
+    method: 'post',
+    data: data
+  })
+}
+
+export function selectUserList() {
+  return request({
+    url: '/sooka-sponest-system/user/userFeginlist',
+    method: 'post',
+    data:{}
+  })
+}

+ 55 - 0
system_ui/src/api/data/regulations/regulations.js

@@ -0,0 +1,55 @@
+import request from '@/utils/request'
+
+// 查询政策法规列表
+export function listRegulations(query) {
+  return request({
+    url: '/system/regulations/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询政策法规详细
+export function getRegulations(id) {
+  return request({
+    url: '/system/regulations/' + id,
+    method: 'get'
+  })
+}
+
+// 新增政策法规
+export function addRegulations(data) {
+  return request({
+    url: '/system/regulations',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改政策法规
+export function updateRegulations(data) {
+  return request({
+    url: '/system/regulations',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除政策法规
+export function delRegulations(id) {
+  return request({
+    url: '/system/regulations/' + id,
+    method: 'delete'
+  })
+}
+
+export function updateRelease(ids, releaseStatus){
+  return request({
+    url: 'system/regulations/handlePublish',
+    method:'post',
+    data: {
+      "ids": ids,
+      "releaseStatus": releaseStatus
+    }
+  })
+}

+ 55 - 0
system_ui/src/api/data/reserve/reserve.js

@@ -0,0 +1,55 @@
+import request from '@/utils/request'
+
+// 查询应急预案列表
+export function listReserve(query) {
+  return request({
+    url: '/system/reserve/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询应急预案详细
+export function getReserve(id) {
+  return request({
+    url: '/system/reserve/' + id,
+    method: 'get'
+  })
+}
+
+// 新增应急预案
+export function addReserve(data) {
+  return request({
+    url: '/system/reserve',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改应急预案
+export function updateReserve(data) {
+  return request({
+    url: '/system/reserve',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除应急预案
+export function delReserve(id) {
+  return request({
+    url: '/system/reserve/' + id,
+    method: 'delete'
+  })
+}
+
+export function updateRelease(ids, releaseStatus){
+  return request({
+    url: 'system/reserve/handlePublish',
+    method:'post',
+    data: {
+      "ids": ids,
+      "releaseStatus": releaseStatus
+    }
+  })
+}

+ 248 - 0
system_ui/src/api/rules/rules.js

@@ -0,0 +1,248 @@
+/**
+ * 验证非负整数(包含0及正整数)
+ * @param {*} rule
+ * @param {*} value
+ * @param {*} callback
+ */
+export function checkNonnegativeInteger(rule, value, callback) {
+  if (value) {
+    value += ''
+    if(/(^(0|[1-9][0-9]*)$)/.test(value)) {
+      callback()
+    } else {
+      callback(new Error('只能输入数字,数值不能为负,且不能为小数'))
+    }
+  } else {
+    callback()
+  }
+}
+
+/**
+ * 验证正整数(不包含0的正整数)
+ * @param {*} rule
+ * @param {*} value
+ * @param {*} callback
+ */
+export function checkPositiveInteger(rule, value, callback) {
+  if (value) {
+    value += ''
+    if(/(^[1-9]\d*$)/.test(value)) {
+      callback()
+    } else {
+      callback(new Error('只能输入数字,数值不能为负数或0,且不能为小数'))
+    }
+  } else {
+    callback()
+  }
+}
+
+/**
+ * 验证正数,且小数可2位(包含0及正整数)
+ * @param {*} rule
+ * @param {*} value
+ * @param {*} callback
+ */
+export function checkPositiveDecimal(rule, value, callback) {
+  if (value) {
+    value += ''
+    // if(/(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/.test(value)) {
+    // if(/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/.test(value)) {
+    if(/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]{1,2}$)/.test(value)) {
+      callback()
+    } else {
+      callback(new Error('只能输入数字,且数值不能为负,小数限2位'))
+    }
+  } else {
+    callback()
+  }
+}
+/**
+ * 验证正数,且小数可4位(包含0及正整数)
+ * @param {*} rule
+ * @param {*} value
+ * @param {*} callback
+ */
+export function checkPositiveDecimal4(rule, value, callback) {
+  if (value) {
+    value += ''
+    // if(/(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9]){0,3}$)/.test(value)) {
+    if(/(^[1-9]([0-9]+)?(\.[0-9]{1,4})?$)|(^(0){1}$)|(^[0-9]\.[0-9]{1,4}$)/.test(value)) {
+      callback()
+    } else {
+      callback(new Error('只能输入数字,且数值不能为负,小数限4位'))
+    }
+  } else {
+    callback()
+  }
+}
+/**
+ * 验证手机号,座机号
+ * @param {*} rule
+ * @param {*} value
+ * @param {*} callback
+ */
+export function validPhoneMobile(rule, value, callback){
+  if (value){
+    if (value === '') {
+      callback(new Error('请输入11位手机号'));
+    } else {
+      let regPone = null;
+      let mobile = /^1(3|4|5|6|7|8|9)\d{9}$/; //最新16手机正则
+      let tel = /^(0\d{2,3}-){0,1}\d{7,8}$/; //座机
+      if (value.charAt(0) == 0) {    // charAt查找第一个字符方法,用来判断输入的是座机还是手机号
+        regPone = tel;
+      } else {
+        regPone = mobile;
+      }
+      if (!regPone.test(value)) {
+        callback(new Error("请填写11位手机号或座机号(座机格式为 区号-座机号码)"))
+      }
+      callback();
+    }
+  }else {
+    callback();
+  }
+}
+
+/**
+ * 验证经度输入范围在-180-180之间,且小数可15位
+ * @param {*} rule
+ * @param {*} value
+ * @param {*} callback
+ */
+export function checkLon(rule, value, callback) {
+  if (value) {
+    value += ''
+    if (value.match(/^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,15})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/)) {
+      callback()
+    } else {
+      callback(new Error('经度为-180~180,小数限15位'))
+    }
+  } else {
+    callback()
+  }
+}
+/**
+ * 验证纬度输入范围在-90~90之间,且小数可15位
+ * @param {*} rule
+ * @param {*} value
+ * @param {*} callback
+ */
+export function checkLat(rule, value, callback) {
+  if (value) {
+    value += ''
+    if (value.match(/^(\-|\+)?([0-8]?\d{1}\.\d{0,15}|90\.0{0,6}|[0-8]?\d{1}|90)$/)) {
+      callback()
+    } else {
+      callback(new Error('纬度为-90~90,小数限15位'))
+    }
+  } else {
+    callback()
+  }
+}
+
+/**
+ * 温度校验
+ * @param rule
+ * @param value
+ * @param callback
+ */
+export function checkTemperature(rule, value, callback) {
+  if (value !== '') {
+    // 判断温度是否为数字
+    if (!/^-?\d+(\.\d+)?$/.test(value)) {
+      callback(new Error('温度值必须为数字'))
+    } else {
+      // 将温度转换为数字类型,方便后续比较大小
+      const num = Number(value)
+
+      // 判断温度的范围是否在 -50 到 50 之间
+      if (num < -50 || num > 50) {
+        callback(new Error('温度范围必须在-50℃ ~ 50℃之间'))
+      } else {
+        // 判断小数部分是否超过一位
+        const reg = /(?:\.)(\d+)/
+        let match = value.match(reg)
+        if (match && match[1].length > 1) {
+          callback(new Error('小数部分只能保留一位'))
+        }
+        // 判断整数部分是否超过两位,且第一位是否为0
+        match = value.match(/^-?(\d+)/)
+        if (match && (match[1].length > 2 || (match[1].length === 2 && match[1][0] === '0'))) {
+          callback(new Error('整数部分长度不能超过2位,且第一位不能是0'))
+        } else {
+          callback()
+        }
+      }
+    }
+  } else {
+    callback(new Error('温度值不能为空'))
+  }
+}
+
+/**
+ * 车牌号校验(含新能源)
+ * @param rule
+ * @param value
+ * @param callback
+ */
+export function carPhoneValid (rule, value, callback) {
+  const plateNumber = /^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}([A-HJ-NP-Z0-9挂学警港澳]{1}|[应急]{2}))$/
+  if (plateNumber.test(value)) {
+    callback()
+  } else {
+    callback(new Error('请输入正确的车牌号'))
+  }
+}
+
+/**
+ * 英文和数字校验
+ * @param rule
+ * @param value
+ * @param callback
+ */
+export function englishAndNumValid(rule, value, callback) {
+  if (value) {
+    value += ''
+    if (value.match(/^[A-Za-z0-9]{4,40}$/)) {
+      callback()
+    } else {
+      callback(new Error('只能输入英文和数字'))
+    }
+  } else {
+    callback()
+  }
+}
+/**
+ * 英文和数字校验18位
+ * @param rule
+ * @param value
+ * @param callback
+ */
+export function englishAndshibaNumValid(rule, value, callback) {
+  if (value) {
+    value += ''
+    if (value.match(/^[A-Za-z0-9]{0,18}$/)) {
+      callback()
+    } else {
+      callback(new Error('只能输入0~18位英文和数字'))
+    }
+  } else {
+    callback()
+  }
+}
+
+export function englishOnly(rule, value, callback) {
+  if (value) {
+    value += ''
+    if (value.match(/^[a-zA-Z]{2,40}$/)) {
+      callback()
+    } else {
+      callback(new Error('请输入英文,且至少两个字符'))
+    }
+  } else {
+    callback()
+  }
+}
+
+

+ 263 - 0
system_ui/src/views/components/FileUpload/index.vue

@@ -0,0 +1,263 @@
+<template>
+  <div class="upload-file">
+    <el-upload
+      multiple
+      :action="uploadFileUrl"
+      :before-upload="handleBeforeUpload"
+      :file-list="fileList"
+      :limit="limit"
+      :on-error="handleUploadError"
+      :on-exceed="handleExceed"
+      :on-success="handleUploadSuccess"
+      :show-file-list="false"
+      :headers="headers"
+      class="upload-file-uploader"
+      ref="upload"
+    >
+      <!-- 上传按钮 -->
+      <el-button size="mini" type="primary">选取文件</el-button>
+      <!-- 上传提示 -->
+      <div class="el-upload__tip" slot="tip" v-if="showTip">
+        请上传
+        <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b></template>
+        <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b></template>
+        的文件
+      </div>
+    </el-upload>
+
+    <!-- 文件列表 -->
+    <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
+      <li :key="file.url" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList">
+        <el-link :href="file.url" :underline="false" target="_blank">
+          <span class="el-icon-document"> {{ file.name }} </span>
+        </el-link>
+        <div class="ele-upload-list__item-content-action">
+          <el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link>
+        </div>
+      </li>
+    </transition-group>
+  </div>
+</template>
+
+<script>
+import {getToken} from "@/utils/auth";
+import {getConfigKey} from "@/api/system/config";
+
+export default {
+  name: "FileUpload",
+  props: {
+    setFileName: Function,
+    removeFileName: Function,
+    // 值
+    value: [String, Object, Array],
+    // 数量限制
+    limit: {
+      type: Number,
+      default: 50,
+    },
+    // 大小限制(MB)
+    fileSize: {
+      type: Number,
+      default: 50,
+    },
+    // 文件类型, 例如['png', 'jpg', 'jpeg']
+    fileType: {
+      type: Array,
+      default: () => ["doc", "xls", "ppt", "txt", "pdf"],
+    },
+    // 是否显示提示
+    isShowTip: {
+      type: Boolean,
+      default: true
+    }
+  },
+  data() {
+    return {
+      number: 0,
+      uploadList: [],
+      uploadFileUrl: process.env.VUE_APP_BASE_API + "/file/upload", // 上传的图片服务器地址
+      headers: {
+        Authorization: "Bearer " + getToken(),
+      },
+      fileList: [],
+      prefix : "",
+    };
+  },
+  watch: {
+    value: {
+      handler(val) {
+        if (val) {
+
+          if (this.value == ',' || this.value.indexOf("http") == -1 || this.value.indexOf("+") == -1) {
+            return
+          } else {
+            let values = this.value.split(",")
+            for (var i = 0; i < values.length; i++) {
+              if (values[i].indexOf("http") == -1) {
+                return
+
+              }
+
+            }
+
+
+          }
+
+          this.fileList = []
+          let temp = 1;
+          // 首先将值转为数组
+          const list = this.value.split(',');
+
+          var item1
+          for (var a = 0; a < list.length; a++) {
+            let listurl = list[a].split('+')
+            item1 = {name: listurl[1], url: listurl[0]};
+            this.fileList.push(item1)
+
+          }
+
+          return this.fileList
+          // // 然后将数组转为对象数组
+          //  this.fileList = list.map(item => {
+          //      if (typeof item === "string") {
+          //          item = {name: item, url: item};
+          //      }
+          //      // item.uid = item.uid || new Date().getTime() + temp++;
+          //      return item;
+          //  });
+        } else {
+          this.fileList = [];
+          return [];
+        }
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  computed: {
+    // 是否显示提示
+    showTip() {
+      return this.isShowTip && (this.fileType || this.fileSize);
+    },
+  },
+  created() {
+    getConfigKey("downloadUrl").then(response => {
+      this.prefix = response.msg;
+    });
+  },
+  methods: {
+
+
+    // 上传前校检格式和大小
+    handleBeforeUpload(file) {
+      // 校检文件类型
+      if (this.fileType) {
+        let fileExtension = "";
+        if (file.name.lastIndexOf(".") > -1) {
+          fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
+        }
+        const isTypeOk = this.fileType.some((type) => {
+          if (file.type.indexOf(type) > -1) return true;
+          if (fileExtension && fileExtension.indexOf(type) > -1) return true;
+          return false;
+        });
+        if (!isTypeOk) {
+          this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`);
+          return false;
+        }
+      }
+      // 校检文件大小
+      if (this.fileSize) {
+        const isLt = file.size / 1024 / 1024 < this.fileSize;
+        if (!isLt) {
+          this.$modal.msgError(`上传文件大小不能超过 ${this.fileSize} MB!`);
+          return false;
+        }
+      }
+      if (file.name){
+        const isName = file.name;
+        if (isName.indexOf("+") != -1){
+          this.$modal.msgError(`上传文件的文件名中不能包含'+'!`);
+          return false;
+        }
+      }
+      this.$modal.loading("正在上传文件,请稍候...");
+      this.number++;
+      return true;
+    },
+    // 文件个数超出
+    handleExceed() {
+      this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`);
+    },
+    // 上传失败
+    handleUploadError(err) {
+      this.$modal.msgError("上传图片失败,请重试");
+      this.$modal.closeLoading()
+    },
+    // 上传成功回调
+    handleUploadSuccess(res) {
+      let num = res.data.url.indexOf('/');
+      let start = res.data.url.substring(0,num);
+      let end = res.data.url.substring(num+1,res.data.url.length);
+      let url = this.prefix +"Download?fileName="+res.data.webName +"&&group="+ start +"&&path=" + end;
+      this.uploadList.push({name: res.data.webName, url:url, webName: res.data.webName});
+      if (this.uploadList.length === this.number) {
+        this.fileList = this.fileList.concat(this.uploadList);
+        this.uploadList = [];
+        this.number = 0;
+        this.$emit("input", this.listToString(this.fileList));
+        console.log("ppo", this.fileList)
+        this.$modal.closeLoading();
+      }
+      this.setFileName(res.data.webName)
+    },
+    // 删除文件
+    handleDelete(index) {
+      this.fileList.splice(index, 1);
+      this.removeFileName(index)
+      // this.$emit("input", this.listToString(this.fileList));
+    },
+    // 获取文件名称
+    getFileName(name) {
+      if (name.lastIndexOf("/") > -1) {
+        return name.slice(name.lastIndexOf("/") + 1);
+      } else {
+        return "";
+      }
+    },
+    // 对象转成指定字符串分隔
+    listToString(list, separator) {
+      let strs = "";
+      separator = separator || ",";
+      for (let i in list) {
+        strs += list[i].url + separator;
+      }
+      return strs != '' ? strs.substr(0, strs.length - 1) : '';
+    }
+  }
+};
+</script>
+
+<style scoped lang="scss">
+.upload-file-uploader {
+  margin-bottom: 5px;
+}
+
+.upload-file-list .el-upload-list__item {
+  border: 1px solid #e4e7ed;
+  line-height: 2;
+  margin-bottom: 10px;
+  position: relative;
+}
+
+.upload-file-list .ele-upload-list__item-content {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  color: inherit;
+}
+
+.ele-upload-list__item-content-action .el-link {
+  margin-right: 10px;
+}
+</style>

+ 100 - 0
system_ui/src/views/components/deptselector.vue

@@ -0,0 +1,100 @@
+<template>
+  <div>
+    <el-select id="deptSelector" v-model="selectValueProp" placeholder="请选择" @change="mychange">
+      <el-option :key="index" :value="dept" :label="dept.deptName" v-for="(dept,index) in selectList">
+      </el-option>
+    </el-select>
+  </div>
+</template>
+
+<script>
+import { getDepts } from '@/api/components/deptselector.js'
+// import { setToken } from '../plugins/auth'
+import Cookies from 'js-cookie'
+
+export default {
+  name: 'deptSelector',
+  props: {
+    setValue: Function,
+    dataDeptId :null
+  },
+  watch: {
+    dataDeptId(oldValue,newValue){
+      if(newValue!=null&&newValue!="null"){
+        this.showDepts(oldValue);
+      }
+    }
+  },
+  created() {
+    this.showDepts("");
+  },
+  data() {
+    return {
+      selectDeptCookieKey: 'Global-Dept',
+      selectValueProp: '',
+      selectList: []
+    }
+  },
+  methods: {
+    mychange: function(item) {
+      this.selectValueProp=item.deptName
+      if(this.setValue != undefined){
+        this.setValue(item)
+      }
+    },
+    showDepts(oldValue) {
+      const username = Cookies.get('username');
+      let _this = this
+      getDepts({ userName: username }).then(resp => {
+        let deptList = new Array()
+        deptList.push({deptId:"",deptName:"--请选择--"})
+        if(oldValue==""||oldValue==null){
+          _this.selectValueProp = "--请选择--"
+        }
+        let depts = resp.data.depts
+        let deptParties = resp.data.deptParties
+        for (let i = 0; i < depts.length; i++) {
+          let dept = new Object()
+          dept.deptId = depts[i].deptId
+          dept.deptName = depts[i].deptName
+          deptList.push(dept)
+        }
+        for (let i = 0; i < deptParties.length; i++) {
+          let dept = new Object()
+          dept.deptId = deptParties[i].deptId
+          dept.deptName = deptParties[i].deptName
+          deptList.push(dept)
+        }
+        _this.selectList = deptList
+        if (deptList.length == 0) {//当前用户没有部门
+          //alert("当前用户没有部门")
+          return
+        }
+        if (_this.dataDeptId != null) {
+          let isCookieExists = false
+          deptList.forEach((dept) => {
+            if (_this.dataDeptId == dept.deptId) {
+              isCookieExists = true
+              _this.selectValueProp = dept.deptName
+              _this.setValue(dept)
+            }
+          })
+          if (isCookieExists == false) {//cookie存在但当前不在那个部门了
+            _this.selectValueProp = deptList[0].deptName
+            _this.setValue(deptList[0])
+          }
+        } else {
+          _this.selectValueProp = deptList[0].deptName
+          if(_this.setValue != undefined){
+            _this.setValue(deptList[0])
+          }
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 186 - 156
system_ui/src/views/data/regulations/index.vue

@@ -1,18 +1,10 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" @submit.native.prevent>
-      <!--      <el-form-item label="数据所属部门(政或党的id)" prop="dataDeptId">-->
-      <!--        <el-input-->
-      <!--          v-model="queryParams.dataDeptId"-->
-      <!--          placeholder="请输入数据所属部门(政或党的id)"-->
-      <!--          clearable-->
-      <!--          @keyup.enter.native="handleQuery"-->
-      <!--        />-->
-      <!--      </el-form-item>-->
-      <el-form-item label="标题" prop="resTitle">
+      <el-form-item label="名称" prop="regName">
         <el-input
-          v-model="queryParams.resTitle"
-          placeholder="请输入标题"
+          v-model="queryParams.regName"
+          placeholder="请输入名称"
           clearable
           @keyup.enter.native="handleQuery"
         />
@@ -26,19 +18,6 @@
                     placeholder="请选择部门" @select="hx" :noResultsText="'空'" :noOptionsText="'空'" style="width: 240px"/>
         <el-input v-model="queryParams.deptName" v-if="false"/>
       </el-form-item>
-
-      <!-- <el-form-item label="简介" prop="resIntroduction">
-         <el-input
-           v-model="queryParams.resIntroduction"
-           placeholder="请输入简介"
-           clearable
-           @keyup.enter.native="handleQuery"
-         />
-       </el-form-item>-->
-      <!--  <el-form-item label="所属部门" prop="deptId">
-          <treeselect :options="deptOptions" v-model="queryParams.deptId"  :show-count="true" placeholder="请选择所属部门"
-                      @select="hxQuery"/>
-        </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>
@@ -53,7 +32,7 @@
           icon="el-icon-plus"
           size="mini"
           @click="handleAdd"
-          v-hasPermi="['system:reserve:add']"
+          v-hasPermi="['system:regulations:add']"
         >新增
         </el-button>
       </el-col>
@@ -65,7 +44,7 @@
           size="mini"
           :disabled="single"
           @click="handleUpdate"
-          v-hasPermi="['system:reserve:edit']"
+          v-hasPermi="['system:regulations:edit']"
         >修改
         </el-button>
       </el-col>
@@ -77,7 +56,7 @@
           size="mini"
           :disabled="multiple"
           @click="handleDelete"
-          v-hasPermi="['system:reserve:remove']"
+          v-hasPermi="['system:regulations:remove']"
         >删除
         </el-button>
       </el-col>
@@ -88,32 +67,39 @@
           icon="el-icon-download"
           size="mini"
           @click="handleExport"
-          v-hasPermi="['system:reserve:export']"
+          v-hasPermi="['system:regulations:export']"
         >导出
         </el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="reserveList" @selection-change="handleSelectionChange">
+    <el-table v-loading="loading" :data="regulationsList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center"/>
-      <!--      <el-table-column label="主键id" align="center" prop="id" />-->
-      <!--      <el-table-column label="数据状态(1-可用 2-不可用 )" align="center" prop="dataStatus" />-->
-      <!--      <el-table-column label="数据所属部门(政或党的id)" align="center" prop="dataDeptId" />-->
-      <el-table-column label="标题" align="center" prop="resTitle"/>
-      <el-table-column label="简介" align="center" prop="resIntroduction"/>
-      <!--      <el-table-column label="部门id" align="center" prop="deptId"/>-->
-      <el-table-column label="所属部门" align="center" prop="deptName" @select="hx"/>
+      <!--  <el-table-column label="主键id" align="center" prop="id" />
+        <el-table-column label="数据状态(1-可用 2-不可用 )" align="center" prop="dataStatus" />-->
+      <!--  <el-table-column label="数据所属部门(政或党的id)" align="center" prop="dataDeptId" />-->
+      <el-table-column label="名称" align="center" prop="regName"/>
+      <el-table-column label="法规简介" align="center" prop="regIntroduction"/>
+      <el-table-column label="发文机关" align="center" prop="regOffice"/>
+      <el-table-column label="发文号" align="center" prop="regNumber"/>
+      <el-table-column label="发文时间" align="center" prop="regTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.regTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="发布状态" align="center" prop="varieties">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.centerdata_release_status" :value="scope.row.releaseStatus"/>
         </template>
       </el-table-column>
+      <!-- <el-table-column label="部门id" align="center" prop="deptId" />-->
+      <el-table-column label="所属部门" align="center" prop="deptName"/>
       <el-table-column label="创建人" align="center" prop="createName"/>
       <el-table-column label="创建时间" align="center" prop="createTime"/>
       <el-table-column label="修改人" align="center" prop="updateName"/>
       <el-table-column label="修改时间" align="center" prop="updateTime"/>
-      <!--      <el-table-column label="附件" align="center" prop="attachId"/>-->
+      <!-- <el-table-column label="附件" align="center" prop="attachId" />-->
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -121,7 +107,7 @@
             type="text"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
-            v-hasPermi="['system:reserve:edit']"
+            v-hasPermi="['system:regulations:edit']"
           >修改
           </el-button>
           <el-button
@@ -129,7 +115,7 @@
             type="text"
             icon="el-icon-delete"
             @click="handleDelete(scope.row)"
-            v-hasPermi="['system:reserve:remove']"
+            v-hasPermi="['system:regulations:remove']"
           >删除
           </el-button>
           <el-button v-if="scope.row.releaseStatus == 'centerdata_release_status_yes'" size="mini" type="text" icon="el-icon-refresh-left" @click="handlePublish(scope.row)" v-hasPermi="['system:reserve:edit']">
@@ -143,7 +129,7 @@
             type="text"
             icon="el-icon-edit"
             @click="See(scope.row)"
-            v-hasPermi="['forest:reserve:edit']"
+            v-hasPermi="['forest:regulations:edit']"
           >查看
           </el-button>
         </template>
@@ -158,36 +144,54 @@
       @pagination="getList"
     />
 
-    <!-- 添加或修改应急预案对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="标题" prop="resTitle">
-          <el-input v-model="form.resTitle" placeholder="请输入标题" maxlength="50"/>
-        </el-form-item>
-        <el-form-item label="所属部门" prop="deptId">
-          <treeselect :options="deptOptions" v-model="form.deptId" :show-count="true" placeholder="请选择所属部门"
-                      @select="hx" :noResultsText="'空'" :noOptionsText="'空'"/>
-        </el-form-item>
-        <!--        <el-form-item label="发布状态" prop="releaseStatus">
-                  <el-select v-model="form.releaseStatus" placeholder="请选择发布状态" filterable>
-                    <el-option
-                      v-for="dict in dict.type.centerdata_release_status"
-                      :key="dict.value"
-                      :label="dict.label"
-                      :value="dict.value"
-                    ></el-option>
-                  </el-select>
-                </el-form-item>-->
-        <!--        <el-form-item label="简介" prop="resIntroduction">
-                  <editor v-model="form.resIntroduction" :min-height="192" maxlength="512"/>
-                </el-form-item>-->
-        <el-form-item label="简介" prop="resIntroduction">
-          <el-input v-model="form.resIntroduction" type="textarea" placeholder="请输入内容" maxlength="200"/>
-        </el-form-item>
-        <el-form-item label="附件" prop="attachId">
-          <fileUpload :value="[form.fileUrl,form.fileName]" v-model="form.fileUrl" :setFileName="setFileName"
-                      :removeFileName="removeFileName" :limit="1"></fileUpload>
-        </el-form-item>
+    <!-- 添加或修改政策法规对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="800px" class="form-style">
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="名称" prop="regName">
+              <el-input v-model="form.regName" placeholder="请输入名称" maxlength="50"/>
+            </el-form-item>
+            <el-form-item label="所属部门" prop="deptId">
+              <treeselect v-model="form.deptId" :options="deptOptions" multiple:false :show-count="true"
+                          placeholder="请选择所属部门" @select="hx" :noResultsText="'空'" :noOptionsText="'空'"/>
+            </el-form-item>
+            <el-form-item label="发文时间" prop="regTime">
+              <el-date-picker clearable
+                              v-model="form.regTime"
+                              type="date"
+                              value-format="yyyy-MM-dd"
+                              placeholder="请选择发文时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="发文机关" prop="regOffice">
+              <el-input v-model="form.regOffice" placeholder="请输入发文机关" maxlength="50"/>
+            </el-form-item>
+            <el-form-item label="发文号" prop="regNumber">
+              <el-input v-model="form.regNumber" placeholder="请输入发文号" maxlength="50"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <!--            <el-form-item label="法规简介" prop="regIntroduction">
+                          <editor v-model="form.regIntroduction" :min-height="192" maxlength="512"/>
+                        </el-form-item>-->
+            <el-form-item label="法规简介" prop="regIntroduction" label-width="120px">
+              <el-input v-model="form.regIntroduction" type="textarea" placeholder="请输入内容" maxlength="200"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="附件" prop="attachId">
+              <fileUpload :value="[form.fileUrl,form.fileName]" v-model="form.fileUrl" :setFileName="setFileName"
+                          :removeFileName="removeFileName" :limit="1"></fileUpload>
+            </el-form-item>
+          </el-col>
+        </el-row>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -195,31 +199,48 @@
       </div>
     </el-dialog>
 
-    <!-- 详情 -->
-    <el-dialog :title="title" :visible.sync="seeopen" width="600px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-
-        <el-form-item label="标题" prop="resTitle">
-          <el-input v-model="form.resTitle" placeholder="请输入标题" :disabled="true" maxlength="50"/>
-        </el-form-item>
-
-        <!--        <el-form-item label="简介" prop="resIntroduction">
-                  <el-input v-model="form.resIntroduction" placeholder="请输入简介" :disabled="true" maxlength="512"/>
-                </el-form-item>-->
-
-        <el-form-item label="所属部门" prop="deptId">
-          <treeselect :options="deptOptions" v-model="form.deptId" :show-count="true" placeholder="请选择所属部门"
-                      @select="hx" :disabled="true" :noResultsText="'空'" :noOptionsText="'空'"/>
-        </el-form-item>
-
-        <el-form-item label="简介" prop="resIntroduction" label-width="120px">
-          <el-input v-model="form.resIntroduction" type="textarea" placeholder="请输入内容" maxlength="500"/>
-        </el-form-item>
-
-        <el-form-item label="附件" prop="attachId">
-          <fileUpload :value="form.fileUrl" @input="getUrl" v-model="form.fileUrl"></fileUpload>
-        </el-form-item>
-
+    <!--详情 -->
+    <el-dialog :title="title" :visible.sync="seeopen" width="800px" class="form-style" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="所属部门" prop="dataDeptId" label-width="120px">
+              <deptselector :setValue=setDataDeptId :dataDeptId="form.dataDeptId"></deptselector>
+            </el-form-item>
+            <el-form-item label="名称" prop="regName">
+              <el-input v-model="form.regName" placeholder="请输入名称" :disabled="true" maxlength="50"/>
+            </el-form-item>
+            <!--            <el-form-item label="法规简介" prop="regIntroduction">
+                          <el-input v-model="form.regIntroduction" placeholder="请输入法规简介" :disabled="true" maxlength="512"/>
+                        </el-form-item>-->
+            <el-form-item label="法规简介" prop="regIntroduction" label-width="120px">
+              <el-input v-model="form.regIntroduction" type="textarea" placeholder="请输入内容" maxlength="200"/>
+            </el-form-item>
+            <el-form-item label="发文时间" prop="regTime">
+              <el-date-picker clearable :disabled="true"
+                              v-model="form.regTime"
+                              type="date"
+                              value-format="yyyy-MM-dd"
+                              placeholder="请选择发文时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="发文机关" prop="regOffice">
+              <el-input v-model="form.regOffice" placeholder="请输入发文机关" :disabled="true" maxlength="50"/>
+            </el-form-item>
+            <el-form-item label="发文号" prop="regNumber">
+              <el-input v-model="form.regNumber" placeholder="请输入发文号" :disabled="true" maxlength="50"/>
+            </el-form-item>
+            <el-form-item label="所属部门" prop="deptId">
+              <treeselect :options="deptOptions" v-model="form.deptId" :show-count="true" placeholder="请选择所属部门"
+                          @select="hx" :disabled="true" :noResultsText="'空'" :noOptionsText="'空'"/>
+            </el-form-item>
+            <el-form-item label="附件" prop="attachId">
+              <fileUpload @input="getUrl" v-model="form.fileUrl"></fileUpload>
+            </el-form-item>
+          </el-col>
+        </el-row>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click="cancelSel">取 消</el-button>
@@ -230,27 +251,27 @@
 
 <script>
 import {
-  addReserve,
-  delReserve,
-  getReserve,
-  listReserve,
-  updateReserve,
+  addRegulations,
+  delRegulations,
+  getRegulations,
+  listRegulations,
+  updateRegulations,
   updateRelease
-} from "@/api/data/reserve/reserve";
-import Treeselect from "@riophae/vue-treeselect";
+} from "@/api/data/regulations/regulations";
 import {treeselect} from "@/api/system/dept";
-import deptselector from '@/views/components/deptselector.vue'
+import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import deptselector from '@/views/components/deptselector.vue'
 import fileUpload from '@/views/components/FileUpload/index.vue'
 
 export default {
-  name: "Reserve",
-  dicts: ["centerdata_release_status"],
   components: {
     Treeselect,
     deptselector,
     fileUpload
   },
+  name: "Regulations",
+  dicts: ["centerdata_release_status"],
   data() {
     return {
       // 遮罩层
@@ -265,25 +286,28 @@ export default {
       showSearch: true,
       // 总条数
       total: 0,
-      // 应急预案表格数据
-      reserveList: [],
+      // 政策法规表格数据
+      regulationsList: [],
       fileNames: [],
-      // 部门树选项
-      deptOptions: [],
       // 弹出层标题
       title: "",
       // 是否显示弹出层
       open: false,
       seeopen: false,
+      // 部门树选项
+      deptOptions: [],
       // 查询参数
       queryParams: {
+        releaseStatus: null,
         pageNum: 1,
         pageSize: 10,
         dataStatus: null,
         dataDeptId: null,
-        resTitle: null,
-        resIntroduction: null,
-        releaseStatus: null,
+        regName: null,
+        regIntroduction: null,
+        regOffice: null,
+        regNumber: null,
+        regTime: null,
         deptId: null,
         deptName: 0,
         attachId: null
@@ -299,11 +323,17 @@ export default {
       },
       // 表单校验
       rules: {
-        resTitle: [
-          {required: true, message: "标题不能为空", trigger: "blur"}
-        ],
         deptId: [
           {required: true, message: "所属部门不能为空", trigger: "change"}
+        ],
+        regName: [
+          {required: true, message: "名称不能为空", trigger: "blur"}
+        ],
+        regOffice: [
+          {required: true, message: "发文机关不能为空", trigger: "blur"}
+        ],
+        regNumber: [
+          {required: true, message: "发文号不能为空", trigger: "blur"}
         ]
       }
     };
@@ -314,7 +344,7 @@ export default {
   },
   methods: {
     getUrl(url) {
-      this.form.fileUrl = url;
+      alert('0');
     },
     setFileName(fileName) {
       let that = this
@@ -327,10 +357,18 @@ export default {
       fileurls.splice(index, 1)
       that.form.fileUrl = fileurls.toString()
     },
-    /** 查询部门下拉树结构 */
-    getTreeselect() {
-      treeselect().then(response => {
-        this.deptOptions = response.data;
+    // 取消按钮
+    cancelSel() {
+      this.seeopen = false;
+      this.reset();
+    },
+    See(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getRegulations(id).then(response => {
+        this.form = response.data;
+        this.seeopen = true;
+        this.title = "查看";
       });
     },
     setDataDeptId(e) {
@@ -340,13 +378,18 @@ export default {
     hx(node) {
       this.form.deptId = node.id
       this.form.deptName = node.label
-      this.$refs.form.validate()
     },
-    /** 查询应急预案列表 */
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    /** 查询政策法规列表 */
     getList() {
       this.loading = true;
-      listReserve(this.queryParams).then(response => {
-        this.reserveList = response.rows;
+      listRegulations(this.queryParams).then(response => {
+        this.regulationsList = response.rows;
         this.total = response.total;
         this.loading = false;
       });
@@ -356,20 +399,6 @@ export default {
       this.open = false;
       this.reset();
     },
-    // 取消按钮
-    cancelSel() {
-      this.seeopen = false;
-      this.reset();
-    },
-    See(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getReserve(id).then(response => {
-        this.form = response.data;
-        this.seeopen = true;
-        this.title = "查看";
-      });
-    },
     // 表单重置
     reset() {
       this.form = {
@@ -379,12 +408,15 @@ export default {
         updateBy: null,
         updateTime: null,
         dataStatus: "0",
-        dataDeptId: null,
-        resTitle: null,
-        resIntroduction: null,
+        dataDeptId: '',
+        regName: null,
+        regIntroduction: null,
+        regOffice: null,
+        regNumber: null,
+        regTime: null,
         deptId: null,
-        deptName: null,
-        attachId: null
+        deptName: 0,
+        attachId: null,
       };
       this.fileNames = []
       this.resetForm("form");
@@ -410,13 +442,13 @@ export default {
     handleAdd() {
       this.reset();
       this.open = true;
-      this.title = "添加应急预案";
+      this.title = "添加政策法规";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
       const id = row.id || this.ids
-      getReserve(id).then(response => {
+      getRegulations(id).then(response => {
         const list = response.data.fileUrl.split(',');
         var item1
         if (response.data.fileUrl != "") {
@@ -427,26 +459,25 @@ export default {
         }
         this.form = response.data;
         this.open = true;
-        this.title = "修改应急预案";
+        this.title = "修改政策法规";
       });
     },
-
     /** 提交按钮 */
     submitForm() {
       this.$refs["form"].validate(valid => {
         if (valid) {
           this.form.fileName = this.fileNames.toString()
-          this.form.fileUrlList = Array.from(document.querySelectorAll('.el-upload-list__item')).map(item => item.querySelector('a').getAttribute('href'))
           this.form.fileNameList = this.fileNames;
+          this.form.fileUrlList = Array.from(document.querySelectorAll('.el-upload-list__item')).map(item => item.querySelector('a').getAttribute('href'));
           if (this.form.id != null) {
-            updateReserve(this.form).then(response => {
+            updateRegulations(this.form).then(response => {
               this.$modal.msgSuccess("修改成功");
               this.open = false;
               this.getList();
             });
           } else {
             this.form.releaseStatus = "centerdata_release_status_no";
-            addReserve(this.form).then(response => {
+            addRegulations(this.form).then(response => {
               this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.getList();
@@ -459,18 +490,17 @@ export default {
     handleDelete(row) {
       const ids = row.id || this.ids;
       this.$modal.confirm('是否删除选中的数据?').then(function () {
-        return delReserve(ids);
+        return delRegulations(ids);
       }).then(() => {
         this.getList();
         this.$modal.msgSuccess("删除成功");
       }).catch(() => {
       });
     },
-
-    handlePublish(row){
+    handlePublish(row) {
       let ids = row.id || this.ids;
       let status = "发布", releaseStatus = "centerdata_release_status_yes";
-      if(!ids.includes(",")) {
+      if (!ids.includes(",")) {
         ids = [ids];
         if (row.releaseStatus.includes("centerdata_release_status_yes")) {
           status = "撤销";
@@ -488,9 +518,9 @@ export default {
     },
     /** 导出按钮操作 */
     handleExport() {
-      this.download('sooka-sponest-center-data/reserve/export', {
+      this.download('sooka-sponest-center-data/regulations/export', {
         ...this.queryParams
-      }, `应急预案_${new Date().getTime()}.xlsx`)
+      }, `政策法规_${new Date().getTime()}.xlsx`)
     },
     // 点击按钮修改是否只查询本级部门用户
     changeQueryType() {

+ 501 - 0
system_ui/src/views/data/reserve/index.vue

@@ -0,0 +1,501 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" @submit.native.prevent>
+      <!--      <el-form-item label="数据所属部门(政或党的id)" prop="dataDeptId">-->
+      <!--        <el-input-->
+      <!--          v-model="queryParams.dataDeptId"-->
+      <!--          placeholder="请输入数据所属部门(政或党的id)"-->
+      <!--          clearable-->
+      <!--          @keyup.enter.native="handleQuery"-->
+      <!--        />-->
+      <!--      </el-form-item>-->
+      <el-form-item label="标题" prop="resTitle">
+        <el-input
+          v-model="queryParams.resTitle"
+          placeholder="请输入标题"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item prop="deptId">
+        <template slot="label">
+          <span @click="changeQueryType" v-if="queryParams.deptName === 0">本级及下级</span>
+          <span @click="changeQueryType" v-if="queryParams.deptName === 1">只查询本级</span>
+        </template>
+        <treeselect v-model="queryParams.deptId" :options="deptOptions" multiple:false :show-count="true"
+                    placeholder="请选择部门" @select="hx" :noResultsText="'空'" :noOptionsText="'空'" style="width: 240px"/>
+        <el-input v-model="queryParams.deptName" v-if="false"/>
+      </el-form-item>
+
+      <!-- <el-form-item label="简介" prop="resIntroduction">
+         <el-input
+           v-model="queryParams.resIntroduction"
+           placeholder="请输入简介"
+           clearable
+           @keyup.enter.native="handleQuery"
+         />
+       </el-form-item>-->
+      <!--  <el-form-item label="所属部门" prop="deptId">
+          <treeselect :options="deptOptions" v-model="queryParams.deptId"  :show-count="true" placeholder="请选择所属部门"
+                      @select="hxQuery"/>
+        </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:reserve: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:reserve: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:reserve: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:reserve:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="reserveList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center"/>
+      <!--      <el-table-column label="主键id" align="center" prop="id" />-->
+      <!--      <el-table-column label="数据状态(1-可用 2-不可用 )" align="center" prop="dataStatus" />-->
+      <!--      <el-table-column label="数据所属部门(政或党的id)" align="center" prop="dataDeptId" />-->
+      <el-table-column label="标题" align="center" prop="resTitle"/>
+      <el-table-column label="简介" align="center" prop="resIntroduction"/>
+      <!--      <el-table-column label="部门id" align="center" prop="deptId"/>-->
+      <el-table-column label="所属部门" align="center" prop="deptName" @select="hx"/>
+      <el-table-column label="发布状态" align="center" prop="varieties">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.centerdata_release_status" :value="scope.row.releaseStatus"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建人" align="center" prop="createName"/>
+      <el-table-column label="创建时间" align="center" prop="createTime"/>
+      <el-table-column label="修改人" align="center" prop="updateName"/>
+      <el-table-column label="修改时间" align="center" prop="updateTime"/>
+      <!--      <el-table-column label="附件" align="center" prop="attachId"/>-->
+      <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:reserve:edit']"
+          >修改
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:reserve:remove']"
+          >删除
+          </el-button>
+          <el-button v-if="scope.row.releaseStatus == 'centerdata_release_status_yes'" size="mini" type="text" icon="el-icon-refresh-left" @click="handlePublish(scope.row)" v-hasPermi="['system:reserve:edit']">
+            撤销
+          </el-button>
+          <el-button v-else-if="scope.row.releaseStatus == 'centerdata_release_status_no'" size="mini" type="text" icon="el-icon-upload" @click="handlePublish(scope.row)" v-hasPermi="['system:reserve:edit']">
+            发布
+          </el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="See(scope.row)"
+            v-hasPermi="['forest:reserve:edit']"
+          >查看
+          </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="open" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="标题" prop="resTitle">
+          <el-input v-model="form.resTitle" placeholder="请输入标题" maxlength="50"/>
+        </el-form-item>
+        <el-form-item label="所属部门" prop="deptId">
+          <treeselect :options="deptOptions" v-model="form.deptId" :show-count="true" placeholder="请选择所属部门"
+                      @select="hx" :noResultsText="'空'" :noOptionsText="'空'"/>
+        </el-form-item>
+        <!--        <el-form-item label="发布状态" prop="releaseStatus">
+                  <el-select v-model="form.releaseStatus" placeholder="请选择发布状态" filterable>
+                    <el-option
+                      v-for="dict in dict.type.centerdata_release_status"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>-->
+        <!--        <el-form-item label="简介" prop="resIntroduction">
+                  <editor v-model="form.resIntroduction" :min-height="192" maxlength="512"/>
+                </el-form-item>-->
+        <el-form-item label="简介" prop="resIntroduction">
+          <el-input v-model="form.resIntroduction" type="textarea" placeholder="请输入内容" maxlength="200"/>
+        </el-form-item>
+        <el-form-item label="附件" prop="attachId">
+          <fileUpload :value="[form.fileUrl,form.fileName]" v-model="form.fileUrl" :setFileName="setFileName"
+                      :removeFileName="removeFileName" :limit="1"></fileUpload>
+        </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>
+
+    <!-- 详情 -->
+    <el-dialog :title="title" :visible.sync="seeopen" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+
+        <el-form-item label="标题" prop="resTitle">
+          <el-input v-model="form.resTitle" placeholder="请输入标题" :disabled="true" maxlength="50"/>
+        </el-form-item>
+
+        <!--        <el-form-item label="简介" prop="resIntroduction">
+                  <el-input v-model="form.resIntroduction" placeholder="请输入简介" :disabled="true" maxlength="512"/>
+                </el-form-item>-->
+
+        <el-form-item label="所属部门" prop="deptId">
+          <treeselect :options="deptOptions" v-model="form.deptId" :show-count="true" placeholder="请选择所属部门"
+                      @select="hx" :disabled="true" :noResultsText="'空'" :noOptionsText="'空'"/>
+        </el-form-item>
+
+        <el-form-item label="简介" prop="resIntroduction" label-width="120px">
+          <el-input v-model="form.resIntroduction" type="textarea" placeholder="请输入内容" maxlength="500"/>
+        </el-form-item>
+
+        <el-form-item label="附件" prop="attachId">
+          <fileUpload :value="form.fileUrl" @input="getUrl" v-model="form.fileUrl"></fileUpload>
+        </el-form-item>
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="cancelSel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  addReserve,
+  delReserve,
+  getReserve,
+  listReserve,
+  updateReserve,
+  updateRelease
+} from "@/api/data/reserve/reserve";
+import Treeselect from "@riophae/vue-treeselect";
+import {treeselect} from "@/api/system/dept";
+import deptselector from '@/views/components/deptselector.vue'
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import fileUpload from '@/views/components/FileUpload/index.vue'
+
+export default {
+  name: "Reserve",
+  dicts: ["centerdata_release_status"],
+  components: {
+    Treeselect,
+    deptselector,
+    fileUpload
+  },
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 应急预案表格数据
+      reserveList: [],
+      fileNames: [],
+      // 部门树选项
+      deptOptions: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      seeopen: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        dataStatus: null,
+        dataDeptId: null,
+        resTitle: null,
+        resIntroduction: null,
+        releaseStatus: null,
+        deptId: null,
+        deptName: 0,
+        attachId: null
+      },
+      // 表单参数
+      form: {
+        dataDeptId: 0,
+        releaseStatus: 'centerdata_release_status_no',
+        fileUrl: '',
+        fileName: '',
+        fileUrlList: [],
+        fileNameList: []
+      },
+      // 表单校验
+      rules: {
+        resTitle: [
+          {required: true, message: "标题不能为空", trigger: "blur"}
+        ],
+        deptId: [
+          {required: true, message: "所属部门不能为空", trigger: "change"}
+        ]
+      }
+    };
+  },
+  created() {
+    this.getList();
+    this.getTreeselect();
+  },
+  methods: {
+    getUrl(url) {
+      this.form.fileUrl = url;
+    },
+    setFileName(fileName) {
+      let that = this
+      that.fileNames.push(fileName)
+    },
+    removeFileName(index) {
+      let that = this
+      that.fileNames.splice(index, 1);
+      let fileurls = that.form.fileUrl.split(",")
+      fileurls.splice(index, 1)
+      that.form.fileUrl = fileurls.toString()
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    setDataDeptId(e) {
+      this.form.dataDeptId = e.deptId
+      this.form.dataDeptName = e.deptName
+    },
+    hx(node) {
+      this.form.deptId = node.id
+      this.form.deptName = node.label
+      this.$refs.form.validate()
+    },
+    /** 查询应急预案列表 */
+    getList() {
+      this.loading = true;
+      listReserve(this.queryParams).then(response => {
+        this.reserveList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 取消按钮
+    cancelSel() {
+      this.seeopen = false;
+      this.reset();
+    },
+    See(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getReserve(id).then(response => {
+        this.form = response.data;
+        this.seeopen = true;
+        this.title = "查看";
+      });
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        dataStatus: "0",
+        dataDeptId: null,
+        resTitle: null,
+        resIntroduction: null,
+        deptId: null,
+        deptName: null,
+        attachId: null
+      };
+      this.fileNames = []
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.queryParams.deptName = 0;
+      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.open = true;
+      this.title = "添加应急预案";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getReserve(id).then(response => {
+        const list = response.data.fileUrl.split(',');
+        var item1
+        if (response.data.fileUrl != "") {
+          for (var a = 0; a < list.length; a++) {
+            let listurl = list[a].split('+')
+            this.fileNames.push(listurl[1])
+          }
+        }
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改应急预案";
+      });
+    },
+
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.form.fileName = this.fileNames.toString()
+          this.form.fileUrlList = Array.from(document.querySelectorAll('.el-upload-list__item')).map(item => item.querySelector('a').getAttribute('href'))
+          this.form.fileNameList = this.fileNames;
+          if (this.form.id != null) {
+            updateReserve(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            this.form.releaseStatus = "centerdata_release_status_no";
+            addReserve(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否删除选中的数据?').then(function () {
+        return delReserve(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    },
+
+    handlePublish(row){
+      let ids = row.id || this.ids;
+      let status = "发布", releaseStatus = "centerdata_release_status_yes";
+      if(!ids.includes(",")) {
+        ids = [ids];
+        if (row.releaseStatus.includes("centerdata_release_status_yes")) {
+          status = "撤销";
+          releaseStatus = "centerdata_release_status_no";
+        }
+        this.$modal.confirm('是否' + status + '选中的数据?').then(function () {
+          return updateRelease(ids, releaseStatus);
+        }).then(() => {
+          this.getList();
+          this.$modal.msgSuccess(status + "成功");
+        }).catch((e) => {
+          console.log(e)
+        });
+      }
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('sooka-sponest-center-data/reserve/export', {
+        ...this.queryParams
+      }, `应急预案_${new Date().getTime()}.xlsx`)
+    },
+    // 点击按钮修改是否只查询本级部门用户
+    changeQueryType() {
+      this.queryParams.deptName = this.queryParams.deptName === 0 ? 1 : 0;
+    }
+  }
+};
+</script>