1
0
mirror of https://github.com/ialley-workshop-open/uni-halo.git synced 2026-09-13 00:50:40 +08:00
Files
2026-08-31 07:58:23 +08:00

154 lines
4.0 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!--
抽屉 组件示例
官方文档https://uniapp.dcloud.net.cn/component/uniui/uni-drawer.html
插件市场https://ext.dcloud.net.cn/plugin?name=uni-drawer
-->
<template>
<view class="container">
<uni-card is-full :is-shadow="false">
<text class="uni-h6">抽屉组件用于侧边栏抽屉</text>
</uni-card>
<uni-section title="基础用法" type="line" padding>
<view class="example-body">
<button type="primary" @click="openDrawer('left')">左侧抽屉</button>
<button type="primary" @click="openDrawer('right')">右侧抽屉</button>
</view>
</uni-section>
<uni-section title="不同模式" type="line" padding>
<view class="example-body">
<button type="primary" @click="openDrawer('left')">左侧模式</button>
<button type="primary" @click="openDrawer('right')">右侧模式</button>
</view>
</uni-section>
<uni-section title="自定义宽度" type="line" padding>
<view class="example-body">
<button type="primary" @click="openCustomDrawer">自定义宽度抽屉</button>
</view>
</uni-section>
<uni-section title="遮罩层" type="line" padding>
<view class="example-body">
<button type="primary" @click="openMaskDrawer">带遮罩层抽屉</button>
</view>
</uni-section>
<!-- 左侧抽屉 -->
<uni-drawer ref="leftDrawer" mode="left" :width="300" @change="onChange">
<view class="drawer-content">
<text class="drawer-title">左侧抽屉</text>
<view class="drawer-item" v-for="(item, index) in menuList" :key="index" @click="onMenuClick(item)">
<text>{{ item.name }}</text>
</view>
</view>
</uni-drawer>
<!-- 右侧抽屉 -->
<uni-drawer ref="rightDrawer" mode="right" :width="300" @change="onChange">
<view class="drawer-content">
<text class="drawer-title">右侧抽屉</text>
<view class="drawer-item" v-for="(item, index) in menuList" :key="index" @click="onMenuClick(item)">
<text>{{ item.name }}</text>
</view>
</view>
</uni-drawer>
<!-- 自定义宽度抽屉 -->
<uni-drawer ref="customDrawer" mode="left" :width="400" @change="onChange">
<view class="drawer-content">
<text class="drawer-title">自定义宽度抽屉</text>
<text class="drawer-text">宽度设置为400px</text>
</view>
</uni-drawer>
<!-- 带遮罩层抽屉 -->
<uni-drawer ref="maskDrawer" mode="left" :width="300" :mask="true" @change="onChange">
<view class="drawer-content">
<text class="drawer-title">带遮罩层抽屉</text>
<text class="drawer-text">点击遮罩层可关闭</text>
</view>
</uni-drawer>
</view>
</template>
<script>
export default {
data() {
return {
menuList: [
{ name: '首页', path: '/' },
{ name: '关于', path: '/about' },
{ name: '设置', path: '/settings' }
]
}
},
methods: {
openDrawer(mode) {
if (mode === 'left') {
this.$refs.leftDrawer.open()
} else {
this.$refs.rightDrawer.open()
}
},
openCustomDrawer() {
this.$refs.customDrawer.open()
},
openMaskDrawer() {
this.$refs.maskDrawer.open()
},
onChange(e) {
console.log('抽屉状态改变:', e)
},
onMenuClick(item) {
console.log('点击菜单:', item)
uni.showToast({
title: `点击了${item.name}`,
icon: 'none'
})
// 关闭抽屉
this.$refs.leftDrawer.close()
this.$refs.rightDrawer.close()
}
}
}
</script>
<style lang="scss">
.container {
padding: 10px;
}
.example-body {
display: flex;
flex-direction: column;
gap: 10px;
}
.drawer-content {
padding: 20px;
}
.drawer-title {
font-size: 18px;
font-weight: bold;
color: #333;
margin-bottom: 20px;
display: block;
}
.drawer-item {
padding: 15px 0;
border-bottom: 1px solid #f0f0f0;
}
.drawer-text {
font-size: 14px;
color: #666;
line-height: 1.6;
}
</style>