从零开始搭建博客网站-----框架页

实现效果如下
在这里插入图片描述
发布的功能还没有实现,仅仅实现了简单的页面显示
关键代码如下

<template>
  <div class="layout">
      <el-header class="header">
        <div class="logo">EasyBlog</div>
      </el-header>
      <el-container class="container">
        <el-aside width="200px"
                  class="left-aside">
          <div>
            <el-button class="post-btn"
                       @click="createHtml"> 发布</el-button>
          </div>
          <div class="menu-panel">
            <ul>
              <li v-for="(menu,index) in menuList">
                <span class="menu-title-p"
                      @click="openClose(index)">
                  <span :class="['iconfont',menu.icon]"></span>
                  <span class="menu-title">{{menu.title}}</span>
                  <span :class="['iconfont','open-close',menu.open?'icon-open':'icon-close']"></span>
                </span>
                <ul class="sub-menu"
                    v-show="menu.open">
                  <li v-for="subMenu in menu.children">
                    <router-link :to="subMenu.path"
                                 :class="['sub-menu-item',activePath==subMenu.path?'active':'']"
                                 v-if="subMenu.roleType == null || subMenu.roleType == userInfo.roleType">{{subMenu.title}}</router-link>
                  </li>
                </ul>
              </li>
            </ul>
          </div>
        </el-aside>
      </el-container> 
  </div>
</template>
<script setup>
import { getCurrentInstance, ref, watch, reactive } from "vue"
import { useRouter, useRoute } from "vue-router";
const { proxy } = getCurrentInstance();
const menuList = ref([
  {
    title: "博客",
    icon: "icon-blog",
    open: true,
    children: [
      {
        title: "博客管理",
        path: "/blog/list",
      },
      {
        title: "分类管理",
        path: "/blog/category",
      },
    ],
  },
  {
    title: "专题",
    icon: "icon-zhuanti",
    open: true,
    children: [
      {
        title: "专题管理",
        path: "/special/list",
      },
    ],
  },
  {
    title: "设置",
    icon: "icon-settings",
    open: true,
    children: [
      {
        title: "个人信息设置",
        path: "/settings/my",
      },
      {
        title: "博客成员",
        path: "/settings/user",
      },
      {
        title: "系统设置",
        path: "/settings/sysInfo",
        roleType: 1,
      },
    ],
  },
  {
    title: "回收站",
    icon: "icon-delete",
    open: true,
    children: [
      {
        title: "回收站",
        path: "/recovery/list",
      },
    ],
  },
]);
const api = {
  "getUserInfo": "getUserInfo",
  "logout": "logout",
  "createHtml": "createHtml",
  "checkProgress": "checkProgress",
}
const openClose = (index) => {
  const open = menuList.value[index].open;
  menuList.value[index].open = !open;
}
const userInfo = ref({});
const getUserInfo = async () => {//???????
  let result = await proxy.Request({
    url: api.getUserInfo
  })

  if (!result) {
    return;
  }
  userInfo.value = result.data;
  userInfo.value.avatar = proxy.globalInfo.imageUrl + result.data.avatar;
}
getUserInfo();
</script>
  1. openClose函数,实现点击子标题的展开与收缩,通过index确定是对哪个标题进行操作,直接对对象中的open标记取反即可
const openClose = (index) => {
  const open = menuList.value[index].open;
  menuList.value[index].open = !open;
}
  1. 将所有标题放在一个对象数组中,在展示时,只需要一次读取数组即可,极大的缩小了代码量。
const menuList = ref([
  {
    title: "博客",
    icon: "icon-blog",
    open: true,
    children: [
      {
        title: "博客管理",
        path: "/blog/list",
      },
      {
        title: "分类管理",
        path: "/blog/category",
      },
    ],
  },
  {
    title: "专题",
    icon: "icon-zhuanti",
    open: true,
    children: [
      {
        title: "专题管理",
        path: "/special/list",
      },
    ],
  },
  {
    title: "设置",
    icon: "icon-settings",
    open: true,
    children: [
      {
        title: "个人信息设置",
        path: "/settings/my",
      },
      {
        title: "博客成员",
        path: "/settings/user",
      },
      {
        title: "系统设置",
        path: "/settings/sysInfo",
        roleType: 1,
      },
    ],
  },
  {
    title: "回收站",
    icon: "icon-delete",
    open: true,
    children: [
      {
        title: "回收站",
        path: "/recovery/list",
      },
    ],
  },
]);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

室内外融合便携式定位终端5G+UWB+RTK

一、介绍 便携式定位终端主要用于提供高精度的位置数据&#xff0c;支持室内UWB定位和室外北斗系统定位功能&#xff0c;支持5G公网和5G专网通信功能&#xff0c;便携式定位终端中超宽带(UWB)和实时动态(RTK)技术的集成代表了精确位置跟踪方面的重大进步。这款UWBRTK便携式定位…

SpringBootWeb案例_02

Web后端开发_05 SpringBootWeb案例_02 1.新增员工 1.1需求 在新增用户时&#xff0c;我们需要保存用户的基本信息&#xff0c;并且还需要上传的员工的图片&#xff0c;目前我们先完成第一步操作&#xff0c;保存用户的基本信息。 1.2 接口文档 基本信息 请求路径&#xff…

springboot + vue 企业级工位管理系统

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

【23-24 秋学期】NNDL 作业13 优化算法3D可视化

编程实现优化算法&#xff0c;并3D可视化 1. 函数3D可视化 分别画出和的3D图 NNDL实验 优化算法3D轨迹 鱼书例题3D版_优化算法3d展示-CSDN博客 2.加入优化算法&#xff0c;画出轨迹 分别画出和的3D轨迹图 从轨迹、速度等多个角度讲解各个算法优缺点 NNDL实验 优化算法3D轨…

Abaper入门实战篇 ——从 0 - 1 完成一个ALV

SAP ABAP 顾问&#xff08;开发工程师&#xff09;能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读516次。目标&#xff1a;基于对SAP abap 顾问能力模型的梳理&#xff0c;给一年左右经验的abaper 快速成长为三年经验提供超级燃料&#xff01;https://blog.csdn.net/j…

基于腾讯云手把手教你搭建网站

目录 前言前期准备工作具体搭建网站番外篇&#xff1a;网站开发及优化结束语 前言 在当今数字化时代浪潮之下&#xff0c;作为开发者拥有一个属于自己的网站是非常有必要的&#xff0c;也是展示个人形象、打造影响力和给别人提供服务的重要途径。网站不仅可以作为打造自己影响…

算法通关村-----跳跃游戏问题

跳跃游戏 问题描述 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 详见…

MySQL笔记-第02章_MySQL环境搭建

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第02章_MySQL环境搭建1. MySQL的卸载步骤1&#xff1a;停止MySQL服务步骤2&#xff1a;软件的卸载步骤3&#xff1a;残余文件的清理步骤4&am…

【网络安全技术】密钥管理

一、分级密钥概念 典型的密钥分级分为三级&#xff0c;三级密钥就是一次会话的session key&#xff0c;用来加密通信&#xff0c;所以通常使用对称密钥。 二级密钥就是分发三级密钥的密钥&#xff0c;用来加密三级密钥来分发三级密钥。 一级密钥就是分发二级密钥的密钥&…

Linux系统与python常用密码的加密解密方法

Linux系统与python常用加密&解密方法 文章目录 Linux系统与python常用加密&解密方法Linux系统加密解密方法一、openssl二、示例1、加密规则语法2、解密语法规则3、shell脚本 Python密码加密方法一、Base64加密1、加密2、解密 二、哈希算法加密三、Fernet对称加密算法1、…

运维03:LAMP

黄金架构LAMP 什么是LAMP LAMP是公认的最常见&#xff0c;最古老的黄金web技术栈 快速部署LAMP架构 #停止nginx&#xff0c;并且把nginx应用卸载了 systemctl stop nginx yum remove nginx -y#关闭防火墙 iptables -F #清空防火墙规则&#xff0c;比如哪些请求允许进入服…

7. 系统信息与系统资源

7. 系统信息与系统资源 1. 系统信息1.1 系统标识 uname()1.2 sysinfo()1.3 gethostname()1.4 sysconf() 2. 时间、日期2.1 Linux 系统中的时间2.1.1 Linux 怎么记录时间2.1.2 jiffies 的引入 2.2 获取时间 time/gettimeofday2.2.1 time()2.2.2 gettimeofday() 2.3 时间转换函数…

Java集合(二)

1. Map 1.1 HashMap 和 Hashtable 的区别 线程是否安全&#xff1a; HashMap 是非线程安全的&#xff0c;Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。&#xff08;如果你要保证线程安全的话就使用 ConcurrentHashMap 吧&#xff01;&…

[多线程]阻塞队列和生产者消费者模型

目录 1.阻塞队列 1.1引言 1.2Java标准库中的阻塞队列 1.3自主通过Java代码实现一个阻塞队列(泛型实现) 2.生产者消费者模型 1.阻塞队列 1.1引言 阻塞队列是多线程部分一个重要的概念,它相比于一般队列,有两个特点: 1.线程是安全的 2.带有阻塞功能 1) 队列为空,出队列就会阻…

鸿蒙HarmonyOS从零实现类微信app效果——基础界面搭建

最近鸿蒙HarmonyOS开发相关的消息非常的火&#xff0c;传言华为系手机后续将不再支持原生Android应用&#xff0c;所以对于原Android应用开发对应的Harmony版本也被一系列大厂提上了日程。作为一个名义上的移动端开发工程师&#xff08;(⊙o⊙)…&#xff0c;最近写python多过A…

应急响应-挖矿病毒处理

应急响应-挖矿病毒处理 使用top​命令实时监控占用CPU资源的是哪个进程&#xff0c;结果可以看到是2725这个进程。 ​​ 再使用netstat -anltp命令查看网络连接状态&#xff0c;定位到对应的PID号后&#xff0c;就拿到了远程地址 ​​ 拿到远程IP&#xff0c;结果是VPN入口…

JVM 运行时内存(三)

Java 堆从 GC 的角度还可以细分为: 新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。 1. 新生代 是用来存放新生的对象。一般占据堆的 1/3 空间。由于频繁创建对象&#xff0c;所以新生代会频繁触发MinorGC 进行垃圾回收。新生代又分为 Eden 区、ServivorFrom、…

人工智能_机器学习059_非线性核函数_poly核函数_rbf核函数_以及linear核函数效果对比---人工智能工作笔记0099

人工智能_机器学习059_非线性核函数介绍---人工智能工作笔记0099 那么我们应该如何调整这个SVC的参数,也就是我们应该使用哪种核函数,比较合适呢?这取决于我们的数据,适合使用哪个核函数,正好我们有 提供的score = accuracy_score(y_test,y_pred) 这样的评分函数,我们可以根据…

B2B公司如何寻找意向客户的联系方式?

在B2B公司的营销过程中&#xff0c;少不了寻找意向客户的阶段&#xff0c;这也是销售过程中非常重要的一步。 很多新人都是拿到客户联系方式&#xff0c;就直接打电话拜访&#xff0c;俗话说不打没有准备的仗&#xff0c;因此在拜访客户之前就应该做好功课&#xff0c;充分了解…

AI医疗交流平台【Docola】申请823万美元纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于美国的AI医疗交流平台Docola近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为 (DOCO) &#xff0c;Docola计划…