element-plus el-table-column列的显隐
时间: 2023-08-18 11:04:45 浏览: 444
要实现 `el-table-column` 列的显隐,可以通过设置 `el-table-column` 的 `prop` 属性来控制该列的渲染。具体实现步骤如下:
1. 在 `el-table-column` 中设置 `prop` 属性,该属性值为要渲染的数据项的属性名。例如:`<el-table-column prop="name" label="姓名"></el-table-column>`。
2. 在 `data` 中定义一个变量,用于控制该列的显隐。例如:`showNameColumn: true`。
3. 在 `el-table-column` 中设置 `v-if` 属性,根据 `showNameColumn` 变量的值来控制该列的渲染。例如:`<el-table-column v-if="showNameColumn" prop="name" label="姓名"></el-table-column>`。
4. 在需要控制列的显示或隐藏的方法中,修改 `showNameColumn` 的值,例如:`this.showNameColumn = false`。
这样就可以通过控制变量的值来实现 `el-table-column` 列的显隐。
相关问题
vue3 element-plus-dialog
### Vue3 中使用 Element Plus 对话框组件
在 Vue3 和 Element Plus 组件库中,`ElDialog` 是用于创建对话框的一个重要组件。为了实现 `ElDialog` 的显示与隐藏功能,通常会利用 props 来传递属性并借助自定义事件来更新父级的状态。
#### 基本用法
下面是一个简单的例子展示如何声明和控制一个基本的 ElDialog:
```html
<template>
<el-button @click="dialogVisible = true">点击打开 Dialog</el-button>
<!-- 使用 v-model 实现双向数据绑定 -->
<el-dialog v-model="dialogVisible" title="提示">
<p>这是一段信息。</p>
</el-dialog>
</template>
<script setup>
import { ref } from 'vue'
// 定义响应式的布尔变量用来控制弹窗显隐
const dialogVisible = ref(false)
</script>
```
这段代码展示了怎样通过设置 `v-model` 属性到本地状态变量上从而达到自动管理可见性的效果[^1]。
#### 封装成可复用组件
如果希望进一步提高代码重用性和模块化程度,则可以考虑将上述逻辑封装进一个新的子组件内,并提供必要的接口供外部调用者操作该模态窗口的行为。
假设我们有一个名为 `CustomDialog.vue` 的文件如下所示:
```html
<!-- CustomDialog.vue -->
<template>
<el-dialog :visible.sync="innerVisible" @close="$emit('update:visible', false)">
<slot></slot>
</el-dialog>
</template>
<script>
export default {
name: "CustomDialog",
props: ["visible"],
computed: {
innerVisible: {
get() {
return this.visible;
},
set(value) {
this.$emit("update:visible", value);
}
}
}
};
</script>
```
在这个定制化的版本里,不仅实现了基于 prop 的单向数据流模式下的父子通信机制(`props -> emit`),同时也支持了更简洁直观的语法糖形式即 `v-bind:v-model` 或者直接简写的 `v-model` 方式来进行视图层面上的数据同步处理。
#### 高级特性
除了基础的功能外,Element Plus 还提供了许多其他有用的配置项以及插槽(slot),允许开发者根据实际需求灵活调整样式布局或是添加额外的内容区域等高级选项。比如可以通过指定不同的 slot 名字来自由安排头部(header), 主体(body) 及底部(footer) 的具体内容;也可以利用 append-to-body 参数改变默认挂载位置等等。
<u-modal :ref="`senPi`" :size="`huge`" :is-heading-slot-empty="true"> <template #title> <u-text :text="`报价详情`"></u-text> </template> <template #body> <u-linear-layout direction="vertical" wrap> <u-form :layout="`inline`" key="form_13"> <u-form-item :layout="`center`"> <template #label> <u-text :text="`供应商id`"></u-text> </template> <u-select :clearable="true" :placeholder="`请选择供应商id`" :dataSource="__select_20_handleDataSourceLoad()" :pageSize="50" :textField="`supplier.name`" :valueField="`supplier.name`" :pagination="true" :value.sync="filter2.supplierId" :emptyValueIsNull="true" key="select_20" > <template #option="current"></template> <template #renderFooter></template> </u-select> </u-form-item> <u-form-item :layout="`center`"> <template #label> <u-text :text="`最终供应商`"></u-text> </template> <u-select :clearable="true" :value.sync="filter2.finalSupplier" :placeholder="`请选择最终供应商`" :dataSource="$utils['EnumToList']({ concept: 'TypeAnnotation', typeKind: 'reference', typeNamespace: 'app.enums', typeName: 'Is_Final_Supplier', inferred: false, ruleMap: {}, typeArguments: [] })" :emptyValueIsNull="true" key="select_22" > <template #option="current"></template> <template #renderFooter></template> </u-select> </u-form-item> <u-form-item :layout="`center`" :labelSize="`auto`"> <u-button :color="`primary`" :text="`查 询`" @click="onQueryClick($event)"></u-button> </u-form-item> </u-form> <!-- 树形表格,支持折叠子表 --> <el-table :data="treeData" row-key="id" :tree-props="{ children: 'quotedPrices', hasChildren: 'hasChildren' }" border style="--cw-style-font-size: 10px; font-size: 10px; --table-view-th-padding: 1px; --table-view-td-padding: 1px; --table-cell-padding: 0px" > <!-- 展开列 --> <el-table-column type="expand" label="展开" width="50" :expandable="(row) => Array.isArray(row.quotedPrices) && row.quotedPrices.length > 0" :expanded="(row) => row.isExpanded" @expand-change="handleExpandChange" ></el-table-column> <el-table-column prop="materialApplyId" label="物料申请单id" width="150"></el-table-column> <el-table-column prop="supplierId" label="供应商id" width="150"></el-table-column> <el-table-column prop="finalSupplier" label="最终供应商" width="150"></el-table-column> <!-- 子表格:报价详情 --> <el-table-column label="报价详情" width="300"> <template #default="scope"> <el-table v-if="Array.isArray(scope.row.quotedPrices) && scope.row.quotedPrices.length > 0" :data="scope.row.quotedPrices" style="width: 100%; font-size: 10px;" border > <el-table-column prop="times" label="报价次数" width="100"></el-table-column> <el-table-column prop="price" label="报价价格" width="100"></el-table-column> <el-table-column prop="lastPrice" label="是否最终报价" width="100"></el-table-column> </el-table> </template> </el-table-column> </el-table> </u-linear-layout> </template> </u-modal>
<think>好的,我现在需要仔细分析用户提供的这段Vue组件代码,理解它的结构和功能,然后向用户解释清楚。首先,我会先通读整个代码,了解这是一个模态框组件,内部包含表单和表格,用于展示报价详情。
首先,注意到用户使用了`<u-modal>`组件,这个组件引用了`senPi`,尺寸设置为huge,并且标题部分使用了插槽。标题是“报价详情”,通过`<u-text>`组件显示。接下来,模态框的主体部分包含一个垂直布局的线性布局,里面有一个表单和树形表格。
表单部分有三个表单项:供应商ID、最终供应商和查询按钮。供应商ID使用了`u-select`组件,数据源来自`__select_20_handleDataSourceLoad()`方法,可能是一个异步加载的下拉选项,分页显示,每页50条。这里需要注意`textField`和`valueField`都绑定到`supplier.name`,可能是一个对象数组,显示名称并提交名称作为值。不过通常情况下,valueField应该使用唯一的ID,比如`supplier.id`,这里可能需要确认是否有误。
第二个表单项是最终供应商,同样使用`u-select`,数据源通过`$utils['EnumToList']`生成,引用了枚举类型`app.enums.Is_Final_Supplier`,说明这是一个枚举值的选择,可能包括“是”和“否”或其他状态。这里的数据绑定到`filter2.finalSupplier`,用于过滤条件。
查询按钮绑定了`@click`事件,触发`onQueryClick`方法,应该会根据表单中的筛选条件获取数据。
接下来是树形表格部分,使用了`el-table`,数据源是`treeData`,支持行展开显示子表格。每行数据通过`row-key="id"`唯一标识,树形结构配置指定了子节点字段为`quotedPrices`,判断是否有子节点的字段是`hasChildren`。展开列的类型是`expand`,当行的`quotedPrices`数组有元素时显示展开按钮,并且通过`expanded`属性控制是否展开,触发`handleExpandChange`事件。
表格列包括物料申请单ID、供应商ID、最终供应商,以及一个嵌套的报价详情子表格。子表格在父表格的“报价详情”列中显示,数据来自父行的`quotedPrices`数组,包含报价次数、报价价格和是否最终报价。
在样式方面,注意到内联样式设置了较小的字体和紧凑的内边距,可能是为了在有限空间内显示更多内容。同时,子表格也继承了类似的紧凑样式。
潜在问题点:供应商ID的下拉选择可能绑定的是`supplier.name`作为valueField,这可能导致选择后的值存储的是名称而非ID,是否应该使用`supplier.id`?需要根据业务逻辑确认。此外,树形表格的数据结构是否正确,比如`quotedPrices`是否为数组,以及`hasChildren`是否正确设置,可能会影响展开功能。另外,事件处理函数`onQueryClick`和`handleExpandChange`是否在组件中有定义,需要确保逻辑正确。
总结,这个组件是一个包含筛选条件和树形展示的报价详情模态框,用户可以通过供应商和最终供应商状态过滤数据,展开行查看详细的报价历史记录。在实现时需要注意数据绑定的正确性和事件处理的逻辑。</think>这个代码片段是一个基于Vue框架实现的模态框组件,主要用于展示供应商报价的详细信息。以下分步骤解析其核心结构和功能:
---
### **一、模态框基础结构**
```html
<u-modal :ref="`senPi`" :size="`huge`" :is-heading-slot-empty="true">
<template #title>...</template>
<template #body>...</template>
</u-modal>
```
- **功能**: 定义一个全屏大弹窗(`huge`尺寸)
- **关键属性**:
- `ref="senPi"`: 组件引用标识,便于父组件调用
- `is-heading-slot-empty="true"`: 隐藏默认标题栏样式
---
### **二、标题区域**
```html
<template #title>
<u-text :text="`报价详情`"></u-text>
</template>
```
- **作用**: 显示固定标题"报价详情"
---
### **三、主体内容区域**
#### **1. 筛选表单**
```html
<u-form :layout="`inline`" key="form_13">
<!-- 供应商ID下拉 -->
<u-select
:dataSource="__select_20_handleDataSourceLoad()"
:textField="`supplier.name`"
:valueField="`supplier.name`"
:value.sync="filter2.supplierId"
></u-select>
<!-- 最终供应商枚举选择 -->
<u-select
:dataSource="$utils['EnumToList']({...app.enums.Is_Final_Supplier...})"
:value.sync="filter2.finalSupplier"
></u-select>
<!-- 查询按钮 -->
<u-button @click="onQueryClick"></u-button>
</u-form>
```
- **功能点**:
- **供应商ID筛选**: 通过异步加载供应商数据(`__select_20_handleDataSourceLoad()`)
- **最终供应商状态**: 绑定枚举类型`Is_Final_Supplier`(如:是/否)
- **查询逻辑**: 点击按钮触发`onQueryClick`方法,使用`filter2`对象中的条件过滤数据
---
#### **2. 树形表格展示**
```html
<el-table
:data="treeData"
row-key="id"
:tree-props="{ children: 'quotedPrices', hasChildren: 'hasChildren' }"
>
<!-- 展开子表格 -->
<el-table-column type="expand">
<el-table :data="scope.row.quotedPrices">
<el-table-column prop="times" label="报价次数"/>
<el-table-column prop="price" label="报价价格"/>
<el-table-column prop="lastPrice" label="是否最终报价"/>
</el-table>
</el-table-column>
<!-- 父级信息 -->
<el-table-column prop="materialApplyId" label="物料申请单id"/>
<el-table-column prop="supplierId" label="供应商id"/>
<el-table-column prop="finalSupplier" label="最终供应商"/>
</el-table>
```
- **数据结构**:
- 父级数据包含`materialApplyId`等字段
- 子级数据通过`quotedPrices`数组嵌套,记录每次报价详情
- **交互特性**:
- 展开箭头控制子表格显隐
- `hasChildren`字段决定是否显示展开按钮
- **样式优化**:
- 紧凑布局(`font-size: 10px`)
- 内边距微调确保信息密度
---
### **四、潜在注意事项**
1. **数据绑定问题**:
- 供应商ID选择器的`valueField`绑定的是`supplier.name`,可能导致提交值为名称而非ID,建议检查是否需要改为`supplier.id`
2. **枚举类型映射**:
- `Is_Final_Supplier`枚举需确保在服务端正确定义,否则下拉选项可能显示异常
3. **性能优化**:
- 树形表格嵌套可能导致渲染性能下降,建议对大数据量做虚拟滚动或分页处理
---
### **五、典型使用场景**
1. 采购人员查看不同供应商的历史报价记录
2. 对比同一物料申请单下多个供应商的报价详情
3. 标记并筛选最终合作供应商
通过这个组件,用户可以高效完成供应商报价的筛选、展开查看明细等操作,适合复杂供应链管理场景。
阅读全文
相关推荐















