Files
GoTunnel/web/src/components/GlassSwitch.vue
Flik 67c41cde5c
All checks were successful
Build Multi-Platform Binaries / build-frontend (push) Successful in 40s
Build Multi-Platform Binaries / build-binaries (amd64, linux, client, true) (push) Successful in 1m24s
Build Multi-Platform Binaries / build-binaries (amd64, darwin, server, false) (push) Successful in 1m27s
Build Multi-Platform Binaries / build-binaries (amd64, windows, client, true) (push) Successful in 1m27s
Build Multi-Platform Binaries / build-binaries (amd64, linux, server, true) (push) Successful in 1m49s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, client, true) (push) Successful in 1m15s
Build Multi-Platform Binaries / build-binaries (amd64, windows, server, true) (push) Successful in 1m39s
Build Multi-Platform Binaries / build-binaries (arm64, darwin, server, false) (push) Successful in 1m45s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, server, true) (push) Successful in 2m2s
Build Multi-Platform Binaries / build-binaries (arm64, linux, client, true) (push) Successful in 1m13s
Build Multi-Platform Binaries / build-binaries (arm64, linux, server, true) (push) Successful in 1m46s
Build Multi-Platform Binaries / build-binaries (arm64, windows, server, false) (push) Successful in 1m20s
refactor(web): 重构前端界面组件和导航结构
- 替换 naive-ui 导航组件为自定义玻璃态设计组件
- 引入 GlassModal、GlassSwitch、GlassTag 等自定义组件
- 更新 App.vue 中的布局结构和样式设计
- 重构客户端视图中的表单验证逻辑
- 移除 tabs 组件改用侧边栏导航菜单
- 添加内联日志面板组件
- 优化响应式布局和移动端适配
- 更新图标组件引用方式
- 简化表单验证实现方式
- 添加插件下拉菜单功能
- 优化客户端管理界面UI
- 更新依赖注入声明文件
- 重构用户菜单交互逻辑
- 移除路由跳转相关代码优化性能
2026-01-22 17:37:26 +08:00

86 lines
1.5 KiB
Vue

<script setup lang="ts">
const props = defineProps<{
modelValue?: boolean
size?: 'small' | 'medium'
disabled?: boolean
}>()
const emit = defineEmits<{
(e: 'update:modelValue', value: boolean): void
}>()
const toggle = () => {
if (!props.disabled) {
emit('update:modelValue', !props.modelValue)
}
}
</script>
<template>
<button
class="glass-switch"
:class="[size || 'small', { active: modelValue, disabled }]"
@click="toggle"
:disabled="disabled"
>
<span class="switch-thumb"></span>
</button>
</template>
<style scoped>
.glass-switch {
position: relative;
width: 36px;
height: 20px;
background: rgba(255, 255, 255, 0.15);
border: none;
border-radius: 10px;
cursor: pointer;
transition: all 0.2s;
padding: 0;
}
.glass-switch.small {
width: 32px;
height: 18px;
}
.glass-switch:hover:not(.disabled) {
background: rgba(255, 255, 255, 0.25);
}
.glass-switch.active {
background: linear-gradient(135deg, #60a5fa 0%, #a78bfa 100%);
}
.glass-switch.disabled {
opacity: 0.5;
cursor: not-allowed;
}
.switch-thumb {
position: absolute;
top: 2px;
left: 2px;
width: 14px;
height: 14px;
background: white;
border-radius: 50%;
transition: transform 0.2s;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
}
.glass-switch.small .switch-thumb {
width: 12px;
height: 12px;
}
.glass-switch.active .switch-thumb {
transform: translateX(16px);
}
.glass-switch.small.active .switch-thumb {
transform: translateX(14px);
}
</style>