Browse Source

部分优化

程志平 4 years atrás
parent
commit
4492684102
8 changed files with 365 additions and 218 deletions
  1. 23 6
      src/App.vue
  2. 18 18
      src/api/user.js
  3. 16 0
      src/api/userMgr.js
  4. 54 47
      src/permission.js
  5. 128 93
      src/store/modules/user.js
  6. 0 8
      src/utils/validate.js
  7. 27 18
      src/views/login/index.vue
  8. 99 28
      src/views/userMgr/index.vue

+ 23 - 6
src/App.vue

@@ -1,11 +1,28 @@
 <template>
-  <div id="app">
-    <router-view />
-  </div>
+	<div id="app">
+		<router-view />
+	</div>
 </template>
 
 <script>
-export default {
-  name: 'App'
-}
+	export default {
+		name: 'App',
+		created() {
+			// 在页面加载时读取sessionStorage里的状态信息
+			if (sessionStorage.getItem('store')) {
+				this.$store.replaceState(
+					Object.assign({},
+						this.$store.state,
+						JSON.parse(sessionStorage.getItem('store'))
+					)
+				)
+			}
+
+			// 在页面刷新时将vuex里的信息保存到sessionStorage里
+			// beforeunload事件在页面刷新时先触发
+			window.addEventListener('beforeunload', () => {
+				sessionStorage.setItem('store', JSON.stringify(this.$store.state))
+			})
+		}
+	}
 </script>

+ 18 - 18
src/api/user.js

@@ -2,9 +2,9 @@ import request from '@/utils/request'
 
 export function login(forData) {
 	let data = new FormData()
-	data.append('admin_name', forData.username)
-	data.append('password', forData.password)
-	
+	data.append('admin_name', forData.username.trim())
+	data.append('password', forData.password.trim())
+
 	return request({
 		url: '/airManage/adminlogin.action',
 		method: 'post',
@@ -12,19 +12,19 @@ export function login(forData) {
 	})
 }
 
-export function getInfo(token) {
-	return request({
-		url: '/airManage/info',
-		method: 'get',
-		params: {
-			token
-		}
-	})
-}
+// export function getInfo(token) {
+// 	return request({
+// 		url: '/airManage/info',
+// 		method: 'get',
+// 		params: {
+// 			token
+// 		}
+// 	})
+// }
 
-export function logout() {
-	return request({
-		url: '/airManage/adminlogin.action',
-		method: 'post'
-	})
-}
+// export function logout() {
+// 	return request({
+// 		url: '/airManage/adminloginout.action',
+// 		method: 'post'
+// 	})
+// }

+ 16 - 0
src/api/userMgr.js

@@ -44,3 +44,19 @@ export function downloadExcel() {
 		method: 'post'
 	})
 }
+
+// 身份列表
+export function getUserClass() {
+	return request({
+		url: '/airManage/configquerysflb.action',
+		method: 'post'
+	})
+}
+
+// 身份列表
+export function getUserGrade() {
+	return request({
+		url: '/airManage/configquerynjlb.action',
+		method: 'post'
+	})
+}

+ 54 - 47
src/permission.js

@@ -1,64 +1,71 @@
 import router from './router'
 import store from './store'
-import { Message } from 'element-ui'
+import {
+	Message
+} from 'element-ui'
 import NProgress from 'nprogress' // progress bar
 import 'nprogress/nprogress.css' // progress bar style
-import { getToken } from '@/utils/auth' // get token from cookie
+import {
+	getToken
+} from '@/utils/auth' // get token from cookie
 import getPageTitle from '@/utils/get-page-title'
 
-NProgress.configure({ showSpinner: false }) // NProgress Configuration
+NProgress.configure({
+	showSpinner: false
+}) // NProgress Configuration
 
 const whiteList = ['/login'] // no redirect whitelist
 
-router.beforeEach(async(to, from, next) => {
-  // start progress bar
-  NProgress.start()
+router.beforeEach(async (to, from, next) => {
+	// start progress bar
+	NProgress.start()
 
-  // set page title
-  document.title = getPageTitle(to.meta.title)
+	// set page title
+	document.title = getPageTitle(to.meta.title)
 
-  // determine whether the user has logged in
-  const hasToken = getToken()
+	// determine whether the user has logged in
+	const hasToken = getToken()
 
-  if (hasToken) {
-    if (to.path === '/login') {
-      // if is logged in, redirect to the home page
-      next({ path: '/' })
-      NProgress.done()
-    } else {
-      const hasGetUserInfo = store.getters.name
-      if (hasGetUserInfo) {
-        next()
-      } else {
-        try {
-          // get user info
-		  // 修改:下一行注释了
-          // await store.dispatch('user/getInfo')
+	if (hasToken) {
+		if (to.path === '/login') {
+			// if is logged in, redirect to the home page
+			next({
+				path: '/'
+			})
+			NProgress.done()
+		} else {
+			const hasGetUserInfo = store.getters.name
+			if (hasGetUserInfo) {
+				next()
+			} else {
+				try {
+					// get user info
+					// await store.dispatch('user/getInfo')
 
-          next()
-        } catch (error) {
-          // remove token and go to login page to re-login
-          await store.dispatch('user/resetToken')
-          Message.error(error || 'Has Error')
-          next(`/login?redirect=${to.path}`)
-          NProgress.done()
-        }
-      }
-    }
-  } else {
-    /* has no token*/
-    if (whiteList.indexOf(to.path) !== -1) {
-      // in the free login whitelist, go directly
-      next()
-    } else {
-      // other pages that do not have permission to access are redirected to the login page.
-      next(`/login?redirect=${to.path}`)
-      NProgress.done()
-    }
-  }
+					next()
+				} catch (error) {
+					// remove token and go to login page to re-login
+					await store.dispatch('user/resetToken')
+					Message.error(error || 'Has Error')
+					next(`/login?redirect=${to.path}`)
+					NProgress.done()
+				}
+			}
+		}
+	} else {
+		/* has no token*/
+		if (whiteList.indexOf(to.path) !== -1) {
+			// in the free login whitelist, go directly
+			next()
+		} else {
+			// other pages that do not have permission to access are redirected to the login page.
+			next(`/login?redirect=${to.path}`)
+			NProgress.done()
+		}
+	}
 })
 
 router.afterEach(() => {
-  // finish progress bar
-  NProgress.done()
+	// finish progress bar
+	NProgress.done()
 })

+ 128 - 93
src/store/modules/user.js

@@ -1,113 +1,148 @@
-import { login, logout, getInfo } from '@/api/user'
-import { getToken, setToken, removeToken } from '@/utils/auth'
-import { resetRouter } from '@/router'
+import {
+	login,
+	logout,
+	getInfo
+} from '@/api/user'
+import {
+	getToken,
+	setToken,
+	removeToken
+} from '@/utils/auth'
+import {
+	resetRouter
+} from '@/router'
 
 const getDefaultState = () => {
-  return {
-    token: getToken(),
-    name: '',
-    avatar: ''
-  }
+	return {
+		token: getToken(),
+		name: '',
+		avatar: ''
+	}
 }
 
 const state = getDefaultState()
 
 const mutations = {
-  RESET_STATE: (state) => {
-    Object.assign(state, getDefaultState())
-  },
-  SET_TOKEN: (state, token) => {
-    state.token = token
-  },
-  SET_NAME: (state, name) => {
-    state.name = name
-  },
-  SET_AVATAR: (state, avatar) => {
-    state.avatar = avatar
-  }
+	RESET_STATE: (state) => {
+		Object.assign(state, getDefaultState())
+	},
+	SET_TOKEN: (state, token) => {
+		state.token = token
+	},
+	SET_NAME: (state, name) => {
+		state.name = name
+	},
+	SET_PWD: (state, pwd) => {
+		state.pwd = pwd
+	},
+	SET_AVATAR: (state, avatar) => {
+		state.avatar = avatar
+	}
 }
 
 const actions = {
-  // user login
-  login({ commit }, userInfo) {
-    const { username, password } = userInfo
-    return new Promise((resolve, reject) => {
-      login({ username: username.trim(), password: password }).then(response => {
-        // const { data } = response
-        // commit('SET_TOKEN', data.token)
-        // setToken(data.token)
-		// 修改:token固定
-		const token = 'admin_token'
-        commit('SET_TOKEN', token)
-        setToken(token)
-		// 添加:
-		commit('SET_NAME', username)
-		// ============================
-        resolve()
-      }).catch(error => {
-        reject(error)
-      })
-    })
-  },
+	// user login
+	login({
+		commit
+	}, userInfo) {
+		const {
+			username,
+			password
+		} = userInfo
+		return new Promise((resolve, reject) => {
+			login({
+				username: username.trim(),
+				password: password.trim()
+			}).then(response => {
+				if (response.code == 200) {
+					// 修改:token固定
+					const token = 'admin_token'
+					commit('SET_TOKEN', token)
+					setToken(token)
+					// 添加:
+					commit('SET_NAME', username)
+					commit('SET_PWD', password)
+				}
+				// commit('SET_TOKEN', data.token)
+				// setToken(data.token)
+				resolve()
+			}).catch(error => {
+				reject(error)
+			})
+		})
+	},
 
-  // get user info
-  // 修改:获取用户信息被注释了
-  // getInfo({ commit, state }) {
-  //   return new Promise((resolve, reject) => {
-  //     getInfo(state.token).then(response => {
-  //       const { data } = response
+	// get user info
+	// 修改:获取用户信息被注释了
+	// getInfo({
+	// 	commit,
+	// 	state
+	// }) {
+	// 	return new Promise((resolve, reject) => {
+	// 		getInfo(state.token).then(response => {
+	// 			const {
+	// 				data
+	// 			} = response
 
-  //       if (!data) {
-  //         return reject('Verification failed, please Login again.')
-  //       }
+	// 			if (!data) {
+	// 				return reject('验证失败,请重新登录。')
+	// 			}
 
-  //       const { name, avatar } = data
+	// 			const {
+	// 				name,
+	// 				avatar
+	// 			} = data
 
-  //       commit('SET_NAME', name)
-  //       commit('SET_AVATAR', avatar)
-  //       resolve(data)
-  //     }).catch(error => {
-  //       reject(error)
-  //     })
-  //   })
-  // },
+	// 			commit('SET_NAME', name)
+	// 			commit('SET_AVATAR', avatar)
+	// 			resolve(data)
+	// 		}).catch(error => {
+	// 			reject(error)
+	// 		})
+	// 	})
+	// },
 
-  // user logout
-  logout({ commit, state }) {
-	  return new Promise((resolve, reject) => {
-		removeToken() // must remove  token  first
-		resetRouter()
-		commit('RESET_STATE')
-		commit('SET_NAME')
-		resolve()
-	  })
-	// 修改:下面被注释了
-    // return new Promise((resolve, reject) => {
-    //   logout(state.token).then(() => {
-    //     removeToken() // must remove  token  first
-    //     resetRouter()
-    //     commit('RESET_STATE')
-    //     resolve()
-    //   }).catch(error => {
-    //     reject(error)
-    //   })
-    // })
-  },
+	// user logout
+	logout({
+		commit,
+		state
+	}) {
+		return new Promise((resolve, reject) => {
+			removeToken() // must remove  token  first
+			resetRouter()
+			commit('RESET_STATE')
+			commit('SET_NAME')
+			commit('SET_PWD')
+			resolve()
+		})
+		// 修改:下面被注释了
+		// return new Promise((resolve, reject) => {
+		//   logout(state.token).then(() => {
+		//     removeToken() // must remove  token  first
+		//     resetRouter()
+		//     commit('RESET_STATE')
+		//     resolve()
+		//   }).catch(error => {
+		//     reject(error)
+		//   })
+		// })
+	},
 
-  // remove token
-  resetToken({ commit }) {
-    return new Promise(resolve => {
-      removeToken() // must remove  token  first
-      commit('RESET_STATE')
-      resolve()
-    })
-  }
+	// remove token
+	resetToken({
+		commit
+	}) {
+		return new Promise(resolve => {
+			removeToken() // must remove  token  first
+			commit('RESET_STATE')
+			resolve()
+		})
+	}
 }
 
 export default {
-  namespaced: true,
-  state,
-  mutations,
-  actions
+	namespaced: true,
+	state,
+	mutations,
+	actions
 }
-

+ 0 - 8
src/utils/validate.js

@@ -10,11 +10,3 @@ export function isExternal(path) {
   return /^(https?:|mailto:|tel:)/.test(path)
 }
 
-/**
- * @param {string} str
- * @returns {Boolean}
- */
-export function validUsername(str) {
-  const valid_map = ['admin', 'editor']
-  return valid_map.indexOf(str.trim()) >= 0
-}

+ 27 - 18
src/views/login/index.vue

@@ -9,7 +9,7 @@
 				<div id="caption">登录</div>
 				<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on"
 					label-position="left">
-					
+
 					<el-form-item prop="username">
 						<span class="svg-container">
 							<svg-icon icon-class="login_home" />
@@ -44,15 +44,15 @@
 
 <script>
 	import {
-		validUsername
-	} from '@/utils/validate'
-
+		login
+	} from '@/api/user'
+	
 	export default {
 		name: 'Login',
 		data() {
 			const validateUsername = (rule, value, callback) => {
-				if (!validUsername(value)) {
-					callback(new Error('请输入密码'))
+				if (!value) {
+					callback(new Error('请输入账号'))
 				} else {
 					callback()
 				}
@@ -66,8 +66,8 @@
 			}
 			return {
 				loginForm: {
-					username: 'admin',
-					password: '123456'
+					username: '',
+					password: ''
 				},
 				loginRules: {
 					username: [{
@@ -112,16 +112,25 @@
 				this.$refs.loginForm.validate(valid => {
 					if (valid) {
 						this.loading = true
-						this.$store.dispatch('user/login', this.loginForm).then(() => {
-							this.$router.push({
-								path: this.redirect || '/'
-							})
-							this.loading = false
-						}).catch((err) => {
-							// console.log(err);
-							// this.$message.error(err.message)
-							this.loading = false
-						})
+						// login(this.loginForm).then((res) => {
+							// if (typeof res !== 'undefined' && res.code == 200) {
+								this.$store.dispatch('user/login', this.loginForm).then(() => {
+									this.$router.push({
+										path: this.redirect || '/'
+									})
+									this.loading = false
+								}).catch((err) => {
+									// console.log(err);
+									// this.$message.error(err.message)
+									this.loading = false
+								})
+							// } else {
+							// 	this.$message.error(res.message)
+							// }
+							// this.loading = false
+						// }).catch((err) => {
+						// 	this.$message.error(err.message)
+						// })
 					} else {
 						this.$message.error('请输入账号或密码!')
 						return false

+ 99 - 28
src/views/userMgr/index.vue

@@ -21,9 +21,9 @@
 							<el-form-item label="">
 								<el-select v-model="formInline.category" placeholder="类别" @change="btn_search"
 									clearable>
-									<el-option label="学生" value="学生"></el-option>
-									<el-option label="教工" value="教工"></el-option>
-									<el-option label="员工" value="员工"></el-option>
+									<el-option v-for="item in formInline.options" :key="item.id" :label="item.lb"
+										:value="item.lb">
+									</el-option>
 								</el-select>
 							</el-form-item>
 						</el-form>
@@ -88,7 +88,7 @@
 		</el-row>
 		<!-- 新增用户对话框 -->
 		<el-dialog title="新增用户" custom-class="add-user-dialog" :visible.sync="dialogAddUserVisible"
-			:close-on-click-modal="false" :close-on-press-escape="false" @close="add_user_dialog_close">
+			:close-on-click-modal="false" :close-on-press-escape="false" @close="dialog_close('addUserForm')">
 			<el-form :model="addForm" ref="addUserForm" :rules="addFormRules">
 				<el-form-item label="姓  名:" :label-width="formLabelWidth" :required="true" prop="user_name">
 					<el-input v-model="addForm.user_name" autocomplete="off" maxlength="10" ref="username_focus">
@@ -102,18 +102,16 @@
 				</el-form-item>
 				<el-form-item label="类  别:" :label-width="formLabelWidth" :required="true" prop="classfy">
 					<el-select v-model="addForm.classfy" placeholder="类别">
-						<el-option label="学生" value="学生"></el-option>
-						<el-option label="教工" value="教工"></el-option>
-						<el-option label="员工" value="员工"></el-option>
+						<el-option v-for="item in addForm.options_class" :key="item.id" :label="item.lb"
+							:value="item.lb">
+						</el-option>
 					</el-select>
 				</el-form-item>
 				<el-form-item label="年  级:" :label-width="formLabelWidth" :required="true" prop="bj">
 					<el-select v-model="addForm.bj" placeholder="年级">
-						<el-option label="大一" value="大一"></el-option>
-						<el-option label="大二" value="大二"></el-option>
-						<el-option label="大三" value="大三"></el-option>
-						<el-option label="大四" value="大四"></el-option>
-						<el-option label="非学生" value="非学生"></el-option>
+						<el-option v-for="item in addForm.options_grade" :key="item.id" :label="item.nj"
+							:value="item.nj">
+						</el-option>
 					</el-select>
 				</el-form-item>
 				<el-form-item label="备  注:" :label-width="formLabelWidth">
@@ -128,7 +126,7 @@
 		</el-dialog>
 		<!-- 充值对话框 -->
 		<el-dialog title="充值" custom-class="chongzhi-dialog" :visible.sync="dialogChongzhiVisible"
-			:close-on-click-modal="false" :close-on-press-escape="false" @close="dialog_close">
+			:close-on-click-modal="false" :close-on-press-escape="false" @close="dialog_close('chongzhiForm')">
 			<el-form :model="form" ref="chongzhiForm" :rules="chongzhiRules">
 				<el-form-item label="充值账号:" :label-width="formLabelWidth">
 					<div>{{form.sfzh}}</div>
@@ -154,10 +152,15 @@
 
 <script>
 	import {
+		mapGetters
+	} from 'vuex';
+	import {
 		getUserList,
 		addUser,
 		chongzhi,
-		downloadExcel
+		downloadExcel,
+		getUserClass,
+		getUserGrade
 	} from '@/api/userMgr';
 	export default {
 		data() {
@@ -250,7 +253,9 @@
 					sfzh: '',
 					user_name: '',
 					amount: '',
-					remark: ''
+					remark: '',
+					admin_name: this.$store.state.user.name,
+					password: this.$store.state.user.pwd
 				},
 				chongzhiRules: {
 					amount: [{
@@ -263,6 +268,8 @@
 					user_name: '',
 					phone: '',
 					sfzh: '',
+					options_class: [],
+					options_grade: [],
 					classfy: '',
 					bj: '',
 					remark: ''
@@ -287,7 +294,8 @@
 				// 查询表单数据
 				formInline: {
 					user: '',
-					category: ''
+					category: '',
+					options: []
 				},
 				tableData: [],
 				// 分页参数
@@ -315,12 +323,65 @@
 		created() {
 			// 获取用户列表数据
 			this.get_user_list('list')
+			// 获取身份类别列表
+			this.get_user_class()
+			// 获取年级类别列表
+			this.get_user_grade()
 		},
 		mounted() {
 			document.getElementsByClassName("el-pagination__jump")[0].childNodes[0].nodeValue = "跳至";
 		},
 		methods: {
 			/**
+			 * 获取用户类别列表数据
+			 */
+			get_user_class() {
+				// 开始发送请求,获取用户类别列表数据
+				getUserClass().then((res) => {
+					// console.log(res);
+					if (typeof res.code == 'undefined' || res.code == '') {
+						this.$message.error('返回数据格式问题,code未获取到!')
+						return
+					}
+
+					if (res.code == 200) {
+						// console.log(res.data);
+						let options = res.data.sort((a, b) => a.lb.localeCompare(b.lb))
+						this.formInline.options = options
+						this.addForm.options_class = options
+					} else {
+						this.$message.error(res.message)
+					}
+				}).catch((err) => {
+					// console.log(err);
+					this.$message.error(err.message)
+				})
+			},
+			/**
+			 * 获取用户年级列表数据
+			 */
+			get_user_grade() {
+				// 开始发送请求,获取用户年级列表数据
+				getUserGrade().then((res) => {
+					// console.log(res);
+					if (typeof res.code == 'undefined' || res.code == '') {
+						this.$message.error('返回数据格式问题,code未获取到!')
+						return
+					}
+
+					if (res.code == 200) {
+						// console.log(res.data);
+						let options = res.data.sort((a, b) => a.nj.localeCompare(b.nj))
+						this.addForm.options_grade = options
+					} else {
+						this.$message.error(res.message)
+					}
+				}).catch((err) => {
+					// console.log(err);
+					this.$message.error(err.message)
+				})
+			},
+			/**
 			 * 下载Excel表格
 			 */
 			handler_download_excel() {
@@ -337,7 +398,7 @@
 						let xls = 'http://demo.xwsyjjy.com' + res.downurl
 						window.open(xls)
 					} else {
-						this.$message.error('返回的数据异常!')
+						this.$message.error(res.message)
 					}
 				}).catch((err) => {
 					// console.log(err);
@@ -352,8 +413,11 @@
 					if (validate) {
 						let params = {
 							id: this.form.id,
-							balance: this.form.amount
+							balance: this.form.amount,
+							admin_name: this.form.admin_name,
+							password: this.form.password
 						}
+						console.log(params);
 						// 开始发送请求,获取配置数据
 						chongzhi(params).then((res) => {
 							// console.log(res);
@@ -367,7 +431,7 @@
 								this.$message.success('充值成功!')
 								this.get_user_list('list')
 							} else {
-								this.$message.error('返回的数据异常!')
+								this.$message.error(res.message)
 							}
 						}).catch((err) => {
 							// console.log(err);
@@ -420,7 +484,7 @@
 								this.$message.success('新增用户成功!')
 								this.get_user_list('list')
 							} else {
-								this.$message.error('返回的数据异常!')
+								this.$message.error(res.message)
 							}
 						}).catch((err) => {
 							// console.log(err);
@@ -502,14 +566,21 @@
 			/**
 			 * 对话框关闭时清理数据
 			 */
-			add_user_dialog_close() {
-				this.addForm = {}
-			},
-			/**
-			 * 对话框关闭时清理数据
-			 */
-			dialog_close() {
-				this.form = {}
+			dialog_close(param) {
+				if (param == 'addUserForm') {
+					this.addForm.user_name = ''
+					this.addForm.phone = ''
+					this.addForm.sfzh = ''
+					this.addForm.classfy = ''
+					this.addForm.bj = ''
+					this.addForm.remark = ''
+				} else if (param == 'chongzhiForm') {
+					this.form.id = ''
+					this.form.sfzh = ''
+					this.form.user_name = ''
+					this.form.amount = ''
+					this.form.remark = ''
+				}
 			}
 		}
 	}