diff --git a/CHANGELOG.md b/CHANGELOG.md
index 516d2bed3614dfe1971250074ac33d24f7382b2e..49cc4fa1d41e56d037ce89c3f88e3a973db4b7fb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@
### Added
- 更新密码框支持明文,暗文切换功能
+- 应用菜单(列表样式)识别分组配置
### Change
diff --git a/src/control/app-menu-list-view/app-menu-list-view.scss b/src/control/app-menu-list-view/app-menu-list-view.scss
index 4bf638c47b2a3c5ab87a60ad196a9db9c2c17005..2c5695ec3f55dbd7a68e7ac858102426176a5c40 100644
--- a/src/control/app-menu-list-view/app-menu-list-view.scss
+++ b/src/control/app-menu-list-view/app-menu-list-view.scss
@@ -16,6 +16,10 @@ $control-appmenu: (list-view-icon-size: getCssVar(font-size, header-4),
--van-cell-horizontal-padding: #{rem(12px)};
--van-cell-active-color: transparent;
--van-cell-right-icon-color: var(--van-gray-6);
+ --van-cell-group-title-color: #{getCssVar(color, text, 2)};
+ --van-cell-group-title-padding: #{rem(8px)} #{rem(16px)};
+ --van-cell-group-title-font-size: #{getCssVar(font-size, regular)};
+ --van-cell-group-title-line-height: var(--van-cell-line-height);
border-radius: getCssVar(border-radius, small);
@@ -47,4 +51,15 @@ $control-appmenu: (list-view-icon-size: getCssVar(font-size, header-4),
}
}
+
+ .van-cell-group__title {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ background: getCssVar(color, bg, 0);
+ }
+
+ .van-hairline--top-bottom::after {
+ border: none;
+ }
}
\ No newline at end of file
diff --git a/src/control/app-menu-list-view/app-menu-list-view.tsx b/src/control/app-menu-list-view/app-menu-list-view.tsx
index 371e6f23d09dbc1f55c982d1c3e5ca6bfa662a85..13d12bc67a8c5d1d2d3ccf6b34702c5ab96233b1 100644
--- a/src/control/app-menu-list-view/app-menu-list-view.tsx
+++ b/src/control/app-menu-list-view/app-menu-list-view.tsx
@@ -1,5 +1,5 @@
import { defineComponent, PropType } from 'vue';
-import { IAppMenu } from '@ibiz/model-core';
+import { IAppMenu, IAppMenuItem } from '@ibiz/model-core';
import { AppMenuController, IControlProvider } from '@ibiz-template/runtime';
import { prepareControl, useControlController } from '@ibiz-template/vue3-util';
import './app-menu-list-view.scss';
@@ -25,53 +25,70 @@ export const AppMenuListViewControl = defineComponent({
render() {
const { model } = this.c;
const { controlStyle } = model;
+ const renderMenuItem = (item: IAppMenuItem) => {
+ if (item.hidden === true) {
+ return null;
+ }
+ let renderItem = null;
+ switch (item.itemType) {
+ case 'MENUITEM':
+ if (item.appMenuItems?.length) {
+ renderItem = (
+
+ {item.appMenuItems.map(child => {
+ return renderMenuItem(child);
+ })}
+
+ );
+ } else {
+ renderItem = (
+ {
+ try {
+ await this.c.onClickMenuItem(item.id!, event, false);
+ } catch (error) {
+ ibiz.log.error(error);
+ }
+ }}
+ >
+ {{
+ icon: () => {
+ return (
+ item.sysImage && (
+
+
+
+ )
+ );
+ },
+ }}
+
+ );
+ }
+ break;
+ case 'SEPERATOR':
+ renderItem = ;
+ break;
+ default:
+ break;
+ }
+ return renderItem;
+ };
return (
{model?.appMenuItems?.map(item => {
- if (item.hidden === true) {
- return null;
- }
- let renderItem = null;
- switch (item.itemType) {
- case 'MENUITEM':
- renderItem = (
-
- this.c.onClickMenuItem(item.id!, event, false)
- }
- >
- {{
- icon: () => {
- return (
- item.sysImage && (
-
-
-
- )
- );
- },
- }}
-
- );
- break;
- case 'SEPERATOR':
- renderItem = ;
- break;
- default:
- break;
- }
- return renderItem;
+ return renderMenuItem(item);
})}
);