背景
项目中,对于结构复杂的树形数据选择,一般会使用懒加载的方式。但是懒加载的同时,又需要实现远程搜索,这时候就需要对 el-tree-select 进行一些处理了。
注意,当页面上有多个 el-tree-select 组件时,如果没有配置 value-key,对一个组件进行搜索选中操作,然后点击第二个组件时,可能会导致上一个组件的显示值变成一个 id 值。
背景
项目中,对于结构复杂的树形数据选择,一般会使用懒加载的方式。但是懒加载的同时,又需要实现远程搜索,这时候就需要对 el-tree-select 进行一些处理了。
注意,当页面上有多个 el-tree-select 组件时,如果没有配置 value-key,对一个组件进行搜索选中操作,然后点击第二个组件时,可能会导致上一个组件的显示值变成一个 id 值。
背景
el-table 中,对于表格单元格的合并,文档中有介绍。原理就是通过设置span-method
方法,返回一个二维数组,数组中的每一项表示一行中每个单元格的合并情况。
但是这种方法针对已知表格中的某些单元格需要合并的情况,如果需要合并的单元格位置是动态的,那么这种方法就需要改造下了。
<template>
<div>
<el-table :data="tableData" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px">
<el-table-column prop="id" label="ID" width="180" />
<el-table-column prop="name" label="Name" />
<el-table-column prop="amount1" label="Amount 1" />
<el-table-column prop="amount2" label="Amount 2" />
<el-table-column prop="amount3" label="Amount 3" />
</el-table>
</div>
</template>
<script setup>
//重点就是这个方法,返回一个数组,用来描述每行每个单元格的合并情况
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }) => {
if (columnIndex === 0) {
if (rowIndex % 2 === 0) {
return {
rowspan: 2,
colspan: 1
}
} else {
return {
rowspan: 0,
colspan: 0
}
}
}
}
const tableData = [
{
id: '12987122',
name: 'Tom',
amount1: '234',
amount2: '3.2',
amount3: 10
},
{
id: '12987123',
name: 'Tom',
amount1: '165',
amount2: '4.43',
amount3: 12
},
{
id: '12987124',
name: 'Tom',
amount1: '324',
amount2: '1.9',
amount3: 9
},
{
id: '12987125',
name: 'Tom',
amount1: '621',
amount2: '2.2',
amount3: 17
},
{
id: '12987126',
name: 'Tom',
amount1: '539',
amount2: '4.1',
amount3: 15
}
]
</script>
背景
正在做一个考核管理系统,需要用到附件的上传以及回显。项目有 vue 做的 pc 端,以及 uniapp 做的 H5 移动端,做的时候发现二者的回显稍有不同,记录一下。因为附件只牵扯到 pdf 和图片,所以只写了这两种的回显。
function reviewFile (file) {
let fileType = ''
if (file.fileName.indexOf('.pdf') != -1) {
fileType = 'application/pdf'
} else {
fileType = 'image/png'
}
axios({
url: process.env.VUE_APP_BASE_URL + '/file/download/' + file.file,
method: 'get',
responseType: 'blob', // 一定要设置响应类型为 blob
headers: { token: token } // 对于有鉴权的接口,需要添加token
}).then(res => {
// 创建用于作为附件预览源的Blob
const blob = new Blob([res.data], { type: fileType });
// 创建用于作为PDF预览源的Blob的URL
let url = URL.createObjectURL(blob);
window.open(url)
})
},
背景
使用 vue3 + elementPlus 做了一个树形表格,数据是懒加载的,发现删除子节点,页面不刷新。即使重新获取表格数据,一层一层展开,子节点还是存在,怀疑是缓存的问题。
网上查询后,发现有一个属性,可以获取树形表格缓存的数据,打印看一下。
背景
给一个旧的后台管理项目,增加一个从详情页返回,不刷新页面的功能。使用 vue 的 keep-alive 组件 include 属性,但是发现不生效,页面刷新了。网上查了下,这个 include,是根据组件的 name 属性来匹配的,需要把组件的 name 属性加上去改成与 include 中的一致。顺便再复习下 keep-alive 的用法。
keep-alive 是 Vue 提供的一个内置组件,用于缓存组件的状态,避免组件在切换时重新渲染。它通常用于路由组件的缓存,以提升用户体验。
背景
做后台管理项目的时候,有时候会遇到可编辑表格的需求。还有一种需求,是在可编辑的表格表头上,加上 ElementUI 中表示必填的红色*。
<el-table-column
:render-header="addRedStar"
prop="supportFund"
label="经费额(万元)"
align="center"
:render-header="addStar"
>
</el-table-column>
正常情况下
在 ElementUI 中,表单验证使用 async-validator(异步校验)实现,正常的使用方法如下:
背景
昨天旁边同事在做一个功能,从接口获取数组数据,前端页面进行遍历展示。默认只展示每条数据上的部分字段,当点击该条数据旁边的展开按钮后,该条数据下边会展开一个面板展示该条数据的完整字段。
我给他出的主意是,在拿到接口数据的时候,可以先遍历一次接口数据,并且给每条数据中增加一个字段,用来控制该条数据是否展开。并且这个动作要在赋值给页面中遍历的那个对象之前完成。因为赋值之后再增加的属性,默认就不是响应式的啦。(PS: 通过官方提供的$set 方法倒是可以)
背景
有一个需求,vue 开发 pc 端,uniapp 写 h5 移动端,两个页面都有个 PDF 预览的功能。之前的做法是直接在新标签打开附件地址,现在浏览器也都支持 PDF 直接打开功能,并且上边一般都会有下载、放大缩小等按钮。
现在要求预览 PDF 的时候,不能有下载按钮。pc 端比较好搞,可以使用 #toolbar=0 来拼接到附件链接尾部,这样浏览器就会隐藏掉顶部的操作按钮。