diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4fed79fb0b444dc2fc9be8e8c1e65c51e6a0ece9..9d60716e4e496c3b34688b37290c139e76a161ee 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 39f0cfeb86fca6346ab8bcab47bdd4cbb47cfccd..17618f3087a0959531b3e9573f28d3f7230a580d 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 375c8fbd8c53a6b383a18abfb2a8f84da39e3317..76d3316517924d0e22102fd49dddf8040bba8f26 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 a0f92e4ad47db8a3266e1a376640f62f0bb73d25..33cc1ce4e712292c3de6591229db6b6e9e7ecfb7 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 492da53619e6462a6c0289ff66757cc9ecbf7540..97a17d6e9f5db04d6b35b2e3ec6e624f244971e9 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 f8d4057883458eac52809ef749ab851eed9c072a..105bafa3749c763e8d127c2c7edd93bfbf7bfe15 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 295c4f59a080ad9db13dfdff380121b156403486..1d3239e8b7d566dab316f1cb4e64d2e574a94cb4 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 a17e1a83e1d8aa141277028284fe847c8c07e8cb..af46fe4c67fe7b8229bc34dc7f9c9dc2782d8fcd 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 2b3a3ccae64096f7810af419a65ebbb6c7d7f446..5901225784f858e89898455ddbe8a4fe69b234c3 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 aae4f513726a3fb834bb0695660d3f0f4de22e00..76564070b3519a204597fd4529e781d3892467ee 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 abf54dbeecadd69237d1bd9e728261656d68c3e6..c0c23cf3a70236121b8b3b4a517e2ad1342bc776 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 056122d02c0ac6db83e60d7babb78c791ea0c281..7b11150352886b9815e163817507d3b506de02d3 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) => {