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