Files
site-10584/utils/common.ts
2026-01-29 10:43:43 +08:00

201 lines
4.6 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import type {CmsArticle} from "~/api/cms/cmsArticle/model";
import {FILE_SERVER} from "~/config";
const route = useRoute();
/**
* 判断是否为整数
* @param num
*/
export const isInteger = (num: any) => {
return /^-?\d+$/.test(num);
}
/**
* 判断是否是移动设备
*/
export function isMobileDevice(): boolean {
return (typeof window.orientation !== "undefined") || /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
}
/**
* 获取当前语言版本
*/
export const getLang = () => {
const i18n = useI18n();
if(i18n.locale.value == 'zh'){
return 'zh_CN';
}
return i18n.locale.value;
}
/**
* 从spm提取参数
* param spm?=0.1.2.3.4.5.6.7
* @param index
*/
export const getIdBySpm = (index: number) => {
if(route.query.spm){
const split = String(route.query.spm).split('.')
return split[index];
}
return undefined;
}
/**
* 获取当前网址的Path部分
* 示例 http://websoft.top/article/123.html
* getPath(1) 将返回 article
* @param index
*/
export const getPath = (index?: number) => {
const path = route.path;
const i18n = useI18n();
if(i18n.locale.value == 'en' && index){
index = index + 1;
}
if(index){
const split = path.split('/');
return split[index];
}
return path;
}
/**
* 获取当前网址的ID部分
* 示例 /article/123.html
* @return 123
*/
export const paramsId = () => {
let index;
index = route.params.id;
if(index){
try {
index = index.toString().split('.')[0];
return Number(index);
} catch (e) {
return Number(index);
}
}
return 0;
}
export const getNavIdByParamsId = (text: any) => {
if(typeof text === 'number'){
return Number(text);
}
const index = text.toString().split('.')[0];
if(typeof index){
return Number(index);
}
return 0;
}
// 打开新窗口
export function openUrl(url: string) {
window.open(url, '_blank')
}
/**
* 当前网址
*/
export function locationUrl ():string {
return `${window.location}`;
}
/**
* 导航跳转(推荐使用)
* @param d 栏目数据
* @param path 手动指定path
* @param spm 是否附加spm参数
* @return https://websoft.top/article/123.html?spm=0.1.2.3.4.5.6.7
*/
export function navTo(d?: any, path?: string,spm?: boolean){
if(!path){
path = d?.path;
}
// 是否移动设备
// if(isMobileDevice()){
// path = '/m' + path;
// }
// 国际化配置
const i18n = useI18n();
if(i18n.locale.value){
if(i18n.locale.value == 'en'){
path = '/en' + path;
}
}
// 首页
if(d?.model == 'index'){
return path;
}
// if(d?.model == 'links'){
// return openUrl(d?.path)
// }
// 是否附加spm参数
if(spm){
let uid = localStorage.getItem('UserId') || 0;
let timestamp = ref(Date.now() / 1000);
return `${path}?spm=${d?.tenantId||0}.0.${d?.parentId}.${d?.navigationId||0}.${uid}.${timestamp.value}`
}
return `${path}`;
}
/**
* 详情页跳转
* @param d
*/
export function detail(d?: any) {
// console.log(d.detail,'9999999')
return navTo(d,`/${d?.detail}/${d?.articleId}.html`);
}
/**
* 详情页跳转(手机版专用)
* @param d
*/
export function mDetail(d?: any) {
return navTo(d,`/${d?.detail}/${d?.articleId}.html`);
}
export function getViews(form: CmsArticle): number{
return Number(form?.actualViews) + Number(form?.virtualViews)
}
// 单点登录控制台
export function loginAdminByToken(): void {
const user = useUser();
const token = localStorage.getItem('token');
const tid = user.value?.tenantId;
openUrl(`https://${tid}.websoft.top/token-login?token=${token}`)
}
export function getTimeStamp(): number {
return new Date().getTime();
}
// 复制文本
export const copyText = (text: string) => {
// 模拟 输入框
const cInput = document.createElement('input');
cInput.value = text;
document.body.appendChild(cInput);
cInput.select(); // 选取文本框内容
// 执行浏览器复制命令
// 复制命令会将当前选中的内容复制到剪切板中这里就是创建的input标签
// Input要在正常的编辑状态下原生复制方法才会生效
ElMessage.success(`复制成功`);
document.execCommand('copy');
// 复制成功后再将构造的标签 移除
document.body.removeChild(cInput);
};
export const getImage = (text: any) => {
// 是否包含字符串
if(text.indexOf('/upfile') > -1){
return FILE_SERVER + text;
}
return `${text}`
}