无题
LiSirnpcp系统开发
vue2 + EUI2.x
ruoyi框架
学到的东西
1.vue结合原生JS绑定事件可以按照下面这样写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| renderContent(h, node) { if (node.data.imgurl != "") { return ( <div> <div><i class="el-icon-delete" onClick={(event)=>{ //先阻止冒泡 event.stopPropagation() this.handleDelete(node) }}></i></div> <el-link href={node.data.imgurl} target="_blank"> <img src={node.data.imgurl} width="80" height="60"/> </el-link> <div style="font-size:12px;"><span>{node.data.label}</span></div> </div> ) } else { return ( <div> <div style="font-size:30px;width:80px;height:60px;"><i className="el-icon-picture-outline"></i></div> <div style="font-size:12px;"><span>{node.data.label}</span></div> </div> ) } },
|
在上述写法中,onClikc事件被写成了一个对象
onclick = {()=>{ 函数体内容 }},这里还有一个细节,为了防止事件冒泡,先阻止了事件冒泡,随后在执行删除逻辑。实际如遇到可以按照这样去在vue中绑定原生事件。
目前搭建bom中存在的问题
- 原件在被冻结之前可以进行修改(包括删除)
- 某原件被其他零件借用,该原件(对于其他零件来说被称为借用件)可以删除。
在项目中我干了什么?
修改表格展示
爆炸图展示
表格渲染
今天在渲染表格时,遇到的问题是,明明函数写的都是scope.row针对单行的,结果一渲染就是全部表格都有数据,究其原因,原来是我们每次更新表格的数据都更新的是整个数据源,而为了实现针对单行数据更新,这里我们用到了只更新单行数据这样的方式。
之前会全部渲染是因为在原始代码中,我们直接修改了整个表格的数据源。让我解释一下区别:
原来的逻辑:
1 2 3 4 5 6
| async fetchTestTypes(row) { const response = await getTestTypes(params); this.currentTestTypes = response.rows[0].list; }
|
现在的逻辑:
1 2 3 4 5
| async fetchTestTypes(row) { const response = await getTestTypes(params); row.list = response.rows[0].list; }
|
区别在于:
- 之前:所有行共享同一个测试类型列表(
currentTestTypes),导致只要有一行选择了选项,所有行都会尝试渲染数据
- 现在:每行都有自己独立的
list 数据,只有当前行选择了选项才会获取和显示数据
这就像是:
- 之前是在教室里用大喇叭广播(所有人都听到)
- 现在是给每个学生发一张纸条(只有特定的人收到信息)
这就是为什么之前会全部渲染,而现在只渲染选择了选项的行。
单元格合并
相同表头单元格合并
1 2 3 4 5 6 7 8 9 10 11 12
| handerMethod({ row, column, rowIndex, columnIndex }) { if (row[0].level === 1) { row[0].colSpan = 0 row[1].colSpan = 2 if (columnIndex === 0) { return { display: 'none' } } } },
|
相同数据单元格合并
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| mergeSub({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { const currentValue = row[column.property] const preRow = this.entryEntity[rowIndex - 1] const preValue = preRow ? preRow[column.property] : null if (currentValue === preValue) { return { rowspan: 0, colspan: 0 } } else { let rowspan = 1 for (let i = rowIndex + 1; i < this.entryEntity.length; i++) { const nextRow = this.entryEntity[i] const nextValue = nextRow[column.property] if (nextValue === currentValue) { rowspan++ } else { break } } return { rowspan, colspan: 1 } } } },
|
最终效果:
