@pisell/private-materials 3.4.17 → 3.4.19

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 +8 -8
  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 +7 -7
  11. package/es/components/appointmentBooking/components/Content/index.d.ts +0 -1
  12. package/es/components/appointmentBooking/components/Content/index.js +1 -1
  13. package/es/components/appointmentBooking/components/Content/index.less +3 -3
  14. package/es/components/appointmentBooking/components/Services/index.js +2 -2
  15. package/es/components/appointmentBooking/components/Voucher/index.d.ts +0 -1
  16. package/es/components/appointmentBooking/deposit/components/PolicyModal/index.d.ts +0 -1
  17. package/es/components/appointmentBooking/index.js +8 -2
  18. package/es/components/booking/addons/index.js +12 -8
  19. package/es/components/booking/components/footer/index.js +19 -9
  20. package/es/components/booking/components/voucher/index.d.ts +0 -1
  21. package/es/components/booking/info2/service/addService/index.d.ts +0 -1
  22. package/es/components/booking/info2/service/addTimeModal/index.js +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 +2 -2
  26. package/es/components/eftposPay/store/index.d.ts +5 -5
  27. package/es/components/eventBooking/components/progressBar/index.js +20 -0
  28. package/es/components/eventBooking/index.js +8 -1
  29. package/es/components/pay/toC/PaymentMethods/GooglePay/index.js +20 -7
  30. package/es/components/pay/toC/PaymentMethods/WalletPass/List/index.d.ts +1 -0
  31. package/es/components/pay/toC/PaymentMethods/WalletPass/List/index.js +12 -2
  32. package/es/components/pay/toC/PaymentMethods/WalletPass/index.js +31 -24
  33. package/es/components/pay/toC/utils.d.ts +1 -1
  34. package/es/components/ticketBooking/components/addServiceVariant/addService.d.ts +0 -1
  35. package/es/components/ticketBooking/components/addServiceVariant/addService.js +3 -3
  36. package/es/components/ticketBooking/index.d.ts +0 -1
  37. package/es/components/wallet/Detail/index.js +2 -2
  38. package/es/components/wallet/components/WalletCard.js +3 -2
  39. package/es/hooks/useWindowSize.js +8 -1
  40. package/es/plus/productSelect/CategoryTabs/CategorySkeleton.d.ts +10 -0
  41. package/es/plus/productSelect/CategoryTabs/CategorySkeleton.js +29 -0
  42. package/es/plus/productSelect/CategoryTabs/CategorySkeleton.less +30 -0
  43. package/es/plus/productSelect/CategoryTabs/index.d.ts +18 -0
  44. package/es/plus/productSelect/CategoryTabs/index.js +171 -0
  45. package/es/plus/productSelect/ProductCard/ProductCardSkeleton.d.ts +10 -0
  46. package/es/plus/productSelect/ProductCard/ProductCardSkeleton.js +37 -0
  47. package/es/plus/productSelect/ProductCard/ProductCardSkeleton.less +81 -0
  48. package/es/plus/productSelect/ProductCard/index.d.ts +45 -0
  49. package/es/plus/productSelect/ProductCard/index.js +170 -0
  50. package/es/plus/productSelect/ProductCard/index.less +253 -0
  51. package/es/plus/productSelect/ProductList/gridComponents.d.ts +44 -0
  52. package/es/plus/productSelect/ProductList/gridComponents.js +149 -0
  53. package/es/plus/productSelect/ProductList/index.d.ts +22 -0
  54. package/es/plus/productSelect/ProductList/index.js +72 -0
  55. package/es/plus/productSelect/ProductList/index.less +0 -0
  56. package/es/plus/productSelect/components/IntersectionObserver.d.ts +42 -0
  57. package/es/plus/productSelect/components/IntersectionObserver.js +276 -0
  58. package/es/plus/productSelect/components/TabsStructure/TabsStructure.d.ts +30 -0
  59. package/es/plus/productSelect/components/TabsStructure/TabsStructure.js +357 -0
  60. package/es/plus/productSelect/components/TabsStructure/TabsStructure.less +224 -0
  61. package/es/plus/productSelect/components/TabsStructure/hooks.d.ts +22 -0
  62. package/es/plus/productSelect/components/TabsStructure/hooks.js +243 -0
  63. package/es/plus/productSelect/components/TabsStructure/index.d.ts +5 -0
  64. package/es/plus/productSelect/components/TabsStructure/index.js +13 -0
  65. package/es/plus/productSelect/components/TabsStructure/styles.d.ts +47 -0
  66. package/es/plus/productSelect/components/TabsStructure/styles.js +87 -0
  67. package/es/plus/productSelect/components/TabsStructure/types.d.ts +105 -0
  68. package/es/plus/productSelect/components/TabsStructure/types.js +1 -0
  69. package/es/plus/productSelect/components/TabsStructure/utils.d.ts +12 -0
  70. package/es/plus/productSelect/components/TabsStructure/utils.js +56 -0
  71. package/es/plus/productSelect/components/pisellPriceText/index.d.ts +12 -0
  72. package/es/plus/productSelect/components/pisellPriceText/index.js +44 -0
  73. package/es/plus/productSelect/components/pisellPriceText/index.less +4 -0
  74. package/es/plus/productSelect/hooks/useToken.d.ts +18 -0
  75. package/es/plus/productSelect/hooks/useToken.js +34 -0
  76. package/es/plus/productSelect/index.d.ts +31 -0
  77. package/es/plus/productSelect/index.js +270 -0
  78. package/es/plus/productSelect/index.less +56 -0
  79. package/es/plus/productSelect/locales.d.ts +18 -0
  80. package/es/plus/productSelect/locales.js +17 -0
  81. package/es/plus/productSelect/theme/token.d.ts +17 -0
  82. package/es/plus/productSelect/theme/token.js +19 -0
  83. package/es/plus/productSelect/utils.d.ts +39 -0
  84. package/es/plus/productSelect/utils.js +162 -0
  85. package/es/plus/saasCreateOrganization/components/Header.d.ts +1 -0
  86. package/es/plus/saasCreateOrganization/index.d.ts +1 -0
  87. package/es/plus/saasRegister/components/EntryEmail.d.ts +1 -0
  88. package/es/plus/saasRegister/components/EntryInfo.d.ts +1 -0
  89. package/es/plus/saasRegister/components/GoLogin.d.ts +1 -0
  90. package/es/plus/saasRegister/components/Header.d.ts +1 -0
  91. package/es/plus/saasRegister/components/VerifyError.d.ts +1 -0
  92. package/es/plus/saasRegister/components/VerifyingLink.d.ts +1 -0
  93. package/es/plus/saasRegister/components/VertifyEmail.d.ts +1 -0
  94. package/lib/components/appointmentBooking/components/Content/index.d.ts +0 -1
  95. package/lib/components/appointmentBooking/components/Content/index.js +1 -1
  96. package/lib/components/appointmentBooking/components/Content/index.less +3 -3
  97. package/lib/components/appointmentBooking/components/Services/index.js +2 -2
  98. package/lib/components/appointmentBooking/components/Voucher/index.d.ts +0 -1
  99. package/lib/components/appointmentBooking/deposit/components/PolicyModal/index.d.ts +0 -1
  100. package/lib/components/appointmentBooking/index.js +6 -1
  101. package/lib/components/booking/addons/index.js +1 -11
  102. package/lib/components/booking/components/footer/index.js +15 -8
  103. package/lib/components/booking/components/voucher/index.d.ts +0 -1
  104. package/lib/components/booking/info2/service/addService/index.d.ts +0 -1
  105. package/lib/components/booking/info2/service/addTimeModal/index.js +0 -1
  106. package/lib/components/eftposPay/amount.d.ts +1 -1
  107. package/lib/components/eftposPay/device.d.ts +1 -1
  108. package/lib/components/eftposPay/hooks.d.ts +2 -2
  109. package/lib/components/eftposPay/store/index.d.ts +5 -5
  110. package/lib/components/eventBooking/components/progressBar/index.js +18 -0
  111. package/lib/components/eventBooking/index.js +6 -1
  112. package/lib/components/pay/toC/PaymentMethods/GooglePay/index.js +11 -7
  113. package/lib/components/pay/toC/PaymentMethods/WalletPass/List/index.d.ts +1 -0
  114. package/lib/components/pay/toC/PaymentMethods/WalletPass/List/index.js +9 -2
  115. package/lib/components/pay/toC/PaymentMethods/WalletPass/index.js +6 -2
  116. package/lib/components/pay/toC/utils.d.ts +1 -1
  117. package/lib/components/ticketBooking/components/addServiceVariant/addService.d.ts +0 -1
  118. package/lib/components/ticketBooking/components/addServiceVariant/addService.js +3 -3
  119. package/lib/components/ticketBooking/index.d.ts +0 -1
  120. package/lib/components/wallet/Detail/index.js +3 -3
  121. package/lib/components/wallet/components/WalletCard.js +1 -1
  122. package/lib/hooks/useWindowSize.js +6 -1
  123. package/lib/plus/productSelect/CategoryTabs/CategorySkeleton.d.ts +10 -0
  124. package/lib/plus/productSelect/CategoryTabs/CategorySkeleton.js +62 -0
  125. package/lib/plus/productSelect/CategoryTabs/CategorySkeleton.less +30 -0
  126. package/lib/plus/productSelect/CategoryTabs/index.d.ts +18 -0
  127. package/lib/plus/productSelect/CategoryTabs/index.js +183 -0
  128. package/lib/plus/productSelect/ProductCard/ProductCardSkeleton.d.ts +10 -0
  129. package/lib/plus/productSelect/ProductCard/ProductCardSkeleton.js +58 -0
  130. package/lib/plus/productSelect/ProductCard/ProductCardSkeleton.less +81 -0
  131. package/lib/plus/productSelect/ProductCard/index.d.ts +45 -0
  132. package/lib/plus/productSelect/ProductCard/index.js +184 -0
  133. package/lib/plus/productSelect/ProductCard/index.less +253 -0
  134. package/lib/plus/productSelect/ProductList/gridComponents.d.ts +44 -0
  135. package/lib/plus/productSelect/ProductList/gridComponents.js +148 -0
  136. package/lib/plus/productSelect/ProductList/index.d.ts +22 -0
  137. package/lib/plus/productSelect/ProductList/index.js +86 -0
  138. package/lib/plus/productSelect/ProductList/index.less +0 -0
  139. package/lib/plus/productSelect/components/IntersectionObserver.d.ts +42 -0
  140. package/lib/plus/productSelect/components/IntersectionObserver.js +269 -0
  141. package/lib/plus/productSelect/components/TabsStructure/TabsStructure.d.ts +30 -0
  142. package/lib/plus/productSelect/components/TabsStructure/TabsStructure.js +393 -0
  143. package/lib/plus/productSelect/components/TabsStructure/TabsStructure.less +224 -0
  144. package/lib/plus/productSelect/components/TabsStructure/hooks.d.ts +22 -0
  145. package/lib/plus/productSelect/components/TabsStructure/hooks.js +209 -0
  146. package/lib/plus/productSelect/components/TabsStructure/index.d.ts +5 -0
  147. package/lib/plus/productSelect/components/TabsStructure/index.js +92 -0
  148. package/lib/plus/productSelect/components/TabsStructure/styles.d.ts +47 -0
  149. package/lib/plus/productSelect/components/TabsStructure/styles.js +122 -0
  150. package/lib/plus/productSelect/components/TabsStructure/types.d.ts +105 -0
  151. package/lib/plus/productSelect/components/TabsStructure/types.js +17 -0
  152. package/lib/plus/productSelect/components/TabsStructure/utils.d.ts +12 -0
  153. package/lib/plus/productSelect/components/TabsStructure/utils.js +72 -0
  154. package/lib/plus/productSelect/components/pisellPriceText/index.d.ts +12 -0
  155. package/lib/plus/productSelect/components/pisellPriceText/index.js +73 -0
  156. package/lib/plus/productSelect/components/pisellPriceText/index.less +4 -0
  157. package/lib/plus/productSelect/hooks/useToken.d.ts +18 -0
  158. package/lib/plus/productSelect/hooks/useToken.js +50 -0
  159. package/lib/plus/productSelect/index.d.ts +31 -0
  160. package/lib/plus/productSelect/index.js +299 -0
  161. package/lib/plus/productSelect/index.less +56 -0
  162. package/lib/plus/productSelect/locales.d.ts +18 -0
  163. package/lib/plus/productSelect/locales.js +41 -0
  164. package/lib/plus/productSelect/theme/token.d.ts +17 -0
  165. package/lib/plus/productSelect/theme/token.js +47 -0
  166. package/lib/plus/productSelect/utils.d.ts +39 -0
  167. package/lib/plus/productSelect/utils.js +138 -0
  168. package/lib/plus/saasCreateOrganization/components/Header.d.ts +1 -0
  169. package/lib/plus/saasCreateOrganization/index.d.ts +1 -0
  170. package/lib/plus/saasRegister/components/EntryEmail.d.ts +1 -0
  171. package/lib/plus/saasRegister/components/EntryInfo.d.ts +1 -0
  172. package/lib/plus/saasRegister/components/GoLogin.d.ts +1 -0
  173. package/lib/plus/saasRegister/components/Header.d.ts +1 -0
  174. package/lib/plus/saasRegister/components/VerifyError.d.ts +1 -0
  175. package/lib/plus/saasRegister/components/VerifyingLink.d.ts +1 -0
  176. package/lib/plus/saasRegister/components/VertifyEmail.d.ts +1 -0
  177. package/package.json +4 -4
@@ -0,0 +1,18 @@
1
+ declare const _default: {
2
+ en: {
3
+ 'pisell2.product-select.search': string;
4
+ 'pisell2.product-select.stock': string;
5
+ 'pisell2.product-select.empty': string;
6
+ };
7
+ 'zh-CN': {
8
+ 'pisell2.product-select.search': string;
9
+ 'pisell2.product-select.stock': string;
10
+ 'pisell2.product-select.empty': string;
11
+ };
12
+ 'zh-HK': {
13
+ 'pisell2.product-select.search': string;
14
+ 'pisell2.product-select.stock': string;
15
+ 'pisell2.product-select.empty': string;
16
+ };
17
+ };
18
+ export default _default;
@@ -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
+ };
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { SCOProps } from '../types';
2
3
  import '../index.less';
3
4
  export declare const Header: (props: SCOProps) => JSX.Element;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { SCOProps } from './types';
2
3
  import './index.less';
3
4
  declare const SaasCreateOrganization: (props: SCOProps) => JSX.Element;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { FormInstance } from 'antd';
2
3
  import { SRProps } from '../types';
3
4
  import '../index.less';
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { FormInstance } from 'antd';
2
3
  import { SRProps } from '../types';
3
4
  import '../index.less';
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { SRProps } from '../types';
2
3
  import '../index.less';
3
4
  declare const GoLogin: (props: SRProps) => JSX.Element;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { SRProps } from '../types';
2
3
  import '../index.less';
3
4
  export declare const Header: (props: SRProps) => JSX.Element;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { SRStepStatus } from '../types';
2
3
  import '../index.less';
3
4
  declare const VerifyError: (props: {
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import '../index.less';
2
3
  declare const VerifyingEmailLink: (props: {
3
4
  onVerifyLink: () => Promise<void>;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import '../index.less';
2
3
  declare const VertifyEmail: (props: {
3
4
  email: string;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import './index.less';
3
2
  declare const Layout: () => JSX.Element;
4
3
  export default Layout;
@@ -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");
@@ -174,7 +174,7 @@ var Services = (0, import_react.forwardRef)((props, ref) => {
174
174
  const _isMobile = (0, import_react.useMemo)(() => {
175
175
  if (typeof import_utils.isMobile === "function") return (0, import_utils.isMobile)();
176
176
  return import_utils.isMobile;
177
- }, import_utils.isMobile);
177
+ }, [import_utils.isMobile]);
178
178
  return /* @__PURE__ */ import_react.default.createElement("div", { className: "appointment-service-wrap" }, /* @__PURE__ */ import_react.default.createElement(
179
179
  import_productSelect.default,
180
180
  {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import '../../../booking/components/voucher/index.less';
3
2
  import './index.less';
4
3
  declare const VoucherCard: (props: any) => JSX.Element;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import './index.less';
3
2
  declare const DepositModal: (props: any) => JSX.Element;
4
3
  export default DepositModal;
@@ -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();
@@ -324,13 +324,6 @@ var Addons = (0, import_model.Provider)((props) => {
324
324
  }
325
325
  });
326
326
  }
327
- if (state.channelDisabledEdit) {
328
- modal.warning({
329
- okText: import_utils3.locales.getText("pisell2.text.ok"),
330
- content: import_utils3.locales.getText("pisell2.text.terminal-edit-message")
331
- });
332
- return;
333
- }
334
327
  getProducts();
335
328
  setSearch("");
336
329
  dispatch({
@@ -374,9 +367,6 @@ var Addons = (0, import_model.Provider)((props) => {
374
367
  if (state.disabledEdit) {
375
368
  return;
376
369
  }
377
- if (state.channelDisabledEdit) {
378
- return;
379
- }
380
370
  const isSession = (0, import_utils2.isSessionProduct)(item);
381
371
  state.action({
382
372
  type: "pisell1.handleOpenProductModal",
@@ -439,7 +429,7 @@ var Addons = (0, import_model.Provider)((props) => {
439
429
  return /* @__PURE__ */ import_react.default.createElement(
440
430
  import_selectProductItem.default,
441
431
  {
442
- disabled: state.disabledEdit || state.channelDisabledEdit,
432
+ disabled: state.disabledEdit,
443
433
  item: d,
444
434
  key: d.id,
445
435
  amountSymbol: state.amountSymbol,
@@ -614,7 +614,14 @@ var Footer = (props) => {
614
614
  }
615
615
  }, [state.bookingDetail, total.notPaidAmount]);
616
616
  const _buttons = (0, import_react.useMemo)(() => {
617
- if (state.appointment_status === "cancelled" || paymentRefundedStatus) {
617
+ const isEvent = (0, import_utils2.isEventBooking)(state);
618
+ if (state.appointment_status === "cancelled") {
619
+ return [buttonMap.rebook];
620
+ }
621
+ if (paymentRefundedStatus) {
622
+ if (isEvent) {
623
+ return [""];
624
+ }
618
625
  return [buttonMap.rebook];
619
626
  }
620
627
  if (source === "addons") {
@@ -739,13 +746,6 @@ var Footer = (props) => {
739
746
  const totalText = (0, import_react.useMemo)(() => {
740
747
  var _a2;
741
748
  let str = "";
742
- if (isOnlyDeposit) {
743
- return `${import_utils.locales.getText("pisell2.text.deposit-paid")} ${(0, import_utils.formatAmount)(
744
- (_a2 = state == null ? void 0 : state.bookingDetail) == null ? void 0 : _a2.deposit_paid_amount,
745
- 2,
746
- (state == null ? void 0 : state.amountSymbol) || "$"
747
- )} ${total.duration ? `(${total.duration})` : ""}`;
748
- }
749
749
  if (total.totalRefundAmount > 0) {
750
750
  return `${import_utils.locales.getText(
751
751
  "pisell2.text.refunded-amount"
@@ -755,6 +755,13 @@ var Footer = (props) => {
755
755
  (state == null ? void 0 : state.amountSymbol) || "$"
756
756
  )}`;
757
757
  }
758
+ if (isOnlyDeposit) {
759
+ return `${import_utils.locales.getText("pisell2.text.deposit-paid")} ${(0, import_utils.formatAmount)(
760
+ (_a2 = state == null ? void 0 : state.bookingDetail) == null ? void 0 : _a2.deposit_paid_amount,
761
+ 2,
762
+ (state == null ? void 0 : state.amountSymbol) || "$"
763
+ )} ${total.duration ? `(${total.duration})` : ""}`;
764
+ }
758
765
  if (total.notPaidAmount <= 0 && state.bookingId) {
759
766
  str = `${import_utils.locales.getText("pisell1.text.fully-paid")}: ${(0, import_utils.formatAmount)(
760
767
  total.sumTotalAmount,
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import './index.less';
3
2
  declare const VoucherCard: (props: any) => JSX.Element | null;
4
3
  export default VoucherCard;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { PisellDrawerProps } from '../../../components/drawer';
3
2
  import '../../../info/service/addService/index.less';
4
3
  interface AddServiceProps {
@@ -208,7 +208,6 @@ var AddTimeModal = () => {
208
208
  setLoading("list");
209
209
  const newList = await _getAddTimeProducts();
210
210
  let list = newList.map((d) => {
211
- debugger;
212
211
  let isUsable = (0, import_utils2.isUsableProduct)(d.add_time, state.service.cacheItem);
213
212
  return {
214
213
  ...d,
@@ -9,7 +9,7 @@ import { PosProps } from './const';
9
9
  */
10
10
  declare const _default: ({ className, onChange, onClose, formatAmount, isMobile, net, client }: {
11
11
  className?: string | undefined;
12
- onChange?: ((status: "success" | "page" | "print" | "fail" | "mark_tx_processed", params?: string | {
12
+ onChange?: ((status: "page" | "success" | "fail" | "print" | "mark_tx_processed", params?: string | {
13
13
  [keys: string]: unknown;
14
14
  } | undefined, other?: any) => void) | undefined;
15
15
  onClose: () => void;
@@ -11,7 +11,7 @@ import './device.less';
11
11
  declare const _default: ({ api, onChange, onClose, className, device_number, isMobile, net, client, formatAmount, }: {
12
12
  api: PayProps['api'];
13
13
  className?: string | undefined;
14
- onChange?: ((status: "success" | "page" | "print" | "fail" | "mark_tx_processed", params?: string | {
14
+ onChange?: ((status: "page" | "success" | "fail" | "print" | "mark_tx_processed", params?: string | {
15
15
  [keys: string]: unknown;
16
16
  } | undefined, other?: any) => void) | undefined;
17
17
  onClose: () => void;
@@ -15,11 +15,11 @@ export declare const useStoreRef: <T extends {
15
15
  readonly numRef: React.MutableRefObject<string | number | undefined>;
16
16
  readonly orderIdRef: React.MutableRefObject<string | number>;
17
17
  readonly modeRef: React.MutableRefObject<ModeEnum>;
18
- readonly statusRef: React.MutableRefObject<"warn" | "success" | "loading" | "fail" | "pedding" | "resove" | "reject" | "question">;
18
+ readonly statusRef: React.MutableRefObject<"loading" | "warn" | "success" | "fail" | "pedding" | "resove" | "reject" | "question">;
19
19
  readonly netRef: React.MutableRefObject<boolean | undefined>;
20
20
  readonly symbolRef: React.MutableRefObject<string>;
21
21
  readonly amountRef: React.MutableRefObject<string | number>;
22
- readonly eftposRef: React.MutableRefObject<"payo" | "tyro" | "windcave" | "stripe" | "linkly">;
22
+ readonly eftposRef: React.MutableRefObject<"stripe" | "payo" | "tyro" | "windcave" | "linkly">;
23
23
  readonly clientRef: React.MutableRefObject<ClientEnum>;
24
24
  readonly dataRef: React.MutableRefObject<import("./store").State>;
25
25
  };
@@ -174,7 +174,7 @@ export declare const updateCustom: (payload: {
174
174
  export declare const updateStatus: (status: 'loading' | 'warn' | 'fail' | 'success' | 'question') => {
175
175
  type: EActionTypes;
176
176
  payload: {
177
- status: "warn" | "success" | "loading" | "fail" | "question";
177
+ status: "loading" | "warn" | "success" | "fail" | "question";
178
178
  };
179
179
  };
180
180
  /**
@@ -297,18 +297,18 @@ export declare const backUpFree: (payload: Partial<State>) => {
297
297
  amount?: string | number | undefined;
298
298
  mode?: "refund" | "pay" | "fullPay" | "query" | undefined;
299
299
  order_id?: string | number | undefined;
300
- eftpos?: "payo" | "tyro" | "windcave" | "stripe" | "linkly" | undefined;
301
- action?: "amount" | "deviceList" | "pay" | undefined;
300
+ eftpos?: "stripe" | "payo" | "tyro" | "windcave" | "linkly" | undefined;
301
+ action?: "amount" | "pay" | "deviceList" | undefined;
302
302
  key?: number | undefined;
303
303
  step?: number | undefined;
304
304
  title?: string | undefined;
305
305
  subTitle?: string | undefined;
306
- type?: "step" | "unset" | undefined;
306
+ type?: "unset" | "step" | undefined;
307
307
  render?: boolean | undefined;
308
308
  net?: boolean | undefined;
309
309
  component?: string | undefined;
310
310
  form?: string | undefined;
311
- status?: "warn" | "success" | "loading" | "fail" | "pedding" | "resove" | "reject" | "question" | undefined;
311
+ status?: "loading" | "warn" | "success" | "fail" | "pedding" | "resove" | "reject" | "question" | undefined;
312
312
  warn?: string | undefined;
313
313
  steps?: {
314
314
  /** 用于重置当前步骤 */
@@ -64,6 +64,24 @@ var ProgressBar = ({
64
64
  const handleOk = () => {
65
65
  var _a2, _b;
66
66
  if ((_b = (_a2 = interaction == null ? void 0 : interaction.utils) == null ? void 0 : _a2.isAppEnv) == null ? void 0 : _b.call(_a2)) {
67
+ const url = window.location.href;
68
+ if (url.includes("isByTabbar")) {
69
+ removeSessionStorage == null ? void 0 : removeSessionStorage();
70
+ const urlParams = new URLSearchParams(window.location.search);
71
+ urlParams.delete("cacheId");
72
+ setOpen(false);
73
+ interaction.utils.postMessageToApp({
74
+ module: "global",
75
+ key: "openNative",
76
+ data: {
77
+ link: {
78
+ page: "home"
79
+ }
80
+ }
81
+ });
82
+ window.location.href = window.location.pathname + "?" + urlParams.toString();
83
+ return;
84
+ }
67
85
  interaction.utils.postMessageToApp({
68
86
  module: "global",
69
87
  key: "paymentResultAction",
@@ -68,7 +68,12 @@ var Content = () => {
68
68
  }, []);
69
69
  (0, import_react.useEffect)(() => {
70
70
  const setRealVH = () => {
71
- const vh = window.innerHeight * 0.01;
71
+ let height = window.innerHeight;
72
+ const urlParams = new URLSearchParams(window.location.search);
73
+ if (urlParams.has("formTabbar")) {
74
+ height = height - 54;
75
+ }
76
+ const vh = height * 0.01;
72
77
  document.documentElement.style.setProperty("--vh", `${vh}px`);
73
78
  };
74
79
  setRealVH();