Skip to content

v2.2.0 不兼容更新

TIP

v2.2.0 是尚未发布的开发版本,您可以从 gitee/github 上获取。
您可能还想查阅 框架更新指南完整更新日志

一、多个输入组件改用 null 作为清空值

  • 新版本的 number 、float、time、select、远程下拉单选 已统一改用 null 作为 清空值(以往是 0 或组件默认的 undefined,其中为 0 时在多数情况适用,但使用 null 作为默认值可确保输入框无值时显示 placeholder,且有时还可能希望将 0 作为一个 有效值
  • 当您清空输入框值,并保存修改时,可能收到报错 SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null,只需修改对应的数据表结构,允许字段值为 null 即可
  • time 的模型修改器需要手动调整为兼容 null 值的版本,以避免保存为 null 又回显为 0 的问题,请参考示例
  • float 的模型获取器需要手动调整为兼容 null 值的版本,请参考示例

TIP

  1. 若该字段为必填项,则无需考虑以上问题
  2. 若您希望继续使用 0 作为清空值(或者指定其他清空值),可直接使用 valueOnClear 属性指定,同时需要使用 emptyValues0 识别为一个空值,可参考文档参考示例

二、远程下拉 pk 属性的修改

  • think-orm 更新至 3.0.33 后,以往的 远程下拉组件 初始化时,接口可能报错 Column not found: 1054 Unknown column 'ba_test_aa.id' in 'where clause',在目前尚未发布的 think-orm 版本中已经对此进行兼容,但是该写法官方并不推荐。

  • 请修改远程下拉组件的 pk 属性,由原本的 完整表名.主键 修改为 数据模型类名称.主键 即可,比如:

    表名模型路径及名称pk 属性值pk 属性值
    ba_userapp/admin/model/User.phpuser.idba_user.id
    ba_user_groupapp/admin/model/UserGroup.phpuser_group.idba_user_group.id
    ba_user_groupapp/admin/model/user/Group.phpgroup.idba_user_group.id

    可总结为:

    1. 忽略目录结构:模型为 /user/Group.php 直接使用 group.id 即可
    2. 小写下划线分割:模型名为 UserGroup.php 使用 user_group.id

TIP

think-orm 版本降低至 3.0.28,或者升级至 3.0.33 以上 还可临时解决此问题

三、删除已废弃属性

删除已废弃的 baTable.table.column.click

可使用 el-table 组件本身自带的 @cell-click 或单元格自定义渲染代替,请参考文档

删除已废弃的 baTable.table.column.renderFormatter
  • 可使用兼容 Element PlusbaTable.table.column.formatter 代替
  • 它们的参数列表略有差异:
ts
renderFormatter: (row: TableRow, field: TableColumn, value: any, column: TableColumnCtx<TableRow>, index: number) => any
formatter: (row: TableRow, column: TableColumnCtx<TableRow>, cellValue: any, index: number) => any
删除已废弃的上传组件 props.attr

FormIteminput-attr.attr,可使用 input-attr 本身代替

vue
<template>
    <div>
        <!-- 原来的 -->
        <FormItem
            :input-attr="{
                attr: {
                    disabled: true,
                },
            }"
            :label="t('test.file')"
            type="file"
            v-model="state.file"
        />

        <!-- 修改为 -->
        <FormItem
            :input-attr="{
                disabled: true,
            }"
            :label="t('test.file')"
            type="file"
            v-model="state.file"
        />

        <!-- 原来的 -->
        <baUpload :attr="{ disabled: true }" type="image" v-model="state.image" />

        <!-- 修改为 -->
        <baUpload :disabled="true" type="image" v-model="state.image" />
    </div>
</template>

<script setup lang="ts">
import { reactive } from 'vue'
import FormItem from '/@/components/formItem/index.vue'
import baUpload from '/@/components/baInput/components/baUpload.vue'

const state = reactive({
    image: '',
    file: '',
})
</script>

四、其他细节

1. 后台保存时报错 记录未找到方法参数错误

原因:由于历史版本未固定 thinkphp 版本号,一旦执行 composer updateThinkPHP 自动更新到了 8.1,而 BuildAdmin 代码并未随之更新则可能出现此问题。

解决方案一:更新 BuildAdmin 至最新版本后执行 composer update
解决方案二:找到 composer.json 文件,固定 "topthink/framework": "8.0.4" 后重新 composer update
  1. Filesystem::getDirFiles() 方法的默认参数:由获取指定目录的 .php 文件改为获取指定目录的全部文件