vue2.0、elment-ui-table 行,自定义鼠标右键弹出内容

<template>  
   <div>
     <el-table :data="manageData.tableData"  height="100%" size="mini"
                @row-contextmenu="handleRow">
                <el-table-column prop="sensorCode" header-align="center" align="center" 
                label="探测器编号"></el-table-column>
     </el-table>

    <!-- 自定义 tooltip 弹出框 -->
     <div :style="tooltipStyle" v-if="tooltipVisible" class="custom-tooltip" 
      @click="ignoreAlarm"> 忽略报警
     </div>

  </div>
</template>
<script>
export default {
  data(){
     return{
        currentRowData: null, // 保存当前行的数据
        tooltipVisible: false,
        tooltipStyle: {
        position: 'absolute',
        left: '0px',
        top: '0px',
        zIndex: 9999,
      },
         }

    },
  mounted() {
   document.addEventListener('click', this.handleDocumentClick);  // 添加全局点击事件监听器
  },
  beforeDestroy() {
    document.removeEventListener('click', this.handleDocumentClick);
  },
  methods: {

    // 点击鼠标左键空白区域就关闭提示
    handleDocumentClick(event) {
      if (this.tooltipVisible && (!this.$refs.tooltip || 
          !this.$refs.tooltip.contains(event.target))) {
          this.tooltipVisible = false;  // 如果点击的不是 tooltip 或其子元素,关闭 tooltip
      }
    },

    // 自定义鼠标右键事件
    handleRow(row, event) {
      this.currentRowData = row
      event.preventDefault();
      const tooltipWidth = 70; // 定义 Tooltip 宽度
      const tooltipHeight = 20; // 定义 Tooltip 高度
      let x = event.clientX;
      let y = event.clientY;

      // 确保 Tooltip 不超出屏幕右边界
      if (x + tooltipWidth > window.innerWidth) {
        x -= tooltipWidth;
      }

      // 确保 Tooltip 不超出屏幕底部边界
      if (y + tooltipHeight > window.innerHeight) {
        y -= tooltipHeight;
      }

      this.tooltipStyle = {
        position: 'fixed', // 使用 fixed 以便相对于视窗定位
        left: `${x}px`,
        top: `${y}px`,
        zIndex: 9999,
        width: `${tooltipWidth}px`,
        height: `${tooltipHeight}px`,
        backgroundColor: '#152841',
        border: '1px solid #ccc',
        padding: '5px',
        borderRadius: '4px',
      };
      this.tooltipVisible = true;

    },
 }
}

Vue 2.0 中使用 Element-UI 构建用户管理界面是一个常见的需求,适用于后台管理系统。以下是实现用户管理界面的关键步骤和代码示例: ### 1. 界面布局 Element-UI 提供了 `el-container`、`el-header`、`el-main` 等组件用于构建页面布局。一个典型的用户管理界面通常包含表格展示用户信息,并提供搜索、分页、编辑等功能。 ```html <template> <el-container> <el-header>用户管理</el-header> <el-main> <el-table :data="users" style="width: 100%"> <el-table-column prop="id" label="ID"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="email" label="邮箱"></el-table-column> <el-table-column prop="role" label="角色"></el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <el-button @click="editUser(scope.row)" type="primary" size="small">编辑</el-button> <el-button @click="deleteUser(scope.row)" type="danger" size="small">删除</el-button> </template> </el-table-column> </el-table> <el-pagination layout="prev, pager, next" :total="total" @current-change="handlePageChange" ></el-pagination> </el-main> </el-container> </template> ``` ### 2. 数据绑定与方法 在 Vue 的 `data` 中定义数据源(如用户列表),并通过 `methods` 实现翻页、编辑和删除逻辑。 ```javascript <script> export default { data() { return { users: [], total: 0, currentPage: 1 }; }, methods: { fetchUsers(page) { // 模拟从后端获取数据 const mockData = [ { id: 1, name: '张三', email: 'zhangsan@example.com', role: '管理员' }, { id: 2, name: '李四', email: 'lisi@example.com', role: '普通用户' } ]; this.users = mockData; this.total = 100; // 假设总共有 100 条记录 }, handlePageChange(page) { this.currentPage = page; this.fetchUsers(page); }, editUser(user) { // 编辑用户的逻辑 console.log('编辑用户:', user); }, deleteUser(user) { // 删除用户的逻辑 console.log('删除用户:', user); } }, mounted() { this.fetchUsers(this.currentPage); } }; </script> ``` ### 3. 样式与交互增强 Element-UI 提供了丰富的 UI 组件,可以进一步增强用户交互体验。例如,可以添加搜索框、模态对话框等。 ```html <el-form inline> <el-form-item label="姓名"> <el-input v-model="searchName" placeholder="请输入姓名"></el-input> </el-form-item> <el-form-item> <el-button @click="searchUsers" type="primary">搜索</el-button> </el-form-item> </el-form> <!-- 模态对话框 --> <el-dialog title="编辑用户" :visible.sync="dialogVisible"> <el-form :model="selectedUser"> <el-form-item label="姓名"> <el-input v-model="selectedUser.name"></el-input> </el-form-item> <el-form-item label="邮箱"> <el-input v-model="selectedUser.email"></el-input> </el-form-item> </el-form> <span slot="footer"> <el-button @click="dialogVisible = false">取消</el-button> <el-button type="primary" @click="saveUser">保存</el-button> </span> </el-dialog> ``` ### 4. 后端接口集成 实际开发中,需要将前端与后端 API 集成,通过 Axios 或其他 HTTP 客户端发送请求。 ```bash npm install axios ``` ```javascript import axios from 'axios'; export default { methods: { async fetchUsers(page) { try { const response = await axios.get(`/api/users?page=${page}`); this.users = response.data.items; this.total = response.data.total; } catch (error) { console.error('获取用户数据失败:', error); } } } }; ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值