接上篇-使用 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-tableel-buttonel-dialogel-inputelement-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 定义 loadingdialogVisiblegroupInfomembers,并通过方法实现编辑、删除、邀请等功能。

主要功能

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

样式优化

  • 使用 element-plus 的表格和卡片组件,样式更加简洁和美观。
  • 通过 dialog-footer 插槽为对话框添加了操作按钮,统一了页面布局。
相关推荐
I'm Jie16 小时前
Swagger UI 本地化部署,解决 FastAPI Swagger UI 依赖外部 CDN 加载失败问题
python·ui·fastapi·swagger·swagger ui
爱学习的程序媛17 小时前
【Web前端】优化Core Web Vitals提升用户体验
前端·ui·web·ux·用户体验
爱学习的程序媛17 小时前
【Web前端】前端用户体验优化全攻略
前端·ui·交互·web·ux·用户体验
紫丁香17 小时前
Selenium自动化测试详解1
python·selenium·测试工具·ui
GISer_Jing18 小时前
前端组件库——shadcn/ui:轻量、自由、可拥有,解锁前端组件库的AI时代未来
前端·人工智能·ui
rjc_lihui21 小时前
IntelliSense: 无法打开 源 文件 “ui_mainwindow.h“ demo\qtdemosrc\mainwindow
ui
老星*2 天前
Lucide Icons:开源、轻量、设计师友好的现代图标库
ui·开源·github
Swift社区2 天前
AI 驱动 UI:鸿蒙 ArkUI 的新可能
人工智能·ui·harmonyos
Feng-licong2 天前
告别手写 UI:当 Google Stitch 遇上 Flutter,2026 年的“Vibe Coding”开发流
flutter·ui
一字白首2 天前
微信小程序进阶实战:从 UI 组件库到全局状态管理全解DAY05
ui·微信小程序·小程序