From a5f65979405e5f484f209b9d1175c1f90e229ac7 Mon Sep 17 00:00:00 2001 From: jianglinjun Date: Tue, 13 Aug 2024 20:54:16 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E6=8C=89=E9=92=AE=EF=BC=8C=E6=9B=B4=E6=96=B0=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6=E6=B1=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vitepress/config.ts | 4 + docs/guide/custom-btn.md | 63 ++++++ docs/public/img/custombtn1.png | Bin 0 -> 4554 bytes docs/public/img/custombtn2.png | Bin 0 -> 5030 bytes docs/public/img/custombtn3.png | Bin 0 -> 5211 bytes docs/public/img/custombtn4.png | Bin 0 -> 5034 bytes docs/public/img/custombtn5.png | Bin 0 -> 4846 bytes docs/public/img/custombtn6.png | Bin 0 -> 4010 bytes .../component/custom-button1.tsx | 30 +++ .../component/custom-button2.tsx | 45 +++++ .../component/custom-button3.tsx | 65 ++++++ .../component/custom-button4.tsx | 35 ++++ .../component/custom-button5.tsx | 35 ++++ .../component/custom-button6.tsx | 65 ++++++ src/custom-button/component/index.ts | 6 + src/custom-button/custom-button.controller.ts | 164 ++++++++++++++++ src/custom-button/custom-button.provider.ts | 21 ++ src/custom-button/custom-button.scss | 44 +++++ src/custom-button/custom-button.state.ts | 19 ++ src/custom-button/custom-button.tsx | 185 ++++++++++++++++++ src/custom-button/index.ts | 10 + src/index.ts | 6 +- src/{rawitem-slider => percent-pond}/index.ts | 10 +- .../percent-pond.controller.ts} | 6 +- .../percent-pond.provider.ts} | 12 +- .../percent-pond.scss} | 2 +- .../percent-pond.tsx} | 12 +- 27 files changed, 816 insertions(+), 23 deletions(-) create mode 100644 docs/guide/custom-btn.md create mode 100644 docs/public/img/custombtn1.png create mode 100644 docs/public/img/custombtn2.png create mode 100644 docs/public/img/custombtn3.png create mode 100644 docs/public/img/custombtn4.png create mode 100644 docs/public/img/custombtn5.png create mode 100644 docs/public/img/custombtn6.png create mode 100644 src/custom-button/component/custom-button1.tsx create mode 100644 src/custom-button/component/custom-button2.tsx create mode 100644 src/custom-button/component/custom-button3.tsx create mode 100644 src/custom-button/component/custom-button4.tsx create mode 100644 src/custom-button/component/custom-button5.tsx create mode 100644 src/custom-button/component/custom-button6.tsx create mode 100644 src/custom-button/component/index.ts create mode 100644 src/custom-button/custom-button.controller.ts create mode 100644 src/custom-button/custom-button.provider.ts create mode 100644 src/custom-button/custom-button.scss create mode 100644 src/custom-button/custom-button.state.ts create mode 100644 src/custom-button/custom-button.tsx create mode 100644 src/custom-button/index.ts rename src/{rawitem-slider => percent-pond}/index.ts (44%) rename src/{rawitem-slider/rawitem-slider.controller.ts => percent-pond/percent-pond.controller.ts} (76%) rename src/{rawitem-slider/rawitem-slider.provider.ts => percent-pond/percent-pond.provider.ts} (45%) rename src/{rawitem-slider/rawitem-slider.scss => percent-pond/percent-pond.scss} (98%) rename src/{rawitem-slider/rawitem-slider.tsx => percent-pond/percent-pond.tsx} (84%) diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 75dc30d..98e3e4d 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -83,6 +83,10 @@ export default defineConfig({ text: '实时时间', link: '/guide/screen-real-time', }, + { + text: '面板按钮', + link: '/guide/custom-btn', + }, ], }, ], diff --git a/docs/guide/custom-btn.md b/docs/guide/custom-btn.md new file mode 100644 index 0000000..250d663 --- /dev/null +++ b/docs/guide/custom-btn.md @@ -0,0 +1,63 @@ +# 轮播列表 + +大屏按钮插件主要是用于在大屏模式下对布局面板里面的按钮进行样式优化,通过配置参数,可以得到多种外观的按钮。 + +## 效果呈现 + +通过配置按钮参数buttonName,展现不同样式的按钮。buttonName的值与效果图如下: + +* CustomButton1 + + ![image-20240813200412990](../public/img/custombtn1.png) + +* CustomButton2 + + ![image-20240813200256106](../public/img/custombtn2.png) + +* CustomButton3 + + ![image-20240813200412990](../public/img/custombtn3.png) + +* CustomButton4 + + ![image-20240813200412990](../public/img/custombtn4.png) + +* CustomButton5 + + ![image-20240813200412990](../public/img/custombtn5.png) + +* CustomButton6 + + ![image-20240813200412990](../public/img/custombtn6.png) + + +## 插件 + +该插件隶属于自定义部件插件(基于面板按钮进行扩展),下方数据导入应用即可使用 + +::: details 点我查看代码 + +```json +[ + { + "plugintype": "CUSTOM", + "codename": "UsrPFPlugin0813816947", + "plugintag": "CUSTOM_BTN", + "pssyspfpluginname": "自定义按钮" + } +] +``` + +::: + +## 配置 + +| 参数 | 值 | 说明 | +| ----------- | ----------------- | ---------------------- | +| buttonName | CustomButton[1~6] | 用来确定按钮的主要形状 | +| borderColor | string | 用来确定按钮的边框色 | +| color | string | 用来确定按钮的文字颜色 | +| bgColor | string | 用来确定按钮的背景颜色 | + +*注:未设置的颜色则使用默认主题颜色* + diff --git a/docs/public/img/custombtn1.png b/docs/public/img/custombtn1.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3b02db4c91047df0661589b769aa43028c10a6 GIT binary patch literal 4554 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 literal 0 HcmV?d00001 diff --git a/docs/public/img/custombtn4.png b/docs/public/img/custombtn4.png new file mode 100644 index 0000000000000000000000000000000000000000..860f3be9a2f6dd399aa16522d5bbfbbe7ad036a0 GIT binary patch literal 5034 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 literal 0 HcmV?d00001 diff --git a/src/custom-button/component/custom-button1.tsx b/src/custom-button/component/custom-button1.tsx new file mode 100644 index 0000000..aa38f0c --- /dev/null +++ b/src/custom-button/component/custom-button1.tsx @@ -0,0 +1,30 @@ +import { defineComponent } from 'vue'; + +export const CustomButton1 = defineComponent({ + name: 'CustomButton1', + render() { + return ( + + + + + + + + + ); + }, +}); diff --git a/src/custom-button/component/custom-button2.tsx b/src/custom-button/component/custom-button2.tsx new file mode 100644 index 0000000..e53f939 --- /dev/null +++ b/src/custom-button/component/custom-button2.tsx @@ -0,0 +1,45 @@ +import { defineComponent } from 'vue'; + +export const CustomButton2 = defineComponent({ + name: 'CustomButton2', + render() { + return ( + + + + + + + + + + + + ); + }, +}); diff --git a/src/custom-button/component/custom-button3.tsx b/src/custom-button/component/custom-button3.tsx new file mode 100644 index 0000000..7542ea9 --- /dev/null +++ b/src/custom-button/component/custom-button3.tsx @@ -0,0 +1,65 @@ +import { defineComponent } from 'vue'; + +export const CustomButton3 = defineComponent({ + name: 'CustomButton3', + render() { + return ( + + + + + + + + + + + + + + + + ); + }, +}); diff --git a/src/custom-button/component/custom-button4.tsx b/src/custom-button/component/custom-button4.tsx new file mode 100644 index 0000000..3eaa976 --- /dev/null +++ b/src/custom-button/component/custom-button4.tsx @@ -0,0 +1,35 @@ +import { defineComponent } from 'vue'; + +export const CustomButton4 = defineComponent({ + name: 'CustomButton4', + render() { + return ( + + + + + + + + + + ); + }, +}); diff --git a/src/custom-button/component/custom-button5.tsx b/src/custom-button/component/custom-button5.tsx new file mode 100644 index 0000000..6e7815f --- /dev/null +++ b/src/custom-button/component/custom-button5.tsx @@ -0,0 +1,35 @@ +import { defineComponent } from 'vue'; + +export const CustomButton5 = defineComponent({ + name: 'CustomButton5', + render() { + return ( + + + + + + + + + + ); + }, +}); diff --git a/src/custom-button/component/custom-button6.tsx b/src/custom-button/component/custom-button6.tsx new file mode 100644 index 0000000..dec9d21 --- /dev/null +++ b/src/custom-button/component/custom-button6.tsx @@ -0,0 +1,65 @@ +import { defineComponent } from 'vue'; + +export const CustomButton6 = defineComponent({ + name: 'CustomButton6', + render() { + return ( + + + + + + + + + + + + + + + + ); + }, +}); diff --git a/src/custom-button/component/index.ts b/src/custom-button/component/index.ts new file mode 100644 index 0000000..bea17cb --- /dev/null +++ b/src/custom-button/component/index.ts @@ -0,0 +1,6 @@ +export { CustomButton1 } from './custom-button1'; +export { CustomButton2 } from './custom-button2'; +export { CustomButton3 } from './custom-button3'; +export { CustomButton4 } from './custom-button4'; +export { CustomButton5 } from './custom-button5'; +export { CustomButton6 } from './custom-button6'; diff --git a/src/custom-button/custom-button.controller.ts b/src/custom-button/custom-button.controller.ts new file mode 100644 index 0000000..eb2f5d9 --- /dev/null +++ b/src/custom-button/custom-button.controller.ts @@ -0,0 +1,164 @@ +import { + PanelController, + PanelItemController, + PanelNotifyState, + UIActionButtonState, + UIActionUtil, + ViewLayoutPanelController, +} from '@ibiz-template/runtime'; +import { IPanelButton } from '@ibiz/model-core'; +import { CustomButtonState } from './custom-button.state'; + +export class CustomBtnController extends PanelItemController { + declare state: CustomButtonState; + + protected createState(): CustomButtonState { + return new CustomButtonState(this.parent?.state); + } + + /** + * 面板控制器 + * + * @type {ViewLayoutPanelController} + * @memberof PanelButtonController + */ + declare panel: ViewLayoutPanelController; + + /** + * 父容器数据对象数据 + * @author lxm + * @date 2023-07-15 01:33:58 + * @readonly + * @type {IData} + */ + get data(): IData { + return this.dataParent.data; + } + + /** + * Creates an instance of PanelButtonController. + * @param {IPanelButton} model + * @param {PanelController} panel + * @param {PanelItemController} [parent] + * @memberof PanelButtonController + */ + constructor( + model: IPanelButton, + panel: PanelController, + parent?: PanelItemController, + ) { + super(model, panel, parent); + this.state.uiActionState = this.createUIActionState(); + } + + /** + * 初始化 + * + * @return {*} {Promise} + * @memberof PanelButtonController + */ + async onInit(): Promise { + await super.onInit(); + this.updateButtonState(); + } + + /** + * 创建界面行为状态对象 + * + * @protected + * @return {*} {PanelButtonState} + * @memberof PanelButtonController + */ + protected createUIActionState(): UIActionButtonState { + const { uiactionId, name } = this.model; + return new UIActionButtonState( + name!, + this.panel.context.srfappid!, + uiactionId, + ); + } + + /** + * 面板数据变更通知(由面板控制器调用) + * + * @param {string[]} names + * @memberof PanelButtonController + */ + async dataChangeNotify(names: string[]): Promise { + await this.updateButtonState(); + super.dataChangeNotify(names); + } + + /** + * 面板状态变更通知 + * + * @param {PanelNotifyState} _state + * @memberof PanelButtonController + */ + async panelStateNotify(_state: PanelNotifyState): Promise { + await this.updateButtonState(); + super.panelStateNotify(_state); + } + + /** + * 更新按钮权限状态 + * + * @memberof PanelButtonController + */ + async updateButtonState(): Promise { + await this.state.uiActionState.update( + this.panel.context, + this.data, + this.panel.model.appDataEntityId, + ); + } + + /** + * 行为点击 + * - 在行为参数中传递panelDataParent(面板项数据父容器标识) + * @param {MouseEvent} event + * @return {*} {Promise} + * @memberof PanelButtonController + */ + async onActionClick(event: MouseEvent): Promise { + const { uiactionId, actionType } = this.model; + if (actionType === 'NONE') { + return; + } + event.stopPropagation(); + event.preventDefault(); + await UIActionUtil.execAndResolved( + uiactionId!, + { + context: this.panel.context, + params: { + panelDataParent: this.dataParent.model.id!, + ...this.panel.params, + }, + data: [this.data], + view: this.panel.view, + event, + noWaitRoute: true, + }, + this.model.appId, + ); + } + + calcItemVisible(data: IData): void { + // 权限不显示时就一定不显示 + if (this.state.uiActionState.visible === false) { + this.state.visible = false; + return; + } + super.calcItemVisible(data); + } + + calcItemDisabled(data: IData): void { + // 权限不显示时就一定禁用 + if (this.state.uiActionState.disabled === true) { + this.state.disabled = true; + return; + } + super.calcItemDisabled(data); + } +} diff --git a/src/custom-button/custom-button.provider.ts b/src/custom-button/custom-button.provider.ts new file mode 100644 index 0000000..d357692 --- /dev/null +++ b/src/custom-button/custom-button.provider.ts @@ -0,0 +1,21 @@ +import { + IPanelItemProvider, + PanelController, + PanelItemController, +} from '@ibiz-template/runtime'; +import { IPanelItem } from '@ibiz/model-core'; +import { CustomBtnController } from './custom-button.controller'; + +export class CustomBtnProvider implements IPanelItemProvider { + component: string = 'CustomButton'; + + async createController( + panelItem: IPanelItem, + panel: PanelController, + parent: PanelItemController | undefined, + ): Promise { + const c = new CustomBtnController(panelItem, panel, parent); + await c.init(); + return c; + } +} diff --git a/src/custom-button/custom-button.scss b/src/custom-button/custom-button.scss new file mode 100644 index 0000000..dff5b86 --- /dev/null +++ b/src/custom-button/custom-button.scss @@ -0,0 +1,44 @@ +/* stylelint-disable custom-property-pattern */ +@include b('panel-button'){ + @include when('custon-btn'){ + padding: 0; + } + } + @include b('panel-button-custon-btn'){ + position:relative; + width: 100%; + height: 100%; + padding: getCssVar(spacing-tight); + color: var(--svgColor,getCssVar(screen-dashboard,text-color)); + text-align: center; + cursor: pointer; + + >svg{ + position: absolute; + top: 0; + left: 0; + z-index: -1; + } + + .dv-button-svg { + display: block; + flex: 1 1 0%; + width: 100%; + height: 100%; + filter: drop-shadow(var(--svgBorderColor, getCssVar(screen-dashboard,primary-color)) 0 0 2px); + } + + .dv-button-svg-bg { + opacity: var(--svgBgOpacity); + fill: var(--svgBgColor,getCssVar(screen-dashboard,primary-color)); + stroke: transparent; + stroke-width: 0; + } + + .dv-button-svg-line { + fill: transparent; + stroke: var(--svgColor,getCssVar(screen-dashboard,primary-color)); + stroke-width: 2; + vector-effect: non-scaling-stroke; + } + } \ No newline at end of file diff --git a/src/custom-button/custom-button.state.ts b/src/custom-button/custom-button.state.ts new file mode 100644 index 0000000..9e0c15e --- /dev/null +++ b/src/custom-button/custom-button.state.ts @@ -0,0 +1,19 @@ +import { PanelItemState, UIActionButtonState } from '@ibiz-template/runtime'; + +export class CustomButtonState extends PanelItemState { + /** + * 加载中 + * @author lxm + * @date 2023-07-21 10:11:21 + * @type {boolean} + */ + loading: boolean = false; + + /** + * 界面行为状态 + * @author lxm + * @date 2023-07-21 03:34:27 + * @type {UIActionButtonState} + */ + uiActionState!: UIActionButtonState; +} diff --git a/src/custom-button/custom-button.tsx b/src/custom-button/custom-button.tsx new file mode 100644 index 0000000..50828f7 --- /dev/null +++ b/src/custom-button/custom-button.tsx @@ -0,0 +1,185 @@ +import { useNamespace } from '@ibiz-template/vue3-util'; +import { IPanelButton } from '@ibiz/model-core'; +import { + PropType, + computed, + defineComponent, + h, + ref, + resolveComponent, +} from 'vue'; +import { + CustomButton1, + CustomButton2, + CustomButton3, + CustomButton4, + CustomButton5, + CustomButton6, +} from './component'; +import { CustomBtnController } from './custom-button.controller'; +import { showTitle } from '@ibiz-template/core'; +import './custom-button.scss' + +export const CustomButton = defineComponent({ + name: 'CustomButton', + components: { + CustomButton1, + CustomButton2, + CustomButton3, + CustomButton4, + CustomButton5, + CustomButton6, + }, + props: { + modelData: { + type: Object as PropType, + required: true, + }, + controller: { + type: CustomBtnController, + required: true, + }, + }, + setup(props) { + const ns = useNamespace('panel-button'); + + const { + caption, + captionItemName, + renderMode, + showCaption, + sysImage, + codeName, + itemStyle, + tooltip, + buttonCssStyle, + } = props.modelData; + + const { panel, state } = props.controller; + + const tempStyle = ref(''); + const svgStyle = ref({}); + + if (buttonCssStyle) { + tempStyle.value = buttonCssStyle; + } + + // 由于模型里参数没有,这里先写死,总共4个参数 + // 边框形状,border颜色,背景颜色,文字颜色,未设置时使用主题色 + const svgColor = ref('lightblue'); + const svgBorderColor = ref(); + const svgShape = ref('CustomButton5'); + const svgBgColor = ref(''); + const svgBgOpacity = ref(0.6); + + Object.assign(svgStyle.value, { + '--svgBorderColor': svgBorderColor.value, + '--svgColor': svgColor.value, + '--svgBgColor': svgBgColor.value, + '--svgBgOpacity': svgBgOpacity.value, + }); + + const captionText = computed(() => { + if (captionItemName && panel.data) { + return panel.data[captionItemName.toLowerCase()]; + } + return caption; + }); + + let isText = false; + if (Object.is(renderMode, 'LINK')) { + isText = true; + } + + const buttonType = computed(() => { + if (Object.is(renderMode, 'LINK')) { + return null; + } + switch (itemStyle) { + case 'PRIMARY': + return 'primary'; + case 'SUCCESS': + return 'success'; + case 'INFO': + return 'info'; + case 'WARNING': + return 'warning'; + case 'DANGER': + return 'danger'; + case 'INVERSE': + return 'info'; + default: + return null; + } + }); + + const handleButtonClick = async (event: MouseEvent): Promise => { + try { + state.loading = true; + await props.controller.onActionClick(event); + props.controller.onClick(); + } finally { + state.loading = false; + } + }; + + return { + ns, + isText, + captionText, + buttonType, + showCaption, + sysImage, + codeName, + state, + tooltip, + handleButtonClick, + buttonCssStyle, + svgShape, + tempStyle, + svgStyle, + itemStyle, + }; + }, + render() { + if (this.state.visible) { + const buttonName = resolveComponent(this.svgShape); + return ( +
+
+ {buttonName && h(buttonName)} +
+
+ + {this.showCaption ? ( + + {this.captionText} + + ) : ( + '' + )} +
+
+
+
+ ); + } + return null; + }, +}); diff --git a/src/custom-button/index.ts b/src/custom-button/index.ts new file mode 100644 index 0000000..4b37d46 --- /dev/null +++ b/src/custom-button/index.ts @@ -0,0 +1,10 @@ +import { withInstall } from '@ibiz-template/vue3-util'; +import { App } from 'vue'; +import { registerPanelItemProvider } from '@ibiz-template/runtime'; +import { CustomButton } from './custom-button'; +import { CustomBtnProvider } from './custom-button.provider'; + +export const IBizCustomButton = withInstall(CustomButton, function (v: App) { + v.component(CustomButton.name, CustomButton); + registerPanelItemProvider('CUSTOM_CUSTOM_BTN', () => new CustomBtnProvider()); +}); diff --git a/src/index.ts b/src/index.ts index dee0f00..04ce235 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,7 +7,8 @@ import { IBizScreenRealTime } from './screen-real-time/index'; import { IBizScreenPanelContainer } from './screen-panel-container/index'; import { IBizCarouselList } from './carousel-list'; import { IBizCarouselGrid } from './carousel-grid'; -import { IBizRawItemSlider } from './rawitem-slider'; +import { IBizPercentPond } from './percent-pond'; +import { IBizCustomButton } from './custom-button'; // 自定义边框 import { @@ -42,7 +43,8 @@ export default { _app.use(IBizScreenPanelContainer); _app.use(IBizCarouselList); _app.use(IBizCarouselGrid); - _app.use(IBizRawItemSlider); + _app.use(IBizPercentPond); + _app.use(IBizCustomButton); // 自定义边框 _app.use(IBizCustomDV1); diff --git a/src/rawitem-slider/index.ts b/src/percent-pond/index.ts similarity index 44% rename from src/rawitem-slider/index.ts rename to src/percent-pond/index.ts index 538a6cd..43aad4f 100644 --- a/src/rawitem-slider/index.ts +++ b/src/percent-pond/index.ts @@ -1,13 +1,13 @@ import { App } from 'vue'; import { withInstall } from '@ibiz-template/vue3-util'; import { registerEditorProvider } from '@ibiz-template/runtime'; -import { RawItemSlider } from './rawitem-slider'; -import { RawItemSliderProvider } from './rawitem-slider.provider'; +import { PercentPond } from './percent-pond'; +import { PercentPondProvider } from './percent-pond.provider'; -export const IBizRawItemSlider = withInstall(RawItemSlider, function (v: App) { - v.component(RawItemSlider.name, RawItemSlider); +export const IBizPercentPond = withInstall(PercentPond, function (v: App) { + v.component(PercentPond.name, PercentPond); registerEditorProvider( 'EDITOR_CUSTOMSTYLE_SCREEN_PROGRESS', - () => new RawItemSliderProvider(), + () => new PercentPondProvider(), ); }); diff --git a/src/rawitem-slider/rawitem-slider.controller.ts b/src/percent-pond/percent-pond.controller.ts similarity index 76% rename from src/rawitem-slider/rawitem-slider.controller.ts rename to src/percent-pond/percent-pond.controller.ts index 2a1692b..72a1c76 100644 --- a/src/rawitem-slider/rawitem-slider.controller.ts +++ b/src/percent-pond/percent-pond.controller.ts @@ -1,12 +1,12 @@ import { EditorController } from '@ibiz-template/runtime'; import { ISlider } from '@ibiz/model-core'; -export class RawItemSliderController extends EditorController { +export class PercentPondController extends EditorController { /** * 总数属性 * * @type {string} - * @memberof RawItemSliderController + * @memberof PercentPondController */ public totalField: string = ''; @@ -15,7 +15,7 @@ export class RawItemSliderController extends EditorController { * * @protected * @return {*} {Promise} - * @memberof RawItemSliderController + * @memberof PercentPondController */ protected async onInit(): Promise { super.onInit(); diff --git a/src/rawitem-slider/rawitem-slider.provider.ts b/src/percent-pond/percent-pond.provider.ts similarity index 45% rename from src/rawitem-slider/rawitem-slider.provider.ts rename to src/percent-pond/percent-pond.provider.ts index 9276c8b..2a0eac1 100644 --- a/src/rawitem-slider/rawitem-slider.provider.ts +++ b/src/percent-pond/percent-pond.provider.ts @@ -3,18 +3,18 @@ import { IEditorProvider, } from '@ibiz-template/runtime'; import { ISlider } from '@ibiz/model-core'; -import { RawItemSliderController } from './rawitem-slider.controller'; +import { PercentPondController } from './percent-pond.controller'; -export class RawItemSliderProvider implements IEditorProvider { - formEditor: string = 'RawItemSlider'; +export class PercentPondProvider implements IEditorProvider { + formEditor: string = 'PercentPond'; - gridEditor: string = 'RawItemSlider'; + gridEditor: string = 'PercentPond'; async createController( editorModel: ISlider, parentController: IEditorContainerController, - ): Promise { - const c = new RawItemSliderController(editorModel, parentController); + ): Promise { + const c = new PercentPondController(editorModel, parentController); await c.init(); return c; } diff --git a/src/rawitem-slider/rawitem-slider.scss b/src/percent-pond/percent-pond.scss similarity index 98% rename from src/rawitem-slider/rawitem-slider.scss rename to src/percent-pond/percent-pond.scss index 4196c56..348063a 100644 --- a/src/rawitem-slider/rawitem-slider.scss +++ b/src/percent-pond/percent-pond.scss @@ -1,4 +1,4 @@ -@include b('rawitem-slider'){ +@include b('percent-pond'){ display: flex; gap: 10px; align-items: end; diff --git a/src/rawitem-slider/rawitem-slider.tsx b/src/percent-pond/percent-pond.tsx similarity index 84% rename from src/rawitem-slider/rawitem-slider.tsx rename to src/percent-pond/percent-pond.tsx index 4fbc229..66bc0e9 100644 --- a/src/rawitem-slider/rawitem-slider.tsx +++ b/src/percent-pond/percent-pond.tsx @@ -1,13 +1,13 @@ import { defineComponent, ref, watch } from 'vue'; import { useNamespace, getSliderProps } from '@ibiz-template/vue3-util'; -import './rawitem-slider.scss'; -import { RawItemSliderController } from './rawitem-slider.controller'; +import './percent-pond.scss'; +import { PercentPondController } from './percent-pond.controller'; -export const RawItemSlider = defineComponent({ - name: 'RawItemSlider', - props: getSliderProps(), +export const PercentPond = defineComponent({ + name: 'PercentPond', + props: getSliderProps(), setup(props) { - const ns = useNamespace('rawitem-slider'); + const ns = useNamespace('percent-pond'); const c = props.controller; const total = ref(0); -- Gitee From d8355b144168e6b4065d9a36f15887efa20e8b41 Mon Sep 17 00:00:00 2001 From: jianglinjun Date: Tue, 13 Aug 2024 20:56:15 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/guide/custom-btn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide/custom-btn.md b/docs/guide/custom-btn.md index 250d663..2b21109 100644 --- a/docs/guide/custom-btn.md +++ b/docs/guide/custom-btn.md @@ -1,4 +1,4 @@ -# 轮播列表 +# 大屏按钮 大屏按钮插件主要是用于在大屏模式下对布局面板里面的按钮进行样式优化,通过配置参数,可以得到多种外观的按钮。 -- Gitee