- 1.项目介绍
- 2.新手入门教程
- 3.开发环境准备
- 14.快速开始
- 16.上线发布
- 微服务开发
- 28.代码生成器
- 38.Online导入表过滤规则
- 39.后端开发技巧
- 40.常用问题汇总
- 41.自定义注解用法
- 42.Spring缓存注解@Cacheable
- 43.字典翻译注解@Dict
- 44.数据权限注解@PermissionData
- 45.日志记录注解@AutoLog
- 46.菜单路由配置
- 47.菜单配置说明
- 48.带参数路由菜单
- 49.路由菜单规则
- 50.菜单快速SQL
- 51.聚合路由菜单
- 52.数据快照功能如何用?
- 53.快速创建module模块
- 54.旧:新建maven模块项目?
- 55.查询过滤器用法
- 56.系统日志怎么插入?
- 57.自定义sql分页实现
- 58.针对敏感数据,加密传递方案
- Redis 如何使用?
- 60.事务如何使用?
- 61.动态数据源使用
- 62.定时任务如何开发?
- 63.系统通知接口
- 64.消息推送接口
- 65.JeecgBoot连接达梦数据库
- 66.接口敏感数据安全
- 67.批量插入效率建议
- 68.短信接口配置-阿里大鱼短信
- 69.自定义注解限制重复提交
- 70.邮箱配置文档
- 71.公文发文收文
- 72.WPS配置文档
- 73.公文发文收文使用手册
- 74.WPS集成代码解读
- 75.积木报表设计器数据集使用
- 76.父子编码使用说明
- 77.我的文档安全配置
- 78.文档预览
- 79.在线多数据源
- 80.系统文件上传
- 81.统一文件上传规则
- 82.MinIO配置
- 83.阿里云OSS配置
- 84.UI前端开发技巧
- 85.如何更改默认主题
- 86.Form表单开发特殊性
- 87.Icon图标扩展方法
- 88.vuex使用详解
- 89.vue路由带参总结
- 90.全局配置文件
- 91.列表自定义列实现
- 92.国际化改造方案
- 93.常用命令
- 94.报表开发
- 95.报表开发技术点
- 96.自定义报表组件
- 97.源码解读
- 98.自定义组件
- 99.前端技巧
- 100.components包下文件描述
- 101.JDictSelectTag字典标签
- 102.duplicateCheck表单字段重复校验通用JS
- 103.JVxeTable行编辑
- 104.组件配置文档
- 105.自定义组件
- 106.封装自定义组件
- 107.自定义组件增强
- 108.使用示例
- 109.常见问题解答
- 110.JEditableTable帮助文档
- 111.JMultiSelectTag多选组件
- 112.JPopup弹窗选择组件
- 113.JSearchSelectTag字典表的搜索组件
- 114.JSelectDepart部门选择组件
- 115.JSelectMultiUser用户多选组件
- 116.JSelectUserByDep根据部门选择用户
- 117.JTreeDict分类字典树形下拉组件
- 118.JTreeSelect树形下拉框-异步加载
- JInput 特殊查询组件
- JCron 帮助文档
- JCategorySelect 帮助文档
- 122.JUpload上传组件
- 123.JImageUpload图片上传组件
- 124.JSuperQuery高级查询组件
- 125.JAreaLinkage省市县三级联动
- 126.JEllipsis超长截取显示
- JDate 日期组件
- 128.JCheckbox组件
- 129.JCodeEditor组件
- 130.JSelectMultiple多选下拉组件
- 131.JTreeSelect树形下拉组件
- 132.JImportModal组件
- 133.JAsyncTreeList异步树表格
- 134.JFormContainer使用文档
- 135.JMarkdownEditor使用文档
- 136.前端开发坑-一定要注意
- 137.按需加载方案
- 138.按需加载@减小打包
- 139.JeecgBoot实战-按需加载方案
- 140.表格的换行与不换行
- 141.旧:表格的换行与不换行
- 142.主子表子表下拉框、时间框弹框被遮挡优化
- 143.前端依赖包package.json
- 144.如何实现多列表单
- 145.前端字典缓存用法
- 146.自定义首页
- 147.系统权限用法
- 148.JAVA请求权限控制
- 149.页面按钮权限用法
- 150.列表列字段权限控制
- 151.表单权限
- 152.显示隐藏控制
- 153.禁用控制用法一
- 154.禁用控制用法二
- 155.子表行字段的禁用和隐藏控制
- 156.数据权限
- 157.数据权限规则篇
- 158.数据权限用法篇
- 159.编码对接数据权限-未用查询过滤器
- 160.权限配置自定义SQL
- 161.二级部门权限管理
- 162.填值规则-编码生成
- 163.校验规则
- 164.Online表单
- 165.Online菜单配置
- 166.Online开发初体验
- 167.Online表单配置
- 168.Online表单一对多表单配置
- 169.Online表单删除说明
- 170.Online表单标准字段说明
- 171.Online树列表表单配置
- 172.Online表单配置参数说明
- 导入导出值转换器
- 174.Online表单填值规则配置
- 175.Online表单排版
- 176.Online树列表表单配置-个性化
- 177.Online表单控件
- 178.下拉框@多选框@单选框
- 179.下拉多选
- 180.下拉搜索
- 181.Popup控件
- 182.富文本控件
- 183.时间控件
- 184.用户选择器
- 185.部门选择器
- 186.自定义树控件
- 187.分类字典树控件
- 188.Online之popup使用
- 189.下拉联动组件
- 190.markdown编辑器
- 191.省市区组件
- 192.字段排列顺序调整
- 193.字段显示隐藏控制
- 194.字段校验规则使用
- 195.控件配置Href
- 196.控件默认值表达式
- 197.开关控件
- 20200914
- 199.字段权限配置与授权
- 200.按钮权限配置与授权
- 201.数据权限配置与授权
- 202.Online权限配置
- 203.列表字段权限-显示与隐藏
- 204.表单字段权限-隐藏和禁用
- 205.列表按钮权限-隐藏
- 206.列表数据权限
- 207.树形表单数据权限配置
- 208.二次开发-在线增强
- 209.online基础篇-JS增强-列表
- 210.online基础篇-JS增强-表单渲染
- API
- 212.列表
- 213.表单
- 实战示例
- 215.列表自定义按钮
- 改变控件的值
- 217.修改控件值【从表】
- 218.修改控件值【单-主-表】
- 219.online基础篇-SQL增强
- 220.online基础篇-自定义按钮
- 221.Online自定义按钮-表达式用法
- 222.online基础篇-java增强
- Online Java 增强 导入
- Online Java 增强 导出
- Online Java 增强 查询
- 226.online升级篇-表单API接口
- 227.online升级篇-扩展控件类型
- 228.online表单JS增强实现下拉联动
- 229.edu
- 230.Online表单专题课程
- 231.备注
- 232.Online表单权限配置按钮-列-表单字段的显示或隐藏
- 233.列表权限
- 234.列表字段的显示或隐藏
- 235.列表操作按钮的显示或隐藏
- 236.列表自定义按钮的显示或隐藏
- 237.表单权限
- 238.表单字段的显示或隐藏
- 239.表单字段的禁用或可编辑
- 240.Online导出支持图片
- 241.Online表单视图功能
- 242.JVXETable和JEditableTable切换方式
- 243.通过字段href实现3张表的关联
- 244.从数据库导入表单配置排除表名
- 245.Online报表
- 246.Online图表
- 247.Online图表配置手册
- 248.列表数据显示规则
- 249.组合报表的配置方式
- 250.如何配置菜单
- 251.常见问题
- 252.JS增强
- 253.参数说明
- 254.Online报表
- 255.online报表-使用步骤
- 256.online报表-动态参数
- 257.如何配置报表菜单
- 258.Online报表权限配置
- 259.Online报表系统变量应用
- 260.参数说明
- 261.Online报表排序
- 262.字段href
- 263.字典配置
- 264.高级实战技巧
- 265.HBuilderX打包APP
- 266.1.Build-JeecgBoot项目
- 打包APP
- 268.HBuilder打包APP手机端安装配置教程
- 269.Websocket业务对接
- 270.WebSocket的集成
- 271.SAAS多租户用法
- 272.CAS单点登录
- 273.1.CAS单点登录服务端准备
- 274.2.JeecgBoot后端对接CAS步骤
- 275.3.JeecgBoot前端项目对接CAS步骤
- 276.单点登录流程图
- 277.表单设计器
- 278.介绍
- 279.基础操作
- 280.配置字段属性
- 281.配置表单属性
- 282.配置到菜单
- 283.移动表单设计
- 284.表单组件
- 285.基础字段
- 286.单选、多选、下拉框
- 287.日期、时间选择器
- 288.高级组件
- 289.文本
- 290.按钮
- 291.分隔符
- 292.文件上传和图片上传
- 293.布局组件
- 294.Tabs
- 295.卡片
- 296.栅格布局
- 297.JEECG字段
- 298.设计子表
- 299.表字典-POPUP-下拉
- 300.用户组件、部门组件
- 301.高级操作
- 302.JS增强
- 303.全局JS增强
- 304.按钮JS增强
- 305.JS增强示例
- 306.CSS增强
- 307.表单增强
- 308.自定义接收URL
- 309.外部JS-CSS增强
- 310.控件取值
- 311.默认值表达式
- 312.远程API取值
- 313.填值规则
- 314.数据绑定映射
- 315.业务场景
- 316.远端选项数据
- 317.权限配置
- 318.表单字段权限
- 319.列表数据权限
- 320.列表按钮权限
- 321.角色授权
- 322.路由配置
- 323.表单对外接口
- 324.二次开发
- 325.自定义新控件
- 326.上传配置
- 327.旧:基础操作手册
- 328.旧:高级操作手册
- 329.AutoPOI-Excel工具
- 330.快速文档
- 331.单表数据导出多表头示例
- 332.单表数据多表头导入注意
- 333.导出自定义选择列导出
- 334.@excel注解使用
- 335.excel根据模板导出
- 336.一对多导出needMerge
- 337.第三方登录
- 338.企业微信配置
- 339.钉钉配置
- 340.企业微信集成方案
- 341.APP开发
- 342.后台推送消息给移动端
- 343.小结
- 344.编码规范
- 345.代码规范
- 346.建表规范
- 347.个人备忘录
- 348.小白实战课程
- 349.任务节点直接关联多节点分支
- 350.使用排他网管的分支
- 351.并行网管分支
- 352.任务节点人员配置表达式使用
- 353.会签属性循环集合表达式使用
- 354.流程监听
- 355.节点配置地址
- 356.多数据源使用
- 357.自定义开发流程小结
- 358.登录时不选择部门不能进入主页面
- 359.docker安装中文字体
- Cloud System API
- 361.jvxe升级-LOWCOD-812
- 363.jeecg-uniapp开发
- 364.开发环境搭建
- 365.项目简介
- 366.打包项目
- 367.APP打包
- 368.微信小程序打包
- 369.H5打包
- 370.小程序发布
- 371.API接口配置
- 372.uniapp推送
- 373.后台定时unipush推送配置
- 374.FQA
110.JEditableTable帮助文档
参数配置
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
columns | array | ✔️ | 表格列的配置描述,具体项见下表 |
dataSource | array | ✔️ | 表格数据 |
loading | boolean | 是否正在加载,加载中不会显示任何行,默认false | |
actionButton | boolean | 是否显示操作按钮,包括"新增"、"删除",默认false | |
rowNumber | boolean | 是否显示行号,默认false | |
rowSelection | boolean | 是否可选择行,默认false | |
dragSort | boolean | 是否可拖动排序,默认false,详见拖拽排序章节 | |
dragSortKey | string | 拖动排序存储的Key,无需定义在columns内也能在getValues()时获取到值,默认orderNum | |
maxHeight | number | 表格内容区域最大高度(px),默认400 | |
disabledRows | object | 设定禁用的行,被禁用的行无法被选择和编辑,配置方法可以查看示例 | |
disabled | boolean | 是否禁用所有行,默认false | |
alwaysEdit | boolean | 是否一直显示编辑框,如果为false则只有点击的时候才出现输入框 |
columns 参数详解
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
title | string | ✔️ | 表格列头显示的问题 |
key | string | ✔️ | 列数据在数据项中对应的 key,必须是唯一的 |
type | string | ✔️ | 表单的类型,可以通过JEditableTableUtil.FormTypes 赋值 |
width | string | 列的宽度,可以是百分比,也可以是px 或其他单位,建议设置为百分比,且每一列的宽度加起来不应超过100%,否则可能会不能达到预期的效果。留空会自动计算百分比 | |
placeholder | string | 表单预期值的提示信息,可以使用${...} 变量替换文本(详见${...} 变量使用方式 ) | |
defaultValue | string | 默认值,在新增一行时生效 | |
validateRules | array | 表单验证规则,配置方式见validateRules 配置规则 | |
props | object | 设置添加给表单元素的自定义属性,例如:props:{title: 'show title'} | |
disabled | boolean | 是否禁用当前列,默认false |
当 type=inputNumber 时所需的参数
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
statistics | boolean | 是否是统计列,设置了之后会自动统计当前行的所有数据。效果: |
当 type=checkbox 时所需的参数
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
defaultChecked | boolean | 默认值是否选中 | |
customValue | array | 自定义值,checkbox需要的是boolean值,如果数据是其他值(例如'Y' or 'N' )时,就会导致错误,所以提供了该属性进行转换,例:customValue: ['Y','N'] ,会将true 转换为'Y' ,false 转换为'N' ,反之亦然 |
当 type=select 时所需的参数
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
options | array | ✔️ | 下拉选项列表,详见下表 |
allowInput | boolean | 是否允许用户输入内容,并创建新的内容 | |
allowSearch | boolean | 是否允许用户搜索内容(仅搜索,不创建) | |
dictCode | String | 数据字典Code,若options也有值,则拼接在options后面 |
注意事项
allowInput
和allowSearch
不能同时使用,若同时使用,则allowSearch
的优先级更高- 若
options
的某一项设置了disabled:true
,则搜索不到该项
options 所需参数
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
text | string | ✔️ | 显示标题 |
value | string | ✔️ | 真实值 |
disabled | boolean | ✔️ | 是否禁用当前选项 |
当 type=upload 时所需的参数
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
action | string | ✔️ | 上传文件路径 |
token | boolean | 上传的时候是否传递token | |
responseName | string | ✔️ | 若要从上传成功后从response中取出返回的文件名,那么这里填后台返回的包含文件名的字段名 |
当 type=popup 时所需的参数
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
popupCode | string | ✔️ | online报表编码 |
field | string | ✔️ | online报表查询出来的列名,多个以逗号隔开 |
orgFields | string | ✔️ | online报表查询出来的列名,多个以逗号隔开 |
destFields | string | ✔️ | 回填到表单的列名,多个以逗号隔开 |
当 type=slot 时所需的参数
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
slotName | string | ✔️ | slot的名称 |
validateRules 配置规则
validateRules
需要的是一个数组,数组里每项都是一个规则,规则是object类型,规则的各个参数如下
required
是否必填,可选值为true
orfalse
unique
唯一校验,不可重复,可选值为true
orfalse
pattern
正则表达式验证,只有成功匹配该正则的值才能成功通过验证handler
自定义函数校验,使用方法请见示例五,注:设置了handler将不会走validateRules里handler以下的校验了,所以建议将handler放到validateRules的最下面message
当验证未通过时显示的提示文本,可以使用${...}
变量替换文本(详见${...} 变量使用方式
)- 配置示例请看示例二
事件
事件名 | 触发时机 | 参数 |
---|---|---|
added | 当添加行操作完成后触发 | |
deleted | 当删除行操作完成后触发(批量删除操作只会触发一次) | deleteIds 被逻辑删除的id |
selectRowChange | 当行被选中或取消选中时触发 | selectedRowIds 被选中行的id |
valueChange | 当数据发生改变的时候触发的事件 | { type, row, column, value, target } Event对象 |
方法
关于方法的如何调用的问题,请在FAQ中查看方法如何调用
initialize
用于初始化表格(清空表格)
参数:
无返回值:
无
resetScrollTop
重置滚动条Top位置
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
top | number | 新top位置,留空则滚动到上次记录的位置,用于解决切换tab选项卡时导致白屏以及自动将滚动条滚动到顶部的问题 |
返回值:
无
add
主动添加行,默认情况下,当用户的滚动条已经在底部的时候,会将滚动条固定在底部,即添加后无需用户手动滚动,而会自动滚动到底部
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
num | number | 添加几行,默认为1 | |
forceScrollToBottom | boolean | 是否在添加后无论用户的滚动条在什么位置都强制滚动到底部,默认为false |
返回值:
无
removeRows
主动删除一行或多行
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
id | string 或 array | ✔️ | 被删除行的id。如果要删除一个,可以直接传id,如果要删除多个,需要将多个id封装成一个数组传入 |
返回值:
无
removeSelectedRows
主动删除被选中的行
参数:
无返回值:
无
getValues
用于获取表格里所有表单的值,可进行表单验证
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
callback | function | ✔️ | 获取值的回调方法,会传入error 和values 两个参数。error :未通过验证的数量,当等于0 时代表验证通过;values :获取的值(即使未通过验证该字段也有数据) |
validate | boolean | 是否进行表单验证,默认为true ,设为false 则代表忽略表单验证 | |
rowIds | array | 默认返回所有行的数据,如果传入了rowIds ,那么就会只返回与该rowIds 相匹配的数据,如果没有匹配的数据,就会返回空数组 |
返回值:
无
getValuesSync
getValues
的同步版,会直接将获取到的数据返回
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
options | object | 选项,详见下方所需参数 |
options
所需参数
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
validate | boolean | 是否进行表单验证,默认为true ,设为false 则代表忽略表单验证 | |
rowIds | array | 默认返回所有行的数据,如果传入了rowIds ,那么就会只返回与该rowIds 相匹配的数据,如果没有匹配的数据,就会返回空数组 |
返回值:
objecterror
未通过验证的数量,当等于0
时代表验证通过values
获取的值(即使未通过验证该字段也有数据)
使用示例
let { error, values } = this.$refs.editableTable.getValuesSync({ validate: true, rowIds: ['rowId1', 'rowId2'] })
if (error === 0) {
console.log('表单验证通过,数据:', values);
} else {
console.log('未通过表单验证,数据:', values);
}
getValuesPromise
getValues
的promise版,会在resolve
中传入获取到的值,会在reject
中传入失败原因,例如VALIDATE_NO_PASSED
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
validate | boolean | 同getValues 的validate 参数 | |
rowIds | array | 默认返回所有行的数据,如果传入了rowIds ,那么就会只返回与该rowIds 相匹配的数据,如果没有匹配的数据,就会返回空数组 |
返回值:
Promise
getDeleteIds
用于获取被逻辑删除的行的id,返回一个数组,用户可将该数组传入后台,并进行批量删除
参数:
无返回值:
array
getAll
获取所有的数据,包括values、deleteIds 会在resolve
中传入获取到的值:{values, deleteIds}
会在reject
中传入失败原因,例如VALIDATE_NO_PASSED
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
validate | boolean | 同getValues 的validate 参数 |
返回值:
Promise
setValues
主动设置表格中某行某列的值
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
values | array | 传入一个数组,数组中的每项都是一行的新值,具体见下面的示例 |
返回值:
无示例:
setValues([
{
rowKey: id1, // 行的id
values: { // 在这里 values 中的 name 是你 columns 中配置的 key
'name': 'zhangsan',
'age': '20'
}
},
{
rowKey: id2,
values: {
'name': 'lisi',
'age': '23'
}
}
])
clearSelection
主动清空选择的行
参数:
无返回值:
无
内置插槽
插槽名 | 说明 |
---|---|
buttonBefore | 在操作按钮的前面插入插槽,不受actionButton 属性的影响 |
buttonAfter | 在操作按钮的后面插入插槽,不受actionButton 属性的影响 |
${...} 变量使用方式
在placeholder
和message
这两个属性中可以使用${...}
变量来替换文本 在示例二中,配置了title
为名称
的一列,而placeholder
配置成了请输入${title}
,那么最终显示效果为请输入名称
这就是${...}
变量的使用方式,在${}
中可以使用的变量有title
、key
、defaultValue
这三个属性的值
JEditableTableUtil 使用说明
在之前配置columns
时提到过JEditableTableUtil
这个工具类,那么如果想要知道详细的使用说明就请看这里
export 的常量
FormTypes
这是配置columns.type
时用到的常量值,其中包括
normal
默认,直接显示值,不渲染表单input
显示输入框inputNumber
显示数字输入框checkbox
显示多选框select
显示选择器(下拉框)date
日期选择器datetime
日期时间选择器upload
上传组件(文件域)slot
自定义插槽hidden
隐藏列,被隐藏的列可以正常获取赋予的原始值
VALIDATE_NO_PASSED
在判断表单验证是否通过时使用,如果 reject 的值 === VALIDATE_NO_PASSED 则代表表单验证未通过,你可以做相应的其他处理,反之则可能是发生了报错,可以使用 console.error
输出
封装的方法
validateTables
当你的页面中存在多个JEditableTable实例的时候,如果要获取每个实例的值、判断表单验证是否通过,就会让代码变得极其冗余、繁琐,于是我们就将该操作封装成了一个函数供你调用,它可以同时获取并验证多个JEditableTable实例的值,只有当所有实例的表单验证都通过后才会返回值,否则将会告诉你具体哪个实例没有通过验证。具体使用方法请看下面的示例
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
cases | array | 传入一个数组,数组中的每项都是一个JEditableTable的实例 |
返回值:
Promise示例:
import { validateTables, VALIDATE_NO_PASSED } from '@/utils/JEditableTableUtil'
// 封装cases
let cases = []
cases.push(this.$refs.editableTable1)
cases.push(this.$refs.editableTable2)
cases.push(this.$refs.editableTable3)
cases.push(this.$refs.editableTable4)
cases.push(this.$refs.editableTable5)
// 同时验证并获取多个实例的值
validateTables(cases).then((all) => {
// all 是一个数组,每项都对应传入cases的下标,包含values和deleteIds
console.log('所有实例的值:', all)
}).catch((e = {}) => {
// 判断表单验证是否未通过
if (e.error === VALIDATE_NO_PASSED) {
console.log('未通过验证的实例下标:', e.index)
} else {
console.error('发生异常:', e)
}
})
拖拽排序
若要启用拖拽排序,只需将dragSort
参数置为true
即可。 开启后,在列表的最左侧会出现一个方块,如果用鼠标左键按住不动拖动的话,就可以移动整行,如果单击一下小方块的话,就会出现一个菜单,如下图所示。
若要持久化排序顺序的话,需要传递dragSortKey
参数,即你数据库中记录排序顺序的字段。该参数也可不传,不传默认为orderNum
即使你columns
里没有定义这个字段,也可以正常获取到值,并存到数据库里。 但当给dataSouce
赋值的时候,并不会自动处理顺序,因为这样系统性能开销太大了,所以建议查询的时候用SQL语句排好序再返回给组件使用。
FAQ
方法如何调用?
在示例一中,设定了一个 ref="editableTable"
的属性,那么在vue中就可以使用this.$refs.editableTable
获取到该表格的实例,并调取其中的方法。 假如我要调取initialize
方法,就可以这么写:this.$refs.editableTable.initialize()
如何获取表单的值?
使用getValue
方法进行获取,详见示例三
如何进行表单验证?
在获取值的时候默认会进行表单验证操作,用户在输入的时候也会对正在输入的表单进行验证,只要配置好规则就可以了
如何添加或删除一行?
该功能已封装到组件中,你只需要将 actionButton
设置为 true
即可,当然你也可以在代码中主动调用新增方法或修改,具体见上方的方法介绍。
为什么使用了ATab组件后,切换选项卡会导致白屏或滚动条位置会归零?
在ATab组件中确实会导致滚动条位置归零,且不会触发onscroll
方法,所以无法动态加载行,导致白屏的问题出现。 解决方法是在ATab组件的onChange
事件触发时执行实例提供的resetScrollTop()
方法即可,但是需要注意的是:代码主动改变ATab的activeKey
不会触发onChange
事件,还需要你手动调用下。
示例
<template>
<a-tabs @change="handleChangeTab">
<a-tab-pane tab="表格1" :forceRender="true" key="1">
<j-editable-table
ref="editableTable1"
:loading="tab1.loading"
:columns="tab1.columns"
:dataSource="tab1.dataSource"/>
</a-tab-pane>
<a-tab-pane tab="表格2" :forceRender="true" key="2">
<j-editable-table
ref="editableTable2"
:loading="tab2.loading"
:columns="tab2.columns"
:dataSource="tab2.dataSource"/>
</a-tab-pane>
</a-tabs>
</template>
/*--- 忽略部分代码片段 ---*/
methods: {
/** 切换tab选项卡的时候重置editableTable的滚动条状态 */
handleChangeTab(key) {
this.$refs[`editableTable${key}`].resetScrollTop()
}
}
/*--- 忽略部分代码片段 ---*/
slot(自定义插槽)如何使用?
代码示例请看:示例四(slot))
示例一
<j-editable-table
ref="editableTable"
:loading="loading"
:columns="columns"
:dataSource="dataSource"
:rowNumber="true"
:rowSelection="true"
:actionButton="true"
style="margin-top: 8px;"
@selectRowChange="handleSelectRowChange"/>
示例二
import { FormTypes } from '@/utils/JEditableTableUtil'
/*--- 忽略部分代码片断 ---*/
columns: [
{
title: '名称',
key: 'name',
type: FormTypes.input,
placeholder: '请输入${title}',
defaultValue: '称名',
// 表单验证规则
validateRules: [
{
required: true, // 必填
message: '${title}不能为空' // 提示的文本
},
{
pattern: /^[a-z|A-Z][a-z|A-Z\d_-]{0,}$/, // 正则
message: '${title}必须以字母开头,可包含数字、下划线、横杠'
}
]
},
{
title: '年龄',
key: 'age',
type: FormTypes.inputNumber,
placeholder: '请输入${title}',
defaultValue: 18,
validateRules: [{required: true, message: '${title}不能为空'}]
}
]
/*--- 忽略部分代码片断 ---*/
示例三
// 获取被逻辑删除的字段id
let deleteIds = this.$refs.editableTable.getDeleteIds();
// 获取所有表单的值,并进行验证
this.$refs.editableTable.getValues((error, values) => {
// 错误数 = 0 则代表验证通过
if (error === 0) {
this.$message.success('验证通过')
// 将通过后的数组提交到后台或自行进行其他处理
console.log(deleteIds, values)
} else {
this.$message.error('验证未通过')
}
})
示例四(slot)
<template>
<j-editable-table :columns="columns" :dataSource="dataSource">
<!-- 定义插槽 -->
<!-- 这种定义插槽的写法是vue推荐的新版写法(https://cn.vuejs.org/v2/guide/components-slots.html#具名插槽),旧版已被废弃的写法不再支持 -->
<!-- 若webstorm这样写报错,请看这篇文章:https://blog.csdn.net/lxq_9532/article/details/81870651 -->
<template v-slot:action="props">
<a @click="handleDelete(props)">删除</a>
</template>
</j-editable-table>
</template>
<script>
import { FormTypes } from '@/utils/JEditableTableUtil'
import JEditableTable from '@/components/jeecg/JEditableTable'
export default {
components: { JEditableTable },
data() {
return {
columns: [
// ...
{
title: '操作',
key: 'action',
width: '8%',
type: FormTypes.slot, // 定义该列为 自定义插值列
slotName: 'action' // slot 的名称,对应 v-slot 冒号后面和等号前面的内容
}
]
}
},
methods: {
/* a 标签的点击事件,删除当前选中的行 */
handleDelete(props) {
// 参数解释
// props.index :当前行的下标
// props.text :当前值,可能是defaultValue定义的值,也可能是从dataSource中取出的值
// props.rowId :当前选中行的id,如果是新增行则是临时id
// props.column :当前操作的列
// props.getValue :这是一个function,执行后可以获取当前行的所有值(禁止在template中使用)
// 例:const value = props.getValue()
// props.target :触发当前事件的实例,可直接调用该实例内的方法(禁止在template中使用)
// 例:target.add()
// 使用实例:删除当前操作的行
let { rowId, target } = props
target.removeRows(rowId)
}
}
}
</script>
示例五
// 该示例是自定义函数校验
columns: [
{
title: '字段名称',
key: 'dbFieldName',
type: FormTypes.input,
defaultValue: '',
validateRules: [
{
// 自定义函数校验 handler
handler(type, value, row, column, callback, target) {
// type 触发校验的类型(input、change、blur)
// value 当前校验的值
// callback(flag, message) 方法必须执行且只能执行一次
// flag = 是否通过了校验,不填写或者填写 null 代表不进行任何操作
// message = 提示的消息,默认使用配置的 message
// target 行编辑的实例对象
if (type === 'blur') {
if (value === 'abc') {
callback(false, '${title}不能是abc') // false = 未通过,可以跟自定义提示
return
}
let { values } = target.getValuesSync({ validate: false })
let count = 0
for (let val of values) {
if (val['dbFieldName'] === value) {
if (++count >= 2) {
callback(false, '${title}不能重复')
return
}
}
}
callback(true) // true = 通过验证
} else {
callback() // 不填写或者填写 null 代表不进行任何操作
}
},
message: '${title}默认提示'
}
]
},
]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论