@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,142 @@
1
+ // Line类型特有样式 - 行内布局
2
+ .pisell-client-card--line {
3
+ padding: 8px 12px;
4
+ border: 1px solid #e5e7eb;
5
+ border-radius: 6px;
6
+ background: #ffffff;
7
+
8
+ // 内容容器 - 水平布局
9
+ .pisell-client-card__content {
10
+ display: flex;
11
+ align-items: center;
12
+ gap: 12px;
13
+ width: 100%;
14
+ min-width: 0; // 允许flex子元素收缩
15
+ }
16
+
17
+ // 插槽容器
18
+ .pisell-client-card__slot-left {
19
+ display: flex;
20
+ align-items: center;
21
+ flex-shrink: 0;
22
+ }
23
+
24
+ .pisell-client-card__slot-right {
25
+ display: flex;
26
+ align-items: center;
27
+ flex-shrink: 0;
28
+ }
29
+
30
+ // 头像样式
31
+ .pisell-client-card__avatar-wrapper {
32
+ position: relative;
33
+ flex-shrink: 0; // 头像不收缩
34
+ }
35
+
36
+ .pisell-client-card__avatar {
37
+ border: 1px solid #e5e7eb;
38
+
39
+ .ant-avatar-string {
40
+ font-weight: 600;
41
+ font-size: 12px;
42
+ }
43
+ }
44
+
45
+ // 状态指示器
46
+ .pisell-client-card__status-indicator {
47
+ position: absolute;
48
+ top: -2px;
49
+ right: -2px;
50
+ width: 8px;
51
+ height: 8px;
52
+ border-radius: 50%;
53
+ border: 2px solid #ffffff;
54
+ background-color: #17B26A;
55
+ }
56
+
57
+ // 客户名称样式
58
+ .pisell-client-card__name--line {
59
+ font-size: 14px;
60
+ font-weight: 500;
61
+ color: #1f2937;
62
+ white-space: nowrap;
63
+ overflow: hidden;
64
+ text-overflow: ellipsis;
65
+ flex-shrink: 1;
66
+ min-width: 0;
67
+ }
68
+
69
+ // 联系方式样式
70
+ .pisell-client-card__contact--line {
71
+ font-size: 13px;
72
+ color: #6b7280;
73
+ white-space: nowrap;
74
+ overflow: hidden;
75
+ text-overflow: ellipsis;
76
+ flex-shrink: 1;
77
+ min-width: 0;
78
+ }
79
+
80
+ // 标签容器样式
81
+ .pisell-client-card__tags--line {
82
+ display: flex;
83
+ gap: 6px;
84
+ flex-shrink: 0; // 标签不收缩
85
+ align-items: center;
86
+
87
+ .pisell-client-card__tag {
88
+ white-space: nowrap;
89
+ }
90
+ }
91
+
92
+ // 垂直布局样式
93
+ &.pisell-client-card--vertical {
94
+ .pisell-client-card__content {
95
+ flex-direction: column;
96
+ align-items: center;
97
+ text-align: center;
98
+ gap: 16px;
99
+ }
100
+
101
+ .pisell-client-card__name--line {
102
+ text-align: center;
103
+ }
104
+
105
+ .pisell-client-card__contact--line {
106
+ text-align: center;
107
+ }
108
+
109
+ .pisell-client-card__tags--line {
110
+ justify-content: center;
111
+ flex-wrap: wrap;
112
+ }
113
+ }
114
+
115
+ // Line类型空状态样式
116
+ &.pisell-client-card--empty {
117
+ cursor: pointer;
118
+ justify-content: center;
119
+ align-items: center;
120
+ border-style: dashed;
121
+ border-color: #d9d9d9;
122
+ background: #fafafa;
123
+
124
+ &:hover {
125
+ border-color: #1890ff;
126
+ background: #f0f8ff;
127
+ }
128
+
129
+ .pisell-client-card__empty-title {
130
+ font-size: 14px;
131
+ font-weight: 600;
132
+ color: #374151;
133
+ margin: 0;
134
+ }
135
+
136
+ .pisell-client-card__empty-subtitle {
137
+ font-size: 12px;
138
+ color: #6b7280;
139
+ margin: 0;
140
+ }
141
+ }
142
+ }
@@ -0,0 +1,18 @@
1
+ declare const _default: {
2
+ en: {
3
+ 'pisell2.text.add-client': string;
4
+ 'pisell2.text.change-client': string;
5
+ 'pisell2.text.remove-client': string;
6
+ };
7
+ 'zh-CN': {
8
+ 'pisell2.text.add-client': string;
9
+ 'pisell2.text.change-client': string;
10
+ 'pisell2.text.remove-client': string;
11
+ };
12
+ 'zh-HK': {
13
+ 'pisell2.text.add-client': string;
14
+ 'pisell2.text.change-client': string;
15
+ 'pisell2.text.remove-client': string;
16
+ };
17
+ };
18
+ export default _default;
@@ -0,0 +1,17 @@
1
+ export default {
2
+ en: {
3
+ 'pisell2.text.add-client': 'Add Customer',
4
+ 'pisell2.text.change-client': 'Change Customer',
5
+ 'pisell2.text.remove-client': ' Remove Customer'
6
+ },
7
+ 'zh-CN': {
8
+ 'pisell2.text.add-client': '添加客户',
9
+ 'pisell2.text.change-client': '更换客户',
10
+ 'pisell2.text.remove-client': '移除客户'
11
+ },
12
+ 'zh-HK': {
13
+ 'pisell2.text.add-client': '新增客戶',
14
+ 'pisell2.text.change-client': '更換客戶',
15
+ 'pisell2.text.remove-client': '移除客戶'
16
+ }
17
+ };
@@ -0,0 +1,135 @@
1
+ import React, { ReactElement } from 'react';
2
+ export interface ClientData {
3
+ id: number;
4
+ shop_id: number;
5
+ display_name?: string;
6
+ nickname?: string;
7
+ email?: string;
8
+ phone?: string;
9
+ country_calling_code?: string;
10
+ channel?: string;
11
+ created_at: string;
12
+ updated_at: string;
13
+ waiver_form?: any;
14
+ avatar?: string;
15
+ birthday?: string;
16
+ address?: string;
17
+ tags?: string[];
18
+ [key: string]: any;
19
+ }
20
+ export declare type CardType = 'b1' | 'b2' | 'b5' | 'b9';
21
+ export declare type Direction = 'horizontal' | 'vertical';
22
+ export declare type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | number | string;
23
+ export declare type AvatarShape = 'circle' | 'square';
24
+ export interface AvatarConfig {
25
+ icon?: string;
26
+ shape?: AvatarShape;
27
+ borderRadius?: number | string;
28
+ size?: AvatarSize;
29
+ useTextAvatar?: boolean;
30
+ children?: string;
31
+ }
32
+ export interface StatusConfig {
33
+ color?: string;
34
+ }
35
+ export interface NameStyle {
36
+ fontSize?: number | string;
37
+ fontWeight?: number | string;
38
+ color?: string;
39
+ textDecoration?: string;
40
+ }
41
+ export interface TagItem {
42
+ children: string;
43
+ color: string;
44
+ }
45
+ export interface TagConfig {
46
+ placement?: 'separate' | 'inline';
47
+ flexWrap?: 'nowrap' | 'wrap';
48
+ gap?: number | string;
49
+ }
50
+ export interface ExtraField {
51
+ label?: string;
52
+ value?: string;
53
+ isShowLabel?: boolean;
54
+ isShowValue?: boolean;
55
+ icon?: string;
56
+ iconSize?: number;
57
+ iconColor?: string;
58
+ }
59
+ export interface Slots {
60
+ top?: React.ReactNode;
61
+ bottom?: React.ReactNode;
62
+ left?: React.ReactNode;
63
+ right?: React.ReactNode;
64
+ }
65
+ export interface StyleConfig {
66
+ width?: number | string;
67
+ border?: 'solid' | 'unset';
68
+ borderWidth?: number | string;
69
+ borderColor?: string;
70
+ borderRadius?: number | string;
71
+ padding?: number | string;
72
+ [key: string]: any;
73
+ }
74
+ export interface FieldNames {
75
+ id?: string | ((data: any) => any);
76
+ name?: string | ((data: any) => any);
77
+ cover?: string | ((data: any) => any);
78
+ phone?: string | ((data: any) => any);
79
+ email?: string | ((data: any) => any);
80
+ birthday?: string | ((data: any) => any);
81
+ address?: string | ((data: any) => any);
82
+ tags?: string | ((data: any) => any);
83
+ [key: string]: string | ((data: any) => any) | undefined;
84
+ }
85
+ export interface DisplayConfig {
86
+ isShowAvatar?: boolean;
87
+ isShowName?: boolean;
88
+ isShowPhone?: boolean;
89
+ isShowEmail?: boolean;
90
+ isShowBirthday?: boolean;
91
+ isShowAddress?: boolean;
92
+ isShowTag?: boolean;
93
+ isShowStatus?: boolean;
94
+ isShowEmptyDescription?: boolean;
95
+ }
96
+ export interface ClientCardProps extends DisplayConfig {
97
+ type?: CardType;
98
+ direction?: Direction;
99
+ dataSource?: ClientData | any;
100
+ fieldNames?: FieldNames;
101
+ style?: StyleConfig;
102
+ horizontalGap?: number | string;
103
+ verticalGap?: number | string;
104
+ avatar?: AvatarConfig;
105
+ status?: StatusConfig;
106
+ dropdown?: {
107
+ open?: boolean;
108
+ buttonProps?: {
109
+ icon?: ReactElement;
110
+ onClick?: (e: Event) => void;
111
+ style?: React.CSSProperties;
112
+ };
113
+ };
114
+ defaultName?: string;
115
+ nameStyle?: NameStyle;
116
+ tags?: Array<TagItem | string>;
117
+ tag?: TagConfig;
118
+ extraFields?: ExtraField[];
119
+ slots?: Slots;
120
+ onAddClient?: () => void;
121
+ onChangeClient?: (data: ClientData) => void;
122
+ onRemoveClient?: (data: ClientData) => void;
123
+ onViewClient?: (data: ClientData) => void;
124
+ }
125
+ export interface ProcessedClientData {
126
+ id: any;
127
+ name: string;
128
+ cover?: string;
129
+ phone?: string;
130
+ email?: string;
131
+ birthday?: string;
132
+ address?: string;
133
+ tags?: string[];
134
+ [key: string]: any;
135
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ interface FieldMapping<T = any, R = any> {
2
+ [key: string]: string | ((data: T) => R) | undefined;
3
+ }
4
+ export declare function getFieldValue<T, R = any>(data: T, fieldKey: string): R | undefined;
5
+ export declare function getFieldValue<T, R = any>(data: T, fieldKey: string, mapping: FieldMapping<T, R>): R | undefined;
6
+ export declare const getAvatarText: (name: string) => string;
7
+ export declare const isWalkIn: (customer_id?: number | string) => boolean;
8
+ export {};
@@ -0,0 +1,59 @@
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
+ import { get } from 'lodash';
3
+
4
+ // 类型定义
5
+
6
+ // 函数重载签名
7
+
8
+ // 函数实现
9
+ export function getFieldValue(data, fieldKey, mapping) {
10
+ // 参数验证
11
+ if (!fieldKey || typeof fieldKey !== 'string') {
12
+ console.warn('getFieldValue: fieldKey must be a non-empty string');
13
+ return undefined;
14
+ }
15
+ if (!data || _typeof(data) !== 'object') {
16
+ console.warn('getFieldValue: data must be a valid object');
17
+ return undefined;
18
+ }
19
+
20
+ // 如果没有提供 mapping,使用空对象
21
+ var fieldMapping = mapping || {};
22
+ var mappingRule = fieldMapping[fieldKey];
23
+ try {
24
+ // 函数映射
25
+ if (typeof mappingRule === 'function') {
26
+ return mappingRule(data);
27
+ }
28
+
29
+ // 字符串映射(使用 lodash.get)
30
+ if (typeof mappingRule === 'string') {
31
+ return get(data, mappingRule);
32
+ }
33
+
34
+ // 默认直接访问(使用 lodash.get)
35
+ return get(data, fieldKey);
36
+ } catch (error) {
37
+ console.error("getFieldValue: Error processing field '".concat(fieldKey, "':"), error);
38
+ return undefined;
39
+ }
40
+ }
41
+
42
+ // 获取头像文本(姓名的首字母,最多两个单词)
43
+ export var getAvatarText = function getAvatarText(name) {
44
+ if (!name) return '';
45
+ var words = name.trim().split(/\s+/);
46
+ var initials = words.slice(0, 2).map(function (word) {
47
+ return word.charAt(0).toUpperCase();
48
+ }).join('');
49
+ return initials;
50
+ };
51
+ export var isWalkIn = function isWalkIn(customer_id) {
52
+ if (customer_id === undefined) {
53
+ return true;
54
+ }
55
+ if (typeof customer_id === 'string') {
56
+ return ['', '0', '1'].includes(customer_id);
57
+ }
58
+ return [0, 1].includes(customer_id);
59
+ };
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const DateSectionCom: ({ value, onChange, showTime, className, style, useSpace, format, itemStyle, }: any) => React.JSX.Element;
3
+ export default DateSectionCom;
@@ -0,0 +1,277 @@
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, { useEffect, useLayoutEffect, useMemo, useCallback, useState, useRef } from 'react';
14
+ import { Select, Space } from 'antd';
15
+ import debounce from 'lodash/debounce';
16
+ import dayjs from 'dayjs';
17
+ import { getUniqueId, locales } from '@pisell/utils';
18
+ var Option = Select.Option;
19
+ var getSelectInput = function getSelectInput(id) {
20
+ var input = document.getElementById(id);
21
+ if (input) {
22
+ return input;
23
+ }
24
+ };
25
+ var setSelectInputType = function setSelectInputType(_ref) {
26
+ var input = _ref.input,
27
+ type = _ref.type;
28
+ if (input) {
29
+ input.type = type;
30
+ }
31
+ };
32
+ var DateSectionCom = function DateSectionCom(_ref2) {
33
+ var value = _ref2.value,
34
+ onChange = _ref2.onChange,
35
+ showTime = _ref2.showTime,
36
+ _ref2$className = _ref2.className,
37
+ className = _ref2$className === void 0 ? '' : _ref2$className,
38
+ _ref2$style = _ref2.style,
39
+ style = _ref2$style === void 0 ? {} : _ref2$style,
40
+ _ref2$useSpace = _ref2.useSpace,
41
+ useSpace = _ref2$useSpace === void 0 ? true : _ref2$useSpace,
42
+ format = _ref2.format,
43
+ _ref2$itemStyle = _ref2.itemStyle,
44
+ itemStyle = _ref2$itemStyle === void 0 ? {
45
+ width: 100
46
+ } : _ref2$itemStyle;
47
+ var currentYear = dayjs().year();
48
+ var locale = locales.locale;
49
+ var dayRef = useRef(null);
50
+ var monthRef = useRef(null);
51
+ var yearRef = useRef(null);
52
+ var _useState = useState({
53
+ year: value ? dayjs(value).year() : null,
54
+ month: value ? dayjs(value).month() + 1 : null,
55
+ day: value ? dayjs(value).date() : null
56
+ }),
57
+ _useState2 = _slicedToArray(_useState, 2),
58
+ date = _useState2[0],
59
+ setDate = _useState2[1];
60
+ var _useState3 = useState([]),
61
+ _useState4 = _slicedToArray(_useState3, 2),
62
+ dayOptions = _useState4[0],
63
+ setDayOptions = _useState4[1];
64
+ var _useState5 = useState([]),
65
+ _useState6 = _slicedToArray(_useState5, 2),
66
+ monthOptions = _useState6[0],
67
+ setMonthOptions = _useState6[1];
68
+ var _useState7 = useState([]),
69
+ _useState8 = _slicedToArray(_useState7, 2),
70
+ yearOptions = _useState8[0],
71
+ setYearOptions = _useState8[1];
72
+ var localeMap = {
73
+ year: locales.getText('pisell2.text.date-year-text'),
74
+ month: locales.getText('pisell2.text.date-month-text'),
75
+ day: locales.getText('pisell2.text.date-day-text')
76
+ };
77
+ useEffect(function () {
78
+ setDate({
79
+ year: value ? dayjs(value).year() : null,
80
+ month: value ? dayjs(value).month() + 1 : null,
81
+ day: value ? dayjs(value).date() : null
82
+ });
83
+ }, [value]);
84
+ useEffect(function () {
85
+ setMonthOptions(renderOptions('month', 1, 12));
86
+ setYearOptions(renderOptions('year', currentYear - 100, currentYear + 50));
87
+ }, []);
88
+ useEffect(function () {
89
+ setDayOptions(renderOptions('day', 1, date.month ? getDaysInMonth(date.year || currentYear, date.month) : 31));
90
+ }, [date.month, date.year]);
91
+
92
+ /**
93
+ * @title: 下拉框变化
94
+ * @description:
95
+ * @param {any} field
96
+ * @param {any} value
97
+ * @return {*}
98
+ * @Author: chensheng.gu
99
+ * @Date: 2024-03-22 17:49
100
+ */
101
+ var handleDateChange = function handleDateChange(field, value) {
102
+ if (!value) {
103
+ return;
104
+ }
105
+ var newDate = _defineProperty({
106
+ year: date.year,
107
+ month: date.month,
108
+ day: date.day
109
+ }, field, value);
110
+ var foucsList = {
111
+ day: monthRef,
112
+ month: yearRef
113
+ };
114
+
115
+ // 如果是月份需要判断下日期
116
+ if (field === 'month' || field === 'year') {
117
+ var _newDate2, _newDate3, _newDate4;
118
+ var daysInMonth = getDaysInMonth(((_newDate2 = newDate) === null || _newDate2 === void 0 ? void 0 : _newDate2.year) || currentYear, (_newDate3 = newDate) === null || _newDate3 === void 0 ? void 0 : _newDate3.month);
119
+ var newDay = ((_newDate4 = newDate) === null || _newDate4 === void 0 ? void 0 : _newDate4.day) > daysInMonth ? daysInMonth : newDate.day;
120
+ newDate = _objectSpread(_objectSpread({}, newDate), {}, {
121
+ day: newDay
122
+ });
123
+ }
124
+ setDate(newDate);
125
+ if (foucsList[field]) {
126
+ foucsList[field].current.focus();
127
+ } else {
128
+ yearRef.current.blur();
129
+ }
130
+ var _format = format || 'YYYY-MM-DD';
131
+ if (newDate.year && newDate.month && newDate.day) {
132
+ var _date = "".concat(newDate.year, "-").concat(newDate.month.toString().padStart(2, '0'), "-").concat(newDate.day.toString().padStart(2, '0'));
133
+ onChange(dayjs(_date).format(_format));
134
+ }
135
+ };
136
+
137
+ /**
138
+ * @title: 获取日期
139
+ * @description:
140
+ * @param {any} year
141
+ * @param {any} month
142
+ * @return {*}
143
+ * @Author: chensheng.gu
144
+ * @Date: 2024-03-22 17:49
145
+ */
146
+ var getDaysInMonth = function getDaysInMonth(year, month) {
147
+ return dayjs("".concat(year, "-").concat(month), 'YYYY-MM').daysInMonth();
148
+ };
149
+
150
+ /**
151
+ * @title: 渲染下拉框列表
152
+ * @description:
153
+ * @param {any} field
154
+ * @param {any} start
155
+ * @param {any} end
156
+ * @return {*}
157
+ * @Author: chensheng.gu
158
+ * @Date: 2024-03-22 17:50
159
+ */
160
+ var renderOptions = function renderOptions(field, start, end) {
161
+ var options = [];
162
+ var _text = locale !== 'en-US' && locale !== 'en' ? localeMap[field] : '';
163
+ for (var i = start; i <= end; i++) {
164
+ options.push({
165
+ label: "".concat(i).concat(_text),
166
+ value: i
167
+ });
168
+ }
169
+ return options;
170
+ };
171
+ var selectId = useMemo(function () {
172
+ return {
173
+ dayId: getUniqueId('day'),
174
+ monthId: getUniqueId('month'),
175
+ yearId: getUniqueId('year')
176
+ };
177
+ }, []);
178
+ useLayoutEffect(function () {
179
+ setSelectInputType({
180
+ input: getSelectInput(selectId.dayId),
181
+ type: 'number'
182
+ });
183
+ setSelectInputType({
184
+ input: getSelectInput(selectId.monthId),
185
+ type: 'number'
186
+ });
187
+ setSelectInputType({
188
+ input: getSelectInput(selectId.yearId),
189
+ type: 'number'
190
+ });
191
+ }, [selectId]);
192
+ var handleDateSearch = useCallback(debounce(function (field, value) {
193
+ var dateOption = {
194
+ day: dayOptions,
195
+ month: monthOptions,
196
+ year: yearOptions
197
+ };
198
+ var _value = Number(value);
199
+ var index = dateOption[field].findIndex(function (item) {
200
+ return item.value === _value;
201
+ });
202
+ if (index !== -1) {
203
+ handleDateChange(field, _value);
204
+ } else {
205
+ handleDateChange(field, null);
206
+ }
207
+ }, 300), [dayOptions, monthOptions, yearOptions, date]);
208
+ var content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Select, {
209
+ id: selectId.dayId,
210
+ value: date.day,
211
+ placeholder: locales.getText('pisell2.text.date-day-text'),
212
+ onChange: function onChange(value) {
213
+ return handleDateChange('day', value);
214
+ },
215
+ style: itemStyle,
216
+ showSearch: true,
217
+ onSearch: function onSearch(value) {
218
+ handleDateSearch('day', value);
219
+ },
220
+ ref: dayRef,
221
+ size: "large"
222
+ }, dayOptions.map(function (item) {
223
+ return /*#__PURE__*/React.createElement(Option, {
224
+ key: item.value,
225
+ value: item.value
226
+ }, item.label);
227
+ })), /*#__PURE__*/React.createElement(Select, {
228
+ id: selectId.monthId,
229
+ value: date.month,
230
+ placeholder: locales.getText('pisell2.text.date-month-text'),
231
+ onChange: function onChange(value) {
232
+ return handleDateChange('month', value);
233
+ },
234
+ style: itemStyle,
235
+ showSearch: true,
236
+ onSearch: function onSearch(value) {
237
+ handleDateSearch('month', value);
238
+ },
239
+ ref: monthRef,
240
+ size: "large"
241
+ }, monthOptions.map(function (item) {
242
+ return /*#__PURE__*/React.createElement(Option, {
243
+ key: item.value,
244
+ value: item.value
245
+ }, item.label);
246
+ })), /*#__PURE__*/React.createElement(Select, {
247
+ id: selectId.yearId,
248
+ value: date.year,
249
+ placeholder: locales.getText('pisell2.text.date-year-text'),
250
+ onChange: function onChange(value) {
251
+ return handleDateChange('year', value);
252
+ },
253
+ style: itemStyle,
254
+ showSearch: true,
255
+ onSearch: function onSearch(value) {
256
+ handleDateSearch('year', value);
257
+ },
258
+ ref: yearRef,
259
+ size: "large"
260
+ }, yearOptions.map(function (item) {
261
+ return /*#__PURE__*/React.createElement(Option, {
262
+ key: item.value,
263
+ value: item.value
264
+ }, item.label);
265
+ })));
266
+ if (useSpace) {
267
+ return /*#__PURE__*/React.createElement(Space, {
268
+ className: className || '',
269
+ style: style || {}
270
+ }, content);
271
+ }
272
+ return /*#__PURE__*/React.createElement("div", {
273
+ className: className || '',
274
+ style: style || {}
275
+ }, content);
276
+ };
277
+ export default DateSectionCom;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const GenderField: (props: any) => React.JSX.Element;
3
+ export default GenderField;
@@ -0,0 +1,18 @@
1
+ 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); }
2
+ import React from 'react';
3
+ import { Select } from 'antd';
4
+ import { locales } from '@pisell/utils';
5
+ var GenderField = function GenderField(props) {
6
+ return /*#__PURE__*/React.createElement(Select, _extends({
7
+ size: "large",
8
+ placeholder: locales.getText('pisell2.text.gender'),
9
+ options: [{
10
+ label: locales.getText('pisell2.text.gender.male'),
11
+ value: '1'
12
+ }, {
13
+ label: locales.getText('pisell2.text.gender.female'),
14
+ value: '2'
15
+ }]
16
+ }, props));
17
+ };
18
+ export default GenderField;