whychw
2021-03-24 e97b53513f586fb5bfb1b1fc55176eda4a07df93
U 新增文件管理 权限
6个文件已修改
3个文件已添加
931 ■■■■ 已修改文件
src/api/services/files/index.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/services/index.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/custom.css 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/PageNav.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/tree/TreeItem.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/routes.js 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/script/config_devlist.js 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/files/index.vue 432 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/user/power.vue 230 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/services/files/index.js
New file
@@ -0,0 +1,16 @@
import Vue from 'vue'
const self = new Vue()
export default {
  /**
   * 查询所有设备的可下载文件列表
   * json:{num:"1",dev_id:1001}
   */
  getFileList (data) {
    return self.$axios({
      method: 'post'
      ,url: 'Device_connectstateAction_e2kw_serchByCondition'
      ,data: 'json=' + JSON.stringify(data)
    });
  }
}
src/api/services/index.js
@@ -7,15 +7,17 @@
import water from './water'
import batt from './batt'
import subject from './subject'
import files from './files'
export default {
    common,
    user,
    load,
    motor,
    electric,
    chargepower,
    water,
    batt,
    subject
  common
  ,user
  ,load
  ,motor
  ,electric
  ,chargepower
  ,water
  ,batt
  ,subject
  ,files
}
src/assets/css/custom.css
@@ -656,4 +656,9 @@
    line-height: normal;
    padding-top: 0.06rem;
    padding-bottom: 0.06rem;
}
.no-border .el-table__fixed-right::before,
.no-border .el-table__fixed::before {
    content: none;
}
src/components/PageNav.vue
@@ -128,9 +128,27 @@
                },*/
                {
                    txt: '用户管理',
                    name: 'UserInfo',
                    router: '/user/info',
                    name: 'user',
                    router: '',
                    key: 'user'
                    ,childrens: [
                        {
                            txt: '用户信息',
                            name: 'UserInfo',
                            router: '/user/info',
                        }
                        ,{
                            txt: '权限管理',
                            name: 'UserPower',
                            router: '/user/power',
                        }
                    ]
                }
                ,{
                    txt: '文件管理',
                    name: 'files',
                    router: '/files',
                    key: 'files'
                }
                ,{
                    txt: '系统日志',
src/components/tree/TreeItem.vue
@@ -4,13 +4,14 @@
            <span class="box">
                <span v-if="getChildren" :class="getOpen"></span>
            </span>
            <span class="home-state icon-status" :class="getHomeState"></span>
            <span v-if="showState" class="home-state icon-status" :class="getHomeState"></span>
            <span class="tree-title-txt">{{treeData.txt}}</span>
        </div>
        <div class="tree-child" v-if="getChildren" :class="isShow">
            <tree-item
            v-for="(data, key) in treeData.children" :key="key"
            :tree-data='data'
            :show-state="showState"
            :level='getLevel'
            @tree-click="childTreeClick"></tree-item>
        </div>
@@ -31,12 +32,23 @@
        level: {
            type: Number
        }
        // 是否显示状态
        ,showState: {
            type: Boolean
            ,default: true
        }
    },
    data() {
        return {
            // tree: {},
        }
    },
    // created () {
    //     debugger;
    // },
    // mounted () {
    //     debugger;
    // },
    methods: {
        treeClick: function($e) {
            // console.log(this.treeData);
src/router/routes.js
@@ -43,14 +43,14 @@
        },
        component: (resolve)=>require(['@/views/main.vue'], resolve),
        children: [
            /*{
            {
                path: '/user/power',
                name: 'UserPower',
                meta: {
                    crumb: '用户管理 > 用户权限'
                },
                component: (resolve)=>require(['@/views/user/power.vue'], resolve)
            },*/
            },
            {
                path: '/user/info',
                name: 'UserInfo',
@@ -315,22 +315,22 @@
                component: (resolve)=>require(['@/views/chargePower/main.vue'], resolve)
            }
            // 参试设备
            /*,{
                path: '/subject/realtime',
                name: 'subject_realtime',
                meta: {
                    crumb: '参试设备/实时'
                },
                component: (resolve)=>require(['@/views/subject/realtime.vue'], resolve)
            }
            ,{
                path: '/subject/history',
                name: 'subject_history',
                meta: {
                    crumb: '参试设备/历史'
                },
                component: (resolve)=>require(['@/views/subject/history.vue'], resolve)
            }*/
            // ,{
            //     path: '/subject/realtime',
            //     name: 'subject_realtime',
            //     meta: {
            //         crumb: '参试设备/实时'
            //     },
            //     component: (resolve)=>require(['@/views/subject/realtime.vue'], resolve)
            // }
            // ,{
            //     path: '/subject/history',
            //     name: 'subject_history',
            //     meta: {
            //         crumb: '参试设备/历史'
            //     },
            //     component: (resolve)=>require(['@/views/subject/history.vue'], resolve)
            // }
            // 系统日志
            ,{
                path: '/syslog',
@@ -340,6 +340,15 @@
                },
                component: (resolve)=>require(['@/views/user/syslog.vue'], resolve)
            }
            // 文件管理 导出
            ,{
                path: '/files'
                ,name: 'files'
                ,meta: {
                    crumb: '文件管理'
                }
                ,component: (resolve) => require(['@/views/files/index.vue'], resolve)
            }
        ]
    }
src/script/config_devlist.js
New file
@@ -0,0 +1,147 @@
const devList = [
  {
    dev_id: 1001
    ,children: []
    ,txt: "1号水冷交流电阻负载"
    ,dev_type: 1
    ,note: "水冷交流电阻负载"
    ,num: 1
  }
  ,{
    dev_id: 1002
    ,children: []
    ,txt: "2号水冷交流电阻负载"
    ,dev_type: 1
    ,note: "水冷交流电阻负载"
    ,num: 2
  }
  ,{
    dev_id: 1003
    ,children: []
    ,txt: "3号水冷交流电阻负载"
    ,dev_type: 1
    ,note: "水冷交流电阻负载"
    ,num: 3
  }
  ,{
    dev_id: 1004
    ,children: []
    ,txt: "4号水冷交流电阻负载"
    ,dev_type: 1
    ,note: "水冷交流电阻负载"
    ,num: 4
  }
  ,{
    dev_id: 2001
    ,children: []
    ,txt: "电机加载试验系统"
    ,dev_type: 2
    ,note: "电机加载试验系统"
    ,num: 5
  }
  ,{
    dev_id: 4001
    ,children: []
    ,txt: "1号大功率整流电源A套电源"
    ,dev_type: 4
    ,note: "1号、2号大功率整流电源"
    ,num: 6
  }
  ,{
    dev_id: 4002
    ,children: []
    ,txt: "1号大功率整流电源B套电源"
    ,dev_type: 4
    ,note: "1号、2号大功率整流电源"
    ,num: 7
  }
  ,{
    dev_id: 4003
    ,children: []
    ,txt: "2号大功率整流电源C套电源"
    ,dev_type: 4
    ,note: "1号、2号大功率整流电源"
    ,num: 8
  }
  ,{
    dev_id: 4004
    ,children: []
    ,txt: "2号大功率整流电源D套电源"
    ,dev_type: 4
    ,note: "1号、2号大功率整流电源"
    ,num: 9
  }
  ,{
    dev_id: 5001
    ,children: []
    ,txt: "2号水冷装置"
    ,dev_type: 5
    ,note: "水冷装置"
    ,num: 10
  }
  ,{
    dev_id: 5002
    ,children: []
    ,txt: "3号水冷装置"
    ,dev_type: 5
    ,note: "水冷装置"
    ,num: 11
  }
  ,{
    dev_id: 5003
    ,children: []
    ,txt: "1号水冷装置"
    ,dev_type: 5
    ,note: "水冷装置"
    ,num: 12
  }
  ,{
    dev_id: 6001
    ,children: []
    ,txt: "3号大功率整流电源A套电源"
    ,dev_type: 6
    ,note: "3号大功率整流电源"
    ,num: 13
  }
  ,{
    dev_id: 6002
    ,children: []
    ,txt: "3号大功率整流电源B套电源"
    ,dev_type: 6
    ,note: "3号大功率整流电源"
    ,num: 14
  }
  ,{
    dev_id: 1000004
    ,children: []
    ,txt: "1号蓄电池组"
    ,dev_type: 8
    ,note: "蓄电池组"
    ,num: 15
  }
  ,{
    dev_id: 1000005
    ,children: []
    ,txt: "2号蓄电池组"
    ,dev_type: 8
    ,note: "蓄电池组"
    ,num: 16
  }
  ,{
    dev_id: 1000006
    ,children: []
    ,txt: "3号蓄电池组"
    ,dev_type: 8
    ,note: "蓄电池组"
    ,num: 17
  }
  ,{
    dev_id: 1000007
    ,children: []
    ,txt: "4号蓄电池组"
    ,dev_type: 8
    ,note: "蓄电池组"
    ,num: 18
  }
];
export default devList;
src/views/files/index.vue
New file
@@ -0,0 +1,432 @@
<template>
  <div class="main">
    <!-- list -->
    <div class="list">
      <div class="list-title">
        <div class="">设备列表</div>
      </div>
      <div class="list-filter">
        <el-form size="mini" class="el-normal el-form-quiet" :inline="true" label-width="4em">
          <el-form-item label="搜索">
            <el-input v-model="list_keyword" required placeholder="输入关键字过滤" @input="search"></el-input>
          </el-form-item>
        </el-form>
      </div>
      <div class="list-content posR">
        <div class="posA_full">
          <div class="inner">
              <!-- :props="defaultProps" -->
              <tree-item
                v-for="(data, key) in list" :key="key"
                :tree-data="data"
                :show-state="false"
                :level=0
                @leaf-click="selectDev"></tree-item>
            <!-- 无数据 -->
            <div v-if="!list.length" class="empty-list">暂无数据</div>
          </div>
        </div>
      </div>
    </div>
    <div class="pages-content border-angle">
        <div class="item-inner table-contain">
            <el-table
              class="no-border"
              height="100%"
              :data="tableData">
              <el-table-column
                type="index"
                label="编号"
                align="center"
                width="80">
                </el-table-column>
                <el-table-column
                prop="table_name"
                label="名称"
                align="center">
                </el-table-column>
                <el-table-column
                prop="table_date"
                label="存储日期"
                align="center">
                </el-table-column>
                <el-table-column
                fixed="right"
                label="操作"
                align="center"
                width="160">
                    <template slot-scope="scope">
                        <el-button type="primary" size="mini"
                        @click="exportCSV(scope.row)">下载</el-button>
                    </template>
                </el-table-column>
            </el-table>
        </div>
    </div>
    <loading :show="showLoading"></loading>
    <progress-load
      :show="progress.show"
      :percentage="progress.value"
      :text="progress.text"></progress-load>
    <!-- ROOTEND -->
  </div>
</template>
<script>
  import TreeItem from '@/components/tree/TreeItem';
  import Loading from '@/components/Loading'
  import ProgressLoad from '@/components/ProgressLoad'
  import common from '@/script/common';
  import devList from '@/script/config_devlist'
  export default {
    name: 'files',
    components: {
      TreeItem
      ,Loading
      ,ProgressLoad
    },
    data () {
      const vm = this;
      return {
        progress: {
          show: false,
          value: 0,
          text: '',
        }
        ,list: []
        ,list_keyword: ''
        ,cur_devname: ''
        ,cur_devid: 0
        ,cur_devtype: 0
        ,data_list: devList
        ,keyword: ''
        ,showLoading: false
        ,tableData: []
      }
    },
    computed: {
    },
    methods: {
      search () {
        let key = this.list_keyword;
        let res = [];
        let obj = {};
        let reg = new RegExp(key, ['i']);
        let list = this.data_list.filter((v) => {
          if (reg.test(v.txt)) {
            return v;
          }
        });
        list.forEach((v) => {
          obj[v.dev_type] = obj[v.dev_type] || [];
          v.active = v.dev_id == this.cur_devid;
          obj[v.dev_type].push(v);
        });
        Object.keys(obj).forEach((v) => {
          // let status = false;
          let active = false;
          for (let i = 0, j = obj[v].length; i < j; i++) {
            if (obj[v][i].active) {
              active = true;
            }
            // if (obj[v][i].connection_state) {
            //   status = true;
            // }
          }
          res.push({
            // state: status ? 'normal' : 'off',
            open: false,
            txt: obj[v][0].note,
            active: active,
            dev_type: obj[v][0].dev_type,
            children: obj[v]
          });
        });
        this.list = res;
      }
      // 选择设备
      ,selectDev (data) {
        console.log(data, 'selectdev');
        this.cur_devid = data.dev_id;
        this.cur_devname = data.txt;
        this.cur_devtype = data.dev_type;
        let param = {
          num: data.dev_type
          ,dev_id: data.dev_id
        };
        this.$api.files.getFileList(param).then((res) => {
          res = JSON.parse(res.data.result);
          console.log(res, 'files');
          let list = [];
          if (res.code == 1) {
              list = res.data;
          }
          list.forEach((v) => {
              v['table_date'] = v.table_name;
              v['table_name'] = this.cur_devname + v.table_name.replace(/-/g, '_') + '.csv';
              // v['size'] = (v.data_length / 1024 / 1024).toFixed(2) * 1 + 'M'
          });
          this.tableData = list;
        }).catch((err) => {
          console.log(err);
        });
        // 校验有没有数据 没有则提醒
        // this.getHisData();
      }
      // 点击导出
      ,exportCSV (obj) {
        let param = {
          dev_name: this.cur_devname
          ,dev_id: obj.dev_id
          ,export_num: this.cur_devtype
          ,table_name: obj.table_date.replace(/-/g, '_')
          ,record_time: obj.table_date + ' 00:00:00'
        };
        console.log(param, 'param');
        // 显示进度条
        this.progress.show = true;
        // 请求后台
        this.$api.common.clearProgress().then(() => {
          this.getProgress();
          this.$api.common.download(param).then((res) => {
            res = JSON.parse(res.data.result);
            // console.log(res, 'download res');
            if(res.code == 1) {
              // 关闭进度条
              this.progress.show = false;
              this.progress.value = 0;
              let data = res.data[0];
              const link = document.createElement("a");
              link.href = encodeURI(this.$config.url + 'tomcat7_csv/' + data.fileName);
              link.download = data.fileName;
              document.body.appendChild(link);
              link.click();
              document.body.removeChild(link);
              setTimeout(()=>{
                // 关闭进度条
                this.progress.show = false;
                this.progress.value = 0;
              }, 1000);
            }else {
              // 关闭进度条
              this.progress.show = false;
              this.progress.value = 0;
              this.$layer.msg('生成文件失败!');
            }
          }).catch(error=>{
            // 关闭进度条
            this.progress.show = false;
            this.progress.value = 0;
            this.$layer.msg('生成文件失败!');
            console.warn(error);
          });
        });
      }
      ,getProgress () {
        this.$api.common.getProgress().then((res) => {
          res = JSON.parse(res.data.result);
          let percentage = !res.data[0] ? 0 : Number(res.data[0].toFixed(0));
          this.progress.value = percentage;
          // console.log(res);
          if(percentage == 0) {
            this.progress.text="数据加载中...";
          }else {
            this.progress.text="文件下载中...";
          }
          if(res.data<100 && this.progress.show) {
            setTimeout(this.getProgress, 50);
          }else {
            this.progress.value = 100;
          }
        });
      }
    },
    mounted () {
      this.search();
      console.log(this.list, 'list');
    },
    destroyed () {
    }
  }
</script>
<style scoped>
.main {
  display: -webkit-flex;
  display: flex;
  height: 100%;
}
.btn {
  display: inline-block;
  background: #00f7f9;
  color: #041b3f;
  width: 8em;
  height: 30px;
  line-height: 30px;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  text-align: center;
}
.btn.disabled {
  background: #ccc;
}
.list {
  display: -webkit-flex;
  display: flex;
  flex-direction: column;
  width: 24em;
  margin-right: .4em;
}
.list-title {
  background: #24a3bf;
  padding: 10px 0;
  text-align: center;
}
.list-content {
  flex: 1;
  background: #00324b;
}
.inner {
  height: 100%;
  padding: .6em 0 .6em .6em;
  overflow-y: auto;
}
.list-item {
  margin: .2em 0;
  color: #999;
}
.list-item .name {
  font-style: italic;
}
.list-item.isRun {
  color: #fff;
  cursor: pointer;
}
.list-item.disabled {
  cursor: not-allowed;
}
.list-item.active {
  background: rgba(200, 200, 200, .4);
}
.list-item.isRun .name {
  font-style: normal;
}
.list-item:hover {
  background: rgba(200, 200, 200, .2);
}
.page-content {
  flex: 1;
  background: rgba(0,0,0,.2);
  display: -webkit-flex;
  display: flex;
  flex-direction: column;
}
.wraper {
  flex: 1;
  overflow: hidden;
}
.page-banner {
  padding: 6px;
}
.page-banner .btn {
  width: 5em;
  margin-left: 1em;
}
.content-title {
  font-size: 22px;
}
.container {
  width: 200%;
  height: 100%;
  display: -webkit-flex;
  display: flex;
  -webkit-transition: -webkit-transform 0.4s;
  transition: transform 0.4s;
  background: #041a3f;
}
.showTable {
  -webkit-transform: translateX(-50%);
  transform: translateX(-50%);
}
.wrap-graph,
.wrap-table {
  flex: 1;
  margin: 0 4px 4px;
  background: radial-gradient(farthest-corner, rgba(0, 247, 249, .06) 8%, rgba(0, 247, 249, .2) 160%);
}
.wrap-graph {
  /*background: rgba(0,0,0,.2);*/
}
.empty-list {
  text-align: center;
  -webkit-transform: translate(-.3em, 1em);
  transform: translate(-.3em, 1em);
}
.btns-grp {
  display: -webkit-flex;
  display: flex;
}
>>> .drawer-options {
  background: #005074;
}
.drawer-content {
  height: 100%;
  display: -webkit-flex;
  display: flex;
  flex-direction: column;
  padding: 10px;
}
.list-filter {
  background: #00324b;
  padding: 4px 0;
}
>>> .el-date-editor.el-input {
    width: 150px;
}
.el-form-search >>> .el-input--suffix .el-input__inner {
    padding-right: 0;
}
.item-inner {
  position: absolute;
  left: .16rem;
  right: .16rem;
  top: .16rem;
  bottom: .16rem;
  border: 1px #00f7f9 solid;
}
.pages-content {
    flex: 1;
    background: radial-gradient(circle farthest-corner, rgba(0, 247, 249, .06) 46%, rgba(0, 247, 249, .2) 96%);
}
.pages-footer {
    padding-top: 0.08rem;
    padding-bottom: 0.08rem;
}
.user-info-content {
    box-sizing: border-box;
    padding: 0.08rem;
}
.dialog-footer {
    box-sizing: border-box;
    padding: 0.08rem;
    text-align: right;
}
.table-contain >>> tbody tr:nth-child(2n-1) {
  background: rgba(0, 247, 249, .1);
}
.table-contain >>> thead {
  font-size: .2rem;
  color: #00f7f9;
}
.table-contain >>> thead,
.table-contain >>> tbody tr:nth-child(2n) {
  background: rgba(0, 247, 249, .3);
}
</style>
src/views/user/power.vue
@@ -1,189 +1,32 @@
<template>
  <div class="flex_contain">
    <my-card title="权限组列表">
      <div slot="card-tools" class="clearfix">
          <el-button class="card-tools" size="mini" type="danger"
          icon="el-icon-delete" circle
          :disabled="getToolsState"
          @click="delRoleGroup"
          ></el-button>
          <el-button class="card-tools" size="mini" type="primary"
          icon="el-icon-edit" circle
          :disabled="getToolsState"
          @click="editRoleGroup.show = true"
          ></el-button>
          <el-button class="card-tools" size="mini" type="primary"
          icon="el-icon-plus" circle
          @click="addRoleGroup.show = true"
          ></el-button>
      </div>
      <my-list
        v-cloak
        ref="groupList"
        :list="roleList"
        @handle-click="groupListClick">
      </my-list>
    </my-card>
    <div class="main border-angle posR">
      <div class="item-inner">
        <el-tabs v-model="activeName" type="border-card">
          <el-tab-pane label="用户" name="user">
            <span slot="label"><i class="el-icon-user-solid"></i> 用户</span>
            <el-transfer
              class="el-transfer-w320 el-transfer-h700"
              v-model="user.value"
              :titles="['未添加用户', '已添加用户']"
              :button-texts="['移除', '添加']"
              :data="user.data"
              :filterable="true"
              :render-content="renderFn"
              @change="UserChange"
              >
            </el-transfer>
          </el-tab-pane>
          <el-tab-pane label="权限" name="authority">
            <span slot="label"><i class="el-icon-tickets"></i> 权限</span>
            <tree-transfer
            class="tree_transfer"
            :title="authority.title"
            :from_data='authority.data'
            :button_text="['添加', '移除']"
            :to_data='authority.value'
            height="auto"
            :defaultProps="{label:'label'}"
            @addBtn='selectPermit'
            @removeBtn='unselectPermit'
            :mode='treeTransferMode'
            filter
            openAll
            >
            </tree-transfer>
          </el-tab-pane>
          <!-- 只有superuser才显示 -->
          <el-tab-pane v-if="!0" label="新增权限" name="addPermit">
            <span slot="label"><i class="el-icon-tickets"></i> 新增权限</span>
            <el-tree
              :data="rootData"
              node-key="id"
              default-expand-all
              :expand-on-click-node="false">
              <span class="custom-tree-node" slot-scope="{ node, data }">
                <span>{{ node.label }}</span>
                <span class="btn_grp">
                  <el-button
                    type="primary"
                    size="mini"
                    icon="el-icon-circle-plus" circle
                    v-if="!data.permit_id"
                    @click="append(data)">
                  </el-button>
                  <el-button
                    type="danger" icon="el-icon-delete" circle
                    size="mini"
                    v-if="data.label != 'root'"
                    @click="remove(node, data)">
                  </el-button>
                </span>
              </span>
            </el-tree>
          </el-tab-pane>
        </el-tabs>
        <el-transfer
          class="el-transfer-w320 el-transfer-h700"
          v-model="user.value"
          :titles="['无权限用户', '有权限用户']"
          :button-texts="['移除', '添加']"
          :data="user.data"
          :filterable="true"
          :render-content="renderFn"
          @change="UserChange"
          >
        </el-transfer>
      </div>
      <!-- 遮罩 -->
      <div v-show="getToolsState" class="fg_mask cursor_not_allowed"></div>
    </div>
    <!-- 添加权限组 -->
    <el-dialog
    v-cloak
    top="calc(50vh - 100px)"
    title='添加权限组'
    :visible.sync="addRoleGroup.show"
    width="400px">
        <el-form size="small">
            <el-form-item label="权限组名称">
                <el-input
                v-model.trim="addRoleGroup.value"
                placeholder="请输入内容"
                :clearable="true"></el-input>
            </el-form-item>
        </el-form>
        <div style="text-align: right;">
            <el-button
            type="primary"
            size="mini"
            @click="addRoleGroupOK">确定</el-button>
            <el-button
            size="mini"
            @click="addRoleGroup.show = false">取消</el-button>
        </div>
    </el-dialog>
    <!-- 编辑权限组 -->
    <el-dialog
    v-cloak
    top="calc(50vh - 100px)"
    title='编辑权限组'
    :visible.sync="editRoleGroup.show"
    width="400px">
        <el-form size="small">
            <el-form-item label="权限组名称">
                <el-input
                v-model.trim="editRoleGroup.value"
                placeholder="请输入内容"
                :clearable="true"></el-input>
            </el-form-item>
        </el-form>
        <div style="text-align: right;">
            <el-button
            type="primary"
            size="mini"
            @click="editRoleGroupOk">确定</el-button>
            <el-button
            size="mini"
            @click="editRoleGroup.show = false">取消</el-button>
        </div>
    </el-dialog>
    <!-- 新增权限时的弹出框 -->
    <el-dialog title="添加权限" :visible.sync="addPermitForm.show">
      <el-form>
        <el-form-item label="权限名称" :label-width="formLabelWidth">
          <el-input v-model="addPermitForm.value" autocomplete="off" placeholder="请输入权限名称"></el-input>
        </el-form-item>
        <el-form-item label="权限路径标识" :label-width="formLabelWidth">
          <el-input v-model="addPermitForm.path" clearable :disabled="addPermitForm.pathDisabled" autocomplete="off" placeholder="路径为英文 下划线分隔"></el-input>
        </el-form-item>
        <el-form-item label="" :label-width="formLabelWidth">
          <el-checkbox v-model="addPermitForm.permitNode" @change='permitNodeChange'>可以添加子项</el-checkbox>
        </el-form-item>
        <el-form-item label="" :label-width="formLabelWidth">
          <el-checkbox v-model="addPermitForm.necessary" :disabled="addPermitForm.realPermit">必要权限</el-checkbox>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="addPermitForm.show = false">取 消</el-button>
        <el-button type="primary" @click="addPermitOK">确 定</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import MyList from '@/components/MyList'
import MyCard from '@/components/MyCard'
import treeTransfer from 'el-tree-transfer'
// import Permits from '@/script/permits.js'
export default {
    name: 'UserPower',
    components: {
      MyList,
      MyCard,
      treeTransfer
    },
    data () {
      return {
        treeId: 1000,
        roleList: [],
        activeName: 'user',
        searchParams: {
          group_id: '',
          group_name: ''
@@ -194,47 +37,15 @@
        },
        // 用户id和用记名的映射
        userQuery: {},
        addRoleGroup: {
          show: false,
          value: ''
        },
        editRoleGroup: {
          show: false,
          value: ''
        },
        rootData: [{
          id: -1,
          canAppend: true,
          label: 'root',
          children: []
        }],
        formLabelWidth: '140px',
        addPermitForm: {
          show: false,
          curData: {},
          permitNode: false,
          necessary: false,
          pathDisabled: false,
          path: '',
          value: ''
        },
        // 全部权限一维数组
        AllPermits: [],
        // 已分配权限一维数组
        Permits: [],
        // 权限 树形穿梭框
        treeTransferMode: "transfer",
        authority: {
          title: ['未分配权限', '已分配权限'],
          data: [],
          value: []
        }
        // authority: {
        //   title: ['未分配权限', '已分配权限'],
        //   data: [],
        //   value: []
        // }
      }
    },
    computed: {
      getToolsState: function() { // 根据选中的状态确定包机组列表工具栏的状态
        return this.searchParams.group_id == "";
      },
    },
    mounted () {
      this.findRole();
@@ -811,6 +622,11 @@
  right: 1px;
  top: 1px;
  bottom: 1px;
  display: -webkit-flex;
  display: flex;
  align-items: center;
  padding-left: 60px;
}
.el-tabs {
  height: 100%;