New file |
| | |
| | | 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) |
| | | }); |
| | | } |
| | | } |
| | |
| | | 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 |
| | | } |
| | |
| | | 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; |
| | | } |
| | |
| | | },*/ |
| | | { |
| | | 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: '系统日志', |
| | |
| | | <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> |
| | |
| | | level: { |
| | | type: Number |
| | | } |
| | | // 是否显示状态 |
| | | ,showState: { |
| | | type: Boolean |
| | | ,default: true |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | // tree: {}, |
| | | } |
| | | }, |
| | | // created () { |
| | | // debugger; |
| | | // }, |
| | | // mounted () { |
| | | // debugger; |
| | | // }, |
| | | methods: { |
| | | treeClick: function($e) { |
| | | // console.log(this.treeData); |
| | |
| | | }, |
| | | 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', |
| | |
| | | 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', |
| | |
| | | }, |
| | | component: (resolve)=>require(['@/views/user/syslog.vue'], resolve) |
| | | } |
| | | // 文件管理 导出 |
| | | ,{ |
| | | path: '/files' |
| | | ,name: 'files' |
| | | ,meta: { |
| | | crumb: '文件管理' |
| | | } |
| | | ,component: (resolve) => require(['@/views/files/index.vue'], resolve) |
| | | } |
| | | |
| | | ] |
| | | } |
New file |
| | |
| | | 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; |
New file |
| | |
| | | <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> |
| | |
| | | <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: '' |
| | |
| | | }, |
| | | // 用户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(); |
| | |
| | | right: 1px; |
| | | top: 1px; |
| | | bottom: 1px; |
| | | |
| | | display: -webkit-flex; |
| | | display: flex; |
| | | align-items: center; |
| | | padding-left: 60px; |
| | | } |
| | | .el-tabs { |
| | | height: 100%; |