基于若依前后端分离的el-table设置

本文介绍了如何在Vue应用中使用ElementUI的el-table实现列宽自适应,包括使用`auto-resize`属性、`flexColumnWidth`函数以及列排序和固定功能的实现方法。作者分享了个人在调整列宽上的经验及解决策略。

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

  列宽自适应:自适应最长的标题或内容

借鉴他人,亲测有效!

border 添加表格边框

resizable 属性设置为 true 列宽可调整;表格的每一列都可以通过拖动列头分隔条来调整宽度。

auto-resize="true"用于控制表格的列宽是否自动调整以适应内容。如果将 auto-resize 属性设置为 true,则表格的列宽将根据内容自动调整,以确保所有内容都能完全显示。但我自己使用不是很管用,不知道那里的问题。后来在el-table-column 中使用了:width="flexColumnWidth('标题名称','Name')"就很nice
<el-table v-loading="loading" 
:data="infoList" 
ref="tableRef" 
@selection-change="handleSelectionChange" 
border resizable  
auto-resize="true" 
 >
<el-table-column 
label="标题名称"
align="center" 
prop="Name"                
:width="flexColumnWidth('标题名称','Name')"/>
</el-table>

 

//遍历列的所有内容,获取最宽一列的宽度
getMaxLength (arr) {
  return arr.reduce((acc, item) => {
    if (item) {
      const calcLen = this.getTextWidth(item)
      if (acc < calcLen) {
        acc = calcLen
      }
    }
    return acc
  }, 0)
},

getTextWidth (str) {
  let width = 0
  const html = document.createElement('span')
  html.innerText = str
  html.className = 'getTextWidth'
  document.querySelector('body').appendChild(html)
  width = document.querySelector('.getTextWidth').offsetWidth
  document.querySelector('.getTextWidth').remove()
  return width
},
/**
 * el-table-column 自适应列宽
 * @param prop_label: 表名
 * @param table_data: 表格数据
 */
flexColumnWidth (label, prop) {
// 1.获取该列的所有数据
  const arr = this.infoList.map(x => x[prop])
// 把每列的表头也加进去算
  arr.push(label) 
// 2.计算每列内容最大的宽度 + 表格的内间距(依据实际情况而定)
  return (this.getMaxLength(arr) + 40) + 'px'
}

   列排序:每列的标题右面可以逆序/顺序排序

在el-table-column标签中加入sortable即可

<el-table-column label="主键id" align="center" prop="articleId" 
fixed
sortable
:width="flexColumnWidth('主键id','articleId')"/>

 列固定:左右滑动,列固定

在el-table-column标签中加入fixed即可

<el-table-column label="主键id" align="center" prop="articleId"  
fixed
:width="flexColumnWidth('主键id','articleId')"/>

参考:

【vue】ElementUI el-table自适应列宽实现_el-table 宽度自适应-CSDN博客

### 若依框架前后端分离下的多表联查实现 在若依框架中,通过前后端分离的方式实现多表联查的功能,通常涉及以下几个方面的设计与实现: #### 1. 数据库配置 为了支持多表联查,在数据库层面可能需要进行分库分表或者绑定表的设置。例如,当涉及到分布式数据库场景时,可以通过 ShardingSphere 的 `bindingTables` 配置来指定关联表的关系[^1]。 ```yaml sharding: tables: t_order: actualDataNodes: ds_${0..1}.t_order${0..1} tableStrategy: standard: shardingColumn: order_id preciseAlgorithmClassName: com.example.shardingsphere.PreciseModuloShardingAlgorithm t_order_item: actualDataNodes: ds_${0..1}.t_order_item${0..1} tableStrategy: standard: shardingColumn: item_id preciseAlgorithmClassName: com.example.shardingsphere.PreciseModuloShardingAlgorithm bindingTables: - t_order,t_order_item ``` 上述配置定义了两个分表 `t_order` 和 `t_order_item` 并绑定了它们之间的关系,从而优化跨表查询性能。 --- #### 2. 后端服务层逻辑 在后端部分,使用 MyBatis 或 JPA 进行 SQL 查询的设计。对于复杂的多表联查需求,可以编写动态 SQL 来处理不同条件下的查询逻辑。 ##### 示例代码 (MyBatis 动态 SQL) ```xml <select id="selectOrdersWithItems" resultType="Order"> SELECT o.order_id, o.user_id, i.item_name, i.quantity FROM t_order o LEFT JOIN t_order_item i ON o.order_id = i.order_id WHERE o.status = #{status} AND i.price > #{minPrice} </select> ``` 此示例展示了如何通过左连接 (`LEFT JOIN`) 将订单表和订单详情表联合查询,并筛选符合条件的数据。 --- #### 3. 控制器接口设计 在 Spring Boot 中,控制器负责接收前端请求并调用业务逻辑方法。以下是基于 RESTful API 设计的一个示例接口。 ##### 示例代码 (Spring Controller) ```java @RestController @RequestMapping("/api/orders") public class OrderController { @Autowired private IOrderService orderService; @GetMapping("/list") public ResponseEntity<List<Order>> getOrders(@RequestParam(required = false) String status, @RequestParam(required = false) BigDecimal minPrice) { List<Order> orders = orderService.getOrdersWithItems(status, minPrice); return ResponseEntity.ok(orders); } } ``` 该接口允许客户端传递可选参数 `status` 和 `minPrice`,以便灵活控制查询结果。 --- #### 4. 前端展示 在前端页面上,可以利用表格组件(如 Element UI 或 Ant Design)渲染返回的多表查询数据。以下是一个简单的 Vue.js 表格展示示例。 ##### 示例代码 (Vue.js Table Component) ```vue <template> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="orderId" label="订单ID"></el-table-column> <el-table-column prop="userId" label="用户ID"></el-table-column> <el-table-column prop="itemName" label="商品名称"></el-table-column> <el-table-column prop="quantity" label="数量"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [] }; }, created() { this.fetchData(); }, methods: { fetchData() { fetch('/api/orders/list?status=completed&minPrice=50') .then(response => response.json()) .then(data => (this.tableData = data)); } } }; </script> ``` 以上代码片段实现了从前端向后端发起 GET 请求获取多表联查结果,并将其显示在一个响应式的 HTML 表格中[^3]。 --- #### 5. 完整流程总结 整个过程包括但不限于以下环节: - **数据库侧**:完成必要的分库分表或绑定表配置。 - **后端侧**:构建高效的 SQL 脚本以及对应的 Service 层逻辑。 - **API 接口**:提供标准化的 HTTP 接口供前端调用。 - **前端侧**:解析 JSON 格式的数据并通过可视化工具展现给最终用户。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值