Appearance
v2.2.0 不兼容更新
一、多个输入组件改用 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
二、远程下拉 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_user app/admin/model/User.php
user.id
ba_user.id
ba_user_group app/admin/model/UserGroup.php
user_group.id
ba_user_group.id
ba_user_group app/admin/model/user/Group.php
group.id
ba_user_group.id
可总结为:
- 忽略目录结构:模型为
/user/Group.php
直接使用group.id
即可 - 小写下划线分割:模型名为
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 Plus
的baTable.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
即 FormItem
的 input-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 update
后 ThinkPHP
自动更新到了 8.1
,而 BuildAdmin
代码并未随之更新则可能出现此问题。
解决方案一:更新
BuildAdmin
至最新版本后执行 composer update
解决方案二:找到
composer.json
文件,固定 "topthink/framework": "8.0.4"
后重新 composer update
Filesystem::getDirFiles()
方法的默认参数:由获取指定目录的.php
文件改为获取指定目录的全部文件