@pisell/private-materials 6.3.33 → 6.3.34

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 (141) 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 +23 -8
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +23 -8
  11. package/es/components/index.d.ts +1 -2
  12. package/es/components/index.js +1 -2
  13. package/es/components/walletList/index.d.ts +0 -25
  14. package/es/components/walletList/index.js +98 -66
  15. package/es/components/walletList/serve.d.ts +4 -0
  16. package/es/components/walletList/serve.js +46 -13
  17. package/es/components/walletList/types/index.d.ts +12 -12
  18. package/es/components/walletList/types/index.js +2 -2
  19. package/es/index.d.ts +2 -1
  20. package/es/index.js +2 -1
  21. package/es/plus/productSelect/CategoryTabs/index.d.ts +2 -0
  22. package/es/plus/productSelect/CategoryTabs/index.js +6 -3
  23. package/es/plus/productSelect/components/TabsStructure/TabsStructure.less +0 -11
  24. package/es/plus/productSelect/utils.js +0 -1
  25. package/es/plus/walletEditor/WalletEditor.d.ts +5 -0
  26. package/es/plus/walletEditor/WalletEditor.js +316 -0
  27. package/es/plus/walletEditor/WalletEditor.less +129 -0
  28. package/es/plus/walletEditor/components/ImageUpload/index.d.ts +8 -0
  29. package/es/plus/walletEditor/components/ImageUpload/index.js +223 -0
  30. package/es/plus/walletEditor/components/JsonEditor/index.d.ts +11 -0
  31. package/es/plus/walletEditor/components/JsonEditor/index.js +68 -0
  32. package/es/plus/walletEditor/components/JsonEditor/index.less +4 -0
  33. package/es/plus/walletEditor/components/ValidityPeriodSelector/index.d.ts +20 -0
  34. package/es/plus/walletEditor/components/ValidityPeriodSelector/index.js +222 -0
  35. package/es/plus/walletEditor/components/ValidityPeriodSelector/index.less +4 -0
  36. package/es/plus/walletEditor/components/relationProduct/index.d.ts +6 -0
  37. package/es/plus/walletEditor/components/relationProduct/index.js +49 -0
  38. package/es/plus/walletEditor/components/relationProduct/index.less +15 -0
  39. package/es/plus/walletEditor/components/sortableWalletPassTypes/index.d.ts +37 -0
  40. package/es/plus/walletEditor/components/sortableWalletPassTypes/index.js +193 -0
  41. package/es/plus/walletEditor/components/sortableWalletPassTypes/index.less +110 -0
  42. package/es/plus/walletEditor/index.d.ts +3 -0
  43. package/es/plus/walletEditor/index.js +3 -0
  44. package/es/plus/walletEditor/locales.d.ts +126 -0
  45. package/es/plus/walletEditor/locales.js +143 -0
  46. package/es/plus/walletEditor/types.d.ts +52 -0
  47. package/es/plus/walletEditor/types.js +1 -0
  48. package/es/plus/walletPassGallery/components/footerButton/index.d.ts +14 -0
  49. package/es/plus/walletPassGallery/components/footerButton/index.js +247 -0
  50. package/es/plus/walletPassGallery/components/footerButton/index.less +93 -0
  51. package/es/plus/walletPassGallery/components/passDetail/index.d.ts +8 -0
  52. package/es/plus/walletPassGallery/components/passDetail/index.js +274 -0
  53. package/es/plus/walletPassGallery/components/passDetail/index.less +57 -0
  54. package/es/plus/walletPassGallery/components/passList/index.d.ts +11 -0
  55. package/es/plus/walletPassGallery/components/passList/index.js +115 -0
  56. package/es/plus/walletPassGallery/components/recharge/index.d.ts +11 -0
  57. package/es/plus/walletPassGallery/components/recharge/index.js +134 -0
  58. package/es/plus/walletPassGallery/components/recharge/index.less +16 -0
  59. package/es/plus/walletPassGallery/components/timelineSection/index.d.ts +8 -0
  60. package/es/plus/walletPassGallery/components/timelineSection/index.js +176 -0
  61. package/es/plus/walletPassGallery/components/timelineSection/index.less +67 -0
  62. package/es/plus/walletPassGallery/components/usageRule/index.d.ts +9 -0
  63. package/es/plus/walletPassGallery/components/usageRule/index.js +248 -0
  64. package/es/plus/walletPassGallery/components/usageRule/index.less +157 -0
  65. package/es/plus/walletPassGallery/index.d.ts +6 -0
  66. package/es/plus/walletPassGallery/index.js +602 -0
  67. package/es/plus/walletPassGallery/index.less +115 -0
  68. package/es/plus/walletPassGallery/locales.d.ts +270 -0
  69. package/es/plus/walletPassGallery/locales.js +279 -0
  70. package/es/plus/walletPassGallery/serve.d.ts +218 -0
  71. package/es/plus/walletPassGallery/serve.js +289 -0
  72. package/es/pro/Login2.0/Login2.js +4 -0
  73. package/es/pro/Login2.0/locales.js +93 -93
  74. package/lib/components/index.d.ts +1 -2
  75. package/lib/components/index.js +0 -3
  76. package/lib/components/walletList/index.d.ts +0 -25
  77. package/lib/components/walletList/index.js +90 -51
  78. package/lib/components/walletList/serve.d.ts +4 -0
  79. package/lib/components/walletList/serve.js +12 -0
  80. package/lib/components/walletList/types/index.d.ts +12 -12
  81. package/lib/index.d.ts +2 -1
  82. package/lib/index.js +6 -3
  83. package/lib/plus/productSelect/CategoryTabs/index.d.ts +2 -0
  84. package/lib/plus/productSelect/CategoryTabs/index.js +84 -69
  85. package/lib/plus/productSelect/components/TabsStructure/TabsStructure.less +0 -11
  86. package/lib/plus/productSelect/utils.js +0 -1
  87. package/lib/plus/walletEditor/WalletEditor.d.ts +5 -0
  88. package/lib/plus/walletEditor/WalletEditor.js +354 -0
  89. package/lib/plus/walletEditor/WalletEditor.less +129 -0
  90. package/lib/plus/walletEditor/components/ImageUpload/index.d.ts +8 -0
  91. package/lib/plus/walletEditor/components/ImageUpload/index.js +201 -0
  92. package/lib/plus/walletEditor/components/JsonEditor/index.d.ts +11 -0
  93. package/lib/plus/walletEditor/components/JsonEditor/index.js +89 -0
  94. package/lib/plus/walletEditor/components/JsonEditor/index.less +4 -0
  95. package/lib/plus/walletEditor/components/ValidityPeriodSelector/index.d.ts +20 -0
  96. package/lib/plus/walletEditor/components/ValidityPeriodSelector/index.js +176 -0
  97. package/lib/plus/walletEditor/components/ValidityPeriodSelector/index.less +4 -0
  98. package/lib/plus/walletEditor/components/relationProduct/index.d.ts +6 -0
  99. package/lib/plus/walletEditor/components/relationProduct/index.js +73 -0
  100. package/lib/plus/walletEditor/components/relationProduct/index.less +15 -0
  101. package/lib/plus/walletEditor/components/sortableWalletPassTypes/index.d.ts +37 -0
  102. package/lib/plus/walletEditor/components/sortableWalletPassTypes/index.js +211 -0
  103. package/lib/plus/walletEditor/components/sortableWalletPassTypes/index.less +110 -0
  104. package/lib/plus/walletEditor/index.d.ts +3 -0
  105. package/lib/plus/walletEditor/index.js +42 -0
  106. package/lib/plus/walletEditor/locales.d.ts +126 -0
  107. package/lib/plus/walletEditor/locales.js +167 -0
  108. package/lib/plus/walletEditor/types.d.ts +52 -0
  109. package/lib/plus/walletEditor/types.js +17 -0
  110. package/lib/plus/walletPassGallery/components/footerButton/index.d.ts +14 -0
  111. package/lib/plus/walletPassGallery/components/footerButton/index.js +187 -0
  112. package/lib/plus/walletPassGallery/components/footerButton/index.less +93 -0
  113. package/lib/plus/walletPassGallery/components/passDetail/index.d.ts +8 -0
  114. package/lib/plus/walletPassGallery/components/passDetail/index.js +287 -0
  115. package/lib/plus/walletPassGallery/components/passDetail/index.less +57 -0
  116. package/lib/plus/walletPassGallery/components/passList/index.d.ts +11 -0
  117. package/lib/plus/walletPassGallery/components/passList/index.js +136 -0
  118. package/lib/plus/walletPassGallery/components/recharge/index.d.ts +11 -0
  119. package/lib/plus/walletPassGallery/components/recharge/index.js +146 -0
  120. package/lib/plus/walletPassGallery/components/recharge/index.less +16 -0
  121. package/lib/plus/walletPassGallery/components/timelineSection/index.d.ts +8 -0
  122. package/lib/plus/walletPassGallery/components/timelineSection/index.js +212 -0
  123. package/lib/plus/walletPassGallery/components/timelineSection/index.less +67 -0
  124. package/lib/plus/walletPassGallery/components/usageRule/index.d.ts +9 -0
  125. package/lib/plus/walletPassGallery/components/usageRule/index.js +209 -0
  126. package/lib/plus/walletPassGallery/components/usageRule/index.less +157 -0
  127. package/lib/plus/walletPassGallery/index.d.ts +6 -0
  128. package/lib/plus/walletPassGallery/index.js +498 -0
  129. package/lib/plus/walletPassGallery/index.less +115 -0
  130. package/lib/plus/walletPassGallery/locales.d.ts +270 -0
  131. package/lib/plus/walletPassGallery/locales.js +299 -0
  132. package/lib/plus/walletPassGallery/serve.d.ts +218 -0
  133. package/lib/plus/walletPassGallery/serve.js +98 -0
  134. package/lib/pro/Login2.0/Login2.js +3 -0
  135. package/lib/pro/Login2.0/locales.js +93 -93
  136. package/lowcode/sortable-wallet-pass-types/meta.ts +267 -0
  137. package/lowcode/wallet-editor/meta.ts +57 -0
  138. package/lowcode/wallet-editor/snippets.ts +13 -0
  139. package/lowcode/wallet-pass-gallery/meta.ts +35 -0
  140. package/package.json +4 -4
  141. package/lowcode/wallet/meta.ts +0 -79
@@ -0,0 +1,212 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/plus/walletPassGallery/components/timelineSection/index.tsx
30
+ var timelineSection_exports = {};
31
+ __export(timelineSection_exports, {
32
+ default: () => timelineSection_default
33
+ });
34
+ module.exports = __toCommonJS(timelineSection_exports);
35
+ var import_react = __toESM(require("react"));
36
+ var import_ahooks = require("ahooks");
37
+ var import_dayjs = __toESM(require("dayjs"));
38
+ var import_timezone = __toESM(require("dayjs/plugin/timezone"));
39
+ var import_utc = __toESM(require("dayjs/plugin/utc"));
40
+ var import_utils = require("@pisell/utils");
41
+ var import_materials = require("@pisell/materials");
42
+ var import_serve = require("../../serve");
43
+ var import_index = require("./index.less");
44
+ import_dayjs.default.extend(import_timezone.default);
45
+ import_dayjs.default.extend(import_utc.default);
46
+ var stateTimeUnix = 1723255863;
47
+ var TimelineSection = (props) => {
48
+ const { code, tag, timezone } = props;
49
+ const { symbol = "$" } = (0, import_materials.usePisellConfig)();
50
+ const [isShowtimeLineDetail, setIsShowtimeLineDetail] = import_react.default.useState(false);
51
+ const [isSpending, setIsSpending] = import_react.default.useState(true);
52
+ const [timeLineDetail, setTimeLineDetail] = import_react.default.useState(
53
+ null
54
+ );
55
+ const assetActionEnum = (0, import_react.useMemo)(() => {
56
+ return {
57
+ recharge: tag === "point_card" ? import_utils.locales.getText("wallet-pass-gallery.pointsEarned") : import_utils.locales.getText("wallet-pass-gallery.recharge"),
58
+ order_expend: tag === "point_card" ? import_utils.locales.getText("wallet-pass-gallery.pointsRedeemed") : import_utils.locales.getText("wallet-pass-gallery.spending"),
59
+ order_refund: import_utils.locales.getText("wallet-pass-gallery.refund"),
60
+ expire: import_utils.locales.getText("wallet-pass-gallery.expire")
61
+ };
62
+ }, [tag]);
63
+ const formatCurrencyAmount = (0, import_react.useCallback)(
64
+ (amount = "", isNegative = false) => {
65
+ if (!amount) return "";
66
+ if (tag === "good_pass")
67
+ return import_utils.locales.getText("wallet-pass-gallery.goodPass.usedCredit")(
68
+ parseInt(amount)
69
+ );
70
+ const absAmount = amount.startsWith("-") ? amount.substring(1) : amount;
71
+ const showSymbol = !["point_card", "good_pass"].includes(tag);
72
+ return isNegative ? `-${showSymbol ? symbol : ""}${absAmount}` : `${showSymbol ? symbol : ""}${amount}`;
73
+ },
74
+ [symbol, tag]
75
+ );
76
+ const timeTreeNode = (0, import_react.useCallback)(
77
+ (data) => {
78
+ const {
79
+ action = "",
80
+ created_at = "",
81
+ amount = "",
82
+ currency_symbol = ""
83
+ } = data;
84
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_timeline-node" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_timeline-node-left" }, /* @__PURE__ */ import_react.default.createElement("p", { className: "pisell-wallet-pass-gallery_timeline-node-action" }, action ? assetActionEnum[action] : ""), created_at && /* @__PURE__ */ import_react.default.createElement("p", { className: "pisell-wallet-pass-gallery_timeline-node-time" }, created_at, (action === "recharge" || action === "order_expend") && /* @__PURE__ */ import_react.default.createElement(
85
+ "button",
86
+ {
87
+ type: "button",
88
+ className: "pisell-wallet-pass-gallery_timeline-node-detail-link",
89
+ onClick: () => {
90
+ setIsShowtimeLineDetail(true);
91
+ setIsSpending(action === "order_expend");
92
+ setTimeLineDetail(data);
93
+ },
94
+ style: {
95
+ background: "transparent",
96
+ border: "none",
97
+ padding: 0
98
+ }
99
+ },
100
+ import_utils.locales.getText("wallet-pass-gallery.viewDetails")
101
+ ))), /* @__PURE__ */ import_react.default.createElement(
102
+ "div",
103
+ {
104
+ className: `pisell-wallet-pass-gallery_timeline-node-amount${action === "recharge" ? " pisell-wallet-pass-gallery_timeline-node-amount-positive" : ""}${action === "order_expend" ? " pisell-wallet-pass-gallery_timeline-node-amount-negative" : ""}`
105
+ },
106
+ amount && currency_symbol ? formatCurrencyAmount(amount, action === "order_expend") : ""
107
+ ));
108
+ },
109
+ [assetActionEnum, formatCurrencyAmount]
110
+ );
111
+ const assetListReq = (0, import_ahooks.useRequest)(
112
+ () => (0, import_serve.getAssetList)({
113
+ num: "99",
114
+ skip: "1",
115
+ card_id: code,
116
+ sourceType: tag,
117
+ tag,
118
+ business_object: "customer"
119
+ }),
120
+ {
121
+ ready: !!code,
122
+ refreshDeps: [code, tag]
123
+ }
124
+ );
125
+ const timelineItems = (0, import_react.useMemo)(() => {
126
+ var _a;
127
+ const list = ((_a = assetListReq.data) == null ? void 0 : _a.list) || [];
128
+ if (!Array.isArray(list) || list.length === 0)
129
+ return [];
130
+ const filteredByAction = list.filter(
131
+ (item) => !!assetActionEnum[item.action || ""]
132
+ );
133
+ const filteredByTime = filteredByAction.filter((item) => {
134
+ const itemUnix = import_dayjs.default.tz((item == null ? void 0 : item.created_at) || "", timezone).unix();
135
+ if ((item == null ? void 0 : item.action) === "order_expend" && itemUnix < stateTimeUnix)
136
+ return false;
137
+ if ((item == null ? void 0 : item.tag) === "point_card" && itemUnix < stateTimeUnix) return false;
138
+ return true;
139
+ });
140
+ const nonZeroPoint = filteredByTime.filter(
141
+ (it) => !(it.tag === "point_card" && (it.amount === "0" || parseFloat(it.amount || "0") === 0))
142
+ );
143
+ return nonZeroPoint.map((item) => ({
144
+ children: assetActionEnum[(item == null ? void 0 : item.action) || ""] ? timeTreeNode(item) : null
145
+ }));
146
+ }, [
147
+ assetListReq.data,
148
+ assetActionEnum,
149
+ timeTreeNode,
150
+ timezone,
151
+ stateTimeUnix
152
+ ]);
153
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_timeline-subtitle" }, import_utils.locales.getText("wallet-pass-gallery.activelog")), assetListReq.loading ? /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_timeline-loading" }, /* @__PURE__ */ import_react.default.createElement(import_materials.Skeleton, { active: true, paragraph: { rows: 6 }, round: true })) : timelineItems.length > 0 ? /* @__PURE__ */ import_react.default.createElement(
154
+ import_materials.Timeline,
155
+ {
156
+ items: timelineItems,
157
+ className: "pisell-wallet-pass-gallery_timeline-list"
158
+ }
159
+ ) : /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_timeline-empty" }, /* @__PURE__ */ import_react.default.createElement(import_materials.PisellEmpty, null)), /* @__PURE__ */ import_react.default.createElement(
160
+ import_materials.PisellModal,
161
+ {
162
+ platform: "pc",
163
+ mobileModalHeight: "auto",
164
+ cancelVisible: false,
165
+ destroyOnClose: true,
166
+ onCancel: () => setIsShowtimeLineDetail(false),
167
+ title: isSpending ? import_utils.locales.getText("wallet-pass-gallery.spendingDetails") : import_utils.locales.getText("wallet-pass-gallery.rechargeDetails"),
168
+ open: isShowtimeLineDetail,
169
+ footer: [
170
+ /* @__PURE__ */ import_react.default.createElement(
171
+ import_materials.Button,
172
+ {
173
+ type: "primary",
174
+ block: true,
175
+ size: "large",
176
+ onClick: () => setIsShowtimeLineDetail(false)
177
+ },
178
+ import_utils.locales.getText("wallet-pass-gallery.done")
179
+ )
180
+ ]
181
+ },
182
+ /* @__PURE__ */ import_react.default.createElement(
183
+ import_materials.PisellStatisticList,
184
+ {
185
+ data: [
186
+ {
187
+ label: import_utils.locales.getText("wallet-pass-gallery.date"),
188
+ value: (timeLineDetail == null ? void 0 : timeLineDetail.created_at) || ""
189
+ },
190
+ {
191
+ label: isSpending ? import_utils.locales.getText("wallet-pass-gallery.spending") : import_utils.locales.getText("wallet-pass-gallery.recharge"),
192
+ value: formatCurrencyAmount(
193
+ (timeLineDetail == null ? void 0 : timeLineDetail.amount) || "",
194
+ isSpending
195
+ )
196
+ },
197
+ {
198
+ label: import_utils.locales.getText("wallet-pass-gallery.viewOrder"),
199
+ value: timeLineDetail && (timeLineDetail == null ? void 0 : timeLineDetail.resource_code) ? `#${timeLineDetail == null ? void 0 : timeLineDetail.resource_code}` : (timeLineDetail == null ? void 0 : timeLineDetail.transaction_id) ? `#${timeLineDetail == null ? void 0 : timeLineDetail.transaction_id}` : "",
200
+ isLink: !!(timeLineDetail && (timeLineDetail == null ? void 0 : timeLineDetail.resource_id)),
201
+ link: timeLineDetail && (timeLineDetail == null ? void 0 : timeLineDetail.resource_id) ? `/order/details?id=${timeLineDetail == null ? void 0 : timeLineDetail.resource_id}` : void 0
202
+ }
203
+ ],
204
+ labelColor: "#101828",
205
+ valueColor: "#101828",
206
+ backgroundColors: ["#fff"],
207
+ isHasBorder: false
208
+ }
209
+ )
210
+ ));
211
+ };
212
+ var timelineSection_default = TimelineSection;
@@ -0,0 +1,67 @@
1
+ .pisell-wallet-pass-gallery_timeline-node {
2
+ display: flex;
3
+ justify-content: space-between;
4
+
5
+ &-left {
6
+ display: flex;
7
+ flex-direction: column;
8
+ }
9
+
10
+ &-action {
11
+ color: #101828;
12
+ font-size: 14px;
13
+ font-weight: 500;
14
+ margin: 0 0 4px;
15
+ }
16
+
17
+ &-time {
18
+ color: #667085;
19
+ font-size: 12px;
20
+ margin: 0;
21
+ display: flex;
22
+ align-items: center;
23
+ }
24
+
25
+ &-detail-link {
26
+ color: var(--theme-color, #7F56D9);
27
+ margin-left: 8px;
28
+ cursor: pointer;
29
+ font-size: 12px;
30
+ }
31
+
32
+ &-amount {
33
+ font-size: 14px;
34
+ font-weight: 500;
35
+
36
+ &-positive {
37
+ color: #12B76A;
38
+ }
39
+
40
+ &-negative {
41
+ color: #F04438;
42
+ }
43
+ }
44
+ }
45
+
46
+ .pisell-wallet-pass-gallery_timeline-list {
47
+ padding: 8px 0;
48
+ }
49
+
50
+ .pisell-wallet-pass-gallery_timeline-subtitle {
51
+ font-size: 16px;
52
+ line-height: 24px;
53
+ font-weight: 600;
54
+ color: #101828;
55
+ margin-bottom: 16px;
56
+ }
57
+
58
+ .pisell-wallet-pass-gallery_timeline-empty {
59
+ display: flex;
60
+ justify-content: center;
61
+ align-items: center;
62
+ min-height: 200px;
63
+ }
64
+
65
+ .pisell-wallet-pass-gallery_timeline-loading {
66
+ min-height: 160px;
67
+ }
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import './index.less';
3
+ interface UsageRulesProps {
4
+ className?: string;
5
+ style?: React.CSSProperties;
6
+ dataSource?: any;
7
+ }
8
+ declare function UsageRules({ className, style, dataSource }: UsageRulesProps): JSX.Element | null;
9
+ export default UsageRules;
@@ -0,0 +1,209 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/plus/walletPassGallery/components/usageRule/index.tsx
30
+ var usageRule_exports = {};
31
+ __export(usageRule_exports, {
32
+ default: () => usageRule_default
33
+ });
34
+ module.exports = __toCommonJS(usageRule_exports);
35
+ var import_react = __toESM(require("react"));
36
+ var import_materials = require("@pisell/materials");
37
+ var import_utils = require("@pisell/utils");
38
+ var import_index = require("./index.less");
39
+ var { Text } = import_materials.Typography;
40
+ function UsageRules({ className = "", style, dataSource }) {
41
+ const {
42
+ extension_data = [],
43
+ customer_order_behavior_count = 0,
44
+ total_order_behavior_count = 0
45
+ } = dataSource || {};
46
+ const creditsData = (0, import_react.useMemo)(() => {
47
+ const usageCreditsItem = extension_data.find(
48
+ (item) => item.field_key === "usage_credits"
49
+ );
50
+ return usageCreditsItem == null ? void 0 : usageCreditsItem.value;
51
+ }, [extension_data]);
52
+ const rules = (0, import_react.useMemo)(() => {
53
+ if (!creditsData) return [];
54
+ const rules2 = [];
55
+ if (creditsData.max_per_day > 0) {
56
+ rules2.push({
57
+ type: "daily",
58
+ limit: creditsData.max_per_day,
59
+ description: "",
60
+ // Will be filled by localized text
61
+ resetTime: ""
62
+ // Will be filled by localized text
63
+ });
64
+ }
65
+ if (creditsData.max_per_week > 0) {
66
+ rules2.push({
67
+ type: "weekly",
68
+ limit: creditsData.max_per_week,
69
+ description: "",
70
+ // Will be filled by localized text
71
+ resetTime: ""
72
+ // Will be filled by localized text
73
+ });
74
+ }
75
+ if (creditsData.max_per_month > 0) {
76
+ rules2.push({
77
+ type: "monthly",
78
+ limit: creditsData.max_per_month,
79
+ description: "",
80
+ // Will be filled by localized text
81
+ resetTime: ""
82
+ // Will be filled by localized text
83
+ });
84
+ }
85
+ return rules2;
86
+ }, [creditsData]);
87
+ const personalLimit = (0, import_react.useMemo)(() => {
88
+ if (!creditsData) return void 0;
89
+ const totalCredits = creditsData.total_credits || 0;
90
+ const perUserLimit = creditsData.per_user_limit || 0;
91
+ let total = 0;
92
+ if (totalCredits > 0 && perUserLimit > 0) {
93
+ total = Math.min(totalCredits, perUserLimit);
94
+ } else {
95
+ total = Math.max(totalCredits, perUserLimit);
96
+ }
97
+ let total_remaining = 0;
98
+ if (totalCredits > 0) {
99
+ total_remaining = totalCredits - (total_order_behavior_count || 0);
100
+ }
101
+ let perUser_remaining = 0;
102
+ if (perUserLimit > 0) {
103
+ perUser_remaining = perUserLimit - (customer_order_behavior_count || 0);
104
+ }
105
+ let remaining = 0;
106
+ if (total_remaining > 0 && perUser_remaining > 0) {
107
+ remaining = Math.min(total_remaining, perUser_remaining);
108
+ } else {
109
+ if (total_remaining === 0) {
110
+ if (totalCredits === 0) {
111
+ remaining = perUser_remaining;
112
+ } else {
113
+ remaining = 0;
114
+ }
115
+ } else {
116
+ if (perUser_remaining === 0) {
117
+ remaining = 0;
118
+ }
119
+ }
120
+ }
121
+ return {
122
+ total,
123
+ remaining,
124
+ note: ""
125
+ // Will be filled by localized text
126
+ };
127
+ }, [creditsData, total_order_behavior_count, customer_order_behavior_count]);
128
+ const interpolateText = (text, variables) => {
129
+ let ret = text.replace(/\{(\w+)\}/g, (match, key) => {
130
+ return variables[key] !== void 0 ? variables[key] : match;
131
+ });
132
+ return ret;
133
+ };
134
+ const getText = (key, fallback) => {
135
+ var _a;
136
+ return ((_a = import_utils.locales) == null ? void 0 : _a.getText(key)) || fallback || key;
137
+ };
138
+ const getRuleDescription = (type, limit) => {
139
+ if (limit === 0 && type === "monthly") {
140
+ return getText("wallet-pass-gallery.monthlyLimitUnlimited", "无限制");
141
+ }
142
+ const templateKey = `wallet-pass-gallery.${type}LimitDesc`;
143
+ const template = getText(templateKey, "");
144
+ return interpolateText(template, { limit });
145
+ };
146
+ const getRuleResetTime = (type) => {
147
+ const resetKey = `wallet-pass-gallery.${type}Reset`;
148
+ return getText(resetKey, "");
149
+ };
150
+ const defaultRules = [
151
+ {
152
+ type: "daily",
153
+ limit: 3,
154
+ description: getRuleDescription("daily", 3),
155
+ resetTime: getRuleResetTime("daily")
156
+ },
157
+ {
158
+ type: "weekly",
159
+ limit: 15,
160
+ description: getRuleDescription("weekly", 15),
161
+ resetTime: getRuleResetTime("weekly")
162
+ },
163
+ {
164
+ type: "monthly",
165
+ limit: 60,
166
+ description: getRuleDescription("monthly", 60),
167
+ resetTime: getRuleResetTime("monthly")
168
+ }
169
+ ];
170
+ const processedRules = rules ? rules.map((rule) => ({
171
+ ...rule,
172
+ description: getRuleDescription(rule.type, rule.limit),
173
+ resetTime: getRuleResetTime(rule.type)
174
+ })) : defaultRules;
175
+ const finalRules = processedRules;
176
+ const getRuleLabel = (type) => {
177
+ switch (type) {
178
+ case "daily":
179
+ return getText("wallet-pass-gallery.dailyLimit", "每日限制:");
180
+ case "weekly":
181
+ return getText("wallet-pass-gallery.weeklyLimit", "每周限制:");
182
+ case "monthly":
183
+ return getText("wallet-pass-gallery.monthlyLimit", "每月限制:");
184
+ default:
185
+ return getText("wallet-pass-gallery.dailyLimit", "限制:");
186
+ }
187
+ };
188
+ if (!creditsData) return null;
189
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: `pisell-wallet-pass-gallery_usage-rules ${className}`, style }, /* @__PURE__ */ import_react.default.createElement(Text, { className: "pisell-wallet-pass-gallery_usage-rules-title" }, getText("wallet-pass-gallery.usageRules", "使用规则")), /* @__PURE__ */ import_react.default.createElement(Text, { className: "pisell-wallet-pass-gallery_usage-rules-subtitle" }, getText(
190
+ "wallet-pass-gallery.usageRulesSubtitle",
191
+ "请仔细阅读以下使用条件"
192
+ )), /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_usage-rules-section" }, /* @__PURE__ */ import_react.default.createElement(Text, { className: "pisell-wallet-pass-gallery_usage-rules-section-title" }, getText("wallet-pass-gallery.timeUsageLimits", "时间使用限制")), /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_usage-rules-list" }, finalRules.length > 0 ? finalRules.map((rule, index) => /* @__PURE__ */ import_react.default.createElement("div", { key: index, className: "pisell-wallet-pass-gallery_usage-rules-item" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_usage-rules-item-content" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_usage-rules-item-main-line" }, /* @__PURE__ */ import_react.default.createElement(Text, { className: "pisell-wallet-pass-gallery_usage-rules-item-label" }, getRuleLabel(rule.type)), /* @__PURE__ */ import_react.default.createElement(Text, { className: "pisell-wallet-pass-gallery_usage-rules-item-description" }, rule.description)), rule.resetTime && /* @__PURE__ */ import_react.default.createElement(Text, { className: "pisell-wallet-pass-gallery_usage-rules-item-reset" }, rule.resetTime)))) : /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_usage-rules-item" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_usage-rules-item-content" }, /* @__PURE__ */ import_react.default.createElement(Text, { className: "pisell-wallet-pass-gallery_usage-rules-item-description" }, getText(
193
+ "wallet-pass-gallery.monthlyLimitUnlimited",
194
+ "无限制"
195
+ )))))), /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_usage-rules-section" }, /* @__PURE__ */ import_react.default.createElement(Text, { className: "pisell-wallet-pass-gallery_usage-rules-section-title" }, getText("wallet-pass-gallery.totalQuantityControl", "总量控制")), /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_usage-rules-item" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-wallet-pass-gallery_usage-rules-item-content" }, personalLimit && personalLimit.total > 0 ? /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(Text, { className: "pisell-wallet-pass-gallery_usage-rules-item-label" }, getText("wallet-pass-gallery.personalLimit", "个人限额:")), /* @__PURE__ */ import_react.default.createElement(Text, { className: "pisell-wallet-pass-gallery_usage-rules-item-description" }, interpolateText(
196
+ getText(
197
+ "wallet-pass-gallery.personalLimitDesc",
198
+ "您最多可使用此券{total}次(剩余{remaining}次)"
199
+ ),
200
+ {
201
+ total: personalLimit.total,
202
+ remaining: personalLimit.remaining
203
+ }
204
+ )), /* @__PURE__ */ import_react.default.createElement(Text, { className: "pisell-wallet-pass-gallery_usage-rules-item-note" }, getText(
205
+ "wallet-pass-gallery.voucherExpireNote",
206
+ "用完后此券将自动失效"
207
+ ))) : /* @__PURE__ */ import_react.default.createElement(Text, { className: "pisell-wallet-pass-gallery_usage-rules-item-description" }, getText("wallet-pass-gallery.monthlyLimitUnlimited", "无限制"))))));
208
+ }
209
+ var usageRule_default = UsageRules;
@@ -0,0 +1,157 @@
1
+ .pisell-wallet-pass-gallery_usage-rules {
2
+ padding: 16px;
3
+ background: #ffffff;
4
+ border-radius: 8px;
5
+ border: 1px solid #f0f0f0;
6
+ margin-top: 16px;
7
+ margin-bottom: 20px;
8
+
9
+ // 确保所有Text组件都是块级元素
10
+ .ant-typography {
11
+ display: block !important;
12
+ width: 100% !important;
13
+ margin-bottom: 0 !important;
14
+ }
15
+
16
+ &-title {
17
+ font-size: 18px;
18
+ font-weight: 600;
19
+ color: #000000;
20
+ line-height: 24px;
21
+ margin-bottom: 8px;
22
+ display: block;
23
+ width: 100%;
24
+ }
25
+
26
+ &-subtitle {
27
+ font-size: 14px;
28
+ color: #6B7280;
29
+ line-height: 20px;
30
+ margin-bottom: 24px;
31
+ display: block;
32
+ width: 100%;
33
+ }
34
+
35
+ &-section {
36
+ margin-bottom: 24px;
37
+
38
+ &:last-child {
39
+ margin-bottom: 0;
40
+ }
41
+
42
+ &-title {
43
+ font-size: 16px;
44
+ font-weight: 500;
45
+ color: #6B7280;
46
+ line-height: 20px;
47
+ margin-bottom: 16px;
48
+ display: block;
49
+ width: 100%;
50
+ }
51
+ }
52
+
53
+ &-list {
54
+ display: flex;
55
+ flex-direction: column;
56
+ gap: 16px;
57
+ }
58
+
59
+ &-item {
60
+ position: relative;
61
+ display: flex;
62
+ align-items: flex-start;
63
+
64
+ &::before {
65
+ content: '•';
66
+ color: #697281;
67
+ font-size: 16px;
68
+ line-height: 20px;
69
+ font-weight: bold;
70
+ margin-right: 8px;
71
+ flex-shrink: 0;
72
+ margin-top: 0;
73
+ }
74
+
75
+ &-content {
76
+ flex: 1;
77
+ min-width: 0;
78
+ }
79
+
80
+ &-main-line {
81
+ margin-bottom: 4px;
82
+ }
83
+
84
+ &-label {
85
+ font-size: 14px;
86
+ font-weight: 600;
87
+ color: #000000;
88
+ line-height: 20px;
89
+ display: inline;
90
+ margin-right: 4px;
91
+ }
92
+
93
+ &-description {
94
+ font-size: 14px;
95
+ color: #000000;
96
+ line-height: 20px;
97
+ display: inline;
98
+ word-wrap: break-word;
99
+ }
100
+
101
+ &-reset {
102
+ font-size: 14px;
103
+ color: #000000;
104
+ line-height: 20px;
105
+ display: block;
106
+ width: 100%;
107
+ }
108
+
109
+ &-note {
110
+ font-size: 14px;
111
+ color: #000000;
112
+ line-height: 20px;
113
+ margin-top: 4px;
114
+ display: block;
115
+ width: 100%;
116
+ }
117
+ }
118
+
119
+ }
120
+
121
+ // 响应式设计
122
+ @media (max-width: 768px) {
123
+ .pisell-wallet-pass-gallery_usage-rules {
124
+ padding: 12px;
125
+ margin-top: 12px;
126
+
127
+ &-title {
128
+ font-size: 16px;
129
+ }
130
+
131
+ &-subtitle {
132
+ font-size: 13px;
133
+ }
134
+
135
+ &-section {
136
+ margin-bottom: 20px;
137
+
138
+ &-title {
139
+ font-size: 15px;
140
+ }
141
+ }
142
+
143
+ &-item {
144
+ &::before {
145
+ font-size: 14px;
146
+ margin-right: 6px;
147
+ }
148
+
149
+ &-label,
150
+ &-description,
151
+ &-reset,
152
+ &-note {
153
+ font-size: 13px;
154
+ }
155
+ }
156
+ }
157
+ }
@@ -0,0 +1,6 @@
1
+ import './index.less';
2
+ export interface WalletPassGalleryProps {
3
+ [key: string]: any;
4
+ }
5
+ declare const WalletPassGallery: (props: WalletPassGalleryProps) => JSX.Element;
6
+ export default WalletPassGallery;