diff --git a/CHANGELOG.md b/CHANGELOG.md index b65af2fe439f3eda578f8547f4046de89fa3c52b..f2cba6e6eb04015a4016e923a4c117cb3d27dfdb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ ## [Unreleased] +### Added + +- 新增支持树表格部件注入属性、表格列注入属性 +- 新增支持树表格增强部件注入属性、树节点注入属性 + ## [0.7.41-alpha.25] - 2025-09-11 ### Added diff --git a/src/control/tree-grid-ex/tree-grid-ex.tsx b/src/control/tree-grid-ex/tree-grid-ex.tsx index 6adc4ed8b12386f587cb30ba890dc460902b2c4d..ceab01fd764e40c7e6994aced4fb6b50b4076fa7 100644 --- a/src/control/tree-grid-ex/tree-grid-ex.tsx +++ b/src/control/tree-grid-ex/tree-grid-ex.tsx @@ -17,17 +17,39 @@ import { resolveComponent, VNodeArrayChildren, } from 'vue'; -import { IDETreeColumn, IDETreeGridEx } from '@ibiz/model-core'; +import { IDETreeColumn, IDETreeNode, IDETreeGridEx } from '@ibiz/model-core'; import { ITreeNodeData, IControlProvider, TreeGridExController, + ScriptFactory, } from '@ibiz-template/runtime'; import { RuntimeError } from '@ibiz-template/core'; import { createUUID } from 'qx-util'; import { useRowEditPopover } from './use-row-edit-popover'; import './tree-grid-ex.scss'; +/** + * @description 绘制成员的attrs + * @param {IDETreeGridEx} model + * @param {IParams} params + * @returns {*} {IParams} + */ +function renderAttrs( + model: IDETreeNode | IDETreeGridEx, + params: IParams, +): IParams { + const attrs: IParams = {}; + model.controlAttributes?.forEach(item => { + if (item.attrName && item.attrValue) { + attrs[item.attrName!] = ScriptFactory.execSingleLine(item.attrValue!, { + ...params, + }); + } + }); + return attrs; +} + export const TreeGridExControl = defineComponent({ name: 'IBizTreeGridExControl', props: { @@ -110,6 +132,7 @@ export const TreeGridExControl = defineComponent({ id: node._id, _uuid: node._uuid, hasChildren: !node._leaf, + _deData: node._deData, }; if (!noChild && !node._leaf && node._children !== undefined) { temp.children = toElNodes(node._children); @@ -317,10 +340,16 @@ export const TreeGridExControl = defineComponent({ const comp = resolveComponent( this.c.providers[columnName!].component, ); + const nodeData = rowState.data; + const nodeModel = this.c.getNodeModel(nodeData._nodeId)!; return h(comp, { controller: columnC, row: rowState, key: rowState.data._uuid + columnName, + attrs: renderAttrs(nodeModel, { + ...this.c.getEventArgs(), + data: rowState.data, + }), }); } return null; @@ -346,6 +375,9 @@ export const TreeGridExControl = defineComponent({ onExpandChange={this.onExpandChange} row-class-name={this.handleRowClassName} load={this.loadData} + {...renderAttrs(this.c.model, { + ...this.c.getEventArgs(), + })} > {{ empty: this.renderNoData, diff --git a/src/control/tree-grid/tree-grid.tsx b/src/control/tree-grid/tree-grid.tsx index d6fc2a617894a1fe94f0e36bfee11a01418f3de2..5d948976935e3905156eaf5ac9acf78577e50a18 100644 --- a/src/control/tree-grid/tree-grid.tsx +++ b/src/control/tree-grid/tree-grid.tsx @@ -16,7 +16,11 @@ import { } from 'vue'; import { recursiveIterate } from '@ibiz-template/core'; import { IDEGridColumn, IDETreeGrid } from '@ibiz/model-core'; -import { IControlProvider, TreeGridController } from '@ibiz-template/runtime'; +import { + IControlProvider, + ScriptFactory, + TreeGridController, +} from '@ibiz-template/runtime'; import { useRowEditPopover } from '../grid/row-edit-popover/use-row-edit-popover'; import { IGridProps, @@ -27,6 +31,24 @@ import { } from '../grid/grid'; import { renderChildColumn } from '../grid/grid/grid'; +/** + * @description 绘制树表格的注入属性,表格列注入属性由表格中计算绘制 + * @param {IDETreeGrid} model + * @param {IParams} params + * @returns {*} {IParams} + */ +function renderAttrs(model: IDETreeGrid, params: IParams): IParams { + const attrs: IParams = {}; + model.controlAttributes?.forEach(item => { + if (item.attrName && item.attrValue) { + attrs[item.attrName!] = ScriptFactory.execSingleLine(item.attrValue!, { + ...params, + }); + } + }); + return attrs; +} + export const TreeGridControl = defineComponent({ name: 'IBizTreeGridControl', props: { @@ -337,6 +359,9 @@ export const TreeGridControl = defineComponent({ this.c.state.showTreeGrid ? state.treeGirdData : this.tableData } {...this.$attrs} + {...renderAttrs(this.c.model, { + ...this.c.getEventArgs(), + })} > {{ empty: this.renderNoData,