From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/layout/components/Setting/src/components/LayoutRadioPicker.vue | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 172 insertions(+), 0 deletions(-)
diff --git a/src/layout/components/Setting/src/components/LayoutRadioPicker.vue b/src/layout/components/Setting/src/components/LayoutRadioPicker.vue
new file mode 100644
index 0000000..801686c
--- /dev/null
+++ b/src/layout/components/Setting/src/components/LayoutRadioPicker.vue
@@ -0,0 +1,172 @@
+<script lang="ts" setup>
+import { useAppStore } from '@/store/modules/app'
+import { useDesign } from '@/hooks/web/useDesign'
+
+defineOptions({ name: 'LayoutRadioPicker' })
+
+const { getPrefixCls } = useDesign()
+
+const prefixCls = getPrefixCls('layout-radio-picker')
+
+const appStore = useAppStore()
+
+const layout = computed(() => appStore.getLayout)
+</script>
+
+<template>
+ <div :class="prefixCls" class="flex flex-wrap space-x-14px">
+ <div
+ :class="[
+ `${prefixCls}__classic`,
+ 'relative w-56px h-48px cursor-pointer bg-gray-300',
+ {
+ 'is-acitve': layout === 'classic'
+ }
+ ]"
+ @click="appStore.setLayout('classic')"
+ ></div>
+ <div
+ :class="[
+ `${prefixCls}__top-left`,
+ 'relative w-56px h-48px cursor-pointer bg-gray-300',
+ {
+ 'is-acitve': layout === 'topLeft'
+ }
+ ]"
+ @click="appStore.setLayout('topLeft')"
+ ></div>
+ <div
+ :class="[
+ `${prefixCls}__top`,
+ 'relative w-56px h-48px cursor-pointer bg-gray-300',
+ {
+ 'is-acitve': layout === 'top'
+ }
+ ]"
+ @click="appStore.setLayout('top')"
+ ></div>
+ <div
+ :class="[
+ `${prefixCls}__cut-menu`,
+ 'relative w-56px h-48px cursor-pointer bg-gray-300',
+ {
+ 'is-acitve': layout === 'cutMenu'
+ }
+ ]"
+ @click="appStore.setLayout('cutMenu')"
+ >
+ <div class="absolute left-[10%] top-0 h-full w-[33%] bg-gray-200"></div>
+ </div>
+ </div>
+</template>
+
+<style lang="scss" scoped>
+$prefix-cls: #{$namespace}-layout-radio-picker;
+
+.#{$prefix-cls} {
+ &__classic {
+ border: 2px solid #e5e7eb;
+ border-radius: 4px;
+
+ &::before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1;
+ width: 33%;
+ height: 100%;
+ background-color: #273352;
+ border-radius: 4px 0 0 4px;
+ content: '';
+ }
+
+ &::after {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 25%;
+ background-color: #fff;
+ border-radius: 4px 4px 0;
+ content: '';
+ }
+ }
+
+ &__top-left {
+ border: 2px solid #e5e7eb;
+ border-radius: 4px;
+
+ &::before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1;
+ width: 100%;
+ height: 33%;
+ background-color: #273352;
+ border-radius: 4px 4px 0 0;
+ content: '';
+ }
+
+ &::after {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 33%;
+ height: 100%;
+ background-color: #fff;
+ border-radius: 4px 0 0 4px;
+ content: '';
+ }
+ }
+
+ &__top {
+ border: 2px solid #e5e7eb;
+ border-radius: 4px;
+
+ &::before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1;
+ width: 100%;
+ height: 33%;
+ background-color: #273352;
+ border-radius: 4px 4px 0 0;
+ content: '';
+ }
+ }
+
+ &__cut-menu {
+ border: 2px solid #e5e7eb;
+ border-radius: 4px;
+
+ &::before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1;
+ width: 100%;
+ height: 33%;
+ background-color: #273352;
+ border-radius: 4px 4px 0 0;
+ content: '';
+ }
+
+ &::after {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 10%;
+ height: 100%;
+ background-color: #fff;
+ border-radius: 4px 0 0 4px;
+ content: '';
+ }
+ }
+
+ .is-acitve {
+ border-color: var(--el-color-primary);
+ }
+}
+</style>
--
Gitblit v1.8.0