308 lines
7.5 KiB
JavaScript
308 lines
7.5 KiB
JavaScript
import CryptoJS from "crypto-js";
|
||
import * as uuid from "uuid";
|
||
import {
|
||
postJson
|
||
} from "@/utils/requests.js"
|
||
import pageData from "@/static/json/page.json"
|
||
import {
|
||
jsonString
|
||
} from "../uni_modules/uv-ui-tools/libs/function/test";
|
||
import '@batiao/batiao-sdk-uniapp-unimp';
|
||
export default {
|
||
install(app, options) {
|
||
|
||
|
||
|
||
// 水印
|
||
app.config.globalProperties.$watermark = () => {
|
||
// if(app.config.globalProperties.$isChristmasPeriod()){
|
||
// return "/static/lottie/christmas.json"
|
||
// }else{
|
||
return "/static/lottie/watermark.json"
|
||
// }
|
||
}
|
||
|
||
app.config.globalProperties.$apiUserEvent = async (type, adminData, uniData) => {
|
||
if (type != 'uni') {
|
||
if (!adminData.prefix) {
|
||
adminData.prefix = ".uni.alipay."
|
||
}
|
||
await postJson('a', 'api/user/event', {
|
||
type: adminData.type,
|
||
key: adminData.type + adminData.prefix + adminData.key,
|
||
|
||
value: adminData.value,
|
||
extra: JSON.stringify({
|
||
uni_version: app.config.globalProperties.$version,
|
||
...adminData.extra
|
||
}),
|
||
})
|
||
}
|
||
}
|
||
|
||
app.config.globalProperties.$toFiexd = (num, index = 2) => { //保留小数
|
||
return Number(num).toFixed(index)
|
||
}
|
||
|
||
// 跳转页面方法
|
||
app.config.globalProperties.$goRechargePage = (type, source = 'uni_alipay_other') => { //保留小数
|
||
let pages = getCurrentPages();
|
||
let currentPage = pages[pages.length - 1];
|
||
let currentUrl = currentPage.route;
|
||
currentUrl = pageData[currentUrl]
|
||
if (type) {
|
||
// 点击水印
|
||
app.config.globalProperties.$apiUserEvent('all', {
|
||
type: "click",
|
||
key: type,
|
||
value: type != "watermark" ? "关闭水印" : "点击右下角水印图标",
|
||
extra: {
|
||
page: currentUrl
|
||
}
|
||
}, {
|
||
type: 'click_' + type,
|
||
data: {
|
||
page: currentUrl
|
||
}
|
||
})
|
||
}
|
||
// 进入页面
|
||
app.config.globalProperties.$apiUserEvent('all', {
|
||
type: "event",
|
||
key: "payment_onload",
|
||
value: "进入充值页面",
|
||
extra: {
|
||
from: currentUrl
|
||
}
|
||
}, {
|
||
type: 'payment_onload',
|
||
data: {
|
||
from: currentUrl
|
||
}
|
||
})
|
||
uni.navigateTo({
|
||
url: '/pages/common/recharge/index?source=' + source
|
||
});
|
||
}
|
||
|
||
|
||
app.config.globalProperties.$isVip = () => {
|
||
let user = uni.getStorageSync('userInfo')
|
||
if (user.vip >= 2) {
|
||
return false
|
||
} else {
|
||
return true
|
||
}
|
||
}
|
||
|
||
|
||
|
||
//解密
|
||
const deCode = (str) => {
|
||
const key = CryptoJS.enc.Utf8.parse(uni.getStorageSync('decrypt'));
|
||
const iv = key.clone();
|
||
iv.sigBytes = 16;
|
||
iv.clamp();
|
||
let res = CryptoJS.AES.decrypt(str, key, {
|
||
iv,
|
||
mode: CryptoJS.mode.CBC,
|
||
padding: CryptoJS.pad.Pkcs7,
|
||
}).toString(CryptoJS.enc.Utf8);
|
||
res = JSON.parse(res);
|
||
return res;
|
||
};
|
||
// 加密签名
|
||
const sign = (config) => {
|
||
let key = uni.getStorageSync('encrypt')
|
||
const method = config.method;
|
||
if (!config.data) {
|
||
config.data = {};
|
||
}
|
||
config.data.timestamp = Math.floor(new Date().getTime() / 1000);
|
||
config.data.nonce = uuid.v4();
|
||
if (
|
||
method === "GET" ||
|
||
method === "DELETE" ||
|
||
method === "get" ||
|
||
method === "delete"
|
||
) {
|
||
const keys = Object.keys(config.data);
|
||
keys.sort();
|
||
for (const i in keys) {
|
||
keys[i] = keys[i] + "=" + encodeURIComponent(config.data[keys[i]]);
|
||
}
|
||
const temp = keys.join("&") + "&" + CryptoJS.MD5(key).toString();
|
||
config.data.signature = CryptoJS.MD5(temp).toString();
|
||
} else if (
|
||
method === "POST" ||
|
||
method === "PUT" ||
|
||
method === "post" ||
|
||
method === "put"
|
||
) {
|
||
if (!config.data) {
|
||
config.data = {};
|
||
}
|
||
const keys = Object.keys(config.data);
|
||
keys.sort();
|
||
for (const i in keys) {
|
||
keys[i] = keys[i] + "=" + encodeURIComponent(config.data[keys[i]]);
|
||
}
|
||
let temp = keys.join("&");
|
||
temp += "&" + JSON.stringify(config.data);
|
||
temp += "&" + CryptoJS.MD5(key).toString();
|
||
config.data.signature = CryptoJS.MD5(temp).toString();
|
||
}
|
||
console.log("config:", config)
|
||
return config
|
||
};
|
||
|
||
// 请求
|
||
app.config.globalProperties.$requestPromise = async (data,isCode=true) => {
|
||
let isTest = uni.getStorageSync('isTest')
|
||
//头部header(浅拷贝,避免改到 storage 缓存对象)
|
||
let header = { ...(uni.getStorageSync('header') || {}) }
|
||
//请求地址
|
||
let host
|
||
// #ifdef H5
|
||
host = data.url
|
||
// #endif
|
||
// #ifndef H5
|
||
host = uni.getStorageSync('host') + data.url
|
||
// #endif
|
||
// 签名
|
||
if(isCode){
|
||
if(isTest){
|
||
data = sign(data)
|
||
}
|
||
|
||
}else{
|
||
host="http://10.3.0.24:9209/"+ data.url
|
||
header['x-token']="bdf87a98-eef0-47df-9faf-41d547b0457e"
|
||
}
|
||
// 排序
|
||
const sortedKeys = Object.keys(data.data).sort();
|
||
let str = ''
|
||
for (const key of sortedKeys) {
|
||
str += '&' + key + '=' + encodeURIComponent(
|
||
data.data[key] == null ? '' : String(data.data[key])
|
||
);
|
||
}
|
||
str = str.replace('&', '?')
|
||
// 拼接URL
|
||
if(isTest){
|
||
host = host + str
|
||
}
|
||
// 鸿蒙 GET/DELETE 若再传 data 会二次拼进 query,导致参数异常;参数已在 URL 中
|
||
let requestData = data.data
|
||
// #ifdef APP-HARMONY
|
||
const method = (data.method || 'GET').toUpperCase()
|
||
if (method === 'GET' || method === 'DELETE') {
|
||
requestData = {}
|
||
}
|
||
// #endif
|
||
// 测试环境用 uni.request,正式环境用宿主 nativeRequest
|
||
const api = isTest
|
||
? uni.request
|
||
: (uni.nativeRequest || uni.request)
|
||
const response = await new Promise((resolve, reject) => {
|
||
api({
|
||
url: host,
|
||
method: data.method,
|
||
data: requestData,
|
||
params: requestData,
|
||
header,
|
||
success: res => {
|
||
try {
|
||
if(isCode&&isTest){
|
||
res.data = deCode(res.data.data)
|
||
}
|
||
} catch (err) {
|
||
|
||
}
|
||
resolve(res.data);
|
||
},
|
||
fail: e => {
|
||
reject(e);
|
||
}
|
||
});
|
||
});
|
||
return response;
|
||
};
|
||
|
||
app.config.globalProperties.$getUserInfo = async () => {
|
||
try {
|
||
let user = await app.config.globalProperties.$requestPromise({
|
||
url: 'api/user',
|
||
method: "GET",
|
||
data: {}
|
||
})
|
||
console.log("模拟请求:", JSON.stringify(user))
|
||
if (user.code == 0) {
|
||
uni.setStorageSync('AppUser', user.data)
|
||
uni.setStorageSync('userInfo', user.data)
|
||
}
|
||
} catch (error) {
|
||
//TODO handle the exception
|
||
}
|
||
}
|
||
// 上传图片
|
||
app.config.globalProperties.$uploadImage = async (filePath) => {
|
||
//头部header
|
||
let header = uni.getStorageSync('header')
|
||
//请求地址
|
||
let host = uni.getStorageSync('host') + 'api/image/segment'
|
||
header['content-type'] = "multipart/form-data"
|
||
|
||
// // 排序
|
||
let data = {
|
||
method: 'POST',
|
||
data: {},
|
||
url: 'api/image/segment'
|
||
}
|
||
data = sign(data)
|
||
const sortedKeys = Object.keys(data.data).sort();
|
||
let str = ''
|
||
for (const key of sortedKeys) {
|
||
str += '&' + key + '=' + encodeURIComponent(data.data[key]);
|
||
}
|
||
|
||
str = str.replace('&', '?')
|
||
// 拼接URL
|
||
host = host + str
|
||
console.log(host);
|
||
console.log(data);
|
||
uni.uploadFile({
|
||
url: host, // 完整URL
|
||
filePath: filePath,
|
||
name: 'file',
|
||
method: "POST",
|
||
header: header,
|
||
formData: {
|
||
...data.data
|
||
},
|
||
success: (res) => {
|
||
console.log('1.上传成功:', JSON.stringify(res));
|
||
|
||
},
|
||
fail: (err) => {
|
||
console.error('2. 错误详情:', JSON.stringify(err));
|
||
},
|
||
complete: (res) => {
|
||
console.log('3. 上传完成');
|
||
}
|
||
});
|
||
};
|
||
|
||
app.config.globalProperties.$imageUpload = async (imagePath) => {
|
||
return new Promise((resolve, reject) => {
|
||
postJson('a', 'api/image/segment/base64', {
|
||
file: imagePath
|
||
}).then(res => {
|
||
resolve(res)
|
||
}).catch(err => {
|
||
reject(err)
|
||
})
|
||
})
|
||
};
|
||
}
|
||
}; |