首次提交

This commit is contained in:
xk_guohonglei
2020-08-18 15:09:31 +08:00
commit 1f8b3e6e55
57 changed files with 9637 additions and 0 deletions

15
utils/auth.js Normal file
View File

@@ -0,0 +1,15 @@
import Cookies from 'js-cookie'
const TokenKey = 'token'
export function getToken () {
return Cookies.get(TokenKey)
}
export function setToken (token) {
return Cookies.set(TokenKey, token)
}
export function removeToken () {
return Cookies.remove(TokenKey)
}

30
utils/encode.js Normal file
View File

@@ -0,0 +1,30 @@
import CryptoJS from 'crypto-js'
import md5 from 'js-md5'
let Base64 = require('js-base64').Base64
var keyStr = 'qDfajQ*v@W1mCruZ'
export default {
/**
* @param {*需要加密的字符串 注对象转化为json字符串再加密} word
* @param {*aes加密需要的key值这个key值后端同学会告诉你} keyStr
*/
encrypt (word) { // 加密
var key = CryptoJS.enc.Utf8.parse(keyStr)
var srcs = CryptoJS.enc.Utf8.parse(word)
var encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) // 加密模式为ECB补码方式为PKCS5Padding也就是PKCS7
return encrypted.toString()
},
decrypt (word) { // 解密
var key = CryptoJS.enc.Utf8.parse(keyStr)
var decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 })
return CryptoJS.enc.Utf8.stringify(decrypt).toString()
},
md5Salt (str) {
return Base64.encode(md5(str + 'Do&9hY%l8e'))
},
md5NoSalt (str) {
return md5(str)
}
}

127
utils/request.js Normal file
View File

@@ -0,0 +1,127 @@
import axios from 'axios'
import utils from '@/utils/encode'
import qs from 'qs'
const service = axios.create({
// #ifndef MP
baseURL: 'http://192.168.0.140:861',
// #endif
// #ifdef MP
baseURL: 'http://192.168.0.140:861',
// #endif
timeout: 5000
})
let data = {
params: '',
serviceCode: '',
digest: '',
appkey: 'dirverAppAndroid'
}
service.interceptors.request.use(
config => {
// 拦截请求
console.log('发送请求', data)
uni.showLoading({
title: '加载中...'
})
const token = uni.getStorageSync('Authorization')
config.headers['Authorization'] = token
if (config.method === 'post' && config.url.indexOf('/weixin') < 0 && config.url.indexOf('/api') >= 0) {
// 发送请求前,将参数加密,并生成密钥
data.serviceCode = config.data.serviceCode
data.params = utils.encrypt(JSON.stringify(config.data))
data.digest = utils.md5Salt(JSON.stringify(config.data))
// console.log('参数:', data)
config.data = qs.stringify(data)
}
if (config.method === 'post' && config.url.indexOf('/upload') >= 0) {
// 上传图片前压缩图片
// compress()
// console.log(data.params)
// console.log('upload')
}
if (config.method === 'post' && config.url.indexOf('/weixin') >= 0) {
// 上传图片前压缩图片
// compress()
// console.log(data.params)
// console.log('upload')
config.baseURL = 'http://192.168.0.140:8089'
}
console.log('请求参数:', config)
return config
},
error => {
uni.hideLoading()
uni.showToast({
title: '请求失败!',
icon: "none"
})
return Promise.reject(error)
}
)
service.interceptors.response.use(
response => {
const res = response.data
uni.hideLoading()
if (res.code != '1000') {
// 操作不成功,返回错误信息
if (res.code === 404) {
// 直接跳转到首页
uni.reLaunch({
url: '/pages/index/index'
});
} else if (res.code === 'TOKEN-9999') {
// 登录过期,清除缓存
uni.removeStorageSync("Authorization")
} else {
uni.showToast({
title: res.msg,
icon: "none"
})
return Promise.reject(error)
}
}
return res
},
error => {
uni.hideLoading()
uni.showToast({
title: '请求失败!',
icon: "none"
})
return Promise.reject(error)
}
)
// #ifndef H5
service.defaults.adapter = function(config) {
return new Promise((resolve, reject) => {
var settle = require('axios/lib/core/settle');
var buildURL = require('axios/lib/helpers/buildURL');
var url = (config.url.indexOf('/weixin') < 0 && config.url.indexOf('/api') >= 0) ? (config.baseURL + buildURL(
config.url, config.params, config.paramsSerializer)) : config.baseWxURL
uni.request({
method: config.method.toUpperCase(),
url: url,
header: config.headers,
data: config.data,
dataType: config.dataType,
responseType: config.responseType,
sslVerify: config.sslVerify,
complete: function complete(response) {
response = {
data: response.data,
status: response.statusCode,
errMsg: response.errMsg,
header: response.header,
config: config
};
settle(resolve, reject, response);
}
})
})
}
// #endif
export default service

153
utils/validate.js Normal file
View File

@@ -0,0 +1,153 @@
import Vue from 'vue'
import VeeValidate from 'vee-validate'
Vue.use(VeeValidate)
const formatFileSize = function (size) {
let units = ['Byte', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
let threshold = 1024
size = Number(size) * threshold
let i = size === 0 ? 0 : Math.floor(Math.log(size) / Math.log(threshold))
return (size / Math.pow(threshold, i)).toFixed(2) * 1 + ' ' + units[i]
}
const fieldName = name // 原来的i18n的fieldName会显示绑定的name值就是英文实际项目中不需要
VeeValidate.Validator.localize('zh_CN', {
name: 'zh_CN',
attributes: {},
messages: {
required: () => `${fieldName}不能为空`,
_default: () => `无效${fieldName}`,
after: (field, [target]) => `${fieldName}必须在${target}之后`,
alpha_dash: () => `${fieldName}能够包含字母数字字符、破折号和下划线`,
alpha_num: () => `${fieldName}只能包含字母数字字符`,
alpha_spaces: () => `${fieldName}只能包含字母字符和空格`,
alpha: () => `${fieldName}只能包含字母字符`,
before: (field, [target]) => `${fieldName}必须在${target}之前`,
between: (field, [min, max]) => `${fieldName}必须在${min}${max}之间`,
confirmed: (field, [confirmedField]) =>
`${fieldName}不能和${confirmedField}匹配`,
credit_card: () => `${fieldName}格式错误`,
date_between: (field, [min, max]) => `${fieldName}必须在${min}${max}之间`,
date_format: (field, [format]) => `${fieldName}必须符合${format}格式`,
decimal: (field, [decimals = '*'] = []) =>
`${fieldName}必须是数字,且能够保留${
decimals === '*' ? '' : decimals
}位小数`,
digits: (field, [length]) =>
`${fieldName}必须是数字,且精确到${length}位数`,
dimensions: (field, [width, height]) =>
`${fieldName}必须在${width}像素与${height}像素之间`,
email: () => `${fieldName}不是一个有效的邮箱`,
ext: () => `${fieldName}不是一个有效的文件`,
image: () => `${fieldName}不是一张有效的图片`,
included: () => `${fieldName}不是一个有效值`,
integer: () => `${fieldName}必须是整数`,
ip: () => `${fieldName}不是一个有效的地址`,
length: (field, [length, max]) => {
if (max) {
return `${fieldName}长度必须在${length}${max}之间`
}
return `${fieldName}长度必须为${length}`
},
max: (field, [length]) => `${fieldName}不能超过${length}个字符`,
max_value: (field, [max]) => `${fieldName}必须小于或等于${max}`,
mimes: () => `${fieldName}不是一个有效的文件类型`,
min: (field, [length]) => `${fieldName}必须至少有${length}个字符`,
min_value: (field, [min]) => `${fieldName}必须大于或等于${min}`,
excluded: () => `${fieldName}不是一个有效值`,
numeric: () => `${fieldName}只能包含数字字符`,
regex: () => `${fieldName}格式无效`,
size: (field, [size]) => `${fieldName}必须小于${formatFileSize(size)}`,
url: () => `${fieldName}不是一个有效的url`
}
})
// 手机号码验证
VeeValidate.Validator.extend('mobile', {
getMessage: () => `请输入正确的手机号码`,
validate: value =>
/^(((13[0-9]{1})|(14[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1})|(19[0-9]{1})|(16[0-9]{1}))+\d{8})$/.test(
value
)
})
// 8-16 字母数字组合起来的密码
// 不能全数字不能全字母
VeeValidate.Validator.extend('pwdRule', {
getMessage: () => `请输入8-16数字与字母混合密码`,
validate: value =>
value.length >= 8 &&
/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/.test(
value
)
})
// 短信验证码验证
// 验证个屁并不知道格式
VeeValidate.Validator.extend('random', {
getMessage: () => `请输入正确的验证码`,
validate: value =>
value.length === 6 &&
/^\d{6}$/.test(
value
)
})
// 汉语姓名验证
// 支持少数民族名字
VeeValidate.Validator.extend('userName', {
getMessage: () => `请输入正确的姓名`,
validate: value =>
/^[\u4e00-\u9fa5]+(·[\u4e00-\u9fa5]+)*$/.test(
value
)
})
// 15位或18位身份证号验证
VeeValidate.Validator.extend('idNumber', {
getMessage: () => `请输入有效的身份证号`,
validate: value =>
/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/
.test(
value
)
})
// 19位道路运输资格证号
VeeValidate.Validator.extend('eqcNumber', {
getMessage: () => `请输入正确的19位道路运输资格证号`,
validate: value =>
value.length === 19 &&
/^\d{19}$/.test(
value
)
})
// 车牌号验证
VeeValidate.Validator.extend('plateRule', {
getMessage: () => `请输入正确的车牌号`,
validate: value =>
/^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/
.test(
value
)
})
// 银行卡号格式验证
VeeValidate.Validator.extend('bankCardRule', {
getMessage: () => `请输入有效的银行卡号`,
validate: value =>
/^([1-9]{1})(\d{14}|\d{15}|\d{18})$/.test(
value
)
})
// 8-16 字母数字组合起来的密码
// 不能全数字不能全字母
VeeValidate.Validator.extend('pwdRule', {
getMessage: () => `请输入8-16数字与字母混合密码`,
validate: value =>
value.length >= 8 &&
/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/.test(
value
)
})