init
This commit is contained in:
129
project-wl-yonghuduan-uniapp-vue3/utils/commonData.js
Normal file
129
project-wl-yonghuduan-uniapp-vue3/utils/commonData.js
Normal file
@@ -0,0 +1,129 @@
|
||||
// 取消原因数据
|
||||
export const cancelData= [
|
||||
{
|
||||
value: 1,
|
||||
label: '用户恶意下单'
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: '用户取消投递'
|
||||
},
|
||||
{
|
||||
value: 3,
|
||||
label: '违禁品'
|
||||
},
|
||||
{
|
||||
value: 4,
|
||||
label: '重复下单'
|
||||
},
|
||||
{
|
||||
value: 5,
|
||||
label: '无法联系上客户(空号、停机等)'
|
||||
},
|
||||
{
|
||||
value: 6,
|
||||
label: '虚假地址'
|
||||
},
|
||||
{
|
||||
value: 7,
|
||||
label: '实际发货地址与下单地址不符'
|
||||
},
|
||||
{
|
||||
value: 8,
|
||||
label: '因个人无法取件,退回到网点'
|
||||
}
|
||||
]
|
||||
// 付款方式数据
|
||||
export const SignData= [
|
||||
{
|
||||
value: 1,
|
||||
label: '本人'
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: '代收'
|
||||
}
|
||||
]
|
||||
// 签收人数据
|
||||
export const PayMethodData= [
|
||||
{
|
||||
value: 1,
|
||||
label: '寄付'
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: '到付'
|
||||
}
|
||||
]
|
||||
// 物品名称数据
|
||||
export const GoodsData= [
|
||||
{
|
||||
value: 1,
|
||||
label: '生活用品'
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: '文件'
|
||||
},
|
||||
{
|
||||
value: 3,
|
||||
label: '数码产品'
|
||||
},
|
||||
{
|
||||
value: 4,
|
||||
label: '食品'
|
||||
},
|
||||
{
|
||||
value: 5,
|
||||
label: '服饰'
|
||||
},
|
||||
{
|
||||
value: 6,
|
||||
label: '其他'
|
||||
}
|
||||
]
|
||||
|
||||
// 支付方式
|
||||
export const PayWayData= [
|
||||
{
|
||||
value: 1,
|
||||
label: '微信支付'
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: '支付宝支付'
|
||||
}
|
||||
]
|
||||
// 取件tab数据
|
||||
export const DeliveryData= [
|
||||
{
|
||||
value: 1,
|
||||
label: '寄件'
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: '收件'
|
||||
}
|
||||
]
|
||||
// 派件tab数据
|
||||
export const PickUpData= [
|
||||
{
|
||||
value: 1,
|
||||
label: '待派件'
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: '已签收'
|
||||
}
|
||||
]
|
||||
// 历史去拍tab数据
|
||||
export const HistoryTabData= [
|
||||
{
|
||||
value: 1,
|
||||
label: '取件'
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: '派件'
|
||||
}
|
||||
]
|
||||
13
project-wl-yonghuduan-uniapp-vue3/utils/env.js
Normal file
13
project-wl-yonghuduan-uniapp-vue3/utils/env.js
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
// 线上环境
|
||||
// export const baseUrl = 'http://slwl-geteway.itheima.net/customer'
|
||||
// 本地和测试环境
|
||||
export const baseUrl = 'http://god-express-gateway-t.itheima.net/customer'
|
||||
|
||||
|
||||
//不需要跳转到登录页面的接口
|
||||
export const notToLoginApiUrl = [
|
||||
'/order-manager/order/page',
|
||||
'/user/profile',
|
||||
'/order-manager/order/count'
|
||||
]
|
||||
150
project-wl-yonghuduan-uniapp-vue3/utils/index.js
Normal file
150
project-wl-yonghuduan-uniapp-vue3/utils/index.js
Normal file
@@ -0,0 +1,150 @@
|
||||
// 获取年月时、分
|
||||
export const taskTimeFormat = (val) => {
|
||||
const times = getTimeDate(val)
|
||||
return times.date
|
||||
}
|
||||
// 获取时、分
|
||||
export const overTimeFormat = (val) => {
|
||||
const times = getTimeDate(val)
|
||||
return times.times
|
||||
}
|
||||
// 时间格式化
|
||||
export const getTimeDate = (val) => {
|
||||
const date = new Date(val);
|
||||
date.setTime(date.getTime() + 3600000)
|
||||
//年 getFullYear():四位数字返回年份
|
||||
const year = date.getFullYear(); //getFullYear()代替getYear()
|
||||
//月 getMonth():0 ~ 11
|
||||
const month = date.getMonth() + 1;
|
||||
//日 getDate():(1 ~ 31)
|
||||
const day = date.getDate();
|
||||
//时 getHours():(0 ~ 23)
|
||||
const hour = date.getHours();
|
||||
//分 getMinutes(): (0 ~ 59)
|
||||
const minute = date.getMinutes();
|
||||
//秒 getSeconds():(0 ~ 59)
|
||||
const second = date.getSeconds()
|
||||
const time = {
|
||||
date: addZero(month) + '-' + addZero(day) + ' ' + addZero(hour) + ':' + addZero(minute),
|
||||
times: addZero(hour) + ':' + addZero(minute),
|
||||
veryDayDate: addZero(year) + '-' + addZero(month) + '-' + addZero(day) + ' ' + '00' + ':' + '00' + ':' +
|
||||
'00',
|
||||
}
|
||||
return time
|
||||
}
|
||||
|
||||
function addZero(s) {
|
||||
return s < 10 ? ('0' + s) : s;
|
||||
}
|
||||
// 获取处理当前日期,时分秒以00:00:00显示
|
||||
export const getTate = (val) => {
|
||||
let date = new Date(val);
|
||||
const year = date.getFullYear(); //getFullYear()代替getYear()
|
||||
//月 getMonth():0 ~ 11
|
||||
const month = date.getMonth() + 1;
|
||||
//日 getDate():(1 ~ 31)
|
||||
const day = date.getDate();
|
||||
const m = addZero(year) + '-' + addZero(month) + '-' + addZero(day) + ' ' + '00' + ':' + '00' + ':' +
|
||||
'00';
|
||||
return m
|
||||
}
|
||||
// 格式化触发的当前时间
|
||||
export const getNow = (val) => {
|
||||
let date = new Date(val);
|
||||
let y = date.getFullYear();
|
||||
let m = date.getMonth() + 1;
|
||||
let d = date.getDate();
|
||||
return m + "月" + d + '日';
|
||||
}
|
||||
// 前一天
|
||||
export const preDay = (date) => {
|
||||
let odata = new Date(new Date(date).getTime() - 24 * 60 * 60 * 1000); //计算当前日期 -1
|
||||
return getTate(odata)
|
||||
}
|
||||
// 后一天
|
||||
export const nextDay = (date) => {
|
||||
let odata = new Date(new Date(date).getTime() + 24 * 60 * 60 * 1000); //计算当前日期 +1
|
||||
return getTate(odata)
|
||||
}
|
||||
|
||||
// 获取近30天数据
|
||||
export const getDay = () => {
|
||||
const times = timeList()
|
||||
let arr = []
|
||||
times.forEach((val) => {
|
||||
const obj = getTate(val)
|
||||
arr.push(obj)
|
||||
})
|
||||
|
||||
return arr
|
||||
}
|
||||
// 获取当前日期、当月第一天,当月最后一天的时间戳,用来判断当前触发的时间是不是30天以内的时间
|
||||
export const getMonthDay = (val) => {
|
||||
const now = timeList()
|
||||
// // 当天的时间戳
|
||||
const timeNow = Date.parse(val);
|
||||
// // 当月第一天时间戳
|
||||
const timeStar = Date.parse(now[0]);
|
||||
// // 当月最后一天时间戳
|
||||
const timeEnd = Date.parse(now[now.length - 1]);
|
||||
const times = {
|
||||
timeNow: timeNow,
|
||||
timeStar: timeStar,
|
||||
timeEnd: timeEnd
|
||||
}
|
||||
return times
|
||||
}
|
||||
// 文字字节数限制
|
||||
export const validateTextLength = (value) => {
|
||||
|
||||
// 中文、中文标点、全角字符按1长度,英文、英文符号、数字按0.5长度计算
|
||||
if (value != undefined) {
|
||||
let cnReg = /([\u4e00-\u9fa5]|[\u3000-\u303F]|[\uFF00-\uFF60])/g
|
||||
let mat = value.match(cnReg)
|
||||
let length
|
||||
if (mat) {
|
||||
length = (mat.length + (value.length - mat.length) * 0.5)
|
||||
return length
|
||||
} else {
|
||||
return value.length * 0.5
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// 选择近30天时间
|
||||
export const timeList = () => {
|
||||
var thrityMonth = [];
|
||||
for (var i = 0; i < 30; i++) {
|
||||
thrityMonth.unshift(new Date(new Date().setDate(new Date().getDate() - i)).toLocaleDateString())
|
||||
}
|
||||
return thrityMonth
|
||||
}
|
||||
// 拨打电话
|
||||
export const call = (val) => {
|
||||
uni.makePhoneCall({
|
||||
phoneNumber: val,
|
||||
success(e) {
|
||||
// console(e)
|
||||
},
|
||||
fail(e) {
|
||||
// console(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
//功能只展示不实现的提示
|
||||
export const handleSecondQi = ()=>{
|
||||
uni.showToast({
|
||||
title: "程序员哥哥正在实现中",
|
||||
icon: "none",
|
||||
duration: 1000,
|
||||
});
|
||||
}
|
||||
|
||||
export const handleTimeToStrTime = (time)=>{
|
||||
const newTime = time.replace(/-/g, '/')
|
||||
return (new Date(newTime).getMonth() + 1 + '月') +
|
||||
(new Date(newTime).getDate() + '日') + ' ' +
|
||||
String(Number(new Date(newTime).getHours())<10?'0'+Number(new Date(newTime).getHours()) :Number(new Date(newTime).getHours())) + ':'+
|
||||
String(Number(new Date(newTime).getMinutes())<10?'0'+Number(new Date(newTime).getMinutes()) :Number(new Date(newTime).getMinutes()))
|
||||
}
|
||||
158
project-wl-yonghuduan-uniapp-vue3/utils/request.js
Normal file
158
project-wl-yonghuduan-uniapp-vue3/utils/request.js
Normal file
@@ -0,0 +1,158 @@
|
||||
import {
|
||||
baseUrl,
|
||||
notToLoginApiUrl
|
||||
} from './env'
|
||||
import {
|
||||
resetToken
|
||||
} from '@/pages/api/login.js'
|
||||
// 参数: url:请求地址 param:请求参数 method:请求方式 callBack:回调函数
|
||||
export function request({
|
||||
url = '',
|
||||
params = {},
|
||||
method = 'GET'
|
||||
}) {
|
||||
// 获取token(短令牌)
|
||||
const token = uni.getStorageSync('token')
|
||||
//获取长令牌
|
||||
const refreshToken = uni.getStorageSync('refreshToken')
|
||||
const header = {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
'access_token': token
|
||||
}
|
||||
let refreshHeader = {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
'refresh_token': refreshToken
|
||||
}
|
||||
console.log(url, 'url')
|
||||
const requestRes = new Promise((resolve, reject) => {
|
||||
let requestFunc = ''
|
||||
uni.request({
|
||||
timeout:20000,
|
||||
url: baseUrl + url,
|
||||
data: params,
|
||||
header: url === '/user/refresh' ? refreshHeader : header,
|
||||
method: method,
|
||||
success: (res) => {
|
||||
const {
|
||||
data
|
||||
} = res
|
||||
if (data.code == 0 || data.code == 200) {
|
||||
resolve(res.data)
|
||||
} else {
|
||||
console.log(res, '112233')
|
||||
// resolve(res.data)
|
||||
handleError(res, resolve, url, params, method)
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
const error = {
|
||||
data: {
|
||||
msg: err.data
|
||||
}
|
||||
}
|
||||
reject(error)
|
||||
}
|
||||
|
||||
})
|
||||
})
|
||||
const handleError = (error, resolve, url, params, method) => {
|
||||
var errorCode = error.statusCode;
|
||||
if (errorCode == 401) {
|
||||
if (token && refreshToken) {
|
||||
//刷新token
|
||||
resetToken().then((res) => {
|
||||
console.log(res, 'resetToken')
|
||||
if (res.code === 200) {
|
||||
uni.setStorageSync('token', res.data.accessToken);
|
||||
uni.setStorageSync('refreshToken', res.data.refreshToken);
|
||||
//当重新刷新短token的时候,重新执行上一个401的接口,保证页面的无感正常交互
|
||||
let newHeader = {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
'access_token': uni.getStorageSync('token')
|
||||
}
|
||||
uni.request({
|
||||
url: baseUrl + url,
|
||||
data: params,
|
||||
header: newHeader,
|
||||
method: method,
|
||||
success: (res) => {
|
||||
const {
|
||||
data
|
||||
} = res
|
||||
if (data.code == 0 || data.code == 200) {
|
||||
resolve(res.data)
|
||||
} else {
|
||||
resolve()
|
||||
uni.showToast({
|
||||
title: res.msg || '网络异常',
|
||||
duration: 2000,
|
||||
icon: 'none',
|
||||
});
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
const error = {
|
||||
data: {
|
||||
msg: err.data
|
||||
}
|
||||
}
|
||||
reject(error)
|
||||
}
|
||||
|
||||
})
|
||||
} else if (res.data.code === 1) {
|
||||
console.log(1, res)
|
||||
uni.removeStorageSync('token')
|
||||
uni.removeStorageSync('refreshToken')
|
||||
uni.showToast({
|
||||
title: res.data.msg || '刷新token失败,请重新登录.',
|
||||
icon: "none",
|
||||
duration: 1000,
|
||||
success: () => {
|
||||
setTimeout(() => {
|
||||
uni.navigateTo({
|
||||
url: '/pages/login/index'
|
||||
});
|
||||
}, 2000)
|
||||
|
||||
},
|
||||
fail: () => {}
|
||||
});
|
||||
}
|
||||
}).catch((err) => {
|
||||
uni.showToast({
|
||||
title: '网络异常',
|
||||
duration: 2000,
|
||||
icon: 'none'
|
||||
});
|
||||
})
|
||||
}
|
||||
} else if (errorCode == 500) {
|
||||
if (uni.getStorageSync("token") == "") {
|
||||
uni.showToast({
|
||||
title: "请先登录",
|
||||
icon: "none",
|
||||
duration: 2000,
|
||||
success: () => {
|
||||
|
||||
},
|
||||
fail: () => {
|
||||
|
||||
}
|
||||
});
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: error.data.error.message + "",
|
||||
icon: "none",
|
||||
duration: 3000
|
||||
});
|
||||
}
|
||||
} else {
|
||||
resolve(error)
|
||||
}
|
||||
}
|
||||
return requestRes
|
||||
}
|
||||
15
project-wl-yonghuduan-uniapp-vue3/utils/storage.js
Normal file
15
project-wl-yonghuduan-uniapp-vue3/utils/storage.js
Normal file
@@ -0,0 +1,15 @@
|
||||
let storage = {
|
||||
|
||||
set(key, value) {
|
||||
return localStorage.setItem(key, value);
|
||||
},
|
||||
get(key) {
|
||||
return localStorage.getItem(key);
|
||||
},
|
||||
remove(key) {
|
||||
localStorage.removeItem(key);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default storage;
|
||||
66
project-wl-yonghuduan-uniapp-vue3/utils/validate.js
Normal file
66
project-wl-yonghuduan-uniapp-vue3/utils/validate.js
Normal file
@@ -0,0 +1,66 @@
|
||||
// 手机校验
|
||||
export function validatePhone(rule, value, data, callback) {
|
||||
const reg = /^[1][3-9][0-9]{9}$/
|
||||
if (value === '' || value === undefined || value === null) {
|
||||
if (rule.required) {
|
||||
callback('请输入电话号码')
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
} else if (!Number.isInteger(value)) {
|
||||
callback('电话号码必须全为数字')
|
||||
} else if (value.trim().length < 11) {
|
||||
callback('电话号码长度必须是11位')
|
||||
} else {
|
||||
if (!reg.test(value) && value !== '') {
|
||||
callback('请输入正确的电话号码')
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
}
|
||||
// 手机验证
|
||||
export const isPhone = (value) => {
|
||||
const reg = /^[1][3-9][0-9]{9}$/
|
||||
if (!reg.test(value) || value === '') {
|
||||
return false
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
// 倒计时
|
||||
export const timeCountdown = (obj) => {
|
||||
// obj包括timer、times show
|
||||
const TIME_COUNT = 60; // 默认倒计时秒数
|
||||
if (!obj.timer) {
|
||||
obj.times = TIME_COUNT;
|
||||
obj.show = false;
|
||||
obj.timer = setInterval(() => {
|
||||
if (obj.times > 0 && obj.times <= TIME_COUNT) {
|
||||
obj.times--;
|
||||
} else {
|
||||
obj.show = true;
|
||||
clearInterval(obj.timer); // 清空定时器
|
||||
obj.timer = null;
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
return {
|
||||
timer: obj.timer,
|
||||
show: obj.show,
|
||||
times: obj.times,
|
||||
};
|
||||
};
|
||||
// 身份证校验
|
||||
export const validateIdentityCard = (value) => {
|
||||
const accountreg = /(^\d{15}$)|(^\d{17}(\d|X|x)$)/g
|
||||
let tipVal = ''
|
||||
if (value === undefined || value === '') {
|
||||
return false
|
||||
} else if (!accountreg.test(value)) {
|
||||
return false
|
||||
}else{
|
||||
return true
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user