1
Surpriseplus
2022-10-08 50178aa6cf8abe1395f76c2d3e3cda55baddc3eb
1
已添加2个文件
已修改8个文件
1431 ■■■■ 文件已修改
public/config/config.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/api.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/lang/en.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/lang/zh.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/index.js 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/datamanage/verDirTree.vue 354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/datamanage/verDirTrees.vue 352 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/datamanage/versionManage.vue 647 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userManage/roleDepTree.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userManage/roleManage.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/config/config.js
@@ -1,5 +1,4 @@
const BASE_URL = 'http://192.168.20.39:12316';
const BASE_URL = 'http://192.168.20.55:12316';
var gisUrl = 'http://183.162.245.49:3301';
var ifreamUrl = 'http://192.168.20.39:12306/';
src/api/api.js
@@ -64,3 +64,30 @@
  //请求地址
  return request.get('/dep/selectDep', { params: params });
}
//目录管理列表
export function selectdirTab(params) {
  //请求地址
  return request.get('/dir/selectDirAll', { params: params });
}
//版本管理列表
export function select_Ver_ByPageAndCount(params) {
  //请求地址
  return request.get('/version/selectByPageAndCount', { params: params });
}
//版本管理新增
export function insertVersion(params) {
  //请求地址
  return request.post('/version/insertVersion', params);
}
//版本管理删除
export function deleteVersion(params) {
  //请求地址
  console.log(params);
  return request.get('/version/deleteVersion?id=' + params);
}
//版本管理修改
export function updateVersion(params) {
  //请求地址
  return request.post('/version/updateVersion', params);
}
src/assets/lang/en.js
@@ -26,6 +26,19 @@
    dataLoading: 'dataLoading',
    SpatialData: 'SpatialData',
    versionManage: 'versionManage',
    vmobj: {
      keyword: 'Keyword',
      describe: 'Describe',
      index: 'Index',
      name: 'Name',
      catalogue: 'Catalogue',
      createontime: 'Creation Time',
      createonuser: 'Creation Personne',
      updateontime: 'Update Time',
      updateonuser: 'Update Personnel',
      editVersion: 'Modify version information',
      addVersion: 'Add version information',
    },
    dictionaryManage: 'dictionaryManage',
    dictionaryManageObj: {
      tableName: 'table name',
src/assets/lang/zh.js
@@ -26,6 +26,19 @@
    dataLoading: '数据入库',
    SpatialData: '空间数据管理',
    versionManage: '版本管理',
    vmobj: {
      keyword: '关键字',
      describe: '描述',
      index: '序号',
      name: '名称',
      catalogue: '目录',
      createontime: '创建时间',
      createonuser: '创建人员',
      updateontime: '修改时间',
      updateonuser: '修改人员',
      editVersion: '修改版本信息',
      addVersion: '添加版本信息',
    },
    dictionaryManage: '字典管理',
    dictionaryManageObj: {
      tableName: '表名称',
src/store/index.js
@@ -1,12 +1,14 @@
import Vue from "vue";
import Vuex from "vuex";
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
  state: {
    catalogueName: "",
    catalogueName: '',
    cataNode: {},
    verCateNode: {},
    verCateNodes: {},
  },
  mutations: {
    // èŽ·å–å®Œæ•´é¢åŒ…å±‘è·¯å¾„
@@ -17,6 +19,12 @@
    changeNode(state, msg) {
      state.cataNode = msg;
    },
    verChangeNode(state, msg) {
      state.verCateNode = msg;
    },
    verChangeNodes(state, msg) {
      state.verCateNodes = msg;
    },
  },
  actions: {},
  modules: {},
src/views/datamanage/verDirTree.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,354 @@
<template>
  <div class="wrap">
    <div class="bread">
      <el-breadcrumb separator="el-icon-arrow-right">
        <el-breadcrumb-item>{{ breadLabel }}</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
    <div class="treeBox">
      <el-tree
        ref="tree"
        :props="defaultProps"
        node-key="id"
        :data="dirData"
        :expand-on-click-node="false"
        :default-expanded-keys="[1, 2, 3, 4, 5, 6, 7, 8, 9]"
        :draggable="draggable"
        @node-drag-start="handleDragStart"
        @node-click="handleNodeClick"
        @node-drop="handleDrop"
      >
        <span class="custom-tree-node" slot-scope="{ node, data }">
          <span>{{ node.label }}</span>
          <span class="btnBox" v-show="showEdit">
            <el-button type="text" size="mini" @click="() => append(data)">
              <i class="el-icon-circle-plus"></i>
            </el-button>
            <el-button
              type="text"
              size="mini"
              @click="() => remove(node, data)"
            >
              <i class="el-icon-delete-solid"></i>
            </el-button>
          </span>
        </span>
      </el-tree>
      <!-- <div style="margin-left:130px;">
        <el-button @click="sendChange">保存</el-button>
      </div> -->
    </div>
  </div>
</template>
<script>
import { selectdirTab } from '../../api/api';
export default {
  name: 'catalogueTree',
  props: ['showBtn'],
  data() {
    return {
      draggable: false,
      id: null,
      showEdit: false,
      showBread: false,
      oriData: [], //原始树数据
      dirData: [], //el树数据
      old_dirDat: [], //el树数据(拖动前)
      newData: [], //拖动后原始数据
      breadList: [], //面包屑数组
      breadLabel: '', //面包屑文字
      filterText: '',
      defaultProps: {
        children: 'children',
        label: 'name',
      },
    };
  },
  methods: {
    // è¯·æ±‚目录树
    async getDirTree() {
      this.selectData = [];
      const data = await selectdirTab();
      if (data.code != 200) {
        this.$message.error('下拉调用失败');
      } else {
        this.oriData = data.result;
        this.newData = data.result;
        this.dirData = this.treeData(data.result);
      }
    },
    treeData(source) {
      let cloneData = JSON.parse(JSON.stringify(source)); // å¯¹æºæ•°æ®æ·±åº¦å…‹éš†
      return cloneData.filter((father) => {
        // å¾ªçŽ¯æ‰€æœ‰é¡¹
        let branchArr = cloneData.filter((child) => father.id == child.pid); // å¯¹æ¯”ID,分别上下级菜单,并返回数据
        branchArr.length > 0 ? (father.children = branchArr) : ''; // ç»™çˆ¶çº§æ·»åŠ ä¸€ä¸ªchildren属性,并赋值
        // å±žäºŽåŒä¸€å¯¹è±¡é—®é¢˜ï¼Œä¾‹å¦‚:令 a=b、c=1 ï¼Œç„¶åŽå†ä»¤ b.c=c ï¼Œ é‚£ä¹ˆ a.c=b.c=c=1 ï¼›åŒç†ï¼ŒåŽç»­ä»¤ c.d=2 ,那么 a.c.d ä¹Ÿæ˜¯=2;
        // ç”±æ­¤å¾ªçŽ¯å¤šæ¬¡åŽï¼Œå°±èƒ½å½¢æˆç›¸åº”çš„æ ‘å½¢æ•°æ®ç»“æž„
        return father.pid == 0; // è¿”回一级菜单
      });
    },
    append(data) {
      this.$prompt('请输入名称', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
      })
        .then(({ value }) => {
          const newChild = {
            id: this.id + 1,
            name: value,
            pid: data.id,
            // children: [],
            oid: data.children ? data.children.length + 1 : 1,
          };
          this.id = newChild.id; //修改新的最大I
          console.log(newChild);
          if (!data.children) {
            this.$set(data, 'children', []);
          }
          data.children.push(newChild);
          this.newData.push(newChild);
          this.sendChange();
        })
        .catch(() => {
          this.$message({
            type: 'info',
            message: '取消输入',
          });
        });
    },
    remove(node, data) {
      this.$confirm('此操作将删除该节点, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(() => {
          const parent = node.parent;
          const children = parent.data.children || parent.data;
          const index = children.findIndex((d) => d.id === data.id);
          let res = children.splice(index, 1);
          var std = [];
          for (var i in res) {
            std.push(res[i].id);
          }
          deleteDirTree(std);
          this.getDirTree();
          this.$message({
            type: 'success',
            message: '删除成功!',
          });
        })
        .catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除',
          });
        });
      // this.dialogMessage="是否删除"
      // this.dialogFlag = 1;
      // this.dialogFrom ={
      //   node:node,
      //   val:data
      // }
      //   this.dialogVisible=true;//目录树更改弹窗
      // const parent = node.parent;
      // const children = parent.data.children || parent.data;
      // const index = children.findIndex((d) => d.id === data.id);
      // let res = children.splice(index, 1);
      // // console.log(res);
      // // console.log(data);
      // console.log(this.flaten(res));
    },
    flaten(arr) {
      return arr.reduce((p, v, i) => {
        for (let i = 0; i < p.length; i++) {
          if (p[i].children) {
            delete p[i].children;
          }
        }
        return p.concat(v.children ? this.flaten(v.children).concat(v) : v);
      }, []);
    },
    handleNodeClick(data) {
      // console.log(data);
      this.$store.commit('verChangeNode', data);
      this.breadList = [];
      this.getTreeNode(this.$refs.tree.getNode(data.id));
    },
    getTreeNode(node) {
      if (node && node.label) {
        this.breadList.unshift(node.label);
        this.getTreeNode(node.parent); //递归
        this.breadLabel = this.breadList.join('>');
        this.$store.commit('changeCata', this.breadLabel);
      }
    },
    handleDragStart(node, ev) {
      this.old_dirDat = JSON.parse(JSON.stringify(this.dirData)); //将备份的dir重新赋值
    },
    handleDrop(draggingNode, dropNode, dropType, ev) {
      // console.log("被拖拽节点", draggingNode);
      // console.log("进入的节点", dropNode);
      // console.log("放置位置", dropType);
      // console.log("事件", ev);
      // if (dropType !== "inner") {
      //   // 1.修改父节点pid
      //   draggingNode.data.pid = dropNode.data.pid;
      //   dropNode.parent.childNodes.forEach((item, index) => {
      //     // 2.修改自身顺序oid
      //     item.data.oid = index + 1;
      //   });
      // }
      // // console.log(draggingNode.data.id);
      // let res = this.oriData.filter((item) => item.id == draggingNode.data.id);
      // console.log(res);
      this.$confirm('此操作将保存目录更改, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(() => {
          let paramData = [];
          let data = dropType != 'inner' ? dropNode.parent.data : dropNode.data;
          let nodeData =
            dropNode.level == 1 && dropType != 'inner' ? data : data.children;
          let pid = '';
          nodeData.forEach((item, i) => {
            if (dropType != 'inner') {
              if (draggingNode.data.pid === dropNode.data.pid) {
                pid = item.pid;
              } else {
                pid = dropNode.data.pid;
              }
            } else {
              pid = data.id;
            }
            let collection = {
              id: item.id,
              name: item.name,
              pid,
              oid: i + 1,
            };
            paramData.push(collection);
          });
          // console.log(paramData);
          let arr = [];
          this.oriData.forEach((e) => {
            paramData.forEach((item) => {
              if (item.id === e.id) {
                e = item;
              }
            });
            arr.push(e);
          });
          this.newData = arr;
          this.sendChange();
          this.$message({
            type: 'success',
            message: '更改成功!',
          });
        })
        .catch(() => {
          this.$message({
            type: 'info',
            message: '已取消更改',
          });
          this.dirData = this.old_dirDat; //将备份的dir重新赋值
        });
    },
    sendChange() {
      updateDirTree(this.newData).then((res) => {
        console.log(res);
        if (res.status == 200) {
          this.$message({
            type: 'success',
            message: '更新成功!',
          });
        }
      });
    },
  },
  mounted() {
    this.getDirTree();
    this.$bus.$on('clearTressLabel', (e) => {
      this.breadLabel = '';
    });
  },
  watch: {
    showBtn: {
      immediate: true,
      handler(val) {
        if (val) {
          this.showEdit = val;
          this.draggable = val;
        }
      },
    },
    showBread: {
      immediate: true,
      handler(val) {
        if (val) this.showBread = val;
      },
    },
  },
};
</script>
<style lang="less" scoped>
.wrap {
  width: 98.5%;
  height: 100%;
  .bread {
    width: 100%;
    height: 5%;
    margin: 0 auto;
    overflow: auto;
  }
  .treeBox {
    margin-top: 1%;
    width: 100%;
    height: 94%;
    overflow: auto;
    .el-tree {
      background: transparent;
      font-size: 15px;
      font-family: Microsoft YaHei;
      font-weight: 400;
      color: #000000;
      // /deep/ .el-tree-node__label {
      //   font-size: 18px;
      // }
      /deep/ .el-tree-node {
        padding-top: 10px;
        // padding-bottom: 10px;
      }
      /deep/ .el-tree-node:focus > .el-tree-node__content {
        background-color: #b9b9b9;
      }
      /deep/ .el-tree-node__content:hover {
        background-color: rgb(153, 153, 153);
      }
      .btnBox {
        margin-left: 5px;
        .el-button + .el-button {
          margin-left: 5px;
        }
      }
    }
  }
}
</style>
src/views/datamanage/verDirTrees.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,352 @@
<template>
  <div class="wrap">
    <div class="bread">
      <el-breadcrumb separator="el-icon-arrow-right">
        <el-breadcrumb-item>{{ breadLabel }}</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
    <div class="treeBox">
      <el-tree
        ref="tree"
        :props="defaultProps"
        node-key="id"
        :data="dirData"
        :expand-on-click-node="false"
        :default-expanded-keys="[1, 2, 3, 4, 5, 6, 7, 8, 9]"
        :draggable="draggable"
        @node-drag-start="handleDragStart"
        @node-click="handleNodeClick"
        @node-drop="handleDrop"
      >
        <span class="custom-tree-node" slot-scope="{ node, data }">
          <span>{{ node.label }}</span>
          <span class="btnBox" v-show="showEdit">
            <el-button type="text" size="mini" @click="() => append(data)">
              <i class="el-icon-circle-plus"></i>
            </el-button>
            <el-button
              type="text"
              size="mini"
              @click="() => remove(node, data)"
            >
              <i class="el-icon-delete-solid"></i>
            </el-button>
          </span>
        </span>
      </el-tree>
      <!-- <div style="margin-left:130px;">
        <el-button @click="sendChange">保存</el-button>
      </div> -->
    </div>
  </div>
</template>
<script>
import { selectdirTab } from '../../api/api';
export default {
  name: 'catalogueTree',
  props: ['showBtn'],
  data() {
    return {
      draggable: false,
      id: null,
      showEdit: false,
      showBread: false,
      oriData: [], //原始树数据
      dirData: [], //el树数据
      old_dirDat: [], //el树数据(拖动前)
      newData: [], //拖动后原始数据
      breadList: [], //面包屑数组
      breadLabel: '', //面包屑文字
      filterText: '',
      defaultProps: {
        children: 'children',
        label: 'name',
      },
    };
  },
  methods: {
    // è¯·æ±‚目录树
    async getDirTree() {
      this.selectData = [];
      const data = await selectdirTab();
      if (data.code != 200) {
        this.$message.error('下拉调用失败');
      } else {
        this.oriData = data.result;
        this.newData = data.result;
        this.dirData = this.treeData(data.result);
      }
    },
    treeData(source) {
      let cloneData = JSON.parse(JSON.stringify(source)); // å¯¹æºæ•°æ®æ·±åº¦å…‹éš†
      return cloneData.filter((father) => {
        // å¾ªçŽ¯æ‰€æœ‰é¡¹
        let branchArr = cloneData.filter((child) => father.id == child.pid); // å¯¹æ¯”ID,分别上下级菜单,并返回数据
        branchArr.length > 0 ? (father.children = branchArr) : ''; // ç»™çˆ¶çº§æ·»åŠ ä¸€ä¸ªchildren属性,并赋值
        // å±žäºŽåŒä¸€å¯¹è±¡é—®é¢˜ï¼Œä¾‹å¦‚:令 a=b、c=1 ï¼Œç„¶åŽå†ä»¤ b.c=c ï¼Œ é‚£ä¹ˆ a.c=b.c=c=1 ï¼›åŒç†ï¼ŒåŽç»­ä»¤ c.d=2 ,那么 a.c.d ä¹Ÿæ˜¯=2;
        // ç”±æ­¤å¾ªçŽ¯å¤šæ¬¡åŽï¼Œå°±èƒ½å½¢æˆç›¸åº”çš„æ ‘å½¢æ•°æ®ç»“æž„
        return father.pid == 0; // è¿”回一级菜单
      });
    },
    append(data) {
      this.$prompt('请输入名称', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
      })
        .then(({ value }) => {
          const newChild = {
            id: this.id + 1,
            name: value,
            pid: data.id,
            // children: [],
            oid: data.children ? data.children.length + 1 : 1,
          };
          this.id = newChild.id; //修改新的最大I
          console.log(newChild);
          if (!data.children) {
            this.$set(data, 'children', []);
          }
          data.children.push(newChild);
          this.newData.push(newChild);
          this.sendChange();
        })
        .catch(() => {
          this.$message({
            type: 'info',
            message: '取消输入',
          });
        });
    },
    remove(node, data) {
      this.$confirm('此操作将删除该节点, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(() => {
          const parent = node.parent;
          const children = parent.data.children || parent.data;
          const index = children.findIndex((d) => d.id === data.id);
          let res = children.splice(index, 1);
          var std = [];
          for (var i in res) {
            std.push(res[i].id);
          }
          deleteDirTree(std);
          this.getDirTree();
          this.$message({
            type: 'success',
            message: '删除成功!',
          });
        })
        .catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除',
          });
        });
      // this.dialogMessage="是否删除"
      // this.dialogFlag = 1;
      // this.dialogFrom ={
      //   node:node,
      //   val:data
      // }
      //   this.dialogVisible=true;//目录树更改弹窗
      // const parent = node.parent;
      // const children = parent.data.children || parent.data;
      // const index = children.findIndex((d) => d.id === data.id);
      // let res = children.splice(index, 1);
      // // console.log(res);
      // // console.log(data);
      // console.log(this.flaten(res));
    },
    flaten(arr) {
      return arr.reduce((p, v, i) => {
        for (let i = 0; i < p.length; i++) {
          if (p[i].children) {
            delete p[i].children;
          }
        }
        return p.concat(v.children ? this.flaten(v.children).concat(v) : v);
      }, []);
    },
    handleNodeClick(data) {
      // console.log(data);
      this.$store.commit('verChangeNodes', data);
      this.breadList = [];
      this.getTreeNode(this.$refs.tree.getNode(data.id));
    },
    getTreeNode(node) {
      if (node && node.label) {
        this.breadList.unshift(node.label);
        this.getTreeNode(node.parent); //递归
        this.breadLabel = this.breadList.join('>');
        this.$store.commit('verchangeCatas', this.breadLabel);
      }
    },
    handleDragStart(node, ev) {
      this.old_dirDat = JSON.parse(JSON.stringify(this.dirData)); //将备份的dir重新赋值
    },
    handleDrop(draggingNode, dropNode, dropType, ev) {
      // console.log("被拖拽节点", draggingNode);
      // console.log("进入的节点", dropNode);
      // console.log("放置位置", dropType);
      // console.log("事件", ev);
      // if (dropType !== "inner") {
      //   // 1.修改父节点pid
      //   draggingNode.data.pid = dropNode.data.pid;
      //   dropNode.parent.childNodes.forEach((item, index) => {
      //     // 2.修改自身顺序oid
      //     item.data.oid = index + 1;
      //   });
      // }
      // // console.log(draggingNode.data.id);
      // let res = this.oriData.filter((item) => item.id == draggingNode.data.id);
      // console.log(res);
      this.$confirm('此操作将保存目录更改, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
        .then(() => {
          let paramData = [];
          let data = dropType != 'inner' ? dropNode.parent.data : dropNode.data;
          let nodeData =
            dropNode.level == 1 && dropType != 'inner' ? data : data.children;
          let pid = '';
          nodeData.forEach((item, i) => {
            if (dropType != 'inner') {
              if (draggingNode.data.pid === dropNode.data.pid) {
                pid = item.pid;
              } else {
                pid = dropNode.data.pid;
              }
            } else {
              pid = data.id;
            }
            let collection = {
              id: item.id,
              name: item.name,
              pid,
              oid: i + 1,
            };
            paramData.push(collection);
          });
          // console.log(paramData);
          let arr = [];
          this.oriData.forEach((e) => {
            paramData.forEach((item) => {
              if (item.id === e.id) {
                e = item;
              }
            });
            arr.push(e);
          });
          this.newData = arr;
          this.sendChange();
          this.$message({
            type: 'success',
            message: '更改成功!',
          });
        })
        .catch(() => {
          this.$message({
            type: 'info',
            message: '已取消更改',
          });
          this.dirData = this.old_dirDat; //将备份的dir重新赋值
        });
    },
    sendChange() {
      updateDirTree(this.newData).then((res) => {
        console.log(res);
        if (res.status == 200) {
          this.$message({
            type: 'success',
            message: '更新成功!',
          });
        }
      });
    },
  },
  mounted() {
    this.getDirTree();
  },
  watch: {
    showBtn: {
      immediate: true,
      handler(val) {
        if (val) {
          this.showEdit = val;
          this.draggable = val;
        }
      },
    },
    showBread: {
      immediate: true,
      handler(val) {
        if (val) this.showBread = val;
      },
    },
  },
};
</script>
<style lang="less" scoped>
.wrap {
  width: 98.5%;
  height: 100%;
  .bread {
    width: 100%;
    height: 5%;
    margin: 0 auto;
    overflow: auto;
  }
  .treeBox {
    margin-top: 1%;
    width: 100%;
    height: 94%;
    overflow: auto;
    .el-tree {
      background: transparent;
      font-size: 15px;
      font-family: Microsoft YaHei;
      font-weight: 400;
      color: #000000;
      // /deep/ .el-tree-node__label {
      //   font-size: 18px;
      // }
      /deep/ .el-tree-node {
        padding-top: 10px;
        // padding-bottom: 10px;
      }
      /deep/ .el-tree-node:focus > .el-tree-node__content {
        background-color: #b9b9b9;
      }
      /deep/ .el-tree-node__content:hover {
        background-color: rgb(153, 153, 153);
      }
      .btnBox {
        margin-left: 5px;
        .el-button + .el-button {
          margin-left: 5px;
        }
      }
    }
  }
}
</style>
src/views/datamanage/versionManage.vue
@@ -1,76 +1,108 @@
<template>
  <div class="authorityManagement_box">
    <My-bread :list="['数据管理', '版本管理']"></My-bread>
    <My-bread
      :list="[
        `${$t('dataManage.dataManage')}`,
        `${$t('dataManage.versionManage')}`,
      ]"
    ></My-bread>
    <el-divider />
    <div class="searchComp">
      <el-form ref="ruleForm" :model="ruleForm" :inline="true">
        <el-form-item label="关键字" prop="name">
          <el-input v-model="ruleForm.name" placeholder="请输入" />
        <el-form-item :label="$t('dataManage.vmobj.keyword')" prop="name">
          <el-input
            v-model="ruleForm.name"
            :placeholder="$t('common.pleaseInput')"
          />
        </el-form-item>
        <el-form-item>
          <el-button
            @click="submitForm('ruleForm')"
            @click="onSubmit('ruleForm')"
            icon="el-icon-search"
            type="primary"
            size="small"
            >查询</el-button
            >{{ $t('common.iquery') }}</el-button
          >
          <!-- <el-button
          <el-button
            @click="InsertFormdialog = true"
            icon="el-icon-plus"
            size="small"
            >{{ $t('common.append') }}</el-button
          >
          <el-button
            @click="resetForm('ruleForm')"
            icon="el-icon-refresh"
            type="info"
            icon="el-icon-delete"
            size="small"
            >重置</el-button
            >{{ $t('common.empty') }}</el-button
          >
          <span style="display:none">{{ pathId }}</span> -->
        </el-form-item>
      </el-form>
    </div>
    <div class="bottom">
      <div class="leftTree">
        <catalogueTree></catalogueTree>
        <ver-dir-tree></ver-dir-tree>
      </div>
      <div class="rightTable">
        <div class="table_box">
          <el-table
            :data="tableData"
            border
            style="width: 100%"
            fit
            height="99%"
          >
          <el-table :data="tableData" stripe style="width: 100%" height="99%">
            <!-- <el-table-column type="selection" width="40" /> -->
            <el-table-column width="50" type="index" label="序号" />
            <el-table-column min-width="130" prop="name" label="数据名称" />
            <el-table-column min-width="160" prop="path" label="所属目录" />
            <el-table-column
              min-width="100"
              prop="create_time"
              label="创建时间"
              align="center"
              type="index"
              :label="$t('dataManage.vmobj.index')"
              width="70px"
            />
            <el-table-column align="center" prop="id" v-if="false" />
            <el-table-column
              align="center"
              prop="name"
              :label="$t('dataManage.vmobj.name')"
            />
            <el-table-column
              min-width="50"
              prop="create_user"
              label="创建人员"
              align="center"
              prop="depName"
              :label="$t('dataManage.vmobj.catalogue')"
            />
            <el-table-column min-width="80" prop="up_unit" label="上传单位" />
            <el-table-column min-width="50" prop="status" label="数据状态" />
            <el-table-column min-width="50" prop="version" label="数据版本" />
            <el-table-column min-width="50" label="操作">
            <el-table-column
              align="center"
              prop="descr"
              :label="$t('dataManage.vmobj.describe')"
            />
            <el-table-column
              align="center"
              prop="createUser"
              :label="$t('dataManage.vmobj.createonuser')"
            />
            <el-table-column
              align="center"
              prop="createTime"
              :label="$t('dataManage.vmobj.createontime')"
              :formatter="formatTime"
            />
            <el-table-column
              align="center"
              prop="UpdateUser"
              :label="$t('dataManage.vmobj.updateonuser')"
            />
            <el-table-column
              align="center"
              prop="updateTime"
              :label="$t('dataManage.vmobj.updateontime')"
              :formatter="formatTime"
            />
            <el-table-column min-width="150" :label="$t('common.operate')">
              <template slot-scope="scope">
                <!-- <el-link @click="showDetail(scope.$index, scope.row)"
                  >查看</el-link
                > -->
                <el-link
                <el-button
                  @click="handleEdit(scope.$index, scope.row)"
                  style="margin-left: 10px"
                  >修改</el-link
                  type="warning"
                  size="small"
                  >{{ $t('common.update') }}</el-button
                >
                <!-- <el-link
                <el-button
                  @click="handleDelete(scope.$index, scope.row)"
                  style="margin-left: 10px"
                  >删除</el-link
                > -->
                  type="danger"
                  size="small"
                  >{{ $t('common.delete') }}</el-button
                >
              </template>
            </el-table-column>
          </el-table>
@@ -82,9 +114,9 @@
          <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="currentPage"
            :page-sizes="[10, 20, 50, 100]"
            :page-size="10"
            :current-page="listData.pageIndex"
            :page-sizes="[10, 20, 30, 40]"
            :page-size="listData.pageSize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="count"
          >
@@ -96,7 +128,7 @@
      <el-card class="box-card">
        <div slot="header" class="clearfix">
          <span>详细信息</span>
          <div style="float: right; cursor: pointer" @click="closeDetial">
          <div style="float: right; cursor: pointer">
            <i class="el-icon-close"></i>
          </div>
        </div>
@@ -117,101 +149,141 @@
        </div>
      </el-card>
    </div>
    <el-dialog title="修改详情" :visible.sync="dialogFormVisible">
    <el-dialog
      :title="$t('dataManage.vmobj.editVersion')"
      :visible.sync="dialogFormVisible"
    >
      <el-form :model="upform">
        <el-form-item label="数据名称" :label-width="formLabelWidth">
        <el-form-item
          :label="$t('dataManage.vmobj.name')"
          :label-width="formLabelWidth"
        >
          <el-input v-model="upform.name" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item
          :label="$t('dataManage.vmobj.catalogue')"
          :label-width="formLabelWidth"
        >
          <el-input
            v-model="upform.name"
            v-model="upform.depName"
            autocomplete="off"
            disabled
          ></el-input>
          <el-button style="margin-left: 20px" @click="showVerTree(2)">{{
            $t('common.choose')
          }}</el-button>
        </el-form-item>
        <el-form-item label="所属目录" :label-width="formLabelWidth">
          <el-input
            v-model="upform.path"
            autocomplete="off"
            disabled
          ></el-input>
        </el-form-item>
        <el-form-item label="创建时间" :label-width="formLabelWidth">
          <el-date-picker
            v-model="upform.create_time"
            value-format="yyyy-MM-dd"
            type="date"
            placeholder="选择日期"
            style="width: 100%"
            disabled
          >
          </el-date-picker>
        </el-form-item>
        <el-form-item label="创建人员" :label-width="formLabelWidth">
          <el-input
            v-model="upform.create_user"
            autocomplete="off"
            disabled
          ></el-input>
        </el-form-item>
        <el-form-item label="上传单位" :label-width="formLabelWidth">
          <el-input
            v-model="upform.up_unit"
            autocomplete="off"
            disabled
          ></el-input>
        </el-form-item>
        <el-form-item label="数据状态" :label-width="formLabelWidth">
          <el-input
            v-model="upform.status"
            autocomplete="off"
            disabled
          ></el-input>
        </el-form-item>
        <el-form-item label="数据版本" :label-width="formLabelWidth">
          <el-input v-model="upform.version" autocomplete="off"></el-input>
        <el-form-item
          :label="$t('dataManage.vmobj.describe')"
          :label-width="formLabelWidth"
        >
          <el-input v-model="upform.descr" autocomplete="off"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="updateForm">ç¡® å®š</el-button>
        <el-button @click="dialogFormVisible = false">取 æ¶ˆ</el-button>
        <el-button @click="editFromDataClose">{{
          $t('common.close')
        }}</el-button>
        <el-button @click="editFromData" type="primary">{{
          $t('common.confirm')
        }}</el-button>
      </div>
    </el-dialog>
    <el-dialog
      :title="$t('dataManage.vmobj.addVersion')"
      :visible.sync="InsertFormdialog"
    >
      <el-form :model="insertform">
        <el-form-item
          :label="$t('dataManage.vmobj.name')"
          :label-width="formLabelWidth"
        >
          <el-input v-model="insertform.name" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item
          :label="$t('dataManage.vmobj.catalogue')"
          :label-width="formLabelWidth"
        >
          <el-input
            v-model="insertform.path"
            autocomplete="off"
            disabled
          ></el-input>
          <el-button style="margin-left: 20px" @click="showVerTree(3)">{{
            $t('common.choose')
          }}</el-button>
        </el-form-item>
        <el-form-item
          :label="$t('dataManage.vmobj.describe')"
          :label-width="formLabelWidth"
        >
          <el-input v-model="insertform.descr" autocomplete="off"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="insertFromDataClose">{{
          $t('common.close')
        }}</el-button>
        <el-button @click="insertFromData" type="primary">{{
          $t('common.confirm')
        }}</el-button>
      </div>
    </el-dialog>
    <div class="leftTrees" v-if="showCata">
      <div class="treeBox">
        <ver-dir-trees></ver-dir-trees>
      </div>
      <div class="btnBox">
        <el-button type="primary" size="small" @click="selectCataName">{{
          $t('common.confirm')
        }}</el-button>
        <el-button type="primary" size="small" @click="showCata = false">{{
          $t('common.close')
        }}</el-button>
      </div>
    </div>
  </div>
</template>
<script>
import {
  queryMetaData,
  queryDataCount,
  updateMetaData,
  dltMetaDatas,
} from "../../api/api";
import catalogueTree from "../../components/catalogueTree.vue";
import MyBread from "../../components/MyBread.vue";
  select_Ver_ByPageAndCount,
  insertVersion,
  deleteVersion,
  updateVersion,
} from '../../api/api';
import verDirTree from './verDirTree.vue';
import MyBread from '../../components/MyBread.vue';
import verDirTrees from './verDirTrees.vue';
import moment from 'moment';
export default {
  name: "versionManage",
  components: { MyBread, catalogueTree },
  name: 'versionManage',
  components: { MyBread, verDirTree, verDirTrees },
  data() {
    return {
      multipleSelection: [],
      formLabelWidth: "120px",
      showCata: false,
      formLabelWidth: '100px',
      dialogFormVisible: false,
      upform: {},
      InsertFormdialog: false,
      showinfoBox: false,
      itemdetail: {},
      ruleForm: {
        name: "",
      },
      count: 0,
      pageSize: 10,
      pageNum: 1,
      nowPid: -1,
      upform: {},
      ruleForm: {},
      insertform: {},
      tableData: [],
      currentPage: 1,
      searchName: "",
      count: 0,
      rowFlag: null,
      listData: {
        name: null,
        depName: null,
        pageIndex: 1,
        pageSize: 10,
      },
    };
  },
  created() {
    this.getMetaData(10, 1, "", -1);
    this.getMetaCount("", -1);
    this.getRoleTabelData();
  },
  computed: {
    pathId() {
@@ -219,140 +291,141 @@
    },
  },
  methods: {
    // è¯·æ±‚数据内容
    getMetaData(size, num, name, pid) {
      queryMetaData(size, num, name, pid).then((res) => {
        this.tableData = res.data;
      });
    resetForm() {
      this.ruleForm = {};
      this.$store.state.verCateNode = {};
      this.$bus.$emit('clearTressLabel', true);
      this.getRoleTabelData();
    },
    // è¯·æ±‚数据数量
    getMetaCount(name, pid) {
      queryDataCount(name, pid).then((res) => {
        this.count = res.data;
      });
    onSubmit() {
      this.getRoleTabelData();
    },
    // å…³é”®å­—查询
    submitForm(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          this.searchName = this.ruleForm.name.trim();
          this.getMetaData(10, 1, this.searchName);
          this.getMetaCount(this.searchName);
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    async getRoleTabelData() {
      if (this.listData.tab == '') {
        delete this.listData.tab;
      }
      this.listData.name = this.ruleForm.name;
      this.listData.depName = this.$store.state.verCateNode.name;
      console.log(this.listData);
      const data = await select_Ver_ByPageAndCount(this.listData);
      console.log(data);
      if (data.code != 200) {
        this.$message.error('列表调用失败');
      }
      this.tableData = data.result;
      this.count = data.count;
    },
    // é‡ç½®æŸ¥è¯¢
    resetForm(formName) {
      this.getMetaData(10, 1, "", -1);
      this.getMetaCount("");
      this.searchName = "";
      this.$refs[formName].resetFields();
    handleSizeChange(val) {
      this.listData.pageSize = val;
      this.getRoleTabelData();
    },
    // èŽ·å–å¤šé€‰é€‰ä¸­çš„å¯¹è±¡
    handleSelectionChange(val) {
      this.multipleSelection = val;
      console.log(val);
    handleCurrentChange(val) {
      this.listData.pageIndex = val;
      this.getRoleTabelData();
    },
    // æŸ¥çœ‹ç•Œé¢
    showDetail(index, row) {
      // console.log(index, row);
      this.showinfoBox = true;
      this.itemdetail = row;
    showVerTree(res) {
      this.showCata = true;
      this.rowFlag = res;
    },
    // å…³é—­æŸ¥çœ‹
    closeDetial() {
      this.showinfoBox = false;
      this.itemdetail = {};
    selectCataName() {
      this.showCata = false;
      if (this.rowFlag == 3) {
        this.insertform.path = this.$store.state.verCateNodes.name;
        this.insertform.dirid = this.$store.state.verCateNodes.id;
      } else if (this.rowFlag == 2) {
        this.upform.depName = this.$store.state.verCateNodes.name;
        this.upform.dirid = this.$store.state.verCateNodes.id;
      }
    },
    // ä¿®æ”¹ç•Œé¢
    editFromDataClose() {
      this.dialogFormVisible = false;
      this.upform = {};
    },
    async editFromData() {
      if (this.upform.depName == null) {
        this.$message({
          message: '请选择角色所属单位',
          type: 'warning',
        });
        return;
      }
      const data = await updateVersion(this.upform);
      if (data.code == 200) {
        this.dialogFormVisible = false;
        this.upform = {};
        this.$message({
          message: '修改成功!',
          type: 'success',
        });
        this.getRoleTabelData();
      } else {
        this.$message({
          message: '修改失败!',
          type: 'warning',
        });
      }
    },
    insertFromDataClose() {
      this.InsertFormdialog = false;
      this.insertform = {};
    },
    async insertFromData() {
      if (this.insertform.dirid == null) {
        this.$message({
          message: '请选择角色所属单位',
          type: 'warning',
        });
        return;
      }
      const data = await insertVersion(this.insertform);
      if (data.code == 200) {
        this.InsertFormdialog = false;
        this.insertform = {};
        this.$message({
          message: '添加成功!',
          type: 'success',
        });
        this.getRoleTabelData();
      } else {
        this.$message({
          message: '添加失败!',
          type: 'warning',
        });
      }
    },
    formatTime(row, column) {
      let date = row[column.property];
      if (date === undefined || date === null) {
        return '';
      }
      return moment(parseInt(date)).format('YYYY-MM-DD HH:mm:ss');
    },
    async handleDelete(index, row) {
      const data = await deleteVersion(row.id);
      if (data.code == 200) {
        this.InsertFormdialog = false;
        this.$message({
          message: '删除成功!',
          type: 'success',
        });
        this.getRoleTabelData();
      } else {
        this.$message({
          message: '删除失败!',
          type: 'warning',
        });
      }
    },
    handleEdit(index, row) {
      this.dialogFormVisible = true;
      this.upform = JSON.parse(JSON.stringify(row));
    },
    // æäº¤ä¿®æ”¹
    updateForm() {
      this.$confirm("是否确定编辑?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.dialogFormVisible = false;
          updateMetaData(this.upform).then((res) => {
            if (res.data == 1) {
              this.$message({
                message: "修改成功",
                type: "success",
              });
            }
            this.getMetaData(10, 1);
          });
        })
        .catch(() => {});
    },
    // åˆ é™¤
    handleDelete(index, row) {
      // console.log(index, row);
      this.$confirm("确定是否删除?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          dltMetaDatas({ id: row.id }).then((res) => {
            if (res.data == 1) {
              this.$message({
                type: "success",
                message: "删除成功!",
              });
              this.getMetaData(10, 1, "");
              this.getMetaCount("");
            }
          });
          // å¤šé€‰åˆ é™¤
          // if (this.multipleSelection.length > 1) {
          //   let ids = "";
          //   this.multipleSelection.forEach((e) => {
          //     ids += `id=${e.id}&`;
          //   });
          //   let res = ids.substring(0, ids.length - 1);
          //   dltMetaDatas(res).then((res) => {
          //     console.log(res);
          //   });
          // }
        })
        .catch(() => {});
    },
    // æ¡æ•°ä¿®æ”¹
    handleSizeChange(val) {
      this.pageSize = val;
      this.getMetaData(this.pageSize, 1, this.searchName, this.nowPid);
      this.getMetaCount(this.searchName, this.nowPid);
    },
    // é¡µæ•°ä¿®æ”¹
    handleCurrentChange(val) {
      this.pageNum = val;
      this.getMetaData(
        this.pageSize,
        this.pageNum,
        this.searchName,
        this.nowPid
      );
      this.getMetaCount(this.searchName, this.nowPid);
      this.upform = row;
    },
  },
  watch: {
    pathId: {
      immediate: true,
      handler(val) {
        if (val) this.nowPid = val;
        this.getMetaData(10, 1, "", this.nowPid);
        this.getMetaCount("", this.nowPid);
      },
      handler(val) {},
    },
  },
};
@@ -365,6 +438,31 @@
  height: 100%;
  padding: 10px;
  box-sizing: border-box;
  .el-input {
    width: 300px !important;
  }
  .leftTrees {
    position: absolute;
    z-index: 9999;
    top: 9%;
    left: 37%;
    width: 400px;
    height: 600px;
    background: #f0f2f5;
    border: 1px solid #000;
    .treeBox {
      height: 550px;
      overflow: auto;
      /deep/ .el-tree-node__content:hover {
        background-color: rgb(153, 153, 153);
      }
    }
    .btnBox {
      width: 123px;
      margin: 10px auto 0;
      // background-color: red;
    }
  }
  .searchComp {
    margin: 10px auto;
    background: #fff;
@@ -372,9 +470,6 @@
    border: 1px solid rgb(202, 201, 204);
    .el-form-item {
      margin: 5px;
    }
    .el-input {
      width: 467px;
    }
  }
  .bottom {
@@ -397,43 +492,43 @@
        margin: 0 auto;
        overflow: auto;
        background: #fff;
        .el-table {
          height: 100%;
        }
        .el-table /deep/ .el-table__header-wrapper tr th {
          background-color: rgb(255, 255, 255) !important;
          color: rgb(0, 0, 0);
        }
        // ä¿®æ”¹æ¯è¡Œæ ·å¼ï¼š
        .el-table /deep/ .el-table__row {
          background-color: rgba(255, 255, 255) !important;
          color: rgb(0, 0, 0);
        }
        .el-table /deep/ .el-table__body tr.current-row > td {
          background-color: rgb(211, 211, 211) !important;
        }
        .el-table /deep/ .el-table__body tr:hover > td {
          background-color: rgb(211, 211, 211) !important;
        }
        // ä¿®æ”¹è¡¨æ ¼æ¯è¡Œè¾¹æ¡†çš„æ ·å¼ï¼š
        .el-table /deep/ td,
        .el-table /deep/ th.is-leaf {
          border-bottom: 1px solid #eee;
          border-right: 1px solid #eee;
        }
        .el-table /deep/ .el-table__cell {
          padding: 0;
        }
        // .el-table {
        //   height: 100%;
        // }
        // .el-table /deep/ .el-table__header-wrapper tr th {
        //   background-color: rgb(255, 255, 255) !important;
        //   color: rgb(0, 0, 0);
        // }
        // // ä¿®æ”¹æ¯è¡Œæ ·å¼ï¼š
        // .el-table /deep/ .el-table__row {
        //   background-color: rgba(255, 255, 255) !important;
        //   color: rgb(0, 0, 0);
        // }
        // .el-table /deep/ .el-table__body tr.current-row > td {
        //   background-color: rgb(211, 211, 211) !important;
        // }
        // .el-table /deep/ .el-table__body tr:hover > td {
        //   background-color: rgb(211, 211, 211) !important;
        // }
        // // ä¿®æ”¹è¡¨æ ¼æ¯è¡Œè¾¹æ¡†çš„æ ·å¼ï¼š
        // .el-table /deep/ td,
        // .el-table /deep/ th.is-leaf {
        //   border-bottom: 1px solid #eee;
        //   border-right: 1px solid #eee;
        // }
        // .el-table /deep/ .el-table__cell {
        //   padding: 0;
        // }
        // è®¾ç½®è¡¨æ ¼æ¯è¡Œçš„高度:
        .el-table /deep/ .el-table__header tr,
        .el-table /deep/ .el-table__header th {
          height: 40px;
        }
        .el-table__body tr,
        .el-table__body td {
          height: 40px;
          padding: 0;
        }
        // .el-table /deep/ .el-table__header tr,
        // .el-table /deep/ .el-table__header th {
        //   height: 40px;
        // }
        // .el-table__body tr,
        // .el-table__body td {
        //   height: 40px;
        //   padding: 0;
        // }
        // è®¾ç½®è¡¨æ ¼è¾¹æ¡†é¢œè‰²ï¼š
        .el-table--border::after,
@@ -474,7 +569,7 @@
    }
  }
  /deep/ .el-dialog {
    width: 500px !important;
    width: 620px !important;
    margin-top: 10vh !important;
  }
@@ -486,7 +581,7 @@
  }
  /deep/ .el-dialog__footer {
    padding-top: 0 !important;
    width: 200px;
    width: 600px;
    display: flex;
    margin: 0 auto;
    justify-content: center;
src/views/userManage/roleDepTree.vue
@@ -104,7 +104,6 @@
            oid: data.children ? data.children.length + 1 : 1,
          };
          this.id = newChild.id; //修改新的最大I
          console.log(newChild);
          if (!data.children) {
            this.$set(data, 'children', []);
src/views/userManage/roleManage.vue
@@ -294,10 +294,12 @@
  },
  methods: {
    formatTime(row, column) {
      let date = row[column.property]; // æˆ‘这里的crtime=1657528899所以这里*1000
      let date = row[column.property];
      if (date === undefined || date === null) {
        return '';
      }
      return moment(parseInt(date)).format('YYYY-MM-DD HH:mm:ss');
    },
    showDepTree(res) {
@@ -339,7 +341,6 @@
      this.listData.name = this.roleForm.username;
      this.listData.depName = this.roleForm.value;
      const data = await select_Role_ByPageAndCount(this.listData);
      console.log(data.result);
      if (data.code != 200) {
        this.$message.error('列表调用失败');
      }
@@ -438,7 +439,6 @@
      this.getRoleTabelData();
    },
    handleCurrentChange(val) {
      console.log(`当前页: ${val}`);
      this.listData.pageIndex = val;
      this.getRoleTabelData();
    },
@@ -449,7 +449,6 @@
      this.UpdateFormdialog = true;
    },
    onSubmit() {
      console.log(this.roleForm);
      this.getRoleTabelData();
    },
    resetForm(formName) {