From 428038f12d2f7ef9ec9fcbf26f82678916f5ebae Mon Sep 17 00:00:00 2001 From: zhf <1204297681@qq.com> Date: Wed, 11 Sep 2024 17:40:31 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E5=B7=A5=E5=85=B7=E6=A0=8F?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=B7=A5=E5=85=B7=E8=A1=A5=E5=85=85=E9=A1=B9?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../toolbar-design/src/components/index.ts | 2 + .../toolbar-design-popover.scss | 46 +++++++++ .../toolbar-design-popover.tsx | 54 +++++++++++ .../src/entity/psdetbitem/psdetbitem.ts | 10 ++ packages/toolbar-design/src/index.ts | 1 + .../toolbar_design_operation.controller.ts | 95 ++++++++++++++++++- .../toolbar_design_operation.scss | 8 +- 7 files changed, 212 insertions(+), 4 deletions(-) create mode 100644 packages/toolbar-design/src/components/toolbar-design-popover/toolbar-design-popover.scss create mode 100644 packages/toolbar-design/src/components/toolbar-design-popover/toolbar-design-popover.tsx diff --git a/packages/toolbar-design/src/components/index.ts b/packages/toolbar-design/src/components/index.ts index 7988c080..52b0f1e5 100644 --- a/packages/toolbar-design/src/components/index.ts +++ b/packages/toolbar-design/src/components/index.ts @@ -1,8 +1,10 @@ import { App } from 'vue'; import IBizToolbarShell from './toolbar-shell/toolbar-shell'; +import IBizToolbarDesignPopover from './toolbar-design-popover/toolbar-design-popover'; export default { install(app: App) { app.component('IBizToolbarShell', IBizToolbarShell); + app.component('IBizToolbarDesignPopover', IBizToolbarDesignPopover); }, }; diff --git a/packages/toolbar-design/src/components/toolbar-design-popover/toolbar-design-popover.scss b/packages/toolbar-design/src/components/toolbar-design-popover/toolbar-design-popover.scss new file mode 100644 index 00000000..8c7b1033 --- /dev/null +++ b/packages/toolbar-design/src/components/toolbar-design-popover/toolbar-design-popover.scss @@ -0,0 +1,46 @@ +@include b(toolbar-design-popover) { + padding: 5px; +} + +@include b(toolbar-design-popover-header) { + padding: 3px 6px; + font-size: 15px; + font-weight: 700; + line-height: 1.5; + border-bottom: 1px solid getCssVar(color, text, 1); +} + +@include b(toolbar-design-popover-item) { + display: flex; + padding: 3px 6px; + font-size: 14px; + line-height: 1.5; + cursor: pointer; + + @include e(icon) { + display: flex; + flex: 0 0 auto; + align-items: center; + justify-content: center; + margin-right: 8px; + font-size: 16px; + } + + @include e(text) { + flex: 1 1 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + &:hover { + color: getCssVar(color, primary, text); + background-color: getCssVar(color, primary); + } +} + +@include b(toolbar-design-popover-info) { + padding: 3px 6px; + font-size: 14px; + line-height: 1.5; +} diff --git a/packages/toolbar-design/src/components/toolbar-design-popover/toolbar-design-popover.tsx b/packages/toolbar-design/src/components/toolbar-design-popover/toolbar-design-popover.tsx new file mode 100644 index 00000000..c79696be --- /dev/null +++ b/packages/toolbar-design/src/components/toolbar-design-popover/toolbar-design-popover.tsx @@ -0,0 +1,54 @@ +import { PropType, defineComponent } from 'vue'; +import { useNamespace } from '@ibiz-template/vue3-util'; +import './toolbar-design-popover.scss'; + +export default defineComponent({ + name: 'IBizToolbarDesignPopover', + props: { + items: { + type: Array as PropType, + default: () => [], + }, + }, + setup(_props, { emit }) { + const ns = useNamespace('toolbar-design-popover'); + + const handleClick = (item: IData) => { + emit('item-click', item); + }; + + return { + ns, + handleClick, + }; + }, + render() { + return ( +
+
新建
+
+ {this.items.length > 0 ? ( + this.items.map(item => { + return ( +
this.handleClick(item)} + > + {item.icon ? ( +
+ +
+ ) : null} +
{item.text}
+
+ ); + }) + ) : ( +
暂未提供新建功能
+ )} +
+
+ ); + }, +}); diff --git a/packages/toolbar-design/src/entity/psdetbitem/psdetbitem.ts b/packages/toolbar-design/src/entity/psdetbitem/psdetbitem.ts index 5857ee21..f2b3b5a5 100644 --- a/packages/toolbar-design/src/entity/psdetbitem/psdetbitem.ts +++ b/packages/toolbar-design/src/entity/psdetbitem/psdetbitem.ts @@ -41,6 +41,16 @@ export class PSDETBItem extends AppDataEntity { return this.psdetbitemname; } + // @ts-expect-error + get srfordervalue(): number { + return this.ordervalue; + } + + // @ts-expect-error + set srfordervalue(value): number { + this.ordervalue = value; + } + clone(): PSDETBItem { const entity = new PSDETBItem(this._entity, this._data); entity.srfkey = this.srfkey; diff --git a/packages/toolbar-design/src/index.ts b/packages/toolbar-design/src/index.ts index 851d4453..fb36acc1 100644 --- a/packages/toolbar-design/src/index.ts +++ b/packages/toolbar-design/src/index.ts @@ -16,5 +16,6 @@ export default { app.use(Services); app.use(Components); app.use(PanelItems); + app.use(Components); }, }; diff --git a/packages/toolbar-design/src/panel-items/toolbar_design_operation/toolbar_design_operation.controller.ts b/packages/toolbar-design/src/panel-items/toolbar_design_operation/toolbar_design_operation.controller.ts index f1a3eab5..354431a7 100644 --- a/packages/toolbar-design/src/panel-items/toolbar_design_operation/toolbar_design_operation.controller.ts +++ b/packages/toolbar-design/src/panel-items/toolbar_design_operation/toolbar_design_operation.controller.ts @@ -1,3 +1,96 @@ +/* eslint-disable no-constant-condition */ import { DesignOperationController } from '@ibiz-template-plugin/design-base'; +import { generateOrderValue, notNilEmpty } from 'qx-util'; -export class ToolBarDesignOperationController extends DesignOperationController {} +export class ToolBarDesignOperationController extends DesignOperationController { + /** + * 打开新建项 + * + * @author zhanghengfeng + * @date 2024-09-11 16:09:21 + * @protected + * @param {MouseEvent} e + * @param {IData} data + * @return {*} {Promise} + */ + protected async createItem(e: MouseEvent, data: IData): Promise { + const el = e.target as HTMLElement; + if (!el) { + return; + } + const popover = ibiz.overlay.createPopover( + 'IBizToolbarDesignPopover', + { + items: this.newItems, + onItemClick: (item: IData) => { + popover.dismiss(); + this.handleAddItem(item.data, data); + }, + }, + { + placement: 'right', + autoClose: true, + width: '200px', + noArrow: true, + }, + ); + await popover.present(el); + } + + /** + * 处理项添加 + * + * @author zhanghengfeng + * @date 2024-09-11 16:09:42 + * @protected + * @param {IData} data + * @param {IData} [parent] + * @return {*} {Promise} + */ + protected async handleAddItem(data: IData, parent?: IData): Promise { + let nStartIndex = 1; + let strRootName: string = data.itemtype || ''; + if (!strRootName) { + return; + } + strRootName = strRootName.toLowerCase(); + let psdetbitemname = ''; + const detailMap: Map = new Map(); + const detailMap2: Map = new Map(); + this.state.items.forEach(item => { + if (notNilEmpty(item.psdetbitemname)) { + detailMap.set(item.psdetbitemname.toLowerCase(), item); + } + if (notNilEmpty(item.psdetbitemid)) { + detailMap2.set(item.psdetbitemid.toLowerCase(), item); + } + }); + while (true) { + const strDefaultName = `${strRootName}${ + nStartIndex === 0 ? '' : nStartIndex + }`; + if (!detailMap.has(strDefaultName) && !detailMap2.has(strDefaultName)) { + psdetbitemname = strDefaultName; + break; + } + nStartIndex += 1; + } + const maxValue = Math.max( + ...this.state.items.map(col => col.ordervalue || 0), + generateOrderValue(0), + ); + const ordervalue = maxValue + generateOrderValue(0); + const item: IData = { + psdetbitemname, + tbitemtype: data.itemtype, + ordervalue, + [`p${this.itemEntity.codeName?.toLowerCase()}id`]: Object.is( + parent?.itemtype, + 'DETOOLBAR', + ) + ? undefined + : parent?.srfkey, + }; + await this.create([item]); + } +} diff --git a/packages/toolbar-design/src/panel-items/toolbar_design_operation/toolbar_design_operation.scss b/packages/toolbar-design/src/panel-items/toolbar_design_operation/toolbar_design_operation.scss index 546c1670..7603aab5 100644 --- a/packages/toolbar-design/src/panel-items/toolbar_design_operation/toolbar_design_operation.scss +++ b/packages/toolbar-design/src/panel-items/toolbar_design_operation/toolbar_design_operation.scss @@ -1,5 +1,7 @@ /* stylelint-disable block-no-empty */ @include b(toolbar_design_operation) { - width: 100%; - height: 100%; -} \ No newline at end of file + width: 100%; + height: 100%; + border-right: 1px solid getCssVar(color, border); + border-left: 1px solid getCssVar(color, border); +} -- Gitee From 5b79a6e2ebc621090b0f2c9c19104b7693d6182b Mon Sep 17 00:00:00 2001 From: zhf <1204297681@qq.com> Date: Wed, 11 Sep 2024 17:44:54 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E6=8E=92=E5=BA=8F=E5=92=8C=E8=8A=82=E7=82=B9=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design_operation.controller.ts | 12 ++++++++++-- .../src/entity/psdegrid-col/psdegrid-col.ts | 10 ++++++++++ .../grid_design_operation.controller.ts | 17 +++++++++++++++-- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/packages/design-base/src/panel-items/design_operation/design_operation.controller.ts b/packages/design-base/src/panel-items/design_operation/design_operation.controller.ts index d051019b..9d1539e2 100644 --- a/packages/design-base/src/panel-items/design_operation/design_operation.controller.ts +++ b/packages/design-base/src/panel-items/design_operation/design_operation.controller.ts @@ -379,6 +379,14 @@ export class DesignOperationController extends PanelItemController { await this.load(); + if (this.view.select.data?.id) { + const data = this.state.items.find( + item => item.srfkey === this.view.select.data?.id, + ); + if (!data) { + this.panel.view.call('onActiveRoot'); + } + } } /** @@ -619,9 +627,9 @@ export class DesignOperationController extends PanelItemController col.ordervalue || 0), + generateOrderValue(0), + ); + const ordervalue = maxValue + generateOrderValue(0); const temoGridCol: IData = { + ordervalue, psdegridcolname, gridcoltype: data.itemtype, [`p${this.itemEntity.codeName?.toLowerCase()}id`]: Object.is( @@ -196,8 +203,14 @@ export class GridDesignOperationController extends DesignOperationController { */ protected async handleAddField(items: IData[], parent: IData): Promise { // 设置默认值 - const cols = items.map(data => { + const maxValue = Math.max( + ...this.state.items.map(col => col.ordervalue || 0), + generateOrderValue(0), + ); + const cols = items.map((data, i) => { + const ordervalue = maxValue + generateOrderValue(i); const temoGridCol: IData = { + ordervalue, psdegridcolname: data.psdefieldname?.toLowerCase(), psdefname: data.psdefieldname?.toLowerCase(), psdefid: data.psdefieldid, -- Gitee From 0003ec60cbf2924153c4517c7d45b8049dd750db Mon Sep 17 00:00:00 2001 From: zhf <1204297681@qq.com> Date: Wed, 11 Sep 2024 17:53:36 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../toolbar_design_operation/toolbar_design_operation.scss | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/toolbar-design/src/panel-items/toolbar_design_operation/toolbar_design_operation.scss b/packages/toolbar-design/src/panel-items/toolbar_design_operation/toolbar_design_operation.scss index 7603aab5..b1ad4283 100644 --- a/packages/toolbar-design/src/panel-items/toolbar_design_operation/toolbar_design_operation.scss +++ b/packages/toolbar-design/src/panel-items/toolbar_design_operation/toolbar_design_operation.scss @@ -2,6 +2,4 @@ @include b(toolbar_design_operation) { width: 100%; height: 100%; - border-right: 1px solid getCssVar(color, border); - border-left: 1px solid getCssVar(color, border); } -- Gitee