bunny-admin-element-thin-i18n/other-views/tabs/hooks.ts

61 lines
2.1 KiB
TypeScript

import { isEmpty, isString } from "@pureadmin/utils";
import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
import { type LocationQueryRaw, type RouteParamsRaw, useRoute, useRouter } from "vue-router";
export function useDetail() {
const route = useRoute();
const router = useRouter();
const getParameter = isEmpty(route.params) ? route.query : route.params;
function toDetail(parameter: LocationQueryRaw | RouteParamsRaw, model: "query" | "params") {
// ⚠️ 传参必须是字符串类型
Object.keys(parameter).forEach(param => {
if (!isString(parameter[param])) {
parameter[param] = parameter[param].toString();
}
});
if (model === "query") {
// 保存信息到标签页
useMultiTagsStoreHook().handleTags("push", {
path: `/tabs/query-detail`,
name: "TabQueryDetail",
query: parameter,
meta: {
title: {
zh: `No.${parameter.id} - 详情信息`,
en: `No.${parameter.id} - DetailInfo`
},
// 如果使用的是非国际化精简版title可以像下面这么写
// title: `No.${index} - 详情信息`,
// 最大打开标签数
dynamicLevel: 3
}
});
// 路由跳转
router.push({ name: "TabQueryDetail", query: parameter }).then();
} else if (model === "params") {
useMultiTagsStoreHook().handleTags("push", {
path: `/tabs/params-detail/:id`,
name: "TabParamsDetail",
params: parameter,
meta: {
title: {
zh: `No.${parameter.id} - 详情信息`,
en: `No.${parameter.id} - DetailInfo`
}
// 如果使用的是非国际化精简版title可以像下面这么写
// title: `No.${index} - 详情信息`,
}
});
router.push({ name: "TabParamsDetail", params: parameter }).then();
}
}
// 用于页面刷新,重新获取浏览器地址栏参数并保存到标签页
const initToDetail = (model: "query" | "params") => {
if (getParameter) toDetail(getParameter, model);
};
return { toDetail, initToDetail, getParameter, router };
}