|
@ -111,7 +111,16 @@ |
|
|
</template> |
|
|
</template> |
|
|
<template #body="scope"> |
|
|
<template #body="scope"> |
|
|
<template v-if="tree"> |
|
|
<template v-if="tree"> |
|
|
<TreeGridRow :columns-map="tableColumnsMap" :row="scope.row" :cols="scope.cols" :grid-props="props" :row-key="rowKey_" :grid="instance"></TreeGridRow> |
|
|
<TreeGridRow |
|
|
|
|
|
:columns-map="tableColumnsMap" |
|
|
|
|
|
:row="scope.row" |
|
|
|
|
|
:cols="scope.cols" |
|
|
|
|
|
:grid-props="props" |
|
|
|
|
|
:row-key="rowKey_" |
|
|
|
|
|
:grid="instance" |
|
|
|
|
|
:grid-row-click="rowClick" |
|
|
|
|
|
:grid-row-db-click="rowDbClick" |
|
|
|
|
|
></TreeGridRow> |
|
|
</template> |
|
|
</template> |
|
|
<q-tr |
|
|
<q-tr |
|
|
v-else |
|
|
v-else |
|
@ -287,6 +296,7 @@ const props = defineProps({ |
|
|
foreignKey: { type: String, default: 'parent' }, // 数据外键(常规表格模式时,该字段暂时无用,将来可用作多个表格的数据关系字段。树形表格模式时,该字段为构建树数据的关系字段) |
|
|
foreignKey: { type: String, default: 'parent' }, // 数据外键(常规表格模式时,该字段暂时无用,将来可用作多个表格的数据关系字段。树形表格模式时,该字段为构建树数据的关系字段) |
|
|
orderBy: { type: String, default: 'order' }, // 拖拽排序时传给后端修改的字段名称 |
|
|
orderBy: { type: String, default: 'order' }, // 拖拽排序时传给后端修改的字段名称 |
|
|
refreshData: { type: Boolean, default: false }, // 新增、删除、修改成功后是否刷新数据列表,默认不刷新但是新增修改后台必须返回对应的行数据对象,删除则必须返回删除的记录集primaryKey集合。 |
|
|
refreshData: { type: Boolean, default: false }, // 新增、删除、修改成功后是否刷新数据列表,默认不刷新但是新增修改后台必须返回对应的行数据对象,删除则必须返回删除的记录集primaryKey集合。 |
|
|
|
|
|
dbClickOperation: { type: String, default: 'view' }, // 默认的双击操作:默认为查看操作,支持:view、edit、clone、expand |
|
|
sortBy: { |
|
|
sortBy: { |
|
|
// 默认排序字段,示例:['userName', '-lastModifyDate'],其中“-”开头表示倒序。 |
|
|
// 默认排序字段,示例:['userName', '-lastModifyDate'],其中“-”开头表示倒序。 |
|
|
type: Array, |
|
|
type: Array, |
|
@ -716,17 +726,7 @@ const buttonObj = reactive({ |
|
|
return false; |
|
|
return false; |
|
|
}, |
|
|
}, |
|
|
click: (args) => { |
|
|
click: (args) => { |
|
|
if (!args.selected) { |
|
|
edit(args.selected); |
|
|
NotifyManager.warn(t('action.edit.tip')); |
|
|
|
|
|
} else { |
|
|
|
|
|
dialogRef.value.show(); |
|
|
|
|
|
dialog.dialogTitle = t('action.edit'); |
|
|
|
|
|
nextTick(() => { |
|
|
|
|
|
dialogFormRef.value.setStatus(PageStatusEnum.编辑); |
|
|
|
|
|
dialogFormRef.value.setData(args.selected); |
|
|
|
|
|
emit('afterEditorOpen', args.selected); |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
clone: { |
|
|
clone: { |
|
@ -741,18 +741,7 @@ const buttonObj = reactive({ |
|
|
return false; |
|
|
return false; |
|
|
}, |
|
|
}, |
|
|
click: (args) => { |
|
|
click: (args) => { |
|
|
const selected = args.selected; |
|
|
clone(args.selected); |
|
|
if (!selected) { |
|
|
|
|
|
NotifyManager.warn(t('action.copy.tip')); |
|
|
|
|
|
} else { |
|
|
|
|
|
selected[props.primaryKey] = undefined; |
|
|
|
|
|
dialogRef.value.show(); |
|
|
|
|
|
dialog.dialogTitle = t('action.copy'); |
|
|
|
|
|
nextTick(() => { |
|
|
|
|
|
dialogFormRef.value.setStatus('clone'); |
|
|
|
|
|
dialogFormRef.value.setData(selected); |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
remove: { |
|
|
remove: { |
|
@ -1400,6 +1389,12 @@ const rowClick = (evt: any, row: any, index: any) => { |
|
|
const rowDbClick = (evt, row, index) => { |
|
|
const rowDbClick = (evt, row, index) => { |
|
|
if (props.onRowDbClick) { |
|
|
if (props.onRowDbClick) { |
|
|
emit('rowDbClick', evt, row, index); |
|
|
emit('rowDbClick', evt, row, index); |
|
|
|
|
|
} else if (!Tools.isEmpty(row) && props.dbClickOperation === buttonObj.edit.name) { |
|
|
|
|
|
edit(row); |
|
|
|
|
|
} else if (!Tools.isEmpty(row) && props.dbClickOperation === buttonObj.clone.name) { |
|
|
|
|
|
clone(row); |
|
|
|
|
|
} else if (!Tools.isEmpty(row) && props.dbClickOperation === buttonObj.expand.name) { |
|
|
|
|
|
row['expand'] = Tools.isEmpty(row['expand']) ? true : !row['expand']; |
|
|
} else { |
|
|
} else { |
|
|
view(); |
|
|
view(); |
|
|
} |
|
|
} |
|
@ -1573,7 +1568,11 @@ const onRequest = async (ops: any) => { |
|
|
setRowDataExtraProperty(table.rows); |
|
|
setRowDataExtraProperty(table.rows); |
|
|
stickyHeaderColumn(100); |
|
|
stickyHeaderColumn(100); |
|
|
emit('afterRequestData'); |
|
|
emit('afterRequestData'); |
|
|
table.treeExpand = false; |
|
|
// table.treeExpand = false; |
|
|
|
|
|
// 判断数据加载后是否默认展开,是的话直接展开树形表格 |
|
|
|
|
|
if (table.treeExpand) { |
|
|
|
|
|
expandFun(table.rows, false); |
|
|
|
|
|
} |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
@ -2652,6 +2651,33 @@ const getCascadeParents = (propertyName: string) => { |
|
|
return result; |
|
|
return result; |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const edit = (selected) => { |
|
|
|
|
|
if (!selected) { |
|
|
|
|
|
NotifyManager.warn(t('action.edit.tip')); |
|
|
|
|
|
} else { |
|
|
|
|
|
dialogRef.value.show(); |
|
|
|
|
|
dialog.dialogTitle = t('action.edit'); |
|
|
|
|
|
nextTick(() => { |
|
|
|
|
|
dialogFormRef.value.setStatus(PageStatusEnum.编辑); |
|
|
|
|
|
dialogFormRef.value.setData(selected); |
|
|
|
|
|
emit('afterEditorOpen', selected); |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
const clone = (selected) => { |
|
|
|
|
|
if (!selected) { |
|
|
|
|
|
NotifyManager.warn(t('action.copy.tip')); |
|
|
|
|
|
} else { |
|
|
|
|
|
selected[props.primaryKey] = undefined; |
|
|
|
|
|
dialogRef.value.show(); |
|
|
|
|
|
dialog.dialogTitle = t('action.copy'); |
|
|
|
|
|
nextTick(() => { |
|
|
|
|
|
dialogFormRef.value.setStatus('clone'); |
|
|
|
|
|
dialogFormRef.value.setData(selected); |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
const getElement = () => { |
|
|
const getElement = () => { |
|
|
return tableRef?.value?.$el; |
|
|
return tableRef?.value?.$el; |
|
|
}; |
|
|
}; |
|
@ -2686,6 +2712,7 @@ defineExpose({ |
|
|
cleanSelected, |
|
|
cleanSelected, |
|
|
cleanTicked, |
|
|
cleanTicked, |
|
|
view, |
|
|
view, |
|
|
|
|
|
edit, |
|
|
getElement, |
|
|
getElement, |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|