@pisell/private-materials 6.2.35 → 6.2.37

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 (177) 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 +1 -1
  6. package/build/lowcode/preview.js +13 -29
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +6 -6
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +8 -8
  11. package/es/components/appointmentBooking/components/Content/index.js +1 -1
  12. package/es/components/appointmentBooking/components/Content/index.less +3 -3
  13. package/es/components/appointmentBooking/components/Services/index.js +2 -2
  14. package/es/components/appointmentBooking/index.js +8 -2
  15. package/es/components/booking/components/voucher/index.js +5 -0
  16. package/es/components/booking/deposit/ClientItem/index.js +1 -1
  17. package/es/components/booking/deposit/DepositItem/index.js +1 -1
  18. package/es/components/booking/forms/single/RenderValueById.d.ts +1 -0
  19. package/es/components/booking/forms/single/RenderValueById.js +68 -17
  20. package/es/components/booking/forms/single/index.less +67 -1
  21. package/es/components/booking/hooks/useQuotation.js +1 -1
  22. package/es/components/booking/info/clientVariant/utils.d.ts +2 -0
  23. package/es/components/booking/info/clientVariant/utils.js +7 -0
  24. package/es/components/booking/info/clientVariant/vertical/index.js +3 -2
  25. package/es/components/booking/info2/service/addService/utils.js +2 -1
  26. package/es/components/booking/info2/service/addTimeModal/index.js +0 -1
  27. package/es/components/booking/info2/service/editService/index.js +37 -29
  28. package/es/components/booking/info2/utilsByBooking.js +4 -4
  29. package/es/components/booking/locales.d.ts +3 -0
  30. package/es/components/booking/locales.js +6 -3
  31. package/es/components/booking/materiels/duration/index.js +1 -1
  32. package/es/components/booking/materiels/startTime/index.d.ts +1 -0
  33. package/es/components/booking/materiels/startTime/index.js +1 -1
  34. package/es/components/booking/utils.js +3 -3
  35. package/es/components/eftposPay/amount.d.ts +1 -1
  36. package/es/components/eftposPay/device.d.ts +1 -1
  37. package/es/components/eftposPay/store/index.d.ts +3 -3
  38. package/es/components/eventBooking/index.js +8 -1
  39. package/es/components/productSelect/components/TabProduct/index.js +7 -2
  40. package/es/components/schedules/utils.d.ts +1 -1
  41. package/es/components/shoppingCart/components/Cart/Product.js +2 -1
  42. package/es/components/ticketBooking/components/addServiceVariant/addService.js +172 -91
  43. package/es/components/ticketBooking/components/timeBar/index.js +3 -3
  44. package/es/components/ticketBooking/utils/index.d.ts +3 -1
  45. package/es/components/ticketBooking/utils/index.js +18 -2
  46. package/es/hooks/useWindowSize.js +8 -1
  47. package/es/plus/productSelect/CategoryTabs/CategorySkeleton.d.ts +10 -0
  48. package/es/plus/productSelect/CategoryTabs/CategorySkeleton.js +29 -0
  49. package/es/plus/productSelect/CategoryTabs/CategorySkeleton.less +30 -0
  50. package/es/plus/productSelect/CategoryTabs/index.d.ts +18 -0
  51. package/es/plus/productSelect/CategoryTabs/index.js +171 -0
  52. package/es/plus/productSelect/ProductCard/ProductCardSkeleton.d.ts +10 -0
  53. package/es/plus/productSelect/ProductCard/ProductCardSkeleton.js +37 -0
  54. package/es/plus/productSelect/ProductCard/ProductCardSkeleton.less +81 -0
  55. package/es/plus/productSelect/ProductCard/index.d.ts +45 -0
  56. package/es/plus/productSelect/ProductCard/index.js +170 -0
  57. package/es/plus/productSelect/ProductCard/index.less +270 -0
  58. package/es/plus/productSelect/ProductList/gridComponents.d.ts +44 -0
  59. package/es/plus/productSelect/ProductList/gridComponents.js +149 -0
  60. package/es/plus/productSelect/ProductList/index.d.ts +22 -0
  61. package/es/plus/productSelect/ProductList/index.js +72 -0
  62. package/es/plus/productSelect/ProductList/index.less +0 -0
  63. package/es/plus/productSelect/components/IntersectionObserver.d.ts +42 -0
  64. package/es/plus/productSelect/components/IntersectionObserver.js +276 -0
  65. package/es/plus/productSelect/components/TabsStructure/TabsStructure.d.ts +30 -0
  66. package/es/plus/productSelect/components/TabsStructure/TabsStructure.js +357 -0
  67. package/es/plus/productSelect/components/TabsStructure/TabsStructure.less +224 -0
  68. package/es/plus/productSelect/components/TabsStructure/hooks.d.ts +22 -0
  69. package/es/plus/productSelect/components/TabsStructure/hooks.js +243 -0
  70. package/es/plus/productSelect/components/TabsStructure/index.d.ts +5 -0
  71. package/es/plus/productSelect/components/TabsStructure/index.js +13 -0
  72. package/es/plus/productSelect/components/TabsStructure/styles.d.ts +47 -0
  73. package/es/plus/productSelect/components/TabsStructure/styles.js +87 -0
  74. package/es/plus/productSelect/components/TabsStructure/types.d.ts +105 -0
  75. package/es/plus/productSelect/components/TabsStructure/types.js +1 -0
  76. package/es/plus/productSelect/components/TabsStructure/utils.d.ts +12 -0
  77. package/es/plus/productSelect/components/TabsStructure/utils.js +56 -0
  78. package/es/plus/productSelect/components/pisellPriceText/index.d.ts +11 -0
  79. package/es/plus/productSelect/components/pisellPriceText/index.js +43 -0
  80. package/es/plus/productSelect/hooks/useToken.d.ts +18 -0
  81. package/es/plus/productSelect/hooks/useToken.js +34 -0
  82. package/es/plus/productSelect/index.d.ts +31 -0
  83. package/es/plus/productSelect/index.js +270 -0
  84. package/es/plus/productSelect/index.less +56 -0
  85. package/es/plus/productSelect/locales.d.ts +18 -0
  86. package/es/plus/productSelect/locales.js +17 -0
  87. package/es/plus/productSelect/theme/token.d.ts +17 -0
  88. package/es/plus/productSelect/theme/token.js +19 -0
  89. package/es/plus/productSelect/utils.d.ts +39 -0
  90. package/es/plus/productSelect/utils.js +162 -0
  91. package/es/pro/pisellNumberSelector/index.js +3 -3
  92. package/es/pro/pisellPhoneKeyboard/index.js +1 -1
  93. package/es/utils/index.d.ts +1 -1
  94. package/lib/components/appointmentBooking/components/Content/index.js +1 -1
  95. package/lib/components/appointmentBooking/components/Content/index.less +3 -3
  96. package/lib/components/appointmentBooking/components/Services/index.js +2 -2
  97. package/lib/components/appointmentBooking/index.js +6 -1
  98. package/lib/components/booking/components/voucher/index.js +5 -0
  99. package/lib/components/booking/deposit/ClientItem/index.js +1 -1
  100. package/lib/components/booking/deposit/DepositItem/index.js +1 -1
  101. package/lib/components/booking/forms/single/RenderValueById.d.ts +1 -0
  102. package/lib/components/booking/forms/single/RenderValueById.js +37 -9
  103. package/lib/components/booking/forms/single/index.less +67 -1
  104. package/lib/components/booking/hooks/useQuotation.js +1 -1
  105. package/lib/components/booking/info/clientVariant/utils.d.ts +2 -0
  106. package/lib/components/booking/info/clientVariant/utils.js +13 -2
  107. package/lib/components/booking/info/clientVariant/vertical/index.js +7 -6
  108. package/lib/components/booking/info2/service/addService/utils.js +3 -3
  109. package/lib/components/booking/info2/service/addTimeModal/index.js +0 -1
  110. package/lib/components/booking/info2/service/editService/index.js +22 -12
  111. package/lib/components/booking/info2/utilsByBooking.js +7 -8
  112. package/lib/components/booking/locales.d.ts +3 -0
  113. package/lib/components/booking/locales.js +6 -3
  114. package/lib/components/booking/materiels/duration/index.js +1 -1
  115. package/lib/components/booking/materiels/startTime/index.d.ts +1 -0
  116. package/lib/components/booking/materiels/startTime/index.js +1 -1
  117. package/lib/components/booking/utils.js +3 -3
  118. package/lib/components/eftposPay/amount.d.ts +1 -1
  119. package/lib/components/eftposPay/device.d.ts +1 -1
  120. package/lib/components/eftposPay/store/index.d.ts +3 -3
  121. package/lib/components/eventBooking/index.js +6 -1
  122. package/lib/components/productSelect/components/TabProduct/index.js +7 -1
  123. package/lib/components/schedules/utils.d.ts +1 -1
  124. package/lib/components/shoppingCart/components/Cart/Product.js +7 -4
  125. package/lib/components/ticketBooking/components/addServiceVariant/addService.js +87 -14
  126. package/lib/components/ticketBooking/components/timeBar/index.js +89 -70
  127. package/lib/components/ticketBooking/utils/index.d.ts +3 -1
  128. package/lib/components/ticketBooking/utils/index.js +21 -0
  129. package/lib/hooks/useWindowSize.js +6 -1
  130. package/lib/plus/productSelect/CategoryTabs/CategorySkeleton.d.ts +10 -0
  131. package/lib/plus/productSelect/CategoryTabs/CategorySkeleton.js +62 -0
  132. package/lib/plus/productSelect/CategoryTabs/CategorySkeleton.less +30 -0
  133. package/lib/plus/productSelect/CategoryTabs/index.d.ts +18 -0
  134. package/lib/plus/productSelect/CategoryTabs/index.js +183 -0
  135. package/lib/plus/productSelect/ProductCard/ProductCardSkeleton.d.ts +10 -0
  136. package/lib/plus/productSelect/ProductCard/ProductCardSkeleton.js +58 -0
  137. package/lib/plus/productSelect/ProductCard/ProductCardSkeleton.less +81 -0
  138. package/lib/plus/productSelect/ProductCard/index.d.ts +45 -0
  139. package/lib/plus/productSelect/ProductCard/index.js +184 -0
  140. package/lib/plus/productSelect/ProductCard/index.less +270 -0
  141. package/lib/plus/productSelect/ProductList/gridComponents.d.ts +44 -0
  142. package/lib/plus/productSelect/ProductList/gridComponents.js +148 -0
  143. package/lib/plus/productSelect/ProductList/index.d.ts +22 -0
  144. package/lib/plus/productSelect/ProductList/index.js +86 -0
  145. package/lib/plus/productSelect/ProductList/index.less +0 -0
  146. package/lib/plus/productSelect/components/IntersectionObserver.d.ts +42 -0
  147. package/lib/plus/productSelect/components/IntersectionObserver.js +269 -0
  148. package/lib/plus/productSelect/components/TabsStructure/TabsStructure.d.ts +30 -0
  149. package/lib/plus/productSelect/components/TabsStructure/TabsStructure.js +393 -0
  150. package/lib/plus/productSelect/components/TabsStructure/TabsStructure.less +224 -0
  151. package/lib/plus/productSelect/components/TabsStructure/hooks.d.ts +22 -0
  152. package/lib/plus/productSelect/components/TabsStructure/hooks.js +209 -0
  153. package/lib/plus/productSelect/components/TabsStructure/index.d.ts +5 -0
  154. package/lib/plus/productSelect/components/TabsStructure/index.js +92 -0
  155. package/lib/plus/productSelect/components/TabsStructure/styles.d.ts +47 -0
  156. package/lib/plus/productSelect/components/TabsStructure/styles.js +122 -0
  157. package/lib/plus/productSelect/components/TabsStructure/types.d.ts +105 -0
  158. package/lib/plus/productSelect/components/TabsStructure/types.js +17 -0
  159. package/lib/plus/productSelect/components/TabsStructure/utils.d.ts +12 -0
  160. package/lib/plus/productSelect/components/TabsStructure/utils.js +72 -0
  161. package/lib/plus/productSelect/components/pisellPriceText/index.d.ts +11 -0
  162. package/lib/plus/productSelect/components/pisellPriceText/index.js +72 -0
  163. package/lib/plus/productSelect/hooks/useToken.d.ts +18 -0
  164. package/lib/plus/productSelect/hooks/useToken.js +50 -0
  165. package/lib/plus/productSelect/index.d.ts +31 -0
  166. package/lib/plus/productSelect/index.js +299 -0
  167. package/lib/plus/productSelect/index.less +56 -0
  168. package/lib/plus/productSelect/locales.d.ts +18 -0
  169. package/lib/plus/productSelect/locales.js +41 -0
  170. package/lib/plus/productSelect/theme/token.d.ts +17 -0
  171. package/lib/plus/productSelect/theme/token.js +47 -0
  172. package/lib/plus/productSelect/utils.d.ts +39 -0
  173. package/lib/plus/productSelect/utils.js +138 -0
  174. package/lib/pro/pisellNumberSelector/index.js +3 -3
  175. package/lib/pro/pisellPhoneKeyboard/index.js +1 -1
  176. package/lib/utils/index.d.ts +1 -1
  177. package/package.json +4 -4
@@ -0,0 +1,17 @@
1
+ export default {
2
+ en: {
3
+ 'pisell2.product-select.search': 'Search',
4
+ 'pisell2.product-select.stock': 'Stock',
5
+ 'pisell2.product-select.empty': 'No Data'
6
+ },
7
+ 'zh-CN': {
8
+ 'pisell2.product-select.search': '搜索',
9
+ 'pisell2.product-select.stock': '库存',
10
+ 'pisell2.product-select.empty': '暂无数据'
11
+ },
12
+ 'zh-HK': {
13
+ 'pisell2.product-select.search': '搜索',
14
+ 'pisell2.product-select.stock': '庫存',
15
+ 'pisell2.product-select.empty': '暂无数据'
16
+ }
17
+ };
@@ -0,0 +1,17 @@
1
+ export interface ProductSelectToken {
2
+ colorPrimary: string;
3
+ colorText: string;
4
+ colorTextSecondary: string;
5
+ searchInputColor: string;
6
+ containerBg: string;
7
+ tabItemBg: string;
8
+ tabItemHoverBg: string;
9
+ tabItemActiveBg: string;
10
+ categoryTextColor: string;
11
+ cardBg: string;
12
+ cardHoverBg: string;
13
+ cardSelectedBg: string;
14
+ cardSelectedTextColor: string;
15
+ cardSelectedSecondaryTextColor: string;
16
+ }
17
+ export declare const defaultToken: ProductSelectToken;
@@ -0,0 +1,19 @@
1
+ export var defaultToken = {
2
+ colorPrimary: '#8157D5',
3
+ colorText: '#1B1B1B',
4
+ colorTextSecondary: '#4E4E4E',
5
+ containerBg: '#4E4E4E',
6
+ // search
7
+ searchInputColor: '#98a2b3',
8
+ // tab
9
+ tabItemBg: '#FFFFFF',
10
+ tabItemHoverBg: '#FFFFFF',
11
+ tabItemActiveBg: '#8157D5',
12
+ // category
13
+ categoryTextColor: '#FFFFFF',
14
+ cardBg: '#FFFFFF',
15
+ cardHoverBg: '#eaecf0',
16
+ cardSelectedBg: '#8157D5',
17
+ cardSelectedTextColor: '#ffffff',
18
+ cardSelectedSecondaryTextColor: 'rgba(255, 255, 255, 0.7)'
19
+ };
@@ -0,0 +1,39 @@
1
+ interface Product {
2
+ id: number;
3
+ title: string;
4
+ sort?: number;
5
+ category: Array<{
6
+ id: number;
7
+ name: string;
8
+ icon?: string;
9
+ slug: string;
10
+ sort: number;
11
+ }>;
12
+ [key: string]: any;
13
+ }
14
+ interface CategoryItem {
15
+ __typename: 'category';
16
+ id: number;
17
+ name: string;
18
+ icon?: string;
19
+ slug: string;
20
+ sort: number;
21
+ }
22
+ interface ProductItem extends Product {
23
+ __typename?: 'product';
24
+ }
25
+ declare type ListItem = CategoryItem | ProductItem;
26
+ /**
27
+ * 按目录对商品进行分组,产出平级的数据结构用于虚拟列表渲染
28
+ * @param products 商品列表
29
+ * @returns 包含目录项和商品项的平级数组
30
+ */
31
+ export declare function groupProductsByCategory(products: Product[]): ListItem[];
32
+ /**
33
+ * 根据传入的元素标识符获取DOM元素
34
+ * @param elementIdentifier 元素标识符,可以是HTMLElement、带'#'的id、带'.'的类名或CSS选择器
35
+ * @returns 找到的DOM元素或null
36
+ */
37
+ export declare function getElementByIdentifier(elementIdentifier: HTMLElement | string | null | undefined): HTMLElement | null;
38
+ export declare const getOffsetTopRelativeToScrollContainer: (targetElement: HTMLElement, scrollContainer: HTMLElement) => number;
39
+ export {};
@@ -0,0 +1,162 @@
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 _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
3
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
+ 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); }
5
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
6
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
7
+ 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; }
8
+ 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; }
9
+ 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; }
10
+ 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; }
11
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
12
+ 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); }
13
+ // 商品按目录分组的工具函数
14
+ import { locales } from '@pisell/utils';
15
+ /**
16
+ * 按目录对商品进行分组,产出平级的数据结构用于虚拟列表渲染
17
+ * @param products 商品列表
18
+ * @returns 包含目录项和商品项的平级数组
19
+ */
20
+ export function groupProductsByCategory(products) {
21
+ if (!products || products.length === 0) {
22
+ return [];
23
+ }
24
+
25
+ // 收集所有的目录信息
26
+ var categoryMap = new Map();
27
+ var categoryProductsMap = new Map();
28
+ var uncategorizedProducts = [];
29
+
30
+ // 遍历商品,收集目录信息和建立目录-商品映射
31
+ products.forEach(function (product) {
32
+ if (product.category && Array.isArray(product.category) && product.category.length > 0) {
33
+ product.category.forEach(function (cat) {
34
+ // 收集目录信息
35
+ if (!categoryMap.has(cat.id)) {
36
+ categoryMap.set(cat.id, {
37
+ __typename: 'category',
38
+ id: cat.id,
39
+ name: cat.name,
40
+ icon: cat.icon,
41
+ slug: cat.slug,
42
+ sort: cat.sort
43
+ });
44
+ }
45
+
46
+ // 建立目录-商品映射
47
+ if (!categoryProductsMap.has(cat.id)) {
48
+ categoryProductsMap.set(cat.id, []);
49
+ }
50
+ categoryProductsMap.get(cat.id).push(_objectSpread(_objectSpread({}, product), {}, {
51
+ __typename: 'product',
52
+ __categoryId: cat.id
53
+ }));
54
+ });
55
+ } else {
56
+ // 没有分组的商品放入未分类列表
57
+ uncategorizedProducts.push(_objectSpread(_objectSpread({}, product), {}, {
58
+ __typename: 'product',
59
+ __categoryId: 0
60
+ }));
61
+ }
62
+ });
63
+
64
+ // 按目录的sort字段排序
65
+ var sortedCategories = Array.from(categoryMap.values()).sort(function (a, b) {
66
+ return b.sort - a.sort;
67
+ });
68
+
69
+ // 构建最终的平级数组
70
+ var result = [];
71
+ sortedCategories.forEach(function (category) {
72
+ // 添加目录项
73
+ result.push(category);
74
+
75
+ // 添加该目录下的商品,按商品的sort字段排序
76
+ var categoryProducts = categoryProductsMap.get(category.id) || [];
77
+ var sortedProducts = categoryProducts.sort(function (a, b) {
78
+ var sortA = a.sort || 0;
79
+ var sortB = b.sort || 0;
80
+ return sortB - sortA;
81
+ });
82
+ result.push.apply(result, _toConsumableArray(sortedProducts));
83
+ });
84
+
85
+ // 如果有未分类的商品,添加other分组
86
+ if (uncategorizedProducts.length > 0) {
87
+ var otherCategory = {
88
+ __typename: 'category',
89
+ id: 0,
90
+ name: locales.getText('pisell2.text.other'),
91
+ icon: '',
92
+ slug: 'other',
93
+ sort: 99999999 // 确保other分组排在最后
94
+ };
95
+ result.push(otherCategory);
96
+ // 对未分类商品也进行排序
97
+ var sortedUncategorizedProducts = uncategorizedProducts.sort(function (a, b) {
98
+ var sortA = a.sort || 0;
99
+ var sortB = b.sort || 0;
100
+ return sortB - sortA;
101
+ });
102
+ result.push.apply(result, _toConsumableArray(sortedUncategorizedProducts));
103
+ }
104
+ console.log('xxxxxx', result);
105
+ return result;
106
+ }
107
+
108
+ /**
109
+ * 根据传入的元素标识符获取DOM元素
110
+ * @param elementIdentifier 元素标识符,可以是HTMLElement、带'#'的id、带'.'的类名或CSS选择器
111
+ * @returns 找到的DOM元素或null
112
+ */
113
+ export function getElementByIdentifier(elementIdentifier) {
114
+ // 如果没有提供标识符,返回null
115
+ if (!elementIdentifier) {
116
+ return null;
117
+ }
118
+
119
+ // 如果是HTMLElement,直接返回
120
+ if (elementIdentifier instanceof HTMLElement) {
121
+ return elementIdentifier;
122
+ }
123
+
124
+ // 如果是字符串,判断是id、类名还是选择器
125
+ if (typeof elementIdentifier === 'string') {
126
+ // 如果以#开头,按id查找
127
+ if (elementIdentifier.startsWith('#')) {
128
+ return document.getElementById(elementIdentifier.slice(1));
129
+ }
130
+ // 如果以.开头,按类名查找
131
+ if (elementIdentifier.startsWith('.')) {
132
+ return document.querySelector(elementIdentifier);
133
+ }
134
+ // 否则直接作为选择器查找
135
+ return document.querySelector(elementIdentifier);
136
+ }
137
+ return null;
138
+ }
139
+
140
+ // 获取元素相对于指定滚动容器的偏移量
141
+ export var getOffsetTopRelativeToScrollContainer = function getOffsetTopRelativeToScrollContainer(targetElement, scrollContainer) {
142
+ if (!targetElement || !scrollContainer) return 0;
143
+
144
+ // 如果目标元素就是滚动容器本身,返回0
145
+ if (targetElement === scrollContainer) {
146
+ return 0;
147
+ }
148
+ var bodyTransform = getComputedStyle(document.body).transform;
149
+ var scaleY = 1;
150
+ if (bodyTransform !== 'none') {
151
+ var matrix = new DOMMatrix(bodyTransform);
152
+ scaleY = matrix.d;
153
+ }
154
+ // 使用getBoundingClientRect计算相对偏移量
155
+ var targetRect = targetElement.getBoundingClientRect();
156
+ var containerRect = scrollContainer.getBoundingClientRect();
157
+
158
+ // targetRect.top - containerRect.top 得到目标元素相对于容器顶部的可视距离
159
+ // 考虑容器已经滚动的距离 再加上scrollContainer.scrollTop
160
+ // 这样得到的是目标元素在容器内容中的绝对位置
161
+ return targetRect.top / scaleY - containerRect.top / scaleY + scrollContainer.scrollTop;
162
+ };
@@ -10,9 +10,9 @@ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" !=
10
10
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
11
11
  import React, { useMemo, useState } from 'react';
12
12
  import { Popover } from 'antd';
13
- import Delete from '@pisell/icon/src/Delete';
14
- import Plus from '@pisell/icon/src/Plus';
15
- import Minus from '@pisell/icon/src/Minus';
13
+ import Delete from '@pisell/icon/es/Delete';
14
+ import Plus from '@pisell/icon/es/Plus';
15
+ import Minus from '@pisell/icon/es/Minus';
16
16
  // import { VirtualKeyboard } from '@pisell/materials';
17
17
  import NumberKeyBoard from "../numberKeyboard";
18
18
  import classNames from 'classnames';
@@ -15,7 +15,7 @@ import React, { useState, useMemo, useEffect } from 'react';
15
15
  import { VirtualKeyboard } from '@pisell/materials';
16
16
  import { Popover, Input } from 'antd';
17
17
  import "./index.less";
18
- import Delete from '@pisell/icon/src/Delete';
18
+ import Delete from '@pisell/icon/es/Delete';
19
19
  import { locales } from '@pisell/utils';
20
20
  import localeTexts from "./locales";
21
21
  import { getLocale } from "../../utils/locales";
@@ -18,6 +18,6 @@ declare let modal: Omit<ModalStaticFunctions, 'warn'>;
18
18
  export declare const setModal: (m: Omit<ModalStaticFunctions, 'warn'>) => void;
19
19
  export declare const saveConfirm: () => Promise<{
20
20
  destroy: () => void;
21
- update: (configUpdate: import("antd/es/modal/interface").ModalFuncProps | ((prevConfig: import("antd/es/modal/interface").ModalFuncProps) => import("antd/es/modal/interface").ModalFuncProps)) => void;
21
+ update: (configUpdate: import("antd").ModalFuncProps | ((prevConfig: import("antd").ModalFuncProps) => import("antd").ModalFuncProps)) => void;
22
22
  }>;
23
23
  export { modal };
@@ -199,7 +199,7 @@ var Layout = () => {
199
199
  var _a2, _b2;
200
200
  if ((0, import_utils.isMobile)()) {
201
201
  const header = document.querySelector(".event-progress-bar");
202
- const footer = document.querySelector(".pisell-section-footers-wrapper");
202
+ const footer = document.querySelector(".pisell-section-footers-wrapper") || document.querySelector("#layout-footer");
203
203
  const content = document.querySelector(
204
204
  ".parallel-content-mobile-wrap"
205
205
  );
@@ -7,7 +7,7 @@
7
7
  flex: 1;
8
8
 
9
9
  .pisell-product-select-wrapper {
10
- .pisell-product-select-tabs-wrapper {
10
+ .pisell-product-select__tabs-wrapper {
11
11
  top: 77px !important;
12
12
  }
13
13
  }
@@ -50,7 +50,7 @@
50
50
  flex: none;
51
51
 
52
52
  .pisell-product-select-wrapper {
53
- .pisell-product-select-tabs-wrapper {
53
+ .pisell-product-select__tabs-wrapper {
54
54
  top: 0 !important;
55
55
  }
56
56
  }
@@ -97,7 +97,7 @@
97
97
 
98
98
  .parallel-content-retail-wrap {
99
99
  .pisell-product-select-wrapper {
100
- .pisell-product-select-tabs-wrapper {
100
+ .pisell-product-select__tabs-wrapper {
101
101
  top: 0px !important;
102
102
  }
103
103
  }
@@ -35,7 +35,7 @@ module.exports = __toCommonJS(Services_exports);
35
35
  var import_react = __toESM(require("react"));
36
36
  var import_dayjs = __toESM(require("dayjs"));
37
37
  var import_utils = require("@pisell/utils");
38
- var import_productSelect = __toESM(require("../../../productSelect"));
38
+ var import_productSelect = __toESM(require("../../../../plus/productSelect"));
39
39
  var import_useEngineContext = __toESM(require("../../../../hooks/useEngineContext"));
40
40
  var import_context = require("../../context");
41
41
  var import_hooks = require("../../hooks");
@@ -169,7 +169,7 @@ var Services = (0, import_react.forwardRef)((props, ref) => {
169
169
  const _isMobile = (0, import_react.useMemo)(() => {
170
170
  if (typeof import_utils.isMobile === "function") return (0, import_utils.isMobile)();
171
171
  return import_utils.isMobile;
172
- }, import_utils.isMobile);
172
+ }, [import_utils.isMobile]);
173
173
  return /* @__PURE__ */ import_react.default.createElement("div", { className: "appointment-service-wrap" }, /* @__PURE__ */ import_react.default.createElement(
174
174
  import_productSelect.default,
175
175
  {
@@ -60,7 +60,12 @@ var AppointmentBooking = () => {
60
60
  }, []);
61
61
  (0, import_react.useEffect)(() => {
62
62
  const setRealVH = () => {
63
- const vh = window.innerHeight * 0.01;
63
+ let height = window.innerHeight;
64
+ const urlParams = new URLSearchParams(window.location.search);
65
+ if (urlParams.has("fromTabbar")) {
66
+ height = height - 54;
67
+ }
68
+ const vh = height * 0.01;
64
69
  document.documentElement.style.setProperty("--vh", `${vh}px`);
65
70
  };
66
71
  setRealVH();
@@ -44,6 +44,7 @@ var import_index = require("./index.less");
44
44
  var import_ahooks = require("ahooks");
45
45
  var import_utils2 = require("./utils");
46
46
  var import_pisellos = require("../../../ticketBooking/hooks/pisellos");
47
+ var import_utils3 = require("../../info/clientVariant/utils");
47
48
  var ShopDiscountHooks = {
48
49
  onInited: "shopDiscount:onInited",
49
50
  onDestroy: "shopDiscount:onDestroy",
@@ -174,6 +175,10 @@ var VoucherCard = (props) => {
174
175
  (0, import_react.useEffect)(() => {
175
176
  if (!isBooking4Shop) return;
176
177
  const onScanCustomerChange = (customer) => {
178
+ const clientVariantClose = (0, import_utils3.getClientVariantClose)();
179
+ if (clientVariantClose) {
180
+ clientVariantClose();
181
+ }
177
182
  selectCustomer(customer);
178
183
  };
179
184
  const onDiscountListChange = (discount) => {
@@ -36,7 +36,7 @@ var import_react = __toESM(require("react"));
36
36
  var import_antd = require("antd");
37
37
  var import_utils = require("@pisell/utils");
38
38
  var import_classnames = __toESM(require("classnames"));
39
- var import_User01 = __toESM(require("@pisell/icon/src/User01"));
39
+ var import_User01 = __toESM(require("@pisell/icon/es/User01"));
40
40
  var import_utils2 = require("../../utils");
41
41
  var import_index = require("./index.less");
42
42
  var ClientItem = (props) => {
@@ -37,7 +37,7 @@ var import_antd = require("antd");
37
37
  var import_icons = require("@ant-design/icons");
38
38
  var import_utils = require("@pisell/utils");
39
39
  var import_ClientItem = __toESM(require("../ClientItem"));
40
- var import_Edit05 = __toESM(require("@pisell/icon/src/Edit05"));
40
+ var import_Edit05 = __toESM(require("@pisell/icon/es/Edit05"));
41
41
  var import_index = require("./index.less");
42
42
  var statusTagColor = {
43
43
  unpaid: "#B2DDFF",
@@ -1,3 +1,4 @@
1
+ import './index.less';
1
2
  interface RenderValueByIdProps {
2
3
  field: any;
3
4
  value: any;
@@ -34,17 +34,20 @@ __export(RenderValueById_exports, {
34
34
  module.exports = __toCommonJS(RenderValueById_exports);
35
35
  var import_react = __toESM(require("react"));
36
36
  var import_utils = require("@pisell/utils");
37
+ var import_materials = require("@pisell/materials");
37
38
  var import_antd = require("antd");
38
39
  var import_ahooks = require("ahooks");
39
40
  var import_useEngineContext = __toESM(require("../../../../hooks/useEngineContext"));
40
41
  var import_serve = require("../serve");
42
+ var import_index = require("./index.less");
41
43
  var RenderValueById = (props) => {
42
- var _a, _b, _c, _d, _e, _f;
44
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
43
45
  const { field, value: propsValue } = props;
44
46
  const { appHelper } = (0, import_useEngineContext.default)();
47
+ const [displayCount, setDisplayCount] = (0, import_react.useState)(10);
45
48
  const _getFormData = (0, import_ahooks.useRequest)(import_serve.getFormData, {
46
49
  manual: true,
47
- cacheKey: `formOption-${(_a = field.setting) == null ? void 0 : _a.linkedTable}`,
50
+ cacheKey: `formOption-${(_a = field.setting) == null ? void 0 : _a.linkedTable}-${(_c = (_b = propsValue || []) == null ? void 0 : _b.toString) == null ? void 0 : _c.call(_b)}`,
48
51
  staleTime: 500,
49
52
  cacheTime: 5e3
50
53
  });
@@ -81,24 +84,49 @@ var RenderValueById = (props) => {
81
84
  }))) || [];
82
85
  }
83
86
  return (_e2 = field == null ? void 0 : field.setting) == null ? void 0 : _e2.customTypeList;
84
- }, [field.filed_type, (_b = field == null ? void 0 : field.setting) == null ? void 0 : _b.customTypeList, _getFormData.data]);
87
+ }, [field.filed_type, (_d = field == null ? void 0 : field.setting) == null ? void 0 : _d.customTypeList, _getFormData.data]);
85
88
  if ((0, import_utils.isArr)(value)) {
89
+ const formListDisplay = ((_e = field == null ? void 0 : field.setting) == null ? void 0 : _e.displayStyle) === "list" && (field == null ? void 0 : field.filed_type) === "form_to_form";
86
90
  let _list = options == null ? void 0 : options.filter((i) => {
87
91
  return value == null ? void 0 : value.includes((i == null ? void 0 : i.id) || i.value);
88
92
  });
89
- let _str = (_list == null ? void 0 : _list.map((i) => {
93
+ let _str = !formListDisplay && (_list == null ? void 0 : _list.map((i) => {
90
94
  var _a2;
91
- return /* @__PURE__ */ import_react.default.createElement(import_antd.Tag, null, (_a2 = appHelper == null ? void 0 : appHelper.utils) == null ? void 0 : _a2.translationShop((i == null ? void 0 : i.title) || (i == null ? void 0 : i.label)));
95
+ const title = (_a2 = appHelper == null ? void 0 : appHelper.utils) == null ? void 0 : _a2.translationShop((i == null ? void 0 : i.title) || (i == null ? void 0 : i.label));
96
+ return /* @__PURE__ */ import_react.default.createElement(import_antd.Tooltip, { title }, /* @__PURE__ */ import_react.default.createElement(import_antd.Tag, { className: "pisell-lowcode__booking-form-link-tag-title" }, title));
92
97
  })) || "-";
93
- return /* @__PURE__ */ import_react.default.createElement("span", null, _str || "-");
98
+ if (formListDisplay) {
99
+ const displayList = (_list == null ? void 0 : _list.slice(0, displayCount)) || [];
100
+ _str = (displayList == null ? void 0 : displayList.map((i, index) => {
101
+ var _a2;
102
+ const title = (_a2 = appHelper == null ? void 0 : appHelper.utils) == null ? void 0 : _a2.translationShop((i == null ? void 0 : i.title) || (i == null ? void 0 : i.label));
103
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-lowcode__booking-form-link-to-list-item" }, /* @__PURE__ */ import_react.default.createElement("span", { className: "pisell-lowcode__booking-form-link-to-list-item-index" }, index + 1), /* @__PURE__ */ import_react.default.createElement(import_antd.Tooltip, { title }, /* @__PURE__ */ import_react.default.createElement("span", { className: "pisell-lowcode__booking-form-link-to-list-item-title" }, title)));
104
+ })) || "-";
105
+ }
106
+ return /* @__PURE__ */ import_react.default.createElement(
107
+ "span",
108
+ {
109
+ className: formListDisplay ? "pisell-lowcode__booking-form-link-to-list-wrap" : ""
110
+ },
111
+ _str || "-",
112
+ formListDisplay && (_list == null ? void 0 : _list.length) > displayCount && /* @__PURE__ */ import_react.default.createElement(
113
+ "div",
114
+ {
115
+ className: "pisell-lowcode__booking-form-link-to-list-item-more",
116
+ onClick: () => setDisplayCount((prev) => Math.min(prev + 10, (_list == null ? void 0 : _list.length) || 0))
117
+ },
118
+ /* @__PURE__ */ import_react.default.createElement("span", null, import_utils.locales.getText("pisell2.text.form.link.to.another.record.more")),
119
+ /* @__PURE__ */ import_react.default.createElement(import_materials.Iconfont, { type: "icona-IconStroke" })
120
+ )
121
+ );
94
122
  }
95
123
  if (!(0, import_utils.isUndefined)(value)) {
96
- if ((field == null ? void 0 : field.filed_type) === "select" && !((_c = field == null ? void 0 : field.setting) == null ? void 0 : _c.version)) {
124
+ if ((field == null ? void 0 : field.filed_type) === "select" && !((_f = field == null ? void 0 : field.setting) == null ? void 0 : _f.version)) {
97
125
  return /* @__PURE__ */ import_react.default.createElement("span", null, value || "-");
98
126
  }
99
127
  let _item = options == null ? void 0 : options.filter((i) => (i == null ? void 0 : i.id) == value);
100
- return ((_f = appHelper == null ? void 0 : appHelper.utils) == null ? void 0 : _f.translationShop(
101
- ((_d = _item == null ? void 0 : _item[0]) == null ? void 0 : _d.title) || ((_e = _item == null ? void 0 : _item[0]) == null ? void 0 : _e.label)
128
+ return ((_i = appHelper == null ? void 0 : appHelper.utils) == null ? void 0 : _i.translationShop(
129
+ ((_g = _item == null ? void 0 : _item[0]) == null ? void 0 : _g.title) || ((_h = _item == null ? void 0 : _item[0]) == null ? void 0 : _h.label)
102
130
  )) || "-";
103
131
  }
104
132
  return null;
@@ -1,3 +1,69 @@
1
1
  .attachment-item {
2
2
  width: 100%;
3
- }
3
+ }
4
+
5
+ .pisell-lowcode__booking-form-link-tag-title {
6
+ overflow: hidden;
7
+ text-overflow: ellipsis;
8
+ white-space: nowrap;
9
+ display: inline-block;
10
+ max-width: 100%;
11
+ }
12
+
13
+ .pisell-lowcode__booking-form-link-to-list-wrap {
14
+ display: flex;
15
+ flex-direction: column;
16
+ gap: 12px;
17
+
18
+
19
+ .pisell-lowcode__booking-form-link-to-list-item-more {
20
+ padding: 4px 6px;
21
+ color: #705dff;
22
+ font-size: 14px;
23
+ cursor: pointer;
24
+ background-color: #f9fafb;
25
+ border-radius: 8px;
26
+ border: 1px solid #eaecf0;
27
+ display: flex;
28
+ justify-content: center;
29
+ align-items: center;
30
+ gap: 4px;
31
+ }
32
+
33
+ .pisell-lowcode__booking-form-link-to-list-item {
34
+ display: flex;
35
+ align-items: center;
36
+ gap: 8px;
37
+ background-color: #f9fafb;
38
+ padding: 12px 14px;
39
+ border-radius: 8px;
40
+ border: 1px solid #eaecf0;
41
+ color: #101828;
42
+ font-size: 16px;
43
+ font-weight: 500;
44
+ white-space: normal;
45
+
46
+ .pisell-lowcode__booking-form-link-to-list-item-index {
47
+ padding: 0 5px;
48
+ min-width: 20px;
49
+ min-height: 20px;
50
+ line-height: 20px;
51
+ border-radius: 20px;
52
+ font-size: 14px;
53
+ font-weight: 600;
54
+ background-color: #705dff;
55
+ display: flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ color: #fff;
59
+ }
60
+
61
+ .pisell-lowcode__booking-form-link-to-list-item-title {
62
+ flex: 1;
63
+ overflow: hidden;
64
+ text-overflow: ellipsis;
65
+ white-space: nowrap;
66
+ display: block;
67
+ }
68
+ }
69
+ }
@@ -35,7 +35,7 @@ __export(useQuotation_exports, {
35
35
  module.exports = __toCommonJS(useQuotation_exports);
36
36
  var import_react = __toESM(require("react"));
37
37
  var import_utils = require("../utils");
38
- var import_useEngineContext = __toESM(require("../../../../es/hooks/useEngineContext"));
38
+ var import_useEngineContext = __toESM(require("../../../hooks/useEngineContext"));
39
39
  var import_utils2 = require("@pisell/utils");
40
40
  var import_materials = require("@pisell/materials");
41
41
  var import_serve = require("../info/service/serve");
@@ -1 +1,3 @@
1
1
  export declare const getWaiverTitle: (waiverForm: any[]) => string;
2
+ export declare const setClientVariantClose: (fn: any) => void;
3
+ export declare const getClientVariantClose: () => (() => void) | null;
@@ -19,7 +19,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  // src/components/booking/info/clientVariant/utils.ts
20
20
  var utils_exports = {};
21
21
  __export(utils_exports, {
22
- getWaiverTitle: () => getWaiverTitle
22
+ getClientVariantClose: () => getClientVariantClose,
23
+ getWaiverTitle: () => getWaiverTitle,
24
+ setClientVariantClose: () => setClientVariantClose
23
25
  });
24
26
  module.exports = __toCommonJS(utils_exports);
25
27
  var import_utils = require("@pisell/utils");
@@ -28,7 +30,16 @@ var getWaiverTitle = (waiverForm) => {
28
30
  return `${item.form_title || ""}:${item.is_filled ? import_utils.locales.getText("pisell2.text.filled") : import_utils.locales.getText("pisell2.text.not-filled")}`;
29
31
  }).join(";");
30
32
  };
33
+ var clientVariantClose;
34
+ var setClientVariantClose = (fn) => {
35
+ clientVariantClose = fn;
36
+ };
37
+ var getClientVariantClose = () => {
38
+ return clientVariantClose;
39
+ };
31
40
  // Annotate the CommonJS export names for ESM import in node:
32
41
  0 && (module.exports = {
33
- getWaiverTitle
42
+ getClientVariantClose,
43
+ getWaiverTitle,
44
+ setClientVariantClose
34
45
  });