作者 朱兆平

用户登录适配权限目录问题,登陆后已适配,一刷新 vue router就初始化为以前的了 未解决

@@ -23,11 +23,19 @@ module.exports = { @@ -23,11 +23,19 @@ module.exports = {
23 }, 23 },
24 dev: { 24 dev: {
25 env: require('./dev.env'), 25 env: require('./dev.env'),
26 - port: 8081, 26 + port: 8082,
27 autoOpenBrowser: true, 27 autoOpenBrowser: true,
28 assetsSubDirectory: 'static', 28 assetsSubDirectory: 'static',
29 assetsPublicPath: '/', 29 assetsPublicPath: '/',
30 - proxyTable: {}, 30 + proxyTable: {
  31 + '/api':{
  32 + target: 'http://127.0.0.1:7003',//设置你调用的接口域名和端口号 别忘了加http
  33 + changeOrigin: true,
  34 + pathRewrite: {
  35 + '^/api': '/'//这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add’即可
  36 + }
  37 + }
  38 + },
31 // CSS Sourcemaps off by default because relative paths are "buggy" 39 // CSS Sourcemaps off by default because relative paths are "buggy"
32 // with this option, according to the CSS-Loader README 40 // with this option, according to the CSS-Loader README
33 // (https://github.com/webpack/css-loader#sourcemaps) 41 // (https://github.com/webpack/css-loader#sourcemaps)
@@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
16 "eslint": "^5.14.1", 16 "eslint": "^5.14.1",
17 "font-awesome": "^4.7.0", 17 "font-awesome": "^4.7.0",
18 "install": "^0.12.2", 18 "install": "^0.12.2",
  19 + "moment": "^2.24.0",
19 "npm": "^6.8.0", 20 "npm": "^6.8.0",
20 "nprogress": "^0.2.0", 21 "nprogress": "^0.2.0",
21 "vue": "^2.2.2", 22 "vue": "^2.2.2",
1 -import axios from 'axios'; 1 +import axios from 'axios'
  2 +import Vue from 'vue'
2 3
3 -let base = 'http://127.0.0.1:7003';  
4 -axios.defaults.baseURL = 'http://127.0.0.1:7003'; 4 +// let base = 'http://127.0.0.1:7003';
  5 +axios.defaults.baseURL = 'http://localhost:8082/api';
  6 +Vue.prototype.$http = axios;
5 7
6 export const requestLogin = params => { 8 export const requestLogin = params => {
7 return axios({ 9 return axios({
8 method: 'POST', 10 method: 'POST',
9 url: '/login', 11 url: '/login',
10 data: params, 12 data: params,
  13 + withCredentials: true,
11 transformRequest: [function (data) { 14 transformRequest: [function (data) {
12 // Do whatever you want to transform the data 15 // Do whatever you want to transform the data
13 let ret = '' 16 let ret = ''
@@ -23,15 +26,45 @@ export const requestLogin = params => { @@ -23,15 +26,45 @@ export const requestLogin = params => {
23 }) 26 })
24 // return axios.post(`${base}/login`, params).then(res => res.data); 27 // return axios.post(`${base}/login`, params).then(res => res.data);
25 }; 28 };
  29 +export const getuserMenus = params => { return axios.get(`/perm/userMenus`, { params: params }); };
26 30
27 -export const getUserList = params => { return axios.get(`${base}/user/list`, { params: params }); }; 31 +export const getUserList = params => { return axios.get(`/user/list`, { params: params }); };
28 32
29 -export const getUserListPage = params => { return axios.get(`${base}/user/list`, { params: params }); }; 33 +export const getUserListPage = params => { return axios({
  34 + method: 'GET',
  35 + url: `/user/list`,
  36 + data: params,
  37 + headers: {
  38 + 'Content-Type': 'application/json;charset=UTF-8'
  39 + }
  40 + // withCredentials: true
  41 +}) };
30 42
31 -export const removeUser = params => { return axios.get(`${base}/user/remove`, { params: params }); }; 43 +export const removeUser = params => { return axios({
  44 + method: 'DELETE',
  45 + url: `/user/del`,
  46 + data: params,
  47 + headers: {
  48 + 'Content-Type': 'application/json;charset=UTF-8'
  49 + }
  50 +})};
32 51
33 export const batchRemoveUser = params => { return axios.get(`${base}/user/batchremove`, { params: params }); }; 52 export const batchRemoveUser = params => { return axios.get(`${base}/user/batchremove`, { params: params }); };
34 53
35 -export const editUser = params => { return axios.get(`${base}/user/edit`, { params: params }); }; 54 +export const editUser = params => { return axios({
  55 + method: 'PUT',
  56 + url: `/user/edit`,
  57 + data: params,
  58 + headers: {
  59 + 'Content-Type': 'application/json;charset=UTF-8'
  60 + }
  61 +})};
36 62
37 -export const addUser = params => { return axios.get(`${base}/user/add`, { params: params }); };  
  63 +export const addUser = params => { return axios({
  64 + method: 'POST',
  65 + url: `/user/add`,
  66 + data: params,
  67 + headers: {
  68 + 'Content-Type': 'application/json;charset=UTF-8'
  69 + }
  70 +})};
  1 +import axios from 'axios'
  2 +
  3 +axios.defaults.baseURL = 'http://localhost:8082/api';
  4 +let base = axios.defaults.baseURL+'/perm';
  5 +
  6 +
  7 +export const getList = params => { return axios.get(`${base}/list`, { params: params }); };
  8 +
  9 +
  10 +export const remove = params => { return axios({
  11 + method: 'DELETE',
  12 + url: `${base}/del`,
  13 + data: params,
  14 + headers: {
  15 + 'Content-Type': 'application/json;charset=UTF-8'
  16 + }
  17 +})};
  18 +
  19 +//批量删除
  20 +export const batchRemove = params => { return axios.get(`${base}/user/batchremove`, { params: params }); };
  21 +
  22 +export const edit = params => { return axios({
  23 + method: 'PUT',
  24 + url: `${base}/edit`,
  25 + data: params,
  26 + headers: {
  27 + 'Content-Type': 'application/json;charset=UTF-8'
  28 + }
  29 +})};
  30 +
  31 +export const add = params => { return axios({
  32 + method: 'POST',
  33 + url: `${base}/add`,
  34 + data: params,
  35 + headers: {
  36 + 'Content-Type': 'application/json;charset=UTF-8'
  37 + }
  38 +})};
  1 +import axios from 'axios'
  2 +
  3 +axios.defaults.baseURL = 'http://localhost:8082/api';
  4 +let base = axios.defaults.baseURL+'/role';
  5 +
  6 +
  7 +export const getList = params => { return axios.get(`${base}/list`, { params: params }); };
  8 +
  9 +
  10 +export const remove = params => { return axios({
  11 + method: 'DELETE',
  12 + url: `${base}/del`,
  13 + data: params,
  14 + headers: {
  15 + 'Content-Type': 'application/json;charset=UTF-8'
  16 + }
  17 +})};
  18 +
  19 +//批量删除
  20 +export const batchRemove = params => { return axios.get(`${base}/user/batchremove`, { params: params }); };
  21 +
  22 +export const edit = params => { return axios({
  23 + method: 'PUT',
  24 + url: `${base}/edit`,
  25 + data: params,
  26 + headers: {
  27 + 'Content-Type': 'application/json;charset=UTF-8'
  28 + }
  29 +})};
  30 +
  31 +export const add = params => { return axios({
  32 + method: 'POST',
  33 + url: `${base}/add`,
  34 + data: params,
  35 + headers: {
  36 + 'Content-Type': 'application/json;charset=UTF-8'
  37 + }
  38 +})};
@@ -9,8 +9,17 @@ import store from './vuex/store' @@ -9,8 +9,17 @@ import store from './vuex/store'
9 import Vuex from 'vuex' 9 import Vuex from 'vuex'
10 //import NProgress from 'nprogress' 10 //import NProgress from 'nprogress'
11 //import 'nprogress/nprogress.css' 11 //import 'nprogress/nprogress.css'
12 -import routes from './routes' 12 +import rout from './routes'
13 import Mock from './mock' 13 import Mock from './mock'
  14 +
  15 +
  16 +//定义一个全局过滤器实现日期格式化
  17 +Vue.filter('datefmt',function(input,fmtstring){
  18 +
  19 + return moment(input).format(fmtstring)
  20 +
  21 +})
  22 +
14 Mock.bootstrap(); 23 Mock.bootstrap();
15 import 'font-awesome/css/font-awesome.min.css' 24 import 'font-awesome/css/font-awesome.min.css'
16 25
@@ -21,16 +30,21 @@ Vue.use(Vuex) @@ -21,16 +30,21 @@ Vue.use(Vuex)
21 //NProgress.configure({ showSpinner: false }); 30 //NProgress.configure({ showSpinner: false });
22 31
23 const router = new VueRouter({ 32 const router = new VueRouter({
24 - routes 33 + routes:rout.routes
25 }) 34 })
26 - 35 +//判断本地存储的用户栏目列表是否存在,如果存在则加载路由
  36 +if(sessionStorage.getItem('menu')){
  37 + rout.setUserMenus(JSON.parse(sessionStorage.getItem('menu')));
  38 + router.options.routes = rout.routes
  39 +}
27 router.beforeEach((to, from, next) => { 40 router.beforeEach((to, from, next) => {
28 //NProgress.start(); 41 //NProgress.start();
29 if (to.path == '/login') { 42 if (to.path == '/login') {
30 sessionStorage.removeItem('user'); 43 sessionStorage.removeItem('user');
  44 + sessionStorage.removeItem('menu');
31 } 45 }
32 let user = JSON.parse(sessionStorage.getItem('user')); 46 let user = JSON.parse(sessionStorage.getItem('user'));
33 - if (!user && to.path != '/login') { 47 + if (!user && to.path != '/login' && !sessionStorage.getItem('menu')) {
34 next({ path: '/login' }) 48 next({ path: '/login' })
35 } else { 49 } else {
36 next() 50 next()
@@ -2,9 +2,12 @@ import Login from './views/Login.vue' @@ -2,9 +2,12 @@ import Login from './views/Login.vue'
2 import NotFound from './views/404.vue' 2 import NotFound from './views/404.vue'
3 import Home from './views/Home.vue' 3 import Home from './views/Home.vue'
4 import Main from './views/Main.vue' 4 import Main from './views/Main.vue'
5 -import Table from './views/nav1/Table.vue'  
6 -import Form from './views/nav1/Form.vue'  
7 -import user from './views/nav1/user.vue' 5 +// import Table from './views/nav1/Table.vue'
  6 +import Role from './views/nav1/role.vue'
  7 +import Perm from './views/nav1/perm.vue'
  8 +// import Form from './views/nav1/Form.vue'
  9 +
  10 +import User from './views/nav1/user.vue'
8 import Page4 from './views/nav2/Page4.vue' 11 import Page4 from './views/nav2/Page4.vue'
9 import Page5 from './views/nav2/Page5.vue' 12 import Page5 from './views/nav2/Page5.vue'
10 import Page6 from './views/nav3/Page6.vue' 13 import Page6 from './views/nav3/Page6.vue'
@@ -14,26 +17,36 @@ let routes = [ @@ -14,26 +17,36 @@ let routes = [
14 { 17 {
15 path: '/login', 18 path: '/login',
16 component: Login, 19 component: Login,
17 - name: '', 20 + name: '登录',
18 hidden: true 21 hidden: true
19 }, 22 },
20 { 23 {
21 path: '/404', 24 path: '/404',
22 component: NotFound, 25 component: NotFound,
23 - name: '', 26 + name: '错误',
24 hidden: true 27 hidden: true
25 }, 28 },
26 - // { path: '/main', component: Main },  
27 { 29 {
28 path: '/', 30 path: '/',
29 component: Home, 31 component: Home,
30 - name: '导航一',  
31 - iconCls: 'el-icon-message',//图标样式class 32 + name: '',
  33 + leaf: true,
  34 + iconCls: 'el-icon-menu',
32 children: [ 35 children: [
33 - { path: '/main', component: Main, name: '主页', hidden: false },  
34 - { path: '/table', component: Table, name: '用户管理' },  
35 - { path: '/form', component: Form, name: 'Form' },  
36 - { path: '/user', component: user, name: '列表' }, 36 + { path: '/main', component: Main, name: '首页', hidden: false },
  37 + ]
  38 + },
  39 + // { path: '/test', component: Main },
  40 + {
  41 + path: '/',
  42 + component: Home,
  43 + name: '用户管理',
  44 + iconCls: 'el-icon-setting',//图标样式class
  45 + children: [
  46 + { path: '/user', component: User, name: '用户管理' },
  47 + { path: '/role', component: Role, name: '角色管理' },
  48 + { path: '/perm', component: Perm, name: '权限管理' },
  49 +
37 ] 50 ]
38 }, 51 },
39 { 52 {
@@ -72,4 +85,10 @@ let routes = [ @@ -72,4 +85,10 @@ let routes = [
72 } 85 }
73 ]; 86 ];
74 87
75 -export default routes;  
  88 +let setUserMenus = function (list) {
  89 + routes = list;
  90 + let s= 1;
  91 +}
  92 +export default {
  93 + routes,setUserMenus
  94 +};
@@ -23,8 +23,7 @@ @@ -23,8 +23,7 @@
23 <el-col :span="24" class="main"> 23 <el-col :span="24" class="main">
24 <aside :class="collapsed?'menu-collapsed':'menu-expanded'"> 24 <aside :class="collapsed?'menu-collapsed':'menu-expanded'">
25 <!--导航菜单--> 25 <!--导航菜单-->
26 - <el-menu :default-active="$route.path" class="el-menu-vertical-demo" @open="handleopen" @close="handleclose" @select="handleselect"  
27 - unique-opened router v-show="!collapsed"> 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">
28 <template v-for="(item,index) in $router.options.routes" v-if="!item.hidden"> 27 <template v-for="(item,index) in $router.options.routes" v-if="!item.hidden">
29 <el-submenu :index="index+''" v-if="!item.leaf"> 28 <el-submenu :index="index+''" v-if="!item.leaf">
30 <template slot="title"><i :class="item.iconCls"></i>{{item.name}}</template> 29 <template slot="title"><i :class="item.iconCls"></i>{{item.name}}</template>
@@ -75,7 +74,7 @@ @@ -75,7 +74,7 @@
75 export default { 74 export default {
76 data() { 75 data() {
77 return { 76 return {
78 - sysName:'VUEADMIN', 77 + sysName:'流浪地球管理系统',
79 collapsed:false, 78 collapsed:false,
80 sysUserName: '', 79 sysUserName: '',
81 sysUserAvatar: '', 80 sysUserAvatar: '',
@@ -239,6 +238,9 @@ @@ -239,6 +238,9 @@
239 flex:0 0 230px; 238 flex:0 0 230px;
240 width: 230px; 239 width: 230px;
241 } 240 }
  241 + .menu-expanded ul{
  242 + width: 230px;
  243 + }
242 .content-container { 244 .content-container {
243 // background: #f1f2f7; 245 // background: #f1f2f7;
244 flex:1; 246 flex:1;
@@ -32,7 +32,8 @@ @@ -32,7 +32,8 @@
32 </template> 32 </template>
33 33
34 <script> 34 <script>
35 - import { requestLogin } from '../api/api'; 35 + import { requestLogin,getuserMenus } from '../api/api';
  36 + import routes from '../routes'
36 //import NProgress from 'nprogress' 37 //import NProgress from 'nprogress'
37 export default { 38 export default {
38 data() { 39 data() {
@@ -54,7 +55,8 @@ @@ -54,7 +55,8 @@
54 //{ validator: validaePass2 } 55 //{ validator: validaePass2 }
55 ] 56 ]
56 }, 57 },
57 - checked: true 58 + checked: true,
  59 + userMenus: []
58 }; 60 };
59 }, 61 },
60 methods: { 62 methods: {
@@ -64,6 +66,33 @@ @@ -64,6 +66,33 @@
64 handleReset2() { 66 handleReset2() {
65 this.$refs.ruleForm2.resetFields(); 67 this.$refs.ruleForm2.resetFields();
66 }, 68 },
  69 + /**
  70 + * 处理登陆后的账号对应的菜单
  71 + * @param menuList
  72 + */
  73 + handleMenuList: function (router,menu) {
  74 + var _self = this;
  75 + var routerName = "";
  76 + router.forEach(function (v_router) {
  77 + routerName = v_router.name;
  78 + menu.forEach(function (v_menu) {
  79 + //查找返回的目录列表是否包含路由名称,有就返回匹配到的元素,没有就移除
  80 + let result = menu.find(item => {
  81 + return item.name === routerName;
  82 + });
  83 +
  84 + //匹配到继续判断是否子元素,有子元素继续递归
  85 + if (result) {
  86 + if(v_router.children) {
  87 + _self.handleMenuList(v_router.children,v_menu.children);
  88 + }
  89 + //没有则可以移除
  90 + }else {
  91 + router.splice(router.findIndex(itm => itm.name === routerName ),1);
  92 + }
  93 + })
  94 + })
  95 + },
67 handleSubmit2: function (ev) { 96 handleSubmit2: function (ev) {
68 var _this = this; 97 var _this = this;
69 this.$refs.ruleForm2.validate((valid) => { 98 this.$refs.ruleForm2.validate((valid) => {
@@ -78,7 +107,6 @@ @@ -78,7 +107,6 @@
78 let status = res.status; 107 let status = res.status;
79 let user = res.data.principal; 108 let user = res.data.principal;
80 let loginSuccess = res.data.authenticated; 109 let loginSuccess = res.data.authenticated;
81 -  
82 if (status !== 200) { 110 if (status !== 200) {
83 let msg = "登录错误"; 111 let msg = "登录错误";
84 this.$message({ 112 this.$message({
@@ -87,7 +115,15 @@ @@ -87,7 +115,15 @@
87 }); 115 });
88 } else if (loginSuccess) { 116 } else if (loginSuccess) {
89 sessionStorage.setItem('user', JSON.stringify(user)); 117 sessionStorage.setItem('user', JSON.stringify(user));
90 - this.$router.push({path: '/table'}); 118 + getuserMenus('').then(res => {
  119 + if(res && res.status===200){
  120 + _this.userMenus = res.data.list;
  121 + this.handleMenuList(routes.routes,_this.userMenus);
  122 + //本地存储用户目录 ,防刷新目录丢失用
  123 + sessionStorage.setItem('menu', JSON.stringify(routes.routes));
  124 + }
  125 + });
  126 + this.$router.push({path: '/main'});
91 } 127 }
92 }).catch(error => { 128 }).catch(error => {
93 let msg = error.message; 129 let msg = error.message;
@@ -96,10 +132,8 @@ @@ -96,10 +132,8 @@
96 type: "error" 132 type: "error"
97 }); 133 });
98 this.logining = false; 134 this.logining = false;
99 - console.log(_this);  
100 }); 135 });
101 } else { 136 } else {
102 - console.log('error submit!!');  
103 return false; 137 return false;
104 } 138 }
105 }); 139 });
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <el-col :span="24" class="toolbar" style="padding-bottom: 0px;"> 4 <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
5 <el-form :inline="true" :model="filters"> 5 <el-form :inline="true" :model="filters">
6 <el-form-item> 6 <el-form-item>
7 - <el-input v-model="filters.ext1" placeholder="姓名"></el-input> 7 + <el-input v-model="filters.realname" placeholder="姓名"></el-input>
8 </el-form-item> 8 </el-form-item>
9 <el-form-item> 9 <el-form-item>
10 <el-input v-model="filters.username" placeholder="账号"></el-input> 10 <el-input v-model="filters.username" placeholder="账号"></el-input>
@@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
28 </el-table-column> 28 </el-table-column>
29 <el-table-column prop="username" label="账号" width="120" sortable> 29 <el-table-column prop="username" label="账号" width="120" sortable>
30 </el-table-column> 30 </el-table-column>
31 - <el-table-column prop="ext1" label="姓名" width="120" sortable> 31 + <el-table-column prop="realname" label="姓名" width="120" sortable>
32 </el-table-column> 32 </el-table-column>
33 <el-table-column prop="sex" label="性别" width="100" :formatter="formatSex" sortable> 33 <el-table-column prop="sex" label="性别" width="100" :formatter="formatSex" sortable>
34 </el-table-column> 34 </el-table-column>
@@ -40,6 +40,10 @@ @@ -40,6 +40,10 @@
40 </el-table-column> 40 </el-table-column>
41 <el-table-column prop="address" label="地址" min-width="180" sortable> 41 <el-table-column prop="address" label="地址" min-width="180" sortable>
42 </el-table-column> 42 </el-table-column>
  43 + <el-table-column prop="email" label="Email" min-width="180" sortable>
  44 + </el-table-column>
  45 + <el-table-column prop="state" label="启用" width="100" :formatter="formatState" sortable>
  46 + </el-table-column>
43 <el-table-column label="操作" width="150"> 47 <el-table-column label="操作" width="150">
44 <template slot-scope="scope"> 48 <template slot-scope="scope">
45 <el-button size="small" @click="handleEdit(scope.$index, scope.row)">编辑</el-button> 49 <el-button size="small" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
@@ -61,12 +65,21 @@ @@ -61,12 +65,21 @@
61 <el-form-item label="ID"> 65 <el-form-item label="ID">
62 <span>{{editForm.userId}}</span> 66 <span>{{editForm.userId}}</span>
63 </el-form-item> 67 </el-form-item>
64 - <el-form-item label="姓名" prop="username">  
65 - <el-input v-model="editForm.username" auto-complete="off"></el-input> 68 + <el-form-item label="账号">
  69 + <span>{{editForm.username}}</span>
66 </el-form-item> 70 </el-form-item>
67 <el-form-item label="密码" prop="password"> 71 <el-form-item label="密码" prop="password">
68 <el-input v-model="editForm.password" auto-complete="off" type="password"></el-input> 72 <el-input v-model="editForm.password" auto-complete="off" type="password"></el-input>
69 </el-form-item> 73 </el-form-item>
  74 + <el-form-item label="姓名" prop="realname">
  75 + <el-input v-model="editForm.realname" auto-complete="off"></el-input>
  76 + </el-form-item>
  77 + <el-form-item label="电话" prop="mobilephone">
  78 + <el-input v-model="editForm.mobilephone" auto-complete="off"></el-input>
  79 + </el-form-item>
  80 + <el-form-item label="Email" prop="email">
  81 + <el-input v-model="editForm.email" auto-complete="off"></el-input>
  82 + </el-form-item>
70 <el-form-item label="性别"> 83 <el-form-item label="性别">
71 <el-radio-group v-model="editForm.sex"> 84 <el-radio-group v-model="editForm.sex">
72 <el-radio class="radio" label="1" >男</el-radio> 85 <el-radio class="radio" label="1" >男</el-radio>
@@ -76,12 +89,18 @@ @@ -76,12 +89,18 @@
76 <el-form-item label="年龄"> 89 <el-form-item label="年龄">
77 <el-input-number v-model="editForm.age" :min="0" :max="200"></el-input-number> 90 <el-input-number v-model="editForm.age" :min="0" :max="200"></el-input-number>
78 </el-form-item> 91 </el-form-item>
79 - <el-form-item label="生日">  
80 - <el-date-picker type="date" placeholder="选择日期" v-model="editForm.creattime"></el-date-picker>  
81 - </el-form-item> 92 + <!--<el-form-item label="创建日期">-->
  93 + <!--<el-date-picker type="date" placeholder="创建日期" v-model="editForm.creattime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"></el-date-picker>-->
  94 + <!--</el-form-item>-->
82 <el-form-item label="地址"> 95 <el-form-item label="地址">
83 <el-input type="textarea" v-model="editForm.address"></el-input> 96 <el-input type="textarea" v-model="editForm.address"></el-input>
84 </el-form-item> 97 </el-form-item>
  98 + <el-form-item label="启用">
  99 + <el-radio-group v-model="editForm.state">
  100 + <el-radio class="radio" label="true" >是</el-radio>
  101 + <el-radio class="radio" label="false" >否</el-radio>
  102 + </el-radio-group>
  103 + </el-form-item>
85 </el-form> 104 </el-form>
86 <div slot="footer" class="dialog-footer"> 105 <div slot="footer" class="dialog-footer">
87 <el-button @click.native="editFormVisible = false">取消</el-button> 106 <el-button @click.native="editFormVisible = false">取消</el-button>
@@ -92,23 +111,32 @@ @@ -92,23 +111,32 @@
92 <!--新增界面--> 111 <!--新增界面-->
93 <el-dialog title="新增" v-model="addFormVisible" :close-on-click-modal="false"> 112 <el-dialog title="新增" v-model="addFormVisible" :close-on-click-modal="false">
94 <el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm"> 113 <el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm">
95 - <el-form-item label="姓名" prop="name">  
96 - <el-input v-model="addForm.name" auto-complete="off"></el-input> 114 + <el-form-item label="账号" prop="username">
  115 + <el-input v-model="addForm.username"></el-input>
  116 + </el-form-item>
  117 + <el-form-item label="密码" prop="password">
  118 + <el-input v-model="addForm.password" type="password"></el-input>
  119 + </el-form-item>
  120 + <el-form-item label="姓名" prop="realname">
  121 + <el-input v-model="addForm.realname"></el-input>
  122 + </el-form-item>
  123 + <el-form-item label="电话" prop="mobilephone">
  124 + <el-input v-model="addForm.mobilephone"></el-input>
  125 + </el-form-item>
  126 + <el-form-item label="Email" prop="email">
  127 + <el-input v-model="addForm.email"></el-input>
97 </el-form-item> 128 </el-form-item>
98 <el-form-item label="性别"> 129 <el-form-item label="性别">
99 <el-radio-group v-model="addForm.sex"> 130 <el-radio-group v-model="addForm.sex">
100 - <el-radio class="radio" :label="1">男</el-radio>  
101 - <el-radio class="radio" :label="0">女</el-radio> 131 + <el-radio class="radio" label="1">男</el-radio>
  132 + <el-radio class="radio" label="0">女</el-radio>
102 </el-radio-group> 133 </el-radio-group>
103 </el-form-item> 134 </el-form-item>
104 - <el-form-item label="年龄"> 135 + <el-form-item label="年龄" prop="age">
105 <el-input-number v-model="addForm.age" :min="0" :max="200"></el-input-number> 136 <el-input-number v-model="addForm.age" :min="0" :max="200"></el-input-number>
106 </el-form-item> 137 </el-form-item>
107 - <el-form-item label="生日">  
108 - <el-date-picker type="date" placeholder="选择日期" v-model="addForm.birth"></el-date-picker>  
109 - </el-form-item>  
110 <el-form-item label="地址"> 138 <el-form-item label="地址">
111 - <el-input type="textarea" v-model="addForm.addr"></el-input> 139 + <el-input type="textarea" v-model="addForm.address"></el-input>
112 </el-form-item> 140 </el-form-item>
113 </el-form> 141 </el-form>
114 <div slot="footer" class="dialog-footer"> 142 <div slot="footer" class="dialog-footer">
@@ -122,17 +150,19 @@ @@ -122,17 +150,19 @@
122 <script> 150 <script>
123 import util from '../../common/js/util' 151 import util from '../../common/js/util'
124 //import NProgress from 'nprogress' 152 //import NProgress from 'nprogress'
125 - import { getUserListPage, removeUser, batchRemoveUser, editUser, addUser } from '../../api/api';  
126 - 153 + import { getUserList, removeUser, batchRemoveUser, editUser, addUser } from '../../api/api';
  154 + import moment from 'moment'
127 export default { 155 export default {
128 data() { 156 data() {
129 return { 157 return {
130 filters: { 158 filters: {
131 - name: '' 159 + username: '',
  160 + realname: ''
132 }, 161 },
133 users: [], 162 users: [],
134 total: 0, 163 total: 0,
135 pageNum: 1, 164 pageNum: 1,
  165 + pageSize: 5,
136 listLoading: false, 166 listLoading: false,
137 sels: [],//列表选中列 167 sels: [],//列表选中列
138 //编辑界面是否显示 168 //编辑界面是否显示
@@ -149,25 +179,31 @@ @@ -149,25 +179,31 @@
149 username: '', 179 username: '',
150 password: '', 180 password: '',
151 sex: 1, 181 sex: 1,
152 - age: 0,  
153 creattime: '', 182 creattime: '',
154 - address: '' 183 + address: '',
  184 + realname: '',
  185 + email: '',
  186 + mobilephone: '',
  187 + state: 'true'
155 }, 188 },
156 189
157 addFormVisible: false,//新增界面是否显示 190 addFormVisible: false,//新增界面是否显示
158 addLoading: false, 191 addLoading: false,
159 addFormRules: { 192 addFormRules: {
160 - name: [ 193 + username: [
161 { required: true, message: '请输入姓名', trigger: 'blur' } 194 { required: true, message: '请输入姓名', trigger: 'blur' }
162 ] 195 ]
163 }, 196 },
164 //新增界面数据 197 //新增界面数据
165 addForm: { 198 addForm: {
166 - name: '',  
167 - sex: -1,  
168 - age: 0,  
169 - birth: '',  
170 - addr: '' 199 + username: '',
  200 + password: '',
  201 + sex: 1,
  202 + address: '',
  203 + realname: '',
  204 + email: '',
  205 + mobilephone: '',
  206 + age: 1
171 } 207 }
172 208
173 } 209 }
@@ -177,6 +213,9 @@ @@ -177,6 +213,9 @@
177 formatSex: function (row, column) { 213 formatSex: function (row, column) {
178 return row.sex == 1 ? '男' : row.sex == 0 ? '女' : '未知'; 214 return row.sex == 1 ? '男' : row.sex == 0 ? '女' : '未知';
179 }, 215 },
  216 + formatState: function (row, column) {
  217 + return row.state == true ? '是' : row.state == false ? '否' : '未知';
  218 + },
180 handleCurrentChange(val) { 219 handleCurrentChange(val) {
181 this.pageNum = val; 220 this.pageNum = val;
182 this.getUsers(); 221 this.getUsers();
@@ -185,16 +224,23 @@ @@ -185,16 +224,23 @@
185 getUsers() { 224 getUsers() {
186 let para = { 225 let para = {
187 pageNum: this.pageNum, 226 pageNum: this.pageNum,
188 - name: this.filters.name 227 + pageSize: this.pageSize,
  228 + username: this.filters.username
189 }; 229 };
190 this.listLoading = true; 230 this.listLoading = true;
191 //NProgress.start(); 231 //NProgress.start();
192 - getUserListPage(para).then((res) => { 232 + getUserList(para).then((res) => {
193 this.total = res.data.total; 233 this.total = res.data.total;
194 this.users = res.data.list; 234 this.users = res.data.list;
195 this.listLoading = false; 235 this.listLoading = false;
196 //NProgress.done(); 236 //NProgress.done();
  237 + }).catch((error) => {
  238 + this.listLoading = false;
  239 + let res= error.response.data;
  240 +
  241 + alert(res.msg);
197 }); 242 });
  243 +
198 }, 244 },
199 //删除 245 //删除
200 handleDel: function (index, row) { 246 handleDel: function (index, row) {
@@ -203,7 +249,7 @@ @@ -203,7 +249,7 @@
203 }).then(() => { 249 }).then(() => {
204 this.listLoading = true; 250 this.listLoading = true;
205 //NProgress.start(); 251 //NProgress.start();
206 - let para = { id: row.id }; 252 + let para = { userId: row.userId };
207 removeUser(para).then((res) => { 253 removeUser(para).then((res) => {
208 this.listLoading = false; 254 this.listLoading = false;
209 //NProgress.done(); 255 //NProgress.done();
@@ -212,10 +258,11 @@ @@ -212,10 +258,11 @@
212 type: 'success' 258 type: 'success'
213 }); 259 });
214 this.getUsers(); 260 this.getUsers();
  261 + }).catch((error) => {
  262 + this.listLoading = false;
  263 + alert(error);
215 }); 264 });
216 - }).catch(() => {  
217 -  
218 - }); 265 + }).catch();
219 }, 266 },
220 /** 267 /**
221 * 显示编辑界面 268 * 显示编辑界面
@@ -226,15 +273,18 @@ @@ -226,15 +273,18 @@
226 this.editFormVisible = true; 273 this.editFormVisible = true;
227 this.editForm = Object.assign({}, row); 274 this.editForm = Object.assign({}, row);
228 }, 275 },
229 - //显示新增界面 276 + //显示新增界面,每次点开初始化数据
230 handleAdd: function () { 277 handleAdd: function () {
231 this.addFormVisible = true; 278 this.addFormVisible = true;
232 this.addForm = { 279 this.addForm = {
233 - name: '',  
234 - sex: -1,  
235 - age: 0,  
236 - birth: '',  
237 - addr: '' 280 + username: '',
  281 + password: '',
  282 + sex: 1,
  283 + address: '',
  284 + realname: '',
  285 + email: '',
  286 + mobilephone: '',
  287 + age: 1
238 }; 288 };
239 }, 289 },
240 //编辑 290 //编辑
@@ -245,9 +295,22 @@ @@ -245,9 +295,22 @@
245 this.editLoading = true; 295 this.editLoading = true;
246 //NProgress.start(); 296 //NProgress.start();
247 let para = Object.assign({}, this.editForm); 297 let para = Object.assign({}, this.editForm);
248 - para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd');  
249 - editUser(para).then((res) => { 298 + //不需要提交的 去掉,后端不好接收
  299 + para.authorities = null;
  300 + para.permissions = null;
  301 + para.roles = null;
  302 +// para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd');
  303 + /*
  304 + 查询之后格式this.filters.column.create_start_date中日期发生变化;
  305 + Wed Aug 09 2017 00:00:00 GMT+0800 (中国标准时间) 变成了 "2017-08-08T16:00:00.000Z";
  306 + 所以使用 moment 日期格式化插件将时间转换成 [ Wed Aug 09 2017 00:00:00 GMT+0800 (中国标准时间) ] 格
  307 + 式;
  308 + */
  309 + /*moment 安装 npm install moment --save*/
  310 + para.creattime = moment(para.creattime).format('YYYY-MM-DD HH:mm:ss');
250 this.editLoading = false; 311 this.editLoading = false;
  312 + editUser(para).then((res) => {
  313 +
251 //NProgress.done(); 314 //NProgress.done();
252 this.$message({ 315 this.$message({
253 message: '提交成功', 316 message: '提交成功',
@@ -256,7 +319,7 @@ @@ -256,7 +319,7 @@
256 this.$refs['editForm'].resetFields(); 319 this.$refs['editForm'].resetFields();
257 this.editFormVisible = false; 320 this.editFormVisible = false;
258 this.getUsers(); 321 this.getUsers();
259 - }); 322 + }).catch(error => alert(error));
260 }); 323 });
261 } 324 }
262 }); 325 });
@@ -280,7 +343,7 @@ @@ -280,7 +343,7 @@
280 this.$refs['addForm'].resetFields(); 343 this.$refs['addForm'].resetFields();
281 this.addFormVisible = false; 344 this.addFormVisible = false;
282 this.getUsers(); 345 this.getUsers();
283 - }); 346 + }).catch(error => alert(error));
284 }); 347 });
285 } 348 }
286 }); 349 });
  1 +<template>
  2 + <section>
  3 + <!--工具条-->
  4 + <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
  5 + <el-form :inline="true" :model="filters">
  6 + <el-form-item>
  7 + <el-input v-model="filters.roleName" placeholder="权限名称"></el-input>
  8 + </el-form-item>
  9 + <el-form-item>
  10 + <el-button type="primary" v-on:click="getRoles()">查询</el-button>
  11 + </el-form-item>
  12 + <el-form-item>
  13 + <el-button type="primary" @click="handleAdd">新增</el-button>
  14 + </el-form-item>
  15 + </el-form>
  16 + </el-col>
  17 +
  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">
  21 + </el-table-column>
  22 + <el-table-column type="index" width="60">
  23 + </el-table-column>
  24 + <el-table-column prop="permissionId" label="ID" width="100" sortable>
  25 + </el-table-column>
  26 + <el-table-column prop="permissionName" label="权限名称" min-width="200" sortable>
  27 + </el-table-column>
  28 + <el-table-column prop="description" label="描述" min-width="200" sortable>
  29 + </el-table-column>
  30 + <el-table-column prop="permissionSign" label="排序" width="100" sortable>
  31 + </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">
  35 + <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>
  38 + </template>
  39 + </el-table-column>
  40 + </el-table>
  41 +
  42 + <!--工具条-->
  43 + <el-col :span="24" class="toolbar">
  44 + <el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button>
  45 + <el-pagination layout="prev, pager, next" @current-change="handleCurrentChange" :page-size="5" :total="total" style="float:right;">
  46 + </el-pagination>
  47 + </el-col>
  48 +
  49 + <!--编辑界面-->
  50 + <el-dialog title="编辑" v-model="editFormVisible" :close-on-click-modal="false">
  51 + <el-form :model="editForm" label-width="80px" :rules="editFormRules" ref="editForm">
  52 + <el-form-item label="ID">
  53 + <span>{{editForm.roleId}}</span>
  54 + </el-form-item>
  55 + <el-form-item label="权限名称">
  56 + <el-input v-model="editForm.roleName" auto-complete="off" placeholder="请输入权限名称:例如:ROLE_name"></el-input>
  57 + </el-form-item>
  58 + <el-form-item label="权限描述">
  59 + <el-input v-model="editForm.description" auto-complete="off" placeholder="请输入权限描述:例如:用户管理员"></el-input>
  60 + </el-form-item>
  61 + <el-form-item label="权限排序">
  62 + <el-input v-model="editForm.roleSign" auto-complete="off" placeholder="请输入权限排序:例如:数字123"></el-input>
  63 + </el-form-item>
  64 + <!--<el-form-item label="创建日期">-->
  65 + <!--<el-date-picker type="date" placeholder="创建日期" v-model="editForm.creattime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"></el-date-picker>-->
  66 + <!--</el-form-item>-->
  67 + </el-form>
  68 + <div slot="footer" class="dialog-footer">
  69 + <el-button @click.native="editFormVisible = false">取消</el-button>
  70 + <el-button type="primary" @click.native="editSubmit" :loading="editLoading">提交</el-button>
  71 + </div>
  72 + </el-dialog>
  73 +
  74 + <!--新增界面-->
  75 + <el-dialog title="新增" v-model="addFormVisible" :close-on-click-modal="false">
  76 + <el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm">
  77 + <el-form-item label="权限名称" prop="permissionName">
  78 + <el-input v-model="addForm.roleName" auto-complete="off" placeholder="请输入权限名称:例如:用户新增权限"></el-input>
  79 + </el-form-item>
  80 + <el-form-item label="权限描述" prop="description">
  81 + <el-input v-model="addForm.description" auto-complete="off" placeholder="请输入权限描述:例如:用户管理员"></el-input>
  82 + </el-form-item>
  83 + <el-form-item label="权限路径" prop="url">
  84 + <el-input v-model="addForm.url" auto-complete="off" placeholder="请输入权限描述:例如:/user/update"></el-input>
  85 + </el-form-item>
  86 + <el-form-item label="权限排序" prop="permissionSign">
  87 + <el-input v-model="addForm.permissionSign" auto-complete="off" placeholder="请输入权限排序:例如:123"></el-input>
  88 + </el-form-item>
  89 + <el-form-item label="父目录ID" prop="parentId">
  90 + <el-input v-model="addForm.parentId" auto-complete="off" placeholder="请输入父目录ID:例如:123"></el-input>
  91 + </el-form-item>
  92 + <el-form-item label="父目录ID" prop="parentId">
  93 + <el-input v-model="addForm.parentId" auto-complete="off" placeholder="请输入父目录ID:例如:123"></el-input>
  94 + </el-form-item>
  95 + </el-form>
  96 + <div slot="footer" class="dialog-footer">
  97 + <el-button @click.native="addFormVisible = false">取消</el-button>
  98 + <el-button type="primary" @click.native="addSubmit" :loading="addLoading">提交</el-button>
  99 + </div>
  100 + </el-dialog>
  101 + </section>
  102 +</template>
  103 +
  104 +<script>
  105 + import util from '../../common/js/util'
  106 + //import NProgress from 'nprogress'
  107 + import { getList, remove, batchRemove, edit, add } from '../../api/perm_api';
  108 + import moment from 'moment'
  109 + export default {
  110 + data() {
  111 + return {
  112 + filters: {
  113 + roleName: ''
  114 + },
  115 + tableList: [],
  116 + total: 0,
  117 + pageNum: 1,
  118 + pageSize: 5,
  119 + listLoading: false,
  120 + sels: [],//列表选中列
  121 + //编辑界面是否显示
  122 + editFormVisible: false,
  123 + editLoading: false,
  124 + editFormRules: {
  125 + roleName: [
  126 + { required: true, message: '请输入权限名称', trigger: 'blur' }
  127 + ]
  128 + },
  129 + //编辑界面数据
  130 + editForm: {
  131 + roleId: 1,
  132 + description: '',
  133 + roleName: '',
  134 + roleSign: 1
  135 + },
  136 +
  137 + addFormVisible: false,//新增界面是否显示
  138 + addLoading: false,
  139 + addFormRules: {
  140 + roleName: [
  141 + { required: true, message: '请输入权限名称', trigger: 'blur' }
  142 + ],
  143 + description: [
  144 + { required: true, message: '请输入权限描述', trigger: 'blur' }
  145 + ]
  146 + },
  147 + //新增界面数据
  148 + addForm: {
  149 + description: '',
  150 + roleName: '',
  151 + roleSign: 1
  152 + }
  153 +
  154 + }
  155 + },
  156 + methods: {
  157 + //性别显示转换
  158 + formatSex: function (row, column) {
  159 + return row.sex == 1 ? '男' : row.sex == 0 ? '女' : '未知';
  160 + },
  161 + formatState: function (row, column) {
  162 + return row.state == true ? '是' : row.state == false ? '否' : '未知';
  163 + },
  164 + handleCurrentChange(val) {
  165 + this.pageNum = val;
  166 + this.getTableList();
  167 + },
  168 + //获取列表
  169 + getTableList() {
  170 + let para = {
  171 + pageNum: this.pageNum,
  172 + pageSize: this.pageSize,
  173 + roleName: this.filters.roleName
  174 + };
  175 + this.listLoading = true;
  176 + //NProgress.start();
  177 + getList(para).then((res) => {
  178 + this.total = res.data.total;
  179 + this.tableList = res.data.list;
  180 + this.listLoading = false;
  181 + //NProgress.done();
  182 + }).catch((error) => {
  183 +
  184 + this.listLoading = false;
  185 + if(null!= error.response && error.response!==undefined){
  186 + let status= error.response.status;
  187 + let msg = error.response.statusText;
  188 + alert(status+msg);
  189 + }else {
  190 + alert(error);
  191 + }
  192 +
  193 +
  194 +
  195 + });
  196 +
  197 + },
  198 + //删除
  199 + handleDel: function (index, row) {
  200 + this.$confirm('确认删除该记录吗?', '提示', {
  201 + type: 'warning'
  202 + }).then(() => {
  203 + this.listLoading = true;
  204 + //NProgress.start();
  205 + let para = { userId: row.userId };
  206 + remove(para).then((res) => {
  207 + this.listLoading = false;
  208 + //NProgress.done();
  209 + this.$message({
  210 + message: '删除成功',
  211 + type: 'success'
  212 + });
  213 + this.getRoles();
  214 + }).catch((error) => {
  215 + this.listLoading = false;
  216 + alert(error);
  217 + });
  218 + }).catch();
  219 + },
  220 + /**
  221 + * 显示编辑界面
  222 + * @param index
  223 + * @param row 为这行的数据对象
  224 + */
  225 + handleEdit: function (index, row) {
  226 + this.editFormVisible = true;
  227 + this.editForm = Object.assign({}, row);
  228 + },
  229 + //显示新增界面,每次点开初始化数据
  230 + handleAdd: function () {
  231 + this.addFormVisible = true;
  232 + this.addForm = {
  233 + username: '',
  234 + password: '',
  235 + sex: 1,
  236 + address: '',
  237 + realname: '',
  238 + email: '',
  239 + mobilephone: '',
  240 + age: 1
  241 + };
  242 + },
  243 + //编辑
  244 + editSubmit: function () {
  245 + this.$refs.editForm.validate((valid) => {
  246 + if (valid) {
  247 + this.$confirm('确认提交吗?', '提示', {}).then(() => {
  248 + this.editLoading = true;
  249 + //NProgress.start();
  250 + let para = Object.assign({}, this.editForm);
  251 + //不需要提交的 去掉,后端不好接收
  252 + para.authorities = null;
  253 + para.permissions = null;
  254 + para.roles = null;
  255 +// para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd');
  256 + /*
  257 + 查询之后格式this.filters.column.create_start_date中日期发生变化;
  258 + Wed Aug 09 2017 00:00:00 GMT+0800 (中国标准时间) 变成了 "2017-08-08T16:00:00.000Z";
  259 + 所以使用 moment 日期格式化插件将时间转换成 [ Wed Aug 09 2017 00:00:00 GMT+0800 (中国标准时间) ] 格
  260 + 式;
  261 + */
  262 + /*moment 安装 npm install moment --save*/
  263 + para.creattime = moment(para.creattime).format('YYYY-MM-DD HH:mm:ss');
  264 + this.editLoading = false;
  265 + edit(para).then((res) => {
  266 +
  267 + //NProgress.done();
  268 + this.$message({
  269 + message: '提交成功',
  270 + type: 'success'
  271 + });
  272 + this.$refs['editForm'].resetFields();
  273 + this.editFormVisible = false;
  274 + this.getRoles();
  275 + }).catch(error => alert(error));
  276 + });
  277 + }
  278 + });
  279 + },
  280 + //新增
  281 + addSubmit: function () {
  282 + this.$refs.addForm.validate((valid) => {
  283 + if (valid) {
  284 + this.$confirm('确认提交吗?', '提示', {}).then(() => {
  285 + this.addLoading = true;
  286 + //NProgress.start();
  287 + let para = Object.assign({}, this.addForm);
  288 + para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd');
  289 + add(para).then((res) => {
  290 + this.addLoading = false;
  291 + //NProgress.done();
  292 + this.$message({
  293 + message: '提交成功',
  294 + type: 'success'
  295 + });
  296 + this.$refs['addForm'].resetFields();
  297 + this.addFormVisible = false;
  298 + this.getRoles();
  299 + }).catch(error => alert(error));
  300 + });
  301 + }
  302 + });
  303 + },
  304 + selsChange: function (sels) {
  305 + this.sels = sels;
  306 + },
  307 + //批量删除
  308 + batchRemove: function () {
  309 + var ids = this.sels.map(item => item.id).toString();
  310 + this.$confirm('确认删除选中记录吗?', '提示', {
  311 + type: 'warning'
  312 + }).then(() => {
  313 + this.listLoading = true;
  314 + //NProgress.start();
  315 + let para = { ids: ids };
  316 + batchRemove(para).then((res) => {
  317 + this.listLoading = false;
  318 + //NProgress.done();
  319 + this.$message({
  320 + message: '删除成功',
  321 + type: 'success'
  322 + });
  323 + this.getRoles();
  324 + });
  325 + }).catch(() => {
  326 +
  327 + });
  328 + }
  329 + },
  330 + mounted() {
  331 + this.getTableList();
  332 + }
  333 + }
  334 +
  335 +</script>
  336 +
  337 +<style scoped>
  338 +
  339 +</style>
  1 +<template>
  2 + <section>
  3 + <!--工具条-->
  4 + <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
  5 + <el-form :inline="true" :model="filters">
  6 + <el-form-item>
  7 + <el-input v-model="filters.roleName" placeholder="角色名称"></el-input>
  8 + </el-form-item>
  9 + <el-form-item>
  10 + <el-button type="primary" v-on:click="getRoles()">查询</el-button>
  11 + </el-form-item>
  12 + <el-form-item>
  13 + <el-button type="primary" @click="handleAdd">新增</el-button>
  14 + </el-form-item>
  15 + </el-form>
  16 + </el-col>
  17 +
  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">
  21 + </el-table-column>
  22 + <el-table-column type="index" width="60">
  23 + </el-table-column>
  24 + <el-table-column prop="roleId" label="ID" width="100" sortable>
  25 + </el-table-column>
  26 + <el-table-column prop="roleName" label="角色名称" min-width="200" sortable>
  27 + </el-table-column>
  28 + <el-table-column prop="description" label="角色描述" min-width="200" sortable>
  29 + </el-table-column>
  30 + <el-table-column prop="roleSign" label="排序" width="100" sortable>
  31 + </el-table-column>
  32 + <el-table-column label="操作" min-width="150">
  33 + <template slot-scope="scope">
  34 + <el-button size="small" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
  35 + <el-button type="danger" size="small" @click="handleDel(scope.$index, scope.row)">删除</el-button>
  36 + </template>
  37 + </el-table-column>
  38 + </el-table>
  39 +
  40 + <!--工具条-->
  41 + <el-col :span="24" class="toolbar">
  42 + <el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button>
  43 + <el-pagination layout="prev, pager, next" @current-change="handleCurrentChange" :page-size="5" :total="total" style="float:right;">
  44 + </el-pagination>
  45 + </el-col>
  46 +
  47 + <!--编辑界面-->
  48 + <el-dialog title="编辑" v-model="editFormVisible" :close-on-click-modal="false">
  49 + <el-form :model="editForm" label-width="80px" :rules="editFormRules" ref="editForm">
  50 + <el-form-item label="ID">
  51 + <span>{{editForm.roleId}}</span>
  52 + </el-form-item>
  53 + <el-form-item label="角色名称">
  54 + <el-input v-model="editForm.roleName" auto-complete="off" placeholder="请输入角色名称:例如:ROLE_name"></el-input>
  55 + </el-form-item>
  56 + <el-form-item label="角色描述">
  57 + <el-input v-model="editForm.description" auto-complete="off" placeholder="请输入角色描述:例如:用户管理员"></el-input>
  58 + </el-form-item>
  59 + <el-form-item label="角色排序">
  60 + <el-input v-model="editForm.roleSign" auto-complete="off" placeholder="请输入角色排序:例如:数字123"></el-input>
  61 + </el-form-item>
  62 + <!--<el-form-item label="创建日期">-->
  63 + <!--<el-date-picker type="date" placeholder="创建日期" v-model="editForm.creattime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"></el-date-picker>-->
  64 + <!--</el-form-item>-->
  65 + </el-form>
  66 + <div slot="footer" class="dialog-footer">
  67 + <el-button @click.native="editFormVisible = false">取消</el-button>
  68 + <el-button type="primary" @click.native="editSubmit" :loading="editLoading">提交</el-button>
  69 + </div>
  70 + </el-dialog>
  71 +
  72 + <!--新增界面-->
  73 + <el-dialog title="新增" v-model="addFormVisible" :close-on-click-modal="false">
  74 + <el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm">
  75 + <el-form-item label="角色名称" prop="roleName">
  76 + <el-input v-model="addForm.roleName" auto-complete="off" placeholder="请输入角色名称:例如:ROLE_name"></el-input>
  77 + </el-form-item>
  78 + <el-form-item label="角色描述" prop="description">
  79 + <el-input v-model="addForm.description" auto-complete="off" placeholder="请输入角色描述:例如:用户管理员"></el-input>
  80 + </el-form-item>
  81 + <el-form-item label="角色排序" prop="roleSign">
  82 + <el-input v-model="addForm.roleSign" auto-complete="off" placeholder="请输入角色排序:例如:数字123"></el-input>
  83 + </el-form-item>
  84 + </el-form>
  85 + <div slot="footer" class="dialog-footer">
  86 + <el-button @click.native="addFormVisible = false">取消</el-button>
  87 + <el-button type="primary" @click.native="addSubmit" :loading="addLoading">提交</el-button>
  88 + </div>
  89 + </el-dialog>
  90 + </section>
  91 +</template>
  92 +
  93 +<script>
  94 + import util from '../../common/js/util'
  95 + //import NProgress from 'nprogress'
  96 + import { getList, remove, batchRemove, edit, add } from '../../api/role_api';
  97 + import moment from 'moment'
  98 + export default {
  99 + data() {
  100 + return {
  101 + filters: {
  102 + roleName: ''
  103 + },
  104 + roles: [],
  105 + total: 0,
  106 + pageNum: 1,
  107 + pageSize: 5,
  108 + listLoading: false,
  109 + sels: [],//列表选中列
  110 + //编辑界面是否显示
  111 + editFormVisible: false,
  112 + editLoading: false,
  113 + editFormRules: {
  114 + roleName: [
  115 + { required: true, message: '请输入角色名称', trigger: 'blur' }
  116 + ]
  117 + },
  118 + //编辑界面数据
  119 + editForm: {
  120 + roleId: 1,
  121 + description: '',
  122 + roleName: '',
  123 + roleSign: 1
  124 + },
  125 +
  126 + addFormVisible: false,//新增界面是否显示
  127 + addLoading: false,
  128 + addFormRules: {
  129 + roleName: [
  130 + { required: true, message: '请输入角色名称', trigger: 'blur' }
  131 + ],
  132 + description: [
  133 + { required: true, message: '请输入角色描述', trigger: 'blur' }
  134 + ]
  135 + },
  136 + //新增界面数据
  137 + addForm: {
  138 + description: '',
  139 + roleName: '',
  140 + roleSign: 1
  141 + }
  142 +
  143 + }
  144 + },
  145 + methods: {
  146 + //性别显示转换
  147 + formatSex: function (row, column) {
  148 + return row.sex == 1 ? '男' : row.sex == 0 ? '女' : '未知';
  149 + },
  150 + formatState: function (row, column) {
  151 + return row.state == true ? '是' : row.state == false ? '否' : '未知';
  152 + },
  153 + handleCurrentChange(val) {
  154 + this.pageNum = val;
  155 + this.getRoles();
  156 + },
  157 + //获取列表
  158 + getRoles() {
  159 + let para = {
  160 + pageNum: this.pageNum,
  161 + pageSize: this.pageSize,
  162 + roleName: this.filters.roleName
  163 + };
  164 + this.listLoading = true;
  165 + //NProgress.start();
  166 + getList(para).then((res) => {
  167 + this.total = res.data.total;
  168 + this.roles = res.data.list;
  169 + this.listLoading = false;
  170 + //NProgress.done();
  171 + }).catch((error) => {
  172 +
  173 + this.listLoading = false;
  174 + if(null!= error.response && error.response!==undefined){
  175 + let status= error.response.status;
  176 + let msg = error.response.statusText;
  177 + alert(status+msg);
  178 + }else {
  179 + alert(error);
  180 + }
  181 +
  182 +
  183 +
  184 + });
  185 +
  186 + },
  187 + //删除
  188 + handleDel: function (index, row) {
  189 + this.$confirm('确认删除该记录吗?', '提示', {
  190 + type: 'warning'
  191 + }).then(() => {
  192 + this.listLoading = true;
  193 + //NProgress.start();
  194 + let para = { userId: row.userId };
  195 + remove(para).then((res) => {
  196 + this.listLoading = false;
  197 + //NProgress.done();
  198 + this.$message({
  199 + message: '删除成功',
  200 + type: 'success'
  201 + });
  202 + this.getRoles();
  203 + }).catch((error) => {
  204 + this.listLoading = false;
  205 + alert(error);
  206 + });
  207 + }).catch();
  208 + },
  209 + /**
  210 + * 显示编辑界面
  211 + * @param index
  212 + * @param row 为这行的数据对象
  213 + */
  214 + handleEdit: function (index, row) {
  215 + this.editFormVisible = true;
  216 + this.editForm = Object.assign({}, row);
  217 + },
  218 + //显示新增界面,每次点开初始化数据
  219 + handleAdd: function () {
  220 + this.addFormVisible = true;
  221 + this.addForm = {
  222 + username: '',
  223 + password: '',
  224 + sex: 1,
  225 + address: '',
  226 + realname: '',
  227 + email: '',
  228 + mobilephone: '',
  229 + age: 1
  230 + };
  231 + },
  232 + //编辑
  233 + editSubmit: function () {
  234 + this.$refs.editForm.validate((valid) => {
  235 + if (valid) {
  236 + this.$confirm('确认提交吗?', '提示', {}).then(() => {
  237 + this.editLoading = true;
  238 + //NProgress.start();
  239 + let para = Object.assign({}, this.editForm);
  240 + //不需要提交的 去掉,后端不好接收
  241 + para.authorities = null;
  242 + para.permissions = null;
  243 + para.roles = null;
  244 +// para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd');
  245 + /*
  246 + 查询之后格式this.filters.column.create_start_date中日期发生变化;
  247 + Wed Aug 09 2017 00:00:00 GMT+0800 (中国标准时间) 变成了 "2017-08-08T16:00:00.000Z";
  248 + 所以使用 moment 日期格式化插件将时间转换成 [ Wed Aug 09 2017 00:00:00 GMT+0800 (中国标准时间) ] 格
  249 + 式;
  250 + */
  251 + /*moment 安装 npm install moment --save*/
  252 + para.creattime = moment(para.creattime).format('YYYY-MM-DD HH:mm:ss');
  253 + this.editLoading = false;
  254 + edit(para).then((res) => {
  255 +
  256 + //NProgress.done();
  257 + this.$message({
  258 + message: '提交成功',
  259 + type: 'success'
  260 + });
  261 + this.$refs['editForm'].resetFields();
  262 + this.editFormVisible = false;
  263 + this.getRoles();
  264 + }).catch(error => alert(error));
  265 + });
  266 + }
  267 + });
  268 + },
  269 + //新增
  270 + addSubmit: function () {
  271 + this.$refs.addForm.validate((valid) => {
  272 + if (valid) {
  273 + this.$confirm('确认提交吗?', '提示', {}).then(() => {
  274 + this.addLoading = true;
  275 + //NProgress.start();
  276 + let para = Object.assign({}, this.addForm);
  277 + para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd');
  278 + add(para).then((res) => {
  279 + this.addLoading = false;
  280 + //NProgress.done();
  281 + this.$message({
  282 + message: '提交成功',
  283 + type: 'success'
  284 + });
  285 + this.$refs['addForm'].resetFields();
  286 + this.addFormVisible = false;
  287 + this.getRoles();
  288 + }).catch(error => alert(error));
  289 + });
  290 + }
  291 + });
  292 + },
  293 + selsChange: function (sels) {
  294 + this.sels = sels;
  295 + },
  296 + //批量删除
  297 + batchRemove: function () {
  298 + var ids = this.sels.map(item => item.id).toString();
  299 + this.$confirm('确认删除选中记录吗?', '提示', {
  300 + type: 'warning'
  301 + }).then(() => {
  302 + this.listLoading = true;
  303 + //NProgress.start();
  304 + let para = { ids: ids };
  305 + batchRemove(para).then((res) => {
  306 + this.listLoading = false;
  307 + //NProgress.done();
  308 + this.$message({
  309 + message: '删除成功',
  310 + type: 'success'
  311 + });
  312 + this.getRoles();
  313 + });
  314 + }).catch(() => {
  315 +
  316 + });
  317 + }
  318 + },
  319 + mounted() {
  320 + this.getRoles();
  321 + }
  322 + }
  323 +
  324 +</script>
  325 +
  326 +<style scoped>
  327 +
  328 +</style>
@@ -4,46 +4,208 @@ @@ -4,46 +4,208 @@
4 <el-col :span="24" class="toolbar" style="padding-bottom: 0px;"> 4 <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
5 <el-form :inline="true" :model="filters"> 5 <el-form :inline="true" :model="filters">
6 <el-form-item> 6 <el-form-item>
7 - <el-input v-model="filters.name" placeholder="姓名"></el-input> 7 + <el-input v-model="filters.realname" placeholder="姓名"></el-input>
8 </el-form-item> 8 </el-form-item>
9 <el-form-item> 9 <el-form-item>
10 - <el-button type="primary" v-on:click="getUser">查询</el-button> 10 + <el-input v-model="filters.username" placeholder="账号"></el-input>
  11 + </el-form-item>
  12 + <el-form-item>
  13 + <el-button type="primary" v-on:click="getUsers">查询</el-button>
  14 + </el-form-item>
  15 + <el-form-item>
  16 + <el-button type="primary" @click="handleAdd">新增</el-button>
11 </el-form-item> 17 </el-form-item>
12 </el-form> 18 </el-form>
13 </el-col> 19 </el-col>
14 20
15 <!--列表--> 21 <!--列表-->
16 - <template>  
17 - <el-table :data="users" highlight-current-row v-loading="loading" style="width: 100%;"> 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">
  24 + </el-table-column>
18 <el-table-column type="index" width="60"> 25 <el-table-column type="index" width="60">
19 </el-table-column> 26 </el-table-column>
20 - <el-table-column prop="name" label="姓名" width="120" sortable> 27 + <el-table-column prop="userId" label="ID" width="100" sortable>
  28 + </el-table-column>
  29 + <el-table-column prop="username" label="账号" width="120" sortable>
  30 + </el-table-column>
  31 + <el-table-column prop="realname" label="姓名" width="120" sortable>
21 </el-table-column> 32 </el-table-column>
22 <el-table-column prop="sex" label="性别" width="100" :formatter="formatSex" sortable> 33 <el-table-column prop="sex" label="性别" width="100" :formatter="formatSex" sortable>
23 </el-table-column> 34 </el-table-column>
24 - <el-table-column prop="age" label="年龄" width="100" sortable> 35 + <el-table-column prop="mobilephone" label="电话" width="125" sortable>
25 </el-table-column> 36 </el-table-column>
26 - <el-table-column prop="birth" label="生日" width="120" sortable> 37 + <el-table-column prop="creattime" label="创建时间" width="170" sortable>
27 </el-table-column> 38 </el-table-column>
28 - <el-table-column prop="addr" label="地址" min-width="180" sortable> 39 + <el-table-column prop="updatetime" label="更新时间" width="170" sortable>
29 </el-table-column> 40 </el-table-column>
30 - </el-table> 41 + <el-table-column prop="address" label="地址" min-width="180" sortable>
  42 + </el-table-column>
  43 + <el-table-column prop="email" label="Email" min-width="180" sortable>
  44 + </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="150">
  48 + <template slot-scope="scope">
  49 + <el-button size="small" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
  50 + <el-button type="danger" size="small" @click="handleDel(scope.$index, scope.row)">删除</el-button>
31 </template> 51 </template>
  52 + </el-table-column>
  53 + </el-table>
  54 +
  55 + <!--工具条-->
  56 + <el-col :span="24" class="toolbar">
  57 + <el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button>
  58 + <el-pagination layout="prev, pager, next" @current-change="handleCurrentChange" :page-size="5" :total="total" style="float:right;">
  59 + </el-pagination>
  60 + </el-col>
32 61
  62 + <!--编辑界面-->
  63 + <el-dialog title="编辑" v-model="editFormVisible" :close-on-click-modal="false">
  64 + <el-form :model="editForm" label-width="80px" :rules="editFormRules" ref="editForm">
  65 + <el-form-item label="ID">
  66 + <span>{{editForm.userId}}</span>
  67 + </el-form-item>
  68 + <el-form-item label="账号">
  69 + <span>{{editForm.username}}</span>
  70 + </el-form-item>
  71 + <el-form-item label="密码" prop="password">
  72 + <el-input v-model="editForm.password" auto-complete="off" show-password></el-input>
  73 + </el-form-item>
  74 + <el-form-item label="姓名" prop="realname">
  75 + <el-input v-model="editForm.realname" auto-complete="off"></el-input>
  76 + </el-form-item>
  77 + <el-form-item label="电话" prop="mobilephone">
  78 + <el-input v-model="editForm.mobilephone" auto-complete="off"></el-input>
  79 + </el-form-item>
  80 + <el-form-item label="Email" prop="email">
  81 + <el-input v-model="editForm.email" auto-complete="off"></el-input>
  82 + </el-form-item>
  83 + <el-form-item label="性别">
  84 + <el-radio-group v-model="editForm.sex">
  85 + <el-radio class="radio" label="1" >男</el-radio>
  86 + <el-radio class="radio" label="0" >女</el-radio>
  87 + </el-radio-group>
  88 + </el-form-item>
  89 + <el-form-item label="年龄">
  90 + <el-input-number v-model="editForm.age" :min="0" :max="200"></el-input-number>
  91 + </el-form-item>
  92 + <!--<el-form-item label="创建日期">-->
  93 + <!--<el-date-picker type="date" placeholder="创建日期" v-model="editForm.creattime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"></el-date-picker>-->
  94 + <!--</el-form-item>-->
  95 + <el-form-item label="地址">
  96 + <el-input type="textarea" v-model="editForm.address"></el-input>
  97 + </el-form-item>
  98 + <el-form-item label="启用">
  99 + <el-radio-group v-model="editForm.state">
  100 + <el-radio class="radio" label="true" >是</el-radio>
  101 + <el-radio class="radio" label="false" >否</el-radio>
  102 + </el-radio-group>
  103 + </el-form-item>
  104 + </el-form>
  105 + <div slot="footer" class="dialog-footer">
  106 + <el-button @click.native="editFormVisible = false">取消</el-button>
  107 + <el-button type="primary" @click.native="editSubmit" :loading="editLoading">提交</el-button>
  108 + </div>
  109 + </el-dialog>
  110 +
  111 + <!--新增界面-->
  112 + <el-dialog title="新增" v-model="addFormVisible" :close-on-click-modal="false">
  113 + <el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm">
  114 + <el-form-item label="账号" prop="username">
  115 + <el-input v-model="addForm.username"></el-input>
  116 + </el-form-item>
  117 + <el-form-item label="密码" prop="password">
  118 + <el-input v-model="addForm.password" type="password"></el-input>
  119 + </el-form-item>
  120 + <el-form-item label="姓名" prop="realname">
  121 + <el-input v-model="addForm.realname"></el-input>
  122 + </el-form-item>
  123 + <el-form-item label="电话" prop="mobilephone">
  124 + <el-input v-model="addForm.mobilephone"></el-input>
  125 + </el-form-item>
  126 + <el-form-item label="Email" prop="email">
  127 + <el-input v-model="addForm.email"></el-input>
  128 + </el-form-item>
  129 + <el-form-item label="性别">
  130 + <el-radio-group v-model="addForm.sex">
  131 + <el-radio class="radio" label="1">男</el-radio>
  132 + <el-radio class="radio" label="0">女</el-radio>
  133 + </el-radio-group>
  134 + </el-form-item>
  135 + <el-form-item label="年龄" prop="age">
  136 + <el-input-number v-model="addForm.age" :min="0" :max="200"></el-input-number>
  137 + </el-form-item>
  138 + <el-form-item label="地址">
  139 + <el-input type="textarea" v-model="addForm.address"></el-input>
  140 + </el-form-item>
  141 + </el-form>
  142 + <div slot="footer" class="dialog-footer">
  143 + <el-button @click.native="addFormVisible = false">取消</el-button>
  144 + <el-button type="primary" @click.native="addSubmit" :loading="addLoading">提交</el-button>
  145 + </div>
  146 + </el-dialog>
33 </section> 147 </section>
34 </template> 148 </template>
  149 +
35 <script> 150 <script>
36 - import { getUserList } from '../../api/api'; 151 + import util from '../../common/js/util'
37 //import NProgress from 'nprogress' 152 //import NProgress from 'nprogress'
  153 + import { getUserList, removeUser, batchRemoveUser, editUser, addUser } from '../../api/api';
  154 + import moment from 'moment'
38 export default { 155 export default {
39 data() { 156 data() {
40 return { 157 return {
41 filters: { 158 filters: {
42 - name: '' 159 + username: '',
  160 + realname: ''
  161 + },
  162 + users: [],
  163 + total: 0,
  164 + pageNum: 1,
  165 + pageSize: 5,
  166 + listLoading: false,
  167 + sels: [],//列表选中列
  168 + //编辑界面是否显示
  169 + editFormVisible: false,
  170 + editLoading: false,
  171 + editFormRules: {
  172 + name: [
  173 + { required: true, message: '请输入姓名', trigger: 'blur' }
  174 + ]
  175 + },
  176 + //编辑界面数据
  177 + editForm: {
  178 + userId: 1,
  179 + username: '',
  180 + password: '',
  181 + sex: 1,
  182 + creattime: '',
  183 + address: '',
  184 + realname: '',
  185 + email: '',
  186 + mobilephone: '',
  187 + state: 'true'
43 }, 188 },
44 - loading: false,  
45 - users: [ 189 +
  190 + addFormVisible: false,//新增界面是否显示
  191 + addLoading: false,
  192 + addFormRules: {
  193 + username: [
  194 + { required: true, message: '请输入姓名', trigger: 'blur' }
46 ] 195 ]
  196 + },
  197 + //新增界面数据
  198 + addForm: {
  199 + username: '',
  200 + password: '',
  201 + sex: 1,
  202 + address: '',
  203 + realname: '',
  204 + email: '',
  205 + mobilephone: '',
  206 + age: 1
  207 + }
  208 +
47 } 209 }
48 }, 210 },
49 methods: { 211 methods: {
@@ -51,24 +213,171 @@ @@ -51,24 +213,171 @@
51 formatSex: function (row, column) { 213 formatSex: function (row, column) {
52 return row.sex == 1 ? '男' : row.sex == 0 ? '女' : '未知'; 214 return row.sex == 1 ? '男' : row.sex == 0 ? '女' : '未知';
53 }, 215 },
  216 + formatState: function (row, column) {
  217 + return row.state == true ? '是' : row.state == false ? '否' : '未知';
  218 + },
  219 + handleCurrentChange(val) {
  220 + this.pageNum = val;
  221 + this.getUsers();
  222 + },
54 //获取用户列表 223 //获取用户列表
55 - getUser: function () { 224 + getUsers() {
56 let para = { 225 let para = {
57 - name: this.filters.name 226 + pageNum: this.pageNum,
  227 + pageSize: this.pageSize,
  228 + username: this.filters.username
58 }; 229 };
59 - this.loading = true; 230 + this.listLoading = true;
60 //NProgress.start(); 231 //NProgress.start();
61 getUserList(para).then((res) => { 232 getUserList(para).then((res) => {
62 - this.users = res.data.users;  
63 - this.loading = false; 233 + this.total = res.data.total;
  234 + this.users = res.data.list;
  235 + this.listLoading = false;
  236 + //NProgress.done();
  237 + }).catch((error) => {
  238 + this.listLoading = false;
  239 + let res= error.response.data;
  240 +
  241 + alert(res.msg);
  242 + });
  243 +
  244 + },
  245 + //删除
  246 + handleDel: function (index, row) {
  247 + this.$confirm('确认删除该记录吗?', '提示', {
  248 + type: 'warning'
  249 + }).then(() => {
  250 + this.listLoading = true;
  251 + //NProgress.start();
  252 + let para = { userId: row.userId };
  253 + removeUser(para).then((res) => {
  254 + this.listLoading = false;
  255 + //NProgress.done();
  256 + this.$message({
  257 + message: '删除成功',
  258 + type: 'success'
  259 + });
  260 + this.getUsers();
  261 + }).catch((error) => {
  262 + this.listLoading = false;
  263 + alert(error);
  264 + });
  265 + }).catch();
  266 + },
  267 + /**
  268 + * 显示编辑界面
  269 + * @param index
  270 + * @param row 为这行的数据对象
  271 + */
  272 + handleEdit: function (index, row) {
  273 + this.editFormVisible = true;
  274 + this.editForm = Object.assign({}, row);
  275 + },
  276 + //显示新增界面,每次点开初始化数据
  277 + handleAdd: function () {
  278 + this.addFormVisible = true;
  279 + this.addForm = {
  280 + username: '',
  281 + password: '',
  282 + sex: 1,
  283 + address: '',
  284 + realname: '',
  285 + email: '',
  286 + mobilephone: '',
  287 + age: 1
  288 + };
  289 + },
  290 + //编辑
  291 + editSubmit: function () {
  292 + this.$refs.editForm.validate((valid) => {
  293 + if (valid) {
  294 + this.$confirm('确认提交吗?', '提示', {}).then(() => {
  295 + this.editLoading = true;
  296 + //NProgress.start();
  297 + let para = Object.assign({}, this.editForm);
  298 + //不需要提交的 去掉,后端不好接收
  299 + para.authorities = null;
  300 + para.permissions = null;
  301 + para.roles = null;
  302 +// para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd');
  303 + /*
  304 + 查询之后格式this.filters.column.create_start_date中日期发生变化;
  305 + Wed Aug 09 2017 00:00:00 GMT+0800 (中国标准时间) 变成了 "2017-08-08T16:00:00.000Z";
  306 + 所以使用 moment 日期格式化插件将时间转换成 [ Wed Aug 09 2017 00:00:00 GMT+0800 (中国标准时间) ] 格
  307 + 式;
  308 + */
  309 + /*moment 安装 npm install moment --save*/
  310 + para.creattime = moment(para.creattime).format('YYYY-MM-DD HH:mm:ss');
  311 + this.editLoading = false;
  312 + editUser(para).then((res) => {
  313 +
64 //NProgress.done(); 314 //NProgress.done();
  315 + this.$message({
  316 + message: '提交成功',
  317 + type: 'success'
  318 + });
  319 + this.$refs['editForm'].resetFields();
  320 + this.editFormVisible = false;
  321 + this.getUsers();
  322 + }).catch(error => alert(error));
  323 + });
  324 + }
  325 + });
  326 + },
  327 + //新增
  328 + addSubmit: function () {
  329 + this.$refs.addForm.validate((valid) => {
  330 + if (valid) {
  331 + this.$confirm('确认提交吗?', '提示', {}).then(() => {
  332 + this.addLoading = true;
  333 + //NProgress.start();
  334 + let para = Object.assign({}, this.addForm);
  335 + para.birth = (!para.birth || para.birth == '') ? '' : util.formatDate.format(new Date(para.birth), 'yyyy-MM-dd');
  336 + addUser(para).then((res) => {
  337 + this.addLoading = false;
  338 + //NProgress.done();
  339 + this.$message({
  340 + message: '提交成功',
  341 + type: 'success'
  342 + });
  343 + this.$refs['addForm'].resetFields();
  344 + this.addFormVisible = false;
  345 + this.getUsers();
  346 + }).catch(error => alert(error));
  347 + });
  348 + }
  349 + });
  350 + },
  351 + selsChange: function (sels) {
  352 + this.sels = sels;
  353 + },
  354 + //批量删除
  355 + batchRemove: function () {
  356 + var ids = this.sels.map(item => item.id).toString();
  357 + this.$confirm('确认删除选中记录吗?', '提示', {
  358 + type: 'warning'
  359 + }).then(() => {
  360 + this.listLoading = true;
  361 + //NProgress.start();
  362 + let para = { ids: ids };
  363 + batchRemoveUser(para).then((res) => {
  364 + this.listLoading = false;
  365 + //NProgress.done();
  366 + this.$message({
  367 + message: '删除成功',
  368 + type: 'success'
  369 + });
  370 + this.getUsers();
  371 + });
  372 + }).catch(() => {
  373 +
65 }); 374 });
66 } 375 }
67 }, 376 },
68 mounted() { 377 mounted() {
69 - this.getUser(); 378 + this.getUsers();
  379 + }
70 } 380 }
71 - };  
72 381
73 </script> 382 </script>
74 383