搜索结果列表页面开发
This commit is contained in:
119
src/stores/Global/index.ts
Normal file
119
src/stores/Global/index.ts
Normal file
@@ -0,0 +1,119 @@
|
||||
import { ref, computed } from 'vue';
|
||||
import { defineStore } from 'pinia';
|
||||
import menu from '@/constant/menu';
|
||||
import { type listType, type itemProps } from '@/components/NavTabs/types';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { getCustomMenuList } from '@/api/org/devIndex';
|
||||
|
||||
export const useGlobalInfoStore = defineStore('globalInfo', () => {
|
||||
const route = useRoute();
|
||||
const globalMenuInfo = ref<listType>(menu); // 全部菜单信息
|
||||
const menuType = ref(route?.meta?.type || 'repo'); // 当前菜单类型
|
||||
const customMenuInfo = ref([]); // org自定义菜单
|
||||
const isNotFound = ref(false); // 是否展示404页面
|
||||
const showTools = ref(true); // 是否展示工具栏
|
||||
const namespaceType = ref(-1); // 0 - 用户 1 - 组织
|
||||
const globalTheme = ref('light'); // 网站主题
|
||||
|
||||
const menuInfo = computed(() => {
|
||||
// 当前菜单
|
||||
return globalMenuInfo.value[menuType.value] || [];
|
||||
});
|
||||
|
||||
// 设置单类菜单信息
|
||||
const setNamespaceType = (val: number) => {
|
||||
namespaceType.value = val;
|
||||
};
|
||||
|
||||
// 设置全部菜单信息
|
||||
const setGlobalMenuInfo = (val: listType) => {
|
||||
globalMenuInfo.value = {
|
||||
...globalMenuInfo.value,
|
||||
...val
|
||||
};
|
||||
};
|
||||
|
||||
// 设置单类菜单信息
|
||||
const setMenuInfo = (val: itemProps) => {
|
||||
globalMenuInfo.value[menuType.value] = val;
|
||||
};
|
||||
|
||||
/**
|
||||
* 设置菜单类型
|
||||
* @param val 类型
|
||||
* @param routeNamespace 路由中的命名空间(某些地方获取不到,需要手动传入)
|
||||
*/
|
||||
const setMenuType = async(val: string, routeNamespace?: string) => {
|
||||
if (val) {
|
||||
menuType.value = val;
|
||||
// 组织 需要加载自定义菜单
|
||||
if (val === 'org') {
|
||||
const namespace = routeNamespace || route.params.namespace;
|
||||
const res = await getCustomMenuList({
|
||||
namespace: Array.isArray(namespace) ? namespace.join('/') : namespace
|
||||
});
|
||||
customMenuInfo.value = (res?.data?.data || []).map((item) => ({
|
||||
...item,
|
||||
id: item.id || item.name,
|
||||
label: item.name,
|
||||
icon: item.link || 'gt-link',
|
||||
link: item.content
|
||||
}));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 设置菜单标题旁的数字(如:mr数量,成员数量)
|
||||
* @param id 菜单id
|
||||
* @param val 增加或减少的数量
|
||||
* @param actionType 类型 add增加 reduce减少 equal等于
|
||||
*/
|
||||
const updateMenuNum = (id: string, val: number, actionType: 'add' | 'reduce' | 'equal' = 'equal') => {
|
||||
const list = [...(globalMenuInfo.value[menuType.value] || []), ...customMenuInfo.value];
|
||||
const item = list.find((item) => item.id === id) || {};
|
||||
if (actionType === 'equal') {
|
||||
item.num = val;
|
||||
}
|
||||
if (actionType === 'add') {
|
||||
item.num = item.num ? item.num + val : val; // 新增前判断num是否存在
|
||||
}
|
||||
if (actionType === 'reduce') {
|
||||
item.num = item.num <= 0 ? 0 : item.num - val; // 防止刷成负数
|
||||
}
|
||||
};
|
||||
|
||||
const setIsNotFound = (val: boolean) => {
|
||||
isNotFound.value = val;
|
||||
};
|
||||
|
||||
const setShowTools = (val: boolean) => {
|
||||
showTools.value = val;
|
||||
};
|
||||
|
||||
/**
|
||||
* TODO: 设置主题,模仿github用于设置仓库项目markdown图片;
|
||||
* 前端暂时固定单一主题,后续可能会提供设置功能
|
||||
*/
|
||||
const setGlobalTheme = (val: string) => {
|
||||
globalTheme.value = val;
|
||||
};
|
||||
|
||||
return {
|
||||
customMenuInfo,
|
||||
menuInfo,
|
||||
menuType,
|
||||
isNotFound,
|
||||
showTools,
|
||||
namespaceType,
|
||||
globalTheme,
|
||||
setMenuType,
|
||||
updateMenuNum,
|
||||
setMenuInfo,
|
||||
setGlobalMenuInfo,
|
||||
setIsNotFound,
|
||||
setShowTools,
|
||||
setNamespaceType,
|
||||
setGlobalTheme
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user