diff --git a/packages/ui-vue/components/data-grid/src/components/data/data-area.component.tsx b/packages/ui-vue/components/data-grid/src/components/data/data-area.component.tsx
index fa1b5a1d28344692f610ec7139e305c51c801da5..fa748bc755855f2b4aedaba6ddcafca3b5bb8c8b 100644
--- a/packages/ui-vue/components/data-grid/src/components/data/data-area.component.tsx
+++ b/packages/ui-vue/components/data-grid/src/components/data/data-area.component.tsx
@@ -293,9 +293,10 @@ export default function (
>
{
- isCellTemplateValidVNode ?
- context.slots.cellTemplate?.({ cell, row: visualDataRow }) :
- renderDefaultCellContent(cell, visualDataRow)
+ cell.column!.columnTemplate ? cell.column!.columnTemplate(cell, visualDataRow) :
+ isCellTemplateValidVNode ?
+ context.slots.cellTemplate?.({ cell, row: visualDataRow }) :
+ renderDefaultCellContent(cell, visualDataRow)
}
diff --git a/packages/ui-vue/components/data-grid/src/data-grid.component.tsx b/packages/ui-vue/components/data-grid/src/data-grid.component.tsx
index 7ee03d20df0bf6f3ef6c1a463e2049c6f4653429..a13989f836f838d85df559568cbe0b8a05cecbcb 100644
--- a/packages/ui-vue/components/data-grid/src/data-grid.component.tsx
+++ b/packages/ui-vue/components/data-grid/src/data-grid.component.tsx
@@ -207,7 +207,7 @@ export default defineComponent({
const { renderDisableMask } = getDisableMask();
- const { renderDataGridSummery } = getSummary(props as DataViewOptions, dataView, useColumnComposition);
+ const { renderDataGridSummary } = getSummary(props as DataViewOptions, dataView, useColumnComposition);
const { renderHorizontalScrollbar } = getHorizontalScrollbar(props as DataViewOptions, gridContentRef, useVirtualScrollComposition);
@@ -505,7 +505,7 @@ export default defineComponent({
{gridContentRef.value && renderHorizontalScrollbar()}
{gridContentRef.value && renderVerticalScrollbar()}
- {gridContentRef.value && renderDataGridSummery()}
+ {gridContentRef.value && renderDataGridSummary()}
{shouldRenderPagination.value && renderDataGridPagination()}
{renderGridColumnResizeOverlay()}
{isDisabled.value && renderDisableMask()}
diff --git a/packages/ui-vue/components/data-grid/src/data-grid.props.ts b/packages/ui-vue/components/data-grid/src/data-grid.props.ts
index b3e59195b3a0d479865659a1698d56fe8c2a978b..deda7da70505040c194cf234ed10b5c489402bac 100644
--- a/packages/ui-vue/components/data-grid/src/data-grid.props.ts
+++ b/packages/ui-vue/components/data-grid/src/data-grid.props.ts
@@ -83,6 +83,8 @@ export interface DataGridColumn {
filter?: string;
showSetting?: boolean;
showEllipsis?: boolean;
+ /** 列模板 */
+ columnTemplate?: (cell: VisualDataCell, visualDataRow: VisualData) => VNode;
/** inner boolean formatter */
formatter?:
((cell: VisualDataCell, visualDataRow: VisualData) => VNode | string) | object;
diff --git a/packages/ui-vue/components/data-grid/src/designer/data-grid-column.design.component.tsx b/packages/ui-vue/components/data-grid/src/designer/data-grid-column.design.component.tsx
index 92382d84ccd7b2158b3c61f98b365b874eb54a0e..be35bfb4daf2361f269eb0d16ebd44b2c2c2b74f 100644
--- a/packages/ui-vue/components/data-grid/src/designer/data-grid-column.design.component.tsx
+++ b/packages/ui-vue/components/data-grid/src/designer/data-grid-column.design.component.tsx
@@ -4,6 +4,7 @@ import { DesignerHostService, DesignerItemContext } from '../../../designer-canv
import { useDesignerComponent } from '../../../designer-canvas/src/composition/function/use-designer-component';
import { useDesignerRulesForDataGridColumn } from './use-column-rules';
import { useFormBindingResolverDesign } from '../../../dynamic-form/src/composition/form-binding-resolver-design';
+import { DataGridDesignProps } from './data-grid-design.props';
export default defineComponent({
name: 'FDataGridColumnDesign',
@@ -13,7 +14,9 @@ export default defineComponent({
const columnRef = ref();
const designerHostService = inject('designer-host-service') as DesignerHostService;
const designItemContext = inject('design-item-context') as DesignerItemContext;
- const designerRulesComposition = useDesignerRulesForDataGridColumn(designItemContext, designerHostService);
+ const dataGridContext: { dataGridProps: DataGridDesignProps } = inject('data-grid-context')!;
+ const designerRulesComposition = useDesignerRulesForDataGridColumn(designItemContext, designerHostService,
+ dataGridContext);
const componentInstance = useDesignerComponent(columnRef, designItemContext, designerRulesComposition);
onMounted(() => {
columnRef.value.componentInstance = componentInstance;
diff --git a/packages/ui-vue/components/data-grid/src/designer/data-grid.design.component.tsx b/packages/ui-vue/components/data-grid/src/designer/data-grid.design.component.tsx
index bda59a8f1537390cf6daec9481b7f54e6df0827d..7dc168bdd721392ab5779744c832caff782b47ee 100644
--- a/packages/ui-vue/components/data-grid/src/designer/data-grid.design.component.tsx
+++ b/packages/ui-vue/components/data-grid/src/designer/data-grid.design.component.tsx
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import { DataGridDesignProps, dataGridDesignProps } from './data-grid-design.props';
-import { computed, defineComponent, onMounted, ref, nextTick, watch, SetupContext, inject } from 'vue';
+import { computed, defineComponent, onMounted, ref, nextTick, watch, SetupContext, inject, provide } from 'vue';
import { useResizeObserver } from '@vueuse/core';
import { useDesignerColumn, useDesignerFitColumn, useDesignerVisualData } from '../../../data-view/designer';
import {
@@ -46,6 +46,7 @@ export default defineComponent({
dataGridRef.value.componentInstance = componentInstance;
});
+ provide('data-grid-context', {dataGridProps: props});
context.expose(componentInstance.value);
const columns = ref(props.columns);
const defaultVisibleCapacity = 20;
diff --git a/packages/ui-vue/components/data-grid/src/designer/use-column-rules.ts b/packages/ui-vue/components/data-grid/src/designer/use-column-rules.ts
index 02a3998a0a124384b4fc638d4711982fc10acb57..296daf7fd5922e04c5225185b99be0855a20acb1 100644
--- a/packages/ui-vue/components/data-grid/src/designer/use-column-rules.ts
+++ b/packages/ui-vue/components/data-grid/src/designer/use-column-rules.ts
@@ -5,8 +5,10 @@ import { DraggingResolveContext, UseDesignerRules } from "../../../designer-canv
import { ComponentSchema, DesignerItemContext } from "../../../designer-canvas/src/types";
import { DataGriColumnProperty } from "../property-config/data-grid-column.property-config";
import { DgControl } from "../../../designer-canvas/src/composition/dg-control";
+import { DataGridDesignProps } from "./data-grid-design.props";
-export function useDesignerRulesForDataGridColumn(designItemContext: DesignerItemContext, designerHostService): UseDesignerRules {
+export function useDesignerRulesForDataGridColumn(designItemContext: DesignerItemContext,
+ designerHostService, dataGridContext: { dataGridProps: DataGridDesignProps }): UseDesignerRules {
const schema = designItemContext.schema as ComponentSchema;
/** 组件在拖拽时需要将所属的Component一起拖拽 */
const triggerBelongedComponentToMoveWhenMoved = ref(true);
@@ -42,7 +44,12 @@ export function useDesignerRulesForDataGridColumn(designItemContext: DesignerIte
// 构造属性配置方法
function getPropsConfig(componentId: string) {
const gridColumnProp = new DataGriColumnProperty(componentId, designerHostService);
-
+ const parentSummary = designItemContext?.parent?.schema;
+ if(parentSummary?.groupFields) {
+ if(parentSummary?.groupFields.includes(schema.field)) {
+ schema.enableSummary = true;
+ }
+ }
return gridColumnProp.getPropertyConfig(schema, designItemContext?.parent?.schema);
}
/**
diff --git a/packages/ui-vue/components/data-grid/src/property-config/data-grid-column.property-config.ts b/packages/ui-vue/components/data-grid/src/property-config/data-grid-column.property-config.ts
index 4cab9bf52113d28122921a3556010ded243a29b8..6c8958a95f5233e0a7d7ca88673d9a7075ca2724 100644
--- a/packages/ui-vue/components/data-grid/src/property-config/data-grid-column.property-config.ts
+++ b/packages/ui-vue/components/data-grid/src/property-config/data-grid-column.property-config.ts
@@ -1,5 +1,6 @@
import { FormSchemaEntityField$Type } from '@farris/ui-vue/components/common';
+import { FNotifyService as NotifyService } from "@farris/ui-vue/components/notify";
import { BaseControlProperty } from '../../../property-panel/src/composition/entity/base-property';
import { DgControl } from '../../../designer-canvas/src/composition/dg-control';
import { InputGroupProperty } from '../../../input-group/src/property-config/input-group.property-config';
@@ -16,16 +17,20 @@ import { RadioGroupProperty } from '../../../radio-group/src/property-config/rad
import { SwitchProperty } from '../../../switch/src/property-config/switch.property-config';
import { TimePickerProperty } from '../../../time-picker/src/property-config/time-picker.property-config';
import { SchemaDOMMapping } from '../../../property-panel/src/composition/entity/schema-dom-mapping';
+import { DataGridDesignProps } from '../designer/data-grid-design.props';
export class DataGriColumnProperty extends BaseControlProperty {
+ private dataGridProps: DataGridDesignProps | null = null;
+ private notifyService = new NotifyService();
constructor(componentId: string, designerHostService: any) {
super(componentId, designerHostService);
}
getPropertyConfig(propertyData: any, gridData: any) {
+ this.dataGridProps = gridData;
// 基本信息
this.getBasicPropConfig(propertyData);
// 外观
- this.getAppearanceProperties(propertyData);
+ this.getAppearanceProperties(propertyData, gridData);
// 行为
this.propertyConfig.categories['behavior'] = this.getBehaviorConfig(propertyData, 'gridFieldEditor');
// 编辑器
@@ -34,7 +39,7 @@ export class DataGriColumnProperty extends BaseControlProperty {
// this.propertyConfig.categories['formatter'] = this.getTemplateProperties(propertyData);
// 列事件
- this.getEventPropConfig(propertyData);
+ // this.getEventPropConfig(propertyData);
return this.propertyConfig;
}
@@ -49,7 +54,7 @@ export class DataGriColumnProperty extends BaseControlProperty {
const self = this;
const initialData = self.eventsEditorUtils['formProperties'](propertyData, self.viewModelId, events);
const properties = self.createBaseEventProperty(initialData);
-
+
this.propertyConfig.categories['eventsEditor'] = {
title: '事件',
hideTitle: true,
@@ -68,15 +73,13 @@ export class DataGriColumnProperty extends BaseControlProperty {
// 联动修改排序开关
propertyData.remoteSort = propertyData.columnSorted ? true : false;
// 同步超链接模板
- if(data.formatter && typeof data.formatter === 'object') {
- data.formatter.type = 'custom';
- // 替换自定义模板
- data.formatter.customFormat = `this.viewModel.${data.onClickLinkCommand}(ctx)}>
{{rowData.${data.field}}}
`;
- // 刷新属性面板
- }
+ propertyData = { ...propertyData };
+ // 刷新属性面板
}
};
}
@@ -130,7 +133,8 @@ export class DataGriColumnProperty extends BaseControlProperty {
}
};
}
- getAppearanceProperties(propertyData: any) {
+ getAppearanceProperties(propertyData: any, gridData: any) {
+ const self = this;
this.propertyConfig.categories['appearance'] = {
description: '',
title: '外观',
@@ -190,6 +194,24 @@ export class DataGriColumnProperty extends BaseControlProperty {
{ id: 'bottom', name: '底对齐' }
]
}
+ },
+ columnTemplate: {
+ description: '列模板',
+ title: '列模板',
+ type: 'string',
+
+ refreshPanelAfterChanged: true,
+ editor: {
+ type: "code-editor",
+ language: "html",
+ }
+ },
+ enableSummary: {
+ description: '启用合计',
+ title: '启用合计',
+ visible: !!this.dataGridProps?.summary?.enable && propertyData.dataType === 'number',
+ type: 'boolean',
+ refreshPanelAfterChanged: true
}
},
setPropertyRelates(changeObject, prop, paramters: any) {
@@ -201,6 +223,22 @@ export class DataGriColumnProperty extends BaseControlProperty {
prop.actualWidth = changeObject.propertyValue;
break;
}
+ case 'enableSummary': {
+ // 更新合计行字段集合
+ const { groupFields } = gridData.summary;
+ if (!groupFields.includes(prop.field) && changeObject.propertyValue) {
+ groupFields.push(prop.field);
+ }
+ if (groupFields.includes(prop.field) && !changeObject.propertyValue) {
+ groupFields.splice(groupFields.indexOf(prop.field), 1);
+ }
+ break;
+ }
+ case 'columnTemplate': {
+ // 提示以列模板为主
+ self.notifyService.warning({ position: 'top-center', message: '注意:已设置列模板,列格式化将会失效' });
+ break;
+ }
}
}
};
@@ -212,8 +250,38 @@ export class DataGriColumnProperty extends BaseControlProperty {
}
private getTemplateProperties(propertyData: any) {
+ const self = this;
+ const formatterType = {
+ enum: [
+ { id: 'enum', name: '枚举' },
+ { id: 'custom', name: '自定义模板' },
+ { id: 'none', name: '无' }
+ ],
+ boolean: [
+ { id: 'boolean', name: '布尔' },
+ { id: 'custom', name: '自定义模板' },
+ { id: 'none', name: '无' }
+ ],
+ number: [
+ { id: 'number', name: '数字' },
+ { id: 'custom', name: '自定义模板' },
+ { id: 'none', name: '无' }
+ ],
+ date: [
+ { id: 'date', name: '日期' },
+ { id: 'custom', name: '自定义模板' },
+ { id: 'none', name: '无' }
+ ],
+ string: [
+ { id: 'enum', name: '枚举' },
+ { id: 'boolean', name: '布尔' },
+ { id: 'date', name: '日期' },
+ { id: 'custom', name: '自定义模板' },
+ { id: 'none', name: '无' }
+ ]
+ };
return {
- title: '列模板',
+ title: '列格式化',
description: '',
properties: {
type: {
@@ -223,14 +291,7 @@ export class DataGriColumnProperty extends BaseControlProperty {
$converter: '/converter/change-formatter.converter',
refreshPanelAfterChanged: true,
editor: {
- data: [
- { id: 'enum', name: '枚举' },
- { id: 'boolean', name: '布尔' },
- { id: 'number', name: '数字' },
- { id: 'date', name: '日期' },
- { id: 'custom', name: '自定义模板' },
- { id: 'none', name: '无' }
- ]
+ data: formatterType[propertyData.dataType]
}
},
// data: {
@@ -325,8 +386,12 @@ export class DataGriColumnProperty extends BaseControlProperty {
}
switch (changeObject && changeObject.propertyID) {
case 'type': {
- // 刷新实体树
- changeObject.needRefreshEntityTree = true;
+ // 清空列模板
+ if (changeObject.propertyValue !== 'none' && prop.columnTemplate) {
+ prop.columnTemplate = '';
+ // 提示以列格式化为主
+ self.notifyService.warning({ position: 'top-center', message: '注意:已设置列格式化,列模板将被清空且不再生效' });
+ }
break;
}
}
diff --git a/packages/ui-vue/components/data-grid/src/property-config/data-grid.property-config.ts b/packages/ui-vue/components/data-grid/src/property-config/data-grid.property-config.ts
index 2f095dbe09034524398ef85f62956b8463916e2f..28af87b50b0ad3c0834e73f2b079cdfacf4b0e5d 100644
--- a/packages/ui-vue/components/data-grid/src/property-config/data-grid.property-config.ts
+++ b/packages/ui-vue/components/data-grid/src/property-config/data-grid.property-config.ts
@@ -17,9 +17,11 @@ export class DataGridProperty extends BaseControlProperty {
this.getAppearanceProperties(propertyData);
// 操作列
this.propertyConfig.categories['command'] = this.getCommandColumnProperties(propertyData);
- // 填充列宽
- // this.propertyConfig.categories['column'] = this.getColumnOptionProperties(propertyData);
+ // 填充列宽,仅支持平分列宽
+ this.propertyConfig.categories['column'] = this.getColumnOptionProperties(propertyData);
+ // 合计行
+ this.propertyConfig.categories['summary'] = this.getSummaryProperties(propertyData);
// 事件
this.getEventPropConfig(propertyData);
@@ -77,19 +79,19 @@ export class DataGridProperty extends BaseControlProperty {
$converter: '/converter/column-option.converter',
refreshPanelAfterChanged: true
},
- fitMode: {
- description: '',
- title: '填充模式',
- type: 'enum',
- visible: !!propertyData.column?.fitColumns,
- $converter: '/converter/column-option.converter',
- editor: {
- data: [
- { id: 'average', name: '平分' },
- { id: 'expand', name: '等比' }
- ]
- }
- },
+ // fitMode: {
+ // description: '',
+ // title: '填充模式',
+ // type: 'enum',
+ // visible: !!propertyData.column?.fitColumns,
+ // $converter: '/converter/column-option.converter',
+ // editor: {
+ // data: [
+ // { id: 'average', name: '平分' },
+ // { id: 'expand', name: '等比' }
+ // ]
+ // }
+ // },
},
setPropertyRelates(changeObject: PropertyChangeObject, data: any) {
switch (changeObject && changeObject.propertyID) {
@@ -138,6 +140,22 @@ export class DataGridProperty extends BaseControlProperty {
}
};
}
+
+ private getSummaryProperties(propertyData: any) {
+ return {
+ title: '合计行',
+ description: '',
+ properties: {
+ enable: {
+ title: '启用',
+ type: 'boolean',
+ description: '启用合计行',
+ $converter: '/converter/summary.converter',
+ refreshPanelAfterChanged: true
+ }
+ }
+ };
+ }
/**
* 将schema实体表组装成树
*/
diff --git a/packages/ui-vue/components/data-grid/src/schema/data-grid-column.schema.json b/packages/ui-vue/components/data-grid/src/schema/data-grid-column.schema.json
index 267e6dbf14f3a7f50980266864bd3ac23b6b9bb1..3f080567b08b1023583ca28ec647bcd30785fc79 100644
--- a/packages/ui-vue/components/data-grid/src/schema/data-grid-column.schema.json
+++ b/packages/ui-vue/components/data-grid/src/schema/data-grid-column.schema.json
@@ -154,6 +154,16 @@
"falseText": "否",
"dateFormat": "yyyy-MM-dd"
}
+ },
+ "columnTemplate": {
+ "description":"列模板",
+ "type": "string",
+ "default": ""
+ },
+ "enableSummary": {
+ "description": "合计行",
+ "type": "boolean",
+ "default": false
}
},
"required": [
diff --git a/packages/ui-vue/components/data-view/components/column-format/column-format.component.tsx b/packages/ui-vue/components/data-view/components/column-format/column-format.component.tsx
index ed330a1a039e53a5b1ca4aab93cbb458ec2675f5..760d3908e3230de7d5729c603f3661743289b44e 100644
--- a/packages/ui-vue/components/data-view/components/column-format/column-format.component.tsx
+++ b/packages/ui-vue/components/data-view/components/column-format/column-format.component.tsx
@@ -26,9 +26,10 @@ export default function () {
}
// format custom
- function renderCustom(value: any, options: InnerFormatter) {
+ function renderCustom(value: any, options: InnerFormatter, row: VisualData) {
return options.customFormat ?
- new Function(`return ${options.customFormat}`)() :
+ // new Function(`return ${options.customFormat}`)() :
+ options.customFormat(value, row.raw):
renderNone(value);
}
@@ -46,7 +47,7 @@ export default function () {
}
// custom formatter
if (formatter.type === 'custom') {
- return renderCustom(value, formatter);
+ return renderCustom(value, formatter,visualDataRow);
}
// formatter
if (formatter.type === 'enum') {
diff --git a/packages/ui-vue/components/data-view/components/summary/data-grid-summary.component.tsx b/packages/ui-vue/components/data-view/components/summary/data-grid-summary.component.tsx
index 147da21fe26714d1c69976df70feb68f6fc84f58..917d606c7f4013914c61a676636d8bcbc4fea7fa 100644
--- a/packages/ui-vue/components/data-view/components/summary/data-grid-summary.component.tsx
+++ b/packages/ui-vue/components/data-view/components/summary/data-grid-summary.component.tsx
@@ -26,7 +26,7 @@ export default function (props: DataViewOptions, dataView: UseDataView, useColum
return options && options.enable && options.groupFields && options.groupFields.length > 0;
});
- function renderDataGridSummery() {
+ function renderDataGridSummary() {
return (
shouldShowSummary.value && (
@@ -48,5 +48,5 @@ export default function (props: DataViewOptions, dataView: UseDataView, useColum
);
}
- return { renderDataGridSummery };
+ return { renderDataGridSummary };
}
diff --git a/packages/ui-vue/components/data-view/composition/data/use-data-view.ts b/packages/ui-vue/components/data-view/composition/data/use-data-view.ts
index 47585442a83ee43fbcba3419262571a3f83f93b3..b598bac7ef44c1ebeb53ce5bb966adc78a939b80 100644
--- a/packages/ui-vue/components/data-view/composition/data/use-data-view.ts
+++ b/packages/ui-vue/components/data-view/composition/data/use-data-view.ts
@@ -496,6 +496,20 @@ export function useDataView(
});
return selectionItems.filter((item: any) => item != null);
}
+
+ function updateSummary() {
+ const groupSummaryFields = props.summary.groupFields;
+ summaries = groupSummaryFields.reduce((sumaries: Map
, summaryField: string) => {
+ sumaries.set(summaryField, 0);
+ return sumaries;
+ }, summaries);
+ for (const dataItem of totalData.value) {
+ groupSummaryFields.forEach((summaryField: string) => {
+ const summaryFieldValue = summaries.get(summaryField) || 0;
+ summaries.set(summaryField, summaryFieldValue + dataItem[summaryField]);
+ });
+ }
+ }
return {
addFilter,
addNewDataItem,
@@ -532,6 +546,7 @@ export function useDataView(
setSorters,
sorters,
summaries,
+ updateSummary,
toggleChildrenVisibiltyByCollapseStatus,
totalItems,
unFold,
diff --git a/packages/ui-vue/components/data-view/composition/types.ts b/packages/ui-vue/components/data-view/composition/types.ts
index 5cf97199467695613d56cfdfd442a477a1dc4800..0e8004a52f1360fee3ea66d06bc85f7effbaa079 100644
--- a/packages/ui-vue/components/data-view/composition/types.ts
+++ b/packages/ui-vue/components/data-view/composition/types.ts
@@ -100,6 +100,7 @@ export interface DataColumn {
binding?: any;
draggable?: boolean;
headerFormatter?: (context: { headerCell: HeaderCell, headerCells: HeaderCell[], columnIndex: number }) => VNode | string;
+ columnTemplate?: (cell: VisualDataCell, visualDataRow: VisualData) => VNode;
}
export interface DataFilter {
@@ -612,6 +613,7 @@ export interface UseDataView {
visibleDataItems: ComputedRef;
shouldGroupingData: ComputedRef;
+ updateSummary: () => void;
}
export type DataViewType = UseDataView['dataView'];
diff --git a/packages/ui-vue/components/data-view/composition/visualization/use-visual-data-row.ts b/packages/ui-vue/components/data-view/composition/visualization/use-visual-data-row.ts
index 2fe09578118fe899dafce4127eb190bbcc1592ac..8d823891a6fb45190b6ed44d4031e6de34462b5a 100644
--- a/packages/ui-vue/components/data-view/composition/visualization/use-visual-data-row.ts
+++ b/packages/ui-vue/components/data-view/composition/visualization/use-visual-data-row.ts
@@ -73,6 +73,7 @@ export function useVisualDataRow(
status: VisualDataStatus.initial,
updateCell: (newDataItem: any, field: string) => {
updateCellData(newDataItem, dataItem, currentRow, field);
+ dataView.updateSummary();
},
updateCells: (newDataItem: any, fields: string[]) => {
fields.forEach(field => {
diff --git a/packages/ui-vue/components/dynamic-resolver/src/converter/summary.converter.ts b/packages/ui-vue/components/dynamic-resolver/src/converter/summary.converter.ts
new file mode 100644
index 0000000000000000000000000000000000000000..691ca95677415520e52cdf5324541d878c38ba36
--- /dev/null
+++ b/packages/ui-vue/components/dynamic-resolver/src/converter/summary.converter.ts
@@ -0,0 +1,42 @@
+import { ComponentSchema } from "../../../designer-canvas/src/types";
+import { PropertyConverter, SchemaService } from "../types";
+
+export default {
+ convertTo: (schema: ComponentSchema, propertyKey: string, propertyValue: any, schemaService: SchemaService) => {
+ // eslint-disable-next-line no-self-assign
+ if (schema.summary) {
+ schema.summary[propertyKey] = propertyValue;
+ } else {
+ schema.summary = {
+ [propertyKey]: propertyValue
+ };
+ }
+ if (propertyKey === 'enable' && propertyValue) {
+ // 启用合计行
+ if (!schema.summary) {
+ schema.summary = {
+ enable: propertyValue,
+ groupFields: []
+ };
+ } else {
+ if(!schema.summary.groupFields) {
+ schema.summary.groupFields = [];
+ }
+ }
+ }
+ },
+ convertFrom: (schema: ComponentSchema, propertyKey: string, schemaService: SchemaService) => {
+ if (schema.summary) {
+ if (propertyKey === 'enable') {
+ return schema.summary.enable;
+ }
+ }
+ if (schema.type === 'data-grid-column') {
+ if (schema.enableSummary === undefined) {
+ return false;
+ }
+ return schema.enableSummary;
+ }
+ return '';
+ }
+} as PropertyConverter;
diff --git a/packages/ui-vue/components/dynamic-resolver/src/property-config-resolver.ts b/packages/ui-vue/components/dynamic-resolver/src/property-config-resolver.ts
index 27379218b898a6aff3771d32958b3a274949503c..1621053df602a9816f55c783d3369c8e7a24c2e2 100644
--- a/packages/ui-vue/components/dynamic-resolver/src/property-config-resolver.ts
+++ b/packages/ui-vue/components/dynamic-resolver/src/property-config-resolver.ts
@@ -12,6 +12,7 @@ import changeEditorConverter from "./converter/change-editor.converter";
import changeFormatterConverter from './converter/change-formatter.converter';
import columnCommandConverter from './converter/column-command.converter';
import columnOptionConverter from './converter/column-option.converter';
+import SummaryConverter from './converter/summary.converter';
import fieldSelectorConverter from "./converter/field-selector.converter";
import paginationConverter from "./converter/pagination.converter";
import rowNumberConverter from "./converter/row-number.converter";
@@ -31,6 +32,7 @@ const propertyConverterMap = new Map([
['/converter/change-formatter.converter', changeFormatterConverter],
['/converter/column-command.converter', columnCommandConverter],
['/converter/column-option.converter', columnOptionConverter],
+ ['/converter/summary.converter', SummaryConverter],
['/converter/form-group-label.converter', formGroupLabelConverter],
['/converter/field-selector.converter', fieldSelectorConverter],
['/converter/pagination.converter', paginationConverter],
diff --git a/packages/ui-vue/components/dynamic-resolver/src/resolver/property-config/use-property-config-resolver.ts b/packages/ui-vue/components/dynamic-resolver/src/resolver/property-config/use-property-config-resolver.ts
index 8a6f44a3632357c011511c487f8a59abd0ec220a..7c95df7f760294ba73c344159e4268e212a5ae1c 100644
--- a/packages/ui-vue/components/dynamic-resolver/src/resolver/property-config/use-property-config-resolver.ts
+++ b/packages/ui-vue/components/dynamic-resolver/src/resolver/property-config/use-property-config-resolver.ts
@@ -11,6 +11,7 @@ import changeEditorConverter from "../../converter/change-editor.converter";
import changeFormatterConverter from '../../converter/change-formatter.converter';
import columnCommandConverter from '../../converter/column-command.converter';
import columnOptionConverter from '../../converter/column-option.converter';
+import SummaryConverter from '../../converter/summary.converter';
import fieldSelectorConverter from "../../converter/field-selector.converter";
import paginationConverter from "../../converter/pagination.converter";
import rowNumberConverter from "../../converter/row-number.converter";
@@ -32,6 +33,7 @@ export function usePropertyConfigResolver(propertyConfigSchemaMap: Record