diff --git a/CHANGELOG.md b/CHANGELOG.md
index 36732fa11226c9e4bcb291d6f831827cc10803a2..5c0550aa414b26c654337b793748d62e87ae9e01 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,10 @@
并且此项目遵循 [Semantic Versioning](https://semver.org/lang/zh-CN/).
## [Unreleased]
+
+### Added
+
+- 新增工具栏行为项支持计数器
## [0.7.38-alpha.34] - 2024-12-11
diff --git a/src/control/toolbar/toolbar.scss b/src/control/toolbar/toolbar.scss
index 9ab4f2f393709ca93540c3f09fbb33e8e61c599b..9355ca6cc9da4fb26e6ba46780d9db6cb16fd78a 100644
--- a/src/control/toolbar/toolbar.scss
+++ b/src/control/toolbar/toolbar.scss
@@ -50,6 +50,9 @@ $control-toolbar-actions: (
margin: getCssVar(control-toolbar, text-margin);
}
}
+ .#{bem(toolbar-item-counter)} {
+ margin-left: getCssVar('spacing', 'super-tight');
+ }
}
@include b(control-toolbar) {
diff --git a/src/control/toolbar/toolbar.tsx b/src/control/toolbar/toolbar.tsx
index 557f5d0f85ac6e717fbedb16beb6c69cf75b9a06..02ffbd298826d0187ec179973d92e66d5d36660c 100644
--- a/src/control/toolbar/toolbar.tsx
+++ b/src/control/toolbar/toolbar.tsx
@@ -6,6 +6,7 @@ import {
VNode,
resolveComponent,
h,
+ onUnmounted,
} from 'vue';
import {
IDEToolbar,
@@ -15,6 +16,7 @@ import {
IAppDEUIActionGroupDetail,
} from '@ibiz/model-core';
import {
+ AppCounter,
IControlProvider,
IExtraButton,
ToolbarController,
@@ -24,7 +26,11 @@ import { IBizExportExcel } from './export-excel/export-excel';
import { IBizShortCutButton } from './short-cut-button/short-cut-button';
import './toolbar.scss';
-const btnContent = (item: IDEToolbarItem): (string | VNode)[] => {
+const btnContent = (
+ item: IDEToolbarItem,
+ counterData: IData,
+): (string | VNode)[] => {
+ const counterNum = item.counterId ? counterData[item.counterId] : undefined;
const image = item.sysImage;
const result = [];
const ns = useNamespace('toolbar-item');
@@ -38,6 +44,16 @@ const btnContent = (item: IDEToolbarItem): (string | VNode)[] => {
if (item.showCaption && item.caption) {
result.push({item.caption});
}
+ if (counterNum) {
+ result.push(
+ ,
+ );
+ }
+
return result;
};
@@ -68,6 +84,13 @@ export const ToolbarControl = defineComponent({
const btnSize = ref('default');
const toolbarStyle = (c.model as IDEToolbar).toolbarStyle?.toLowerCase();
+ // 计数器数据
+ let counter: AppCounter | null = null;
+ const counterData = ref({});
+ const fn = (data: IData) => {
+ counterData.value = data;
+ };
+
// 点击事件
const handleClick = async (
item: IDEToolbarItem,
@@ -88,6 +111,24 @@ export const ToolbarControl = defineComponent({
await handleClick(tempItem as IDEToolbarItem, event, params);
};
+ c.evt.on('onMounted', async () => {
+ // 计数器相关
+ counter = c.getCounter();
+ if (counter) {
+ counter.onChange(fn);
+ }
+ });
+
+ onUnmounted(() => {
+ counter?.offChange(fn);
+ counter?.destroy();
+ });
+
+ // 绘制按钮内容
+ const renderBtnContent = (item: IDEToolbarItem) => {
+ return btnContent(item, counterData.value);
+ };
+
const renderExtraButtons = (extraButtons: IExtraButton[]): VNode[] => {
return extraButtons.map(button => {
return (
@@ -97,7 +138,7 @@ export const ToolbarControl = defineComponent({
size={btnSize.value}
onClick={(e: MouseEvent): Promise => handleClick(button, e)}
>
- {btnContent(button)}
+ {renderBtnContent(button)}
);
@@ -197,7 +238,7 @@ export const ToolbarControl = defineComponent({
]}
mode='menu'
item={item2}
- btnContent={btnContent}
+ btnContent={renderBtnContent}
size={btnSize.value}
controller={c}
onExportExcel={(e: MouseEvent, data: IData): void => {
@@ -226,7 +267,7 @@ export const ToolbarControl = defineComponent({
- {btnContent(item2)}
+ {renderBtnContent(item2)}
);
@@ -240,7 +281,7 @@ export const ToolbarControl = defineComponent({
title: () => {
return (
- {btnContent(item)}
+ {renderBtnContent(item)}
);
},
@@ -263,7 +304,7 @@ export const ToolbarControl = defineComponent({
handleActionClick(detail, e)
}
>
- {btnContent(detail)}
+ {renderBtnContent(detail)}
,
];
}
@@ -455,7 +496,7 @@ export const ToolbarControl = defineComponent({
calcCssName(item),
]}
item={item}
- btnContent={btnContent}
+ btnContent={renderBtnContent}
size={btnSize.value}
controller={c}
onExportExcel={(e: MouseEvent, data: IData): void => {
@@ -501,7 +542,7 @@ export const ToolbarControl = defineComponent({
disabled={c.state.buttonsState[itemId].disabled}
onClick={(e: MouseEvent): Promise => handleClick(item, e)}
>
- {btnContent(item)}
+ {renderBtnContent(item)}
);