作者 王勇

修改界面

@@ -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 axios from 'axios' 1 import axios from 'axios'
2 2
3 -let base = '/hqpt-user-center/come_car'; 3 +let base = '/cloud-user-center/come_car';
4 4
5 5
6 6
1 import axios from 'axios' 1 import axios from 'axios'
2 2
3 -let base = '/hqpt-user-center/key'; 3 +let base = '/cloud-user-center/key';
4 4
5 5
6 6
1 import axios from 'axios' 1 import axios from 'axios'
2 2
3 -let base = '/hqpt-user-center/maintain'; 3 +let base = '/cloud-user-center/maintain';
4 4
5 5
6 6
1 import axios from 'axios' 1 import axios from 'axios'
2 2
3 -let base = '/hqpt-user-center/on_duty'; 3 +let base = '/cloud-user-center/on_duty';
4 4
5 5
6 6
1 import axios from 'axios' 1 import axios from 'axios'
2 2
3 -let base = '/hqpt-user-center/inspection'; 3 +let base = '/cloud-user-center/inspection';
4 4
5 5
6 6
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
1 import axios from 'axios' 1 import axios from 'axios'
2 2
3 -let base = '/hqpt-user-center/water_stations_patrol'; 3 +let base = '/cloud-user-center/water_stations_patrol';
4 4
5 5
6 6
@@ -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() {