接上篇-使用 element-plus 优化UI界面

使用 element-plus 可以让我们更容易创建一个精美且功能丰富的UI界面。接下来,我们将优化 GroupManagement.vue 组件,使用 element-plus 的表格、按钮、对话框等组件来实现一个更专业的小组管理页面。

优化后的 GroupManagement.vue 代码

1. 安装 element-plus

如果还没有安装 element-plus,可以使用以下命令进行安装:

bash 复制代码
npm install element-plus
2. 引入 element-plus 组件

在 main.js 中引入 element-plus:

bash 复制代码
import { createApp } from 'vue';
import App from './App.vue';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';

const app = createApp(App);
app.use(ElementPlus);
app.mount('#app');
3. 使用 element-plus 组件优化 GroupManagement.vue

我们将使用 el-table、el-button、el-dialog、el-input 等 element-plus 组件来优化页面。

javascript 复制代码
<template>
  <div>
    <h2>小组管理</h2>

    <!-- 小组信息和操作按钮 -->
    <el-card class="group-info" shadow="hover">
      <div slot="header" class="clearfix">
        <span>网上邻居</span>
        <el-button 
          style="float: right" 
          type="primary" 
          size="mini" 
          @click="editGroupInfo">
          编辑信息
        </el-button>
      </div>
      <p>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX(小组简介)</p>
      <el-button-group class="group-actions">
        <el-button @click="inviteUser" type="success">邀请用户</el-button>
        <el-button @click="dissolveGroup" type="danger">解散群聊</el-button>
      </el-button-group>
    </el-card>

    <!-- 小组成员表格 -->
    <el-table :data="members" stripe style="width: 100%" v-loading="loading">
      <el-table-column prop="name" label="成员" width="180" />
      <el-table-column prop="school" label="学校" width="180" />
      <el-table-column prop="role" label="角色" width="120" />
      <el-table-column prop="joinDate" label="进组时间" width="180" />

      <!-- 操作列 -->
      <el-table-column label="操作" width="220">
        <template #default="scope">
          <el-button 
            @click="removeMember(scope.row)" 
            type="danger" 
            size="mini">
            移除成员
          </el-button>
          <el-button 
            @click="transferMember(scope.row)" 
            type="primary" 
            size="mini">
            转让小组
          </el-button>
        </template>
      </el-table-column>
    </el-table>

    <!-- 编辑小组信息对话框 -->
    <el-dialog 
      title="编辑小组信息" 
      :visible.sync="dialogVisible">
      <el-input 
        v-model="groupInfo.description" 
        type="textarea" 
        rows="4" 
        placeholder="请输入小组简介" />
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取消</el-button>
        <el-button type="primary" @click="saveGroupInfo">保存</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
import { ref } from "vue";

export default {
  setup() {
    const loading = ref(false);
    const dialogVisible = ref(false);

    // 小组信息
    const groupInfo = ref({
      description: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX(小组简介)",
    });

    // 小组成员数据
    const members = ref([
      {
        id: 1,
        name: "Wu Jinxuan",
        school: "同济大学",
        role: "组长",
        joinDate: "2024年11月9日",
      },
      // 可添加更多成员数据
    ]);

    // 编辑小组信息
    const editGroupInfo = () => {
      dialogVisible.value = true;
    };

    // 保存小组信息
    const saveGroupInfo = () => {
      dialogVisible.value = false;
      // 执行保存逻辑
      console.log("保存小组信息:", groupInfo.value);
    };

    // 邀请用户
    const inviteUser = () => {
      console.log("邀请用户");
    };

    // 解散群聊
    const dissolveGroup = () => {
      console.log("解散群聊");
    };

    // 移除成员
    const removeMember = (member) => {
      members.value = members.value.filter((m) => m.id !== member.id);
      console.log("移除成员:", member);
    };

    // 转让小组
    const transferMember = (member) => {
      console.log("转让小组给:", member.name);
    };

    return {
      loading,
      dialogVisible,
      groupInfo,
      members,
      editGroupInfo,
      saveGroupInfo,
      inviteUser,
      dissolveGroup,
      removeMember,
      transferMember,
    };
  },
};
</script>

<style scoped>
.group-info {
  margin-bottom: 20px;
}
.group-actions {
  margin-top: 10px;
}
.dialog-footer {
  text-align: right;
}
</style>

代码说明

  1. el-card :使用 el-card 来显示小组信息,添加标题和操作按钮。
  2. el-table :使用 el-table 显示小组成员数据,支持排序和样式。
  3. el-dialog :使用 el-dialog 创建编辑对话框,用户可以编辑小组信息。
  4. el-button-group:按钮组用于操作小组(邀请用户、解散群聊)。
  5. 数据绑定和方法 :使用 ref 定义 loading、dialogVisible、groupInfo 和 members,并通过方法实现编辑、删除、邀请等功能。

主要功能

  • 编辑小组信息:点击"编辑信息"按钮,弹出对话框,用户可以修改小组简介。
  • 邀请用户:点击"邀请用户"按钮,执行邀请操作。
  • 解散群聊:点击"解散群聊"按钮,执行解散操作。
  • 移除成员:点击"移除成员"按钮,删除该成员。
  • 转让小组:点击"转让小组"按钮,将该成员设置为新组长。

样式优化

  • 使用 element-plus 的表格和卡片组件,样式更加简洁和美观。
  • 通过 dialog-footer 插槽为对话框添加了操作按钮,统一了页面布局。
相关推荐
Cx330❀5 分钟前
【Qt 进阶指南】详解 Qt 常用标准对话框与主窗口组件架构
开发语言·qt·ui·性能优化·架构·图形渲染
传奇开心果编程35 分钟前
【ArkUI进阶练中学】第5课:编译优化与包体积进
学习·ui·华为·harmonyos
传奇开心果编程2 小时前
【ArkUI进阶练中学】第10课:架构设计与工程化最佳实践
学习·ui·华为·harmonyos
传奇开心果编程3 小时前
【ArkUI提高练中学】第7课:性能调优与稳定性治理
学习·ui·华为·harmonyos
传奇开心果编程15 小时前
【SwiftUI提高练中学】第13课 实时活动与灵动岛:ActivityKit 实战
学习·ui·ios·swiftui·swift
phltxy20 小时前
C 语言动态内存管理:从申请空间到安全释放
c语言·开发语言·ui
李少兄1 天前
文档排版与数据处理:阿拉伯数字与罗马数字的转换
ui·xhtml·wps
狗凯之家源码网1 天前
网址导航系统源码评测:个性 UI 与轻量化架构实战
ui·架构·网址导航系统
传奇开心果编程1 天前
【SwiftUI入门练中学】第17课 通知与后台任务
学习·ui·ios·swiftui·swift
wshzd2 天前
LLM之Agent(107)|DeepSeek-Harness(十五)流式输出管道:从 StreamChunk 到 UI
人工智能·ui