diff --git a/CHANGELOG.md b/CHANGELOG.md index d93ed3d040d1a360463e00524753c9b32ee1516f..db530948747bafd4f3c1b3a2ec3ed65736203714 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,8 +15,15 @@ ### Change +- 更新所有编辑器在进行属性透传时,class和style属性不往下透传 - 卡片部件样式调整,高度撑满视图内容 +### Fixed + +- 修复面板直接内容为视频类型时,配置的参数未识别的问题 +- 修复搜索表单无搜索按钮的问题 +- 修复页面标题组件未绘制的问题 + ## [0.7.41-alpha.19] - 2025-10-16 ### Added diff --git a/src/common/carousel/carousel.tsx b/src/common/carousel/carousel.tsx index 01170ab06f80fa661d7bc56de0e8dd08121db9d8..68cb7d1332043cc1498546bc0b2fb52242ba7681 100644 --- a/src/common/carousel/carousel.tsx +++ b/src/common/carousel/carousel.tsx @@ -1,5 +1,5 @@ import { defineComponent, PropType } from 'vue'; -import { useNamespace } from '@ibiz-template/vue3-util'; +import { useNamespace, useFilterAttribute } from '@ibiz-template/vue3-util'; import './carousel.scss'; import { ISysImage } from '@ibiz/model-core'; import { IIcon } from '@ibiz-template/runtime'; @@ -49,7 +49,7 @@ export const IBizCarousel = defineComponent({ lazy-render show-indicators={this.showIndicators} touchable={this.touchable} - {...this.attrs} + {...useFilterAttribute(this.$attrs)} > {this.images && this.images.map(image => { diff --git a/src/common/date-range-picker/date-range-picker.tsx b/src/common/date-range-picker/date-range-picker.tsx index 0c7e4de111d7bdab2ba44925f4f673da131ce3c9..a20a52a04cd77acd3523010717925ce4aa43863a 100644 --- a/src/common/date-range-picker/date-range-picker.tsx +++ b/src/common/date-range-picker/date-range-picker.tsx @@ -10,7 +10,7 @@ import { ref, watch, } from 'vue'; -import { useNamespace } from '@ibiz-template/vue3-util'; +import { useNamespace, useFilterAttribute } from '@ibiz-template/vue3-util'; import dayjs from 'dayjs'; import './date-range-picker.scss'; import { RangePicker } from './components/range-picker/range-picker'; @@ -421,7 +421,7 @@ export const IBizDateRangeCalendar = defineComponent({ max-date={this.maxDate} onSelect={this.onSelect} onConfirm={this.onConfirm} - {...this.$attrs} + {...useFilterAttribute(this.$attrs)} > {{ title: () => { diff --git a/src/common/rawitem/rawitem.tsx b/src/common/rawitem/rawitem.tsx index 170af5d9d8449e768e2064dcccc87a5187f5d429..66983e0f2b733fd376aad3322f80b02ff417d564 100644 --- a/src/common/rawitem/rawitem.tsx +++ b/src/common/rawitem/rawitem.tsx @@ -5,6 +5,7 @@ import { IHtmlItem, IPanelRawItem, IRawItemContainer, + IRawItemParam, ITextItem, IUnkownItem, } from '@ibiz/model-core'; @@ -93,6 +94,22 @@ export const IBizRawItem = defineComponent({ // 文本类型显示值 const rawItemText: Ref = ref(''); + // 获取直接内容参数 + const getParamsValue = (key: string): string | undefined => { + let value: string | undefined; + const params: IRawItemParam[] | undefined = rawItem?.rawItemParams; + if (!params) { + ibiz.log.error(`未配置视频播放参数:${key}}`); + return undefined; + } + params.forEach((item: IRawItemParam) => { + if (item.key === key) { + value = item.value; + } + }); + return value; + }; + // 转换各类值操作 const convertValue = () => { // 图片类型 @@ -149,7 +166,13 @@ export const IBizRawItem = defineComponent({ rawConfig = func(); switch (rawItemType.value) { case 'VIDEO': - Object.assign(playerParams.value, rawConfig); + Object.assign(playerParams.value, rawConfig, { + path: getParamsValue('path'), + autoplay: getParamsValue('autoplay'), + mute: getParamsValue('mute'), + replay: getParamsValue('replay'), + showcontrols: getParamsValue('showcontrols'), + }); break; case 'DIVIDER': Object.assign(dividerParams.value, rawConfig); diff --git a/src/control/form/form/form.tsx b/src/control/form/form/form.tsx index 6a9000c48320e3bf5a88eb2971f87d2fca70a994..c5e8273483e1513aa0d72a44477f05b3d6d22c81 100644 --- a/src/control/form/form/form.tsx +++ b/src/control/form/form/form.tsx @@ -156,14 +156,20 @@ export const FormControl = defineComponent({ } else { const key = controlPanel ? model.name! : 'default'; // 树自己绘制,要传递额外的参数 - slots[key] = (): VNode => { - return ( + slots[key] = (): IData[] => { + const result: IData[] = []; + const tempForm = ( {this.c.model.deformPages?.map(page => { return this.renderByDetailType(page); })} ); + result.push(tempForm); + if (this.$slots.searchFooter) { + result.push(this.$slots.searchFooter()); + } + return result; }; } } diff --git a/src/control/form/search-form/search-form.tsx b/src/control/form/search-form/search-form.tsx index 526ba86db90d908c201aa8f753b5b6754eb4d165..e468078829036e3a9b23c1b94cf751d40bbcfd48 100644 --- a/src/control/form/search-form/search-form.tsx +++ b/src/control/form/search-form/search-form.tsx @@ -59,6 +59,9 @@ export const SearchFormControl = defineComponent({ {{ ...this.$slots, searchFooter: () => { + if (this.c.model.searchButtonStyle === 'NONE') { + return null; + } return (
{ibiz.i18n.t('control.form.searchForm.search')} - this.c.reset()} - > - {ibiz.i18n.t('control.form.searchForm.reset')} - + {this.c.model.searchButtonStyle !== 'SEARCHONLY' && ( + this.c.reset()} + > + {ibiz.i18n.t('control.form.searchForm.reset')} + + )}
); }, 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 87ae280e4b38b8e00be48ac370ed53d6b87056a5..b598148492648908814a315c054188b44f4dcffb 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 @@ -4,6 +4,7 @@ import { getEditorEmits, useFocusAndBlur, useNamespace, + useFilterAttribute, } from '@ibiz-template/vue3-util'; import { isNil, equals } from 'ramda'; import './ibiz-checkbox-list.scss'; @@ -173,7 +174,7 @@ export const IBizCheckboxList = defineComponent({ direction='horizontal' v-model={this.selectArray} onChange={this.onSelectArrayChange} - {...this.$attrs} + {...useFilterAttribute(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 74500bd6633ffb70ed1fa91daf906e9ecca17cdb..a4ff5ab955bb46df15cd610372d9f191f7c8a23d 100644 --- a/src/editor/radio-button-list/ibiz-radio/ibiz-radio.tsx +++ b/src/editor/radio-button-list/ibiz-radio/ibiz-radio.tsx @@ -4,6 +4,7 @@ import { getRadioProps, useFocusAndBlur, useNamespace, + useFilterAttribute, } from '@ibiz-template/vue3-util'; import './ibiz-radio.scss'; import { RadioButtonListEditorController } from '../radio-button-list.controller'; @@ -92,7 +93,7 @@ export const IBizRadio = defineComponent({ class={this.ns.e('group')} v-model={this.currentVal} direction='horizontal' - {...this.$attrs} + {...useFilterAttribute(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 eeac4893a017b5dc8838238f435345adea2ec0e2..642ebf690c58e79d950aaaab2eeafaafe9790613 100644 --- a/src/editor/slider/ibiz-slider/ibiz-slider.tsx +++ b/src/editor/slider/ibiz-slider/ibiz-slider.tsx @@ -4,6 +4,7 @@ import { getSliderProps, useFocusAndBlur, useNamespace, + useFilterAttribute, } from '@ibiz-template/vue3-util'; import { toNumber } from 'lodash-es'; import { SliderEditorController } from '../slider-editor.controller'; @@ -200,7 +201,7 @@ export const IBizSlider = defineComponent({ min={this.min} range={this.range} onChange={this.handleChange} - {...this.$attrs} + {...useFilterAttribute(this.$attrs)} > {{ button: () => { @@ -236,7 +237,7 @@ export const IBizSlider = defineComponent({ size={this.circleSize} // 显示直径 layer-color='lightgray' stroke-width='100' - {...this.$attrs} + {...useFilterAttribute(this.$attrs)} > {{ default: () => { diff --git a/src/editor/stepper/ibiz-stepper/ibiz-stepper.tsx b/src/editor/stepper/ibiz-stepper/ibiz-stepper.tsx index c7e2dc3d5c98af0cf5779775ebc6797fffbb88be..5fbbe25bacd9a3f6d3962dad019dc53f37d23123 100644 --- a/src/editor/stepper/ibiz-stepper/ibiz-stepper.tsx +++ b/src/editor/stepper/ibiz-stepper/ibiz-stepper.tsx @@ -3,6 +3,7 @@ import { getEditorEmits, getStepperProps, useNamespace, + useFilterAttribute, } from '@ibiz-template/vue3-util'; import { toNumber } from 'lodash-es'; import { StepperEditorController } from '../stepper-editor.controller'; @@ -134,7 +135,7 @@ export const IBizStepper = defineComponent({ onChange={this.handleChange} onFocus={this.onFocus} onBlur={this.onBlur} - {...this.$attrs} + {...useFilterAttribute(this.$attrs)} >, ]; } diff --git a/src/editor/switch/ibiz-switch/ibiz-switch.tsx b/src/editor/switch/ibiz-switch/ibiz-switch.tsx index 825dff31a0aef1ec0fe1706ad46fcbf1d3b8f0f6..f88a9a444bf85d35e4bfa63105a6785c693ec3fd 100644 --- a/src/editor/switch/ibiz-switch/ibiz-switch.tsx +++ b/src/editor/switch/ibiz-switch/ibiz-switch.tsx @@ -4,6 +4,7 @@ import { getSwitchProps, useFocusAndBlur, useNamespace, + useFilterAttribute, } from '@ibiz-template/vue3-util'; import './ibiz-switch.scss'; import { SwitchEditorController } from '../switch-editor.controller'; @@ -66,7 +67,7 @@ export const IBizSwitch = defineComponent({ v-model={this.currentVal} disabled={this.disabled || this.readonly} onChange={this.handleChange} - {...this.$attrs} + {...useFilterAttribute(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 6eb42ecd31046573c770b34f8ce0daf20b9b5866..14fba590e5cbb21117a82bfc3955a8b219c1c2f6 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 @@ -3,6 +3,7 @@ import { getEditorEmits, getInputNumberProps, useNamespace, + useFilterAttribute, } from '@ibiz-template/vue3-util'; import './ibiz-input-number.scss'; import { floor } from 'lodash-es'; @@ -118,7 +119,7 @@ export const IBizInputNumber = defineComponent({ onFocus={this.onFocus} onBlur={this.onBlur} onInput={this.handleChange} - {...this.$attrs} + {...useFilterAttribute(this.$attrs)} >, unitName && {unitName}, ]; diff --git a/src/editor/text-box/input/input.tsx b/src/editor/text-box/input/input.tsx index 206aad4398bafe5a8fa19ec759e57f8e412cfe41..b402c6b516d29b6856e41c5ab089fc736d77fed8 100644 --- a/src/editor/text-box/input/input.tsx +++ b/src/editor/text-box/input/input.tsx @@ -5,6 +5,7 @@ import { getEditorEmits, getInputProps, useNamespace, + useFilterAttribute, } from '@ibiz-template/vue3-util'; import './input.scss'; import { TextBoxEditorController } from '../text-box-editor.controller'; @@ -221,7 +222,7 @@ export const IBizInput = defineComponent({ autocomplete='new-password' clearable onClear={this.onClear} - {...this.$attrs} + {...useFilterAttribute(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 822631b4a4cbdac0c4db796db9c47d9e210d0a19..3c6b772c9d71a26cb60b4f034ab3516cd3c39988 100644 --- a/src/editor/upload/ibiz-file-upload/ibiz-file-upload.tsx +++ b/src/editor/upload/ibiz-file-upload/ibiz-file-upload.tsx @@ -3,6 +3,7 @@ import { getEditorEmits, getUploadProps, useNamespace, + useFilterAttribute, } from '@ibiz-template/vue3-util'; import './ibiz-file-upload.scss'; import { useVanUpload } from '../use/use-van-upload'; @@ -119,7 +120,7 @@ export const IBizFileUpload = defineComponent({ before-read={this.beforeUpload} after-read={this.afterRead} before-delete={this.onRemove} - {...this.$attrs} + {...useFilterAttribute(this.$attrs)} > {{ default: () => { diff --git a/src/editor/upload/ibiz-image-cropping/ibiz-image-cropping.tsx b/src/editor/upload/ibiz-image-cropping/ibiz-image-cropping.tsx index 46a4dfc4f32509fa62aff38eacb102ab303655c3..79cb4e3933f0ededaf8a932582347943c9fe12d2 100644 --- a/src/editor/upload/ibiz-image-cropping/ibiz-image-cropping.tsx +++ b/src/editor/upload/ibiz-image-cropping/ibiz-image-cropping.tsx @@ -4,6 +4,7 @@ import { getEditorEmits, getUploadProps, useNamespace, + useFilterAttribute, } from '@ibiz-template/vue3-util'; import './ibiz-image-cropping.scss'; import { showImagePreview } from 'vant'; @@ -153,6 +154,7 @@ export const IBizImageCropping = defineComponent({
{{ 'preview-cover': (file: IData) => { 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 69eea0d0f033412bfa6a1c1054a3798495906792..79e89b9be27a3fdf0c9e2c15446dba7c5fce26e5 100644 --- a/src/editor/upload/ibiz-image-select/ibiz-image-select.tsx +++ b/src/editor/upload/ibiz-image-select/ibiz-image-select.tsx @@ -4,6 +4,7 @@ import { getEditorEmits, getUploadProps, useNamespace, + useFilterAttribute, } from '@ibiz-template/vue3-util'; import './ibiz-image-select.scss'; import { showImagePreview } from 'vant'; @@ -75,7 +76,7 @@ export const IBizImageSelect = defineComponent({ }, render() { return ( -
+
{{ '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 4c2c05d80512b4552e52daafeb151353cccac8e8..97de8407b349e8600003e4f0860f20a036369b2e 100644 --- a/src/editor/upload/ibiz-image-upload/ibiz-image-upload.tsx +++ b/src/editor/upload/ibiz-image-upload/ibiz-image-upload.tsx @@ -4,6 +4,7 @@ import { getEditorEmits, getUploadProps, useNamespace, + useFilterAttribute, } from '@ibiz-template/vue3-util'; import './ibiz-image-upload.scss'; import { showImagePreview } from 'vant'; @@ -99,6 +100,7 @@ export const IBizImageUpload = defineComponent({
{{ 'preview-cover': (file: IData) => { diff --git a/src/panel-component/index.ts b/src/panel-component/index.ts index 4b3819d11d5db41cb643009cf4323e7902f71a3f..5c765eacf592b9759c3016e297f7bd4f52818790 100644 --- a/src/panel-component/index.ts +++ b/src/panel-component/index.ts @@ -15,7 +15,7 @@ import { IBizPanelContainerImage, IBizPanelItemRender, IBizAuthWxmpQrcode, - IBizTeleportPlaceholder, + IBizPanelCtrlViewPageCaption, } from '@ibiz-template/vue3-util'; import IBizViewContentPanelContainer from './view-content-panel-container'; import IBizViewHeaderPanelContainer from './view-header-panel-container'; @@ -37,6 +37,7 @@ import IBizIndexBlankPlaceholder from './index-blank-placeholder'; export const IBizPanelComponents = { install: (v: App): void => { + v.use(IBizPanelCtrlViewPageCaption); v.use(IBizPanelContainer); v.use(IBizPanelCtrlPos); v.use(IBizNavPosIndex);