主从表、一对多基础配置
主从表、二、三级明细表高度、分页、排序、合计、单选、超出换行显示
[vue3代码]写在生成的[表.vue]文件中,[vue2代码]写在[表.jsx]文件methods方法中;二选一实现
vue3 代码
const onInit = ($vm) => {
gridRef = $vm;
//主从明细表(不是一对多)
//编辑弹出框打开时默认不加载明细表数据
gridRef.detailOptions.load = false;
//明细表设置单选
gridRef.detailOptions.single = true;
//明细表设置单选
gridRef.detailOptions.single = true;
//明细表表格的高度
gridRef.detailOptions.detailHeight = 300;
//明细表分页、默认排序
gridRef.detailOptions.pagination={
total: 0,
size: 30,//默认分页大小写
sizes:[10,20,30,60],
sortName: "排序字段",
order:"asc/desc"//排序方式
}
//编辑弹出框打开时默认不加载二级表数据
gridRef.details[0].load = false;
//二级表设置单选
gridRef.details[0].single = true;
//三级表设置单选
gridRef.subDetails[0].single = true;
//设置二、三级表格的高度
gridRef.detailHeight = 300;
//设置二、三级表显示在一行上(左右结构显示,默认是上下结构)
gridRef.multiple.horizontal = true;
//其他属性
// multiple:{
// horizontal:false, //一对多水平显示(二级表与三级表是否左右结构显示)
// leftWidth:0,//左边二级表宽度(默认不用设置)
// rightWidth:0//右边三级表宽度(默认不用设置)
// },
//二级表分页、默认排序
gridRef.details[0].pagination = {
total: 0,
size: 30, //默认分页大小写
sizes: [10, 20, 30, 60],
sortName: "排序字段",
order: "asc/desc", //排序方式
};
//三级表分页信息
//二级表设置合计
gridRef.subDetails[0].gridRef.details[0].summary = true; //操作同上
//开启字段合计
gridRef.details[0].columns.forEach((col) => {
if (col.field == "字段") {
col.summary = true;
}
});
//三级表设置合计同上 gridRef.subDetails[0]
//明细表内部超出是否换行显示
gridRef.details[0].textInline = true; //三级表 gridRef.subDetails[0].textInline=true
};
vue2 代码
onInit(){
//主从明细表(不是一对多)
//编辑弹出框打开时默认不加载明细表数据
this.detailOptions.load = false;
//明细表设置单选
this.detailOptions.single = true;
//明细表设置单选
this.detailOptions.single = true;
//明细表表格的高度
this.detailOptions.detailHeight = 300;
//明细表分页、默认排序
this.detailOptions.pagination={
total: 0,
size: 30,//默认分页大小写
sizes:[10,20,30,60],
sortName: "排序字段",
order:"asc/desc"//排序方式
}
//编辑弹出框打开时默认不加载二级表数据
this.details[0].load=false
//二级表设置单选
this.details[0].single=true
//三级表设置单选
this.subDetails[0].single=true
//设置二、三级表格的高度
this.detailHeight=300;
//设置二、三级表显示在一行上(左右结构显示,默认是上下结构)
this.multiple.horizontal=true;
//其他属性
// multiple:{
// horizontal:false, //一对多水平显示(二级表与三级表是否左右结构显示)
// leftWidth:0,//左边二级表宽度(默认不用设置)
// rightWidth:0//右边三级表宽度(默认不用设置)
// },
//二级表分页、默认排序
this.details[0].pagination={
total: 0,
size: 30,//默认分页大小写
sizes:[10,20,30,60],
sortName: "排序字段",
order:"asc/desc"//排序方式
}
//三级表分页信息
this.subDetails[0].//操作同上
//二级表设置合计
this.details[0].summary=true;
//开启字段合计
this.details[0].columns.forEach(col=>{
if(col.field=='字段'){
col.summary=true
}
})
//三级表设置合计同上 this.subDetails[0]
//明细表内部超出是否换行显示
this.details[0].textInline=true;//三级表 this.subDetails[0].textInline=true
}
主从表、二、三级明细表加载(查询)前方法、查询后、行编辑前、行编辑结束方法、动态设置是否可以编辑
[vue3代码]写在生成的[表.vue]文件中,[vue2代码]写在[表.jsx]文件methods方法中;二选一实现
vue3 代码
//生成的vue标签上添加方法
<view-grid :searchDetailBefore="searchDetailBefore" :searchDetailAfter="searchDetailAfter"></view-grid>
//主从表、二、三级表加载(查询)前方法
const searchDetailBefore=(param, table, item)=>{
//判断是哪张表
if(table=='表名'){
//返回的数据:data.rows
}
param.value='xx'//可以设置一些参数,然后重写后台主表的GetDetailPage方法从pageData.value里面取值
//见后台开发文档上的[明细表查询]
return true; // return false不会加载数据
}
//从表、二、三级表加载(查询)后方法(后台接口查询返回的参数)
const searchDetailAfter=(data, table, item)=>{
//判断是哪张表
if(table=='表名'){
//返回的数据:data.rows
}
return true;
}
//动态判断明细表某个字段是否可以编辑
const onInit=($vm)=>{
gridRef=$vm;
// 主从明细表(不是一对多)
gridRef.detailOptions.columns.forEach(col=>{
if(col.field=='字段'){
col.checkEdit=(row, column,index)=>{
return row.要判断字段==值
}
}
})
//一对多
//方式1:根据行的值判断表格字段是否可以编辑
gridRef.details[0].columns.forEach(col=>{
if(col.field=='字段'){
col.checkEdit=(row, column,index)=>{
return row.要判断字段==值
}
}
})
//方式2:二级表点击进入编辑方法
gridRef.details[0].beginEdit=(row, column, index)=>{
//可以判断某些或者校验决定是否可以开启编辑
//也可以根据row.字段值设置其他列是否可以编辑,如:
gridRef.details[0].columns.forEach(col=>{
if(col.field=='字段'){
//根据字段的值设置另一个字段是否可以编辑
col.readonly=row.字段2=='xx';
}
})
return true//return false不会结束编辑
}
//二级表行结束编辑方法
gridRef.details[0].endEditBefore=(row, column, index)=>{
//可以判断某些或者校验决定是否可以结束编辑
return true//return false不会结束编辑
}
//三级表操作同上,this.subDetails[0]
//主从明细表(不是一对多),将上面的gridRef.details[0]改为this.detailOptions
}
vue2 代码
//二、三级表加载(查询)前方法
searchDetailBefore(param, table, item){
//判断是哪张表
if(table=='表名'){
//返回的数据:data.rows
}
param.value='xx'//可以设置一些参数,然后重写后台主表的GetDetailPage方法从pageData.value里面取值
//见后台开发文档上的[明细表查询]
return true; // return false不会加载数据
}
//二、三级表加载(查询)后方法(后台接口查询返回的参数)
searchDetailAfter(data, table, item){
//判断是哪张表
if(table=='表名'){
//返回的数据:data.rows
}
return true;
}
//动态判断明细表某个字段是否可以编辑
onInit(){
// 主从明细表(不是一对多)
this.detailOptions.columns.forEach(col=>{
if(col.field=='字段'){
col.checkEdit=(row, column,index)=>{
return row.要判断字段==值
}
}
})
//一对多
//方式1:根据行的值判断表格字段是否可以编辑
this.details[0].columns.forEach(col=>{
if(col.field=='字段'){
col.checkEdit=(row, column,index)=>{
return row.要判断字段==值
}
}
})
//方式2:二级表点击进入编辑方法
this.details[0].beginEdit=(row, column, index)=>{
//可以判断某些或者校验决定是否可以开启编辑
//也可以根据row.字段值设置其他列是否可以编辑,如:
this.details[0].columns.forEach(col=>{
if(col.field=='字段'){
//根据字段的值设置另一个字段是否可以编辑
col.readonly=row.字段2=='xx';
}
})
return true//return false不会结束编辑
}
//二级表行结束编辑方法
this.details[0].endEditBefore=(row, column, index)=>{
//可以判断某些或者校验决定是否可以结束编辑
return true//return false不会结束编辑
}
//三级表操作同上,this.subDetails[0]
//主从明细表(不是一对多),将上面的this.details[0]改为this.detailOptions
}
二级明细参数
二级表生成的参数格式,在生成的 vue 文件里面可以看具体值
[
{
cnName: "二级表中文名",
table: "二级表名",
columns: [], //二级表格配置
sortName: "", //排序字段
key: "", //主键字段
buttons: [], //二级表的按钮
delKeys: [], //二级表删除的行主键
detail: {
cnName: "三级表中文名",
table: "三级表名",
firstTable: "主表表名",
secondTable: "二级表表名",
secondKey: "二级表主键字段",
sortName: "三级表排序字段",
key: "三级表主键字段",
buttons: [], //三级表的按钮
delKeys: [], //三级表删除的行主键
columns: [], //三级表格配置
},
},
{
...
},
{
...
}
];
主从表、二、三级明细表数据操作
[vue3代码]写在生成的[表.vue]文件中,[vue2代码]写在[表.jsx]文件methods方法中;二选一实现
vue3 代码
//二级表ref对象
gridRef.getTable("表名");
//获取二级表所有行数据
const rows = gridRef.getTable("表名").rowData;
//二级表添加一行数据
const rows = gridRef.getTable("表名").rowData;
rows.push({ a: 1, b: 2 });
//二级表添加多行数据
const rows = gridRef.getTable("表名").rowData;
rows.push(...[{ a: 1, b: 2 }, { 行数据2 }, { 行数据3 }]);
//或者使用unshift添加到第一行
rows.unshift({});
//获取选中行
const rows = gridRef.getTable("表名").getSelected();
//原生element table组件对象获取
const table = gridRef.getTable("表名").$refs.table;
// 三级明细表操作,操作同上二级表;
vue2 代码
//二级表ref对象
this.getTable("表名");
//获取二级表所有行数据
const rows = this.getTable("表名").rowData;
//二级表添加一行数据
const rows = this.getTable("表名").rowData;
rows.push({ a: 1, b: 2 });
//二级表添加多行数据
const rows = this.getTable("表名").rowData;
rows.push(...[{ a: 1, b: 2 }, { 行数据2 }, { 行数据3 }]);
//或者使用unshift添加到第一行
rows.unshift({});
//获取选中行
const rows = this.getTable("表名").getSelected();
//原生element table组件对象获取
const table = this.getTable("表名").$refs.table;
// 三级明细表操作,操作同上二级表;
主从表、二级明细表按钮配置
[vue3代码]写在生成的[表.vue]文件中,[vue2代码]写在[表.jsx]文件methods方法中;二选一实现
vue3 代码
const onInited=()=>{
//主从明细表(不是一对多)
gridRef.detailOptions.buttons.push({
name: "按钮名字", //按钮名称 参照iview buttons设置此属性
hidden: false, //是否隐藏按钮
value: "唯一值,随便填", //
icon: "图标", //https://element.eleme.cn/#/zh-CN/component/icon
onClick: () => {
//触发事件
}
});
//获取二级表的按钮
const buttons = gridRef.details[0].buttons; //0是第几个二级明细表的按钮
//二级表添加一个按钮
buttons.push({
name:"按钮名字",
hidden: false, //是否隐藏按钮
value: "唯一值,随便填", //
icon: "图标",
onClick: () => {
},
});
//在指定位置添加一个按钮
buttons.splice(2, 0, { 按钮配置 });
//隐藏按钮
buttons.forEach((x) => {
if (x.name == "按钮名字") {
x.hidden = true;
}
});
//删除指定位置的按钮
buttons.splice(2, 1);
}
//三级明细表按钮配置 this.details[0]改为this.subDetails[0],其他操作同上二级表;
vue2 代码
onInited(){
//主从明细表(不是一对多)
this.detailOptions.buttons.push({
name: "按钮名字", //按钮名称 参照iview buttons设置此属性
hidden: false, //是否隐藏按钮
value: "唯一值,随便填", //
icon: "图标", //https://element.eleme.cn/#/zh-CN/component/icon
onClick: () => {
//触发事件
}
});
//获取二级表的按钮
const buttons = this.details[0].buttons; //0是第几个二级明细表的按钮
//二级表添加一个按钮
buttons.push({
name:"按钮名字",
hidden: false, //是否隐藏按钮
value: "唯一值,随便填", //
icon: "图标",
onClick: () => {
},
});
//在指定位置添加一个按钮
buttons.splice(2, 0, { 按钮配置 });
//隐藏按钮
buttons.forEach((x) => {
if (x.name == "按钮名字") {
x.hidden = true;
}
});
//删除指定位置的按钮
buttons.splice(2, 1);
//三级明细表按钮配置 this.details[0]改为this.subDetails[0],其他操作同上二级表;
}
二、三级明细添加行默认值
//vue3语法
//生成的vue标签上添加方法
<view-grid :searchDetailBefore="searchDetailBefore" :searchDetailAfter="searchDetailAfter"></view-grid>
const addDetailRow=(table, item, index)=> {//明细表添加行事件
//根据不同的表名返回不同的默认值,
//如果只是一对一明细表,table表名值是undefined
if (table=='表名') {
return {字段:'值'}
}
//其他返回默认空对象
return {};
}
//vue2语法
addDetailRow(table, item, index) {//明细表添加行事件
//根据不同的表名返回不同的默认值,
//如果只是一对一明细表,table表名值是undefined
if (table=='表名') {
return {字段:'值'}
}
//其他返回默认空对象
return {};
}
二、三级明细实时计算联动操作
在前端开发文档上找明细表实时计算、明细表联动示例;
只需要修改查找的对象,将this.detailOptions.columns改为:
//(二级表)this.details[0].columns
//(三级表)this.subDetails[0].columns
//其他操作一样的