From dfecc5efaa6fa81dbcf307f1e1b6759f3084e0d0 Mon Sep 17 00:00:00 2001
From: YOS-DRVOGPU6U78\Administrator <chenky0613@qq.com>
Date: 星期一, 17 七月 2023 12:20:40 +0800
Subject: [PATCH] 增加utils工具

---
 utils/common.js       |   56 ++++++++
 utils/upload.js       |   70 +++++++++++
 utils/request.js      |   63 ++++++----
 utils/storage.js      |   32 +++++
 pages/login/login.vue |   32 +++-
 utils/auth.js         |   13 ++
 utils/permission.js   |   51 ++++++++
 utils/errorCode.js    |    6 +
 utils/constant.js     |    8 +
 api/login.js          |   16 ++
 10 files changed, 306 insertions(+), 41 deletions(-)

diff --git a/api/login.js b/api/login.js
index 039543a..13a4feb 100644
--- a/api/login.js
+++ b/api/login.js
@@ -1,8 +1,16 @@
-import request from "request";
-
-export function login(account,passward) {
+import request from '@/utils/request.js'
+export function login(account, password) {
 	return request({
 		'url': '/login',
-		'method' : 'post'
+		'method': 'post',
+		'data': {
+			'username': account,
+			'password': password
+		},
+		'header': {
+			'Content-Type': 'application/json',
+			'dataType': 'json',
+			'Accept': 'application/json'
+		}
 	})
 }
\ No newline at end of file
diff --git a/pages/login/login.vue b/pages/login/login.vue
index ce61a34..0ffba34 100644
--- a/pages/login/login.vue
+++ b/pages/login/login.vue
@@ -8,8 +8,8 @@
 				<u-form-item label="鐢ㄦ埛鍚�" labelWidth=65 prop="userInfo.account" borderBottom>
 					<u--input v-model="userInfo.account" border="none" placeholder="璇疯緭鍏ョ敤鎴峰悕"></u--input>
 				</u-form-item>
-				<u-form-item label="瀵嗙爜" labelWidth=65 prop="userInfo.passward">
-					<u--input v-model="userInfo.passward" placeholder="璇疯緭鍏ョ敤鎴峰瘑鐮�" border="none" :password="showPassward"
+				<u-form-item label="瀵嗙爜" labelWidth=65 prop="userInfo.password">
+					<u--input v-model="userInfo.password" placeholder="璇疯緭鍏ョ敤鎴峰瘑鐮�" border="none" :password="showPassward"
 						@click="this.showPassward = !this.showPassward " suffixIcon="eye-fill"
 						suffixIconStyle="color: #909399"></u--input>
 				</u-form-item>
@@ -21,13 +21,16 @@
 </template>
 
 <script>
+	import {
+		login
+	} from '../../api/login'
 	export default {
 		data() {
 			return {
 				showPassward: true,
 				userInfo: {
 					account: '',
-					passward: ''
+					password: ''
 				}
 			}
 		},
@@ -41,21 +44,32 @@
 					})
 					return
 				}
-				
-				if (this.userInfo.passward == null || this.userInfo.passward == '') {
+
+				if (this.userInfo.password == null || this.userInfo.password == '') {
 					this.$refs.uToast.show({
 						message: '瀵嗙爜涓虹┖',
 						type: 'error'
 					})
 					return
 				}
-				
+
 
 				console.log(this.userInfo)
-				
-				uni.navigateTo({
-					url:'/pages/index/index'
+				login(this.userInfo.account, this.userInfo.password).then(response => {
+					console.log(response)
+					if (!response.result) {
+						this.$refs.uToast.show({
+							message: response.msg,
+							type: 'error'
+						})
+						return
+					}
+					uni.navigateTo({
+						url:'/pages/index/index'
+					})
 				})
+
+
 			}
 		}
 	}
diff --git a/utils/auth.js b/utils/auth.js
new file mode 100644
index 0000000..9a7cc04
--- /dev/null
+++ b/utils/auth.js
@@ -0,0 +1,13 @@
+const TokenKey = 'App-Token'
+
+export function getToken() {
+  return uni.getStorageSync(TokenKey)
+}
+
+export function setToken(token) {
+  return uni.setStorageSync(TokenKey, token)
+}
+
+export function removeToken() {
+  return uni.removeStorageSync(TokenKey)
+}
diff --git a/utils/common.js b/utils/common.js
index f447160..00d4137 100644
--- a/utils/common.js
+++ b/utils/common.js
@@ -1,6 +1,54 @@
+/**
+* 鏄剧ず娑堟伅鎻愮ず妗�
+* @param content 鎻愮ず鐨勬爣棰�
+*/
 export function toast(content) {
-	uni.showToast({
-		icon:'none',
-		title:content
-	})
+  uni.showToast({
+    icon: 'none',
+    title: content
+  })
+}
+
+/**
+* 鏄剧ず妯℃�佸脊绐�
+* @param content 鎻愮ず鐨勬爣棰�
+*/
+export function showConfirm(content) {
+  return new Promise((resolve, reject) => {
+    uni.showModal({
+      title: '鎻愮ず',
+      content: content,
+      cancelText: '鍙栨秷',
+      confirmText: '纭畾',
+      success: function(res) {
+        resolve(res)
+      }
+    })
+  })
+}
+
+/**
+* 鍙傛暟澶勭悊
+* @param params 鍙傛暟
+*/
+export function tansParams(params) {
+  let result = ''
+  for (const propName of Object.keys(params)) {
+    const value = params[propName]
+    var part = encodeURIComponent(propName) + "="
+    if (value !== null && value !== "" && typeof (value) !== "undefined") {
+      if (typeof value === 'object') {
+        for (const key of Object.keys(value)) {
+          if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
+            let params = propName + '[' + key + ']'
+            var subPart = encodeURIComponent(params) + "="
+            result += subPart + encodeURIComponent(value[key]) + "&"
+          }
+        }
+      } else {
+        result += part + encodeURIComponent(value) + "&"
+      }
+    }
+  }
+  return result
 }
\ No newline at end of file
diff --git a/utils/constant.js b/utils/constant.js
new file mode 100644
index 0000000..8becd84
--- /dev/null
+++ b/utils/constant.js
@@ -0,0 +1,8 @@
+const constant = {
+   avatar: 'vuex_avatar',
+   name: 'vuex_name',
+   roles: 'vuex_roles',
+   permissions: 'vuex_permissions'
+ }
+
+ export default constant
diff --git a/utils/errorCode.js b/utils/errorCode.js
new file mode 100644
index 0000000..d2111ee
--- /dev/null
+++ b/utils/errorCode.js
@@ -0,0 +1,6 @@
+export default {
+  '401': '璁よ瘉澶辫触锛屾棤娉曡闂郴缁熻祫婧�',
+  '403': '褰撳墠鎿嶄綔娌℃湁鏉冮檺',
+  '404': '璁块棶璧勬簮涓嶅瓨鍦�',
+  'default': '绯荤粺鏈煡閿欒锛岃鍙嶉缁欑鐞嗗憳'
+}
diff --git a/utils/permission.js b/utils/permission.js
new file mode 100644
index 0000000..17969f2
--- /dev/null
+++ b/utils/permission.js
@@ -0,0 +1,51 @@
+import store from '@/store'
+
+/**
+ * 瀛楃鏉冮檺鏍¢獙
+ * @param {Array} value 鏍¢獙鍊�
+ * @returns {Boolean}
+ */
+export function checkPermi(value) {
+  if (value && value instanceof Array && value.length > 0) {
+    const permissions = store.getters && store.getters.permissions
+    const permissionDatas = value
+    const all_permission = "*:*:*"
+
+    const hasPermission = permissions.some(permission => {
+      return all_permission === permission || permissionDatas.includes(permission)
+    })
+
+    if (!hasPermission) {
+      return false
+    }
+    return true
+  } else {
+    console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`)
+    return false
+  }
+}
+
+/**
+ * 瑙掕壊鏉冮檺鏍¢獙
+ * @param {Array} value 鏍¢獙鍊�
+ * @returns {Boolean}
+ */
+export function checkRole(value) {
+  if (value && value instanceof Array && value.length > 0) {
+    const roles = store.getters && store.getters.roles
+    const permissionRoles = value
+    const super_admin = "admin"
+
+    const hasRole = roles.some(role => {
+      return super_admin === role || permissionRoles.includes(role)
+    })
+
+    if (!hasRole) {
+      return false
+    }
+    return true
+  } else {
+    console.error(`need roles! Like checkRole="['admin','editor']"`)
+    return false
+  }
+}
\ No newline at end of file
diff --git a/utils/request.js b/utils/request.js
index c2bd291..3cb3c0d 100644
--- a/utils/request.js
+++ b/utils/request.js
@@ -1,42 +1,57 @@
-const { error } = require("jquery")
-const { toast } = require("./common")
+import config from '@/config'
+import {
+	getToken
+} from '@/utils/auth'
+import errorCode from '@/utils/errorCode'
+import {
+	toast,
+	showConfirm,
+	tansParams
+} from '@/utils/common'
 
 let timeout = 10000
 const baseUrl = config.baseUrl
 
 const request = config => {
-	return new Promise((resolve,reject) => {
+	// 鏄惁闇�瑕佽缃� token
+	// const isToken = (config.headers || {}).isToken === false
+	// config.header = config.header || {}
+	// if (getToken() && !isToken) {
+	//   config.header['Authorization'] = 'Bearer ' + getToken()
+	// }
+	// get璇锋眰鏄犲皠params鍙傛暟
+	if (config.params) {
+		let url = config.url + '?' + tansParams(config.params)
+		url = url.slice(0, -1)
+		config.url = url
+	}
+	return new Promise((resolve, reject) => {
 		uni.request({
-			method:config.method || 'GET',
-			timeout:config.timeoue || timeout,
-			url:config.baseUrl || baseUrl + config.url,
-			data:config.data,
-			header: config.header || {'Content-Type': 'application/json'},
+			method: config.method || 'get',
+			timeout: config.timeout || timeout,
+			url: config.baseUrl || baseUrl + config.url,
+			data: config.data,
+			header: config.header,
 			dataType: 'json'
 		}).then(response => {
-			let [error,res] = response
-			if(error) {
-				toast('缃戠粶寮傚父,璇风◢鍚庨噸璇�')
-				return
+			if (response.statusCode === 200) {
+				resolve(response.data)
 			}
-			const result = res.data.result || true
-			const msg = errorCode[code] || res.data.msg || ErrorCode['defalut']
-			
-			if(!res) {
-				toast(msg)
-				return
-			}
-			resolve(res.data)
 		}).catch(error => {
-			let {message} = error
-			if(message === 'Network Error') {
+			let {
+				message
+			} = error
+			if (message === 'Network Error') {
 				message = '鍚庣鎺ュ彛杩炴帴寮傚父'
-			} else if(message.includes('timeout')) {
+			} else if (message.includes('timeout')) {
 				message = '绯荤粺鎺ュ彛璇锋眰瓒呮椂'
 			} else if (message.includes('Request failed with status code')) {
 				message = '绯荤粺鎺ュ彛' + message.substr(message.length - 3) + '寮傚父'
 			}
 			toast(message)
+			reject(error)
 		})
 	})
-}
\ No newline at end of file
+}
+
+export default request
\ No newline at end of file
diff --git a/utils/storage.js b/utils/storage.js
new file mode 100644
index 0000000..4c5fdec
--- /dev/null
+++ b/utils/storage.js
@@ -0,0 +1,32 @@
+import constant from './constant'
+
+// 瀛樺偍鍙橀噺鍚�
+let storageKey = 'storage_data'
+
+// 瀛樺偍鑺傜偣鍙橀噺鍚�
+let storageNodeKeys = [constant.avatar, constant.name, constant.roles, constant.permissions]
+
+const storage = {
+  set: function(key, value) {
+    if (storageNodeKeys.indexOf(key) != -1) {
+      let tmp = uni.getStorageSync(storageKey)
+      tmp = tmp ? tmp : {}
+      tmp[key] = value
+      uni.setStorageSync(storageKey, tmp)
+    }
+  },
+  get: function(key) {
+    let storageData = uni.getStorageSync(storageKey) || {}
+    return storageData[key] || ""
+  },
+  remove: function(key) {
+    let storageData = uni.getStorageSync(storageKey) || {}
+    delete storageData[key]
+    uni.setStorageSync(storageKey, storageData)
+  },
+  clean: function() {
+    uni.removeStorageSync(storageKey)
+  }
+}
+
+export default storage
diff --git a/utils/upload.js b/utils/upload.js
new file mode 100644
index 0000000..740387e
--- /dev/null
+++ b/utils/upload.js
@@ -0,0 +1,70 @@
+import store from '@/store'
+import config from '@/config'
+import { getToken } from '@/utils/auth'
+import errorCode from '@/utils/errorCode'
+import { toast, showConfirm, tansParams } from '@/utils/common'
+
+let timeout = 10000
+const baseUrl = config.baseUrl
+
+const upload = config => {
+  // 鏄惁闇�瑕佽缃� token
+  const isToken = (config.headers || {}).isToken === false
+  config.header = config.header || {}
+  if (getToken() && !isToken) {
+    config.header['Authorization'] = 'Bearer ' + getToken()
+  }
+  // get璇锋眰鏄犲皠params鍙傛暟
+  if (config.params) {
+    let url = config.url + '?' + tansParams(config.params)
+    url = url.slice(0, -1)
+    config.url = url
+  }
+  return new Promise((resolve, reject) => {
+      uni.uploadFile({
+        timeout: config.timeout || timeout,
+        url: baseUrl + config.url,
+        filePath: config.filePath,
+        name: config.name || 'file',
+        header: config.header,
+        formData: config.formData,
+        success: (res) => {
+          let result = JSON.parse(res.data)
+          const code = result.code || 200
+          const msg = errorCode[code] || result.msg || errorCode['default']
+          if (code === 200) {
+            resolve(result)
+          } else if (code == 401) {
+            showConfirm("鐧诲綍鐘舵�佸凡杩囨湡锛屾偍鍙互缁х画鐣欏湪璇ラ〉闈紝鎴栬�呴噸鏂扮櫥褰�?").then(res => {
+              if (res.confirm) {
+                store.dispatch('LogOut').then(res => {
+                  uni.reLaunch({ url: '/pages/login/login' })
+                })
+              }
+            })
+            reject('鏃犳晥鐨勪細璇濓紝鎴栬�呬細璇濆凡杩囨湡锛岃閲嶆柊鐧诲綍銆�')
+          } else if (code === 500) {
+            toast(msg)
+            reject('500')
+          } else if (code !== 200) {
+            toast(msg)
+            reject(code)
+          }
+        },
+        fail: (error) => {
+          let { message } = error
+          if (message == 'Network Error') {
+            message = '鍚庣鎺ュ彛杩炴帴寮傚父'
+          } else if (message.includes('timeout')) {
+            message = '绯荤粺鎺ュ彛璇锋眰瓒呮椂'
+          } else if (message.includes('Request failed with status code')) {
+            message = '绯荤粺鎺ュ彛' + message.substr(message.length - 3) + '寮傚父'
+          }
+          toast(message)
+          reject(error)
+        }
+      })
+  })
+}
+
+export default upload

--
Gitblit v1.9.3