From 563e08604c9387e33b254d71fb893338144d0ef0 Mon Sep 17 00:00:00 2001 From: lijianxiong <1518062161@qq.com> Date: Thu, 14 Nov 2024 10:43:14 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E7=BC=96=E8=BE=91=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E5=8F=8A=E7=BC=96=E8=BE=91=E5=99=A8=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=B3=A8=E5=85=A5=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + src/control/form/form/form.tsx | 30 ++++++++++++++++++- .../ibiz-checkbox-list/ibiz-checkbox-list.tsx | 1 + .../check-box/ibiz-checkbox/ibiz-checkbox.tsx | 1 + .../ibiz-radio/ibiz-radio.tsx | 1 + src/editor/rate/ibiz-rate/ibiz-rate.tsx | 1 + src/editor/slider/ibiz-slider/ibiz-slider.tsx | 1 + .../stepper/ibiz-stepper/ibiz-stepper.tsx | 1 + src/editor/switch/ibiz-switch/ibiz-switch.tsx | 1 + .../ibiz-input-number/ibiz-input-number.tsx | 1 + src/editor/text-box/input/input.tsx | 1 + .../ibiz-file-upload/ibiz-file-upload.tsx | 1 + .../ibiz-image-select/ibiz-image-select.tsx | 1 + .../ibiz-image-upload/ibiz-image-upload.tsx | 1 + 14 files changed, 42 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fed79fb0..9d60716e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ - 多数据部件排序配置适配图标按钮移入显示title - 分页搜索视图中快捷搜索提示根据当前激活的关系视图显示 - 按钮组支持项显示隐藏 +- 编辑表单及编辑器支持注入属性 ### Fixed diff --git a/src/control/form/form/form.tsx b/src/control/form/form/form.tsx index 39f0cfeb8..17618f308 100644 --- a/src/control/form/form/form.tsx +++ b/src/control/form/form/form.tsx @@ -1,4 +1,8 @@ -import { findChildFormDetails, FormController } from '@ibiz-template/runtime'; +import { + findChildFormDetails, + FormController, + ScriptFactory, +} from '@ibiz-template/runtime'; import { useNamespace } from '@ibiz-template/vue3-util'; import { IDEFormDetail, IDEFormItem } from '@ibiz/model-core'; import { @@ -27,6 +31,29 @@ export const FormControl = defineComponent({ /** 作用域插槽提供的参数 */ const slotProps: IData = { form: c }; + /** + * 绘制成员的attrs + * @author ljx + * @date 2024-11-13 15:48:00 + * @param {IDEFormDetail} model + * @return {*} {IParams} + */ + const renderAttrs = (model: IDEFormDetail): IParams => { + const attrs: IParams = {}; + model.controlAttributes?.forEach(item => { + if (item.attrName && item.attrValue) { + attrs[item.attrName!] = ScriptFactory.execSingleLine( + item.attrValue!, + { + ...props.controller.getEventArgs(), + data: props.controller.data, + }, + ); + } + }); + return attrs; + }; + /** * 按照类型绘制表单成员 * @author lxm @@ -90,6 +117,7 @@ export const FormControl = defineComponent({ component, { ...detailProps, + attrs: renderAttrs(detail), }, childSlots, ); diff --git a/src/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.tsx b/src/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.tsx index 375c8fbd8..76d331651 100644 --- a/src/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.tsx +++ b/src/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.tsx @@ -166,6 +166,7 @@ export const IBizCheckboxList = defineComponent({ direction='horizontal' v-model={this.selectArray} onChange={this.onSelectArrayChange} + {...this.$attrs} > {this.items.map((item, index: number) => ( ); diff --git a/src/editor/radio-button-list/ibiz-radio/ibiz-radio.tsx b/src/editor/radio-button-list/ibiz-radio/ibiz-radio.tsx index a0f92e4ad..33cc1ce4e 100644 --- a/src/editor/radio-button-list/ibiz-radio/ibiz-radio.tsx +++ b/src/editor/radio-button-list/ibiz-radio/ibiz-radio.tsx @@ -84,6 +84,7 @@ export const IBizRadio = defineComponent({ class={this.ns.e('group')} v-model={this.currentVal} direction='horizontal' + {...this.$attrs} > {this.items.map((_item, index: number) => ( ); diff --git a/src/editor/slider/ibiz-slider/ibiz-slider.tsx b/src/editor/slider/ibiz-slider/ibiz-slider.tsx index 492da5361..97a17d6e9 100644 --- a/src/editor/slider/ibiz-slider/ibiz-slider.tsx +++ b/src/editor/slider/ibiz-slider/ibiz-slider.tsx @@ -169,6 +169,7 @@ export const IBizSlider = defineComponent({ min={this.min} range={this.range} onChange={this.handleChange} + {...this.$attrs} > {{ button: () => { diff --git a/src/editor/stepper/ibiz-stepper/ibiz-stepper.tsx b/src/editor/stepper/ibiz-stepper/ibiz-stepper.tsx index f8d405788..105bafa37 100644 --- a/src/editor/stepper/ibiz-stepper/ibiz-stepper.tsx +++ b/src/editor/stepper/ibiz-stepper/ibiz-stepper.tsx @@ -112,6 +112,7 @@ export const IBizStepper = defineComponent({ onChange={this.handleChange} onFocus={this.onFocus} onBlur={this.onBlur} + {...this.$attrs} >, ]; } diff --git a/src/editor/switch/ibiz-switch/ibiz-switch.tsx b/src/editor/switch/ibiz-switch/ibiz-switch.tsx index 295c4f59a..1d3239e8b 100644 --- a/src/editor/switch/ibiz-switch/ibiz-switch.tsx +++ b/src/editor/switch/ibiz-switch/ibiz-switch.tsx @@ -57,6 +57,7 @@ export const IBizSwitch = defineComponent({ v-model={this.currentVal} disabled={this.disabled || this.readonly} onChange={this.handleChange} + {...this.$attrs} > ); diff --git a/src/editor/text-box/ibiz-input-number/ibiz-input-number.tsx b/src/editor/text-box/ibiz-input-number/ibiz-input-number.tsx index a17e1a83e..af46fe4c6 100644 --- a/src/editor/text-box/ibiz-input-number/ibiz-input-number.tsx +++ b/src/editor/text-box/ibiz-input-number/ibiz-input-number.tsx @@ -110,6 +110,7 @@ export const IBizInputNumber = defineComponent({ onFocus={this.onFocus} onBlur={this.onBlur} onInput={this.handleChange} + {...this.$attrs} >, unitName && {unitName}, ]; diff --git a/src/editor/text-box/input/input.tsx b/src/editor/text-box/input/input.tsx index 2b3a3ccae..590122578 100644 --- a/src/editor/text-box/input/input.tsx +++ b/src/editor/text-box/input/input.tsx @@ -175,6 +175,7 @@ export const IBizInput = defineComponent({ autocomplete='new-password' clearable onClear={this.onClear} + {...this.$attrs} > {slots} diff --git a/src/editor/upload/ibiz-file-upload/ibiz-file-upload.tsx b/src/editor/upload/ibiz-file-upload/ibiz-file-upload.tsx index aae4f5137..76564070b 100644 --- a/src/editor/upload/ibiz-file-upload/ibiz-file-upload.tsx +++ b/src/editor/upload/ibiz-file-upload/ibiz-file-upload.tsx @@ -100,6 +100,7 @@ export const IBizFileUpload = defineComponent({ before-read={this.beforeUpload} after-read={this.afterRead} before-delete={this.onRemove} + {...this.$attrs} > {{ default: () => { diff --git a/src/editor/upload/ibiz-image-select/ibiz-image-select.tsx b/src/editor/upload/ibiz-image-select/ibiz-image-select.tsx index abf54dbee..c0c23cf3a 100644 --- a/src/editor/upload/ibiz-image-select/ibiz-image-select.tsx +++ b/src/editor/upload/ibiz-image-select/ibiz-image-select.tsx @@ -55,6 +55,7 @@ export const IBizImageSelect = defineComponent({ max-count={1} deletable={false} readonly + {...this.$attrs} > {{ 'preview-cover': (file: IData) => { diff --git a/src/editor/upload/ibiz-image-upload/ibiz-image-upload.tsx b/src/editor/upload/ibiz-image-upload/ibiz-image-upload.tsx index 056122d02..7b1115035 100644 --- a/src/editor/upload/ibiz-image-upload/ibiz-image-upload.tsx +++ b/src/editor/upload/ibiz-image-upload/ibiz-image-upload.tsx @@ -80,6 +80,7 @@ export const IBizImageUpload = defineComponent({ before-read={this.beforeUpload} after-read={this.afterRead} before-delete={this.onRemove} + {...this.$attrs} > {{ 'preview-cover': (file: IData) => { -- Gitee