Files
xl-mobile/src/utils/uils.js
2025-07-02 15:22:16 +08:00

205 lines
5.7 KiB
JavaScript

import {BASEURL} from "./request.js";
import {useUserStore} from "../pinia/UserStore/index.js";
export const showToast = (options) => {
if (typeof options === 'string') {
uni.showToast({
title: options, icon: 'none',
}).then();
} else {
uni.showToast(options).then();
}
}
export const isWXWeb = () => {
const userAgent = navigator.userAgent;
return userAgent.includes('MicroMessenger');
}
export const toPage = async (url) => {
try {
await uni.navigateTo({
url: url,
})
} catch (e) {
await uni.reLaunch({
url: url,
})
}
}
export const clearObject = (obj) => {
Object.keys(obj).forEach(key => {
delete obj[key];
});
};
export const backPage = (delta) => {
uni.navigateBack({
delta: delta || 1
}).then();
}
export const copy = (context) => {
// #ifndef APP-PLUS || MP-WEIXIN
try {
navigator.clipboard.writeText(context)
.then(() => {
showToast('已复制');
})
.catch((e) => {
console.error(e);
showToast('复制失败');
});
} catch (e) {
showToast('复制失败');
}
// #endif
// #ifdef APP-PLUS || MP-WEIXIN
uni.setClipboardData({
data: context, success: () => {
showToast('已复制');
}, fail: () => {
showToast('复制失败');
}
})
// #endif
}
export const download = (urls) => {
// #ifndef APP-PLUS || MP-WEIXIN
const promises1 = urls.map(url => new Promise((resolve, reject) => {
const iframe = document.createElement('iframe');
iframe.src = url;
iframe.style.display = 'none';
document.body.appendChild(iframe);
resolve(true);
}));
Promise.all(promises1).then(() => {
showToast('保存成功');
}).catch(() => {
showToast('保存失败');
});
// #endif
// #ifdef APP-PLUS
const promises2 = urls.map(v => new Promise((resolve, reject) => {
uni.downloadFile({
url: v,
success: () => {
resolve(true);
},
fail: () => {
reject(false);
}
})
}));
Promise.all(promises2).then(() => {
showToast('保存成功');
}).catch(() => {
showToast('保存失败');
});
// #endif
// #ifdef MP-WEIXIN
const promises3 = urls.map(v => new Promise((resolve, reject) => {
uni.downloadFile({
url: v,
success: ({tempFilePath}) => {
uni.saveImageToPhotosAlbum({
filePath: tempFilePath,
success: () => {
resolve(true);
},
fail: (err) => {
console.log(err);
reject(false);
}
})
},
fail: (err) => {
console.log(err);
reject(false);
}
})
}));
Promise.all(promises3).then(() => {
showToast('保存成功');
}).catch(() => {
showToast('保存失败');
});
// #endif
}
export const numberToCharacter = (number) => {
return ['一', '二', '三', '四', '五'][number];
}
export const toWXMiniApp = (id, task_children_id) => {
const {token} = useUserStore();
window.open(`weixin://dl/business/?appid=${import.meta.env.VITE_APP_ID}&path=pages/index/index&env_version=${import.meta.env.VITE_APP_VERSION}&query=${encodeURIComponent(`id=${id}&task_children_id=${task_children_id}&token=${token}`)}`);
}
export const uploadFile = ({count}) => {
const UserStore = useUserStore();
return new Promise((resolve, reject) => {
uni.chooseImage({
count: count,
success: ({tempFilePaths}) => {
const all = tempFilePaths.map(v => new Promise((res, rej) => {
uni.uploadFile({
url: BASEURL + '/upload/upload',
filePath: v,
name: "file",
header: {
token: UserStore.token
},
success: ({data}) => {
res(JSON.parse(data));
},
fail: (err) => {
showToast(err.errMsg);
rej(err);
}
});
}));
Promise.all(all).then((res) => {
resolve(res);
}).catch(err => {
reject(err);
})
},
fail: (err) => {
showToast(err.errMsg);
reject(err);
}
});
});
}
export const verifyForm = (model, rules) => {
Object.entries(model).forEach(([key, value]) => {
console.log(rules[key], key, value)
if (rules[key]) {
if (rules[key].required && !value) {
showToast({
icon: 'error',
mask: true,
title: `${rules[key].title}不能为空`,
});
throw new Error(rules[key].msg);
}
if (rules[key].reg) {
if (!rules[key].reg.test(value)) {
showToast({
icon: 'error',
mask: true,
title: rules[key].msg,
});
throw new Error(rules[key].msg);
}
}
}
});
}