element plus 使用细节

本文介绍了Vue3与ElementPlus、Vite、TypeScript、Pinia等技术的实践,包括自定义table、select显示value、分页与搜索、el-upload处理、el-dialog使用技巧,以及elementplus与px2rem的兼容性和图标问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

菜鸟一直在纠结这个写不写,因为不难,但是菜鸟老是容易忘记,虽然想想或者搜搜就可以马上写出来,但是感觉每次那样就太麻烦了,不如一股做气写了算了,后面遇见别的就再来补充!

更多关于vue3的知识可以看我的B站笔记:Vue3 + vite + Ts + pinia + 实战 + 源码 + electron

table 表格自定义内容

<el-table-column label="操作" width="230">
  <template #default="scope">
    <el-button type="primary" size="small">详情</el-button>
    <el-popconfirm title="是否删除" @confirm="deleteEvent(scope.row)">
      <template #reference>
        <el-button type="danger" size="small">删除</el-button>
      </template>
    </el-popconfirm>
    <el-button type="primary" size="small" :disabled="scope.row.status == 0">分享</el-button>
  </template>
</el-table-column>

注意

使用了el-popconfirm,权限验证的时候,需要给el-popconfirm和里面的el-button都加权限验证,不然会有问题!

select 显示的是value

之所以显示为 value 就是因为,你 v-model 所给的值,和 el-option 的 value 不一致,最常见的就是 0 和 ‘0’ 了,一定要加以注意!

分页和搜索

这里有个问题,就是element plus官网建议不要使用这些事件了:

在这里插入图片描述

而是推荐使用v-model,菜鸟试了一下确实简单,但是有个问题,就是你监听怎么个监听法?

如果你只把 当前页数每页条数 放入 watchEffect(),搜索单独写一个函数,搜索后切换分页,那你将喜提一个bug;但是如果把全部的搜索条件都放 watchEffect() 里面去了,那你就会发现输入一个字选一个东西就请求一次,是真的不行,所以退而求其次,只能使用 watch,大致代码如下:

// 实时响应分页
watch(
  [currentPage, pageSize],
  (newval, oldval) => {
   
    console.log(newval, oldval);
    getFormListFun(false);
  },
  {
   
    immediate: true,
  }
);

// 请求列表
function getFormListFun(bool = false) {
   
  let pramas = null;
  // bool 用于搜索,让页数从1开始
  if (bool) {
   
    currentPage.value = 1;
  }
  
  // 判断请求内容
  if (searchVal.value !== "" || formtype.value !== "" || formstatus.value !== "") {
   
    pramas = {
   
      pageNo: currentPage.value,
      pageSize: pageSize.value,
      condition: searchVal.value,
      formType: formtype.value,
      formstatus: formstatus.value,
    };
  } else {
   
    pramas = {
   
      pageNo: currentPage.value,
      pageSize: pageSize.value,
    };
  }

  // table数据置空
  tableData.value = [];
  getFormList({
    ...pramas })
    .then((res) => {
   
      if (res.code == 200) {
   
        total = res.data.total;
        tableData.value = tableData.value.concat(res.data.records);
      } else {
   
        ElMessage({
   
          message: res.message,
          type: "error",
        });
      }
    })
    .catch((err) => {
   
      console.log(err);
    });
}

2024/7/19补充

最近菜鸟做项目,感觉上面这个搜索还要去 判断请求内容,不是很方便,所以直接提成组件形式,不提不知道,一提才发现这个分页就变得简单多了,这里奉上代码!

search组件

<script setup>
import {
    Search, Plus, Delete } from '@element-plus/icons-vue'

const emit = defineEmits(['add', 'search', 'batchdelete'])

// 时间
let datetime = ref('')
// 搜索
let searchVal = ref('')
const search = () => {
   
  console.log(datetime.value)
  emit('search', {
   
    value: searchVal.value,
    startTime: datetime.value ? datetime.value[0] : '',
    endTime: datetime.value ? datetime.value[1] : ''
  })
}

// 新增
const add = () => {
   
  emit('add', true)
}

// 批量删除
const batchdelete = () => {
   
  emit('batchdelete')
}
</script>

<template>
  <div class="searchBox">
    <el-input v-model="searchVal" placeholder="样本编号/患者姓名/联系电话" clearable></el-input>
    <div class="block">
      <el-date-picker
        v-model="datetime"
        type="datetimerange"
        start-placeholder="开始时间"
        end-placeholder="结束时间"
      />
    </div>
    <el-button type="primary" :
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PBitW

可以去掘金看更完善版本

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值