jeecgboot-vue3 BasicTable 搜索表单的小技巧

引言

在使用 BasicTable 时,开启表单搜索,若我们需要更为灵活的下拉框,比如查询的默认值绑定变量、级联选择等,使用 slot插槽 会是一种解决方法。

使用

默认值绑定变量

searchFormSchema中,添加slot

js 复制代码
...
{
  label: '排课计划',
  field: 'sessionId',
  component: 'JInput',
  colProps: { span: 6 },
  slot: 'sessionId',
},
...

BasicTable 内部引入该插槽(BasicTable内部的搜索表单需要添加form-前缀

js 复制代码
...
<template #form-sessionId="{model, field}">
  <a-select
    v-model:value="sessionId"
    :options="sessionList"
    @change="handleChange(model, field)"
    show-search
  />
</template>
...

定义handleChange逻辑,即可绑定默认值到变量上。

js 复制代码
function handleChange (data, field) {
  data[field] = sessionId.value;
}

本质上来说是对浅拷贝的一种应用:修改data对象本身。

另外,如果你期望避免BasicTable在未获取到默认值前的冗余加载,可以

js 复制代码
const {prefixCls, tableContext} = useListPage({
    ...
    beforeFetch: (params) => {
     params.sessionId = sessionId.value
    },
    immediate: false,
    ...
})

在加载到变量值之后,执行reload即可

因为handleChange需要点开选择框选择才能触发。beforeFetch内部函数的处理,是为了首次加载到变量值后,在未触发handleChange的情况下,依然可以正常将查询参数绑定。

级联选择

若涉及到多个选择框的级联,我们也可以使用如上方法绑定的变量,按条件渲染不同的option甚至不同的组件

例如:

js 复制代码
...
<template #form-params="{ model, field }">
  <span v-if="modelName==='A'">
    <SelectA :params="model[field]" @updateParam="(val) => updateParam(model, field, val)"/>
  </span>
  <span v-else-if="modelName==='B'">
    <SelectB :params="model[field]" @updateParam="(val) => updateParam(model, field, val)"/>
  </span>
  <span v-else-if="modelName==='C'">
    <SelectC :params="model[field]" @updateParam="(val) => updateParam(model, field, val)"/>
  </span>
  <span v-else>
    <a-input placeholder="请输入" v-model:value="model[field]"/>
  </span>
</template>
...

对应的updateParam

js 复制代码
function updateParam(model, field, val) {
  model[field] = val;
}

参考

  1. BasicTable 表格 - JeecgBoot 文档中心
  2. 表单控件用法示例 - JeecgBoot 文档中心
相关推荐
openKaka_18 分钟前
createRoot 到底创建了什么:FiberRootNode 和 HostRootFiber 的初始化过程
前端·javascript·react.js
习明然1 小时前
UniApp开发体验感受总结
前端·uni-app
刀法如飞2 小时前
Claude Code Skills 推荐:2026年最值得安装的10个AI技能
前端·后端·ai编程
阿豪只会阿巴2 小时前
【没事学点啥】TurboBlog轻量级个人博客项目——项目介绍
javascript·python·django·html
Lee川2 小时前
面试手写 KeepAlive:React 组件缓存的实现原理
前端·react.js·面试
墨染天姬2 小时前
【AI】cursor提示词小技巧
前端·数据库·人工智能
烛阴2 小时前
TEngine 入门系列(一):TEngine 是什么 & 为什么选它
前端·unity3d
转转技术团队3 小时前
WebNN:让 AI 推理在浏览器中“零距离”运行
前端
刀法如飞3 小时前
TypeScript 数组去重的 20 种实现方式,哪一种你还不知道?
前端·javascript·算法
IT_陈寒3 小时前
Vite热更新失效?你可能漏了这个小细节
前端·人工智能·后端