From 731a89241b2064ca1a03e612c524d4e108bf6541 Mon Sep 17 00:00:00 2001 From: aalizzwell Date: Mon, 25 Aug 2025 14:22:16 +0800 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20=E8=A1=A8=E6=A0=BC=E5=B8=AE?= =?UTF-8?q?=E5=8A=A9=E6=94=AF=E6=8C=81=E6=B8=85=E7=A9=BA=E3=80=81=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=8A=A0=E8=BD=BD=E5=89=8D=E3=80=81=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E5=89=8D=E3=80=81=E5=B8=AE=E5=8A=A9=E5=90=8E?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data-grid-component-config-resolver.ts | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/renderer/src/component-config-resolver/data-grid-component-config-resolver.ts b/packages/renderer/src/component-config-resolver/data-grid-component-config-resolver.ts index 284a6ecf18a..e083175e987 100644 --- a/packages/renderer/src/component-config-resolver/data-grid-component-config-resolver.ts +++ b/packages/renderer/src/component-config-resolver/data-grid-component-config-resolver.ts @@ -80,16 +80,28 @@ export class DataGridComponentConfigResolver extends ComponentConfigResolver { } } private resolveLoolupColumn(viewSchema: Record, column: Record) { - const { editor, dictPicking } = column; + const { editor, dictPicking, clear, beforeLoadData, beforeSelectData, dictPicked } = column; if (!editor || editor.type !== 'lookup') { return; } + const { id } = viewSchema; + const relatedComponent = this.formMetadataService.getRelatedComponent(id); + const viewModel = this.viewModel.getModule().getViewModel(relatedComponent.id); if (dictPicking) { - const { id } = viewSchema; - const relatedComponent = this.formMetadataService.getRelatedComponent(id); - const viewModel = this.viewModel.getModule().getViewModel(relatedComponent.id); editor.dictPicking = (payload: any) => (viewModel as any)[dictPicking]({ payload, schema: viewSchema }); } + if (clear) { + editor.clear = (payload: any) => (viewModel as any)[clear]({ payload, schema: viewSchema }); + } + if (beforeLoadData) { + editor.beforeLoadData = (payload: any) => (viewModel as any)[beforeLoadData]({ payload, schema: viewSchema }); + } + if (beforeSelectData) { + editor.beforeSelectData = (payload: any) => (viewModel as any)[beforeSelectData]({ payload, schema: viewSchema }); + } + if (dictPicked) { + editor.dictPicked = (payload: any) => (viewModel as any)[dictPicked]({ payload, schema: viewSchema }); + } } /** -- Gitee From 926ca9bba1909bf10155368bcf1dc0785cc99ca3 Mon Sep 17 00:00:00 2001 From: aalizzwell Date: Mon, 25 Aug 2025 16:24:03 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feature:=20=E6=94=AF=E6=8C=81=E9=A1=B5?= =?UTF-8?q?=E5=A4=B4=E6=A8=A1=E6=9D=BF=E3=80=81=E6=94=AF=E6=8C=81tabs?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E3=80=81=E6=94=AF=E6=8C=81tab-page=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../page-header-component-config-resolver.ts | 2 +- .../src/template-transformer/index.ts | 3 ++ .../page-header-template-transformer.ts | 36 +++++++++++++++++ .../src/template-transformer/providers.ts | 6 +++ .../section-template-transformer.ts | 39 +++++++++++++++++++ .../tab-page-template-transformer.ts | 25 ++++++++++++ .../template-transformer.ts | 11 ++++++ 7 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 packages/renderer/src/template-transformer/page-header-template-transformer.ts create mode 100644 packages/renderer/src/template-transformer/section-template-transformer.ts create mode 100644 packages/renderer/src/template-transformer/tab-page-template-transformer.ts diff --git a/packages/renderer/src/component-config-resolver/page-header-component-config-resolver.ts b/packages/renderer/src/component-config-resolver/page-header-component-config-resolver.ts index 358153cb2fc..1aa39e81c21 100644 --- a/packages/renderer/src/component-config-resolver/page-header-component-config-resolver.ts +++ b/packages/renderer/src/component-config-resolver/page-header-component-config-resolver.ts @@ -36,7 +36,7 @@ export class PageHeaderComponentConfigResolver extends ComponentConfigResolver { return; } children.forEach((item: Record) => { - const { disabled, visible} = item; + const { disabled, visible } = item; item.disabled = this.configResolver.resolve(disabled, id); if (!isNil(visible)) { item.visible = this.configResolver.resolve(visible, id); diff --git a/packages/renderer/src/template-transformer/index.ts b/packages/renderer/src/template-transformer/index.ts index 15350151bdc..30131293f36 100644 --- a/packages/renderer/src/template-transformer/index.ts +++ b/packages/renderer/src/template-transformer/index.ts @@ -3,4 +3,7 @@ export * from './template-transformer'; export * from './data-grid-column-template-transformer'; export * from './template-transformer-registry'; export * from './template-transform-service'; +export * from './page-header-template-transformer'; +export * from './section-template-transformer'; +export * from './tab-page-template-transformer'; export * from './providers'; diff --git a/packages/renderer/src/template-transformer/page-header-template-transformer.ts b/packages/renderer/src/template-transformer/page-header-template-transformer.ts new file mode 100644 index 00000000000..e5bbc8c219e --- /dev/null +++ b/packages/renderer/src/template-transformer/page-header-template-transformer.ts @@ -0,0 +1,36 @@ + +import { TemplateTransformer } from "./template-transformer"; +import { FormMetadataService } from "../service"; +import { Injector, ViewModel, ViewModelState } from "@farris/devkit-vue"; + +export class PageHeaderTemplateTransformer extends TemplateTransformer { + constructor(protected formMetadataService: FormMetadataService, protected viewModel: ViewModel, private injector: Injector) { + super(formMetadataService, viewModel); + } + public transform(schema: Record): void { + const { id, type, titleContentHtml, contentHtml, downContentHtml } = schema; + if (type !== 'page-header') { + return; + } + const viewModel = this.getRelatedViewModel(id); + if (!viewModel) { + return; + } + // 标题模板 + if (titleContentHtml) { + const render = this.buildTemplateRender(titleContentHtml, viewModel); + schema.titleContentRenderFunction = render; + } + // 内容模板 + if (contentHtml) { + const render = this.buildTemplateRender(contentHtml, viewModel); + schema.contentRenderFunction = render; + } + // 扩展模板 + if (downContentHtml) { + const render = this.buildTemplateRender(downContentHtml, viewModel); + schema.downContentRenderFunction = render; + } + } + +} diff --git a/packages/renderer/src/template-transformer/providers.ts b/packages/renderer/src/template-transformer/providers.ts index 989c0bc1dbc..2aa9bc13492 100644 --- a/packages/renderer/src/template-transformer/providers.ts +++ b/packages/renderer/src/template-transformer/providers.ts @@ -5,10 +5,16 @@ import { HtmlTemplateComponentTemplateTransformer } from "./html-template-compon import { FormMetadataService } from "../service"; import { TemplateTransformerRegistry } from "./template-transformer-registry"; import { TemplateTransformService } from "./template-transform-service"; +import { PageHeaderTemplateTransformer } from "./page-header-template-transformer"; +import { SectionTemplateTransformer } from './section-template-transformer'; +import { TabPageTemplateTransformer } from "./tab-page-template-transformer"; export const htmlTemplateTransformers: StaticProvider[] = [ { provide: TEMPLATE_TRANSFORMERS_TOKEN, useClass: DataGridColumnTemplateTransformer, deps: [FormMetadataService, ViewModel, Injector], multi: true }, { provide: TEMPLATE_TRANSFORMERS_TOKEN, useClass: HtmlTemplateComponentTemplateTransformer, deps: [FormMetadataService, ViewModel], multi: true }, + { provide: TEMPLATE_TRANSFORMERS_TOKEN, useClass: PageHeaderTemplateTransformer, deps: [FormMetadataService, ViewModel, Injector], multi: true }, + { provide: TEMPLATE_TRANSFORMERS_TOKEN, useClass: SectionTemplateTransformer, deps: [FormMetadataService, ViewModel, Injector], multi: true }, + { provide: TEMPLATE_TRANSFORMERS_TOKEN, useClass: TabPageTemplateTransformer, deps: [FormMetadataService, ViewModel, Injector], multi: true }, { provide: TemplateTransformerRegistry, useClass: TemplateTransformerRegistry, deps: [TEMPLATE_TRANSFORMERS_TOKEN] }, { provide: TemplateTransformService, useClass: TemplateTransformService, deps: [TemplateTransformerRegistry] }, ]; diff --git a/packages/renderer/src/template-transformer/section-template-transformer.ts b/packages/renderer/src/template-transformer/section-template-transformer.ts new file mode 100644 index 00000000000..cedbfa9af54 --- /dev/null +++ b/packages/renderer/src/template-transformer/section-template-transformer.ts @@ -0,0 +1,39 @@ +import { TemplateTransformer } from "./template-transformer"; +import { FormMetadataService } from "../service"; +import { Injector, ViewModel, ViewModelState } from "@farris/devkit-vue"; + +export class SectionTemplateTransformer extends TemplateTransformer { + constructor(protected formMetadataService: FormMetadataService, protected viewModel: ViewModel, private injector: Injector) { + super(formMetadataService, viewModel); + } + public transform(schema: Record): void { + const { id, type, headerTitleHtml, headerHtml, headerContentHtml, toolbarHtml } = schema; + if (type !== 'section') { + return; + } + const viewModel = this.getRelatedViewModel(id); + if (!viewModel) { + return; + } + // 标题模板 + if (headerTitleHtml) { + const render = this.buildTemplateRender(headerTitleHtml, viewModel); + schema.headerTitleRenderFunction = render; + } + // 头部模板 + if (headerHtml) { + const render = this.buildTemplateRender(headerHtml, viewModel); + schema.headerRenderFunction = render; + } + // 扩展模板 + if (headerContentHtml) { + const render = this.buildTemplateRender(headerContentHtml, viewModel); + schema.headerContentRenderFunction = render; + } + // 扩展模板 + if (toolbarHtml) { + const render = this.buildTemplateRender(toolbarHtml, viewModel); + schema.toolbarRenderFunction = render; + } + } +} diff --git a/packages/renderer/src/template-transformer/tab-page-template-transformer.ts b/packages/renderer/src/template-transformer/tab-page-template-transformer.ts new file mode 100644 index 00000000000..2160e30fa9f --- /dev/null +++ b/packages/renderer/src/template-transformer/tab-page-template-transformer.ts @@ -0,0 +1,25 @@ +import { TemplateTransformer } from "./template-transformer"; +import { FormMetadataService } from "../service"; +import { Injector, ViewModel, ViewModelState } from "@farris/devkit-vue"; + +export class TabPageTemplateTransformer extends TemplateTransformer { + constructor(protected formMetadataService: FormMetadataService, protected viewModel: ViewModel, private injector: Injector) { + super(formMetadataService, viewModel); + } + public transform(schema: Record): void { + const { id, type, titleHtml } = schema; + if (type !== 'tab-page') { + return; + } + const viewModel = this.getRelatedViewModel(id); + if (!viewModel) { + return; + } + // 标题模板 + if (titleHtml) { + const render = this.buildTemplateRender(titleHtml, viewModel); + schema.titleRenderFunction = render; + } + } + +} diff --git a/packages/renderer/src/template-transformer/template-transformer.ts b/packages/renderer/src/template-transformer/template-transformer.ts index e83e115f5b6..e34d5e9595f 100644 --- a/packages/renderer/src/template-transformer/template-transformer.ts +++ b/packages/renderer/src/template-transformer/template-transformer.ts @@ -1,5 +1,7 @@ import { ViewModel, ViewModelState } from "@farris/devkit-vue"; import { FormMetadataService } from "../service"; +import { compile, createVNode } from "vue"; +import { TranslateService } from "@farris/command-services-vue"; export abstract class TemplateTransformer { @@ -38,4 +40,13 @@ export abstract class TemplateTransformer { current: viewModel }; } + protected buildTemplateRender(template: string, viewModel: ViewModel) { + const compiledTemplate = compile(template); + const templateContext = this.buildTempalteContext(viewModel); + const translateService = this.viewModel.getInjector().get(TranslateService); + const render = () => { + return createVNode({ render: compiledTemplate, props: ['viewModel', 't'] }, { viewModel: templateContext, t: translateService.transform.bind(translateService) }); + }; + return render; + } } -- Gitee