import { COLLAPSE_THRESHOLD } from '@/config/index';
import { useWindowWidthObserver } from '@/hooks/useWindowWidthObserver';
import { useDesignStore } from '@/store';
/**
* 侧边栏折叠切换逻辑组合式函数 方便多个页面调用
* @param threshold 折叠阈值(可选,默认使用全局配置)
*/
export function useCollapseToggle(threshold: number = COLLAPSE_THRESHOLD) {
const designStore = useDesignStore();
// 获取当前视口宽度是否大于阈值,但不做响应式处理,传入一个空函数执行
const { isAboveThreshold } = useWindowWidthObserver(threshold, () => {});
/** 核心折叠切换方法 */
const changeCollapse = () => {
// 切换最终折叠状态
designStore.setCollapse(!designStore.isCollapse);
if (isAboveThreshold.value) {
// 宽屏逻辑
if (designStore.isCollapse) {
designStore.setCollapseType('alwaysCollapsed');
}
else {
designStore.setCollapseType(
designStore.collapseType === 'narrowExpandWideCollapse'
? 'alwaysExpanded'
: 'followSystem',
);
}
}
else {
// 窄屏逻辑
if (designStore.isCollapse) {
designStore.setCollapseType('followSystem');
}
else {
designStore.setCollapseType(
designStore.collapseType === 'alwaysCollapsed'
? 'narrowExpandWideCollapse'
: 'alwaysExpanded',
);
}
}
};
return {
changeCollapse,
};
}
// 使用示例与特性说明
//
//
//
//
//