@hkyhy/marsun-components-core 0.1.100 → 0.1.101

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 (20) hide show
  1. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.d.ts +1 -1
  2. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.js +3 -3
  3. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.js.map +1 -1
  4. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js +160 -145
  5. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js.map +1 -1
  6. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.d.ts +2 -2
  7. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.js +129 -120
  8. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.js.map +1 -1
  9. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.d.ts +2 -2
  10. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.js +78 -78
  11. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.js.map +1 -1
  12. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/index.d.ts +2 -2
  13. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.d.ts +26 -0
  14. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js +47 -19
  15. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js.map +1 -1
  16. package/dist/components/Tools/MessageCenter/index.d.ts +2 -1
  17. package/dist/components/Tools/index.d.ts +2 -2
  18. package/dist/index.js +229 -227
  19. package/dist/index.js.map +1 -1
  20. package/package.json +1 -1
@@ -1,46 +1,46 @@
1
- import { jsx as o, jsxs as u } from "react/jsx-runtime";
2
- import { message as r, Switch as T, Space as Q, Button as z, Select as q } from "antd";
3
- import { useState as b, useCallback as $, useEffect as A, useMemo as v } from "react";
4
- import { resolveTemplateCodeAfterEventChange as G } from "../../utils/adminGuards.js";
5
- import J from "../style.module.scss.js";
6
- import O from "../../../../Alert/Alert.js";
7
- import U from "../../../../Layout/PageSpin/index.js";
8
- import V from "../../../../Empty/Empty.js";
9
- import X from "../../../../Table/Table.js";
10
- import Y from "../../../../FormInfo/FormModal.js";
11
- import Z from "../../../../FormInfo/FormInfo.js";
12
- import { Input as R, Select as P, InputNumber as W } from "../../../../FormInfo/fields.js";
13
- const k = P, ee = R, B = W, be = ({
14
- canWrite: s,
15
- catalog: m,
16
- templates: y,
17
- roleOptions: N,
18
- fetchPushRules: w,
19
- savePushRule: C,
20
- setPushRuleEnabled: c,
1
+ import { jsx as o, jsxs as k } from "react/jsx-runtime";
2
+ import { message as r, Switch as J, Space as O, Button as N, Select as V } from "antd";
3
+ import { useState as y, useCallback as M, useEffect as _, useMemo as w } from "react";
4
+ import { resolveTemplateCodeAfterEventChange as X } from "../../utils/adminGuards.js";
5
+ import Y from "../style.module.scss.js";
6
+ import Z from "../../../../Alert/Alert.js";
7
+ import R from "../../../../Layout/PageSpin/index.js";
8
+ import j from "../../../../Empty/Empty.js";
9
+ import P from "../../../../Table/Table.js";
10
+ import ee from "../../../../FormInfo/FormModal.js";
11
+ import ae from "../../../../FormInfo/FormInfo.js";
12
+ import { Input as le, Select as oe, InputNumber as te } from "../../../../FormInfo/fields.js";
13
+ const C = oe, ne = le, T = te, ke = ({
14
+ crud: f,
15
+ catalog: c,
16
+ templates: u,
17
+ roleOptions: Q,
18
+ fetchPushRules: S,
19
+ savePushRule: K,
20
+ setPushRuleEnabled: m,
21
21
  deletePushRule: d,
22
- createNonce: S = 0
22
+ createNonce: h = 0
23
23
  }) => {
24
- const [K, h] = b([]), [L, I] = b(!1), [g, x] = b(""), [l, p] = b(null), [f, D] = b(!1), i = $(async () => {
25
- I(!0), x("");
24
+ const v = f.create, s = f.update, L = f.delete, U = f.read, I = (e) => e ? v : s, [g, x] = y([]), [D, F] = y(!1), [E, H] = y(""), [a, p] = y(null), [b, z] = y(!1), i = M(async () => {
25
+ F(!0), H("");
26
26
  try {
27
- const e = await w();
28
- h(Array.isArray(e) ? e : []);
27
+ const e = await S();
28
+ x(Array.isArray(e) ? e : []);
29
29
  } catch (e) {
30
- x(e instanceof Error ? e.message : String(e)), h([]);
30
+ H(e instanceof Error ? e.message : String(e)), x([]);
31
31
  } finally {
32
- I(!1);
32
+ F(!1);
33
33
  }
34
- }, [w]);
35
- A(() => {
34
+ }, [S]);
35
+ _(() => {
36
36
  i();
37
- }, [i]), A(() => {
38
- if (!S || !s) return;
39
- const e = m[0], a = y.find((n) => n.eventKey === (e == null ? void 0 : e.eventKey));
40
- D(!0), p({
37
+ }, [i]), _(() => {
38
+ if (!h || !v) return;
39
+ const e = c[0], l = u.find((t) => t.eventKey === (e == null ? void 0 : e.eventKey));
40
+ z(!0), p({
41
41
  label: (e == null ? void 0 : e.label) || "新建推送规则",
42
42
  eventKey: (e == null ? void 0 : e.eventKey) || "",
43
- templateCode: (a == null ? void 0 : a.code) || "",
43
+ templateCode: (l == null ? void 0 : l.code) || "",
44
44
  levels: ["L2"],
45
45
  audienceRoles: [],
46
46
  channels: ["in_app"],
@@ -48,55 +48,55 @@ const k = P, ee = R, B = W, be = ({
48
48
  scanLookbackDays: 7,
49
49
  enabled: !0
50
50
  });
51
- }, [S, s, m, y]);
52
- const F = $(
53
- (e) => y.filter((a) => !e || a.eventKey === e).map((a) => ({
54
- value: String(a.code || ""),
55
- label: `${a.label || a.code || ""}(${a.code || ""})`
56
- })).filter((a) => a.value),
57
- [y]
58
- ), E = v(
51
+ }, [h, v, c, u]);
52
+ const $ = M(
53
+ (e) => u.filter((l) => !e || l.eventKey === e).map((l) => ({
54
+ value: String(l.code || ""),
55
+ label: `${l.label || l.code || ""}(${l.code || ""})`
56
+ })).filter((l) => l.value),
57
+ [u]
58
+ ), A = w(
59
59
  () => ({
60
- label: l == null ? void 0 : l.label,
61
- eventKey: l == null ? void 0 : l.eventKey,
62
- templateCode: l == null ? void 0 : l.templateCode,
63
- levels: (l == null ? void 0 : l.levels) || [],
64
- audienceRoles: (l == null ? void 0 : l.audienceRoles) || [],
65
- slaHours: (l == null ? void 0 : l.slaHours) ?? 0,
66
- scanLookbackDays: (l == null ? void 0 : l.scanLookbackDays) ?? 0
60
+ label: a == null ? void 0 : a.label,
61
+ eventKey: a == null ? void 0 : a.eventKey,
62
+ templateCode: a == null ? void 0 : a.templateCode,
63
+ levels: (a == null ? void 0 : a.levels) || [],
64
+ audienceRoles: (a == null ? void 0 : a.audienceRoles) || [],
65
+ slaHours: (a == null ? void 0 : a.slaHours) ?? 0,
66
+ scanLookbackDays: (a == null ? void 0 : a.scanLookbackDays) ?? 0
67
67
  }),
68
- [l]
69
- ), M = v(
68
+ [a]
69
+ ), W = w(
70
70
  () => ({
71
- data: E,
71
+ data: A,
72
72
  onSubmit: async (e) => {
73
- if (!s || !l)
73
+ if (!I(b) || !a)
74
74
  return r.warning("当前为只读"), !1;
75
- const a = String(l.eventKey || e.eventKey || "").trim(), n = String(e.templateCode || "").trim();
76
- if (!a)
75
+ const l = String(a.eventKey || e.eventKey || "").trim(), t = String(e.templateCode || "").trim();
76
+ if (!l)
77
77
  return r.warning("请选择事件"), !1;
78
- if (!n)
78
+ if (!t)
79
79
  return r.warning("请关联模板编号"), !1;
80
80
  try {
81
- await C({
82
- ...l,
83
- label: String(e.label || l.label || "").trim() || a,
84
- eventKey: a,
85
- templateCode: n,
81
+ await K({
82
+ ...a,
83
+ label: String(e.label || a.label || "").trim() || l,
84
+ eventKey: l,
85
+ templateCode: t,
86
86
  levels: e.levels || [],
87
87
  audienceRoles: e.audienceRoles || [],
88
88
  channels: ["in_app"],
89
89
  slaHours: Number(e.slaHours ?? 0),
90
90
  scanLookbackDays: Number(e.scanLookbackDays ?? 0),
91
- enabled: f ? !0 : l.enabled !== !1
91
+ enabled: b ? !0 : a.enabled !== !1
92
92
  }), r.success("已保存"), p(null), await i();
93
- } catch (t) {
94
- return r.error(t instanceof Error ? t.message : String(t)), !1;
93
+ } catch (n) {
94
+ return r.error(n instanceof Error ? n.message : String(n)), !1;
95
95
  }
96
96
  }
97
97
  }),
98
- [s, l, E, f, i, C]
99
- ), _ = v(
98
+ [v, s, a, A, b, i, K]
99
+ ), q = w(
100
100
  () => [
101
101
  { title: "名称", dataIndex: "label", key: "label", ellipsis: !0 },
102
102
  {
@@ -104,8 +104,8 @@ const k = P, ee = R, B = W, be = ({
104
104
  dataIndex: "eventKey",
105
105
  key: "eventKey",
106
106
  render: (e) => {
107
- var a;
108
- return ((a = m.find((n) => n.eventKey === e)) == null ? void 0 : a.label) || e || "—";
107
+ var l;
108
+ return ((l = c.find((t) => t.eventKey === e)) == null ? void 0 : l.label) || e || "—";
109
109
  }
110
110
  },
111
111
  { title: "关联模板", dataIndex: "templateCode", key: "templateCode", width: 140 },
@@ -121,18 +121,18 @@ const k = P, ee = R, B = W, be = ({
121
121
  dataIndex: "enabled",
122
122
  key: "enabled",
123
123
  width: 80,
124
- render: (e, a) => /* @__PURE__ */ o(
125
- T,
124
+ render: (e, l) => /* @__PURE__ */ o(
125
+ J,
126
126
  {
127
127
  size: "small",
128
- checked: a.enabled !== !1,
129
- disabled: !s || !c,
130
- onChange: (n) => {
128
+ checked: l.enabled !== !1,
129
+ disabled: !s || !m,
130
+ onChange: (t) => {
131
131
  (async () => {
132
132
  try {
133
- await (c == null ? void 0 : c(a, n)), r.success(n ? "已启用" : "已停用"), await i();
134
- } catch (t) {
135
- r.error(t instanceof Error ? t.message : String(t));
133
+ await (m == null ? void 0 : m(l, t)), r.success(t ? "已启用" : "已停用"), await i();
134
+ } catch (n) {
135
+ r.error(n instanceof Error ? n.message : String(n));
136
136
  }
137
137
  })();
138
138
  }
@@ -143,32 +143,32 @@ const k = P, ee = R, B = W, be = ({
143
143
  title: "操作",
144
144
  key: "actions",
145
145
  width: 140,
146
- render: (e, a) => /* @__PURE__ */ u(Q, { size: 4, children: [
146
+ render: (e, l) => /* @__PURE__ */ k(O, { size: 4, children: [
147
147
  /* @__PURE__ */ o(
148
- z,
148
+ N,
149
149
  {
150
150
  type: "link",
151
151
  size: "small",
152
152
  disabled: !s,
153
153
  onClick: () => {
154
- D(!1), p({ ...a });
154
+ z(!1), p({ ...l });
155
155
  },
156
156
  children: "编辑"
157
157
  }
158
158
  ),
159
159
  /* @__PURE__ */ o(
160
- z,
160
+ N,
161
161
  {
162
162
  type: "link",
163
163
  size: "small",
164
164
  danger: !0,
165
- disabled: !s || !d,
165
+ disabled: !L || !d,
166
166
  onClick: () => {
167
167
  (async () => {
168
168
  try {
169
- await (d == null ? void 0 : d(a)), r.success("已删除"), await i();
170
- } catch (n) {
171
- r.error(n instanceof Error ? n.message : String(n));
169
+ await (d == null ? void 0 : d(l)), r.success("已删除"), await i();
170
+ } catch (t) {
171
+ r.error(t instanceof Error ? t.message : String(t));
172
172
  }
173
173
  })();
174
174
  },
@@ -178,56 +178,56 @@ const k = P, ee = R, B = W, be = ({
178
178
  ] })
179
179
  }
180
180
  ],
181
- [s, m, d, i, c]
181
+ [s, L, c, d, i, m]
182
182
  );
183
- return /* @__PURE__ */ u("div", { className: J.pane, children: [
184
- g ? /* @__PURE__ */ o(O, { type: "error", showIcon: !0, message: g, style: { marginBottom: 12 } }) : null,
185
- /* @__PURE__ */ o(U, { spinning: L, children: K.length === 0 && !L ? /* @__PURE__ */ o(V, { description: "暂无推送规则" }) : /* @__PURE__ */ o(
186
- X,
183
+ return /* @__PURE__ */ k("div", { className: Y.pane, children: [
184
+ E ? /* @__PURE__ */ o(Z, { type: "error", showIcon: !0, message: E, style: { marginBottom: 12 } }) : null,
185
+ /* @__PURE__ */ o(R, { spinning: D, children: U ? g.length === 0 && !D ? /* @__PURE__ */ o(j, { description: "暂无推送规则" }) : /* @__PURE__ */ o(
186
+ P,
187
187
  {
188
188
  rowKey: (e) => e.id || e.code || `${e.eventKey}-${e.templateCode}`,
189
189
  tableName: "msg-center-push-rules",
190
190
  columnConfigEnabled: !1,
191
191
  columnResizeEnabled: !1,
192
- columns: _,
193
- dataSource: K,
192
+ columns: q,
193
+ dataSource: g,
194
194
  pagination: !1,
195
195
  size: "small"
196
196
  }
197
- ) }),
198
- /* @__PURE__ */ u(
199
- Y,
197
+ ) : /* @__PURE__ */ o(j, { description: "无推送规则读取权限" }) }),
198
+ /* @__PURE__ */ k(
199
+ ee,
200
200
  {
201
- title: f ? "新建推送规则" : "编辑推送规则",
202
- open: !!l,
201
+ title: b ? "新建推送规则" : "编辑推送规则",
202
+ open: !!a,
203
203
  onCancel: () => p(null),
204
204
  width: 560,
205
205
  okText: "保存",
206
206
  autoClose: !1,
207
- formProps: M,
207
+ formProps: W,
208
208
  children: [
209
- /* @__PURE__ */ u("div", { style: { marginBottom: 16 }, children: [
209
+ /* @__PURE__ */ k("div", { style: { marginBottom: 16 }, children: [
210
210
  /* @__PURE__ */ o("div", { style: { marginBottom: 8 }, children: "事件" }),
211
211
  /* @__PURE__ */ o(
212
- q,
212
+ V,
213
213
  {
214
214
  style: { width: "100%" },
215
215
  disabled: !s,
216
- value: (l == null ? void 0 : l.eventKey) || void 0,
217
- options: m.map((e) => ({
216
+ value: (a == null ? void 0 : a.eventKey) || void 0,
217
+ options: c.map((e) => ({
218
218
  value: e.eventKey,
219
219
  label: e.label || e.eventKey
220
220
  })),
221
221
  onChange: (e) => {
222
- const a = String(e || ""), n = F(a);
222
+ const l = String(e || ""), t = $(l);
223
223
  p(
224
- (t) => {
225
- var H;
226
- return t && {
227
- ...t,
228
- eventKey: a,
229
- templateCode: G(t.templateCode, n),
230
- label: ((H = m.find((j) => j.eventKey === a)) == null ? void 0 : H.label) || t.label
224
+ (n) => {
225
+ var B;
226
+ return n && {
227
+ ...n,
228
+ eventKey: l,
229
+ templateCode: X(n.templateCode, t),
230
+ label: ((B = c.find((G) => G.eventKey === l)) == null ? void 0 : B.label) || n.label
231
231
  };
232
232
  }
233
233
  );
@@ -238,26 +238,35 @@ const k = P, ee = R, B = W, be = ({
238
238
  )
239
239
  ] }),
240
240
  /* @__PURE__ */ o(
241
- Z,
241
+ ae,
242
242
  {
243
243
  column: 1,
244
244
  list: [
245
- /* @__PURE__ */ o(ee, { name: "label", label: "名称", rule: "REQ", disabled: !s }, "label"),
246
245
  /* @__PURE__ */ o(
247
- k,
246
+ ne,
247
+ {
248
+ name: "label",
249
+ label: "名称",
250
+ rule: "REQ",
251
+ disabled: !I(b)
252
+ },
253
+ "label"
254
+ ),
255
+ /* @__PURE__ */ o(
256
+ C,
248
257
  {
249
258
  name: "templateCode",
250
259
  label: "关联模板",
251
260
  rule: "REQ",
252
261
  disabled: !s,
253
- options: F(l == null ? void 0 : l.eventKey),
262
+ options: $(a == null ? void 0 : a.eventKey),
254
263
  showSearch: !0,
255
264
  optionFilterProp: "label"
256
265
  },
257
- `tpl-${(l == null ? void 0 : l.eventKey) || ""}`
266
+ `tpl-${(a == null ? void 0 : a.eventKey) || ""}`
258
267
  ),
259
268
  /* @__PURE__ */ o(
260
- k,
269
+ C,
261
270
  {
262
271
  name: "levels",
263
272
  label: "级别",
@@ -268,19 +277,19 @@ const k = P, ee = R, B = W, be = ({
268
277
  "levels"
269
278
  ),
270
279
  /* @__PURE__ */ o(
271
- k,
280
+ C,
272
281
  {
273
282
  name: "audienceRoles",
274
283
  label: "受众角色",
275
284
  mode: "multiple",
276
285
  disabled: !s,
277
- options: N.map((e) => ({ value: e.code, label: e.name || e.code })),
286
+ options: Q.map((e) => ({ value: e.code, label: e.name || e.code })),
278
287
  optionFilterProp: "label"
279
288
  },
280
289
  "audienceRoles"
281
290
  ),
282
291
  /* @__PURE__ */ o(
283
- B,
292
+ T,
284
293
  {
285
294
  name: "slaHours",
286
295
  label: "SLA(小时)",
@@ -291,7 +300,7 @@ const k = P, ee = R, B = W, be = ({
291
300
  "slaHours"
292
301
  ),
293
302
  /* @__PURE__ */ o(
294
- B,
303
+ T,
295
304
  {
296
305
  name: "scanLookbackDays",
297
306
  label: "回看(天)",
@@ -310,6 +319,6 @@ const k = P, ee = R, B = W, be = ({
310
319
  ] });
311
320
  };
312
321
  export {
313
- be as PushRulesPanel
322
+ ke as PushRulesPanel
314
323
  };
315
324
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../src/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.tsx"],"sourcesContent":["import { FormInfo, FormModal, Input, InputNumber, Select } from '@/components/FormInfo';\nimport { Alert } from '@/components/Alert';\nimport { Empty } from '@/components/Empty';\nimport { PageSpin } from '@/components/Layout';\nimport { Table } from '@/components/Table';\nimport { Button, Select as AntSelect, Space, Switch, message } from 'antd';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport type {\n MessageAudienceRoleOption,\n MessageEventCatalogItem,\n MessageTemplateAdminItem,\n PushRuleAdminItem,\n} from '../types';\nimport { resolveTemplateCodeAfterEventChange } from '../../utils/adminGuards';\nimport styles from '../style.module.scss';\n\n/** CI tsc:kne Select 重载与 FieldProps 交叉时误匹配 FormItem children;宽化为任意 props */\nconst FiSelect = Select as unknown as React.ComponentType<Record<string, unknown>>;\nconst FiInput = Input as unknown as React.ComponentType<Record<string, unknown>>;\nconst FiInputNumber = InputNumber as unknown as React.ComponentType<Record<string, unknown>>;\n\nexport type PushRulesPanelProps = {\n canWrite: boolean;\n catalog: MessageEventCatalogItem[];\n templates: MessageTemplateAdminItem[];\n roleOptions: MessageAudienceRoleOption[];\n fetchPushRules: () => Promise<PushRuleAdminItem[]>;\n savePushRule: (item: PushRuleAdminItem) => Promise<void>;\n setPushRuleEnabled?: (item: PushRuleAdminItem, enabled: boolean) => Promise<void>;\n deletePushRule?: (item: PushRuleAdminItem) => Promise<void>;\n createNonce?: number;\n};\n\ntype FormShape = {\n label?: string;\n eventKey?: string;\n templateCode?: string;\n levels?: string[];\n audienceRoles?: string[];\n slaHours?: number;\n scanLookbackDays?: number;\n};\n\n/**\n * 推送规则 CRUD:必含 eventKey + templateCode;channels 默认 in_app。\n */\nexport const PushRulesPanel: React.FC<PushRulesPanelProps> = ({\n canWrite,\n catalog,\n templates,\n roleOptions,\n fetchPushRules,\n savePushRule,\n setPushRuleEnabled,\n deletePushRule,\n createNonce = 0,\n}) => {\n const [rows, setRows] = useState<PushRuleAdminItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [editing, setEditing] = useState<PushRuleAdminItem | null>(null);\n const [isCreate, setIsCreate] = useState(false);\n\n const reload = useCallback(async () => {\n setLoading(true);\n setError('');\n try {\n const list = await fetchPushRules();\n setRows(Array.isArray(list) ? list : []);\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n setRows([]);\n } finally {\n setLoading(false);\n }\n }, [fetchPushRules]);\n\n useEffect(() => {\n void reload();\n }, [reload]);\n\n useEffect(() => {\n if (!createNonce || !canWrite) return;\n const first = catalog[0];\n const tplForEvent = templates.find((t) => t.eventKey === first?.eventKey);\n setIsCreate(true);\n setEditing({\n label: first?.label || '新建推送规则',\n eventKey: first?.eventKey || '',\n templateCode: tplForEvent?.code || '',\n levels: ['L2'],\n audienceRoles: [],\n channels: ['in_app'],\n slaHours: 36,\n scanLookbackDays: 7,\n enabled: true,\n });\n }, [createNonce, canWrite, catalog, templates]);\n\n const templatesForEvent = useCallback(\n (eventKey?: string) =>\n templates\n .filter((t) => !eventKey || t.eventKey === eventKey)\n .map((t) => ({\n value: String(t.code || ''),\n label: `${t.label || t.code || ''}(${t.code || ''})`,\n }))\n .filter((o) => o.value),\n [templates],\n );\n\n const formData = useMemo(\n () => ({\n label: editing?.label,\n eventKey: editing?.eventKey,\n templateCode: editing?.templateCode,\n levels: editing?.levels || [],\n audienceRoles: editing?.audienceRoles || [],\n slaHours: editing?.slaHours ?? 0,\n scanLookbackDays: editing?.scanLookbackDays ?? 0,\n }),\n [editing],\n );\n\n const formProps = useMemo(\n () => ({\n data: formData,\n onSubmit: async (data: FormShape) => {\n if (!canWrite || !editing) {\n message.warning('当前为只读');\n return false;\n }\n const eventKey = String(editing.eventKey || data.eventKey || '').trim();\n const templateCode = String(data.templateCode || '').trim();\n if (!eventKey) {\n message.warning('请选择事件');\n return false;\n }\n if (!templateCode) {\n message.warning('请关联模板编号');\n return false;\n }\n try {\n await savePushRule({\n ...editing,\n label: String(data.label || editing.label || '').trim() || eventKey,\n eventKey,\n templateCode,\n levels: data.levels || [],\n audienceRoles: data.audienceRoles || [],\n channels: ['in_app'],\n slaHours: Number(data.slaHours ?? 0),\n scanLookbackDays: Number(data.scanLookbackDays ?? 0),\n enabled: isCreate ? true : editing.enabled !== false,\n });\n message.success('已保存');\n setEditing(null);\n await reload();\n } catch (e) {\n message.error(e instanceof Error ? e.message : String(e));\n return false;\n }\n },\n }),\n [canWrite, editing, formData, isCreate, reload, savePushRule],\n );\n\n const columns = useMemo(\n () => [\n { title: '名称', dataIndex: 'label', key: 'label', ellipsis: true },\n {\n title: '事件',\n dataIndex: 'eventKey',\n key: 'eventKey',\n render: (v: string) => catalog.find((c) => c.eventKey === v)?.label || v || '—',\n },\n { title: '关联模板', dataIndex: 'templateCode', key: 'templateCode', width: 140 },\n {\n title: '级别',\n dataIndex: 'levels',\n key: 'levels',\n width: 100,\n render: (lv: string[] | undefined) => (lv || []).join(',') || '—',\n },\n {\n title: '启用',\n dataIndex: 'enabled',\n key: 'enabled',\n width: 80,\n render: (_: unknown, r: PushRuleAdminItem) => (\n <Switch\n size=\"small\"\n checked={r.enabled !== false}\n disabled={!canWrite || !setPushRuleEnabled}\n onChange={(checked) => {\n void (async () => {\n try {\n await setPushRuleEnabled?.(r, checked);\n message.success(checked ? '已启用' : '已停用');\n await reload();\n } catch (e) {\n message.error(e instanceof Error ? e.message : String(e));\n }\n })();\n }}\n />\n ),\n },\n {\n title: '操作',\n key: 'actions',\n width: 140,\n render: (_: unknown, r: PushRuleAdminItem) => (\n <Space size={4}>\n <Button\n type=\"link\"\n size=\"small\"\n disabled={!canWrite}\n onClick={() => {\n setIsCreate(false);\n setEditing({ ...r });\n }}\n >\n 编辑\n </Button>\n <Button\n type=\"link\"\n size=\"small\"\n danger\n disabled={!canWrite || !deletePushRule}\n onClick={() => {\n void (async () => {\n try {\n await deletePushRule?.(r);\n message.success('已删除');\n await reload();\n } catch (e) {\n message.error(e instanceof Error ? e.message : String(e));\n }\n })();\n }}\n >\n 删除\n </Button>\n </Space>\n ),\n },\n ],\n [canWrite, catalog, deletePushRule, reload, setPushRuleEnabled],\n );\n\n return (\n <div className={styles.pane}>\n {error ? <Alert type=\"error\" showIcon message={error} style={{ marginBottom: 12 }} /> : null}\n <PageSpin spinning={loading}>\n {rows.length === 0 && !loading ? (\n <Empty description=\"暂无推送规则\" />\n ) : (\n <Table<PushRuleAdminItem>\n rowKey={(r) => r.id || r.code || `${r.eventKey}-${r.templateCode}`}\n tableName=\"msg-center-push-rules\"\n columnConfigEnabled={false}\n columnResizeEnabled={false}\n columns={columns}\n dataSource={rows}\n pagination={false}\n size=\"small\"\n />\n )}\n </PageSpin>\n <FormModal\n title={isCreate ? '新建推送规则' : '编辑推送规则'}\n open={Boolean(editing)}\n onCancel={() => setEditing(null)}\n width={560}\n okText=\"保存\"\n autoClose={false}\n formProps={formProps}\n >\n {/* 事件用 antd Select:FormInfo Select + onChange 在 CI tsc 下与 kne 重载冲突 */}\n <div style={{ marginBottom: 16 }}>\n <div style={{ marginBottom: 8 }}>事件</div>\n <AntSelect\n style={{ width: '100%' }}\n disabled={!canWrite}\n value={editing?.eventKey || undefined}\n options={catalog.map((c) => ({\n value: c.eventKey,\n label: c.label || c.eventKey,\n }))}\n onChange={(ek) => {\n const next = String(ek || '');\n const opts = templatesForEvent(next);\n setEditing((prev) =>\n prev\n ? {\n ...prev,\n eventKey: next,\n templateCode: resolveTemplateCodeAfterEventChange(prev.templateCode, opts),\n label: catalog.find((c) => c.eventKey === next)?.label || prev.label,\n }\n : prev,\n );\n }}\n showSearch\n optionFilterProp=\"label\"\n />\n </div>\n <FormInfo\n column={1}\n list={[\n <FiInput key=\"label\" name=\"label\" label=\"名称\" rule=\"REQ\" disabled={!canWrite} />,\n <FiSelect\n key={`tpl-${editing?.eventKey || ''}`}\n name=\"templateCode\"\n label=\"关联模板\"\n rule=\"REQ\"\n disabled={!canWrite}\n options={templatesForEvent(editing?.eventKey)}\n showSearch\n optionFilterProp=\"label\"\n />,\n <FiSelect\n key=\"levels\"\n name=\"levels\"\n label=\"级别\"\n mode=\"multiple\"\n disabled={!canWrite}\n options={['L1', 'L2', 'L3'].map((x) => ({ value: x, label: x }))}\n />,\n <FiSelect\n key=\"audienceRoles\"\n name=\"audienceRoles\"\n label=\"受众角色\"\n mode=\"multiple\"\n disabled={!canWrite}\n options={roleOptions.map((r) => ({ value: r.code, label: r.name || r.code }))}\n optionFilterProp=\"label\"\n />,\n <FiInputNumber\n key=\"slaHours\"\n name=\"slaHours\"\n label=\"SLA(小时)\"\n disabled={!canWrite}\n min={0}\n style={{ width: '100%' }}\n />,\n <FiInputNumber\n key=\"scanLookbackDays\"\n name=\"scanLookbackDays\"\n label=\"回看(天)\"\n disabled={!canWrite}\n min={0}\n style={{ width: '100%' }}\n />,\n ]}\n />\n </FormModal>\n </div>\n );\n};\n\nexport default PushRulesPanel;\n"],"names":["FiSelect","Select","FiInput","Input","FiInputNumber","InputNumber","PushRulesPanel","canWrite","catalog","templates","roleOptions","fetchPushRules","savePushRule","setPushRuleEnabled","deletePushRule","createNonce","rows","setRows","useState","loading","setLoading","error","setError","editing","setEditing","isCreate","setIsCreate","reload","useCallback","list","useEffect","first","tplForEvent","t","templatesForEvent","eventKey","o","formData","useMemo","formProps","data","message","templateCode","e","columns","v","_a","c","lv","_","r","jsx","Switch","checked","jsxs","Space","Button","styles","Alert","PageSpin","Empty","Table","FormModal","AntSelect","ek","next","opts","prev","resolveTemplateCodeAfterEventChange","FormInfo","x"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.tsx"],"sourcesContent":["import { FormInfo, FormModal, Input, InputNumber, Select } from '@/components/FormInfo';\nimport { Alert } from '@/components/Alert';\nimport { Empty } from '@/components/Empty';\nimport { PageSpin } from '@/components/Layout';\nimport { Table } from '@/components/Table';\nimport { Button, Select as AntSelect, Space, Switch, message } from 'antd';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport type {\n MessageAudienceRoleOption,\n MessageCrudFlags,\n MessageEventCatalogItem,\n MessageTemplateAdminItem,\n PushRuleAdminItem,\n} from '../types';\nimport { resolveTemplateCodeAfterEventChange } from '../../utils/adminGuards';\nimport styles from '../style.module.scss';\n\n/** CI tsc:kne Select 重载与 FieldProps 交叉时误匹配 FormItem children;宽化为任意 props */\nconst FiSelect = Select as unknown as React.ComponentType<Record<string, unknown>>;\nconst FiInput = Input as unknown as React.ComponentType<Record<string, unknown>>;\nconst FiInputNumber = InputNumber as unknown as React.ComponentType<Record<string, unknown>>;\n\nexport type PushRulesPanelProps = {\n crud: MessageCrudFlags;\n catalog: MessageEventCatalogItem[];\n templates: MessageTemplateAdminItem[];\n roleOptions: MessageAudienceRoleOption[];\n fetchPushRules: () => Promise<PushRuleAdminItem[]>;\n savePushRule: (item: PushRuleAdminItem) => Promise<void>;\n setPushRuleEnabled?: (item: PushRuleAdminItem, enabled: boolean) => Promise<void>;\n deletePushRule?: (item: PushRuleAdminItem) => Promise<void>;\n createNonce?: number;\n};\n\ntype FormShape = {\n label?: string;\n eventKey?: string;\n templateCode?: string;\n levels?: string[];\n audienceRoles?: string[];\n slaHours?: number;\n scanLookbackDays?: number;\n};\n\n/**\n * 推送规则 CRUD:必含 eventKey + templateCode;channels 默认 in_app。\n */\nexport const PushRulesPanel: React.FC<PushRulesPanelProps> = ({\n crud,\n catalog,\n templates,\n roleOptions,\n fetchPushRules,\n savePushRule,\n setPushRuleEnabled,\n deletePushRule,\n createNonce = 0,\n}) => {\n const canCreate = crud.create;\n const canUpdate = crud.update;\n const canDelete = crud.delete;\n const canRead = crud.read;\n const formWritable = (creating: boolean) => (creating ? canCreate : canUpdate);\n\n const [rows, setRows] = useState<PushRuleAdminItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [editing, setEditing] = useState<PushRuleAdminItem | null>(null);\n const [isCreate, setIsCreate] = useState(false);\n\n const reload = useCallback(async () => {\n setLoading(true);\n setError('');\n try {\n const list = await fetchPushRules();\n setRows(Array.isArray(list) ? list : []);\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n setRows([]);\n } finally {\n setLoading(false);\n }\n }, [fetchPushRules]);\n\n useEffect(() => {\n void reload();\n }, [reload]);\n\n useEffect(() => {\n if (!createNonce || !canCreate) return;\n const first = catalog[0];\n const tplForEvent = templates.find((t) => t.eventKey === first?.eventKey);\n setIsCreate(true);\n setEditing({\n label: first?.label || '新建推送规则',\n eventKey: first?.eventKey || '',\n templateCode: tplForEvent?.code || '',\n levels: ['L2'],\n audienceRoles: [],\n channels: ['in_app'],\n slaHours: 36,\n scanLookbackDays: 7,\n enabled: true,\n });\n }, [createNonce, canCreate, catalog, templates]);\n\n const templatesForEvent = useCallback(\n (eventKey?: string) =>\n templates\n .filter((t) => !eventKey || t.eventKey === eventKey)\n .map((t) => ({\n value: String(t.code || ''),\n label: `${t.label || t.code || ''}(${t.code || ''})`,\n }))\n .filter((o) => o.value),\n [templates],\n );\n\n const formData = useMemo(\n () => ({\n label: editing?.label,\n eventKey: editing?.eventKey,\n templateCode: editing?.templateCode,\n levels: editing?.levels || [],\n audienceRoles: editing?.audienceRoles || [],\n slaHours: editing?.slaHours ?? 0,\n scanLookbackDays: editing?.scanLookbackDays ?? 0,\n }),\n [editing],\n );\n\n const formProps = useMemo(\n () => ({\n data: formData,\n onSubmit: async (data: FormShape) => {\n if (!formWritable(isCreate) || !editing) {\n message.warning('当前为只读');\n return false;\n }\n const eventKey = String(editing.eventKey || data.eventKey || '').trim();\n const templateCode = String(data.templateCode || '').trim();\n if (!eventKey) {\n message.warning('请选择事件');\n return false;\n }\n if (!templateCode) {\n message.warning('请关联模板编号');\n return false;\n }\n try {\n await savePushRule({\n ...editing,\n label: String(data.label || editing.label || '').trim() || eventKey,\n eventKey,\n templateCode,\n levels: data.levels || [],\n audienceRoles: data.audienceRoles || [],\n channels: ['in_app'],\n slaHours: Number(data.slaHours ?? 0),\n scanLookbackDays: Number(data.scanLookbackDays ?? 0),\n enabled: isCreate ? true : editing.enabled !== false,\n });\n message.success('已保存');\n setEditing(null);\n await reload();\n } catch (e) {\n message.error(e instanceof Error ? e.message : String(e));\n return false;\n }\n },\n }),\n [canCreate, canUpdate, editing, formData, isCreate, reload, savePushRule],\n );\n\n const columns = useMemo(\n () => [\n { title: '名称', dataIndex: 'label', key: 'label', ellipsis: true },\n {\n title: '事件',\n dataIndex: 'eventKey',\n key: 'eventKey',\n render: (v: string) => catalog.find((c) => c.eventKey === v)?.label || v || '—',\n },\n { title: '关联模板', dataIndex: 'templateCode', key: 'templateCode', width: 140 },\n {\n title: '级别',\n dataIndex: 'levels',\n key: 'levels',\n width: 100,\n render: (lv: string[] | undefined) => (lv || []).join(',') || '—',\n },\n {\n title: '启用',\n dataIndex: 'enabled',\n key: 'enabled',\n width: 80,\n render: (_: unknown, r: PushRuleAdminItem) => (\n <Switch\n size=\"small\"\n checked={r.enabled !== false}\n disabled={!canUpdate || !setPushRuleEnabled}\n onChange={(checked) => {\n void (async () => {\n try {\n await setPushRuleEnabled?.(r, checked);\n message.success(checked ? '已启用' : '已停用');\n await reload();\n } catch (e) {\n message.error(e instanceof Error ? e.message : String(e));\n }\n })();\n }}\n />\n ),\n },\n {\n title: '操作',\n key: 'actions',\n width: 140,\n render: (_: unknown, r: PushRuleAdminItem) => (\n <Space size={4}>\n <Button\n type=\"link\"\n size=\"small\"\n disabled={!canUpdate}\n onClick={() => {\n setIsCreate(false);\n setEditing({ ...r });\n }}\n >\n 编辑\n </Button>\n <Button\n type=\"link\"\n size=\"small\"\n danger\n disabled={!canDelete || !deletePushRule}\n onClick={() => {\n void (async () => {\n try {\n await deletePushRule?.(r);\n message.success('已删除');\n await reload();\n } catch (e) {\n message.error(e instanceof Error ? e.message : String(e));\n }\n })();\n }}\n >\n 删除\n </Button>\n </Space>\n ),\n },\n ],\n [canUpdate, canDelete, catalog, deletePushRule, reload, setPushRuleEnabled],\n );\n\n return (\n <div className={styles.pane}>\n {error ? <Alert type=\"error\" showIcon message={error} style={{ marginBottom: 12 }} /> : null}\n <PageSpin spinning={loading}>\n {!canRead ? (\n <Empty description=\"无推送规则读取权限\" />\n ) : rows.length === 0 && !loading ? (\n <Empty description=\"暂无推送规则\" />\n ) : (\n <Table<PushRuleAdminItem>\n rowKey={(r) => r.id || r.code || `${r.eventKey}-${r.templateCode}`}\n tableName=\"msg-center-push-rules\"\n columnConfigEnabled={false}\n columnResizeEnabled={false}\n columns={columns}\n dataSource={rows}\n pagination={false}\n size=\"small\"\n />\n )}\n </PageSpin>\n <FormModal\n title={isCreate ? '新建推送规则' : '编辑推送规则'}\n open={Boolean(editing)}\n onCancel={() => setEditing(null)}\n width={560}\n okText=\"保存\"\n autoClose={false}\n formProps={formProps}\n >\n {/* 事件用 antd Select:FormInfo Select + onChange 在 CI tsc 下与 kne 重载冲突 */}\n <div style={{ marginBottom: 16 }}>\n <div style={{ marginBottom: 8 }}>事件</div>\n <AntSelect\n style={{ width: '100%' }}\n disabled={!canUpdate}\n value={editing?.eventKey || undefined}\n options={catalog.map((c) => ({\n value: c.eventKey,\n label: c.label || c.eventKey,\n }))}\n onChange={(ek) => {\n const next = String(ek || '');\n const opts = templatesForEvent(next);\n setEditing((prev) =>\n prev\n ? {\n ...prev,\n eventKey: next,\n templateCode: resolveTemplateCodeAfterEventChange(prev.templateCode, opts),\n label: catalog.find((c) => c.eventKey === next)?.label || prev.label,\n }\n : prev,\n );\n }}\n showSearch\n optionFilterProp=\"label\"\n />\n </div>\n <FormInfo\n column={1}\n list={[\n <FiInput\n key=\"label\"\n name=\"label\"\n label=\"名称\"\n rule=\"REQ\"\n disabled={!formWritable(isCreate)}\n />,\n <FiSelect\n key={`tpl-${editing?.eventKey || ''}`}\n name=\"templateCode\"\n label=\"关联模板\"\n rule=\"REQ\"\n disabled={!canUpdate}\n options={templatesForEvent(editing?.eventKey)}\n showSearch\n optionFilterProp=\"label\"\n />,\n <FiSelect\n key=\"levels\"\n name=\"levels\"\n label=\"级别\"\n mode=\"multiple\"\n disabled={!canUpdate}\n options={['L1', 'L2', 'L3'].map((x) => ({ value: x, label: x }))}\n />,\n <FiSelect\n key=\"audienceRoles\"\n name=\"audienceRoles\"\n label=\"受众角色\"\n mode=\"multiple\"\n disabled={!canUpdate}\n options={roleOptions.map((r) => ({ value: r.code, label: r.name || r.code }))}\n optionFilterProp=\"label\"\n />,\n <FiInputNumber\n key=\"slaHours\"\n name=\"slaHours\"\n label=\"SLA(小时)\"\n disabled={!canUpdate}\n min={0}\n style={{ width: '100%' }}\n />,\n <FiInputNumber\n key=\"scanLookbackDays\"\n name=\"scanLookbackDays\"\n label=\"回看(天)\"\n disabled={!canUpdate}\n min={0}\n style={{ width: '100%' }}\n />,\n ]}\n />\n </FormModal>\n </div>\n );\n};\n\nexport default PushRulesPanel;\n"],"names":["FiSelect","Select","FiInput","Input","FiInputNumber","InputNumber","PushRulesPanel","crud","catalog","templates","roleOptions","fetchPushRules","savePushRule","setPushRuleEnabled","deletePushRule","createNonce","canCreate","canUpdate","canDelete","canRead","formWritable","creating","rows","setRows","useState","loading","setLoading","error","setError","editing","setEditing","isCreate","setIsCreate","reload","useCallback","list","useEffect","first","tplForEvent","templatesForEvent","eventKey","t","o","formData","useMemo","formProps","data","message","templateCode","e","columns","v","_a","c","lv","_","r","jsx","Switch","checked","jsxs","Space","Button","styles","Alert","PageSpin","Empty","Table","FormModal","AntSelect","ek","next","opts","prev","resolveTemplateCodeAfterEventChange","FormInfo","x"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { default as React } from 'react';
2
- import { MessageTemplateVariableAdmin } from '../types';
2
+ import { MessageCrudFlags, MessageTemplateVariableAdmin } from '../types';
3
3
  export type VariablesPanelProps = {
4
- canWrite: boolean;
4
+ crud: MessageCrudFlags;
5
5
  fetchVariables: () => Promise<MessageTemplateVariableAdmin[]>;
6
6
  saveVariable: (item: MessageTemplateVariableAdmin) => Promise<void>;
7
7
  deleteVariable?: (item: MessageTemplateVariableAdmin) => Promise<void>;