import { type RuntimeO2MField, SubmitRelationHandler, SubmitValue } from '@oinone/kunlun-engine'; import { ModelFieldType, ViewType } from '@oinone/kunlun-meta'; import { Condition } from '@oinone/kunlun-request'; import { BooleanHelper, Optional, type ReturnPromise } from '@oinone/kunlun-shared'; import { SPI } from '@oinone/kunlun-spi'; import { Widget } from '@oinone/kunlun-vue-widget'; import { BaseFieldWidget, FormSubviewListFieldWidget, RelationQueryHelper } from '../../../../basic'; import { TABLE_WIDGET } from '../../../../typing'; @SPI.ClassFactory( BaseFieldWidget.Token({ viewType: ViewType.Form, ttype: ModelFieldType.OneToMany, // fixme @zbh 20250814 6.3.0版本使用多别称 // widget: ['table', TABLE_WIDGET] widget: TABLE_WIDGET }) ) export class FormO2MTableFieldWidget extends FormSubviewListFieldWidget { /** * 一对多的表格底部显示添加一行 */ @Widget.Provide() @Widget.Reactive() protected get showAddBtn() { if (this.readonly) { return false; } return Optional.ofNullable(BooleanHelper.toBoolean(this.getDsl().showAddBtn)).orElse(true); } /** * 一对多的表格底部显示快速填报 */ @Widget.Provide() @Widget.Reactive() protected get showQuickFill() { if (this.readonly) { return false; } return Optional.ofNullable(BooleanHelper.toBoolean(this.getDsl().showQuickFill)).orElse(true); } protected async refreshValueProcess() { if (this.isDataSourceProvider) { await super.refreshValueProcess(); this.submitCache?.reload(); this.subviewSubmitCache?.reload(); } } protected initSubviewData(): ReturnPromise { const view = this.runtimeSubviewContext.view; if (!view) { super.initSubviewData(); return; } const { formData, field, viewMode, submitType, relationUpdateType } = this; let condition: Condition | undefined; if (RelationQueryHelper.isNeedQuery(field, viewMode, submitType, relationUpdateType)) { condition = RelationQueryHelper.generatorO2MCondition(field, formData); if (!condition) { this.isDataSourceProvider = false; this.reloadDataSource([]); return; } } else { super.initSubviewData(); return; } if (!this.isDataSourceProvider) { this.reloadDataSource(undefined); } view.filter = condition.toString(); this.isDataSourceProvider = false; } public async submit(submitValue: SubmitValue) { const { field, itemName, value, viewMode, submitCache, subviewSubmitCache, submitType, relationUpdateType } = this; return SubmitRelationHandler.O2M( field, itemName, submitValue, value, viewMode, subviewSubmitCache || submitCache, submitType, relationUpdateType ); } }