fix 侧边栏
This commit is contained in:
@@ -54,11 +54,19 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="是否启用" prop="is_enabled">
|
<el-form-item label="是否启用" prop="is_enabled">
|
||||||
<el-switch v-model="form.is_enabled" />
|
<el-switch
|
||||||
|
v-model="form.is_enabled"
|
||||||
|
:active-value="true"
|
||||||
|
:inactive-value="false"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="是否展示" prop="is_visible">
|
<el-form-item label="是否展示" prop="is_visible">
|
||||||
<el-switch v-model="form.is_visible" />
|
<el-switch
|
||||||
|
v-model="form.is_visible"
|
||||||
|
:active-value="true"
|
||||||
|
:inactive-value="false"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -371,7 +379,6 @@ const form = reactive({
|
|||||||
seo_description: '',
|
seo_description: '',
|
||||||
seo_keywords: ''
|
seo_keywords: ''
|
||||||
})
|
})
|
||||||
|
|
||||||
// 表单验证规则
|
// 表单验证规则
|
||||||
const rules = {
|
const rules = {
|
||||||
code: [
|
code: [
|
||||||
@@ -492,13 +499,16 @@ const handleCreateMode = () => {
|
|||||||
if (key === 'is_package') {
|
if (key === 'is_package') {
|
||||||
form[key] = false
|
form[key] = false
|
||||||
} else if (key === 'is_enabled' || key === 'is_visible') {
|
} else if (key === 'is_enabled' || key === 'is_visible') {
|
||||||
form[key] = true
|
// 保持默认值 true,但允许用户在界面上切换
|
||||||
} else if (key === 'price') {
|
// 注意:这里不强制设置,让用户可以在界面上自由切换
|
||||||
|
// 默认值已经在 form 初始化时设置为 true(第375-376行)
|
||||||
|
} else if (key === 'price' || key === 'cost_price') {
|
||||||
form[key] = 0
|
form[key] = 0
|
||||||
} else {
|
} else {
|
||||||
form[key] = ''
|
form[key] = ''
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
console.log('form', form)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理组合包数据
|
// 处理组合包数据
|
||||||
@@ -746,6 +756,10 @@ const handleSubmit = async () => {
|
|||||||
submitting.value = true
|
submitting.value = true
|
||||||
|
|
||||||
const submitData = { ...form }
|
const submitData = { ...form }
|
||||||
|
|
||||||
|
// 确保布尔值正确传递
|
||||||
|
submitData.is_enabled = Boolean(form.is_enabled)
|
||||||
|
submitData.is_visible = Boolean(form.is_visible)
|
||||||
|
|
||||||
if (isEdit.value) {
|
if (isEdit.value) {
|
||||||
// 编辑模式
|
// 编辑模式
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { useAppStore } from '@/stores/app'
|
import { useAppStore } from '@/stores/app'
|
||||||
import { useUserStore } from '@/stores/user'
|
import { useUserStore } from '@/stores/user'
|
||||||
|
import { onMounted, onUnmounted, watch } from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@@ -51,6 +52,7 @@ const props = defineProps({
|
|||||||
const appStore = useAppStore()
|
const appStore = useAppStore()
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
let bodyLockClassApplied = false
|
||||||
|
|
||||||
// 使用ref来控制菜单展开状态
|
// 使用ref来控制菜单展开状态
|
||||||
const openeds = ref([])
|
const openeds = ref([])
|
||||||
@@ -117,6 +119,36 @@ const handleMenuSelect = () => {
|
|||||||
appStore.closeMobileSidebar()
|
appStore.closeMobileSidebar()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 当移动端侧边栏打开时,锁定页面点击与滚动,确保其他区域点击无效
|
||||||
|
const toggleBodyLock = (locked) => {
|
||||||
|
const body = document.body
|
||||||
|
if (locked) {
|
||||||
|
if (!bodyLockClassApplied) {
|
||||||
|
body.classList.add('sidebar-locked')
|
||||||
|
bodyLockClassApplied = true
|
||||||
|
}
|
||||||
|
} else if (bodyLockClassApplied) {
|
||||||
|
body.classList.remove('sidebar-locked')
|
||||||
|
bodyLockClassApplied = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
toggleBodyLock(appStore.isMobile && appStore.mobileSidebarOpen)
|
||||||
|
})
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
toggleBodyLock(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => [appStore.isMobile, appStore.mobileSidebarOpen],
|
||||||
|
([isMobile, open]) => {
|
||||||
|
toggleBodyLock(isMobile && open)
|
||||||
|
},
|
||||||
|
{ immediate: true }
|
||||||
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
@@ -133,6 +165,7 @@ const handleMenuSelect = () => {
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
z-index: 1001;
|
z-index: 1001;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,10 +175,7 @@ const handleMenuSelect = () => {
|
|||||||
flex: 1 1 0%;
|
flex: 1 1 0%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
}
|
width: 100%;
|
||||||
|
|
||||||
.sidebar-menu:not(.el-menu--collapse) {
|
|
||||||
width: 240px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-item {
|
.menu-item {
|
||||||
@@ -220,20 +250,21 @@ const handleMenuSelect = () => {
|
|||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
background-color: rgba(255, 255, 255, 0.65); /* 保持浅色,不要黑色遮罩 */
|
||||||
|
backdrop-filter: blur(2px);
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 响应式设计 */
|
/* 响应式设计 */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.sidebar-menu:not(.el-menu--collapse) {
|
.sidebar-menu {
|
||||||
width: 240px;
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 480px) {
|
@media (max-width: 480px) {
|
||||||
.sidebar-menu:not(.el-menu--collapse) {
|
.sidebar-menu {
|
||||||
width: 200px;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-item {
|
.menu-item {
|
||||||
@@ -252,6 +283,18 @@ const handleMenuSelect = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:global(body.sidebar-locked) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
:global(body.sidebar-locked #app) {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
:global(body.sidebar-locked .app-sidebar) {
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
|
||||||
/* Element Plus 菜单样式覆盖 */
|
/* Element Plus 菜单样式覆盖 */
|
||||||
:deep(.el-menu) {
|
:deep(.el-menu) {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
|
|||||||
Reference in New Issue
Block a user