201 lines
4.6 KiB
TypeScript
201 lines
4.6 KiB
TypeScript
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}`
|
||
}
|