首页 > 其他分享 >Vue 3实现一个带有左侧导航菜单的页面。该页面包含一个类似的增删改查(CRUD)功能模块。左侧的导航栏包含不同的功能选项(如任务管理、小组管理等),点击时可以显示对应的页面内容

Vue 3实现一个带有左侧导航菜单的页面。该页面包含一个类似的增删改查(CRUD)功能模块。左侧的导航栏包含不同的功能选项(如任务管理、小组管理等),点击时可以显示对应的页面内容

时间:2024-11-15 18:19:32浏览次数:3  
标签:vue return GroupManagement 小组 member 左侧 导航 页面

效果图:

实现步骤:

项目结构

我们将构建一个简单的Vue 3项目,包含以下内容:

  1. 左侧导航栏:用于切换不同页面或模块。
  2. 右侧内容区域:用于展示不同模块的内容(如小组成员管理)。

代码实现

1. 创建主页面组件 App.vue

首先,在 App.vue 中定义左侧导航栏和内容区域:

<template>
  <div id="app" class="app-container">
    <!-- 左侧导航栏 -->
    <aside class="sidebar">
      <div class="user-info">
        <div class="avatar"></div>
        <p>用户名</p>
        <p>@TP</p>
      </div>
      <nav>
        <ul>
          <li :class="{ active: activeTab === 'group' }" @click="activeTab = 'group'">小组管理</li>
          <li :class="{ active: activeTab === 'task' }" @click="activeTab = 'task'">任务管理</li>
          <li :class="{ active: activeTab === 'board' }" @click="activeTab = 'board'">留言板</li>
          <li :class="{ active: activeTab === 'resources' }" @click="activeTab = 'resources'">资料库</li>
        </ul>
      </nav>
    </aside>

    <!-- 右侧内容区 -->
    <main class="content">
      <component :is="currentTabComponent" />
    </main>
  </div>
</template>

<script>
import GroupManagement from "./components/GroupManagement.vue";

export default {
  components: {
    GroupManagement,
  },
  data() {
    return {
      activeTab: "group", // 默认显示小组管理
    };
  },
  computed: {
    currentTabComponent() {
      switch (this.activeTab) {
        case "group":
          return "GroupManagement";
        case "task":
          return "TaskManagement";
        case "board":
          return "MessageBoard";
        case "resources":
          return "ResourceLibrary";
        default:
          return "GroupManagement";
      }
    },
  },
};
</script>

<style>
/* 基本样式 */
.app-container {
  display: flex;
  height: 100vh;
}
.sidebar {
  width: 200px;
  background-color: #d3e3d2;
  padding: 20px;
}
.user-info {
  text-align: center;
  margin-bottom: 20px;
}
.avatar {
  width: 60px;
  height: 60px;
  background-color: #ccc;
  border-radius: 50%;
  margin: 0 auto;
}
.sidebar ul {
  list-style: none;
  padding: 0;
}
.sidebar li {
  padding: 10px;
  cursor: pointer;
}
.sidebar li.active {
  background-color: #a0c4a0;
}
.content {
  flex-grow: 1;
  padding: 20px;
}
</style>

 

2. 创建小组管理页面 GroupManagement.vue

GroupManagement.vue 实现了类似图片中的小组管理模块,包含小组成员的增删改查操作。

<template>
  <div>
    <h2>小组管理</h2>
    <div class="group-info">
      <h3>网上邻居</h3>
      <p>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX(小组简介)</p>
      <div class="group-actions">
        <button @click="editGroup">编辑信息</button>
        <button @click="inviteUser">邀请用户</button>
        <button @click="dissolveGroup">解散群聊</button>
      </div>
    </div>

    <table class="member-table">
      <thead>
        <tr>
          <th>成员</th>
          <th>学校</th>
          <th>角色</th>
          <th>进组时间</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="member in members" :key="member.id">
          <td>{{ member.name }}</td>
          <td>{{ member.school }}</td>
          <td>{{ member.role }}</td>
          <td>{{ member.joinDate }}</td>
          <td>
            <button @click="removeMember(member.id)">移除成员</button>
            <button @click="transferMember(member.id)">转让小组</button>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      members: [
        {
          id: 1,
          name: "Wu Jinxuan",
          school: "同济大学",
          role: "组长",
          joinDate: "2024年11月9日",
        },
      ],
    };
  },
  methods: {
    editGroup() {
      alert("编辑小组信息");
    },
    inviteUser() {
      alert("邀请用户");
    },
    dissolveGroup() {
      alert("解散群聊");
    },
    removeMember(id) {
      this.members = this.members.filter((member) => member.id !== id);
    },
    transferMember(id) {
      alert("转让小组给成员 ID: " + id);
    },
  },
};
</script>

<style scoped>
.group-info {
  margin-bottom: 20px;
}
.group-actions {
  display: flex;
  gap: 10px;
}
.member-table {
  width: 100%;
  border-collapse: collapse;
}
.member-table th,
.member-table td {
  padding: 10px;
  border: 1px solid #ddd;
}
</style>
3. 其他组件 (可选)

对于其他的选项(任务管理、留言板、资料库),可以创建类似的组件文件 TaskManagement.vueMessageBoard.vueResourceLibrary.vue。可以用简单的模板内容替代,以保持结构一致:

<template>
  <div>
    <h2>任务管理</h2>
    <p>这是任务管理页面的内容。</p>
  </div>
</template>

<script>
export default {
  name: "TaskManagement",
};
</script>

 

总结

  1. 导航栏切换App.vue 中使用 activeTab 变量来控制当前显示的页面组件。
  2. 小组管理增删改查:在 GroupManagement.vue 中实现小组成员的增删操作。
  3. 样式和布局:使用 flex 布局来实现左侧导航栏和右侧内容区域的布局。

 

标签:vue,return,GroupManagement,小组,member,左侧,导航,页面
From: https://blog.csdn.net/nndsb/article/details/143805078

相关文章

  • 室内导航怎么实现?技术方案详解
    在日常生活中,我们常常需要在大型购物中心、复杂医院或繁忙机场中寻找目的地。然而,与室外环境不同,室内空间的GPS信号受限,使得传统导航方式难以发挥作用。那么,在GPS信号受限的室内环境中,如何实现精准、高效的导航服务呢?本文将深入探讨室内导航的实现原理、关键技术、应用案例及未......
  • 网页直播/点播播放器EasyPlayer.js网页web无插件播放器渲染页面出现倒挂的原因排查
    EasyPlayer.js网页web无插件播放器属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,无须安装任何插件,起播快、延迟低、兼容性强,使用非常便捷。EasyPlayer.js播放器不仅支持H.264与H.265视频编码格式,也能支持WebSocket-FLV、HTTP-FLV、HLS(m3u8)、WebRTC、ws......
  • 微信小程序:如何使用经纬度打开手机自带导航?
    在微信小程序开发中,根据用户的位置信息进行导航是一个常见的功能。本文将介绍如何在微信小程序中,仅知道经纬度的情况下,打开手机自带的导航。使用 wx.openLocation 方法微信小程序提供了一个非常方便的方法 wx.openLocation,可以直接在微信内置地图中显示位置,并提供导航功能......
  • <a-modal>打开页面报错Ancestor with aria-hidden
    报错信息Blockedaria-hiddenonanelementbecauseitsdescendantretainedfocus.Thefocusmustnotbehiddenfromassistivetechnologyusers.Avoidusingaria-hiddenonafocusedelementoritsancestor.Considerusingtheinertattributeinstead,whichwi......
  • 鸿蒙Navigation拦截器实现页面跳转登录鉴权方案
    我们在进行页面跳转时,很多情况下都得考虑登录状态问题,比如进入个人信息页面,下单交易页面等等。在这些场景下,通常在页面跳转前,会先判断下用户是否已经登录,若已登录,则跳转到相应的目标页面,若没有登录,则先跳转到登录页面,然后等着获取登录状态,若登录页面关闭时,能获取到已登录,则继续跳......
  • 低轨增强”将为世界卫星导航发展带来新赋能!
    来源:北斗网 发布时间:2020-01-22近年来,随着美国GPS、俄罗斯GLONASS、中国北斗卫星导航系统和欧洲Galileo等四大卫星导航系统提供全球服务,世界卫星导航步入新时代。各主要卫星导航国家瞄准更高服务精度、更加多样功能、更加可靠服务,正在着手开展新一代系统建设和新一轮竞技。......
  • 第8章利用CSS制作导航菜单
    8.1水平顶部导航栏水平菜单导航栏是网站设计中应用最广泛的导航设计,一般放置在页面的顶部。8.1.1简单水平导航栏的设计与实现8.1.1.1导航栏的创建<nav>标签是HTML5新增的文档结构标签,用于标记导航栏,以便后续与网站的其他内容整合,所以常用<nav>标签在页面上创建导航栏菜单......
  • 【开发】若页面一次性接口请求上百个,阁下又当如何应对
    需求:假如页面一次性请求有上百个,你应该如何处理这种请求并发?答:soeasy!循环请求?肯定是不对的,否则一次性并发上百次请求,差点的服务器得崩溃了,我甚至一度以为你是在搞Dos攻击。我们可以通过任务队列的缓存来合理控制并发数据。我们知道浏览器发起的请求最大并发数量一般都是6~8......
  • SharePoint Online页面的一些奇怪参数
    前言最近,在查找资料的时候,偶然间发现了一些非常有意思的参数,如下:?env=Embedded or ?env=WebView&wdStartOn=21.正经的SharePointOnline页面2.加了参数的SharePointOnline页面3.加了另一个参数的SharePointOnline页面结束语......
  • SwiftUI 4.0 的全新导航系统
    SwiftUI4.0的全新导航系统东坡肘子​公共号:肘子的Swift记事本​关注他 34人赞同了该文章​展开目录 长久以来,开发者对SwiftUI的导航系统颇有微词。受NavigationView的能力限制,开发者需要动用各种技巧乃至黑科技才能实现一些......