前端代码

This commit is contained in:
2026-08-13 22:35:13 +08:00
parent 9044bafdff
commit f1a0b17bb0
412 changed files with 36769 additions and 6617 deletions
+64
View File
@@ -0,0 +1,64 @@
import { defineStore } from 'pinia'
import { computed, ref } from 'vue'
export const useAppStore = defineStore('app', () => {
const device = ref('')
const drawerSize = ref('')
const operateMinWith = ref('240')
// 侧栏折叠态(运行时态,不持久化),供 vertical 布局的固定侧栏与外壳共享
const sideCollapse = ref(false)
// 移动端(<640)左侧抽屉菜单开合态
const mobileMenuOpen = ref(false)
// 当前断点区间(由 useResponsive 维护):mobile(<640) / pad(640–1024) / desktop(>=1024)
const layoutZone = ref('desktop')
// 平板区间强制「通栏侧边」收缩布局(不改用户所选布局)
const isPad = computed(() => layoutZone.value === 'pad')
// 进入平板前的侧栏折叠态快照,离开平板时据此恢复(区分「系统收缩」与「用户收缩」)
const prePadCollapse = ref(false)
const toggleMobileMenu = (v) => {
mobileMenuOpen.value = typeof v === 'boolean' ? v : !mobileMenuOpen.value
}
// 切换断点区间:进入平板时快照当前折叠态并强制收缩,离开平板时恢复进入前的折叠态,
// 从而只撤销系统自己施加的收缩,不覆盖用户在桌面手动收缩的意图。
const setLayoutZone = (zone) => {
const prev = layoutZone.value
if (zone === 'pad' && prev !== 'pad') {
prePadCollapse.value = sideCollapse.value
sideCollapse.value = true
} else if (zone !== 'pad' && prev === 'pad') {
sideCollapse.value = prePadCollapse.value
}
layoutZone.value = zone
}
const toggleDevice = (e) => {
if (e === 'mobile') {
drawerSize.value = '100%'
operateMinWith.value = '80'
} else {
drawerSize.value = '800'
operateMinWith.value = '240'
}
device.value = e
}
const toggleSideCollapse = (v) => {
sideCollapse.value = typeof v === 'boolean' ? v : !sideCollapse.value
}
return {
device,
drawerSize,
operateMinWith,
sideCollapse,
toggleSideCollapse,
mobileMenuOpen,
toggleMobileMenu,
layoutZone,
isPad,
setLayoutZone,
toggleDevice
}
})