import "./promise.finally"; import fly from "./fly"; import qs from "qs"; import storage from "@system.storage"; import device from "@system.device"; import request from "@system.request"; import media from "@system.media"; import prompt from "@system.prompt"; // 获取token let token = null; export const getToken = async () => { if (getToken.promise) return getToken.promise; if (!token) token = (await storage.get({ key: "token" })).data; // token格式化 if (token && typeof token === "string") token = JSON.parse(token); console.log("checkToken", checkToken(token)); if (!token) getToken.promise = login(); else if (checkToken(token)) return Promise.resolve(token.token); else { getToken.promise = refreshToken().catch(e => { return login(); }); } getToken.promise = getToken.promise .finally(() => { getToken.promise = null; }) .then(r => { return setToken(r); }); return getToken.promise; }; // 登录 export const login = async () => { console.log("begin login"); let device_no = (await device.getUserId()).data.userId; let device_info = (await device.getInfo()).data; let data = qs.stringify({ device_no: device_no, device_info: device_info }); let ret = await fly.post("/login", data); console.log("login over"); return ret; }; // 检测数据结果 export const checkResult = r => { if (!r.data.code) { return r.data.data; } else { return Promise.reject(r); } }; // 刷新token const refreshToken = () => { return fly .get("/RefreshToken", { token: token.token }, { headers: { Authorization: token.token } }) .then(r => { return checkResult(r); }) .catch(e => { console.error("刷新token失败"); return Promise.reject(e); }); }; // 检查token的有效期 const checkToken = t => { return new Date() < t.time; }; // 设置token const setToken = async t => { token = formatToken(t); await storage.set({ key: "token", value: token }); return t.token; }; // 清除token export const clearToken = async () => { token = null; await storage.delete({ key: "token" }); }; // 处理token的格式 const formatToken = t => { t.token = "Bearer " + t.token; t.time = t.time * 1000 - 5 * 1000 * 60; return t; }; // 下载图片 export const downImg = photoPath => { //获取图片名 let list = photoPath.split("."); let timeValue = new Date().valueOf(); /* 获取图片后缀 */ let photoExt = list[list.length - 1]; /* 设置要保存的图片名 */ let filename = `${timeValue}.${photoExt}`; request.download({ url: photoPath, filename: filename, success: data => { request.onDownloadComplete({ token: data.token, success: data => { /* 保存图片 */ media.saveToPhotosAlbum({ uri: data.uri, success: () => { prompt.showToast({ message: "图片保存成功!" }); }, fail: (data, code) => { if (code == 201) { prompt.showToast({ message: "授权成功后才能保存图片哦" }); } else if (code == 202) { prompt.showToast({ message: "请刷新后重试" }); } else if (code == 300) { prompt.showToast({ message: "图片保存失败" }); } } }); }, fail: (data, code) => { if (code == 1000) { prompt.showToast({ message: "图片下载失败" }); } else if (code == 1001) { prompt.showToast({ message: "下载任务不存在" }); } } }); }, fail: () => { } }); }; //校验手机号 export const validatePhone = phone => { const VALIDATE_REG = /^(0|86|17951)?(13[0-9]|15[012356789]|166|17[0-9]|18[0-9]|14[57]|19[89])[0-9]{8}$/; const isMobile = VALIDATE_REG.test(phone); return isMobile; }; //存储期限storge export const setStore = (key, value) => { if (!key) return; let curTime = new Date().getTime(); value = JSON.stringify({ data: value, time: curTime }); storage.set({ key: key, value: value }); }; //取期限storge expDay:storge 几天内有效 export const getStore = async (key, expDay = 3) => { if (!key) return false; let storgeData = JSON.parse((await storage.get({ key: key })).data); if (isExceedDay(storgeData.time, expDay)) { return false; } else { return storgeData.data; } }; function isExceedDay(theDate, expDay) { let date = new Date(); let targetTime = new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - (expDay - 1) * 24 * 3600 * 1000; return theDate < targetTime; }