接上篇-使用 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 插槽为对话框添加了操作按钮,统一了页面布局。
相关推荐
前端李易安10 小时前
使用ivew-ui-plus 的Submit组件踩坑 injection “LoginInstance“ not found 记录 问题原因分析与解决方案
ui·login·view-ui-plus·submit
心怀梦想的咸鱼18 小时前
UE5 umg学习(四) 将UI控件显示到关卡中
学习·ui·ue5
wyy72931 天前
v-html 富文本中图片使用element-ui image-viewer组件实现预览,并且阻止滚动条
前端·ui·html
界面开发小八哥1 天前
界面控件Kendo UI for Angular中文教程:如何构建带图表的仪表板?(一)
ui·界面控件·kendo ui·angular.js·ui开发
大风起兮云飞扬丶1 天前
UI库架构设计
ui
鸿蒙自习室1 天前
鸿蒙动画开发06——打断动画
ui·华为·harmonyos·鸿蒙
大福是小强1 天前
035_Progress_Dialog_in_Matlab中的进度条对话框
ui·matlab·进度条·界面开发·ux·用户界面
老码沉思录2 天前
React Native 全栈开发实战班 - 第四部分:用户界面进阶之动画效果实现
react native·react.js·ui
大耳猫2 天前
主动测量View的宽高
android·ui