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 文档中心
相关推荐
陈随易5 小时前
在 VSCode 里,把项目一键部署到服务器
前端·后端·程序员
Highcharts.js5 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
To_OC5 小时前
我被 useState 坑了两次之后,终于把它的脾气摸透了
前端·javascript·react.js
鱼樱前端5 小时前
我用 Claude Code 后,编码效率翻 3 倍。但更值钱的是别的。
前端·后端·ai编程
_lucas6 小时前
给知识库网站接入AI问答
前端·ai编程·全栈
前端糕手7 小时前
前端面试题大全:JavaScript + Vue3 + React + TypeScript + 工程化 + 性能优化
前端
我不叫武8 小时前
一个用 Rust 写的离线编码查询桌面工具
前端
Web4Browser9 小时前
指纹浏览器 API 自动化怎么接:启动 Profile、获取 CDP 端点并连接自动化框架
前端·网络·typescript·自动化
Patrick_Wilson9 小时前
从 React 到 Flutter:写给前端的一张跨端知识地图
前端·flutter·react.js
颜酱9 小时前
06 | 把 meta_config 同步进 MySQL(生成阶段)
前端·人工智能·后端