@pisell/private-materials 3.4.76 → 3.4.78

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 (208) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/index.js +1 -1
  5. package/build/lowcode/meta.js +2 -2
  6. package/build/lowcode/preview.js +7 -7
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +9 -9
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +10 -10
  11. package/es/components/booking/addons/model.d.ts +1 -10
  12. package/es/components/booking/forms/model.d.ts +1 -10
  13. package/es/components/booking/info/clientVariant/hooks/useIsLowSpeedNetwork.d.ts +0 -1
  14. package/es/components/booking/info/hooks/useInfoHolder.d.ts +1 -0
  15. package/es/components/booking/info/model.d.ts +1 -10
  16. package/es/components/booking/info/service/addService/utils.d.ts +1 -1
  17. package/es/components/booking/info2/service/addService/utils.d.ts +1 -1
  18. package/es/components/booking/model.d.ts +1 -9
  19. package/es/components/booking/notes/model.d.ts +1 -10
  20. package/es/components/booking/payments/model.d.ts +1 -10
  21. package/es/components/booking/utils.d.ts +2 -2
  22. package/es/components/eftpos/hooks.d.ts +0 -1
  23. package/es/components/eftposPay/amount.d.ts +1 -1
  24. package/es/components/eftposPay/device.d.ts +1 -1
  25. package/es/components/eftposPay/hooks.d.ts +1 -1
  26. package/es/components/eftposPay/store/index.d.ts +2 -2
  27. package/es/components/eftposPay/tyro/hooks.d.ts +0 -1
  28. package/es/components/eventBooking/components/ErrorTip/index.d.ts +0 -1
  29. package/es/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/WeekItem/index.d.ts +0 -1
  30. package/es/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/index.d.ts +0 -1
  31. package/es/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/Item/DayItem/index.d.ts +0 -1
  32. package/es/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/Item/index.d.ts +0 -1
  33. package/es/components/pay/toC/PaymentMethods/StripePay/Stripe/StripeSDK/index.d.ts +0 -1
  34. package/es/components/pay/toC/model.d.ts +1 -9
  35. package/es/components/schedules/model.d.ts +1 -9
  36. package/es/components/shoppingCart/components/Empty/index.d.ts +1 -0
  37. package/es/hooks/useTranslationOriginal.d.ts +1 -0
  38. package/es/hooks/useTranslationOriginal.js +10 -0
  39. package/es/index.d.ts +3 -0
  40. package/es/index.js +3 -0
  41. package/es/plus/clientCard/index.d.ts +7 -0
  42. package/es/plus/clientCard/index.js +462 -0
  43. package/es/plus/clientCard/index.less +515 -0
  44. package/es/plus/clientCard/line/index.d.ts +9 -0
  45. package/es/plus/clientCard/line/index.js +157 -0
  46. package/es/plus/clientCard/line/index.less +142 -0
  47. package/es/plus/clientCard/locales.d.ts +18 -0
  48. package/es/plus/clientCard/locales.js +17 -0
  49. package/es/plus/clientCard/types.d.ts +135 -0
  50. package/es/plus/clientCard/types.js +1 -0
  51. package/es/plus/clientCard/utils.d.ts +8 -0
  52. package/es/plus/clientCard/utils.js +59 -0
  53. package/es/plus/clinetSearch/Add/BirthdayField/index.d.ts +3 -0
  54. package/es/plus/clinetSearch/Add/BirthdayField/index.js +277 -0
  55. package/es/plus/clinetSearch/Add/GenderField/index.d.ts +3 -0
  56. package/es/plus/clinetSearch/Add/GenderField/index.js +18 -0
  57. package/es/plus/clinetSearch/Add/PhoneField/index.d.ts +3 -0
  58. package/es/plus/clinetSearch/Add/PhoneField/index.js +52 -0
  59. package/es/plus/clinetSearch/Add/PhoneField/serve.d.ts +2 -0
  60. package/es/plus/clinetSearch/Add/PhoneField/serve.js +166 -0
  61. package/es/plus/clinetSearch/Add/index.d.ts +18 -0
  62. package/es/plus/clinetSearch/Add/index.js +213 -0
  63. package/es/plus/clinetSearch/Add/index.less +30 -0
  64. package/es/plus/clinetSearch/InfiniteScroll/InfiniteScroll.d.ts +5 -0
  65. package/es/plus/clinetSearch/InfiniteScroll/InfiniteScroll.js +265 -0
  66. package/es/plus/clinetSearch/InfiniteScroll/index.d.ts +2 -0
  67. package/es/plus/clinetSearch/InfiniteScroll/index.js +1 -0
  68. package/es/plus/clinetSearch/InfiniteScroll/types.d.ts +46 -0
  69. package/es/plus/clinetSearch/InfiniteScroll/types.js +1 -0
  70. package/es/plus/clinetSearch/index.d.ts +18 -0
  71. package/es/plus/clinetSearch/index.js +234 -0
  72. package/es/plus/clinetSearch/index.less +95 -0
  73. package/es/plus/clinetSearch/locales.d.ts +108 -0
  74. package/es/plus/clinetSearch/locales.js +107 -0
  75. package/es/plus/clinetSearch/serve.d.ts +1 -0
  76. package/es/plus/clinetSearch/serve.js +31 -0
  77. package/es/plus/clinetSearch/types.d.ts +70 -0
  78. package/es/plus/clinetSearch/types.js +1 -0
  79. package/es/plus/saasAttendance/locales.d.ts +63 -0
  80. package/es/plus/saasAttendance/locales.js +71 -2
  81. package/es/plus/saasAttendance/settings/PermissonTab.d.ts +5 -0
  82. package/es/plus/saasAttendance/settings/PermissonTab.js +79 -0
  83. package/es/plus/saasAttendance/settings/ShiftScheduleTab.js +9 -3
  84. package/es/plus/saasAttendance/settings/components/MapField.js +69 -33
  85. package/es/plus/saasAttendance/settings/components/shiftModal/ShiftPreview.d.ts +7 -0
  86. package/es/plus/saasAttendance/settings/components/shiftModal/ShiftPreview.js +149 -0
  87. package/es/plus/saasAttendance/settings/components/shiftModal/ShiftPreview.less +119 -0
  88. package/es/plus/saasAttendance/settings/index.js +7 -0
  89. package/es/plus/saasAttendance/settings/index.less +15 -0
  90. package/es/plus/saasAttendance/settings/types.d.ts +6 -0
  91. package/es/plus/selectHolder/components/ErrorTip/index.d.ts +0 -1
  92. package/es/plus/walletPassGallery/components/passDetail/index.d.ts +2 -0
  93. package/es/plus/walletPassGallery/components/passDetail/index.js +104 -39
  94. package/es/plus/walletPassGallery/components/timelineSection/index.d.ts +2 -0
  95. package/es/plus/walletPassGallery/components/timelineSection/index.js +19 -2
  96. package/es/plus/walletPassGallery/index.d.ts +4 -0
  97. package/es/plus/walletPassGallery/index.js +121 -42
  98. package/es/plus/walletPassGallery/serve.d.ts +3 -1
  99. package/es/plus/walletPassGallery/serve.js +13 -13
  100. package/es/pro/pisellPhoneKeyboard/index.d.ts +13 -0
  101. package/es/pro/pisellPhoneKeyboard/index.js +210 -0
  102. package/es/pro/pisellPhoneKeyboard/index.less +157 -0
  103. package/es/pro/pisellPhoneKeyboard/locales.d.ts +12 -0
  104. package/es/pro/pisellPhoneKeyboard/locales.js +11 -0
  105. package/lib/components/booking/addons/model.d.ts +1 -10
  106. package/lib/components/booking/forms/model.d.ts +1 -10
  107. package/lib/components/booking/info/clientVariant/hooks/useIsLowSpeedNetwork.d.ts +0 -1
  108. package/lib/components/booking/info/hooks/useInfoHolder.d.ts +1 -0
  109. package/lib/components/booking/info/model.d.ts +1 -10
  110. package/lib/components/booking/info/service/addService/utils.d.ts +1 -1
  111. package/lib/components/booking/info2/service/addService/utils.d.ts +1 -1
  112. package/lib/components/booking/model.d.ts +1 -9
  113. package/lib/components/booking/notes/model.d.ts +1 -10
  114. package/lib/components/booking/payments/model.d.ts +1 -10
  115. package/lib/components/booking/utils.d.ts +2 -2
  116. package/lib/components/eftpos/hooks.d.ts +0 -1
  117. package/lib/components/eftposPay/amount.d.ts +1 -1
  118. package/lib/components/eftposPay/device.d.ts +1 -1
  119. package/lib/components/eftposPay/hooks.d.ts +1 -1
  120. package/lib/components/eftposPay/store/index.d.ts +2 -2
  121. package/lib/components/eftposPay/tyro/hooks.d.ts +0 -1
  122. package/lib/components/eventBooking/components/ErrorTip/index.d.ts +0 -1
  123. package/lib/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/WeekItem/index.d.ts +0 -1
  124. package/lib/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/CalenDateWeek/index.d.ts +0 -1
  125. package/lib/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/Item/DayItem/index.d.ts +0 -1
  126. package/lib/components/eventBooking/components/bookingAvailabilityCalendar/components/CalendarDate/Item/index.d.ts +0 -1
  127. package/lib/components/pay/toC/PaymentMethods/StripePay/Stripe/StripeSDK/index.d.ts +0 -1
  128. package/lib/components/pay/toC/model.d.ts +1 -9
  129. package/lib/components/schedules/model.d.ts +1 -9
  130. package/lib/components/shoppingCart/components/Empty/index.d.ts +1 -0
  131. package/lib/hooks/useTranslationOriginal.d.ts +1 -0
  132. package/lib/hooks/useTranslationOriginal.js +42 -0
  133. package/lib/index.d.ts +3 -0
  134. package/lib/index.js +9 -0
  135. package/lib/plus/clientCard/index.d.ts +7 -0
  136. package/lib/plus/clientCard/index.js +457 -0
  137. package/lib/plus/clientCard/index.less +515 -0
  138. package/lib/plus/clientCard/line/index.d.ts +9 -0
  139. package/lib/plus/clientCard/line/index.js +153 -0
  140. package/lib/plus/clientCard/line/index.less +142 -0
  141. package/lib/plus/clientCard/locales.d.ts +18 -0
  142. package/lib/plus/clientCard/locales.js +41 -0
  143. package/lib/plus/clientCard/types.d.ts +135 -0
  144. package/lib/plus/clientCard/types.js +17 -0
  145. package/lib/plus/clientCard/utils.d.ts +8 -0
  146. package/lib/plus/clientCard/utils.js +75 -0
  147. package/lib/plus/clinetSearch/Add/BirthdayField/index.d.ts +3 -0
  148. package/lib/plus/clinetSearch/Add/BirthdayField/index.js +256 -0
  149. package/lib/plus/clinetSearch/Add/GenderField/index.d.ts +3 -0
  150. package/lib/plus/clinetSearch/Add/GenderField/index.js +52 -0
  151. package/lib/plus/clinetSearch/Add/PhoneField/index.d.ts +3 -0
  152. package/lib/plus/clinetSearch/Add/PhoneField/index.js +78 -0
  153. package/lib/plus/clinetSearch/Add/PhoneField/serve.d.ts +2 -0
  154. package/lib/plus/clinetSearch/Add/PhoneField/serve.js +193 -0
  155. package/lib/plus/clinetSearch/Add/index.d.ts +18 -0
  156. package/lib/plus/clinetSearch/Add/index.js +244 -0
  157. package/lib/plus/clinetSearch/Add/index.less +30 -0
  158. package/lib/plus/clinetSearch/InfiniteScroll/InfiniteScroll.d.ts +5 -0
  159. package/lib/plus/clinetSearch/InfiniteScroll/InfiniteScroll.js +235 -0
  160. package/lib/plus/clinetSearch/InfiniteScroll/index.d.ts +2 -0
  161. package/lib/plus/clinetSearch/InfiniteScroll/index.js +35 -0
  162. package/lib/plus/clinetSearch/InfiniteScroll/types.d.ts +46 -0
  163. package/lib/plus/clinetSearch/InfiniteScroll/types.js +17 -0
  164. package/lib/plus/clinetSearch/index.d.ts +18 -0
  165. package/lib/plus/clinetSearch/index.js +237 -0
  166. package/lib/plus/clinetSearch/index.less +95 -0
  167. package/lib/plus/clinetSearch/locales.d.ts +108 -0
  168. package/lib/plus/clinetSearch/locales.js +131 -0
  169. package/lib/plus/clinetSearch/serve.d.ts +1 -0
  170. package/lib/plus/clinetSearch/serve.js +33 -0
  171. package/lib/plus/clinetSearch/types.d.ts +70 -0
  172. package/lib/plus/clinetSearch/types.js +17 -0
  173. package/lib/plus/saasAttendance/locales.d.ts +63 -0
  174. package/lib/plus/saasAttendance/locales.js +65 -2
  175. package/lib/plus/saasAttendance/settings/PermissonTab.d.ts +5 -0
  176. package/lib/plus/saasAttendance/settings/PermissonTab.js +128 -0
  177. package/lib/plus/saasAttendance/settings/ShiftScheduleTab.js +2 -1
  178. package/lib/plus/saasAttendance/settings/components/MapField.js +50 -11
  179. package/lib/plus/saasAttendance/settings/components/shiftModal/ShiftPreview.d.ts +7 -0
  180. package/lib/plus/saasAttendance/settings/components/shiftModal/ShiftPreview.js +150 -0
  181. package/lib/plus/saasAttendance/settings/components/shiftModal/ShiftPreview.less +119 -0
  182. package/lib/plus/saasAttendance/settings/index.js +12 -0
  183. package/lib/plus/saasAttendance/settings/index.less +15 -0
  184. package/lib/plus/saasAttendance/settings/types.d.ts +6 -0
  185. package/lib/plus/selectHolder/components/ErrorTip/index.d.ts +0 -1
  186. package/lib/plus/walletPassGallery/components/passDetail/index.d.ts +2 -0
  187. package/lib/plus/walletPassGallery/components/passDetail/index.js +57 -5
  188. package/lib/plus/walletPassGallery/components/timelineSection/index.d.ts +2 -0
  189. package/lib/plus/walletPassGallery/components/timelineSection/index.js +17 -2
  190. package/lib/plus/walletPassGallery/index.d.ts +4 -0
  191. package/lib/plus/walletPassGallery/index.js +141 -42
  192. package/lib/plus/walletPassGallery/serve.d.ts +3 -1
  193. package/lib/plus/walletPassGallery/serve.js +2 -2
  194. package/lib/pro/pisellPhoneKeyboard/index.d.ts +13 -0
  195. package/lib/pro/pisellPhoneKeyboard/index.js +219 -0
  196. package/lib/pro/pisellPhoneKeyboard/index.less +157 -0
  197. package/lib/pro/pisellPhoneKeyboard/locales.d.ts +12 -0
  198. package/lib/pro/pisellPhoneKeyboard/locales.js +35 -0
  199. package/lowcode/client-card/fragments/cardStyle.ts +63 -0
  200. package/lowcode/client-card/fragments/nameStyle.ts +34 -0
  201. package/lowcode/client-card/fragments/pisellAvatar.ts +87 -0
  202. package/lowcode/client-card/fragments/tagConfig.ts +88 -0
  203. package/lowcode/client-card/meta.ts +343 -0
  204. package/lowcode/client-search/meta.ts +316 -0
  205. package/lowcode/eco-cup-list/meta.ts +1 -1
  206. package/lowcode/eco-customer-list/meta.ts +1 -1
  207. package/lowcode/wallet-pass-gallery/meta.ts +66 -1
  208. package/package.json +4 -4
@@ -0,0 +1,265 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
11
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
12
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
+ import React, { useRef, useEffect, useState, useCallback, useMemo } from 'react';
14
+ var InfiniteScroll = function InfiniteScroll(_ref) {
15
+ var dataLength = _ref.dataLength,
16
+ next = _ref.next,
17
+ hasMore = _ref.hasMore,
18
+ _ref$loader = _ref.loader,
19
+ loader = _ref$loader === void 0 ? /*#__PURE__*/React.createElement("div", null, "Loading...") : _ref$loader,
20
+ endMessage = _ref.endMessage,
21
+ height = _ref.height,
22
+ _ref$scrollThreshold = _ref.scrollThreshold,
23
+ scrollThreshold = _ref$scrollThreshold === void 0 ? 0.8 : _ref$scrollThreshold,
24
+ onScroll = _ref.onScroll,
25
+ style = _ref.style,
26
+ className = _ref.className,
27
+ scrollableTarget = _ref.scrollableTarget,
28
+ children = _ref.children,
29
+ _ref$inverse = _ref.inverse,
30
+ inverse = _ref$inverse === void 0 ? false : _ref$inverse;
31
+ var _useState = useState(false),
32
+ _useState2 = _slicedToArray(_useState, 2),
33
+ isLoading = _useState2[0],
34
+ setIsLoading = _useState2[1];
35
+ var containerRef = useRef(null);
36
+ var lastDataLength = useRef(dataLength);
37
+ var scrollTimeoutRef = useRef(null);
38
+ var isMountedRef = useRef(true);
39
+ var lastCallTimeRef = useRef(0);
40
+
41
+ // 节流函数
42
+ var throttle = useCallback(function (func, delay) {
43
+ return function () {
44
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
45
+ args[_key] = arguments[_key];
46
+ }
47
+ if (scrollTimeoutRef.current) {
48
+ clearTimeout(scrollTimeoutRef.current);
49
+ }
50
+ scrollTimeoutRef.current = setTimeout(function () {
51
+ return func.apply(void 0, args);
52
+ }, delay);
53
+ };
54
+ }, []);
55
+
56
+ // 计算滚动阈值
57
+ var getScrollThreshold = useCallback(function () {
58
+ if (typeof scrollThreshold === 'string' && scrollThreshold.endsWith('px')) {
59
+ return parseInt(scrollThreshold.replace('px', ''), 10);
60
+ }
61
+ return typeof scrollThreshold === 'number' ? scrollThreshold : 0.8;
62
+ }, [scrollThreshold]);
63
+
64
+ // 检查是否需要加载更多
65
+ var checkScrollPosition = useCallback(function (element) {
66
+ if (!element || !hasMore || isLoading) return;
67
+ var threshold = getScrollThreshold();
68
+ var scrollTop = element.scrollTop,
69
+ scrollHeight = element.scrollHeight,
70
+ clientHeight = element.clientHeight;
71
+
72
+ // 防止无效的滚动值(但不直接返回,而是记录警告)
73
+ if (scrollHeight <= 0 || clientHeight <= 0) {
74
+ console.warn('InfiniteScroll: 检测到无效的滚动容器尺寸');
75
+ return;
76
+ }
77
+
78
+ // 防止scrollTop为负值(某些浏览器可能出现)
79
+ var normalizedScrollTop = Math.max(0, scrollTop);
80
+ var shouldLoadMore = false;
81
+ if (inverse) {
82
+ // 反向滚动模式:检查是否滚动到顶部
83
+ if (typeof threshold === 'number' && threshold < 1) {
84
+ // 百分比阈值
85
+ var scrollPercentage = normalizedScrollTop / scrollHeight;
86
+ shouldLoadMore = scrollPercentage <= 1 - threshold;
87
+ } else {
88
+ // 像素阈值
89
+ shouldLoadMore = normalizedScrollTop <= threshold;
90
+ }
91
+ } else {
92
+ // 正常滚动模式:检查是否滚动到底部
93
+ if (typeof threshold === 'number' && threshold < 1) {
94
+ // 百分比阈值
95
+ var _scrollPercentage = (normalizedScrollTop + clientHeight) / scrollHeight;
96
+ shouldLoadMore = _scrollPercentage >= threshold;
97
+ } else {
98
+ // 像素阈值
99
+ var remainingHeight = scrollHeight - normalizedScrollTop - clientHeight;
100
+ shouldLoadMore = remainingHeight <= threshold;
101
+ }
102
+ }
103
+ if (shouldLoadMore) {
104
+ var now = Date.now();
105
+ // 防重复调用机制:500ms内只允许一次调用
106
+ if (now - lastCallTimeRef.current < 500) {
107
+ return;
108
+ }
109
+ lastCallTimeRef.current = now;
110
+ setIsLoading(true);
111
+ try {
112
+ next();
113
+ } catch (error) {
114
+ console.error('InfiniteScroll: 加载更多数据时发生错误:', error);
115
+ if (isMountedRef.current) {
116
+ setIsLoading(false);
117
+ }
118
+ }
119
+ }
120
+ }, [hasMore, isLoading, next, getScrollThreshold, inverse]);
121
+
122
+ // 检查内容高度是否足够,如果不够则自动加载更多
123
+ var checkInitialLoad = useCallback(function () {
124
+ var element = scrollableTarget ? document.getElementById(scrollableTarget) : containerRef.current;
125
+ if (!element || !hasMore || isLoading) return;
126
+ var scrollHeight = element.scrollHeight,
127
+ clientHeight = element.clientHeight;
128
+
129
+ // 防止无效的容器尺寸
130
+ if (clientHeight <= 0) {
131
+ console.warn('InfiniteScroll: 容器高度无效,可能容器尚未渲染完成');
132
+ return;
133
+ }
134
+
135
+ // 如果内容高度不足以填满容器,或者没有任何内容,自动加载更多
136
+ var needsMoreContent = scrollHeight <= clientHeight || dataLength === 0;
137
+ if (needsMoreContent) {
138
+ var now = Date.now();
139
+ // 防重复调用机制:500ms内只允许一次调用
140
+ if (now - lastCallTimeRef.current < 500) {
141
+ return;
142
+ }
143
+ lastCallTimeRef.current = now;
144
+ setIsLoading(true);
145
+ try {
146
+ next();
147
+ } catch (error) {
148
+ console.error('InfiniteScroll: 初始加载时发生错误:', error);
149
+ if (isMountedRef.current) {
150
+ setIsLoading(false);
151
+ }
152
+ }
153
+ }
154
+ }, [hasMore, isLoading, next, scrollableTarget, dataLength]);
155
+
156
+ // 滚动事件处理(使用节流)
157
+ var handleScrollInternal = useCallback(function (event) {
158
+ try {
159
+ // 获取正确的滚动元素
160
+ var element = event.target;
161
+
162
+ // 额外的安全检查
163
+ if (!element || typeof element.scrollTop === 'undefined') {
164
+ console.warn('InfiniteScroll: 无效的滚动目标元素');
165
+ return;
166
+ }
167
+ checkScrollPosition(element);
168
+ if (onScroll) {
169
+ onScroll(event);
170
+ }
171
+ } catch (error) {
172
+ console.error('InfiniteScroll: 滚动事件处理时发生错误:', error);
173
+ }
174
+ }, [checkScrollPosition, onScroll]);
175
+ var handleScroll = useMemo(function () {
176
+ return throttle(handleScrollInternal, 16);
177
+ },
178
+ // 约60fps
179
+ [throttle, handleScrollInternal]);
180
+
181
+ // 监听数据长度变化,重置加载状态
182
+ useEffect(function () {
183
+ if (dataLength !== lastDataLength.current) {
184
+ if (isMountedRef.current) {
185
+ setIsLoading(false);
186
+ }
187
+ lastDataLength.current = dataLength;
188
+ }
189
+ }, [dataLength]);
190
+
191
+ // 组件卸载时的清理
192
+ useEffect(function () {
193
+ return function () {
194
+ isMountedRef.current = false;
195
+ };
196
+ }, []);
197
+
198
+ // 清理定时器
199
+ useEffect(function () {
200
+ return function () {
201
+ if (scrollTimeoutRef.current) {
202
+ clearTimeout(scrollTimeoutRef.current);
203
+ }
204
+ };
205
+ }, []);
206
+
207
+ // 检查初始内容高度,确保首屏有足够内容
208
+ useEffect(function () {
209
+ // 使用setTimeout确保DOM已经渲染
210
+ var timeoutId = setTimeout(function () {
211
+ checkInitialLoad();
212
+ }, 100);
213
+ return function () {
214
+ return clearTimeout(timeoutId);
215
+ };
216
+ }, [checkInitialLoad, dataLength]);
217
+
218
+ // 当数据加载完成后,再次检查是否需要继续加载
219
+ useEffect(function () {
220
+ if (!isLoading && hasMore) {
221
+ var timeoutId = setTimeout(function () {
222
+ checkInitialLoad();
223
+ }, 100);
224
+ return function () {
225
+ return clearTimeout(timeoutId);
226
+ };
227
+ }
228
+ }, [isLoading, hasMore, checkInitialLoad]);
229
+
230
+ // 设置滚动监听
231
+ useEffect(function () {
232
+ var element = scrollableTarget ? document.getElementById(scrollableTarget) : containerRef.current;
233
+ if (!element) {
234
+ console.warn('InfiniteScroll: 无法找到滚动容器元素');
235
+ return;
236
+ }
237
+
238
+ // 使用类型安全的事件处理器
239
+ var scrollHandler = handleScroll;
240
+ element.addEventListener('scroll', scrollHandler, {
241
+ passive: true
242
+ });
243
+ return function () {
244
+ // 确保清理所有事件监听器
245
+ if (element) {
246
+ element.removeEventListener('scroll', scrollHandler);
247
+ }
248
+ };
249
+ }, [handleScroll, scrollableTarget]);
250
+ var containerStyle = useMemo(function () {
251
+ return _objectSpread(_objectSpread(_objectSpread({}, style), height && {
252
+ height: typeof height === 'number' ? "".concat(height, "px") : height,
253
+ overflowY: 'auto'
254
+ }), inverse && {
255
+ display: 'flex',
256
+ flexDirection: 'column-reverse'
257
+ });
258
+ }, [style, height, inverse]);
259
+ return /*#__PURE__*/React.createElement("div", {
260
+ ref: !scrollableTarget ? containerRef : undefined,
261
+ className: className,
262
+ style: containerStyle
263
+ }, inverse ? /*#__PURE__*/React.createElement(React.Fragment, null, isLoading && hasMore && loader, !hasMore && endMessage, children) : /*#__PURE__*/React.createElement(React.Fragment, null, children, isLoading && hasMore && loader, !hasMore && endMessage));
264
+ };
265
+ export default InfiniteScroll;
@@ -0,0 +1,2 @@
1
+ export { default } from './InfiniteScroll';
2
+ export type { InfiniteScrollProps, ScrollPosition, TouchInfo, InfiniteScrollState } from './types';
@@ -0,0 +1 @@
1
+ export { default } from "./InfiniteScroll";
@@ -0,0 +1,46 @@
1
+ import { ReactNode, CSSProperties } from 'react';
2
+ /**
3
+ * 无限滚动组件的属性接口
4
+ */
5
+ export interface InfiniteScrollProps {
6
+ /** 数据长度,用于判断是否需要加载更多 */
7
+ dataLength: number;
8
+ /** 加载更多数据的函数 */
9
+ next: () => void;
10
+ /** 是否还有更多数据 */
11
+ hasMore: boolean;
12
+ /** 加载中显示的组件 */
13
+ loader?: ReactNode;
14
+ /** 没有更多数据时显示的组件 */
15
+ endMessage?: ReactNode;
16
+ /** 滚动容器的高度 */
17
+ height?: number | string;
18
+ /** 滚动阈值,0-1之间的数值或像素值 */
19
+ scrollThreshold?: number | string;
20
+ /** 滚动事件回调 */
21
+ onScroll?: (event: Event) => void;
22
+ /** 自定义样式 */
23
+ style?: CSSProperties;
24
+ /** 自定义类名 */
25
+ className?: string;
26
+ /** 指定滚动容器的目标元素ID */
27
+ scrollableTarget?: string;
28
+ /** 子元素 */
29
+ children: ReactNode;
30
+ /** 是否反向滚动 */
31
+ inverse?: boolean;
32
+ }
33
+ /**
34
+ * 滚动位置信息
35
+ */
36
+ export interface ScrollPosition {
37
+ scrollTop: number;
38
+ scrollHeight: number;
39
+ clientHeight: number;
40
+ }
41
+ /**
42
+ * 组件内部状态
43
+ */
44
+ export interface InfiniteScrollState {
45
+ isLoading: boolean;
46
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { TableProps } from 'antd';
3
+ import type { ComprehensiveSearchProps } from '../../pro/comprehensiveSearch/types';
4
+ import type { ClientData } from './types';
5
+ import './index.less';
6
+ interface ClientSearchProps extends Omit<ComprehensiveSearchProps, 'resultDisplay' | 'onRowClick'> {
7
+ onRowClick?: (record: ClientData, index: number) => void;
8
+ onAddClient?: (record: ClientData, isChecked: boolean) => void;
9
+ resultProps?: TableProps<ClientData>;
10
+ hasMore?: boolean;
11
+ onLoadMore?: () => void;
12
+ state?: any;
13
+ }
14
+ export declare type ClientSearchRef = {
15
+ resetScrollPosition: () => void;
16
+ };
17
+ declare const ClientSearch: React.ForwardRefExoticComponent<ClientSearchProps & React.RefAttributes<ClientSearchRef>>;
18
+ export default ClientSearch;
@@ -0,0 +1,234 @@
1
+ var _excluded = ["onRowClick", "resultProps", "onAddClient", "hasMore", "onLoadMore", "state"];
2
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
7
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
8
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
9
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
10
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
11
+ import React, { forwardRef, useImperativeHandle, useRef, useState } from 'react';
12
+ import { Tag, List } from 'antd';
13
+ // @ts-ignore
14
+ import { locales } from '@pisell/utils';
15
+ import dayjs from 'dayjs';
16
+ import InfiniteScroll from "./InfiniteScroll";
17
+ import ComprehensiveSearch from "../../pro/comprehensiveSearch";
18
+ import ClientName from "../clientName";
19
+ import AddClient from "./Add";
20
+ import localeTexts from "./locales";
21
+ import useEngineContext from "../../hooks/useEngineContext";
22
+ import useTranslationOriginal from "../../hooks/useTranslationOriginal";
23
+ import "./index.less";
24
+ var ClientSearch = /*#__PURE__*/forwardRef(function (_ref, ref) {
25
+ var _context$appHelper, _state$bookingConfig, _context$appHelper2;
26
+ var onRowClick = _ref.onRowClick,
27
+ resultProps = _ref.resultProps,
28
+ onAddClient = _ref.onAddClient,
29
+ hasMore = _ref.hasMore,
30
+ onLoadMore = _ref.onLoadMore,
31
+ state = _ref.state,
32
+ props = _objectWithoutProperties(_ref, _excluded);
33
+ var _useState = useState(false),
34
+ _useState2 = _slicedToArray(_useState, 2),
35
+ modalVisible = _useState2[0],
36
+ setModalVisible = _useState2[1];
37
+ var comprehensiveSearchRef = useRef(null);
38
+ var addClientRef = useRef(null);
39
+ var scrollContainerRef = useRef(null);
40
+ var translationOriginal = useTranslationOriginal();
41
+ var context = useEngineContext();
42
+ locales.init(localeTexts, ((_context$appHelper = context.appHelper) === null || _context$appHelper === void 0 || (_context$appHelper = _context$appHelper.utils) === null || _context$appHelper === void 0 || (_context$appHelper = _context$appHelper.storage) === null || _context$appHelper === void 0 ? void 0 : _context$appHelper.get('umi_locale')) || 'en');
43
+ var appointmentSubject = (state === null || state === void 0 || (_state$bookingConfig = state.bookingConfig) === null || _state$bookingConfig === void 0 || (_state$bookingConfig = _state$bookingConfig.config) === null || _state$bookingConfig === void 0 || (_state$bookingConfig = _state$bookingConfig.basic) === null || _state$bookingConfig === void 0 ? void 0 : _state$bookingConfig.appointment_subject) || {};
44
+ var translation = context === null || context === void 0 || (_context$appHelper2 = context.appHelper) === null || _context$appHelper2 === void 0 || (_context$appHelper2 = _context$appHelper2.utils) === null || _context$appHelper2 === void 0 ? void 0 : _context$appHelper2.translationShop;
45
+ var handleAdd = function handleAdd() {
46
+ setModalVisible(true);
47
+ };
48
+ var handleModalCancel = function handleModalCancel() {
49
+ var _addClientRef$current;
50
+ setModalVisible(false);
51
+ (_addClientRef$current = addClientRef.current) === null || _addClientRef$current === void 0 || _addClientRef$current.reset();
52
+ };
53
+
54
+ // 渲染列表头部
55
+ var renderListHeader = function renderListHeader() {
56
+ return /*#__PURE__*/React.createElement("div", {
57
+ className: "client-search-list-header"
58
+ }, /*#__PURE__*/React.createElement("div", {
59
+ className: "header-item",
60
+ style: {
61
+ width: 180
62
+ }
63
+ }, locales.getText('pisell2.text.client-search.name')), /*#__PURE__*/React.createElement("div", {
64
+ className: "header-item",
65
+ style: {
66
+ width: 110
67
+ }
68
+ }, locales.getText('pisell2.text.client-search.register-time')), /*#__PURE__*/React.createElement("div", {
69
+ className: "header-item",
70
+ style: {
71
+ width: 125
72
+ }
73
+ }, locales.getText('pisell2.text.client-search.membership')), /*#__PURE__*/React.createElement("div", {
74
+ className: "header-item",
75
+ style: {
76
+ width: 180
77
+ }
78
+ }, locales.getText('pisell2.text.client-search.contact-info')), /*#__PURE__*/React.createElement("div", {
79
+ className: "header-item",
80
+ style: {
81
+ width: 200
82
+ }
83
+ }, translation(appointmentSubject === null || appointmentSubject === void 0 ? void 0 : appointmentSubject.form_name) || locales.getText('pisell2.text.client-search.holder')));
84
+ };
85
+
86
+ // 自定义结果展示组件
87
+ var renderResults = function renderResults(searchResults) {
88
+ return /*#__PURE__*/React.createElement(React.Fragment, null, searchResults !== null && searchResults !== void 0 && searchResults.length ? renderListHeader() : null, /*#__PURE__*/React.createElement("div", {
89
+ ref: scrollContainerRef,
90
+ id: "client-search_infinite-scroll",
91
+ style: {
92
+ height: 'calc(100% - 40px)',
93
+ overflowY: 'auto',
94
+ overflowX: 'hidden',
95
+ display: 'flex'
96
+ }
97
+ }, /*#__PURE__*/React.createElement(InfiniteScroll, {
98
+ dataLength: searchResults.length,
99
+ next: function next() {
100
+ console.log('loading more');
101
+ onLoadMore === null || onLoadMore === void 0 || onLoadMore();
102
+ },
103
+ hasMore: hasMore || false,
104
+ style: {
105
+ width: '100%'
106
+ },
107
+ loader: /*#__PURE__*/React.createElement("div", {
108
+ style: {
109
+ textAlign: 'center',
110
+ padding: '20px',
111
+ color: '#999'
112
+ }
113
+ }, locales.getText('pisell2.text.loading')),
114
+ endMessage: /*#__PURE__*/React.createElement("div", {
115
+ style: {
116
+ textAlign: 'center',
117
+ color: '#999'
118
+ }
119
+ }, searchResults !== null && searchResults !== void 0 && searchResults.length ? locales.getText('pisell2.text.no-more-data') : null),
120
+ scrollableTarget: "client-search_infinite-scroll",
121
+ scrollThreshold: '180px'
122
+ }, /*#__PURE__*/React.createElement(List, {
123
+ dataSource: searchResults,
124
+ renderItem: function renderItem(item, index) {
125
+ var _latest_wallet_detail, _item$contacts_info, _item$contacts_info2, _item$contacts_info3, _item$form_record, _item$form_record2;
126
+ var membershipText = (_latest_wallet_detail = item.latest_wallet_detail) === null || _latest_wallet_detail === void 0 || (_latest_wallet_detail = _latest_wallet_detail.wallet) === null || _latest_wallet_detail === void 0 ? void 0 : _latest_wallet_detail.name;
127
+ return /*#__PURE__*/React.createElement(List.Item, {
128
+ key: item.id,
129
+ className: "client-search-list-item"
130
+ }, /*#__PURE__*/React.createElement("div", {
131
+ className: "list-item-content",
132
+ onClick: function onClick() {
133
+ return onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick(item, index || 0);
134
+ },
135
+ style: {
136
+ cursor: 'pointer'
137
+ }
138
+ }, /*#__PURE__*/React.createElement("div", {
139
+ className: "item-cell",
140
+ style: {
141
+ width: 180
142
+ }
143
+ }, /*#__PURE__*/React.createElement(ClientName, {
144
+ dataSource: item
145
+ }), /*#__PURE__*/React.createElement("div", null, item.phone || '-'), /*#__PURE__*/React.createElement("div", {
146
+ style: {
147
+ overflow: 'hidden',
148
+ textOverflow: 'ellipsis',
149
+ whiteSpace: 'nowrap'
150
+ }
151
+ }, item.email || '-')), /*#__PURE__*/React.createElement("div", {
152
+ className: "item-cell",
153
+ style: {
154
+ width: 110
155
+ }
156
+ }, dayjs(item.created_at).format('YYYY-MM-DD') || '-'), /*#__PURE__*/React.createElement("div", {
157
+ className: "item-cell",
158
+ style: {
159
+ width: 125
160
+ }
161
+ }, membershipText && translationOriginal !== null && translationOriginal !== void 0 && translationOriginal(membershipText) ? /*#__PURE__*/React.createElement(Tag, {
162
+ color: "gold",
163
+ style: {
164
+ overflow: 'hidden',
165
+ whiteSpace: 'nowrap',
166
+ textOverflow: 'ellipsis',
167
+ width: 'auto',
168
+ maxWidth: '100%',
169
+ display: 'inline-block',
170
+ borderRadius: 16,
171
+ marginRight: 0
172
+ }
173
+ }, translationOriginal === null || translationOriginal === void 0 ? void 0 : translationOriginal(membershipText)) : '-'), /*#__PURE__*/React.createElement("div", {
174
+ className: "item-cell",
175
+ style: {
176
+ width: 180
177
+ }
178
+ }, /*#__PURE__*/React.createElement(ClientName, {
179
+ dataSource: item === null || item === void 0 || (_item$contacts_info = item.contacts_info) === null || _item$contacts_info === void 0 ? void 0 : _item$contacts_info.value
180
+ }), (item === null || item === void 0 || (_item$contacts_info2 = item.contacts_info) === null || _item$contacts_info2 === void 0 || (_item$contacts_info2 = _item$contacts_info2.value) === null || _item$contacts_info2 === void 0 || (_item$contacts_info2 = _item$contacts_info2.phone) === null || _item$contacts_info2 === void 0 ? void 0 : _item$contacts_info2.phone) || '-', /*#__PURE__*/React.createElement("div", {
181
+ style: {
182
+ overflow: 'hidden',
183
+ textOverflow: 'ellipsis',
184
+ whiteSpace: 'nowrap'
185
+ }
186
+ }, (item === null || item === void 0 || (_item$contacts_info3 = item.contacts_info) === null || _item$contacts_info3 === void 0 || (_item$contacts_info3 = _item$contacts_info3.value) === null || _item$contacts_info3 === void 0 ? void 0 : _item$contacts_info3.email) || '-')), /*#__PURE__*/React.createElement("div", {
187
+ className: "item-cell",
188
+ style: {
189
+ width: 200
190
+ }
191
+ }, (item === null || item === void 0 || (_item$form_record = item.form_record) === null || _item$form_record === void 0 ? void 0 : _item$form_record.length) > 0 ? item === null || item === void 0 || (_item$form_record2 = item.form_record) === null || _item$form_record2 === void 0 ? void 0 : _item$form_record2.map(function (itemForm) {
192
+ return /*#__PURE__*/React.createElement("div", {
193
+ key: itemForm === null || itemForm === void 0 ? void 0 : itemForm.id,
194
+ style: {
195
+ overflow: 'hidden',
196
+ textOverflow: 'ellipsis',
197
+ whiteSpace: 'nowrap'
198
+ }
199
+ }, (itemForm === null || itemForm === void 0 ? void 0 : itemForm.main_field) || '-');
200
+ }) : '-')));
201
+ }
202
+ }))));
203
+ };
204
+ var handleAddClient = function handleAddClient(record, isChecked) {
205
+ onAddClient === null || onAddClient === void 0 || onAddClient(record, isChecked);
206
+ handleModalCancel();
207
+ };
208
+ useImperativeHandle(ref, function () {
209
+ return {
210
+ resetScrollPosition: function resetScrollPosition() {
211
+ if (scrollContainerRef.current) {
212
+ scrollContainerRef.current.scrollTop = 0;
213
+ }
214
+ }
215
+ };
216
+ });
217
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ComprehensiveSearch, _extends({}, props, {
218
+ ref: comprehensiveSearchRef,
219
+ renderType: "modal",
220
+ onAdd: handleAdd,
221
+ resultDisplay: renderResults
222
+ })), /*#__PURE__*/React.createElement(AddClient, {
223
+ containerProps: {
224
+ className: 'pisell-client-search__new-client-modal',
225
+ title: locales.getText('pisell2.text.create-new-client'),
226
+ open: modalVisible,
227
+ onCancel: handleModalCancel,
228
+ width: 680
229
+ },
230
+ onChange: handleAddClient,
231
+ ref: addClientRef
232
+ }));
233
+ });
234
+ export default ClientSearch;
@@ -0,0 +1,95 @@
1
+ .client-search-table {
2
+ .pisell-lowcode-table-tbody > tr {
3
+ cursor: pointer;
4
+
5
+ &:hover {
6
+ background-color: #f5f5f5;
7
+ }
8
+ }
9
+
10
+ .pisell-lowcode-table-thead > tr > th {
11
+ background-color: #fafafa;
12
+ font-weight: 600;
13
+ }
14
+ }
15
+
16
+ // List样式
17
+ .client-search-list-header {
18
+ display: flex;
19
+ background-color: #fafafa;
20
+ border-bottom: 1px solid #d9d9d9;
21
+ padding: 12px 16px;
22
+ font-weight: 600;
23
+
24
+ .header-item {
25
+ flex-shrink: 0;
26
+ padding-right: 16px;
27
+ color: rgba(0, 0, 0, 0.85);
28
+ font-size: 14px;
29
+ word-break: keep-all;
30
+ overflow: hidden;
31
+ word-wrap: normal;
32
+ text-overflow: ellipsis;
33
+ }
34
+ }
35
+
36
+ .client-search-list-item {
37
+ cursor: pointer;
38
+ border-bottom: 1px solid #f0f0f0;
39
+ padding: 0 !important;
40
+
41
+ &:hover {
42
+ background-color: #f5f5f5;
43
+ }
44
+
45
+ &:last-child {
46
+ border-bottom: none;
47
+ }
48
+
49
+ .list-item-content {
50
+ display: flex;
51
+ width: 100%;
52
+ padding: 12px 16px;
53
+
54
+ .item-cell {
55
+ flex-shrink: 0;
56
+ padding-right: 16px;
57
+ color: rgba(0, 0, 0, 0.85);
58
+ font-size: 14px;
59
+ display: flex;
60
+ align-items: center;
61
+ overflow: hidden;
62
+ display: inline-block;
63
+ text-overflow: ellipsis;
64
+ white-space: nowrap;
65
+ }
66
+ }
67
+
68
+ // 添加点击事件处理
69
+ .ant-list-item-meta {
70
+ pointer-events: none;
71
+ }
72
+ }
73
+
74
+ .client-search-form {
75
+ padding: 16px 0;
76
+
77
+ .ant-form-item {
78
+ margin-bottom: 16px;
79
+ }
80
+
81
+ .ant-input {
82
+ height: 40px;
83
+ }
84
+ }
85
+
86
+ .comprehensive-search {
87
+ .comprehensive-search__results-container {
88
+ .client-search-table {
89
+ .pisell-lowcode-table {
90
+ border: 1px solid #d9d9d9;
91
+ border-radius: 6px;
92
+ }
93
+ }
94
+ }
95
+ }