@hkyhy/marsun-components-core 0.1.139 → 0.1.141
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.
- package/README.md +3 -0
- package/dist/components/Table/Table.d.ts +2 -2
- package/dist/components/Table/Table.js +75 -72
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/columnConfigUtils.d.ts +8 -0
- package/dist/components/Table/columnConfigUtils.js +130 -113
- package/dist/components/Table/columnConfigUtils.js.map +1 -1
- package/dist/components/Table/index.d.ts +1 -1
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.js +18 -17
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.js.map +1 -1
- package/dist/components/Tools/ActionTracking/CreateAction/types.d.ts +2 -0
- package/dist/components/Tools/Inbox/InboxBell/InboxBell.js +69 -63
- package/dist/components/Tools/Inbox/InboxBell/InboxBell.js.map +1 -1
- package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js +76 -70
- package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js.map +1 -1
- package/dist/index.js +478 -477
- package/dist/marsun-components-core.css +1 -1
- package/dist/styles/global.css +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as Y } from "react/jsx-runtime";
|
|
2
2
|
import { useState as Mt, useRef as x, useCallback as z, useMemo as bt } from "react";
|
|
3
|
-
import { message as
|
|
3
|
+
import { message as U } from "antd";
|
|
4
4
|
import wt from "classnames";
|
|
5
5
|
import Bt from "dayjs";
|
|
6
|
-
import
|
|
7
|
-
import { addDaysYmd as
|
|
6
|
+
import Nt from "./CreateActionForm.js";
|
|
7
|
+
import { addDaysYmd as Ut, validateCreateActionPersons as jt, createActionPersonWarnMessage as Lt, normalizeDueDateYmd as Pt, personDisplayName as C } from "./submitHelpers.js";
|
|
8
8
|
import Rt from "./CreateActionModal.module.scss.js";
|
|
9
9
|
import _t from "../../../FormInfo/FormModal.js";
|
|
10
10
|
const Ct = ({
|
|
@@ -30,12 +30,12 @@ const Ct = ({
|
|
|
30
30
|
onSubmit: st,
|
|
31
31
|
onAllocatorConfirmed: I,
|
|
32
32
|
defaultStatus: M = "approved",
|
|
33
|
-
defaultDueDays:
|
|
33
|
+
defaultDueDays: j = 7,
|
|
34
34
|
width: et = 560,
|
|
35
35
|
zIndex: nt = 1300
|
|
36
36
|
}) => {
|
|
37
37
|
var _, E, F;
|
|
38
|
-
const [ct,
|
|
38
|
+
const [ct, L] = Mt(!1), P = x([]), R = x([]), at = z((o) => {
|
|
39
39
|
P.current = o;
|
|
40
40
|
}, []), it = z((o) => {
|
|
41
41
|
R.current = o;
|
|
@@ -51,7 +51,7 @@ const Ct = ({
|
|
|
51
51
|
status: M,
|
|
52
52
|
allocatorUserId: "",
|
|
53
53
|
assigneeUserId: "",
|
|
54
|
-
dueDate: Bt(
|
|
54
|
+
dueDate: Bt(Ut(j)),
|
|
55
55
|
factory: e || s ? "" : m,
|
|
56
56
|
variety: e || s ? "" : y,
|
|
57
57
|
metric: e || s ? "" : S,
|
|
@@ -69,21 +69,21 @@ const Ct = ({
|
|
|
69
69
|
t == null ? void 0 : t.dimension,
|
|
70
70
|
d,
|
|
71
71
|
M,
|
|
72
|
-
|
|
72
|
+
j
|
|
73
73
|
]), gt = async (o) => {
|
|
74
74
|
var k, O, T;
|
|
75
|
-
const c =
|
|
75
|
+
const c = jt(
|
|
76
76
|
String(o.allocatorUserId || ""),
|
|
77
77
|
String(o.assigneeUserId || ""),
|
|
78
78
|
R.current,
|
|
79
79
|
P.current
|
|
80
80
|
);
|
|
81
81
|
if (!c.ok)
|
|
82
|
-
throw
|
|
82
|
+
throw U.warning(Lt(c.code)), new Error(c.code);
|
|
83
83
|
const { allocator: v, assignee: g } = c, r = v.value, h = g.value;
|
|
84
|
-
I == null || I(r),
|
|
84
|
+
I == null || I(r), L(!0);
|
|
85
85
|
try {
|
|
86
|
-
const n = Pt(o.dueDate), a = C(g, h), ut = C(v, r), b = e ? m : s ? "" : String(o.factory || "").trim(), A = e || s ? "" : String(o.variety || "").trim(), w = e || s ? "" : String(o.metric || "").trim(), H = String(o.title || "").trim(), yt = String(o.description || "").trim(), B = String(o.dimension || "").trim() || String((t == null ? void 0 : t.dimension) || "").trim() || ((k = d[0]) == null ? void 0 : k.value) || "", St = ((T = (O = d.find((
|
|
86
|
+
const n = Pt(o.dueDate), a = C(g, h), ut = C(v, r), b = e ? m : s ? "" : String(o.factory || "").trim(), A = e || s ? "" : String(o.variety || "").trim(), w = e || s ? "" : String(o.metric || "").trim(), H = String(o.title || "").trim(), yt = String(o.description || "").trim(), B = String(o.dimension || "").trim() || String((t == null ? void 0 : t.dimension) || "").trim() || ((k = d[0]) == null ? void 0 : k.value) || "", St = ((T = (O = d.find((N) => N.value === B)) == null ? void 0 : O.label) == null ? void 0 : T.trim()) || B, ht = e ? (i || []).map((N) => N.value).filter(Boolean).join(" · ") : s ? [H, St].filter(Boolean).join(" · ") : [b, A, w].filter(Boolean).join(" · "), kt = {
|
|
87
87
|
title: H,
|
|
88
88
|
description: yt || void 0,
|
|
89
89
|
dimension: B,
|
|
@@ -97,17 +97,18 @@ const Ct = ({
|
|
|
97
97
|
factory: b,
|
|
98
98
|
variety: A,
|
|
99
99
|
metric: w,
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
// form/locked 的 factory 即厂码(下拉 value);勿把码误写入 factoryName
|
|
101
|
+
factoryCode: s ? void 0 : b || (t == null ? void 0 : t.factoryCode) || void 0,
|
|
102
|
+
factoryName: s ? void 0 : (t == null ? void 0 : t.factoryName) || void 0,
|
|
102
103
|
verifyMetric: w || void 0,
|
|
103
104
|
eventLabel: ht
|
|
104
105
|
}, It = await st(kt);
|
|
105
|
-
|
|
106
|
+
U.success(u ? "已下发任务" : "已创建跟踪任务"), $(It);
|
|
106
107
|
} catch (n) {
|
|
107
108
|
const a = n instanceof Error ? n.message : "";
|
|
108
|
-
throw a === "missing_allocator" || a === "invalid_allocator" || a === "missing_assignee" || a === "invalid_assignee" ||
|
|
109
|
+
throw a === "missing_allocator" || a === "invalid_allocator" || a === "missing_assignee" || a === "invalid_assignee" || U.error(n instanceof Error ? n.message : "创建失败"), n;
|
|
109
110
|
} finally {
|
|
110
|
-
|
|
111
|
+
L(!1);
|
|
111
112
|
}
|
|
112
113
|
};
|
|
113
114
|
return /* @__PURE__ */ Y(
|
|
@@ -128,7 +129,7 @@ const Ct = ({
|
|
|
128
129
|
onSubmit: gt
|
|
129
130
|
},
|
|
130
131
|
children: /* @__PURE__ */ Y(
|
|
131
|
-
|
|
132
|
+
Nt,
|
|
132
133
|
{
|
|
133
134
|
onAssigneeOptionsReady: at,
|
|
134
135
|
onAllocatorOptionsReady: it,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateActionModal.js","sources":["../../../../../src/components/Tools/ActionTracking/CreateAction/CreateActionModal.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { FormModal } from '../../../FormInfo';\nimport { message } from 'antd';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport CreateActionForm from './CreateActionForm';\nimport {\n addDaysYmd,\n createActionPersonWarnMessage,\n normalizeDueDateYmd,\n personDisplayName,\n validateCreateActionPersons,\n} from './submitHelpers';\nimport type {\n ActionPersonOption,\n CreateActionDimensionOption,\n CreateActionLoaders,\n CreateActionPrefill,\n CreateActionScopeMode,\n CreateActionSubmitPayload,\n LockedContextField,\n} from './types';\nimport styles from './CreateActionModal.module.scss';\n\nexport type CreateActionModalProps = {\n open: boolean;\n onClose: () => void;\n onCreated: (actionId?: string) => void;\n variant?: 'create' | 'dispatch';\n prefill?: CreateActionPrefill;\n lockPrefill?: boolean;\n lockedContext?: LockedContextField[];\n /**\n * 业务上下文字段模式。有 lockedContext 时强制 locked。\n * 默认 form(S3);EAM `/actions` 主动新建传 none。\n */\n scopeMode?: CreateActionScopeMode;\n /** @deprecated 有 lockedContext 时忽略 */\n varietyLabel?: string;\n /** F4:任务标题 placeholder */\n titlePlaceholder?: string;\n /** F4:任务描述 placeholder */\n descriptionPlaceholder?: string;\n /** F4:关联指标 placeholder */\n metricPlaceholder?: string;\n /** scopeMode=none 时短提示(App 注入) */\n noneScopeHint?: string;\n /** 弹窗标题;默认按 variant */\n title?: string;\n /** 主按钮文案;默认 下发/创建 */\n okText?: string;\n dimensionOptions: CreateActionDimensionOption[];\n loaders: CreateActionLoaders;\n emptyAssigneeHint?: string;\n emptyAllocatorHint?: string;\n /**\n * App 注入提交(对齐 EAM:校验通过后写 API / domainSubmit)。\n * 返回新建 actionId(可选)。\n */\n onSubmit: (payload: CreateActionSubmitPayload) => Promise<string | undefined>;\n /** 分配人确认后回调(App 可写 localStorage) */\n onAllocatorConfirmed?: (allocatorUserId: string) => void;\n defaultStatus?: string;\n defaultDueDays?: number;\n width?: number;\n zIndex?: number;\n};\n\n/**\n * 主动新建 / 预警下发任务 · FormModal + FormInfo。\n *\n * ## App 注入契约(W1)\n * - `loaders`:人员级联 + 分厂选项(禁 DEMO / 禁 core 直连业务 API;scopeMode=none 可不传分厂/品种)\n * - `dimensionOptions`:任务类型码表(展示名取自 App 数据)\n * - `scopeMode`:form(默认)| locked(有 lockedContext 强制)| none(EAM 主动新建)\n * - `titlePlaceholder` / `metricPlaceholder`:F4,由 App 注入业务文案\n * - `onSubmit`:对齐 EAM 提交面;actor / analysisId / eventSource / REST 由 App 补齐\n * - EP 门禁:由 App 决定是否打开本 Modal(禁 DEMO 恒真)\n */\nconst CreateActionModal: React.FC<CreateActionModalProps> = ({\n open,\n onClose,\n onCreated,\n variant = 'create',\n prefill,\n lockPrefill = false,\n lockedContext,\n scopeMode: scopeModeProp = 'form',\n varietyLabel,\n titlePlaceholder,\n descriptionPlaceholder,\n metricPlaceholder,\n noneScopeHint,\n title: titleProp,\n okText: okTextProp,\n dimensionOptions,\n loaders,\n emptyAssigneeHint,\n emptyAllocatorHint,\n onSubmit,\n onAllocatorConfirmed,\n defaultStatus = 'approved',\n defaultDueDays = 7,\n width = 560,\n zIndex = 1300,\n}) => {\n const [saving, setSaving] = useState(false);\n const assigneeOptsRef = useRef<ActionPersonOption[]>([]);\n const allocatorOptsRef = useRef<ActionPersonOption[]>([]);\n const onAssigneeOptionsReady = useCallback((opts: ActionPersonOption[]) => {\n assigneeOptsRef.current = opts;\n }, []);\n const onAllocatorOptionsReady = useCallback((opts: ActionPersonOption[]) => {\n allocatorOptsRef.current = opts;\n }, []);\n\n const isDispatch = variant === 'dispatch';\n const useLocked = Boolean(lockedContext && lockedContext.length > 0);\n const useNoneScope = !useLocked && scopeModeProp === 'none';\n const scopeFactory = prefill?.factory?.trim() || '';\n const scopeVariety = prefill?.variety?.trim() || '';\n const scopeMetric = prefill?.metric?.trim() || '';\n const lockScope =\n !useLocked &&\n !useNoneScope &&\n (isDispatch || lockPrefill) &&\n Boolean(scopeFactory || scopeVariety || scopeMetric);\n\n const modalTitle = titleProp || (isDispatch ? '下发任务' : '新建跟踪任务');\n const okText = okTextProp || (isDispatch ? '下发' : '创建');\n\n const formInitialData = useMemo(() => {\n const lockedFields: Record<string, string> = {};\n (lockedContext || []).forEach((field, idx) => {\n lockedFields[`lockedContext_${idx}`] = field.value;\n });\n return {\n title: prefill?.title?.trim() || '',\n description: prefill?.description?.trim() || '',\n dimension: prefill?.dimension?.trim() || dimensionOptions[0]?.value || '',\n status: defaultStatus,\n allocatorUserId: '',\n assigneeUserId: '',\n dueDate: dayjs(addDaysYmd(defaultDueDays)),\n factory: useLocked || useNoneScope ? '' : scopeFactory,\n variety: useLocked || useNoneScope ? '' : scopeVariety,\n metric: useLocked || useNoneScope ? '' : scopeMetric,\n ...lockedFields,\n };\n }, [\n lockedContext,\n scopeFactory,\n scopeVariety,\n scopeMetric,\n useLocked,\n useNoneScope,\n prefill?.title,\n prefill?.description,\n prefill?.dimension,\n dimensionOptions,\n defaultStatus,\n defaultDueDays,\n ]);\n\n const handleSubmit = async (formData: Record<string, unknown>) => {\n const checked = validateCreateActionPersons(\n String(formData.allocatorUserId || ''),\n String(formData.assigneeUserId || ''),\n allocatorOptsRef.current,\n assigneeOptsRef.current,\n );\n if (!checked.ok) {\n message.warning(createActionPersonWarnMessage(checked.code));\n throw new Error(checked.code);\n }\n\n const { allocator: allocatorOpt, assignee: fromOptions } = checked;\n const allocatorUserId = allocatorOpt.value;\n const assigneeUserId = fromOptions.value;\n onAllocatorConfirmed?.(allocatorUserId);\n\n setSaving(true);\n try {\n const due = normalizeDueDateYmd(formData.dueDate);\n const assignee = personDisplayName(fromOptions, assigneeUserId);\n const allocator = personDisplayName(allocatorOpt, allocatorUserId);\n const factory = useLocked\n ? scopeFactory\n : useNoneScope\n ? ''\n : String(formData.factory || '').trim();\n const variety = useLocked || useNoneScope ? '' : String(formData.variety || '').trim();\n const metric = useLocked || useNoneScope ? '' : String(formData.metric || '').trim();\n const title = String(formData.title || '').trim();\n const description = String(formData.description || '').trim();\n const dimension =\n String(formData.dimension || '').trim() ||\n String(prefill?.dimension || '').trim() ||\n dimensionOptions[0]?.value ||\n '';\n const dimLabel =\n dimensionOptions.find((o) => o.value === dimension)?.label?.trim() || dimension;\n const eventLabel = useLocked\n ? (lockedContext || [])\n .map((f) => f.value)\n .filter(Boolean)\n .join(' · ')\n : useNoneScope\n ? [title, dimLabel].filter(Boolean).join(' · ')\n : [factory, variety, metric].filter(Boolean).join(' · ');\n\n const payload: CreateActionSubmitPayload = {\n title,\n description: description || undefined,\n dimension,\n status: String(formData.status || defaultStatus),\n assignee,\n assigneeUserId,\n allocator,\n allocatorUserId,\n owner: assignee,\n dueDate: due || undefined,\n factory,\n variety,\n metric,\n factoryCode: useNoneScope ? undefined : prefill?.factoryCode || undefined,\n factoryName: factory || undefined,\n verifyMetric: metric || undefined,\n eventLabel,\n };\n\n const actionId = await onSubmit(payload);\n message.success(isDispatch ? '已下发任务' : '已创建跟踪任务');\n onCreated(actionId);\n } catch (err) {\n const code = err instanceof Error ? err.message : '';\n if (\n code === 'missing_allocator' ||\n code === 'invalid_allocator' ||\n code === 'missing_assignee' ||\n code === 'invalid_assignee'\n ) {\n throw err;\n }\n message.error(err instanceof Error ? err.message : '创建失败');\n throw err;\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <FormModal\n className={classNames('create-action-modal', styles['create-action-modal'])}\n title={modalTitle}\n open={open}\n onCancel={onClose}\n autoClose\n okText={okText}\n width={width}\n zIndex={zIndex}\n destroyOnHidden\n okButtonProps={{ loading: saving }}\n formProps={{\n data: formInitialData,\n onSubmit: handleSubmit,\n }}\n >\n <CreateActionForm\n onAssigneeOptionsReady={onAssigneeOptionsReady}\n onAllocatorOptionsReady={onAllocatorOptionsReady}\n lockedContext={useLocked ? lockedContext : undefined}\n scopeMode={useLocked ? 'locked' : useNoneScope ? 'none' : 'form'}\n varietyLabel={useLocked || useNoneScope ? undefined : varietyLabel}\n titlePlaceholder={titlePlaceholder}\n descriptionPlaceholder={descriptionPlaceholder}\n metricPlaceholder={useNoneScope ? undefined : metricPlaceholder}\n noneScopeHint={useNoneScope ? noneScopeHint : undefined}\n dimensionOptions={dimensionOptions}\n loaders={loaders}\n emptyAssigneeHint={emptyAssigneeHint}\n emptyAllocatorHint={emptyAllocatorHint}\n scopeLock={\n lockScope\n ? {\n factory: scopeFactory || undefined,\n variety: scopeVariety || undefined,\n metric: scopeMetric || undefined,\n }\n : undefined\n }\n />\n </FormModal>\n );\n};\n\nexport default CreateActionModal;\n"],"names":["CreateActionModal","open","onClose","onCreated","variant","prefill","lockPrefill","lockedContext","scopeModeProp","varietyLabel","titlePlaceholder","descriptionPlaceholder","metricPlaceholder","noneScopeHint","titleProp","okTextProp","dimensionOptions","loaders","emptyAssigneeHint","emptyAllocatorHint","onSubmit","onAllocatorConfirmed","defaultStatus","defaultDueDays","width","zIndex","saving","setSaving","useState","assigneeOptsRef","useRef","allocatorOptsRef","onAssigneeOptionsReady","useCallback","opts","onAllocatorOptionsReady","isDispatch","useLocked","useNoneScope","scopeFactory","_a","scopeVariety","_b","scopeMetric","_c","lockScope","modalTitle","okText","formInitialData","useMemo","lockedFields","field","idx","_d","dayjs","addDaysYmd","handleSubmit","formData","checked","validateCreateActionPersons","message","createActionPersonWarnMessage","allocatorOpt","fromOptions","allocatorUserId","assigneeUserId","due","normalizeDueDateYmd","assignee","personDisplayName","allocator","factory","variety","metric","title","description","dimension","dimLabel","o","eventLabel","f","payload","actionId","err","code","jsx","FormModal","classNames","styles","CreateActionForm"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CreateActionModal.js","sources":["../../../../../src/components/Tools/ActionTracking/CreateAction/CreateActionModal.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { FormModal } from '../../../FormInfo';\nimport { message } from 'antd';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport CreateActionForm from './CreateActionForm';\nimport {\n addDaysYmd,\n createActionPersonWarnMessage,\n normalizeDueDateYmd,\n personDisplayName,\n validateCreateActionPersons,\n} from './submitHelpers';\nimport type {\n ActionPersonOption,\n CreateActionDimensionOption,\n CreateActionLoaders,\n CreateActionPrefill,\n CreateActionScopeMode,\n CreateActionSubmitPayload,\n LockedContextField,\n} from './types';\nimport styles from './CreateActionModal.module.scss';\n\nexport type CreateActionModalProps = {\n open: boolean;\n onClose: () => void;\n onCreated: (actionId?: string) => void;\n variant?: 'create' | 'dispatch';\n prefill?: CreateActionPrefill;\n lockPrefill?: boolean;\n lockedContext?: LockedContextField[];\n /**\n * 业务上下文字段模式。有 lockedContext 时强制 locked。\n * 默认 form(S3);EAM `/actions` 主动新建传 none。\n */\n scopeMode?: CreateActionScopeMode;\n /** @deprecated 有 lockedContext 时忽略 */\n varietyLabel?: string;\n /** F4:任务标题 placeholder */\n titlePlaceholder?: string;\n /** F4:任务描述 placeholder */\n descriptionPlaceholder?: string;\n /** F4:关联指标 placeholder */\n metricPlaceholder?: string;\n /** scopeMode=none 时短提示(App 注入) */\n noneScopeHint?: string;\n /** 弹窗标题;默认按 variant */\n title?: string;\n /** 主按钮文案;默认 下发/创建 */\n okText?: string;\n dimensionOptions: CreateActionDimensionOption[];\n loaders: CreateActionLoaders;\n emptyAssigneeHint?: string;\n emptyAllocatorHint?: string;\n /**\n * App 注入提交(对齐 EAM:校验通过后写 API / domainSubmit)。\n * 返回新建 actionId(可选)。\n */\n onSubmit: (payload: CreateActionSubmitPayload) => Promise<string | undefined>;\n /** 分配人确认后回调(App 可写 localStorage) */\n onAllocatorConfirmed?: (allocatorUserId: string) => void;\n defaultStatus?: string;\n defaultDueDays?: number;\n width?: number;\n zIndex?: number;\n};\n\n/**\n * 主动新建 / 预警下发任务 · FormModal + FormInfo。\n *\n * ## App 注入契约(W1)\n * - `loaders`:人员级联 + 分厂选项(禁 DEMO / 禁 core 直连业务 API;scopeMode=none 可不传分厂/品种)\n * - `dimensionOptions`:任务类型码表(展示名取自 App 数据)\n * - `scopeMode`:form(默认)| locked(有 lockedContext 强制)| none(EAM 主动新建)\n * - `titlePlaceholder` / `metricPlaceholder`:F4,由 App 注入业务文案\n * - `onSubmit`:对齐 EAM 提交面;actor / analysisId / eventSource / REST 由 App 补齐\n * - EP 门禁:由 App 决定是否打开本 Modal(禁 DEMO 恒真)\n */\nconst CreateActionModal: React.FC<CreateActionModalProps> = ({\n open,\n onClose,\n onCreated,\n variant = 'create',\n prefill,\n lockPrefill = false,\n lockedContext,\n scopeMode: scopeModeProp = 'form',\n varietyLabel,\n titlePlaceholder,\n descriptionPlaceholder,\n metricPlaceholder,\n noneScopeHint,\n title: titleProp,\n okText: okTextProp,\n dimensionOptions,\n loaders,\n emptyAssigneeHint,\n emptyAllocatorHint,\n onSubmit,\n onAllocatorConfirmed,\n defaultStatus = 'approved',\n defaultDueDays = 7,\n width = 560,\n zIndex = 1300,\n}) => {\n const [saving, setSaving] = useState(false);\n const assigneeOptsRef = useRef<ActionPersonOption[]>([]);\n const allocatorOptsRef = useRef<ActionPersonOption[]>([]);\n const onAssigneeOptionsReady = useCallback((opts: ActionPersonOption[]) => {\n assigneeOptsRef.current = opts;\n }, []);\n const onAllocatorOptionsReady = useCallback((opts: ActionPersonOption[]) => {\n allocatorOptsRef.current = opts;\n }, []);\n\n const isDispatch = variant === 'dispatch';\n const useLocked = Boolean(lockedContext && lockedContext.length > 0);\n const useNoneScope = !useLocked && scopeModeProp === 'none';\n const scopeFactory = prefill?.factory?.trim() || '';\n const scopeVariety = prefill?.variety?.trim() || '';\n const scopeMetric = prefill?.metric?.trim() || '';\n const lockScope =\n !useLocked &&\n !useNoneScope &&\n (isDispatch || lockPrefill) &&\n Boolean(scopeFactory || scopeVariety || scopeMetric);\n\n const modalTitle = titleProp || (isDispatch ? '下发任务' : '新建跟踪任务');\n const okText = okTextProp || (isDispatch ? '下发' : '创建');\n\n const formInitialData = useMemo(() => {\n const lockedFields: Record<string, string> = {};\n (lockedContext || []).forEach((field, idx) => {\n lockedFields[`lockedContext_${idx}`] = field.value;\n });\n return {\n title: prefill?.title?.trim() || '',\n description: prefill?.description?.trim() || '',\n dimension: prefill?.dimension?.trim() || dimensionOptions[0]?.value || '',\n status: defaultStatus,\n allocatorUserId: '',\n assigneeUserId: '',\n dueDate: dayjs(addDaysYmd(defaultDueDays)),\n factory: useLocked || useNoneScope ? '' : scopeFactory,\n variety: useLocked || useNoneScope ? '' : scopeVariety,\n metric: useLocked || useNoneScope ? '' : scopeMetric,\n ...lockedFields,\n };\n }, [\n lockedContext,\n scopeFactory,\n scopeVariety,\n scopeMetric,\n useLocked,\n useNoneScope,\n prefill?.title,\n prefill?.description,\n prefill?.dimension,\n dimensionOptions,\n defaultStatus,\n defaultDueDays,\n ]);\n\n const handleSubmit = async (formData: Record<string, unknown>) => {\n const checked = validateCreateActionPersons(\n String(formData.allocatorUserId || ''),\n String(formData.assigneeUserId || ''),\n allocatorOptsRef.current,\n assigneeOptsRef.current,\n );\n if (!checked.ok) {\n message.warning(createActionPersonWarnMessage(checked.code));\n throw new Error(checked.code);\n }\n\n const { allocator: allocatorOpt, assignee: fromOptions } = checked;\n const allocatorUserId = allocatorOpt.value;\n const assigneeUserId = fromOptions.value;\n onAllocatorConfirmed?.(allocatorUserId);\n\n setSaving(true);\n try {\n const due = normalizeDueDateYmd(formData.dueDate);\n const assignee = personDisplayName(fromOptions, assigneeUserId);\n const allocator = personDisplayName(allocatorOpt, allocatorUserId);\n const factory = useLocked\n ? scopeFactory\n : useNoneScope\n ? ''\n : String(formData.factory || '').trim();\n const variety = useLocked || useNoneScope ? '' : String(formData.variety || '').trim();\n const metric = useLocked || useNoneScope ? '' : String(formData.metric || '').trim();\n const title = String(formData.title || '').trim();\n const description = String(formData.description || '').trim();\n const dimension =\n String(formData.dimension || '').trim() ||\n String(prefill?.dimension || '').trim() ||\n dimensionOptions[0]?.value ||\n '';\n const dimLabel =\n dimensionOptions.find((o) => o.value === dimension)?.label?.trim() || dimension;\n const eventLabel = useLocked\n ? (lockedContext || [])\n .map((f) => f.value)\n .filter(Boolean)\n .join(' · ')\n : useNoneScope\n ? [title, dimLabel].filter(Boolean).join(' · ')\n : [factory, variety, metric].filter(Boolean).join(' · ');\n\n const payload: CreateActionSubmitPayload = {\n title,\n description: description || undefined,\n dimension,\n status: String(formData.status || defaultStatus),\n assignee,\n assigneeUserId,\n allocator,\n allocatorUserId,\n owner: assignee,\n dueDate: due || undefined,\n factory,\n variety,\n metric,\n // form/locked 的 factory 即厂码(下拉 value);勿把码误写入 factoryName\n factoryCode: useNoneScope ? undefined : factory || prefill?.factoryCode || undefined,\n factoryName: useNoneScope ? undefined : prefill?.factoryName || undefined,\n verifyMetric: metric || undefined,\n eventLabel,\n };\n\n const actionId = await onSubmit(payload);\n message.success(isDispatch ? '已下发任务' : '已创建跟踪任务');\n onCreated(actionId);\n } catch (err) {\n const code = err instanceof Error ? err.message : '';\n if (\n code === 'missing_allocator' ||\n code === 'invalid_allocator' ||\n code === 'missing_assignee' ||\n code === 'invalid_assignee'\n ) {\n throw err;\n }\n message.error(err instanceof Error ? err.message : '创建失败');\n throw err;\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <FormModal\n className={classNames('create-action-modal', styles['create-action-modal'])}\n title={modalTitle}\n open={open}\n onCancel={onClose}\n autoClose\n okText={okText}\n width={width}\n zIndex={zIndex}\n destroyOnHidden\n okButtonProps={{ loading: saving }}\n formProps={{\n data: formInitialData,\n onSubmit: handleSubmit,\n }}\n >\n <CreateActionForm\n onAssigneeOptionsReady={onAssigneeOptionsReady}\n onAllocatorOptionsReady={onAllocatorOptionsReady}\n lockedContext={useLocked ? lockedContext : undefined}\n scopeMode={useLocked ? 'locked' : useNoneScope ? 'none' : 'form'}\n varietyLabel={useLocked || useNoneScope ? undefined : varietyLabel}\n titlePlaceholder={titlePlaceholder}\n descriptionPlaceholder={descriptionPlaceholder}\n metricPlaceholder={useNoneScope ? undefined : metricPlaceholder}\n noneScopeHint={useNoneScope ? noneScopeHint : undefined}\n dimensionOptions={dimensionOptions}\n loaders={loaders}\n emptyAssigneeHint={emptyAssigneeHint}\n emptyAllocatorHint={emptyAllocatorHint}\n scopeLock={\n lockScope\n ? {\n factory: scopeFactory || undefined,\n variety: scopeVariety || undefined,\n metric: scopeMetric || undefined,\n }\n : undefined\n }\n />\n </FormModal>\n );\n};\n\nexport default CreateActionModal;\n"],"names":["CreateActionModal","open","onClose","onCreated","variant","prefill","lockPrefill","lockedContext","scopeModeProp","varietyLabel","titlePlaceholder","descriptionPlaceholder","metricPlaceholder","noneScopeHint","titleProp","okTextProp","dimensionOptions","loaders","emptyAssigneeHint","emptyAllocatorHint","onSubmit","onAllocatorConfirmed","defaultStatus","defaultDueDays","width","zIndex","saving","setSaving","useState","assigneeOptsRef","useRef","allocatorOptsRef","onAssigneeOptionsReady","useCallback","opts","onAllocatorOptionsReady","isDispatch","useLocked","useNoneScope","scopeFactory","_a","scopeVariety","_b","scopeMetric","_c","lockScope","modalTitle","okText","formInitialData","useMemo","lockedFields","field","idx","_d","dayjs","addDaysYmd","handleSubmit","formData","checked","validateCreateActionPersons","message","createActionPersonWarnMessage","allocatorOpt","fromOptions","allocatorUserId","assigneeUserId","due","normalizeDueDateYmd","assignee","personDisplayName","allocator","factory","variety","metric","title","description","dimension","dimLabel","o","eventLabel","f","payload","actionId","err","code","jsx","FormModal","classNames","styles","CreateActionForm"],"mappings":"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"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { jsxs as d, jsx as a } from "react/jsx-runtime";
|
|
2
|
-
import { notification as Ue, Badge as Fe, Button as
|
|
2
|
+
import { notification as Ue, Badge as Fe, Button as D, Drawer as ze, Space as Ee, Checkbox as oe, message as $ } from "antd";
|
|
3
3
|
import R from "classnames";
|
|
4
|
-
import { forwardRef as Ge, useState as f, useRef as
|
|
4
|
+
import { forwardRef as Ge, useState as f, useRef as T, useMemo as Se, useCallback as N, useImperativeHandle as $e, useEffect as b } from "react";
|
|
5
5
|
import { createPortal as Ke } from "react-dom";
|
|
6
6
|
import { sanitizeInboxHtml as je } from "../sanitizeInboxHtml.js";
|
|
7
7
|
import { INBOX_BADGE_REFRESH_EVENT as Le } from "../requestInboxBadgeRefresh.js";
|
|
8
8
|
import { emphasizeQuoted as le } from "./emphasizeQuoted.js";
|
|
9
9
|
import { filterInboxActionsForHost as Ve, resolveInboxItemActions as We, isInboxButtonDriven as Qe } from "./inboxItemActions.js";
|
|
10
|
-
import { inboxSceneLabel as
|
|
10
|
+
import { inboxSceneLabel as Dt, isTerminalActionStatus as Mt, normalizeInboxActions as Ot, resolveInboxSceneKey as It } from "./inboxItemActions.js";
|
|
11
11
|
import { loadInboxToastPrefs as Xe, shouldToastForMessageType as Ye, saveInboxToastPrefs as Je } from "./toastPrefs.js";
|
|
12
12
|
import { DEFAULT_INBOX_TOAST_PREFS as Ut } from "./toastPrefs.js";
|
|
13
13
|
import r from "./style.module.scss.js";
|
|
14
14
|
import { Bell as qe } from "../../../Icons/Bell.js";
|
|
15
|
-
import se, { SEMANTIC_COLORS as
|
|
15
|
+
import se, { SEMANTIC_COLORS as M } from "../../../Tag/SemanticTag.js";
|
|
16
16
|
import Ze from "../../../StateBar/StateBar.js";
|
|
17
17
|
import et from "../../../SegmentedRadio/SegmentedRadio.js";
|
|
18
18
|
import tt from "../../../Layout/PageSpin/index.js";
|
|
@@ -34,13 +34,13 @@ function ke(u) {
|
|
|
34
34
|
}
|
|
35
35
|
function Be(u) {
|
|
36
36
|
const o = String(u || "").trim().toLowerCase();
|
|
37
|
-
return o === "alert" ?
|
|
37
|
+
return o === "alert" ? M.DANGER : o === "action" ? M.PRIMARY : o === "remind" ? M.WARNING : M.DEFAULT;
|
|
38
38
|
}
|
|
39
39
|
function dt(u) {
|
|
40
40
|
return [u.factory, u.variety, u.metric].map((o) => String(o || "").trim()).filter(Boolean).join(" · ");
|
|
41
41
|
}
|
|
42
42
|
function ut(u) {
|
|
43
|
-
return String(u || "").trim() ||
|
|
43
|
+
return String(u || "").trim() || M.DEFAULT;
|
|
44
44
|
}
|
|
45
45
|
function mt(u) {
|
|
46
46
|
try {
|
|
@@ -70,9 +70,9 @@ const Rt = Ge(function({
|
|
|
70
70
|
getAccessToken: V,
|
|
71
71
|
onItemAction: ce
|
|
72
72
|
}, Pe) {
|
|
73
|
-
const [W, x] = f(!1), [de, ue] = f(!1), [Q, me] = f(""), [I, H] = f([]), [S, U] = f(0), [fe, X] = f({}), [Y, Re] = f(""), [F, _e] = f("all"), [
|
|
74
|
-
he.current =
|
|
75
|
-
const ee =
|
|
73
|
+
const [W, x] = f(!1), [de, ue] = f(!1), [Q, me] = f(""), [I, H] = f([]), [S, U] = f(0), [fe, X] = f({}), [Y, Re] = f(""), [F, _e] = f("all"), [A, Ae] = f(() => Xe()), [De, pe] = f(!1), [J, ye] = f(!1), [p, q] = f(null), L = T(null), k = T(null), Z = T(null), y = T(null), ge = T(!1), he = T(A);
|
|
74
|
+
he.current = A;
|
|
75
|
+
const ee = T(1), te = T(!1), P = T(!1), z = Se(
|
|
76
76
|
() => ({
|
|
77
77
|
messageType: Y || void 0,
|
|
78
78
|
unreadOnly: F === "unread" || void 0,
|
|
@@ -103,8 +103,8 @@ const Rt = Ge(function({
|
|
|
103
103
|
...z
|
|
104
104
|
}), n = (t == null ? void 0 : t.pageData) || [], l = typeof (t == null ? void 0 : t.total) == "number" ? t.total : 0;
|
|
105
105
|
H((i) => {
|
|
106
|
-
const s = new Set(i.map((
|
|
107
|
-
return P.current = m.length > 0 && (l > 0 ?
|
|
106
|
+
const s = new Set(i.map((g) => g.id)), m = n.filter((g) => (g == null ? void 0 : g.id) && !s.has(g.id)), v = m.length ? [...i, ...m] : i;
|
|
107
|
+
return P.current = m.length > 0 && (l > 0 ? v.length < l : m.length >= E), v;
|
|
108
108
|
}), n.length && (ee.current = e), typeof (t == null ? void 0 : t.unreadTotal) == "number" && U(t.unreadTotal), t != null && t.unreadByMessageType && X(t.unreadByMessageType);
|
|
109
109
|
} catch {
|
|
110
110
|
P.current = !1;
|
|
@@ -112,46 +112,46 @@ const Rt = Ge(function({
|
|
|
112
112
|
te.current = !1, pe(!1);
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
|
-
}, [o, E, z]),
|
|
115
|
+
}, [o, E, z]), Me = N(
|
|
116
116
|
(e) => {
|
|
117
117
|
const t = e.currentTarget;
|
|
118
118
|
t.scrollHeight - t.scrollTop - t.clientHeight <= ct && ve();
|
|
119
119
|
},
|
|
120
120
|
[ve]
|
|
121
|
-
),
|
|
121
|
+
), h = N(async () => {
|
|
122
122
|
try {
|
|
123
123
|
const e = await o({ currentPage: 1, pageSize: E });
|
|
124
124
|
U(typeof (e == null ? void 0 : e.unreadTotal) == "number" ? e.unreadTotal : 0), X((e == null ? void 0 : e.unreadByMessageType) || {});
|
|
125
125
|
} catch {
|
|
126
126
|
}
|
|
127
127
|
}, [o, E]), ne = N(() => {
|
|
128
|
-
|
|
128
|
+
y.current != null && (window.clearTimeout(y.current), y.current = null), q(null);
|
|
129
129
|
}, []), Te = N(() => {
|
|
130
130
|
ne(), x(!0);
|
|
131
131
|
}, [ne]), be = N(() => {
|
|
132
132
|
const e = Z.current;
|
|
133
133
|
if (Z.current = null, !e || !Ye(he.current, e.messageType)) return;
|
|
134
|
-
|
|
134
|
+
y.current != null && (window.clearTimeout(y.current), y.current = null);
|
|
135
135
|
const t = `inbox-badge-${e.messageType || "msg"}-${Date.now()}`;
|
|
136
136
|
q({
|
|
137
137
|
key: t,
|
|
138
138
|
title: e.title || "新站内信",
|
|
139
139
|
summary: e.summary || "",
|
|
140
140
|
messageType: e.messageType
|
|
141
|
-
}),
|
|
142
|
-
|
|
141
|
+
}), y.current = window.setTimeout(() => {
|
|
142
|
+
y.current = null, q(null);
|
|
143
143
|
}, at);
|
|
144
144
|
}, []), w = N(
|
|
145
145
|
(e) => {
|
|
146
146
|
e && (Z.current = e, be()), k.current != null && window.clearTimeout(k.current), k.current = window.setTimeout(() => {
|
|
147
|
-
k.current = null,
|
|
147
|
+
k.current = null, h();
|
|
148
148
|
}, it);
|
|
149
149
|
},
|
|
150
|
-
[
|
|
150
|
+
[h, be]
|
|
151
151
|
);
|
|
152
|
-
$e(Pe, () => ({ refreshBadge:
|
|
153
|
-
|
|
154
|
-
}, [
|
|
152
|
+
$e(Pe, () => ({ refreshBadge: h }), [h]), b(() => {
|
|
153
|
+
h();
|
|
154
|
+
}, [h]), b(() => {
|
|
155
155
|
if (ie !== void 0) {
|
|
156
156
|
if (!ge.current) {
|
|
157
157
|
ge.current = !0;
|
|
@@ -159,13 +159,13 @@ const Rt = Ge(function({
|
|
|
159
159
|
}
|
|
160
160
|
w();
|
|
161
161
|
}
|
|
162
|
-
}, [ie, w]),
|
|
162
|
+
}, [ie, w]), b(() => {
|
|
163
163
|
if (K <= 0) return;
|
|
164
164
|
const e = window.setInterval(() => {
|
|
165
|
-
|
|
165
|
+
h();
|
|
166
166
|
}, K);
|
|
167
167
|
return () => window.clearInterval(e);
|
|
168
|
-
}, [K,
|
|
168
|
+
}, [K, h]), b(() => {
|
|
169
169
|
const e = () => {
|
|
170
170
|
L.current != null && window.clearTimeout(L.current), L.current = window.setTimeout(() => {
|
|
171
171
|
L.current = null, w();
|
|
@@ -176,17 +176,17 @@ const Rt = Ge(function({
|
|
|
176
176
|
return window.addEventListener("focus", e), document.addEventListener("visibilitychange", t), () => {
|
|
177
177
|
window.removeEventListener("focus", e), document.removeEventListener("visibilitychange", t), L.current != null && (window.clearTimeout(L.current), L.current = null);
|
|
178
178
|
};
|
|
179
|
-
}, [w]),
|
|
179
|
+
}, [w]), b(() => {
|
|
180
180
|
const e = (t) => {
|
|
181
181
|
const n = t.detail;
|
|
182
182
|
w((n == null ? void 0 : n.preview) || void 0);
|
|
183
183
|
};
|
|
184
184
|
return window.addEventListener(Le, e), () => window.removeEventListener(Le, e);
|
|
185
|
-
}, [w]),
|
|
185
|
+
}, [w]), b(() => {
|
|
186
186
|
Ue.destroy();
|
|
187
|
-
}, []),
|
|
188
|
-
k.current != null && (window.clearTimeout(k.current), k.current = null),
|
|
189
|
-
}, []),
|
|
187
|
+
}, []), b(() => () => {
|
|
188
|
+
k.current != null && (window.clearTimeout(k.current), k.current = null), y.current != null && (window.clearTimeout(y.current), y.current = null);
|
|
189
|
+
}, []), b(() => {
|
|
190
190
|
if (j === !1 || typeof V != "function" || typeof window > "u" || typeof EventSource > "u") return;
|
|
191
191
|
const e = String(j || "/api/v1/msg-center/inbox/stream").trim();
|
|
192
192
|
let t = !1, n = null, l = null, i = 0;
|
|
@@ -195,17 +195,17 @@ const Rt = Ge(function({
|
|
|
195
195
|
w(He);
|
|
196
196
|
}, m = () => {
|
|
197
197
|
l != null && (window.clearTimeout(l), l = null);
|
|
198
|
-
},
|
|
198
|
+
}, v = () => {
|
|
199
199
|
if (t || l != null) return;
|
|
200
200
|
const c = Math.min(3e4, 1e3 * 2 ** Math.min(i, 5));
|
|
201
201
|
i += 1, l = window.setTimeout(() => {
|
|
202
|
-
l = null,
|
|
202
|
+
l = null, g();
|
|
203
203
|
}, c);
|
|
204
|
-
},
|
|
204
|
+
}, g = () => {
|
|
205
205
|
if (t) return;
|
|
206
206
|
const c = String(V() || "").trim();
|
|
207
207
|
if (!c) {
|
|
208
|
-
|
|
208
|
+
v();
|
|
209
209
|
return;
|
|
210
210
|
}
|
|
211
211
|
n && (n.removeEventListener("badge", s), n.removeEventListener("inbox", s), n.close(), n = null);
|
|
@@ -214,19 +214,19 @@ const Rt = Ge(function({
|
|
|
214
214
|
try {
|
|
215
215
|
n = new EventSource(B.toString());
|
|
216
216
|
} catch {
|
|
217
|
-
|
|
217
|
+
v();
|
|
218
218
|
return;
|
|
219
219
|
}
|
|
220
220
|
n.addEventListener("badge", s), n.addEventListener("inbox", s), n.onopen = () => {
|
|
221
221
|
i = 0;
|
|
222
222
|
}, n.onerror = () => {
|
|
223
|
-
t || (n == null || n.close(), n = null,
|
|
223
|
+
t || (n == null || n.close(), n = null, v());
|
|
224
224
|
};
|
|
225
225
|
};
|
|
226
|
-
return
|
|
226
|
+
return g(), () => {
|
|
227
227
|
t = !0, m(), n && (n.removeEventListener("badge", s), n.removeEventListener("inbox", s), n.close(), n = null);
|
|
228
228
|
};
|
|
229
|
-
}, [j, V, w]),
|
|
229
|
+
}, [j, V, w]), b(() => {
|
|
230
230
|
W && G();
|
|
231
231
|
}, [W, G]);
|
|
232
232
|
const Oe = Se(
|
|
@@ -239,7 +239,7 @@ const Rt = Ge(function({
|
|
|
239
239
|
}),
|
|
240
240
|
[fe, S]
|
|
241
241
|
), re = (e, t) => {
|
|
242
|
-
|
|
242
|
+
Ae((n) => {
|
|
243
243
|
const l = { ...n, [e]: t };
|
|
244
244
|
return Je(l), l;
|
|
245
245
|
});
|
|
@@ -263,7 +263,7 @@ const Rt = Ge(function({
|
|
|
263
263
|
if (!t.disabled) {
|
|
264
264
|
if (ce) {
|
|
265
265
|
try {
|
|
266
|
-
await ce(t.kind, e), x(!1), G(),
|
|
266
|
+
await ce(t.kind, e), x(!1), G(), h();
|
|
267
267
|
} catch (n) {
|
|
268
268
|
$.error(n instanceof Error ? n.message : "操作失败");
|
|
269
269
|
}
|
|
@@ -276,17 +276,17 @@ const Rt = Ge(function({
|
|
|
276
276
|
ye(!0);
|
|
277
277
|
try {
|
|
278
278
|
const e = await C(), t = typeof (e == null ? void 0 : e.updated) == "number" ? e.updated : void 0;
|
|
279
|
-
$.success(typeof t == "number" ? `已清空 ${t} 条未读` : "已清空未读"), await G(), await
|
|
279
|
+
$.success(typeof t == "number" ? `已清空 ${t} 条未读` : "已清空未读"), await G(), await h();
|
|
280
280
|
} catch (e) {
|
|
281
281
|
$.error(e instanceof Error ? e.message : "清空未读失败");
|
|
282
282
|
} finally {
|
|
283
283
|
ye(!1);
|
|
284
284
|
}
|
|
285
285
|
}
|
|
286
|
-
}, Ne =
|
|
286
|
+
}, Ne = p ? ke(p.messageType) : "";
|
|
287
287
|
return /* @__PURE__ */ d("div", { className: R(r.bellWrap, Ce), children: [
|
|
288
288
|
/* @__PURE__ */ a(Fe, { count: S, size: "small", overflowCount: 99, offset: [-4, 4], children: /* @__PURE__ */ a(
|
|
289
|
-
|
|
289
|
+
D,
|
|
290
290
|
{
|
|
291
291
|
type: "text",
|
|
292
292
|
className: r.bellBtn,
|
|
@@ -295,11 +295,17 @@ const Rt = Ge(function({
|
|
|
295
295
|
onClick: () => x(!0)
|
|
296
296
|
}
|
|
297
297
|
) }),
|
|
298
|
-
|
|
298
|
+
p && typeof document < "u" ? Ke(
|
|
299
299
|
/* @__PURE__ */ a("div", { className: r.toastHost, "data-testid": "inbox-live-toast-host", children: /* @__PURE__ */ d(
|
|
300
300
|
"div",
|
|
301
301
|
{
|
|
302
|
-
className: R(
|
|
302
|
+
className: R(
|
|
303
|
+
"marsun-inbox-toast",
|
|
304
|
+
r.toastNotice,
|
|
305
|
+
p.messageType === "alert" && r.accentAlert,
|
|
306
|
+
p.messageType === "action" && r.accentAction,
|
|
307
|
+
p.messageType === "remind" && r.accentRemind
|
|
308
|
+
),
|
|
303
309
|
role: "alert",
|
|
304
310
|
"data-testid": "inbox-live-toast",
|
|
305
311
|
onClick: Te,
|
|
@@ -317,20 +323,20 @@ const Rt = Ge(function({
|
|
|
317
323
|
}
|
|
318
324
|
),
|
|
319
325
|
/* @__PURE__ */ d("div", { className: r.toastHead, children: [
|
|
320
|
-
/* @__PURE__ */ a("span", { className: r.toastTitle, children: le(
|
|
326
|
+
/* @__PURE__ */ a("span", { className: r.toastTitle, children: le(p.title) }),
|
|
321
327
|
Ne ? /* @__PURE__ */ a(
|
|
322
328
|
se,
|
|
323
329
|
{
|
|
324
|
-
color: Be(
|
|
330
|
+
color: Be(p.messageType),
|
|
325
331
|
className: r.typeTag,
|
|
326
332
|
children: Ne
|
|
327
333
|
}
|
|
328
334
|
) : null
|
|
329
335
|
] }),
|
|
330
336
|
/* @__PURE__ */ d("div", { className: r.toastBody, children: [
|
|
331
|
-
|
|
337
|
+
p.summary ? /* @__PURE__ */ a("div", { className: r.toastDesc, children: le(p.summary) }) : null,
|
|
332
338
|
/* @__PURE__ */ a("div", { className: r.toastActions, children: /* @__PURE__ */ a(
|
|
333
|
-
|
|
339
|
+
D,
|
|
334
340
|
{
|
|
335
341
|
type: "primary",
|
|
336
342
|
size: "small",
|
|
@@ -343,7 +349,7 @@ const Rt = Ge(function({
|
|
|
343
349
|
] })
|
|
344
350
|
]
|
|
345
351
|
},
|
|
346
|
-
|
|
352
|
+
p.key
|
|
347
353
|
) }),
|
|
348
354
|
document.body
|
|
349
355
|
) : null,
|
|
@@ -387,7 +393,7 @@ const Rt = Ge(function({
|
|
|
387
393
|
}
|
|
388
394
|
),
|
|
389
395
|
C ? /* @__PURE__ */ a(
|
|
390
|
-
|
|
396
|
+
D,
|
|
391
397
|
{
|
|
392
398
|
type: "link",
|
|
393
399
|
size: "small",
|
|
@@ -407,7 +413,7 @@ const Rt = Ge(function({
|
|
|
407
413
|
/* @__PURE__ */ a(
|
|
408
414
|
oe,
|
|
409
415
|
{
|
|
410
|
-
checked:
|
|
416
|
+
checked: A.alert,
|
|
411
417
|
onChange: (e) => re("alert", e.target.checked),
|
|
412
418
|
children: "预警弹出"
|
|
413
419
|
}
|
|
@@ -415,7 +421,7 @@ const Rt = Ge(function({
|
|
|
415
421
|
/* @__PURE__ */ a(
|
|
416
422
|
oe,
|
|
417
423
|
{
|
|
418
|
-
checked:
|
|
424
|
+
checked: A.action,
|
|
419
425
|
onChange: (e) => re("action", e.target.checked),
|
|
420
426
|
children: "行动弹出"
|
|
421
427
|
}
|
|
@@ -423,7 +429,7 @@ const Rt = Ge(function({
|
|
|
423
429
|
/* @__PURE__ */ a(
|
|
424
430
|
oe,
|
|
425
431
|
{
|
|
426
|
-
checked:
|
|
432
|
+
checked: A.remind,
|
|
427
433
|
onChange: (e) => re("remind", e.target.checked),
|
|
428
434
|
children: "提醒弹出"
|
|
429
435
|
}
|
|
@@ -437,12 +443,12 @@ const Rt = Ge(function({
|
|
|
437
443
|
wrapperClassName: R("inbox-bell-list-scroll", r.listScroll),
|
|
438
444
|
className: r.listViewport,
|
|
439
445
|
"data-testid": "inbox-bell-list-scroll",
|
|
440
|
-
onScroll:
|
|
446
|
+
onScroll: Me,
|
|
441
447
|
children: [
|
|
442
448
|
/* @__PURE__ */ a("ul", { className: r.list, children: I.map((e) => {
|
|
443
449
|
const t = ke(e.messageType), n = String(e.levelLabel || e.level || "").trim(), l = !!n, i = je(e.bodyHtml), s = Ve(
|
|
444
450
|
We(e)
|
|
445
|
-
), m = Qe(e),
|
|
451
|
+
), m = Qe(e), v = dt(e), g = !!s.primary;
|
|
446
452
|
return /* @__PURE__ */ a("li", { children: /* @__PURE__ */ d(
|
|
447
453
|
"div",
|
|
448
454
|
{
|
|
@@ -479,7 +485,7 @@ const Rt = Ge(function({
|
|
|
479
485
|
dangerouslySetInnerHTML: { __html: i }
|
|
480
486
|
}
|
|
481
487
|
) : e.summary ? /* @__PURE__ */ a("span", { className: r.itemSummary, children: le(e.summary) }) : null }),
|
|
482
|
-
|
|
488
|
+
v ? /* @__PURE__ */ a("span", { className: r.itemMeta, children: v }) : null,
|
|
483
489
|
l ? /* @__PURE__ */ a("div", { className: r.itemFooterTags, children: /* @__PURE__ */ a(
|
|
484
490
|
se,
|
|
485
491
|
{
|
|
@@ -489,7 +495,7 @@ const Rt = Ge(function({
|
|
|
489
495
|
children: n
|
|
490
496
|
}
|
|
491
497
|
) }) : null,
|
|
492
|
-
|
|
498
|
+
g && s.primary ? /* @__PURE__ */ a(
|
|
493
499
|
"div",
|
|
494
500
|
{
|
|
495
501
|
className: r.itemActions,
|
|
@@ -497,7 +503,7 @@ const Rt = Ge(function({
|
|
|
497
503
|
onKeyDown: (c) => c.stopPropagation(),
|
|
498
504
|
children: /* @__PURE__ */ d(Ee, { size: 8, wrap: !0, children: [
|
|
499
505
|
/* @__PURE__ */ a(
|
|
500
|
-
|
|
506
|
+
D,
|
|
501
507
|
{
|
|
502
508
|
size: "small",
|
|
503
509
|
type: "primary",
|
|
@@ -506,7 +512,7 @@ const Rt = Ge(function({
|
|
|
506
512
|
}
|
|
507
513
|
),
|
|
508
514
|
s.secondary ? /* @__PURE__ */ a(
|
|
509
|
-
|
|
515
|
+
D,
|
|
510
516
|
{
|
|
511
517
|
size: "small",
|
|
512
518
|
type: "link",
|
|
@@ -521,7 +527,7 @@ const Rt = Ge(function({
|
|
|
521
527
|
}
|
|
522
528
|
) }, e.id);
|
|
523
529
|
}) }),
|
|
524
|
-
|
|
530
|
+
De ? /* @__PURE__ */ a("p", { className: R("inbox-bell-list-footer", r.listFooter), children: "加载中…" }) : null
|
|
525
531
|
]
|
|
526
532
|
}
|
|
527
533
|
) }) })
|
|
@@ -534,9 +540,9 @@ export {
|
|
|
534
540
|
Ut as DEFAULT_INBOX_TOAST_PREFS,
|
|
535
541
|
Rt as default,
|
|
536
542
|
Ve as filterInboxActionsForHost,
|
|
537
|
-
|
|
543
|
+
Dt as inboxSceneLabel,
|
|
538
544
|
Qe as isInboxButtonDriven,
|
|
539
|
-
|
|
545
|
+
Mt as isTerminalActionStatus,
|
|
540
546
|
Xe as loadInboxToastPrefs,
|
|
541
547
|
Ot as normalizeInboxActions,
|
|
542
548
|
We as resolveInboxItemActions,
|