zmdms-webui 2.4.9 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/es/_virtual/Draggable.js +3 -0
  2. package/dist/es/_virtual/DraggableCore.js +3 -0
  3. package/dist/es/_virtual/cjs.js +3 -0
  4. package/dist/es/_virtual/clsx.js +3 -0
  5. package/dist/es/_virtual/domFns.js +3 -0
  6. package/dist/es/_virtual/getPrefix.js +3 -0
  7. package/dist/es/_virtual/index2.js +2 -2
  8. package/dist/es/_virtual/index4.js +3 -0
  9. package/dist/es/_virtual/index5.js +3 -0
  10. package/dist/es/_virtual/log.js +3 -0
  11. package/dist/es/_virtual/positionFns.js +3 -0
  12. package/dist/es/_virtual/react-is.development2.js +3 -0
  13. package/dist/es/_virtual/react-is.production.min2.js +3 -0
  14. package/dist/es/_virtual/shims.js +3 -0
  15. package/dist/es/applayoutsider/appLayoutSider.d.ts +4 -0
  16. package/dist/es/applayoutsider/appLayoutSider.js +2 -2
  17. package/dist/es/applayoutsider/menu/index.js +2 -2
  18. package/dist/es/canvastable/canvasTable.js +22 -3
  19. package/dist/es/canvastable/hooks/useScroll.js +62 -11
  20. package/dist/es/canvastable/utils/formatHelpers.js +1 -1
  21. package/dist/es/canvastable/utils/tableCalculations.js +18 -10
  22. package/dist/es/chatroom/chat-room.js +19 -0
  23. package/dist/es/chatroom/index.css +1 -0
  24. package/dist/es/chatroom/index.js +5 -0
  25. package/dist/es/modal/interface.d.ts +4 -0
  26. package/dist/es/modal/modal.js +15 -9
  27. package/dist/es/modal/useDraggable.js +51 -0
  28. package/dist/es/node_modules/immutability-helper/index.js +1 -1
  29. package/dist/es/node_modules/object-assign/index.js +99 -0
  30. package/dist/es/node_modules/prop-types/checkPropTypes.js +115 -0
  31. package/dist/es/node_modules/prop-types/factoryWithThrowingShims.js +74 -0
  32. package/dist/es/node_modules/prop-types/factoryWithTypeCheckers.js +625 -0
  33. package/dist/es/node_modules/prop-types/index.js +28 -0
  34. package/dist/es/node_modules/prop-types/lib/ReactPropTypesSecret.js +21 -0
  35. package/dist/es/node_modules/prop-types/lib/has.js +11 -0
  36. package/dist/es/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +190 -0
  37. package/dist/es/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +26 -0
  38. package/dist/es/node_modules/prop-types/node_modules/react-is/index.js +19 -0
  39. package/dist/es/node_modules/rc-util/es/Dom/findDOMNode.js +2 -2
  40. package/dist/es/node_modules/react-draggable/build/cjs/Draggable.js +412 -0
  41. package/dist/es/node_modules/react-draggable/build/cjs/DraggableCore.js +453 -0
  42. package/dist/es/node_modules/react-draggable/build/cjs/cjs.js +21 -0
  43. package/dist/es/node_modules/react-draggable/build/cjs/utils/domFns.js +237 -0
  44. package/dist/es/node_modules/react-draggable/build/cjs/utils/getPrefix.js +52 -0
  45. package/dist/es/node_modules/react-draggable/build/cjs/utils/log.js +9 -0
  46. package/dist/es/node_modules/react-draggable/build/cjs/utils/positionFns.js +155 -0
  47. package/dist/es/node_modules/react-draggable/build/cjs/utils/shims.js +33 -0
  48. package/dist/es/node_modules/react-draggable/node_modules/clsx/dist/clsx.js +7 -0
  49. package/dist/es/node_modules/react-is/cjs/react-is.development.js +1 -1
  50. package/dist/es/node_modules/react-is/cjs/react-is.production.min.js +1 -1
  51. package/dist/es/node_modules/react-is/index.js +1 -1
  52. package/dist/index.dark.css +1 -1
  53. package/dist/index.default.css +1 -1
  54. package/dist/less/components/ChatRoom/style/index.less +147 -0
  55. package/dist/less/components/ChatRoom/style/style.less +2 -0
  56. package/dist/less/styles/index.less +2 -0
  57. package/package.json +2 -1
@@ -0,0 +1,3 @@
1
+ var Draggable = {};
2
+
3
+ export { Draggable as __exports };
@@ -0,0 +1,3 @@
1
+ var DraggableCore = {};
2
+
3
+ export { DraggableCore as __exports };
@@ -0,0 +1,3 @@
1
+ var cjs = {exports: {}};
2
+
3
+ export { cjs as __module };
@@ -0,0 +1,3 @@
1
+ var clsx = {exports: {}};
2
+
3
+ export { clsx as __module };
@@ -0,0 +1,3 @@
1
+ var domFns = {};
2
+
3
+ export { domFns as __exports };
@@ -0,0 +1,3 @@
1
+ var getPrefix = {};
2
+
3
+ export { getPrefix as __exports };
@@ -1,3 +1,3 @@
1
- var immutabilityHelper = {exports: {}};
1
+ var propTypes = {exports: {}};
2
2
 
3
- export { immutabilityHelper as __module };
3
+ export { propTypes as __module };
@@ -0,0 +1,3 @@
1
+ var immutabilityHelper = {exports: {}};
2
+
3
+ export { immutabilityHelper as __module };
@@ -0,0 +1,3 @@
1
+ var reactIs = {exports: {}};
2
+
3
+ export { reactIs as __module };
@@ -0,0 +1,3 @@
1
+ var log = {};
2
+
3
+ export { log as __exports };
@@ -0,0 +1,3 @@
1
+ var positionFns = {};
2
+
3
+ export { positionFns as __exports };
@@ -0,0 +1,3 @@
1
+ var reactIs_development = {};
2
+
3
+ export { reactIs_development as __exports };
@@ -0,0 +1,3 @@
1
+ var reactIs_production_min = {};
2
+
3
+ export { reactIs_production_min as __exports };
@@ -0,0 +1,3 @@
1
+ var shims = {};
2
+
3
+ export { shims as __exports };
@@ -18,6 +18,10 @@ interface ILayoutSiderProps {
18
18
  * 是否显示搜索框
19
19
  */
20
20
  isShowSearchInput?: boolean;
21
+ /**
22
+ * 底部容器
23
+ */
24
+ bottomContainer?: any;
21
25
  /**
22
26
  * 微应用列表,在qiankun下有用 需要拼接路由前缀
23
27
  */
@@ -16,7 +16,7 @@ var AppLayoutSider = function (props) {
16
16
  // 118 宽度改成 134宽度
17
17
  _b = props.siderWidth,
18
18
  // 118 宽度改成 134宽度
19
- siderWidth = _b === void 0 ? 134 : _b, _c = props.subMenuWidth, subMenuWidth = _c === void 0 ? 162 : _c, addTab = props.addTab, siderBg = props.siderBg, logo = props.logo, logoStyle = props.logoStyle, subMenuLogo = props.subMenuLogo, _d = props.isShowSearchInput, isShowSearchInput = _d === void 0 ? true : _d, apps = props.apps, activeTab = props.activeTab, userMenus = props.userMenus, userSubMenus = props.userSubMenus, mergeSystemIds = props.mergeSystemIds, postMergeSystemIds = props.postMergeSystemIds, drawerTitle = props.drawerTitle, selectMainMenu = props.selectMainMenu, menuJoinRule = props.menuJoinRule, renderItem = props.renderItem, defaultVisible = props.defaultVisible, defaultFixed = props.defaultFixed, openOnlyHasSubmenus = props.openOnlyHasSubmenus, hideSubMenuBg = props.hideSubMenuBg, menuItemLine = props.menuItemLine, subMenuItemLine = props.subMenuItemLine;
19
+ siderWidth = _b === void 0 ? 134 : _b, _c = props.subMenuWidth, subMenuWidth = _c === void 0 ? 162 : _c, addTab = props.addTab, siderBg = props.siderBg, logo = props.logo, logoStyle = props.logoStyle, subMenuLogo = props.subMenuLogo, _d = props.isShowSearchInput, isShowSearchInput = _d === void 0 ? true : _d, apps = props.apps, activeTab = props.activeTab, userMenus = props.userMenus, userSubMenus = props.userSubMenus, mergeSystemIds = props.mergeSystemIds, postMergeSystemIds = props.postMergeSystemIds, drawerTitle = props.drawerTitle, selectMainMenu = props.selectMainMenu, menuJoinRule = props.menuJoinRule, renderItem = props.renderItem, defaultVisible = props.defaultVisible, defaultFixed = props.defaultFixed, openOnlyHasSubmenus = props.openOnlyHasSubmenus, hideSubMenuBg = props.hideSubMenuBg, menuItemLine = props.menuItemLine, subMenuItemLine = props.subMenuItemLine, bottomContainer = props.bottomContainer;
20
20
  // 当前选中的主菜单item
21
21
  var _e = useState([]), mainMenuSelectedKeys = _e[0], setMainMenuSelectedKeys = _e[1];
22
22
  // 内部二级菜单管理
@@ -74,7 +74,7 @@ var AppLayoutSider = function (props) {
74
74
  menuJoinRule: menuJoinRule,
75
75
  getNewPath: getNewPath,
76
76
  renderItem: renderItem,
77
- } }, { children: jsx(Menu, { width: siderWidth, subMenuWidth: subMenuWidth, layoutSiderRef: layoutSiderRef, addTab: addTab, logo: logo, logoStyle: logoStyle, subMenuLogo: subMenuLogo, getPrefixByAppId: getPrefixByAppId, defaultVisible: defaultVisible, openOnlyHasSubmenus: openOnlyHasSubmenus, defaultFixed: defaultFixed, isShowSearchInput: isShowSearchInput, hideSubMenuBg: hideSubMenuBg, menuItemLine: menuItemLine, subMenuItemLine: subMenuItemLine }) })) })));
77
+ } }, { children: jsx(Menu, { width: siderWidth, subMenuWidth: subMenuWidth, layoutSiderRef: layoutSiderRef, addTab: addTab, logo: logo, logoStyle: logoStyle, subMenuLogo: subMenuLogo, getPrefixByAppId: getPrefixByAppId, defaultVisible: defaultVisible, openOnlyHasSubmenus: openOnlyHasSubmenus, defaultFixed: defaultFixed, isShowSearchInput: isShowSearchInput, hideSubMenuBg: hideSubMenuBg, menuItemLine: menuItemLine, subMenuItemLine: subMenuItemLine, bottomContainer: bottomContainer }) })) })));
78
78
  };
79
79
  AppLayoutSider.displayName = "ZTXK_WEBUI_AppLayoutSider";
80
80
  var AppLayoutSider$1 = memo(AppLayoutSider);
@@ -7,7 +7,7 @@ import MainMenu from './MainMenu.js';
7
7
  import SubMenu from './SubMenu.js';
8
8
 
9
9
  var MenuCom = function (props) {
10
- var width = props.width, subMenuWidth = props.subMenuWidth, layoutSiderRef = props.layoutSiderRef, addTab = props.addTab, logo = props.logo, logoStyle = props.logoStyle, getPrefixByAppId = props.getPrefixByAppId, subMenuLogo = props.subMenuLogo, _a = props.defaultVisible, defaultVisible = _a === void 0 ? false : _a, openOnlyHasSubmenus = props.openOnlyHasSubmenus, defaultFixed = props.defaultFixed, isShowSearchInput = props.isShowSearchInput, hideSubMenuBg = props.hideSubMenuBg, menuItemLine = props.menuItemLine, subMenuItemLine = props.subMenuItemLine;
10
+ var width = props.width, subMenuWidth = props.subMenuWidth, layoutSiderRef = props.layoutSiderRef, addTab = props.addTab, logo = props.logo, logoStyle = props.logoStyle, getPrefixByAppId = props.getPrefixByAppId, subMenuLogo = props.subMenuLogo, _a = props.defaultVisible, defaultVisible = _a === void 0 ? false : _a, openOnlyHasSubmenus = props.openOnlyHasSubmenus, defaultFixed = props.defaultFixed, isShowSearchInput = props.isShowSearchInput, hideSubMenuBg = props.hideSubMenuBg, menuItemLine = props.menuItemLine, subMenuItemLine = props.subMenuItemLine, bottomContainer = props.bottomContainer;
11
11
  // 二级菜单是否显示
12
12
  var _b = useState(defaultVisible), visible = _b[0], setVisible = _b[1];
13
13
  // 二级菜单Ref对象
@@ -27,7 +27,7 @@ var MenuCom = function (props) {
27
27
  var _a;
28
28
  (_a = subMenu.current) === null || _a === void 0 ? void 0 : _a.setVisible(false);
29
29
  }, []);
30
- return (jsxs("div", __assign({ className: "zmdms-menu", onMouseLeave: onMouseLeave }, { children: [jsx(Logo, { logo: logo, showLine: visible && !hideSubMenuBg, style: logoStyle }), isShowSearchInput && jsx(SearchInput, { setVisible: setVisible }), jsx(MainMenu, { onMouseEnter: onMouseEnter, addTab: addTab, getPrefixByAppId: getPrefixByAppId, subMenu: subMenu, hideSubMenuBg: hideSubMenuBg, menuItemLine: menuItemLine }), jsx(SubMenu, { ref: subMenu, marginLeft: width, subMenuWidth: subMenuWidth, layoutSiderRef: layoutSiderRef, addTab: addTab, getPrefixByAppId: getPrefixByAppId, subMenuLogo: subMenuLogo, visible: visible, setVisible: setVisible, defaultFixed: defaultFixed, hideSubMenuBg: hideSubMenuBg, subMenuItemLine: subMenuItemLine, openOnlyHasSubmenus: openOnlyHasSubmenus })] })));
30
+ return (jsxs("div", __assign({ className: "zmdms-menu", onMouseLeave: onMouseLeave }, { children: [jsx(Logo, { logo: logo, showLine: visible && !hideSubMenuBg, style: logoStyle }), isShowSearchInput && jsx(SearchInput, { setVisible: setVisible }), jsx(MainMenu, { onMouseEnter: onMouseEnter, addTab: addTab, getPrefixByAppId: getPrefixByAppId, subMenu: subMenu, hideSubMenuBg: hideSubMenuBg, menuItemLine: menuItemLine }), jsx(SubMenu, { ref: subMenu, marginLeft: width, subMenuWidth: subMenuWidth, layoutSiderRef: layoutSiderRef, addTab: addTab, getPrefixByAppId: getPrefixByAppId, subMenuLogo: subMenuLogo, visible: visible, setVisible: setVisible, defaultFixed: defaultFixed, hideSubMenuBg: hideSubMenuBg, subMenuItemLine: subMenuItemLine, openOnlyHasSubmenus: openOnlyHasSubmenus }), bottomContainer] })));
31
31
  };
32
32
  var Menu = memo(MenuCom);
33
33
 
@@ -28,7 +28,7 @@ import { useProcessedColumns } from './hooks/useProcessedColumns.js';
28
28
  import { useSummaryRow } from './hooks/useSummaryRow.js';
29
29
  import { useCanvasTableAutoHeight } from './hooks/useAutoHeight.js';
30
30
  import { SCROLLBAR_SIZE } from './utils/constants.js';
31
- import { calculateColumnRenderInfos, calculateTotalWidth, calculateTotalHeight } from './utils/tableCalculations.js';
31
+ import { calculateTotalHeight, calculateColumnRenderInfos, calculateTotalWidth } from './utils/tableCalculations.js';
32
32
  import 'zmdms-utils';
33
33
  import 'dayjs';
34
34
  import { TABLE_DYNAMIC_KEY } from '../table/constant.js';
@@ -122,9 +122,28 @@ function CanvasTable(props) {
122
122
  var containerHeight = containerSize.height;
123
123
  // 计算列的渲染信息(使用容器宽度进行自适应填充)
124
124
  // 手动调整过宽度的列不参与自动宽度分配
125
+ // 注意:需要先预判是否会有垂直滚动条,如果有则预留滚动条宽度
125
126
  var columnRenderInfos = useMemo(function () {
126
- return calculateColumnRenderInfos(processedColumns, containerWidth, manuallyResizedColumnKeys);
127
- }, [processedColumns, containerWidth, manuallyResizedColumnKeys]);
127
+ // 计算原始总高度
128
+ var tempTotalHeight = calculateTotalHeight(headerHeight, // 使用基础表头高度做粗略判断
129
+ finalDataSource.length, rowHeight);
130
+ // 判断是否需要垂直滚动条
131
+ var needVerticalScrollbar = tempTotalHeight > containerHeight;
132
+ // 第二步:计算实际可用宽度(如果需要垂直滚动条,减去滚动条宽度)
133
+ var availableWidth = needVerticalScrollbar
134
+ ? containerWidth - SCROLLBAR_SIZE
135
+ : containerWidth;
136
+ // 第三步:使用可用宽度进行自适应填充
137
+ return calculateColumnRenderInfos(processedColumns, availableWidth, manuallyResizedColumnKeys);
138
+ }, [
139
+ processedColumns,
140
+ containerWidth,
141
+ containerHeight,
142
+ headerHeight,
143
+ finalDataSource.length,
144
+ rowHeight,
145
+ manuallyResizedColumnKeys,
146
+ ]);
128
147
  // 计算表头动态高度(支持wrap换行)
129
148
  // 注意:必须在 columnRenderInfos 计算之后,以便使用实际的列宽
130
149
  var calculatedHeaderHeight = useHeaderHeight({
@@ -111,37 +111,88 @@ var useTableScroll = function (params) {
111
111
  // 允许过滤弹框内部滚动
112
112
  return;
113
113
  }
114
- e.preventDefault();
115
- e.stopPropagation();
116
114
  // 当鼠标在容器内任何位置(包括CellOverlay)时都能滚动
117
115
  // 累积滚动增量
118
116
  // 支持 Shift + 鼠标滚轮进行水平滚动
117
+ var deltaX = 0;
118
+ var deltaY = 0;
119
119
  if (e.shiftKey) {
120
120
  // 按住 Shift 键时,将垂直滚动转换为水平滚动
121
- pendingDeltaRef.current.deltaX += e.deltaY;
122
- pendingDeltaRef.current.deltaY += 0;
121
+ deltaX = e.deltaY;
122
+ deltaY = 0;
123
123
  }
124
124
  else {
125
125
  // 正常滚动逻辑
126
- pendingDeltaRef.current.deltaX += e.deltaX;
127
- pendingDeltaRef.current.deltaY += e.deltaY;
126
+ deltaX = e.deltaX;
127
+ deltaY = e.deltaY;
128
+ }
129
+ // 检查是否需要支持父元素滚动
130
+ // 1. 如果没有滚动条(maxScrollTop 和 maxScrollLeft 都为 0)
131
+ // 2. 或者已经滚动到底部且继续向下滚动
132
+ // 3. 或者已经滚动到顶部且继续向上滚动
133
+ var hasNoVerticalScrollbar = maxScrollTop <= 0;
134
+ var hasNoHorizontalScrollbar = maxScrollLeft <= 0;
135
+ var isAtBottom = Math.abs(scrollState.scrollTop - maxScrollTop) < 1;
136
+ var isAtTop = scrollState.scrollTop <= 0;
137
+ var isAtRight = Math.abs(scrollState.scrollLeft - maxScrollLeft) < 1;
138
+ var isAtLeft = scrollState.scrollLeft <= 0;
139
+ var shouldAllowParentScroll = false;
140
+ // 垂直滚动检查
141
+ if (deltaY !== 0) {
142
+ if (hasNoVerticalScrollbar) {
143
+ // 没有垂直滚动条,允许父元素滚动
144
+ shouldAllowParentScroll = true;
145
+ }
146
+ else if (deltaY > 0 && isAtBottom) {
147
+ // 向下滚动且已在底部,允许父元素滚动
148
+ shouldAllowParentScroll = true;
149
+ }
150
+ else if (deltaY < 0 && isAtTop) {
151
+ // 向上滚动且已在顶部,允许父元素滚动
152
+ shouldAllowParentScroll = true;
153
+ }
128
154
  }
155
+ // 水平滚动检查
156
+ if (deltaX !== 0) {
157
+ if (hasNoHorizontalScrollbar) {
158
+ // 没有水平滚动条,允许父元素滚动
159
+ shouldAllowParentScroll = true;
160
+ }
161
+ else if (deltaX > 0 && isAtRight) {
162
+ // 向右滚动且已在右边界,允许父元素滚动
163
+ shouldAllowParentScroll = true;
164
+ }
165
+ else if (deltaX < 0 && isAtLeft) {
166
+ // 向左滚动且已在左边界,允许父元素滚动
167
+ shouldAllowParentScroll = true;
168
+ }
169
+ }
170
+ // 如果需要支持父元素滚动,不阻止默认行为
171
+ if (shouldAllowParentScroll) {
172
+ return;
173
+ }
174
+ // 阻止默认行为和事件冒泡
175
+ e.preventDefault();
176
+ e.stopPropagation();
177
+ // 累积滚动增量
178
+ pendingDeltaRef.current.deltaX += deltaX;
179
+ pendingDeltaRef.current.deltaY += deltaY;
129
180
  // 如果已经有pending的动画帧,不需要再次请求
130
181
  if (rafIdRef.current !== null) {
131
182
  return;
132
183
  }
133
184
  // 使用 requestAnimationFrame 节流更新
134
185
  rafIdRef.current = requestAnimationFrame(function () {
135
- var deltaX = pendingDeltaRef.current.deltaX;
136
- var deltaY = pendingDeltaRef.current.deltaY;
186
+ var accumulatedDeltaX = pendingDeltaRef.current.deltaX;
187
+ var accumulatedDeltaY = pendingDeltaRef.current.deltaY;
137
188
  // 重置累积的增量
138
189
  pendingDeltaRef.current.deltaX = 0;
139
190
  pendingDeltaRef.current.deltaY = 0;
140
191
  rafIdRef.current = null;
141
192
  // 批量更新状态
142
193
  setScrollState(function (prev) {
143
- var newScrollTop = Math.max(0, Math.min(maxScrollTop, prev.scrollTop + deltaY));
144
- var newScrollLeft = Math.max(0, Math.min(maxScrollLeft, prev.scrollLeft + deltaX));
194
+ var newScrollTop = Math.max(0, Math.min(maxScrollTop, prev.scrollTop + accumulatedDeltaY));
195
+ var newScrollLeft = Math.max(0, Math.min(maxScrollLeft, prev.scrollLeft + accumulatedDeltaX));
145
196
  if (newScrollTop !== prev.scrollTop ||
146
197
  newScrollLeft !== prev.scrollLeft) {
147
198
  onScroll === null || onScroll === void 0 ? void 0 : onScroll(newScrollLeft, newScrollTop);
@@ -162,7 +213,7 @@ var useTableScroll = function (params) {
162
213
  rafIdRef.current = null;
163
214
  }
164
215
  };
165
- }, [containerRef, maxScrollTop, maxScrollLeft, onScroll, setScrollState]);
216
+ }, [containerRef, maxScrollTop, maxScrollLeft, onScroll, setScrollState, scrollState.scrollTop, scrollState.scrollLeft]);
166
217
  // 全局鼠标事件处理(拖拽滚动条)
167
218
  useEffect(function () {
168
219
  var handleGlobalMouseUp = function () {
@@ -30,7 +30,7 @@ var formatCellValue = function (value, column, noEmptyText) {
30
30
  formattedValue = formatDate(formattedValue, column.dateFormat);
31
31
  }
32
32
  // 数值精度
33
- if (column.precision !== undefined && typeof formattedValue === "number") {
33
+ if (column.precision !== undefined) {
34
34
  formattedValue = exactRound(formattedValue, column.precision);
35
35
  }
36
36
  // 千分符
@@ -88,18 +88,26 @@ var calculateTotalHeight = function (headerHeight, dataLength, rowHeight) {
88
88
  */
89
89
  var calculateScrollbarMetrics = function (params) {
90
90
  var containerWidth = params.containerWidth, containerHeight = params.containerHeight, totalWidth = params.totalWidth, totalHeight = params.totalHeight, headerHeight = params.headerHeight, scrollbarSize = params.scrollbarSize, minScrollbarSize = params.minScrollbarSize, scrollTop = params.scrollTop, scrollLeft = params.scrollLeft;
91
- // 是否需要显示滚动条
91
+ // 计算实际可用的内容区域尺寸
92
+ // 注意:需要先确定是否需要滚动条,这里采用两次判断的方式
93
+ // 第一次判断:基于原始容器尺寸
92
94
  var needVerticalScrollbar = totalHeight > containerHeight;
93
95
  var needHorizontalScrollbar = totalWidth > containerWidth;
94
- // 计算可滚动的最大值
95
- // maxScrollTop 需要考虑水平滚动条占用的空间
96
- // 当有水平滚动条时,数据可视区域减少了 scrollbarSize 的高度
97
- var maxScrollTop = Math.max(0, totalHeight -
98
- containerHeight +
99
- (needHorizontalScrollbar ? scrollbarSize : 0));
100
- // maxScrollLeft 需要考虑垂直滚动条占用的空间
101
- // 当有垂直滚动条时,数据可视区域减少了 scrollbarSize 的宽度
102
- var maxScrollLeft = Math.max(0, totalWidth - containerWidth + (needVerticalScrollbar ? scrollbarSize : 0));
96
+ // 第二次判断:考虑滚动条互相影响
97
+ // 如果有垂直滚动条,可用宽度会减少,可能导致需要水平滚动条
98
+ if (needVerticalScrollbar && !needHorizontalScrollbar) {
99
+ needHorizontalScrollbar = totalWidth > containerWidth - scrollbarSize;
100
+ }
101
+ // 如果有水平滚动条,可用高度会减少,可能导致需要垂直滚动条
102
+ if (needHorizontalScrollbar && !needVerticalScrollbar) {
103
+ needVerticalScrollbar = totalHeight > containerHeight - scrollbarSize;
104
+ }
105
+ // 计算实际可用的内容区域尺寸(减去滚动条占用的空间)
106
+ var availableWidth = containerWidth - (needVerticalScrollbar ? scrollbarSize : 0);
107
+ var availableHeight = containerHeight - (needHorizontalScrollbar ? scrollbarSize : 0);
108
+ // 计算可滚动的最大值(基于实际可用空间)
109
+ var maxScrollTop = Math.max(0, totalHeight - availableHeight);
110
+ var maxScrollLeft = Math.max(0, totalWidth - availableWidth);
103
111
  // 计算数据区域高度(不包括表头和水平滚动条)
104
112
  var dataAreaHeight = containerHeight -
105
113
  headerHeight -
@@ -0,0 +1,19 @@
1
+ import { __assign } from '../_virtual/_tslib.js';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import classNames from '../node_modules/classnames/index.js';
4
+ import MemoInput from '../input/input.js';
5
+ import MemoTag from '../tag/tag.js';
6
+
7
+ var ChatRoom = function (props) {
8
+ var bordered = props.bordered, _a = props.height, height = _a === void 0 ? "88vh" : _a, _b = props.title, title = _b === void 0 ? "会议列表" : _b;
9
+ var containerClassName = classNames("ztxk-chat-room--container", {
10
+ "ztxk-chat-room--container--bordered": bordered,
11
+ });
12
+ return (jsxs("div", __assign({ className: containerClassName, style: { height: height } }, { children: [jsxs("div", __assign({ className: "ztxk-chat-room--left" }, { children: [jsx("div", __assign({ className: "ztxk-chat-room--title", title: title }, { children: title })), jsx("div", __assign({ className: "ztxk-chat-room--search" }, { children: jsx(MemoInput.Search, { placeholder: "\u641C\u7D22\u4F1A\u8BAE" }) })), jsx("div", __assign({ className: "ztxk-chat-room--list" }, { children: Array(10)
13
+ .fill(1)
14
+ .map(function (item, index) { return (jsxs("div", __assign({ className: classNames("ztxk-chat-room--list__item", {
15
+ active: index === 0,
16
+ }) }, { children: [jsx("div", __assign({ className: "ztxk-chat-room--item__name" }, { children: jsx("span", { children: "\u963F\u677E\u5927\u963F\u677E\u5927\u963F\u677E\u5927" }) })), jsxs("div", __assign({ className: "ztxk-chat-room--item__text" }, { children: [jsxs("div", __assign({ className: "ztxk-chat-room--item__text--top" }, { children: [jsx("div", __assign({ className: "ztxk-chat-room--item__text--room" }, { children: "\u623F\u95F4\u53F7" })), jsx(MemoTag, __assign({ className: "" }, { children: "\u6807\u7B7E" }))] })), jsx("div", __assign({ className: "ztxk-chat-room--item__text--bottom" }, { children: "\u6D88\u606F\u63D0\u793A\u5BCC\u6587\u672C" }))] })), jsxs("div", __assign({ className: "ztxk-chat-room--item__other" }, { children: [jsx("div", __assign({ className: "ztxk-chat-room--item__other--name" }, { children: "\u4E1A\u52A1\u5458\u6C47\u62A5" })), jsx("div", __assign({ className: "ztxk-chat-room--item__other--time" }, { children: "\u65F6\u95F4" }))] }))] }), index)); }) }))] })), jsxs("div", __assign({ className: "ztxk-chat-room--right" }, { children: [jsx("div", __assign({ className: "ztxk-chat-room--title" }, { children: "\u4F1A\u8BAE\u8BE6\u60C5" })), jsx("div", __assign({ className: "ztxk-chat-room--content" }, { children: jsx("div", __assign({ className: "ztxk-chat-room--content--item" }, { children: "\u4F1A\u8BAE\u540D\u79F0\uFF1A\u4F1A\u8BAE1" })) }))] }))] })));
17
+ };
18
+
19
+ export { ChatRoom as default };
@@ -0,0 +1 @@
1
+ .ztxk-chat-room--container{box-sizing:border-box;display:flex;flex-direction:row}.ztxk-chat-room--container.ztxk-chat-room--container--bordered{border:1px solid #e5e5e5;padding:10px}.ztxk-chat-room--container .ztxk-chat-room--left{background:#fff;box-sizing:border-box;display:flex;flex-direction:column;height:100%;width:300px}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--title{align-items:center;box-sizing:border-box;display:flex;height:50px;justify-content:center;line-height:22px;padding:0 10px}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--search{box-sizing:border-box;padding:10px 4px}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--search .ant-input-search input{background-color:#f0f0f0;border:none;border-radius:10px 0 0 10px}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--search .ant-input-search input:focus{box-shadow:none}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--search .ant-input-search .ant-input-group-addon{border-radius:0 10px 10px 0}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--search .ant-input-search .ant-input-group-addon button{background-color:#f0f0f0;border:none;border-radius:0 10px 10px 0;box-shadow:none}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list{flex:1;overflow-x:hidden;overflow-y:auto}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item{align-items:center;box-sizing:border-box;cursor:pointer;display:flex;height:60px}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item:hover{background-color:#d9d9d9}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item.active{background-color:#c0e2ff!important}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item .ztxk-chat-room--item__name{word-wrap:break-word;background-color:#69f;border-radius:5px;color:#fff;display:flex;flex-shrink:0;height:58px;padding:5px;text-align:center;transform:scale(.8);width:48px;word-break:break-all}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item .ztxk-chat-room--item__name>span{font-size:12px;line-height:18px;text-align:center}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item .ztxk-chat-room--item__text{box-sizing:border-box;display:flex;flex:1;flex-direction:column;font-size:12px;height:48px;justify-content:space-between}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item .ztxk-chat-room--item__text .ztxk-chat-room--item__text--top{align-items:center;display:flex;justify-content:space-between;width:160px}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item .ztxk-chat-room--item__text .ztxk-chat-room--item__text--top .ztxk-chat-room--item__text--room{display:block;font-size:12px;font-weight:bolder;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:120px}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item .ztxk-chat-room--item__text .ztxk-chat-room--item__text--bottom{color:#a2a2a2;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:160px}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item .ztxk-chat-room--item__text .ztxk-chat-room--item__text--bottom a{color:#1890ff}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item .ztxk-chat-room--item__other{display:flex;flex-direction:column;font-size:12px;height:48px;justify-content:space-between;text-align:right;width:80px}.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item .ztxk-chat-room--item__other .ztxk-chat-room--item__other--name,.ztxk-chat-room--container .ztxk-chat-room--left .ztxk-chat-room--list .ztxk-chat-room--list__item .ztxk-chat-room--item__other .ztxk-chat-room--item__other--time{color:#a2a2a2;font-size:12px;overflow:hidden;padding-right:5px;text-overflow:ellipsis;white-space:nowrap}.ztxk-chat-room--container .ztxk-chat-room--right{flex:1}
@@ -0,0 +1,5 @@
1
+ import ChatRoom from './chat-room.js';
2
+
3
+
4
+
5
+ export { ChatRoom as default };
@@ -78,6 +78,10 @@ interface IModalProps extends Omit<ModalProps, "onOk"> {
78
78
  * 点击确认时的校验
79
79
  */
80
80
  onOkValidate?: (type?: string) => Promise<any>;
81
+ /**
82
+ * 是否可以拖拽
83
+ */
84
+ isDrag?: boolean;
81
85
  }
82
86
  interface IModalComponent extends React__default.ForwardRefExoticComponent<IModalProps & React__default.RefAttributes<unknown>> {
83
87
  info: typeof Modal.info;
@@ -4,21 +4,22 @@ import { forwardRef, useState, useCallback, useImperativeHandle } from 'react';
4
4
  import { Modal as Modal$1 } from 'antd';
5
5
  import classNames from '../node_modules/classnames/index.js';
6
6
  import { setCancelBtnProps } from './utils.js';
7
+ import useDraggable from './useDraggable.js';
7
8
  import myMessage from '../message/index.js';
8
9
 
9
10
  var Modal = function (_a, ref) {
10
- var className = _a.className, defaultOpen = _a.defaultOpen, defaultTitle = _a.defaultTitle, defaultConfirmMsg = _a.defaultConfirmMsg, defaultConfirmOkText = _a.defaultConfirmOkText, defaultType = _a.defaultType, confirmPreHandle = _a.confirmPreHandle, confirmOnOk = _a.confirmOnOk, onOk = _a.onOk, footer = _a.footer, onOkValidate = _a.onOkValidate, resetProps = __rest(_a, ["className", "defaultOpen", "defaultTitle", "defaultConfirmMsg", "defaultConfirmOkText", "defaultType", "confirmPreHandle", "confirmOnOk", "onOk", "footer", "onOkValidate"]);
11
+ var className = _a.className, defaultOpen = _a.defaultOpen, defaultTitle = _a.defaultTitle, defaultConfirmMsg = _a.defaultConfirmMsg, defaultConfirmOkText = _a.defaultConfirmOkText, defaultType = _a.defaultType, confirmPreHandle = _a.confirmPreHandle, confirmOnOk = _a.confirmOnOk, onOk = _a.onOk, footer = _a.footer, onOkValidate = _a.onOkValidate, _b = _a.isDrag, isDrag = _b === void 0 ? true : _b, modalTitle = _a.title, modalRender = _a.modalRender, resetProps = __rest(_a, ["className", "defaultOpen", "defaultTitle", "defaultConfirmMsg", "defaultConfirmOkText", "defaultType", "confirmPreHandle", "confirmOnOk", "onOk", "footer", "onOkValidate", "isDrag", "title", "modalRender"]);
11
12
  var classes = classNames("ztxk-modal", className);
12
13
  // 模态框基本属性
13
- var _b = useState(defaultOpen), open = _b[0], setOpen = _b[1];
14
- var _c = useState(defaultTitle), title = _c[0], setTitle = _c[1];
15
- var _d = useState(), loading = _d[0], setLoading = _d[1];
14
+ var _c = useState(defaultOpen), open = _c[0], setOpen = _c[1];
15
+ var _d = useState(defaultTitle), title = _d[0], setTitle = _d[1];
16
+ var _e = useState(), loading = _e[0], setLoading = _e[1];
16
17
  // 二次确认框相关配置
17
- var _e = useState(confirmOnOk ? true : false), isConfirm = _e[0], setIsConfirm = _e[1];
18
- var _f = useState(defaultConfirmMsg), confirmMsg = _f[0], setConfirmMsg = _f[1];
19
- var _g = useState(defaultConfirmOkText), confirmOkText = _g[0], setConfirmOkText = _g[1];
18
+ var _f = useState(confirmOnOk ? true : false), isConfirm = _f[0], setIsConfirm = _f[1];
19
+ var _g = useState(defaultConfirmMsg), confirmMsg = _g[0], setConfirmMsg = _g[1];
20
+ var _h = useState(defaultConfirmOkText), confirmOkText = _h[0], setConfirmOkText = _h[1];
20
21
  // 模态框类型
21
- var _h = useState(defaultType), type = _h[0], setType = _h[1];
22
+ var _j = useState(defaultType), type = _j[0], setType = _j[1];
22
23
  var close = useCallback(function () {
23
24
  setOpen(false);
24
25
  }, []);
@@ -140,7 +141,12 @@ var Modal = function (_a, ref) {
140
141
  setConfirmMsg: setConfirmOkText,
141
142
  };
142
143
  });
143
- return (jsx(Modal$1, __assign({ open: open, onCancel: close, className: classes, okText: "\u4FDD\u5B58", onOk: footer ? undefined : onOkHandle, width: "70%", title: title, keyboard: false, maskClosable: false, confirmLoading: loading, cancelButtonProps: { loading: loading }, footer: footer }, resetProps)));
144
+ var _k = useDraggable({
145
+ isDrag: isDrag,
146
+ title: modalTitle || title,
147
+ modalRender: modalRender,
148
+ }), dragTitle = _k.dragTitle, dragModalRender = _k.dragModalRender;
149
+ return (jsx(Modal$1, __assign({ open: open, onCancel: close, className: classes, okText: "\u4FDD\u5B58", onOk: footer ? undefined : onOkHandle, width: "70%", title: dragTitle, keyboard: false, maskClosable: false, confirmLoading: loading, cancelButtonProps: { loading: loading }, footer: footer, modalRender: dragModalRender }, resetProps)));
144
150
  };
145
151
  var ModalComponent = forwardRef(Modal);
146
152
  ModalComponent.displayName = "ZTXK_WEBUI_ModalComponent";
@@ -0,0 +1,51 @@
1
+ import { __assign } from '../_virtual/_tslib.js';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { useState, useRef } from 'react';
4
+ import Draggable from '../node_modules/react-draggable/build/cjs/cjs.js';
5
+
6
+ var useDraggable = function (options) {
7
+ var isDrag = options.isDrag, title = options.title;
8
+ var _a = useState(true), disabled = _a[0], setDisabled = _a[1];
9
+ var _b = useState({
10
+ left: 0,
11
+ top: 0,
12
+ bottom: 0,
13
+ right: 0,
14
+ }), bounds = _b[0], setBounds = _b[1];
15
+ var draggleRef = useRef(null);
16
+ var onStart = function (_event, uiData) {
17
+ var _a;
18
+ var _b = window.document.documentElement, clientWidth = _b.clientWidth, clientHeight = _b.clientHeight;
19
+ var targetRect = (_a = draggleRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
20
+ if (!targetRect) {
21
+ return;
22
+ }
23
+ setBounds({
24
+ left: -targetRect.left + uiData.x,
25
+ right: clientWidth - (targetRect.right - uiData.x),
26
+ top: -targetRect.top + uiData.y,
27
+ bottom: clientHeight - (targetRect.bottom - uiData.y),
28
+ });
29
+ };
30
+ var dragTitle = isDrag ? (jsx("div", __assign({ style: {
31
+ width: "100%",
32
+ cursor: "move",
33
+ }, onMouseOver: function () {
34
+ if (disabled) {
35
+ setDisabled(false);
36
+ }
37
+ }, onMouseOut: function () {
38
+ setDisabled(true);
39
+ },
40
+ // fix eslintjsx-a11y/mouse-events-have-key-events
41
+ // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md
42
+ onFocus: function () { }, onBlur: function () { } }, { children: title }))) : (title);
43
+ var dragModalRender = isDrag
44
+ ? function (modal) {
45
+ return (jsx(Draggable, __assign({ disabled: disabled, bounds: bounds, onStart: function (event, uiData) { return onStart(event, uiData); } }, { children: jsx("div", __assign({ ref: draggleRef }, { children: modal })) })));
46
+ }
47
+ : options.modalRender;
48
+ return { dragTitle: dragTitle, dragModalRender: dragModalRender };
49
+ };
50
+
51
+ export { useDraggable as default };
@@ -1,5 +1,5 @@
1
1
  import { getDefaultExportFromCjs } from '../../_virtual/_commonjsHelpers.js';
2
- import { __module as immutabilityHelper } from '../../_virtual/index2.js';
2
+ import { __module as immutabilityHelper } from '../../_virtual/index4.js';
3
3
 
4
4
  (function (module, exports) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,99 @@
1
+ /*
2
+ object-assign
3
+ (c) Sindre Sorhus
4
+ @license MIT
5
+ */
6
+
7
+ var objectAssign;
8
+ var hasRequiredObjectAssign;
9
+
10
+ function requireObjectAssign () {
11
+ if (hasRequiredObjectAssign) return objectAssign;
12
+ hasRequiredObjectAssign = 1;
13
+ /* eslint-disable no-unused-vars */
14
+ var getOwnPropertySymbols = Object.getOwnPropertySymbols;
15
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
16
+ var propIsEnumerable = Object.prototype.propertyIsEnumerable;
17
+
18
+ function toObject(val) {
19
+ if (val === null || val === undefined) {
20
+ throw new TypeError('Object.assign cannot be called with null or undefined');
21
+ }
22
+
23
+ return Object(val);
24
+ }
25
+
26
+ function shouldUseNative() {
27
+ try {
28
+ if (!Object.assign) {
29
+ return false;
30
+ }
31
+
32
+ // Detect buggy property enumeration order in older V8 versions.
33
+
34
+ // https://bugs.chromium.org/p/v8/issues/detail?id=4118
35
+ var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
36
+ test1[5] = 'de';
37
+ if (Object.getOwnPropertyNames(test1)[0] === '5') {
38
+ return false;
39
+ }
40
+
41
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
42
+ var test2 = {};
43
+ for (var i = 0; i < 10; i++) {
44
+ test2['_' + String.fromCharCode(i)] = i;
45
+ }
46
+ var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
47
+ return test2[n];
48
+ });
49
+ if (order2.join('') !== '0123456789') {
50
+ return false;
51
+ }
52
+
53
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
54
+ var test3 = {};
55
+ 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
56
+ test3[letter] = letter;
57
+ });
58
+ if (Object.keys(Object.assign({}, test3)).join('') !==
59
+ 'abcdefghijklmnopqrst') {
60
+ return false;
61
+ }
62
+
63
+ return true;
64
+ } catch (err) {
65
+ // We don't expect any of the above to throw, but better to be safe.
66
+ return false;
67
+ }
68
+ }
69
+
70
+ objectAssign = shouldUseNative() ? Object.assign : function (target, source) {
71
+ var from;
72
+ var to = toObject(target);
73
+ var symbols;
74
+
75
+ for (var s = 1; s < arguments.length; s++) {
76
+ from = Object(arguments[s]);
77
+
78
+ for (var key in from) {
79
+ if (hasOwnProperty.call(from, key)) {
80
+ to[key] = from[key];
81
+ }
82
+ }
83
+
84
+ if (getOwnPropertySymbols) {
85
+ symbols = getOwnPropertySymbols(from);
86
+ for (var i = 0; i < symbols.length; i++) {
87
+ if (propIsEnumerable.call(from, symbols[i])) {
88
+ to[symbols[i]] = from[symbols[i]];
89
+ }
90
+ }
91
+ }
92
+ }
93
+
94
+ return to;
95
+ };
96
+ return objectAssign;
97
+ }
98
+
99
+ export { requireObjectAssign as __require };