正在显示
23 个修改的文件
包含
669 行增加
和
280 行删除
| @@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
| 3 | 3 | ||
| 4 | <head> | 4 | <head> |
| 5 | <meta charset="utf-8"> | 5 | <meta charset="utf-8"> |
| 6 | - <title>流浪地球项目</title> | 6 | + <title>易通快速通关申报管理系统</title> |
| 7 | <link rel="shortcut icon" type="image/x-icon" href="favicon.ico"> | 7 | <link rel="shortcut icon" type="image/x-icon" href="favicon.ico"> |
| 8 | </head> | 8 | </head> |
| 9 | 9 |
| @@ -7,7 +7,7 @@ Vue.prototype.$http = axios; | @@ -7,7 +7,7 @@ Vue.prototype.$http = axios; | ||
| 7 | 7 | ||
| 8 | export const getuserMenus = params => { return axios.get(`/perm/userMenus`, { params: params }); }; | 8 | export const getuserMenus = params => { return axios.get(`/perm/userMenus`, { params: params }); }; |
| 9 | 9 | ||
| 10 | -export const getUserList = params => { return axios.get(`/hqpt-user-center/user/list`, { params: params }); }; | 10 | +export const getUserList = params => { return axios.get(`/cloud-user-center/user/list`, { params: params }); }; |
| 11 | 11 | ||
| 12 | export const getUserListPage = params => { return axios({ | 12 | export const getUserListPage = params => { return axios({ |
| 13 | method: 'GET', | 13 | method: 'GET', |
| 1 | import axios from 'axios' | 1 | import axios from 'axios' |
| 2 | 2 | ||
| 3 | -let base = '/hqpt-user-center/company'; | 3 | +let base = '/cloud-user-center/company'; |
| 4 | 4 | ||
| 5 | 5 | ||
| 6 | export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; | 6 | export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; |
| 1 | import axios from 'axios' | 1 | import axios from 'axios' |
| 2 | 2 | ||
| 3 | -let base = '/hqpt-user-center/department'; | 3 | +let base = '/cloud-user-center/department'; |
| 4 | 4 | ||
| 5 | 5 | ||
| 6 | export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; | 6 | export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; |
| 1 | import axios from 'axios' | 1 | import axios from 'axios' |
| 2 | 2 | ||
| 3 | -let base = '/hqpt-user-center/group'; | 3 | +let base = '/cloud-user-center/group'; |
| 4 | 4 | ||
| 5 | 5 | ||
| 6 | export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; | 6 | export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; |
| @@ -46,7 +46,7 @@ export default { | @@ -46,7 +46,7 @@ export default { | ||
| 46 | login: data =>{ | 46 | login: data =>{ |
| 47 | return axios({ | 47 | return axios({ |
| 48 | method: 'POST', // 请求协议 | 48 | method: 'POST', // 请求协议 |
| 49 | - url: 'hqpt-user-center/login', // 请求的地址 | 49 | + url: 'cloud-user-center/login', // 请求的地址 |
| 50 | data: qs.stringify(data), // post 请求的数据 | 50 | data: qs.stringify(data), // post 请求的数据 |
| 51 | timeout: 30000, // 超时时间, 单位毫秒 | 51 | timeout: 30000, // 超时时间, 单位毫秒 |
| 52 | headers: { | 52 | headers: { |
| 1 | import axios from 'axios' | 1 | import axios from 'axios' |
| 2 | 2 | ||
| 3 | -let base = '/hqpt-user-center/system/log'; | 3 | +let base = '/cloud-user-center/system/log'; |
| 4 | 4 | ||
| 5 | 5 | ||
| 6 | export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; | 6 | export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; |
| 1 | import axios from 'axios' | 1 | import axios from 'axios' |
| 2 | 2 | ||
| 3 | -let base = '/hqpt-user-center/perm'; | 3 | +let base = '/cloud-user-center/perm'; |
| 4 | 4 | ||
| 5 | 5 | ||
| 6 | export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; | 6 | export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; |
| 1 | import axios from 'axios' | 1 | import axios from 'axios' |
| 2 | 2 | ||
| 3 | -let base = '/hqpt-user-center/role'; | 3 | +let base = '/cloud-user-center/role'; |
| 4 | 4 | ||
| 5 | 5 | ||
| 6 | export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; | 6 | export const getList = params => { return axios.get(`${base}/list`, { params: params }); }; |
| 1 | import http from './http.js' | 1 | import http from './http.js' |
| 2 | -let baseUrl = '/hqpt-user-center/user' | 2 | +let baseUrl = '/cloud-user-center/user' |
| 3 | 3 | ||
| 4 | export const getUserList = params => { return http.get(`${baseUrl}/list`, params); }; | 4 | export const getUserList = params => { return http.get(`${baseUrl}/list`, params); }; |
| 5 | 5 |
| @@ -7,9 +7,9 @@ import Role from './views/nav1/role.vue' | @@ -7,9 +7,9 @@ import Role from './views/nav1/role.vue' | ||
| 7 | import Perm from './views/nav1/perm.vue' | 7 | import Perm from './views/nav1/perm.vue' |
| 8 | import LOG from './views/nav1/Log.vue' | 8 | import LOG from './views/nav1/Log.vue' |
| 9 | import PreManifest from './views/agent/PreManifest.vue' | 9 | import PreManifest from './views/agent/PreManifest.vue' |
| 10 | -import Company from './views/nav1/company.vue' | ||
| 11 | -import Department from './views/nav1/department.vue' | ||
| 12 | -import Group from './views/nav1/groupcompany.vue' | 10 | +// import Company from './views/nav1/company.vue' |
| 11 | +// import Department from './views/nav1/department.vue' | ||
| 12 | +// import Group from './views/nav1/groupcompany.vue' | ||
| 13 | import Process from './views/hqpt/Process.vue' | 13 | import Process from './views/hqpt/Process.vue' |
| 14 | import Job from './views/hqpt/Job.vue' | 14 | import Job from './views/hqpt/Job.vue' |
| 15 | // import Form from './views/nav1/Form.vue' | 15 | // import Form from './views/nav1/Form.vue' |
| @@ -58,12 +58,12 @@ let routes = [ | @@ -58,12 +58,12 @@ let routes = [ | ||
| 58 | iconCls: 'el-icon-setting',//图标样式class | 58 | iconCls: 'el-icon-setting',//图标样式class |
| 59 | children: [ | 59 | children: [ |
| 60 | { path: '/user', component: User, name: '用户管理' }, | 60 | { path: '/user', component: User, name: '用户管理' }, |
| 61 | - { path: '/role', component: Role, name: '岗位管理' }, | 61 | + { path: '/role', component: Role, name: '组织机构' }, |
| 62 | { path: '/perm', component: Perm, name: '权限管理' }, | 62 | { path: '/perm', component: Perm, name: '权限管理' }, |
| 63 | { path: '/log', component: LOG, name: '系统日志' }, | 63 | { path: '/log', component: LOG, name: '系统日志' }, |
| 64 | - { path: '/department', component: Department, name: '部门管理' }, | ||
| 65 | - { path: '/company', component: Company, name: '公司管理'}, | ||
| 66 | - { path: '/group', component: Group, name: '集团管理'} | 64 | + // { path: '/department', component: Department, name: '部门管理' }, |
| 65 | + // { path: '/company', component: Company, name: '公司管理'}, | ||
| 66 | + // { path: '/group', component: Group, name: '集团管理'} | ||
| 67 | ] | 67 | ] |
| 68 | }, | 68 | }, |
| 69 | { | 69 | { |
| 1 | <template> | 1 | <template> |
| 2 | - <el-row class="container"> | 2 | + <el-row class="container darkmenu" style="margin-top: 0px;"> |
| 3 | <el-col :span="24" class="header"> | 3 | <el-col :span="24" class="header"> |
| 4 | - <el-col :span="10" class="logo" :class="collapsed?'logo-collapse-width':'logo-width'"> | 4 | + <el-col :span="10" class="logo" align="center" :class="collapsed?'logo-collapse-width':'logo-width'"> |
| 5 | {{collapsed?'':sysName}} | 5 | {{collapsed?'':sysName}} |
| 6 | </el-col> | 6 | </el-col> |
| 7 | <el-col :span="10"> | 7 | <el-col :span="10"> |
| @@ -11,49 +11,85 @@ | @@ -11,49 +11,85 @@ | ||
| 11 | </el-col> | 11 | </el-col> |
| 12 | <el-col :span="4" class="userinfo"> | 12 | <el-col :span="4" class="userinfo"> |
| 13 | <el-dropdown trigger="hover"> | 13 | <el-dropdown trigger="hover"> |
| 14 | - <span class="el-dropdown-link userinfo-inner"><img :src="this.sysUserAvatar" /> {{sysUserName}}</span> | 14 | + <span class="el-dropdown-link userinfo-inner"><img |
| 15 | + :src="this.sysUserAvatar"/> {{sysUserName}}</span> | ||
| 15 | <el-dropdown-menu slot="dropdown"> | 16 | <el-dropdown-menu slot="dropdown"> |
| 16 | <el-dropdown-item>我的消息</el-dropdown-item> | 17 | <el-dropdown-item>我的消息</el-dropdown-item> |
| 17 | - <el-dropdown-item>设置</el-dropdown-item> | 18 | + <el-dropdown-item @click.native="editPass">修改密码</el-dropdown-item> |
| 18 | <el-dropdown-item divided @click.native="logout">退出登录</el-dropdown-item> | 19 | <el-dropdown-item divided @click.native="logout">退出登录</el-dropdown-item> |
| 19 | </el-dropdown-menu> | 20 | </el-dropdown-menu> |
| 20 | </el-dropdown> | 21 | </el-dropdown> |
| 21 | </el-col> | 22 | </el-col> |
| 22 | </el-col> | 23 | </el-col> |
| 24 | + <el-col> | ||
| 25 | + <el-dialog title="修改密码" :visible.sync="dialogFormVisible"> | ||
| 26 | + <el-form :model="resetForm" status-icon :rules="resetFormRules" ref="resetForm" label-width="100px"> | ||
| 27 | + <el-form-item label="用户名" prop="name"> | ||
| 28 | + <span>{{sysUserName}}</span> | ||
| 29 | + </el-form-item> | ||
| 30 | + <el-form-item label="新密码" prop="newpwd"> | ||
| 31 | + <el-input type="password" v-model="resetForm.newpwd" autocomplete="off" | ||
| 32 | + placeholder="8-20位字符在数字、小写、大写字母以及特殊字符中四选三"></el-input> | ||
| 33 | + </el-form-item> | ||
| 34 | + <el-form-item label="确认密码" prop="renewpwd"> | ||
| 35 | + <el-input type="password" v-model="resetForm.renewpwd" auto-complete="off"></el-input> | ||
| 36 | + </el-form-item> | ||
| 37 | + <el-form-item> | ||
| 38 | + <el-button type="primary" @click="submitEdit('resetForm')" style="float:right">提 交</el-button> | ||
| 39 | + </el-form-item> | ||
| 40 | + | ||
| 41 | + </el-form> | ||
| 42 | + </el-dialog> | ||
| 43 | + </el-col> | ||
| 23 | <el-col :span="24" class="main"> | 44 | <el-col :span="24" class="main"> |
| 24 | <aside :class="collapsed?'menu-collapsed':'menu-expanded'"> | 45 | <aside :class="collapsed?'menu-collapsed':'menu-expanded'"> |
| 25 | <!--导航菜单--> | 46 | <!--导航菜单--> |
| 26 | - <el-menu :default-active="$route.path" class="el-menu-vertical-demo" @open="handleopen" @close="handleclose" @select="handleselect" unique-opened router v-show="!collapsed" style="min-width: 230px"> | 47 | + <el-menu :default-active="$route.path" class="el-menu-vertical-demo" @open="handleopen" |
| 48 | + @close="handleclose" @select="handleselect" unique-opened router v-show="!collapsed" | ||
| 49 | + style="min-width: 230px"> | ||
| 27 | <template v-for="(item,index) in $router.options.routes" v-if="!item.hidden"> | 50 | <template v-for="(item,index) in $router.options.routes" v-if="!item.hidden"> |
| 28 | <el-submenu :index="index+''" v-if="!item.leaf"> | 51 | <el-submenu :index="index+''" v-if="!item.leaf"> |
| 29 | <template slot="title"><i :class="item.iconCls"></i>{{item.name}}</template> | 52 | <template slot="title"><i :class="item.iconCls"></i>{{item.name}}</template> |
| 30 | - <el-menu-item v-for="child in item.children" :index="child.path" :key="child.path" v-if="!child.hidden">{{child.name}}</el-menu-item> | 53 | + <el-menu-item v-for="child in item.children" :index="child.path" :key="child.path" |
| 54 | + v-if="!child.hidden">{{child.name}} | ||
| 55 | + </el-menu-item> | ||
| 31 | </el-submenu> | 56 | </el-submenu> |
| 32 | - <el-menu-item v-if="item.leaf&&item.children.length>0" :index="item.children[0].path"><i :class="item.iconCls"></i>{{item.children[0].name}}</el-menu-item> | 57 | + <el-menu-item v-if="item.leaf&&item.children.length>0" :index="item.children[0].path"><i |
| 58 | + :class="item.iconCls"></i>{{item.children[0].name}} | ||
| 59 | + </el-menu-item> | ||
| 33 | </template> | 60 | </template> |
| 34 | </el-menu> | 61 | </el-menu> |
| 35 | <!--导航菜单-折叠后--> | 62 | <!--导航菜单-折叠后--> |
| 36 | <ul class="el-menu el-menu-vertical-demo collapsed" v-show="collapsed" ref="menuCollapsed"> | 63 | <ul class="el-menu el-menu-vertical-demo collapsed" v-show="collapsed" ref="menuCollapsed"> |
| 37 | <li v-for="(item,index) in $router.options.routes" v-if="!item.hidden" class="el-submenu item"> | 64 | <li v-for="(item,index) in $router.options.routes" v-if="!item.hidden" class="el-submenu item"> |
| 38 | <template v-if="!item.leaf"> | 65 | <template v-if="!item.leaf"> |
| 39 | - <div class="el-submenu__title" style="padding-left: 20px;" @mouseover="showMenu(index,true)" @mouseout="showMenu(index,false)"><i :class="item.iconCls"></i></div> | ||
| 40 | - <ul class="el-menu submenu" :class="'submenu-hook-'+index" @mouseover="showMenu(index,true)" @mouseout="showMenu(index,false)"> | ||
| 41 | - <li v-for="child in item.children" v-if="!child.hidden" :key="child.path" class="el-menu-item" style="padding-left: 40px;" :class="$route.path==child.path?'is-active':''" @click="$router.push(child.path)">{{child.name}}</li> | 66 | + <div class="el-submenu__title" style="padding-left: 20px;" @mouseover="showMenu(index,true)" |
| 67 | + @mouseout="showMenu(index,false)"><i :class="item.iconCls"></i></div> | ||
| 68 | + <ul class="el-menu submenu" :class="'submenu-hook-'+index" @mouseover="showMenu(index,true)" | ||
| 69 | + @mouseout="showMenu(index,false)"> | ||
| 70 | + <li v-for="child in item.children" v-if="!child.hidden" :key="child.path" | ||
| 71 | + class="el-menu-item" style="padding-left: 40px;" | ||
| 72 | + :class="$route.path==child.path?'is-active':''" @click="$router.push(child.path)"> | ||
| 73 | + {{child.name}} | ||
| 74 | + </li> | ||
| 42 | </ul> | 75 | </ul> |
| 43 | </template> | 76 | </template> |
| 44 | <template v-else> | 77 | <template v-else> |
| 45 | <li class="el-submenu"> | 78 | <li class="el-submenu"> |
| 46 | - <div class="el-submenu__title el-menu-item" style="padding-left: 20px;height: 56px;line-height: 56px;padding: 0 20px;" :class="$route.path==item.children[0].path?'is-active':''" @click="$router.push(item.children[0].path)"><i :class="item.iconCls"></i></div> | 79 | + <div class="el-submenu__title el-menu-item" |
| 80 | + style="padding-left: 20px;height: 56px;line-height: 56px;padding: 0 20px;" | ||
| 81 | + :class="$route.path==item.children[0].path?'is-active':''" | ||
| 82 | + @click="$router.push(item.children[0].path)"><i :class="item.iconCls"></i></div> | ||
| 47 | </li> | 83 | </li> |
| 48 | - </template> | ||
| 49 | - </li> | ||
| 50 | - </ul> | ||
| 51 | - </aside> | ||
| 52 | - <section class="content-container"> | 84 | +</template> |
| 85 | +</li> | ||
| 86 | +</ul> | ||
| 87 | +</aside> | ||
| 88 | +<section class="content-container"> | ||
| 53 | <div class="grid-content bg-purple-light"> | 89 | <div class="grid-content bg-purple-light"> |
| 54 | <el-col :span="24" class="breadcrumb-container"> | 90 | <el-col :span="24" class="breadcrumb-container"> |
| 55 | <strong class="title">{{$route.name}}</strong> | 91 | <strong class="title">{{$route.name}}</strong> |
| 56 | - <el-breadcrumb separator="/" class="breadcrumb-inner"> | 92 | + <el-breadcrumb separator=">" class="breadcrumb-inner"> |
| 57 | <el-breadcrumb-item v-for="item in $route.matched" :key="item.path"> | 93 | <el-breadcrumb-item v-for="item in $route.matched" :key="item.path"> |
| 58 | {{ item.name }} | 94 | {{ item.name }} |
| 59 | </el-breadcrumb-item> | 95 | </el-breadcrumb-item> |
| @@ -61,25 +97,96 @@ | @@ -61,25 +97,96 @@ | ||
| 61 | </el-col> | 97 | </el-col> |
| 62 | <el-col :span="24" class="content-wrapper"> | 98 | <el-col :span="24" class="content-wrapper"> |
| 63 | <transition name="fade" mode="out-in"> | 99 | <transition name="fade" mode="out-in"> |
| 64 | - <router-view></router-view> | 100 | + <router-view :key="$route.path +$route.query.t"></router-view> |
| 65 | </transition> | 101 | </transition> |
| 66 | </el-col> | 102 | </el-col> |
| 67 | </div> | 103 | </div> |
| 68 | - </section> | ||
| 69 | - </el-col> | ||
| 70 | - </el-row> | 104 | +</section> |
| 105 | +</el-col> | ||
| 106 | +</el-row> | ||
| 71 | </template> | 107 | </template> |
| 72 | 108 | ||
| 73 | - | ||
| 74 | <script> | 109 | <script> |
| 75 | import rt from '../routes' | 110 | import rt from '../routes' |
| 111 | + import {editPass} from '../api/user'; | ||
| 112 | + import ElFormItem from "element-ui/packages/form/src/form-item"; | ||
| 113 | + | ||
| 76 | export default { | 114 | export default { |
| 115 | + | ||
| 116 | + provide() { | ||
| 117 | + return { | ||
| 118 | + reload: this.reload | ||
| 119 | + } | ||
| 120 | + }, | ||
| 121 | + components: {ElFormItem}, | ||
| 77 | data() { | 122 | data() { |
| 123 | + var validatePass = (rule, value, callback) => { | ||
| 124 | + if (!value) { | ||
| 125 | + callback(new Error('请输入新密码')); | ||
| 126 | + } else { | ||
| 127 | + var ls = 0; | ||
| 128 | + if (value.match(/([a-z])+/)) { | ||
| 129 | + ls++; | ||
| 130 | + } | ||
| 131 | + if (value.match(/([0-9])+/)) { | ||
| 132 | + ls++; | ||
| 133 | + } | ||
| 134 | + if (value.match(/([A-Z])+/)) { | ||
| 135 | + ls++; | ||
| 136 | + } | ||
| 137 | + if ((/([\W])+/) && !value.match(/(![\u4E00-\u9FA5])+/)) { | ||
| 138 | + ls++; | ||
| 139 | + } | ||
| 140 | + if (value.toString().length < 8 || value.toString().length > 20) { | ||
| 141 | + callback(new Error('密码长度为8 - 20个字符')); | ||
| 142 | + ls = 0; | ||
| 143 | + } | ||
| 144 | + if (value.match(/([\u4E00-\u9FA5])+/)) { | ||
| 145 | + callback(new Error('不能包含中文字符')); | ||
| 146 | + ls = 0; | ||
| 147 | + } | ||
| 148 | + switch (ls) { | ||
| 149 | + case 0: | ||
| 150 | + this.passwordPercent = 0; | ||
| 151 | + callback(new Error('数字、小写字母、大写字母以及特殊字符中四选三')); | ||
| 152 | + break; | ||
| 153 | + case 1: | ||
| 154 | + this.passwordPercent = 33; | ||
| 155 | + callback(new Error('数字、小写字母、大写字母以及特殊字符中四选三')); | ||
| 156 | + break; | ||
| 157 | + case 2: | ||
| 158 | + this.passwordPercent = 66; | ||
| 159 | + callback(new Error('数字、小写字母 、大写字母以及特殊字符中四选三')); | ||
| 160 | + break; | ||
| 161 | + case 3: | ||
| 162 | + case 4: | ||
| 163 | + this.passwordPercent = 100; | ||
| 164 | + break; | ||
| 165 | + default: | ||
| 166 | + this.passwordPercent = 0; | ||
| 167 | + break; | ||
| 168 | + } | ||
| 169 | + callback(); | ||
| 170 | + } | ||
| 171 | + | ||
| 172 | + }; | ||
| 173 | + | ||
| 174 | + var validatePass2 = (rule, value, callback) => { | ||
| 175 | + if (value === '') { | ||
| 176 | + callback(new Error('请再次输入密码')); | ||
| 177 | + } else if (value !== this.resetForm.newpwd) { | ||
| 178 | + callback(new Error('两次输入密码不一致!')); | ||
| 179 | + } else { | ||
| 180 | + callback(); | ||
| 181 | + } | ||
| 182 | + }; | ||
| 78 | return { | 183 | return { |
| 79 | - sysName:'后勤管理平台', | ||
| 80 | - collapsed:false, | 184 | + sysName: '易通快速通关申报管理系统', |
| 185 | + collapsed: false, | ||
| 81 | sysUserName: '', | 186 | sysUserName: '', |
| 187 | + sysUserId: '', | ||
| 82 | sysUserAvatar: '', | 188 | sysUserAvatar: '', |
| 189 | + isRouterAlive: true, | ||
| 83 | form: { | 190 | form: { |
| 84 | name: '', | 191 | name: '', |
| 85 | region: '', | 192 | region: '', |
| @@ -89,10 +196,67 @@ | @@ -89,10 +196,67 @@ | ||
| 89 | type: [], | 196 | type: [], |
| 90 | resource: '', | 197 | resource: '', |
| 91 | desc: '' | 198 | desc: '' |
| 92 | - } | 199 | + }, |
| 200 | + dialogFormVisible: false, | ||
| 201 | + resetForm: { | ||
| 202 | + newpwd: '', | ||
| 203 | + renewpwd: '', | ||
| 204 | + }, | ||
| 205 | + resetFormRules: { | ||
| 206 | + newpwd: [ | ||
| 207 | + {required: true, validator: validatePass, trigger: 'blur'} | ||
| 208 | + ], | ||
| 209 | + renewpwd: [ | ||
| 210 | + {required: true, validator: validatePass2, trigger: 'blur'} | ||
| 211 | + ] | ||
| 212 | + }, | ||
| 213 | + editForm: { | ||
| 214 | + userId: '', | ||
| 215 | + password: '', | ||
| 216 | + }, | ||
| 93 | } | 217 | } |
| 94 | }, | 218 | }, |
| 95 | methods: { | 219 | methods: { |
| 220 | + reload() { | ||
| 221 | + this.$nextTick(function () { | ||
| 222 | + this.$router.push({ | ||
| 223 | + path: this.$router.path, | ||
| 224 | + query: { | ||
| 225 | + t: new Date().getTime() | ||
| 226 | + } | ||
| 227 | + }) | ||
| 228 | + }) | ||
| 229 | + }, | ||
| 230 | + editPass: function () { | ||
| 231 | + this.dialogFormVisible = true; | ||
| 232 | + }, | ||
| 233 | + submitEdit(formName) { | ||
| 234 | + this.$refs[formName].validate((valid) => { | ||
| 235 | + if (valid) { | ||
| 236 | + this.editForm.userId = this.sysUserId; | ||
| 237 | + this.editForm.password = this.resetForm.renewpwd; | ||
| 238 | + editPass(this.editForm).then(res => { | ||
| 239 | + let response = res.data; | ||
| 240 | + if (response.code == '200') { | ||
| 241 | + this.$notify({ | ||
| 242 | + title: '密码修改成功', | ||
| 243 | + message: '密码修改成功,退出请重新登录', | ||
| 244 | + type: 'success' | ||
| 245 | + }); | ||
| 246 | + this.dialogFormVisible = false; | ||
| 247 | + } else { | ||
| 248 | + this.$notify.error({ | ||
| 249 | + title: '密码修改失败', | ||
| 250 | + message: '密码修改失败!!!' | ||
| 251 | + }); | ||
| 252 | + } | ||
| 253 | + }); | ||
| 254 | + } else { | ||
| 255 | + console.log('error submit!!'); | ||
| 256 | + return false; | ||
| 257 | + } | ||
| 258 | + }); | ||
| 259 | + }, | ||
| 96 | onSubmit() { | 260 | onSubmit() { |
| 97 | console.log('submit!'); | 261 | console.log('submit!'); |
| 98 | }, | 262 | }, |
| @@ -103,7 +267,7 @@ | @@ -103,7 +267,7 @@ | ||
| 103 | console.log('handleclose'); | 267 | console.log('handleclose'); |
| 104 | }, | 268 | }, |
| 105 | handleselect: function (a, b) { | 269 | handleselect: function (a, b) { |
| 106 | - console.log('handleselect!'); | 270 | + this.reload() |
| 107 | }, | 271 | }, |
| 108 | //退出登录 | 272 | //退出登录 |
| 109 | logout: function () { | 273 | logout: function () { |
| @@ -113,7 +277,6 @@ | @@ -113,7 +277,6 @@ | ||
| 113 | }).then(() => { | 277 | }).then(() => { |
| 114 | sessionStorage.removeItem('user'); | 278 | sessionStorage.removeItem('user'); |
| 115 | sessionStorage.removeItem('menu'); | 279 | sessionStorage.removeItem('menu'); |
| 116 | - | ||
| 117 | //退出后初始化原来的路由 | 280 | //退出后初始化原来的路由 |
| 118 | let sysRoutes = JSON.parse(sessionStorage.getItem('sysMenu')); | 281 | let sysRoutes = JSON.parse(sessionStorage.getItem('sysMenu')); |
| 119 | console.log(sysRoutes); | 282 | console.log(sysRoutes); |
| @@ -127,11 +290,11 @@ | @@ -127,11 +290,11 @@ | ||
| 127 | 290 | ||
| 128 | }, | 291 | }, |
| 129 | //折叠导航栏 | 292 | //折叠导航栏 |
| 130 | - collapse:function(){ | ||
| 131 | - this.collapsed=!this.collapsed; | 293 | + collapse: function () { |
| 294 | + this.collapsed = !this.collapsed; | ||
| 132 | }, | 295 | }, |
| 133 | - showMenu(i,status){ | ||
| 134 | - this.$refs.menuCollapsed.getElementsByClassName('submenu-hook-'+i)[0].style.display=status?'block':'none'; | 296 | + showMenu(i, status) { |
| 297 | + this.$refs.menuCollapsed.getElementsByClassName('submenu-hook-' + i)[0].style.display = status ? 'block' : 'none'; | ||
| 135 | } | 298 | } |
| 136 | }, | 299 | }, |
| 137 | mounted() { | 300 | mounted() { |
| @@ -140,6 +303,7 @@ | @@ -140,6 +303,7 @@ | ||
| 140 | if (user) { | 303 | if (user) { |
| 141 | user = JSON.parse(user); | 304 | user = JSON.parse(user); |
| 142 | this.sysUserName = user.username || ''; | 305 | this.sysUserName = user.username || ''; |
| 306 | + this.sysUserId = user.userId || ''; | ||
| 143 | this.sysUserAvatar = user.userface || '/static/images/faceDefault.jpg'; | 307 | this.sysUserAvatar = user.userface || '/static/images/faceDefault.jpg'; |
| 144 | } | 308 | } |
| 145 | //操作路由,判断本地存储的用户栏目列表是否存在,如果存在则加载路由 | 309 | //操作路由,判断本地存储的用户栏目列表是否存在,如果存在则加载路由 |
| @@ -163,18 +327,22 @@ | @@ -163,18 +327,22 @@ | ||
| 163 | top: 0px; | 327 | top: 0px; |
| 164 | bottom: 0px; | 328 | bottom: 0px; |
| 165 | width: 100%; | 329 | width: 100%; |
| 330 | + | ||
| 166 | .header { | 331 | .header { |
| 167 | height: 60px; | 332 | height: 60px; |
| 168 | line-height: 60px; | 333 | line-height: 60px; |
| 169 | - background: $color-primary; | ||
| 170 | - color:#fff; | 334 | + background: $color-primary url("/static/images/air-banner.png"); |
| 335 | + color: #fff; | ||
| 336 | + | ||
| 171 | .userinfo { | 337 | .userinfo { |
| 172 | text-align: right; | 338 | text-align: right; |
| 173 | padding-right: 35px; | 339 | padding-right: 35px; |
| 174 | float: right; | 340 | float: right; |
| 341 | + | ||
| 175 | .userinfo-inner { | 342 | .userinfo-inner { |
| 176 | cursor: pointer; | 343 | cursor: pointer; |
| 177 | - color:#fff; | 344 | + color: #fff; |
| 345 | + | ||
| 178 | img { | 346 | img { |
| 179 | width: 40px; | 347 | width: 40px; |
| 180 | height: 40px; | 348 | height: 40px; |
| @@ -184,38 +352,45 @@ | @@ -184,38 +352,45 @@ | ||
| 184 | } | 352 | } |
| 185 | } | 353 | } |
| 186 | } | 354 | } |
| 355 | + | ||
| 187 | .logo { | 356 | .logo { |
| 188 | //width:230px; | 357 | //width:230px; |
| 189 | - height:60px; | 358 | + height: 60px; |
| 190 | font-size: 22px; | 359 | font-size: 22px; |
| 191 | - padding-left:20px; | ||
| 192 | - padding-right:20px; | ||
| 193 | - border-color: rgba(238,241,146,0.3); | 360 | + padding-left: 20px; |
| 361 | + padding-right: 20px; | ||
| 362 | + border-color: rgba(238, 241, 146, 0.3); | ||
| 194 | border-right-width: 1px; | 363 | border-right-width: 1px; |
| 195 | border-right-style: solid; | 364 | border-right-style: solid; |
| 365 | + | ||
| 196 | img { | 366 | img { |
| 197 | width: 40px; | 367 | width: 40px; |
| 198 | float: left; | 368 | float: left; |
| 199 | margin: 10px 10px 10px 18px; | 369 | margin: 10px 10px 10px 18px; |
| 200 | } | 370 | } |
| 371 | + | ||
| 201 | .txt { | 372 | .txt { |
| 202 | - color:#fff; | 373 | + color: #fff; |
| 203 | } | 374 | } |
| 204 | } | 375 | } |
| 205 | - .logo-width{ | ||
| 206 | - width:230px; | 376 | + |
| 377 | + .logo-width { | ||
| 378 | + width: 230px; | ||
| 207 | } | 379 | } |
| 208 | - .logo-collapse-width{ | ||
| 209 | - width:60px | 380 | + |
| 381 | + .logo-collapse-width { | ||
| 382 | + width: 60px | ||
| 210 | } | 383 | } |
| 211 | - .tools{ | 384 | + |
| 385 | + .tools { | ||
| 212 | padding: 0px 23px; | 386 | padding: 0px 23px; |
| 213 | - width:14px; | 387 | + width: 14px; |
| 214 | height: 60px; | 388 | height: 60px; |
| 215 | line-height: 60px; | 389 | line-height: 60px; |
| 216 | cursor: pointer; | 390 | cursor: pointer; |
| 217 | } | 391 | } |
| 218 | } | 392 | } |
| 393 | + | ||
| 219 | .main { | 394 | .main { |
| 220 | display: flex; | 395 | display: flex; |
| 221 | // background: #324057; | 396 | // background: #324057; |
| @@ -223,63 +398,79 @@ | @@ -223,63 +398,79 @@ | ||
| 223 | top: 60px; | 398 | top: 60px; |
| 224 | bottom: 0px; | 399 | bottom: 0px; |
| 225 | overflow: hidden; | 400 | overflow: hidden; |
| 401 | + | ||
| 226 | aside { | 402 | aside { |
| 227 | - flex:0 0 230px; | 403 | + flex: 0 0 230px; |
| 228 | width: 230px; | 404 | width: 230px; |
| 229 | // position: absolute; | 405 | // position: absolute; |
| 230 | // top: 0px; | 406 | // top: 0px; |
| 231 | // bottom: 0px; | 407 | // bottom: 0px; |
| 232 | - .el-menu{ | ||
| 233 | - height: 100%; | ||
| 234 | - } | ||
| 235 | - .collapsed{ | ||
| 236 | - width:60px; | ||
| 237 | - .item{ | 408 | + .collapsed { |
| 409 | + width: 60px; | ||
| 410 | + | ||
| 411 | + .item { | ||
| 238 | position: relative; | 412 | position: relative; |
| 239 | } | 413 | } |
| 240 | - .submenu{ | ||
| 241 | - position:absolute; | ||
| 242 | - top:0px; | ||
| 243 | - left:60px; | ||
| 244 | - z-index:99999; | ||
| 245 | - height:auto; | ||
| 246 | - display:none; | 414 | + |
| 415 | + .submenu { | ||
| 416 | + position: absolute; | ||
| 417 | + top: 0px; | ||
| 418 | + left: 60px; | ||
| 419 | + z-index: 99999; | ||
| 420 | + height: auto; | ||
| 421 | + display: none; | ||
| 247 | } | 422 | } |
| 248 | 423 | ||
| 249 | } | 424 | } |
| 250 | } | 425 | } |
| 251 | - .menu-collapsed{ | ||
| 252 | - flex:0 0 60px; | 426 | + |
| 427 | + .menu-collapsed { | ||
| 428 | + flex: 0 0 60px; | ||
| 253 | width: 60px; | 429 | width: 60px; |
| 254 | } | 430 | } |
| 255 | - .menu-expanded{ | ||
| 256 | - flex:0 0 230px; | 431 | + |
| 432 | + .menu-expanded { | ||
| 433 | + flex: 0 0 230px; | ||
| 257 | width: 230px; | 434 | width: 230px; |
| 258 | } | 435 | } |
| 259 | - .menu-expanded ul{ | 436 | + |
| 437 | + .menu-expanded ul { | ||
| 260 | width: 230px; | 438 | width: 230px; |
| 261 | } | 439 | } |
| 440 | + | ||
| 262 | .content-container { | 441 | .content-container { |
| 263 | // background: #f1f2f7; | 442 | // background: #f1f2f7; |
| 264 | - flex:1; | 443 | + flex: 1; |
| 265 | // position: absolute; | 444 | // position: absolute; |
| 266 | // right: 0px; | 445 | // right: 0px; |
| 267 | // top: 0px; | 446 | // top: 0px; |
| 268 | // bottom: 0px; | 447 | // bottom: 0px; |
| 269 | // left: 230px; | 448 | // left: 230px; |
| 270 | overflow-y: scroll; | 449 | overflow-y: scroll; |
| 271 | - padding: 20px; | 450 | + padding: 10px; |
| 451 | + background-color: #dfe6e9; | ||
| 272 | .breadcrumb-container { | 452 | .breadcrumb-container { |
| 273 | //margin-bottom: 15px; | 453 | //margin-bottom: 15px; |
| 454 | + background: #bfcbd9; | ||
| 274 | .title { | 455 | .title { |
| 275 | width: 200px; | 456 | width: 200px; |
| 276 | float: left; | 457 | float: left; |
| 277 | color: #475669; | 458 | color: #475669; |
| 459 | + margin-left: 20px; | ||
| 460 | + margin-top: 8px; | ||
| 461 | + font-size: 16px; | ||
| 278 | } | 462 | } |
| 463 | + | ||
| 279 | .breadcrumb-inner { | 464 | .breadcrumb-inner { |
| 280 | float: right; | 465 | float: right; |
| 466 | + margin-right: 20px; | ||
| 467 | + } | ||
| 468 | + | ||
| 469 | + .el-breadcrumb { | ||
| 470 | + line-height: 36px; | ||
| 281 | } | 471 | } |
| 282 | } | 472 | } |
| 473 | + | ||
| 283 | .content-wrapper { | 474 | .content-wrapper { |
| 284 | background-color: #fff; | 475 | background-color: #fff; |
| 285 | box-sizing: border-box; | 476 | box-sizing: border-box; |
| @@ -288,3 +479,49 @@ | @@ -288,3 +479,49 @@ | ||
| 288 | } | 479 | } |
| 289 | } | 480 | } |
| 290 | </style> | 481 | </style> |
| 482 | +<style lang="scss"> | ||
| 483 | + .darkmenu { | ||
| 484 | + .main { | ||
| 485 | + aside { | ||
| 486 | + .el-menu { | ||
| 487 | + height: 100%; | ||
| 488 | + background: #606060; | ||
| 489 | + | ||
| 490 | + .el-menu-item { | ||
| 491 | + i { | ||
| 492 | + color: white; | ||
| 493 | + } | ||
| 494 | + | ||
| 495 | + color: white; | ||
| 496 | + } | ||
| 497 | + | ||
| 498 | + .el-menu-item.is-active { | ||
| 499 | + color: #e6a23c; | ||
| 500 | + } | ||
| 501 | + | ||
| 502 | + .el-menu-item:hover, .el-menu-item:focus { | ||
| 503 | + background-color: #1a4496; | ||
| 504 | + } | ||
| 505 | + | ||
| 506 | + .el-submenu { | ||
| 507 | + ul.el-menu.el-menu--inline { | ||
| 508 | + background: #303030; | ||
| 509 | + } | ||
| 510 | + | ||
| 511 | + .el-submenu__title { | ||
| 512 | + color: white; | ||
| 513 | + | ||
| 514 | + i { | ||
| 515 | + color: white; | ||
| 516 | + } | ||
| 517 | + } | ||
| 518 | + | ||
| 519 | + .el-submenu__title:hover { | ||
| 520 | + background-color: #1a4496; | ||
| 521 | + } | ||
| 522 | + } | ||
| 523 | + } | ||
| 524 | + } | ||
| 525 | + } | ||
| 526 | + } | ||
| 527 | +</style> |
| @@ -15,26 +15,28 @@ | @@ -15,26 +15,28 @@ | ||
| 15 | </el-form> | 15 | </el-form> |
| 16 | </el-col> | 16 | </el-col> |
| 17 | <!--列表--> | 17 | <!--列表--> |
| 18 | - <el-table :data="logs" highlight-current-row v-loading="listLoading" @selection-change="selsChange" style="width: 100%;"> | ||
| 19 | - <el-table-column type="index" width="60"> | 18 | + <el-table :data="logs" highlight-current-row border v-loading="listLoading" @selection-change="selsChange" style="width: 100%;"> |
| 19 | + <el-table-column type="index" width="60" align="center"> | ||
| 20 | </el-table-column> | 20 | </el-table-column> |
| 21 | - <el-table-column prop="logid" label="ID" width="80" sortable> | 21 | + <el-table-column prop="logid" label="ID" width="80" sortable align="center"> |
| 22 | </el-table-column> | 22 | </el-table-column> |
| 23 | - <el-table-column prop="username" label="操作账号" width="120" sortable> | 23 | + <el-table-column prop="username" label="操作账号" width="120" sortable align="center"> |
| 24 | </el-table-column> | 24 | </el-table-column> |
| 25 | - <el-table-column prop="ip" label="IP" width="100" sortable> | 25 | + <el-table-column prop="ip" label="IP" width="110" sortable align="center"> |
| 26 | </el-table-column> | 26 | </el-table-column> |
| 27 | - <el-table-column prop="logcreattime" label="操作时间" width="200" sortable> | 27 | + <el-table-column prop="logcreattime" label="操作时间" width="200" sortable align="center"> |
| 28 | </el-table-column> | 28 | </el-table-column> |
| 29 | - <el-table-column prop="methodname" label="系统动作" width="120" sortable> | 29 | + <el-table-column prop="methodname" label="系统动作" width="120" sortable align="center"> |
| 30 | </el-table-column> | 30 | </el-table-column> |
| 31 | - <el-table-column prop="operatenamecn" label="动作描述" width="120" sortable> | 31 | + <el-table-column prop="operatenamecn" label="动作描述" width="120" sortable align="center"> |
| 32 | </el-table-column> | 32 | </el-table-column> |
| 33 | - <el-table-column prop="modelnamecn" label="操作模块" width="120" sortable> | 33 | + <el-table-column prop="modelnamecn" label="操作模块" width="120" sortable align="center"> |
| 34 | </el-table-column> | 34 | </el-table-column> |
| 35 | - <el-table-column prop="classname" label="系统类" show-overflow-tooltip="true" width="100" sortable> | 35 | + <el-table-column prop="classname" label="系统类" show-overflow-tooltip width="100" sortable align="center"> |
| 36 | </el-table-column> | 36 | </el-table-column> |
| 37 | - <el-table-column prop="result" label="操作结果" min-width="200" sortable> | 37 | + <el-table-column prop="parameters" label="参数" show-overflow-tooltip width="100" sortable align="center"> |
| 38 | + </el-table-column> | ||
| 39 | + <el-table-column prop="result" label="操作结果" min-width="200" sortable align="center"> | ||
| 38 | </el-table-column> | 40 | </el-table-column> |
| 39 | </el-table> | 41 | </el-table> |
| 40 | 42 |
| @@ -16,32 +16,36 @@ | @@ -16,32 +16,36 @@ | ||
| 16 | </el-col> | 16 | </el-col> |
| 17 | 17 | ||
| 18 | <!--列表--> | 18 | <!--列表--> |
| 19 | - <el-table :data="tableList" highlight-current-row v-loading="listLoading" @selection-change="selsChange" style="width: 100%;"> | ||
| 20 | - <el-table-column type="selection" width="55"> | 19 | + <el-table :data="tableList" highlight-current-row v-loading="listLoading" @selection-change="selsChange" style="width: 100%;" |
| 20 | + row-key="permissionId" | ||
| 21 | + border | ||
| 22 | + :tree-props="{children: 'children', hasChildren: 'hasChildren'}" | ||
| 23 | + > | ||
| 24 | + <el-table-column type="selection" width="55" align="center"> | ||
| 21 | </el-table-column> | 25 | </el-table-column> |
| 22 | - <el-table-column type="index" width="60"> | 26 | + <!--<el-table-column type="index" width="60">--> |
| 27 | + <!--</el-table-column>--> | ||
| 28 | + <el-table-column prop="permissionId" label="ID" width="130" align="center" sortable> | ||
| 23 | </el-table-column> | 29 | </el-table-column> |
| 24 | - <el-table-column prop="permissionId" label="ID" width="100" sortable> | 30 | + <el-table-column prop="name" label="权限名称" min-width="150" align="center" sortable> |
| 25 | </el-table-column> | 31 | </el-table-column> |
| 26 | - <el-table-column prop="name" label="权限名称" min-width="200" sortable> | 32 | + <el-table-column prop="description" label="描述" min-width="120" align="center" sortable> |
| 27 | </el-table-column> | 33 | </el-table-column> |
| 28 | - <el-table-column prop="description" label="描述" min-width="200" sortable> | 34 | + <el-table-column prop="ismenu" label="是否目录" width="120" :formatter="formatState" align="center" sortable> |
| 29 | </el-table-column> | 35 | </el-table-column> |
| 30 | - <el-table-column prop="permissionOrder" label="排序" width="100" sortable> | 36 | + <el-table-column prop="url" label="访问路径" width="250" align="center" sortable> |
| 31 | </el-table-column> | 37 | </el-table-column> |
| 32 | - <el-table-column prop="url" label="路径" width="100" sortable> | ||
| 33 | - </el-table-column> | ||
| 34 | - <el-table-column label="操作" min-width="150"> | 38 | + <el-table-column label="操作" min-width="150" align="center"> |
| 35 | <template slot-scope="scope"> | 39 | <template slot-scope="scope"> |
| 36 | - <el-button size="small" @click="handleEdit(scope.$index, scope.row)">编辑</el-button> | ||
| 37 | - <el-button type="danger" size="small" @click="handleDel(scope.$index, scope.row)">删除</el-button> | 40 | + <el-button size="small" type="success" icon="el-icon-check" @click="handleEdit(scope.$index, scope.row)">编辑</el-button> |
| 41 | + <el-button type="danger" icon="el-icon-delete" size="small" @click="handleDel(scope.$index, scope.row)">删除</el-button> | ||
| 38 | </template> | 42 | </template> |
| 39 | </el-table-column> | 43 | </el-table-column> |
| 40 | </el-table> | 44 | </el-table> |
| 41 | 45 | ||
| 42 | <!--工具条--> | 46 | <!--工具条--> |
| 43 | <el-col :span="24" class="toolbar"> | 47 | <el-col :span="24" class="toolbar"> |
| 44 | - <el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button> | 48 | + <el-button type="danger" icon="el-icon-delete" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button> |
| 45 | <el-pagination layout="total, prev, pager, next" @current-change="handleCurrentChange" :page-size="pageSize" :total="total" style="float:right;"> | 49 | <el-pagination layout="total, prev, pager, next" @current-change="handleCurrentChange" :page-size="pageSize" :total="total" style="float:right;"> |
| 46 | </el-pagination> | 50 | </el-pagination> |
| 47 | </el-col> | 51 | </el-col> |
| @@ -143,7 +147,7 @@ | @@ -143,7 +147,7 @@ | ||
| 143 | tableList: [], | 147 | tableList: [], |
| 144 | total: 0, | 148 | total: 0, |
| 145 | pageNum: 1, | 149 | pageNum: 1, |
| 146 | - pageSize: 10, | 150 | + pageSize: 10000, |
| 147 | listLoading: false, | 151 | listLoading: false, |
| 148 | sels: [],//列表选中列 | 152 | sels: [],//列表选中列 |
| 149 | //编辑界面是否显示 | 153 | //编辑界面是否显示 |
| @@ -208,7 +212,7 @@ | @@ -208,7 +212,7 @@ | ||
| 208 | return row.sex == 1 ? '男' : row.sex == 0 ? '女' : '未知'; | 212 | return row.sex == 1 ? '男' : row.sex == 0 ? '女' : '未知'; |
| 209 | }, | 213 | }, |
| 210 | formatState: function (row, column) { | 214 | formatState: function (row, column) { |
| 211 | - return row.state == true ? '是' : row.state == false ? '否' : '未知'; | 215 | + return row.ismenu == true ? '是' : row.ismenu == false ? '否' : '未知'; |
| 212 | }, | 216 | }, |
| 213 | handleCurrentChange(val) { | 217 | handleCurrentChange(val) { |
| 214 | this.pageNum = val; | 218 | this.pageNum = val; |
| @@ -10,34 +10,46 @@ | @@ -10,34 +10,46 @@ | ||
| 10 | <el-button type="primary" v-on:click="getRoles()">查询</el-button> | 10 | <el-button type="primary" v-on:click="getRoles()">查询</el-button> |
| 11 | </el-form-item> | 11 | </el-form-item> |
| 12 | <el-form-item> | 12 | <el-form-item> |
| 13 | - <el-button type="primary" @click="handleAdd">新增</el-button> | 13 | + <el-button type="success" @click="handleAdd">新增</el-button> |
| 14 | </el-form-item> | 14 | </el-form-item> |
| 15 | </el-form> | 15 | </el-form> |
| 16 | </el-col> | 16 | </el-col> |
| 17 | 17 | ||
| 18 | <!--列表--> | 18 | <!--列表--> |
| 19 | - <el-table :data="roles" highlight-current-row v-loading="listLoading" @selection-change="selsChange" style="width: 100%;"> | ||
| 20 | - <el-table-column type="selection" width="55"> | 19 | + <el-table :data="roles" highlight-current-row v-loading="listLoading" @selection-change="selsChange" style="width: 100%;" |
| 20 | + default-expand-all | ||
| 21 | + row-key="roleId" | ||
| 22 | + border | ||
| 23 | + :tree-props="{children: 'children', hasChildren: 'hasChildren'}"> | ||
| 24 | + <el-table-column type="selection" width="60" align="center"> | ||
| 21 | </el-table-column> | 25 | </el-table-column> |
| 22 | - <el-table-column type="index" width="60"> | 26 | + <!--<el-table-column type="index" width="60">--> |
| 27 | + <!--</el-table-column>--> | ||
| 28 | + <el-table-column prop="roleId" label="ID" width="110" align="center"> | ||
| 23 | </el-table-column> | 29 | </el-table-column> |
| 24 | - <el-table-column prop="roleId" label="ID" width="100" sortable> | 30 | + <el-table-column prop="roleName" label="岗位/角色名称" width="180" sortable align="center"> |
| 25 | </el-table-column> | 31 | </el-table-column> |
| 26 | - <el-table-column prop="roleName" label="岗位/角色名称" min-width="200" sortable> | 32 | + <!--<el-table-column prop="departmentName" label="部门名称" min-width="200" sortable>--> |
| 33 | + <!--</el-table-column>--> | ||
| 34 | + <el-table-column prop="description" label="描述" min-width="100" align="center" > | ||
| 27 | </el-table-column> | 35 | </el-table-column> |
| 28 | - <el-table-column prop="departmentName" label="部门名称" min-width="200" sortable> | 36 | + <el-table-column prop="type" label="类型" min-width="100" sortable align="center"> |
| 29 | </el-table-column> | 37 | </el-table-column> |
| 30 | - <el-table-column prop="description" label="岗位/角色描述" min-width="200" sortable> | ||
| 31 | - </el-table-column> | ||
| 32 | - <el-table-column label="操作" min-width="260"> | 38 | +<!-- <el-table-column prop="businessLicense" label="工商代码" min-width="180" align="center">--> |
| 39 | +<!-- </el-table-column>--> | ||
| 40 | +<!-- <el-table-column prop="customsRegCode" label="海关备案代码" min-width="150" align="center" >--> | ||
| 41 | +<!-- </el-table-column>--> | ||
| 42 | +<!-- <el-table-column prop="mqcode" label="海关通道编号" min-width="150" align="center">--> | ||
| 43 | +<!-- </el-table-column>--> | ||
| 44 | + <el-table-column label="操作" width="230px" fixed="right" align="center"> | ||
| 33 | <template slot-scope="scope"> | 45 | <template slot-scope="scope"> |
| 34 | - <el-button size="small" @click="setPerm(scope.$index, scope.row)">设置权限</el-button> | ||
| 35 | - <el-button size="small" @click="handleEdit(scope.$index, scope.row)">编辑</el-button> | ||
| 36 | - <el-button type="danger" size="small" @click="handleDel(scope.$index, scope.row)">删除</el-button> | 46 | + <el-button type="success" size="small" @click="handleAdd(scope.$index, scope.row)" style="width:97px;margin-left: 1px;">新增下级</el-button> |
| 47 | + <el-button type="warning" size="small" @click="setPerm(scope.$index, scope.row)" style="width:97px;margin-left: 1px;">设置权限</el-button> | ||
| 48 | + <el-button type="primary" style="width:97px;margin-left: 1px;margin-top: 3px;" size="small" @click="handleEdit(scope.$index, scope.row)" >编辑</el-button> | ||
| 49 | + <el-button type="danger" size="small" @click="handleDel(scope.$index, scope.row)" style="width:97px;margin-left: 1px;">删除</el-button> | ||
| 37 | </template> | 50 | </template> |
| 38 | </el-table-column> | 51 | </el-table-column> |
| 39 | </el-table> | 52 | </el-table> |
| 40 | - | ||
| 41 | <!--工具条--> | 53 | <!--工具条--> |
| 42 | <el-col :span="24" class="toolbar"> | 54 | <el-col :span="24" class="toolbar"> |
| 43 | <el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button> | 55 | <el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button> |
| @@ -45,67 +57,57 @@ | @@ -45,67 +57,57 @@ | ||
| 45 | </el-pagination> | 57 | </el-pagination> |
| 46 | </el-col> | 58 | </el-col> |
| 47 | 59 | ||
| 48 | - <!--编辑界面--> | ||
| 49 | - <el-dialog title="编辑" :visible.sync="editFormVisible" :close-on-click-modal="false"> | ||
| 50 | - <el-form :model="editForm" label-width="80px" :rules="editFormRules" ref="editForm"> | ||
| 51 | - <el-form-item label="ID"> | ||
| 52 | - <span>{{editForm.roleId}}</span> | ||
| 53 | - </el-form-item> | ||
| 54 | - <el-form-item label="岗位名称"> | ||
| 55 | - <el-input v-model="editForm.roleName" auto-complete="off" placeholder="请输入岗位/角色名称:例如:ROLE_name"></el-input> | ||
| 56 | - </el-form-item> | ||
| 57 | - <el-form-item label="岗位描述"> | ||
| 58 | - <el-input v-model="editForm.description" auto-complete="off" placeholder="请输入岗位/角色描述:例如:用户管理员"></el-input> | ||
| 59 | - </el-form-item> | ||
| 60 | - <el-form-item label="部门名称"> | ||
| 61 | - <el-select v-model="editForm.departmentId" placeholder="请选择"> | ||
| 62 | - <el-option | ||
| 63 | - v-for="item in departmentNameList" | ||
| 64 | - :key="item.departmentId" | ||
| 65 | - :label="item.departmentName" | ||
| 66 | - :value="item.departmentId"> | ||
| 67 | - </el-option> | ||
| 68 | - </el-select> | ||
| 69 | - </el-form-item> | ||
| 70 | - </el-form> | ||
| 71 | - <div slot="footer" class="dialog-footer"> | ||
| 72 | - <el-button @click.native="editFormVisible = false">取消</el-button> | ||
| 73 | - <el-button type="primary" @click.native="editSubmit" :loading="editLoading">提交</el-button> | ||
| 74 | - </div> | ||
| 75 | - </el-dialog> | ||
| 76 | - | ||
| 77 | <!--新增界面--> | 60 | <!--新增界面--> |
| 78 | - <el-dialog title="新增" :visible.sync="addFormVisible" :close-on-click-modal="false"> | ||
| 79 | - <el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm"> | ||
| 80 | - <el-form-item label="岗位/角色名称" prop="roleName"> | ||
| 81 | - <el-input v-model="addForm.roleName" auto-complete="off" placeholder="请输入岗位/角色名称:例如:ROLE_name"></el-input> | 61 | + <el-dialog :title="dialogMap[dialogStatus]" :visible.sync="addFormVisible" :close-on-click-modal="false"> |
| 62 | + <el-form :model="addForm" label-width="120px" :rules="addFormRules" ref="addForm"> | ||
| 63 | + <el-form-item label="上级组织机构"> | ||
| 64 | + <span>{{addForm.parentName}}</span> | ||
| 65 | + </el-form-item> | ||
| 66 | + <el-form-item label="组织机构名称" prop="roleName"> | ||
| 67 | + <el-input v-model="addForm.roleName" auto-complete="off" placeholder="请输入组织机构名称:例如:公司名称"></el-input> | ||
| 82 | </el-form-item> | 68 | </el-form-item> |
| 83 | - <el-form-item label="岗位/角色描述" prop="description"> | ||
| 84 | - <el-input v-model="addForm.description" auto-complete="off" placeholder="请输入岗位/角色描述:例如:用户管理员"></el-input> | 69 | + <el-form-item label="组织机构描述" prop="description"> |
| 70 | + <el-input v-model="addForm.description" auto-complete="off" placeholder="组织机构描述:例如:组织机构简介"></el-input> | ||
| 85 | </el-form-item> | 71 | </el-form-item> |
| 86 | - <el-form-item label="部门名称" prop="roleSign"> | ||
| 87 | - <el-select v-model="addForm.departmentId" placeholder="请选择"> | 72 | + <el-form-item label="组织机构类型" prop="type"> |
| 73 | + <el-select | ||
| 74 | + v-model="addForm.type" | ||
| 75 | + filterable | ||
| 76 | + allow-create | ||
| 77 | + default-first-option | ||
| 78 | + placeholder="请选择类型"> | ||
| 88 | <el-option | 79 | <el-option |
| 89 | - v-for="item in departmentNameList" | ||
| 90 | - :key="item.departmentId" | ||
| 91 | - :label="item.departmentName" | ||
| 92 | - :value="item.departmentId"> | 80 | + v-for="item in companyOption" |
| 81 | + :key="item.value" | ||
| 82 | + :label="item.label" | ||
| 83 | + :value="item.value"> | ||
| 93 | </el-option> | 84 | </el-option> |
| 94 | </el-select> | 85 | </el-select> |
| 95 | </el-form-item> | 86 | </el-form-item> |
| 87 | +<!-- <el-form-item label="工商企业代码" prop="businessLicense">--> | ||
| 88 | +<!-- <el-input v-model="addForm.businessLicense" auto-complete="off" placeholder="社会信用代码或者组织机构代码"></el-input>--> | ||
| 89 | +<!-- </el-form-item>--> | ||
| 90 | +<!-- <el-form-item label="海关备案代码" prop="customsRegCode">--> | ||
| 91 | +<!-- <el-input v-model="addForm.customsRegCode" auto-complete="off" placeholder="海关备案后返回的备案代码"></el-input>--> | ||
| 92 | +<!-- </el-form-item>--> | ||
| 93 | +<!-- <el-form-item label="海关通道编号" prop="mqcode">--> | ||
| 94 | +<!-- <el-input v-model="addForm.mqcode" auto-complete="off" placeholder="海关通道编号"></el-input>--> | ||
| 95 | +<!-- </el-form-item>--> | ||
| 96 | </el-form> | 96 | </el-form> |
| 97 | <div slot="footer" class="dialog-footer"> | 97 | <div slot="footer" class="dialog-footer"> |
| 98 | <el-button @click.native="addFormVisible = false">取消</el-button> | 98 | <el-button @click.native="addFormVisible = false">取消</el-button> |
| 99 | - <el-button type="primary" @click.native="addSubmit" :loading="addLoading">提交</el-button> | 99 | + <el-button type="primary" @click="dialogStatus==='create'?addSubmit():editSubmit()" :loading="addLoading" >提交</el-button> |
| 100 | </div> | 100 | </div> |
| 101 | </el-dialog> | 101 | </el-dialog> |
| 102 | 102 | ||
| 103 | <!--权限设置界面--> | 103 | <!--权限设置界面--> |
| 104 | <el-dialog title="岗位的权限设置" :visible.sync="PermFormVisible" :close-on-click-modal="false"> | 104 | <el-dialog title="岗位的权限设置" :visible.sync="PermFormVisible" :close-on-click-modal="false"> |
| 105 | <el-form :model="permForm" label-width="80px" ref="permForm"> | 105 | <el-form :model="permForm" label-width="80px" ref="permForm"> |
| 106 | - <el-checkbox-group v-model="permIds" size="small"> | ||
| 107 | - <el-checkbox v-for="perm in permissons" :label="perm.permissionId" :key="perm.permissionId">{{perm.name}}</el-checkbox> | ||
| 108 | - </el-checkbox-group> | 106 | + <el-tree :data="permissons" :props="treeDefaultProps" |
| 107 | + @check="clickDeal" | ||
| 108 | + show-checkbox highlight-current default-expand-all check-on-click-node check-strictly | ||
| 109 | + node-key="permissionId" ref="tree"> | ||
| 110 | + </el-tree> | ||
| 109 | </el-form> | 111 | </el-form> |
| 110 | <div slot="footer" class="dialog-footer"> | 112 | <div slot="footer" class="dialog-footer"> |
| 111 | <el-button @click.native="PermFormVisible = false">取消</el-button> | 113 | <el-button @click.native="PermFormVisible = false">取消</el-button> |
| @@ -128,6 +130,20 @@ | @@ -128,6 +130,20 @@ | ||
| 128 | filters: { | 130 | filters: { |
| 129 | roleName: '' | 131 | roleName: '' |
| 130 | }, | 132 | }, |
| 133 | + companyOption: [ | ||
| 134 | + { | ||
| 135 | + label: "集团", | ||
| 136 | + value: "集团" | ||
| 137 | + }, | ||
| 138 | + { | ||
| 139 | + label: "公司", | ||
| 140 | + value: "公司" | ||
| 141 | + } | ||
| 142 | + ], | ||
| 143 | + treeDefaultProps: { | ||
| 144 | + children: 'children', | ||
| 145 | + label: 'name', | ||
| 146 | + }, | ||
| 131 | departmentNameList:[], | 147 | departmentNameList:[], |
| 132 | roles: [], | 148 | roles: [], |
| 133 | permissons: [], | 149 | permissons: [], |
| @@ -137,23 +153,11 @@ | @@ -137,23 +153,11 @@ | ||
| 137 | pageSize: 5, | 153 | pageSize: 5, |
| 138 | listLoading: false, | 154 | listLoading: false, |
| 139 | sels: [],//列表选中列 | 155 | sels: [],//列表选中列 |
| 140 | - //编辑界面是否显示 | ||
| 141 | - editFormVisible: false, | ||
| 142 | - editLoading: false, | ||
| 143 | - editFormRules: { | ||
| 144 | - roleName: [ | ||
| 145 | - { required: true, message: '请输入岗位/角色名称', trigger: 'blur' } | ||
| 146 | - ] | 156 | + dialogMap: { |
| 157 | + update: '编辑', | ||
| 158 | + create: '新增', | ||
| 147 | }, | 159 | }, |
| 148 | - //编辑界面数据 | ||
| 149 | - editForm: { | ||
| 150 | - roleId: 1, | ||
| 151 | - description: '', | ||
| 152 | - roleName: '', | ||
| 153 | - roleSign: 1, | ||
| 154 | - departmentId:'' | ||
| 155 | - }, | ||
| 156 | - | 160 | + dialogStatus: 'create', |
| 157 | //新增界面是否显示 | 161 | //新增界面是否显示 |
| 158 | addFormVisible: false, | 162 | addFormVisible: false, |
| 159 | //设置权限界面是否显示 | 163 | //设置权限界面是否显示 |
| @@ -172,7 +176,13 @@ | @@ -172,7 +176,13 @@ | ||
| 172 | description: '', | 176 | description: '', |
| 173 | roleName: '', | 177 | roleName: '', |
| 174 | roleSign: 1, | 178 | roleSign: 1, |
| 175 | - departmentId:'' | 179 | + departmentId:'', |
| 180 | + type: '', | ||
| 181 | + businessLicense: '', | ||
| 182 | + customsRegCode: '', | ||
| 183 | + parentName: '', | ||
| 184 | + mqcode: '' | ||
| 185 | + | ||
| 176 | }, | 186 | }, |
| 177 | permForm: { | 187 | permForm: { |
| 178 | roleId: 1, | 188 | roleId: 1, |
| @@ -225,7 +235,6 @@ | @@ -225,7 +235,6 @@ | ||
| 225 | 235 | ||
| 226 | }, | 236 | }, |
| 227 | 237 | ||
| 228 | - | ||
| 229 | //获取部门列表 | 238 | //获取部门列表 |
| 230 | getdepartmentNames() { | 239 | getdepartmentNames() { |
| 231 | 240 | ||
| @@ -265,7 +274,11 @@ | @@ -265,7 +274,11 @@ | ||
| 265 | if(null!= error.response && error.response!==undefined){ | 274 | if(null!= error.response && error.response!==undefined){ |
| 266 | let status= error.response.status; | 275 | let status= error.response.status; |
| 267 | let msg = error.response.statusText; | 276 | let msg = error.response.statusText; |
| 268 | - alert(status+msg); | 277 | + message({ |
| 278 | + // 饿了么的消息弹窗组件 | ||
| 279 | + message: status+msg, | ||
| 280 | + type: "error" | ||
| 281 | + }); | ||
| 269 | }else { | 282 | }else { |
| 270 | alert(error); | 283 | alert(error); |
| 271 | } | 284 | } |
| @@ -300,14 +313,16 @@ | @@ -300,14 +313,16 @@ | ||
| 300 | * @param row 为这行的数据对象 | 313 | * @param row 为这行的数据对象 |
| 301 | */ | 314 | */ |
| 302 | handleEdit: function (index, row) { | 315 | handleEdit: function (index, row) { |
| 303 | - this.editFormVisible = true; | ||
| 304 | - this.editForm = Object.assign({}, row); | ||
| 305 | - this.getdepartmentNames(); | 316 | + this.addFormVisible = true; |
| 317 | + this.dialogStatus= 'update', | ||
| 318 | + this.addForm = Object.assign({}, row); | ||
| 319 | + // this.getdepartmentNames(); | ||
| 306 | }, | 320 | }, |
| 307 | setPerm: function (index, row) { | 321 | setPerm: function (index, row) { |
| 322 | + this.PermFormVisible = true; | ||
| 323 | + this.getPermList(); | ||
| 308 | var _this = this; | 324 | var _this = this; |
| 309 | this.permIds = []; | 325 | this.permIds = []; |
| 310 | - this.PermFormVisible = true; | ||
| 311 | this.permForm = Object.assign({}, row); | 326 | this.permForm = Object.assign({}, row); |
| 312 | let rolePerms = this.permForm.permissions; | 327 | let rolePerms = this.permForm.permissions; |
| 313 | if (util.checkNull(rolePerms)){ | 328 | if (util.checkNull(rolePerms)){ |
| @@ -317,31 +332,47 @@ | @@ -317,31 +332,47 @@ | ||
| 317 | } | 332 | } |
| 318 | }); | 333 | }); |
| 319 | } | 334 | } |
| 320 | - this.getPermList(); | 335 | + |
| 336 | + this.$nextTick(() => { | ||
| 337 | + | ||
| 338 | + //反向适配 | ||
| 339 | + this.$refs.tree.setCheckedKeys(this.permIds); | ||
| 340 | + }); | ||
| 321 | }, | 341 | }, |
| 322 | //显示新增界面,每次点开初始化数据 | 342 | //显示新增界面,每次点开初始化数据 |
| 323 | - handleAdd: function () { | 343 | + handleAdd: function (index,row) { |
| 324 | this.addFormVisible = true; | 344 | this.addFormVisible = true; |
| 345 | + this.dialogStatus= 'create'; | ||
| 325 | this.addForm = { | 346 | this.addForm = { |
| 326 | - username: '', | ||
| 327 | - password: '', | ||
| 328 | - sex: 1, | ||
| 329 | - address: '', | ||
| 330 | - realname: '', | ||
| 331 | - email: '', | ||
| 332 | - mobilephone: '', | ||
| 333 | - age: 1 | 347 | + description: '', |
| 348 | + roleName: '', | ||
| 349 | + roleSign: 1, | ||
| 350 | + departmentId:'', | ||
| 351 | + type: '', | ||
| 352 | + businessLicense: '', | ||
| 353 | + customsRegCode: '', | ||
| 354 | + mqcode: '', | ||
| 355 | + parentid: 0 | ||
| 356 | + | ||
| 334 | }; | 357 | }; |
| 335 | - this.getdepartmentNames(); | 358 | + //如果新增下级 |
| 359 | + if(util.checkNull(row)){ | ||
| 360 | + //传递上级ID | ||
| 361 | + let parentRole = Object.assign({}, row); | ||
| 362 | + this.addForm.parentid = parentRole.roleId; | ||
| 363 | + this.addForm.parentName = parentRole.roleName; | ||
| 364 | + } | ||
| 365 | + | ||
| 366 | +// this.getdepartmentNames(); | ||
| 336 | }, | 367 | }, |
| 337 | //编辑 | 368 | //编辑 |
| 338 | editSubmit: function () { | 369 | editSubmit: function () { |
| 339 | - this.$refs.editForm.validate((valid) => { | 370 | + this.$refs.addForm.validate((valid) => { |
| 340 | if (valid) { | 371 | if (valid) { |
| 341 | this.$confirm('确认提交吗?', '提示', {}).then(() => { | 372 | this.$confirm('确认提交吗?', '提示', {}).then(() => { |
| 342 | - this.editLoading = true; | 373 | + this.addLoading = true; |
| 343 | //NProgress.start(); | 374 | //NProgress.start(); |
| 344 | - let para = Object.assign({}, this.editForm); | 375 | + let para = Object.assign({}, this.addForm); |
| 345 | //不需要提交的 去掉,后端不好接收 | 376 | //不需要提交的 去掉,后端不好接收 |
| 346 | para.authorities = null; | 377 | para.authorities = null; |
| 347 | para.permissions = null; | 378 | para.permissions = null; |
| @@ -354,8 +385,8 @@ | @@ -354,8 +385,8 @@ | ||
| 354 | 式; | 385 | 式; |
| 355 | */ | 386 | */ |
| 356 | /*moment 安装 npm install moment --save*/ | 387 | /*moment 安装 npm install moment --save*/ |
| 357 | - para.creattime = moment(para.creattime).format('YYYY-MM-DD HH:mm:ss'); | ||
| 358 | - this.editLoading = false; | 388 | + // para.creattime = moment(para.creattime).format('YYYY-MM-DD HH:mm:ss'); |
| 389 | + this.addLoading = false; | ||
| 359 | edit(para).then((res) => { | 390 | edit(para).then((res) => { |
| 360 | 391 | ||
| 361 | //NProgress.done(); | 392 | //NProgress.done(); |
| @@ -363,8 +394,8 @@ | @@ -363,8 +394,8 @@ | ||
| 363 | message: '提交成功', | 394 | message: '提交成功', |
| 364 | type: 'success' | 395 | type: 'success' |
| 365 | }); | 396 | }); |
| 366 | - this.$refs['editForm'].resetFields(); | ||
| 367 | - this.editFormVisible = false; | 397 | + this.$refs['addForm'].resetFields(); |
| 398 | + this.addFormVisible = false; | ||
| 368 | this.getRoles(); | 399 | this.getRoles(); |
| 369 | }).catch(error => alert(error)); | 400 | }).catch(error => alert(error)); |
| 370 | }); | 401 | }); |
| @@ -403,7 +434,7 @@ | @@ -403,7 +434,7 @@ | ||
| 403 | //NProgress.start(); | 434 | //NProgress.start(); |
| 404 | let role = Object.assign({}, this.permForm); | 435 | let role = Object.assign({}, this.permForm); |
| 405 | let roleId = role.roleId; | 436 | let roleId = role.roleId; |
| 406 | - let permissionIds = this.permIds | 437 | + let permissionIds = this.$refs.tree.getCheckedKeys(); |
| 407 | let para = {roleId,permissionIds}; | 438 | let para = {roleId,permissionIds}; |
| 408 | updateRolePerm(para).then((res) => { | 439 | updateRolePerm(para).then((res) => { |
| 409 | this.addLoading = false; | 440 | this.addLoading = false; |
| @@ -446,6 +477,81 @@ | @@ -446,6 +477,81 @@ | ||
| 446 | }).catch(() => { | 477 | }).catch(() => { |
| 447 | 478 | ||
| 448 | }); | 479 | }); |
| 480 | + }, | ||
| 481 | + treeHandleCheckChange: function (data, checked, indeterminate) { | ||
| 482 | + if(checked) { | ||
| 483 | + this.permIds.push(data.permissionId); | ||
| 484 | + }else { | ||
| 485 | + this.permIds.splice(this.permIds.contains(data.permissionId),1); | ||
| 486 | + } | ||
| 487 | + console.log(data, checked, indeterminate); | ||
| 488 | + | ||
| 489 | + }, | ||
| 490 | + uniteParentSame(id,treeStatus){//当子节点全为未选中时父节点也变为未选中状态 | ||
| 491 | + let node = this.$refs.tree.getNode(permissionId);//获取当前节点的节点树 | ||
| 492 | + if (node.parent !== null && node.parent !== undefined) { | ||
| 493 | + let parentNode = node.parent.data;//获取当前节点的父节点树 | ||
| 494 | + if (parentNode != undefined){//判断父节点是否存在 | ||
| 495 | + for (let i = 0; i < parentNode.children.length; i++) { | ||
| 496 | + let checkedKeys = this.$refs.tree.getCheckedKeys(); | ||
| 497 | + let hafCheckedKeys = this.$refs.tree.getHalfCheckedKeys(); | ||
| 498 | + let selectNodes = checkedKeys.concat(hafCheckedKeys);//获取已选择树节点 | ||
| 499 | + let selected = selectNodes.indexOf(parentNode.children[i].permissionId); // -1当前节点的同级节点是否全部未选中 | ||
| 500 | + if (selected !== -1){ | ||
| 501 | + return; | ||
| 502 | + } | ||
| 503 | + } | ||
| 504 | + }else { | ||
| 505 | + return; | ||
| 506 | + } | ||
| 507 | + this.$refs.tree.setChecked(parentNode.permissionId, false);//修改节点为未选择 | ||
| 508 | + if(node.level>2){//判断是否是最上级节点 | ||
| 509 | + this.uniteParentSame(parentNode.permissionId,treeStatus) | ||
| 510 | + } | ||
| 511 | + }else { | ||
| 512 | + return; | ||
| 513 | + } | ||
| 514 | + }, | ||
| 515 | + | ||
| 516 | + // 统一处理子节点为相同的勾选状态 | ||
| 517 | + uniteChildSame(treeList, isSelected){ | ||
| 518 | + this.$refs.tree.setChecked(treeList.permissionId, isSelected); | ||
| 519 | + if (treeList.children !== undefined){ | ||
| 520 | + for (let i = 0; i < treeList.children.length; i++) { | ||
| 521 | + this.uniteChildSame(treeList.children[i], isSelected) | ||
| 522 | + } | ||
| 523 | + } | ||
| 524 | + }, | ||
| 525 | + // 统一处理父节点为选中 | ||
| 526 | + selectedParent(currentObj){ | ||
| 527 | + let currentNode = this.$refs.tree.getNode(currentObj); | ||
| 528 | + if (currentNode.parent.key !== undefined) { | ||
| 529 | + this.$refs.tree.setChecked(currentNode.parent, true); | ||
| 530 | + this.selectedParent(currentNode.parent) | ||
| 531 | + } | ||
| 532 | + }, | ||
| 533 | + clickDeal: function (currentObj, treeStatus){ | ||
| 534 | + // 用于:父子节点严格互不关联时,父节点勾选变化时通知子节点同步变化,实现单向关联。 | ||
| 535 | + let selected = treeStatus.checkedKeys.indexOf(currentObj.permissionId); // -1未选中 | ||
| 536 | + // 选中 | ||
| 537 | + if (selected !== -1) { | ||
| 538 | + // 子节点只要被选中父节点就被选中 | ||
| 539 | + this.selectedParent(currentObj); | ||
| 540 | + // 统一处理子节点为相同的勾选状态 | ||
| 541 | + this.uniteChildSame(currentObj, true) | ||
| 542 | + } else { | ||
| 543 | + // 未选中 处理子节点全部未选中 | ||
| 544 | + if (currentObj.children !== undefined){ | ||
| 545 | + if (currentObj.children.length !== 0) { | ||
| 546 | + this.uniteChildSame(currentObj, false) | ||
| 547 | + } | ||
| 548 | + //放开时为当子节点全为未选中时父节点也变为未选中状态 注释后就是父节点不和子节点强制绑定 | ||
| 549 | + // this.uniteParentSame(currentObj.id,treeStatus)//当子节点全为未选中时父节点也变为未选中状态 | ||
| 550 | + } | ||
| 551 | + // else { | ||
| 552 | + // this.uniteParentSame(currentObj.id,treeStatus) | ||
| 553 | + // } | ||
| 554 | + } | ||
| 449 | } | 555 | } |
| 450 | }, | 556 | }, |
| 451 | mounted() { | 557 | mounted() { |
| @@ -19,44 +19,46 @@ | @@ -19,44 +19,46 @@ | ||
| 19 | </el-col> | 19 | </el-col> |
| 20 | 20 | ||
| 21 | <!--列表--> | 21 | <!--列表--> |
| 22 | - <el-table :data="users" highlight-current-row v-loading="listLoading" @selection-change="selsChange" style="width: 100%;"> | ||
| 23 | - <el-table-column type="selection" width="55"> | 22 | + <el-table :data="users" highlight-current-row border v-loading="listLoading" @selection-change="selsChange" |
| 23 | + style="width: 100%;"> | ||
| 24 | + <el-table-column type="selection" width="55" align="center"> | ||
| 24 | </el-table-column> | 25 | </el-table-column> |
| 25 | - <el-table-column type="index" width="60"> | 26 | + <!--<el-table-column type="index" width="60">--> |
| 27 | + <!--</el-table-column>--> | ||
| 28 | + <el-table-column prop="userId" label="ID" width="100" align="center" sortable> | ||
| 26 | </el-table-column> | 29 | </el-table-column> |
| 27 | - <el-table-column prop="userId" label="ID" width="100" sortable> | 30 | + <el-table-column prop="username" label="账号" width="120" align="center" sortable> |
| 28 | </el-table-column> | 31 | </el-table-column> |
| 29 | - <el-table-column prop="username" label="账号" width="120" sortable> | 32 | + <el-table-column prop="realname" label="姓名" width="120" align="center" sortable> |
| 30 | </el-table-column> | 33 | </el-table-column> |
| 31 | - <el-table-column prop="realname" label="姓名" width="120" sortable> | 34 | + <el-table-column prop="sex" label="性别" width="100" :formatter="formatSex" align="center" sortable> |
| 32 | </el-table-column> | 35 | </el-table-column> |
| 33 | - <el-table-column prop="sex" label="性别" width="100" :formatter="formatSex" sortable> | 36 | + <el-table-column prop="mobilephone" label="电话" width="130" align="center"> |
| 34 | </el-table-column> | 37 | </el-table-column> |
| 35 | - <el-table-column prop="mobilephone" label="电话" width="125"> | 38 | + <el-table-column prop="creattime" label="创建时间" width="175" align="center" sortable> |
| 36 | </el-table-column> | 39 | </el-table-column> |
| 37 | - <el-table-column prop="creattime" label="创建时间" width="170" sortable> | 40 | + <el-table-column prop="updatetime" label="更新时间" width="175" align="center" sortable> |
| 38 | </el-table-column> | 41 | </el-table-column> |
| 39 | - <el-table-column prop="updatetime" label="更新时间" width="170" sortable> | 42 | + <el-table-column prop="address" label="地址" min-width="180" align="center"> |
| 40 | </el-table-column> | 43 | </el-table-column> |
| 41 | - <el-table-column prop="address" label="地址" min-width="180"> | 44 | + <el-table-column prop="email" label="Email" min-width="180" align="center"> |
| 42 | </el-table-column> | 45 | </el-table-column> |
| 43 | - <el-table-column prop="email" label="Email" min-width="180"> | 46 | + <el-table-column prop="state" label="启用" width="100" :formatter="formatState" align="center" sortable> |
| 44 | </el-table-column> | 47 | </el-table-column> |
| 45 | - <el-table-column prop="state" label="启用" width="100" :formatter="formatState" sortable> | ||
| 46 | - </el-table-column> | ||
| 47 | - <el-table-column label="操作" width="250"> | 48 | + <el-table-column label="操作" width="300px" fixed="right" align="center"> |
| 48 | <template slot-scope="scope"> | 49 | <template slot-scope="scope"> |
| 49 | - <el-button size="small" @click="roleEdit(scope.$index, scope.row)">权限配置</el-button> | ||
| 50 | - <el-button size="small" @click="handleEdit(scope.$index, scope.row)">编辑</el-button> | ||
| 51 | - <el-button type="danger" size="small" @click="handleDel(scope.$index, scope.row)">删除</el-button> | 50 | + <el-button type="primary" icon="el-icon-setting" size="small" @click="roleEdit(scope.$index, scope.row)">角色配置</el-button> |
| 51 | + <el-button size="small" type="success" icon="el-icon-check" @click="handleEdit(scope.$index, scope.row)">编辑</el-button> | ||
| 52 | + <el-button type="danger" icon="el-icon-delete" size="small" @click="handleDel(scope.$index, scope.row)">删除</el-button> | ||
| 52 | </template> | 53 | </template> |
| 53 | </el-table-column> | 54 | </el-table-column> |
| 54 | </el-table> | 55 | </el-table> |
| 55 | 56 | ||
| 56 | <!--工具条--> | 57 | <!--工具条--> |
| 57 | <el-col :span="24" class="toolbar"> | 58 | <el-col :span="24" class="toolbar"> |
| 58 | - <el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button> | ||
| 59 | - <el-pagination layout="total, prev, pager, next" @current-change="handleCurrentChange" :page-size="10" :total="total" style="float:right;"> | 59 | + <el-button type="danger" icon="el-icon-delete" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button> |
| 60 | + <el-pagination layout="total, prev, pager, next" @current-change="handleCurrentChange" :page-size="10" | ||
| 61 | + :total="total" style="float:right;"> | ||
| 60 | </el-pagination> | 62 | </el-pagination> |
| 61 | </el-col> | 63 | </el-col> |
| 62 | 64 | ||
| @@ -69,9 +71,9 @@ | @@ -69,9 +71,9 @@ | ||
| 69 | <el-form-item label="账号"> | 71 | <el-form-item label="账号"> |
| 70 | <span>{{editForm.username}}</span> | 72 | <span>{{editForm.username}}</span> |
| 71 | </el-form-item> | 73 | </el-form-item> |
| 72 | - <el-form-item label="密码" prop="password"> | ||
| 73 | - <el-input v-model="editForm.password" auto-complete="off" type="password" show-password></el-input> | ||
| 74 | - </el-form-item> | 74 | +<!-- <el-form-item label="密码" prop="password">--> |
| 75 | +<!-- <el-input v-model="editForm.password" auto-complete="off" type="password" show-password></el-input>--> | ||
| 76 | +<!-- </el-form-item>--> | ||
| 75 | <el-form-item label="姓名" prop="realname"> | 77 | <el-form-item label="姓名" prop="realname"> |
| 76 | <el-input v-model="editForm.realname" auto-complete="off"></el-input> | 78 | <el-input v-model="editForm.realname" auto-complete="off"></el-input> |
| 77 | </el-form-item> | 79 | </el-form-item> |
| @@ -83,8 +85,8 @@ | @@ -83,8 +85,8 @@ | ||
| 83 | </el-form-item> | 85 | </el-form-item> |
| 84 | <el-form-item label="性别"> | 86 | <el-form-item label="性别"> |
| 85 | <el-radio-group v-model="editForm.sex"> | 87 | <el-radio-group v-model="editForm.sex"> |
| 86 | - <el-radio class="radio" label="1" >男</el-radio> | ||
| 87 | - <el-radio class="radio" label="0" >女</el-radio> | 88 | + <el-radio class="radio" label="1">男</el-radio> |
| 89 | + <el-radio class="radio" label="0">女</el-radio> | ||
| 88 | </el-radio-group> | 90 | </el-radio-group> |
| 89 | </el-form-item> | 91 | </el-form-item> |
| 90 | <el-form-item label="年龄"> | 92 | <el-form-item label="年龄"> |
| @@ -98,8 +100,8 @@ | @@ -98,8 +100,8 @@ | ||
| 98 | </el-form-item> | 100 | </el-form-item> |
| 99 | <el-form-item label="启用"> | 101 | <el-form-item label="启用"> |
| 100 | <el-radio-group v-model="editForm.state"> | 102 | <el-radio-group v-model="editForm.state"> |
| 101 | - <el-radio class="radio" label="true" >是</el-radio> | ||
| 102 | - <el-radio class="radio" label="false" >否</el-radio> | 103 | + <el-radio class="radio" label="true">是</el-radio> |
| 104 | + <el-radio class="radio" label="false">否</el-radio> | ||
| 103 | </el-radio-group> | 105 | </el-radio-group> |
| 104 | </el-form-item> | 106 | </el-form-item> |
| 105 | <el-form-item lable="头像"> | 107 | <el-form-item lable="头像"> |
| @@ -126,7 +128,7 @@ | @@ -126,7 +128,7 @@ | ||
| 126 | <el-dialog title="新增" :visible.sync="addFormVisible" :close-on-click-modal="false"> | 128 | <el-dialog title="新增" :visible.sync="addFormVisible" :close-on-click-modal="false"> |
| 127 | <el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm"> | 129 | <el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm"> |
| 128 | <el-form-item label="账号" prop="username"> | 130 | <el-form-item label="账号" prop="username"> |
| 129 | - <el-input v-model="addForm.username"></el-input> | 131 | + <el-input v-model="addForm.username" aria-placeholder="用户名长度在5-11位,支持英文和数字"></el-input> |
| 130 | </el-form-item> | 132 | </el-form-item> |
| 131 | <el-form-item label="密码" prop="password"> | 133 | <el-form-item label="密码" prop="password"> |
| 132 | <el-input v-model="addForm.password" type="password"></el-input> | 134 | <el-input v-model="addForm.password" type="password"></el-input> |
| @@ -161,17 +163,18 @@ | @@ -161,17 +163,18 @@ | ||
| 161 | 163 | ||
| 162 | <!--权限设置--> | 164 | <!--权限设置--> |
| 163 | <el-dialog title="权限设置" :visible.sync="roleFormVisible" :close-on-click-modal="false"> | 165 | <el-dialog title="权限设置" :visible.sync="roleFormVisible" :close-on-click-modal="false"> |
| 164 | - <el-form :model="roleEditForm" label-width="80px" ref="roleEditForm" > | 166 | + <el-form :model="roleEditForm" label-width="80px" ref="roleEditForm"> |
| 165 | <el-form-item label="ID"> | 167 | <el-form-item label="ID"> |
| 166 | <span>{{roleEditForm.userId}}</span> | 168 | <span>{{roleEditForm.userId}}</span> |
| 167 | </el-form-item> | 169 | </el-form-item> |
| 168 | <el-form-item label="账号"> | 170 | <el-form-item label="账号"> |
| 169 | <span>{{roleEditForm.username}}</span> | 171 | <span>{{roleEditForm.username}}</span> |
| 170 | </el-form-item> | 172 | </el-form-item> |
| 171 | - <el-checkbox-group v-model="roleIds" size="small"> | ||
| 172 | - <el-checkbox-button v-for="role in roles" :label="role.roleId" :key="role.roleId" >{{role.description}}</el-checkbox-button> | ||
| 173 | - </el-checkbox-group> | 173 | + <el-tree :data="roles" :props="treeDefaultProps" default-expand-all show-checkbox highlight-current |
| 174 | + check-strictly node-key="roleId" ref="tree" @check-change="treeHandleCheckChange"> | ||
| 175 | + </el-tree> | ||
| 174 | </el-form> | 176 | </el-form> |
| 177 | + | ||
| 175 | <div slot="footer" class="dialog-footer"> | 178 | <div slot="footer" class="dialog-footer"> |
| 176 | <el-button @click.native="roleFormVisible = false">取消</el-button> | 179 | <el-button @click.native="roleFormVisible = false">取消</el-button> |
| 177 | <el-button type="primary" @click.native="roleEditSubmit" :loading="addLoading">提交</el-button> | 180 | <el-button type="primary" @click.native="roleEditSubmit" :loading="addLoading">提交</el-button> |
| @@ -183,9 +186,10 @@ | @@ -183,9 +186,10 @@ | ||
| 183 | <script> | 186 | <script> |
| 184 | import util from '../../common/js/util' | 187 | import util from '../../common/js/util' |
| 185 | import NProgress from 'nprogress' | 188 | import NProgress from 'nprogress' |
| 186 | - import { getUserList, removeUser, batchRemoveUser, editUser, addUser, setUserRole } from '../../api/user'; | ||
| 187 | - import { getList} from '../../api/role_api'; | 189 | + import {getUserList, removeUser, batchRemoveUser, editUser, addUser, setUserRole} from '../../api/user'; |
| 190 | + import {getList} from '../../api/role_api'; | ||
| 188 | import moment from 'moment' | 191 | import moment from 'moment' |
| 192 | + | ||
| 189 | export default { | 193 | export default { |
| 190 | data() { | 194 | data() { |
| 191 | return { | 195 | return { |
| @@ -193,6 +197,10 @@ | @@ -193,6 +197,10 @@ | ||
| 193 | userName: '', | 197 | userName: '', |
| 194 | realName: '' | 198 | realName: '' |
| 195 | }, | 199 | }, |
| 200 | + treeDefaultProps: { | ||
| 201 | + children: 'children', | ||
| 202 | + label: 'roleName', | ||
| 203 | + }, | ||
| 196 | users: [], | 204 | users: [], |
| 197 | total: 0, | 205 | total: 0, |
| 198 | pageNum: 1, | 206 | pageNum: 1, |
| @@ -205,7 +213,10 @@ | @@ -205,7 +213,10 @@ | ||
| 205 | editLoading: false, | 213 | editLoading: false, |
| 206 | editFormRules: { | 214 | editFormRules: { |
| 207 | name: [ | 215 | name: [ |
| 208 | - { required: true, message: '请输入姓名', trigger: 'blur' } | 216 | + {required: true, message: '请输入姓名', trigger: 'blur'} |
| 217 | + ], | ||
| 218 | + mobilephone: [ | ||
| 219 | + {required: true, message: '请输入手机号码', trigger: ['blur', 'change']} | ||
| 209 | ] | 220 | ] |
| 210 | }, | 221 | }, |
| 211 | //编辑界面数据 | 222 | //编辑界面数据 |
| @@ -213,21 +224,27 @@ | @@ -213,21 +224,27 @@ | ||
| 213 | userId: 1, | 224 | userId: 1, |
| 214 | username: '', | 225 | username: '', |
| 215 | password: '', | 226 | password: '', |
| 216 | - sex: 1, | ||
| 217 | - creattime: '', | 227 | + sex: '1', |
| 228 | + creattime: undefined, | ||
| 218 | address: '', | 229 | address: '', |
| 219 | realname: '', | 230 | realname: '', |
| 220 | email: '', | 231 | email: '', |
| 221 | mobilephone: '', | 232 | mobilephone: '', |
| 222 | - state: 'true' | 233 | + state: true |
| 223 | }, | 234 | }, |
| 224 | 235 | ||
| 225 | addFormVisible: false,//新增界面是否显示 | 236 | addFormVisible: false,//新增界面是否显示 |
| 226 | addLoading: false, | 237 | addLoading: false, |
| 227 | addFormRules: { | 238 | addFormRules: { |
| 228 | username: [ | 239 | username: [ |
| 229 | - { required: true, message: '请输入姓名', trigger: 'blur' } | ||
| 230 | - ] | 240 | + {required: true, message: '请输入姓名,用户名长度在5-11位,支持英文和数字', trigger: 'blur'}, |
| 241 | + ], | ||
| 242 | + password: [ | ||
| 243 | + {required: true, message: '请输入密码,用户名长度在6-18位,支持英文和数字和非空字符', trigger: 'blur'} | ||
| 244 | + ], | ||
| 245 | + mobilephone: [ | ||
| 246 | + {required: true, message: '请输入手机号码', trigger: ['blur', 'change']}, | ||
| 247 | + ], | ||
| 231 | }, | 248 | }, |
| 232 | //用户角色配置 | 249 | //用户角色配置 |
| 233 | roleFormVisible: false, | 250 | roleFormVisible: false, |
| @@ -265,7 +282,7 @@ | @@ -265,7 +282,7 @@ | ||
| 265 | this.getUsers(); | 282 | this.getUsers(); |
| 266 | }, | 283 | }, |
| 267 | //获取用户列表 | 284 | //获取用户列表 |
| 268 | - getUsers:function() { | 285 | + getUsers: function () { |
| 269 | let para = { | 286 | let para = { |
| 270 | pageNum: this.pageNum, | 287 | pageNum: this.pageNum, |
| 271 | pageSize: this.pageSize, | 288 | pageSize: this.pageSize, |
| @@ -292,7 +309,7 @@ | @@ -292,7 +309,7 @@ | ||
| 292 | }).then(() => { | 309 | }).then(() => { |
| 293 | this.listLoading = true; | 310 | this.listLoading = true; |
| 294 | //NProgress.start(); | 311 | //NProgress.start(); |
| 295 | - let para = { userId: row.userId }; | 312 | + let para = {userId: row.userId}; |
| 296 | removeUser(para).then((res) => { | 313 | removeUser(para).then((res) => { |
| 297 | this.listLoading = false; | 314 | this.listLoading = false; |
| 298 | //NProgress.done(); | 315 | //NProgress.done(); |
| @@ -317,16 +334,24 @@ | @@ -317,16 +334,24 @@ | ||
| 317 | this.editForm = Object.assign({}, row); | 334 | this.editForm = Object.assign({}, row); |
| 318 | }, | 335 | }, |
| 319 | roleEdit: function (index, row) { | 336 | roleEdit: function (index, row) { |
| 337 | + this.roleFormVisible = true; | ||
| 338 | + this.getRoles(); | ||
| 320 | var _this = this; | 339 | var _this = this; |
| 321 | _this.roleIds = []; | 340 | _this.roleIds = []; |
| 322 | this.roleEditForm = Object.assign({}, row); | 341 | this.roleEditForm = Object.assign({}, row); |
| 323 | - let userRoles = this.roleEditForm.roles; | ||
| 324 | - if (util.checkNull(userRoles)){ | ||
| 325 | - userRoles.forEach(function (role,v_index,v_arr) { | 342 | + let roles = this.roleEditForm.roles; |
| 343 | + | ||
| 344 | + if (util.checkNull(roles)) { | ||
| 345 | + roles.forEach(function (role, v_index, v_arr) { | ||
| 346 | + if (util.checkNull(role)) { | ||
| 326 | _this.roleIds[v_index] = role.roleId; | 347 | _this.roleIds[v_index] = role.roleId; |
| 348 | + } | ||
| 327 | }); | 349 | }); |
| 328 | } | 350 | } |
| 329 | - this.getRoles(); | 351 | + this.$nextTick(() => { |
| 352 | + //反向适配 | ||
| 353 | + this.$refs.tree.setCheckedKeys(this.roleIds); | ||
| 354 | + }); | ||
| 330 | }, | 355 | }, |
| 331 | getRoles() { | 356 | getRoles() { |
| 332 | let para = { | 357 | let para = { |
| @@ -336,18 +361,18 @@ | @@ -336,18 +361,18 @@ | ||
| 336 | NProgress.start(); | 361 | NProgress.start(); |
| 337 | getList(para).then((res) => { | 362 | getList(para).then((res) => { |
| 338 | this.roles = res.data.list; | 363 | this.roles = res.data.list; |
| 339 | - this.roleFormVisible = true; | ||
| 340 | NProgress.done(); | 364 | NProgress.done(); |
| 341 | }).catch((error) => { | 365 | }).catch((error) => { |
| 342 | - if(null!= error.response && error.response!==undefined){ | ||
| 343 | - let status= error.response.status; | 366 | + if (null != error.response && error.response !== undefined) { |
| 367 | + let status = error.response.status; | ||
| 344 | let msg = error.response.statusText; | 368 | let msg = error.response.statusText; |
| 345 | - alert(status+msg); | ||
| 346 | - }else { | 369 | + alert(status + msg); |
| 370 | + } else { | ||
| 347 | alert(error); | 371 | alert(error); |
| 348 | } | 372 | } |
| 349 | }); | 373 | }); |
| 350 | 374 | ||
| 375 | + | ||
| 351 | }, | 376 | }, |
| 352 | //显示新增界面,每次点开初始化数据 | 377 | //显示新增界面,每次点开初始化数据 |
| 353 | handleAdd: function () { | 378 | handleAdd: function () { |
| @@ -370,11 +395,11 @@ | @@ -370,11 +395,11 @@ | ||
| 370 | this.$confirm('确认提交吗?', '提示', {}).then(() => { | 395 | this.$confirm('确认提交吗?', '提示', {}).then(() => { |
| 371 | this.editLoading = true; | 396 | this.editLoading = true; |
| 372 | //NProgress.start(); | 397 | //NProgress.start(); |
| 373 | - let para = Object.assign({}, this.editForm); | 398 | + // let para = Object.assign({}, this.editForm); |
| 374 | //不需要提交的 去掉,后端不好接收 | 399 | //不需要提交的 去掉,后端不好接收 |
| 375 | - para.authorities = null; | ||
| 376 | - para.permissions = null; | ||
| 377 | - para.roles = null; | 400 | + this.editForm.authorities = null; |
| 401 | + this.editForm.permissions = null; | ||
| 402 | + this.editForm.roles = null; | ||
| 378 | // para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd'); | 403 | // para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd'); |
| 379 | /* | 404 | /* |
| 380 | 查询之后格式this.filters.column.create_start_date中日期发生变化; | 405 | 查询之后格式this.filters.column.create_start_date中日期发生变化; |
| @@ -385,7 +410,7 @@ | @@ -385,7 +410,7 @@ | ||
| 385 | /*moment 安装 npm install moment --save*/ | 410 | /*moment 安装 npm install moment --save*/ |
| 386 | // para.creattime = moment(para.creattime).format('YYYY-MM-DD HH:mm:ss'); | 411 | // para.creattime = moment(para.creattime).format('YYYY-MM-DD HH:mm:ss'); |
| 387 | this.editLoading = false; | 412 | this.editLoading = false; |
| 388 | - editUser(para).then((res) => { | 413 | + editUser(this.editForm).then((res) => { |
| 389 | 414 | ||
| 390 | //NProgress.done(); | 415 | //NProgress.done(); |
| 391 | this.$message({ | 416 | this.$message({ |
| @@ -420,7 +445,10 @@ | @@ -420,7 +445,10 @@ | ||
| 420 | this.getUsers(); | 445 | this.getUsers(); |
| 421 | }).catch(error => { | 446 | }).catch(error => { |
| 422 | this.addLoading = false; | 447 | this.addLoading = false; |
| 423 | - alert(error.message); | 448 | + this.$message({ |
| 449 | + message: error.message, | ||
| 450 | + type: 'error' | ||
| 451 | + }); | ||
| 424 | }); | 452 | }); |
| 425 | }); | 453 | }); |
| 426 | } | 454 | } |
| @@ -437,7 +465,7 @@ | @@ -437,7 +465,7 @@ | ||
| 437 | }).then(() => { | 465 | }).then(() => { |
| 438 | this.listLoading = true; | 466 | this.listLoading = true; |
| 439 | //NProgress.start(); | 467 | //NProgress.start(); |
| 440 | - let para = { ids: ids }; | 468 | + let para = {ids: ids}; |
| 441 | batchRemoveUser(para).then((res) => { | 469 | batchRemoveUser(para).then((res) => { |
| 442 | this.listLoading = false; | 470 | this.listLoading = false; |
| 443 | //NProgress.done(); | 471 | //NProgress.done(); |
| @@ -455,11 +483,14 @@ | @@ -455,11 +483,14 @@ | ||
| 455 | this.$confirm('确认提交吗?', '提示', {}).then(() => { | 483 | this.$confirm('确认提交吗?', '提示', {}).then(() => { |
| 456 | // this.editLoading = true; | 484 | // this.editLoading = true; |
| 457 | let userId = this.roleEditForm.userId; | 485 | let userId = this.roleEditForm.userId; |
| 458 | - let roleIds = this.roleIds; | ||
| 459 | - let para = {userId,roleIds}; | 486 | + let roleIds = this.$refs.tree.getCheckedKeys(); |
| 487 | + let para = {userId, roleIds}; | ||
| 460 | setUserRole(para).then((res) => { | 488 | setUserRole(para).then((res) => { |
| 461 | - if (res.status ===200) { | ||
| 462 | - alert("ok"); | 489 | + if (res.status === 200) { |
| 490 | + this.$message({ | ||
| 491 | + message: '岗位设置成功', | ||
| 492 | + type: 'success' | ||
| 493 | + }); | ||
| 463 | } | 494 | } |
| 464 | this.getUsers(); | 495 | this.getUsers(); |
| 465 | this.roleFormVisible = false; | 496 | this.roleFormVisible = false; |
| @@ -469,11 +500,20 @@ | @@ -469,11 +500,20 @@ | ||
| 469 | console.log(para); | 500 | console.log(para); |
| 470 | }); | 501 | }); |
| 471 | }, | 502 | }, |
| 472 | - handleAvatarSuccess: function(response){ | ||
| 473 | - this.faceImageUrl = 'http://127.0.0.1:7003/'+response.data; | 503 | + handleAvatarSuccess: function (response) { |
| 504 | + this.faceImageUrl = 'http://127.0.0.1:7003/' + response.data; | ||
| 474 | }, | 505 | }, |
| 475 | beforeAvatarUpload: function () { | 506 | beforeAvatarUpload: function () { |
| 476 | 507 | ||
| 508 | + }, | ||
| 509 | + treeHandleCheckChange: function (data, checked, indeterminate) { | ||
| 510 | + if (checked) { | ||
| 511 | + this.roleIds.push(data.roleId); | ||
| 512 | + } else { | ||
| 513 | + this.roleIds.splice(this.roleIds.contains(data.roleId), 1); | ||
| 514 | + } | ||
| 515 | +// console.log(data, checked, indeterminate); | ||
| 516 | + console.log(this.roleIds); | ||
| 477 | } | 517 | } |
| 478 | }, | 518 | }, |
| 479 | mounted() { | 519 | mounted() { |
static/images/air-banner.png
0 → 100644
82.3 KB
-
请 注册 或 登录 后发表评论