仿照管理系统布局配置

news2025/4/13 20:21:35

1.vue仿照snowy 配置,如下图:

2.代码实现

<template>
  <div class="theme-settings">
    <!-- 导航栏 -->
    <div class="nav-bar">
      <el-breadcrumb separator="/">
        <el-breadcrumb-item>导航设置</el-breadcrumb-item>
        <el-breadcrumb-item>导航菜单布局</el-breadcrumb-item>
      </el-breadcrumb>
    </div>

    <!-- 设置区域 -->
    <div class="settings-section">
      <!-- 整体风格设置 -->
      <div class="setting-item">
        <span class="label">整体风格设置</span>
        <div class="style-options">
          <div
            v-for="(style, index) in styles"
            :key="index"
            :class="{ 'style-block': true, selected: selectedStyle === style.value }"
            @click="selectStyle(style.value)"
          >
            <div :class="['style-icon', style.class]">
              <div :class="['header-bar', style.headerClass]"></div>
            </div>
          </div>
        </div>
      </div>

      <!-- 整体界面布局 -->
      <div class="setting-item">
        <span class="label">整体界面布局</span>
        <div class="layout-options">
          <div
            v-for="(layout, index) in layouts"
            :key="index"
            :class="{ 'layout-block': true, selected: selectedLayout === layout.value }"
            @click="selectLayout(layout.value)"
          >
            <div :class="['layout-icon', layout.class]">
              <div :class="['header-bar', layout.headerClass]"></div>
            </div>
          </div>
        </div>
      </div>

      <!-- 主题设置 -->
      <h3>主题设置 <el-button type="text" size="small" @click="resetTheme">恢复默认(黑灰)</el-button></h3>

      <!-- 主题色 -->
      <div class="setting-item">
        <span class="label">主题色</span>
        <div class="color-picker">
          <div
            v-for="(color, index) in themeColors"
            :key="index"
            :style="{ backgroundColor: color }"
            :class="{ 'color-block': true, selected: selectedThemeColor === color }"
            @click="selectThemeColor(color)"
          ></div>
        </div>
      </div>

      <!-- 页面公用主色 -->
      <div class="setting-item">
        <span class="label">页面公用主色</span>
        <el-switch v-model="useCommonMainColor"></el-switch>
      </div>

      <!-- 页面公用背景色 -->
      <div class="setting-item">
        <span class="label">页面公用背景色</span>
        <el-switch v-model="useCommonBgColor"></el-switch>
      </div>

      <!-- 侧边栏 -->
      <div class="setting-item">
        <span class="label">侧边栏</span>
        <el-switch v-model="showSidebar"></el-switch>
      </div>

      <!-- 侧边栏展开 -->
      <div class="setting-item">
        <span class="label">侧边栏展开</span>
        <el-switch v-model="expandSidebar"></el-switch>
      </div>

      <!-- 变更模块展开方式 -->
      <div class="setting-item">
        <span class="label">变更模块展开方式</span>
        <el-switch v-model="changeModuleExpand"></el-switch>
      </div>

      <!-- 变更用户小卡片 -->
      <div class="setting-item">
        <span class="label">变更用户小卡片</span>
        <el-switch v-model="changeUserCard"></el-switch>
      </div>

      <!-- 页面权限角色 -->
      <div class="setting-item">
        <span class="label">页面权限角色</span>
        <el-switch v-model="enablePageRole"></el-switch>
      </div>

      <!-- 页面权限 -->
      <div class="setting-item">
        <span class="label">页面权限</span>
        <el-switch v-model="enablePagePermission"></el-switch>
      </div>

      <!-- 提示信息 -->
      <div class="tip">
        <el-alert
          title="提示:切换主题需重新登录,开发需先在 config/index.js 中配置默认值,否则不会生效"
          type="warning"
          :closable="false"
        ></el-alert>
      </div>

      <!-- 操作按钮 -->
      <div class="actions">
        <el-button type="primary" @click="saveSettings">提交</el-button>
        <el-button @click="resetSettings">重置</el-button>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 整体风格设置选项
      styles: [
        { value: "style1", class: "style1", headerClass: "header-dark" },
        { value: "style2", class: "style2", headerClass: "header-light" },
        { value: "style3", class: "style3", headerClass: "header-dark" },
      ],
      selectedStyle: "style3", // 默认选中第三个

      // 整体界面布局选项
      layouts: [
        { value: "layout1", class: "layout1", headerClass: "header-dark" },
        { value: "layout2", class: "layout2", headerClass: "header-dark" },
        { value: "layout3", class: "layout3", headerClass: "header-dark" },
      ],
      selectedLayout: "layout1", // 默认选中第一个

      // 主题色
      themeColors: [
        "#FF0000", // 红
        "#FF69B4", // 粉
        "#00CED1", // 青
        "#00FF00", // 绿
        "#0000FF", // 蓝
        "#800080", // 紫
        "#000000", // 黑
      ],
      selectedThemeColor: "#000000", // 默认黑色
      useCommonMainColor: false,
      useCommonBgColor: false,
      showSidebar: true,
      expandSidebar: false,
      changeModuleExpand: true,
      changeUserCard: false,
      enablePageRole: false,
      enablePagePermission: false,
    };
  },
  methods: {
    selectStyle(style) {
      this.selectedStyle = style;
      this.$message.success(`已选择风格:${style}`);
    },
    selectLayout(layout) {
      this.selectedLayout = layout;
      this.$message.success(`已选择布局:${layout}`);
    },
    selectThemeColor(color) {
      this.selectedThemeColor = color;
      this.$message.success(`已选择主题色:${color}`);
    },
    resetTheme() {
      this.selectedThemeColor = "#000000";
      this.$message.success("已恢复默认主题(黑灰)");
    },
    saveSettings() {
      const settings = {
        style: this.selectedStyle,
        layout: this.selectedLayout,
        themeColor: this.selectedThemeColor,
        useCommonMainColor: this.useCommonMainColor,
        useCommonBgColor: this.useCommonBgColor,
        showSidebar: this.showSidebar,
        expandSidebar: this.expandSidebar,
        changeModuleExpand: this.changeModuleExpand,
        changeUserCard: this.changeUserCard,
        enablePageRole: this.enablePageRole,
        enablePagePermission: this.enablePagePermission,
      };
      console.log("保存设置:", settings);
      this.$message.success("设置已保存,请重新登录以生效");
    },
    resetSettings() {
      this.selectedStyle = "style3";
      this.selectedLayout = "layout1";
      this.selectedThemeColor = "#000000";
      this.useCommonMainColor = false;
      this.useCommonBgColor = false;
      this.showSidebar = true;
      this.expandSidebar = false;
      this.changeModuleExpand = true;
      this.changeUserCard = false;
      this.enablePageRole = false;
      this.enablePagePermission = false;
      this.$message.success("已重置所有设置");
    },
  },
};
</script>

<style lang="less" scoped>
.theme-settings {
  padding: 20px;

  .nav-bar {
    margin-bottom: 20px;
  }

  .settings-section {
    background: #fff;
    padding: 20px;
    border-radius: 4px;
    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);

    h3 {
      margin-bottom: 20px;
      font-size: 18px;
      display: flex;
      justify-content: space-between;
      align-items: center;
    }

    .setting-item {
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin-bottom: 20px;

      .label {
        font-size: 14px;
        color: #333;
      }

      .style-options,
      .layout-options {
        display: flex;
        gap: 10px;

        .style-block,
        .layout-block {
          width: 60px;
          height: 40px;
          border-radius: 4px;
          border: 2px solid transparent;
          cursor: pointer;
          position: relative;
          transition: border 0.3s;

          &.selected {
            border: 2px solid #409eff;
            &:after {
              content: "\2713"; /* 勾号 */
              position: absolute;
              top: 2px;
              right: 2px;
              color: #409eff;
              font-size: 16px;
              font-weight: bold;
            }
          }

          .style-icon,
          .layout-icon {
            width: 100%;
            height: 100%;
            border-radius: 2px;
            position: relative;
            overflow: hidden;
          }

          /* 头部颜色条 */
          .header-bar {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 8px; /* 头部高度 */
          }

          .header-dark {
            background-color: #2c3e50; /* 深色头部 */
          }

          .header-light {
            background-color: #ecf0f1; /* 浅色头部 */
          }

          /* 整体风格设置图标样式 */
          .style1 {
            background: linear-gradient(to right, #2c3e50 20%, #ecf0f1 20%);
          }
          .style2 {
            background: linear-gradient(to right, #ecf0f1 20%, #ecf0f1 20%);
          }
          .style3 {
            background: linear-gradient(to right, #2c3e50 20%, #2c3e50 20%);
          }

          /* 整体界面布局图标样式 */
          .layout1 {
            background: linear-gradient(to right, #2c3e50 20%, #ecf0f1 20%);
          }
          .layout2 {
            background: linear-gradient(to right, #2c3e50 20%, #ecf0f1 20%);
          }
          .layout3 {
            background: linear-gradient(to right, #2c3e50 20%, #2c3e50 20%);
          }
        }
      }

      .color-picker {
        display: flex;
        gap: 10px;

        .color-block {
          width: 30px;
          height: 30px;
          border-radius: 4px;
          cursor: pointer;
          border: 2px solid transparent;
          transition: border 0.3s;

          &.selected {
            border: 2px solid #409eff;
          }
        }
      }
    }

    .tip {
      margin-bottom: 20px;
    }

    .actions {
      text-align: right;

      .el-button {
        margin-left: 10px;
      }
    }
  }
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2332194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPT - 因果掩码(Causal Mask)

本节代码定义了一个函数 causal_mask&#xff0c;用于生成因果掩码&#xff08;Causal Mask&#xff09;。因果掩码通常用于自注意力机制中&#xff0c;以确保模型在解码时只能看到当前及之前的位置&#xff0c;而不能看到未来的信息。这种掩码在自然语言处理任务&#xff08;如…

适合工程建筑行业的OA系统有什么推荐?

工程行业具有项目周期长、协作链条复杂等特性&#xff0c;传统管理模式下的 “人治”“纸质化” 弊端日益凸显。OA 系统作为数字化管理的核心载体&#xff0c;通过流程标准化、数据可视化&#xff0c;精准解决工程行业项目管理核心痛点。 泛微 e-office 深度聚焦工程场景&#…

深入解析栈回溯技术:如何通过异常处理精准定位程序崩溃点

一、栈回溯 1.1 栈回溯的原理 调试程序时&#xff0c;经常发生这类错误&#xff1a; 1.读写某个地址&#xff0c;导致程序崩溃 2.调用某个空函数&#xff0c;导致程序崩溃在异常处理函数中&#xff0c;可以打印出”发生错误瞬间”的所有寄存器。 我们调试时&#xff0c;可以…

重构居家养老安全网:从 “被动响应” 到 “主动守护”

随着全球老龄化加剧&#xff0c;居家养老安全成为社会关注的核心议题。 传统养老模式依赖人工巡检或单一传感器&#xff0c;存在响应滞后、隐私泄露、场景覆盖不足等问题。 由此智绅科技应运而生&#xff0c;七彩喜智慧养老系统构筑居家养老安全网。 而物联网&#xff08;Io…

Unity6下架中国区,团结引擎接棒:这是分裂,还是本地化的开始?

就在近日&#xff0c;一则消息在国内游戏开发圈内迅速传播开来&#xff1a;Unity 6 及其后续版本已在中国大陆及港澳地区下架。这意味着&#xff0c;未来中国用户将无法直接使用 Unity 最新的主线版本。而取而代之的&#xff0c;是由 Unity 中国主导推出的本地化产品 —— 团结…

ESP8266水位监测以及温湿度数据采集

上面就是ESP8266的引脚图&#xff0c;水温检测使用的是水位监测传感器&#xff0c;温湿度测量使用的是DHT11&#xff0c;DHT11的反应时间是2秒&#xff0c;这里要注意。开发采用Arduino程序 1. 传感器初始化 功能&#xff1a;初始化DHT11温湿度传感器和串口通信。 代码实现&…

国产信创数据库:PolarDB 分布式版 V2.0,支持集中分布式一体化

阿里云PolarDB数据库管理软件&#xff08;分布式版&#xff09;V2.0 &#xff0c;安全可靠的集中分布式一体化数据库管理软件。点此查看详情https://www.aliyun.com/activity/database/polardbx-v2?spma2c6h.13046898.publish-article.8.44146ffaE0lEWT 立即咨询专家&#xf…

Axure PR 9 中继器 09 删除行

大家好&#xff0c;我是大明同学。 接着上期的内容&#xff0c;这期内容&#xff0c;我们来了解一下Axure中继器数据表删除行交互设计。 预览地址&#xff1a;https://vvlmqu.axshare.com 删除行 1.打开上期RP 文件&#xff0c;设计一个删除弹窗元件&#xff0c; 创建为动态面…

HDCP(五)

HDCP 2.2 测试用例设计详解 基于HDCP 2.2 CTS v1.1规范及协议核心机制&#xff0c;以下从正常流程与异常场景两大方向拆解测试用例设计要点&#xff0c;覆盖认证、密钥管理、拓扑验证等关键环节&#xff1a; 1. 正常流程测试 1.1 单设备认证 • 测试目标&#xff1a;验证源设…

商城APP打包教程

下载 HBuilderX 工具 HBuilderX支持插件拓展功能。App开发版已集成相关插件、开箱即用 根据自身电脑系统选择对应软件下载&#xff0c;建议选择APP开发版 2. 下载好软件安装后打开 建议直接在uniapp插件页面一键导入&#xff0c;正常情况下uniapp插件都是最新的&#xff0c;大家…

Spring 框架的核心基础:IoC 和 AOP

一、IoC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09; 定义&#xff1a; IoC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;&#xff0c;就是把对象创建和依赖关系的管理交给 Spring 容器&#xff0c;而不是由程序员手动去创建对象…

SpringBoot 基础知识,HTTP 概述

1. 概述 1.1 Spring Spring 提供若干个子项目&#xff0c;每个项目用于完成特定功能 Spring 的若干个子项目都基于一个基础的框架&#xff1a;Spring Framework 框架类似于 房屋的地基 但 Spring Framework 配置繁琐&#xff0c;入门难度大 1.2 Spring Boot 于是&#xf…

《网络管理》实践环节04:SNMP监控数据采集流程及SNMP协议详细分析

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 1 实验目标 1. 理解SNMP网络管理原理 2. 掌握SNMP服务器采集SNMP Agent数据的方法 3. 掌握SNMP报文发送和应答流程 4. 掌握典型GetResponsePDU数据结构分析的方法 4. 具备SNMP通信…

《Uniapp-Vue 3-TS 实战开发》构建HTTP请求拦截器

引言 在 UniApp 结合 TypeScript 和 Vue3 的项目开发中&#xff0c;请求拦截器起着至关重要的作用。它能够在请求发送前和响应接收后对数据进行统一处理&#xff0c;极大地提高了代码的可维护性和功能性。本文将详细解析上述代码中请求拦截器的实现及其在 UniApp-Ts-Vue3 项目中…

从PDF中提取表格:以GB/T2260—2007为例

文章目录 先说结论前因后果思路1、PDF2CSV2、PDF2MD → MD2CSV3、针对不同表格的两种思路1&#xff09; 竖形三线表2&#xff09;五元素为一组 还没结束批量处理1、分割markdown文档2、跳过另一种格式的文档 总结一下 先说结论 结论就是&#xff0c;博主用了一天的时间去研究如…

初识MySQL · 复合查询(内外连接)

目录 前言&#xff1a; 基本查询回顾 笛卡尔积和子查询 笛卡尔积 内外连接 子查询 单行子查询 多行子查询 多列子查询 from中使用子查询 合并查询 前言&#xff1a; 在前文我们学习了MySQL的基本查询&#xff0c;就是简单的套用了select语句&#xff0c;最多不过是…

辛格迪客户案例 | 北京舒曼德医药实施电子合约系统(eSign)

01 北京舒曼德医药科技开发有限公司&#xff1a;医药科技的数字化先锋 北京舒曼德医药科技开发有限公司&#xff08;以下简称“舒曼德医药”&#xff09;作为国内医药科技领域的领军企业&#xff0c;致力于创新药物的研发、临床试验和市场推广。公司以“科技兴药、质量为先、服…

Python面向对象-开闭原则(OCP)

1. 什么是开闭原则&#xff1f; 开闭原则(Open-Closed Principle, OCP) 是面向对象设计的五大SOLID原则之一&#xff0c;由Bertrand Meyer提出。其核心定义是&#xff1a; “软件实体(类、模块、函数等)应该对扩展开放&#xff0c;对修改关闭。” 对扩展开放&#xff1a;当需求…

Class 文件和类加载机制

一、Class 文件 与 类加载机制 概述 什么是 Class 文件&#xff1f; Java 源码&#xff08;.java&#xff09;经过 javac 编译器 编译生成的字节码文件&#xff08;.class&#xff09;&#xff1b;由 JVM 识别执行&#xff0c;包含类的完整结构信息&#xff08;如字段、方法、…

Vue3+Vite+TypeScript+Element Plus开发-07.Mockjs引用与Axios封装

系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 Header响应式菜单缩展 Mockjs引用与Axios封装 登录设计 登录成功跳转主页 多用户动态加载菜单 Pinia持久化 动态路由-配置 文章目录 目录 系列文档目…