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