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
- 替换 naive-ui 导航组件为自定义玻璃态设计组件 - 引入 GlassModal、GlassSwitch、GlassTag 等自定义组件 - 更新 App.vue 中的布局结构和样式设计 - 重构客户端视图中的表单验证逻辑 - 移除 tabs 组件改用侧边栏导航菜单 - 添加内联日志面板组件 - 优化响应式布局和移动端适配 - 更新图标组件引用方式 - 简化表单验证实现方式 - 添加插件下拉菜单功能 - 优化客户端管理界面UI - 更新依赖注入声明文件 - 重构用户菜单交互逻辑 - 移除路由跳转相关代码优化性能
86 lines
1.5 KiB
Vue
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>
|