@hkyhy/marsun-components-core 0.1.101 → 0.1.102
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/dist/components/Editor/VariablePicker.js +13 -13
- package/dist/components/Editor/VariablePicker.js.map +1 -1
- package/dist/components/FormInfo/RichTextField/index.js +46 -69
- package/dist/components/FormInfo/RichTextField/index.js.map +1 -1
- package/dist/components/FormInfo/VariableMentionInput/index.d.ts +1 -0
- package/dist/components/FormInfo/VariableMentionInput/index.js +53 -47
- package/dist/components/FormInfo/VariableMentionInput/index.js.map +1 -1
- package/dist/components/FormInfo/VariableMentionInput/style.module.scss.js +6 -5
- package/dist/components/FormInfo/VariableMentionInput/style.module.scss.js.map +1 -1
- package/dist/components/Tools/Inbox/InboxBell/InboxBell.d.ts +3 -0
- package/dist/components/Tools/Inbox/InboxBell/InboxBell.js +59 -49
- package/dist/components/Tools/Inbox/InboxBell/InboxBell.js.map +1 -1
- package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js +20 -18
- package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js.map +1 -1
- package/dist/components/Tools/Inbox/index.d.ts +1 -0
- package/dist/components/Tools/Inbox/sanitizeInboxHtml.d.ts +5 -0
- package/dist/components/Tools/Inbox/sanitizeInboxHtml.js +14 -0
- package/dist/components/Tools/Inbox/sanitizeInboxHtml.js.map +1 -0
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.js +100 -99
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.js.map +1 -1
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.js +47 -45
- package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.js.map +1 -1
- package/dist/components/Tools/MessageCenter/MsgCenterAppSwitcher/MsgCenterAppSwitcher.d.ts +22 -0
- package/dist/components/Tools/MessageCenter/MsgCenterAppSwitcher/MsgCenterAppSwitcher.js +64 -0
- package/dist/components/Tools/MessageCenter/MsgCenterAppSwitcher/MsgCenterAppSwitcher.js.map +1 -0
- package/dist/components/Tools/MessageCenter/MsgCenterAppSwitcher/index.d.ts +2 -0
- package/dist/components/Tools/MessageCenter/index.d.ts +5 -0
- package/dist/components/Tools/MessageCenter/msgCenterAppSwitch.d.ts +39 -0
- package/dist/components/Tools/MessageCenter/msgCenterAppSwitch.js +94 -0
- package/dist/components/Tools/MessageCenter/msgCenterAppSwitch.js.map +1 -0
- package/dist/components/Tools/MessageCenter/useMsgCenterAppKey.d.ts +2 -0
- package/dist/components/Tools/MessageCenter/useMsgCenterAppKey.js +18 -0
- package/dist/components/Tools/MessageCenter/useMsgCenterAppKey.js.map +1 -0
- package/dist/components/Tools/index.d.ts +2 -1
- package/dist/index.js +641 -626
- package/dist/index.js.map +1 -1
- package/dist/marsun-components-core.css +1 -1
- package/dist/node_modules/dompurify/dist/purify.es.js +908 -0
- package/dist/node_modules/dompurify/dist/purify.es.js.map +1 -0
- package/dist/node_modules/isomorphic-dompurify/dist/browser.js +17 -0
- package/dist/node_modules/isomorphic-dompurify/dist/browser.js.map +1 -0
- package/dist/styles/global.css +1 -1
- package/package.json +2 -1
package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.js.map
CHANGED
|
@@ -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 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
|
+
{"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={!formWritable(isCreate)}\n value={editing?.eventKey || undefined}\n placeholder={catalog.length ? '选择场景(中文)' : '暂无事件目录'}\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={!formWritable(isCreate)}\n options={roleOptions.map((r) => ({ value: r.code, label: r.name || r.code }))}\n optionFilterProp=\"label\"\n placeholder=\"下拉选择角色(可多选)\"\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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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
export type MsgCenterAppSwitcherProps = {
|
|
3
|
+
/**
|
|
4
|
+
* 返回当前用户**有权进入**的 SystemApp(须调用方用 EP 过滤;本组件再收窄到可切换 appKey)。
|
|
5
|
+
* 禁止传入全量 Agent 目录。
|
|
6
|
+
*/
|
|
7
|
+
listAuthorizedSystemApps: () => Promise<Array<{
|
|
8
|
+
code: string;
|
|
9
|
+
name: string;
|
|
10
|
+
}>>;
|
|
11
|
+
/** 本壳默认 appKey(无 session 时) */
|
|
12
|
+
fallbackAppKey: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
style?: React.CSSProperties;
|
|
15
|
+
/** 切换成功回调(铃铛/Admin 另订阅 store) */
|
|
16
|
+
onAppKeyChange?: (appKey: string) => void;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* AgentHub 消息中心 App 切换器:仅有权 + 本期可切换对;展示名取 SSO name。
|
|
20
|
+
*/
|
|
21
|
+
declare const MsgCenterAppSwitcher: React.FC<MsgCenterAppSwitcherProps>;
|
|
22
|
+
export default MsgCenterAppSwitcher;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsxs as x, jsx as E } from "react/jsx-runtime";
|
|
2
|
+
import { Typography as j, Select as v } from "antd";
|
|
3
|
+
import { useState as o, useCallback as K, useEffect as M, useMemo as T } from "react";
|
|
4
|
+
import { getMsgCenterAppKey as h, filterMsgCenterSwitchableApps as F, resolveMsgCenterSwitchState as L, setMsgCenterAppKey as w, subscribeMsgCenterAppKey as P } from "../msgCenterAppSwitch.js";
|
|
5
|
+
const D = ({
|
|
6
|
+
listAuthorizedSystemApps: l,
|
|
7
|
+
fallbackAppKey: s,
|
|
8
|
+
className: p,
|
|
9
|
+
style: c,
|
|
10
|
+
onAppKeyChange: a
|
|
11
|
+
}) => {
|
|
12
|
+
const [n, u] = o([]), [f, m] = o(!1), [g, d] = o(null), [S, i] = o(() => h(s)), y = K(async () => {
|
|
13
|
+
m(!0), d(null);
|
|
14
|
+
try {
|
|
15
|
+
const e = await l(), t = F(e || []);
|
|
16
|
+
u(t);
|
|
17
|
+
const r = L(t, s);
|
|
18
|
+
i(r.currentAppKey), h(s) !== r.currentAppKey && t.length && w(
|
|
19
|
+
r.currentAppKey,
|
|
20
|
+
t.map((b) => b.appKey)
|
|
21
|
+
);
|
|
22
|
+
} catch (e) {
|
|
23
|
+
d(e instanceof Error ? e.message : String(e)), u([]);
|
|
24
|
+
} finally {
|
|
25
|
+
m(!1);
|
|
26
|
+
}
|
|
27
|
+
}, [s, l]);
|
|
28
|
+
M(() => {
|
|
29
|
+
y();
|
|
30
|
+
}, [y]), M(() => P((e) => {
|
|
31
|
+
e && i(e);
|
|
32
|
+
}), []);
|
|
33
|
+
const C = T(
|
|
34
|
+
() => n.map((e) => ({
|
|
35
|
+
value: e.appKey,
|
|
36
|
+
label: e.name
|
|
37
|
+
})),
|
|
38
|
+
[n]
|
|
39
|
+
);
|
|
40
|
+
return g ? /* @__PURE__ */ x(j.Text, { type: "danger", className: p, style: c, children: [
|
|
41
|
+
"应用列表不可用:",
|
|
42
|
+
g
|
|
43
|
+
] }) : !f && n.length <= 1 ? null : /* @__PURE__ */ E(
|
|
44
|
+
v,
|
|
45
|
+
{
|
|
46
|
+
className: p,
|
|
47
|
+
style: { minWidth: 180, ...c },
|
|
48
|
+
loading: f,
|
|
49
|
+
value: S,
|
|
50
|
+
options: C,
|
|
51
|
+
optionFilterProp: "label",
|
|
52
|
+
placeholder: "消息应用",
|
|
53
|
+
"aria-label": "消息中心应用切换",
|
|
54
|
+
onChange: (e) => {
|
|
55
|
+
const t = n.map((r) => r.appKey);
|
|
56
|
+
w(e, t), i(e), a == null || a(e);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
export {
|
|
62
|
+
D as default
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=MsgCenterAppSwitcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MsgCenterAppSwitcher.js","sources":["../../../../../src/components/Tools/MessageCenter/MsgCenterAppSwitcher/MsgCenterAppSwitcher.tsx"],"sourcesContent":["import { Select, Typography } from 'antd';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n filterMsgCenterSwitchableApps,\n getMsgCenterAppKey,\n resolveMsgCenterSwitchState,\n setMsgCenterAppKey,\n subscribeMsgCenterAppKey,\n type MsgCenterSwitchableApp,\n} from '../msgCenterAppSwitch';\n\nexport type MsgCenterAppSwitcherProps = {\n /**\n * 返回当前用户**有权进入**的 SystemApp(须调用方用 EP 过滤;本组件再收窄到可切换 appKey)。\n * 禁止传入全量 Agent 目录。\n */\n listAuthorizedSystemApps: () => Promise<Array<{ code: string; name: string }>>;\n /** 本壳默认 appKey(无 session 时) */\n fallbackAppKey: string;\n className?: string;\n style?: React.CSSProperties;\n /** 切换成功回调(铃铛/Admin 另订阅 store) */\n onAppKeyChange?: (appKey: string) => void;\n};\n\n/**\n * AgentHub 消息中心 App 切换器:仅有权 + 本期可切换对;展示名取 SSO name。\n */\nconst MsgCenterAppSwitcher: React.FC<MsgCenterAppSwitcherProps> = ({\n listAuthorizedSystemApps,\n fallbackAppKey,\n className,\n style,\n onAppKeyChange,\n}) => {\n const [apps, setApps] = useState<MsgCenterSwitchableApp[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [current, setCurrent] = useState(() => getMsgCenterAppKey(fallbackAppKey));\n\n const reload = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const raw = await listAuthorizedSystemApps();\n const filtered = filterMsgCenterSwitchableApps(raw || []);\n setApps(filtered);\n const state = resolveMsgCenterSwitchState(filtered, fallbackAppKey);\n setCurrent(state.currentAppKey);\n if (getMsgCenterAppKey(fallbackAppKey) !== state.currentAppKey && filtered.length) {\n setMsgCenterAppKey(\n state.currentAppKey,\n filtered.map((a) => a.appKey),\n );\n }\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n setApps([]);\n } finally {\n setLoading(false);\n }\n }, [fallbackAppKey, listAuthorizedSystemApps]);\n\n useEffect(() => {\n void reload();\n }, [reload]);\n\n useEffect(() => {\n return subscribeMsgCenterAppKey((next) => {\n if (next) setCurrent(next);\n });\n }, []);\n\n const options = useMemo(\n () =>\n apps.map((a) => ({\n value: a.appKey,\n label: a.name,\n })),\n [apps],\n );\n\n if (error) {\n return (\n <Typography.Text type=\"danger\" className={className} style={style}>\n 应用列表不可用:{error}\n </Typography.Text>\n );\n }\n\n if (!loading && apps.length <= 1) {\n // 单权或无可切换:不展示切换器(PB-01:无第二项)\n return null;\n }\n\n return (\n <Select\n className={className}\n style={{ minWidth: 180, ...style }}\n loading={loading}\n value={current}\n options={options}\n optionFilterProp=\"label\"\n placeholder=\"消息应用\"\n aria-label=\"消息中心应用切换\"\n onChange={(value: string) => {\n const allowed = apps.map((a) => a.appKey);\n setMsgCenterAppKey(value, allowed);\n setCurrent(value);\n onAppKeyChange?.(value);\n }}\n />\n );\n};\n\nexport default MsgCenterAppSwitcher;\n"],"names":["MsgCenterAppSwitcher","listAuthorizedSystemApps","fallbackAppKey","className","style","onAppKeyChange","apps","setApps","useState","loading","setLoading","error","setError","current","setCurrent","getMsgCenterAppKey","reload","useCallback","raw","filtered","filterMsgCenterSwitchableApps","state","resolveMsgCenterSwitchState","setMsgCenterAppKey","a","useEffect","subscribeMsgCenterAppKey","next","options","useMemo","Typography","jsx","Select","value","allowed"],"mappings":";;;;AA4BA,MAAMA,IAA4D,CAAC;AAAA,EACjE,0BAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,gBAAAC;AACF,MAAM;AACJ,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAmC,CAAA,CAAE,GACvD,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAK,GACtC,CAACG,GAAOC,CAAQ,IAAIJ,EAAwB,IAAI,GAChD,CAACK,GAASC,CAAU,IAAIN,EAAS,MAAMO,EAAmBb,CAAc,CAAC,GAEzEc,IAASC,EAAY,YAAY;AACrC,IAAAP,EAAW,EAAI,GACfE,EAAS,IAAI;AACb,QAAI;AACF,YAAMM,IAAM,MAAMjB,EAAA,GACZkB,IAAWC,EAA8BF,KAAO,EAAE;AACxD,MAAAX,EAAQY,CAAQ;AAChB,YAAME,IAAQC,EAA4BH,GAAUjB,CAAc;AAClE,MAAAY,EAAWO,EAAM,aAAa,GAC1BN,EAAmBb,CAAc,MAAMmB,EAAM,iBAAiBF,EAAS,UACzEI;AAAA,QACEF,EAAM;AAAA,QACNF,EAAS,IAAI,CAACK,MAAMA,EAAE,MAAM;AAAA,MAAA;AAAA,IAGlC,SAAS,GAAG;AACV,MAAAZ,EAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC,GACnDL,EAAQ,CAAA,CAAE;AAAA,IACZ,UAAA;AACE,MAAAG,EAAW,EAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAACR,GAAgBD,CAAwB,CAAC;AAE7C,EAAAwB,EAAU,MAAM;AACd,IAAKT,EAAA;AAAA,EACP,GAAG,CAACA,CAAM,CAAC,GAEXS,EAAU,MACDC,EAAyB,CAACC,MAAS;AACxC,IAAIA,OAAiBA,CAAI;AAAA,EAC3B,CAAC,GACA,CAAA,CAAE;AAEL,QAAMC,IAAUC;AAAA,IACd,MACEvB,EAAK,IAAI,CAACkB,OAAO;AAAA,MACf,OAAOA,EAAE;AAAA,MACT,OAAOA,EAAE;AAAA,IAAA,EACT;AAAA,IACJ,CAAClB,CAAI;AAAA,EAAA;AAGP,SAAIK,sBAECmB,EAAW,MAAX,EAAgB,MAAK,UAAS,WAAA3B,GAAsB,OAAAC,GAAc,UAAA;AAAA,IAAA;AAAA,IACxDO;AAAA,EAAA,GACX,IAIA,CAACF,KAAWH,EAAK,UAAU,IAEtB,OAIP,gBAAAyB;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAA7B;AAAA,MACA,OAAO,EAAE,UAAU,KAAK,GAAGC,EAAA;AAAA,MAC3B,SAAAK;AAAA,MACA,OAAOI;AAAA,MACP,SAAAe;AAAA,MACA,kBAAiB;AAAA,MACjB,aAAY;AAAA,MACZ,cAAW;AAAA,MACX,UAAU,CAACK,MAAkB;AAC3B,cAAMC,IAAU5B,EAAK,IAAI,CAACkB,MAAMA,EAAE,MAAM;AACxC,QAAAD,EAAmBU,GAAOC,CAAO,GACjCpB,EAAWmB,CAAK,GAChB5B,KAAA,QAAAA,EAAiB4B;AAAA,MACnB;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -2,3 +2,8 @@ export { MessageTemplateAdmin } from './MessageTemplateAdmin';
|
|
|
2
2
|
export type { MessageTemplateAdminProps, MessageTemplateAdminItem, MessageEventCatalogItem, MessageEventCatalogPayload, MessageAudienceRoleOption, MessageTemplateVariable, MessageTemplateVariableAdmin, PushRuleAdminItem, MessageCrudFlags, MessageAdminPermissions, } from './MessageTemplateAdmin';
|
|
3
3
|
export { generateTemplateCode, normalizeTemplatePlaceholders, applyTemplateVars, stripHtmlToText, } from './utils/templateCode';
|
|
4
4
|
export { resolveMessageAdminPermissions } from './MessageTemplateAdmin';
|
|
5
|
+
export { MSG_CENTER_APP_SWITCH_STORAGE_KEY, SYSTEM_APP_TO_MSG_CENTER_APP_KEY, MSG_CENTER_SWITCHABLE_APP_KEYS, msgCenterAppKeyFromSystemAppCode, filterMsgCenterSwitchableApps, getMsgCenterAppKey, setMsgCenterAppKey, subscribeMsgCenterAppKey, bindMsgCenterAppKeyStorageSync, resolveMsgCenterSwitchState, } from './msgCenterAppSwitch';
|
|
6
|
+
export type { MsgCenterAppSwitchState, MsgCenterSwitchableApp, MsgCenterSwitchableAppKey, } from './msgCenterAppSwitch';
|
|
7
|
+
export { useMsgCenterAppKey } from './useMsgCenterAppKey';
|
|
8
|
+
export { MsgCenterAppSwitcher } from './MsgCenterAppSwitcher';
|
|
9
|
+
export type { MsgCenterAppSwitcherProps } from './MsgCenterAppSwitcher';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 消息中心运行时 appKey 切换(Phase B)。
|
|
3
|
+
* Hub 写入;各业务 App 铃铛/Admin 读取。跨页签用 sessionStorage + storage 事件。
|
|
4
|
+
* 禁 Hub=全 Agent;仅 catalog 可切换对。
|
|
5
|
+
*/
|
|
6
|
+
export declare const MSG_CENTER_APP_SWITCH_STORAGE_KEY = "marsun.msgCenter.currentAppKey";
|
|
7
|
+
/** SystemApp.code → mc catalog appKey(非中文表;仅 Quality 例外) */
|
|
8
|
+
export declare const SYSTEM_APP_TO_MSG_CENTER_APP_KEY: Readonly<Record<string, string>>;
|
|
9
|
+
/** 本期允许出现在切换器中的 mc appKey */
|
|
10
|
+
export declare const MSG_CENTER_SWITCHABLE_APP_KEYS: readonly ["equipment-agent", "s3-quality"];
|
|
11
|
+
export type MsgCenterSwitchableAppKey = (typeof MSG_CENTER_SWITCHABLE_APP_KEYS)[number];
|
|
12
|
+
export type MsgCenterAppSwitchState = {
|
|
13
|
+
currentAppKey: string;
|
|
14
|
+
currentSystemAppCode: string;
|
|
15
|
+
currentSystemAppName: string;
|
|
16
|
+
};
|
|
17
|
+
export type MsgCenterSwitchableApp = {
|
|
18
|
+
appKey: string;
|
|
19
|
+
systemAppCode: string;
|
|
20
|
+
name: string;
|
|
21
|
+
};
|
|
22
|
+
type Listener = (appKey: string) => void;
|
|
23
|
+
/** 从 SystemApp.code 解析 mc appKey;未知则原样返回(调用方须再过滤) */
|
|
24
|
+
export declare function msgCenterAppKeyFromSystemAppCode(systemAppCode: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* 仅保留本期可切换且用户有权进入的项(禁全量 Agent)。
|
|
27
|
+
* `apps` 须已是「有权进入」子集(由 Hub 用 EP 过滤后再传入)。
|
|
28
|
+
*/
|
|
29
|
+
export declare function filterMsgCenterSwitchableApps(apps: Array<{
|
|
30
|
+
code: string;
|
|
31
|
+
name: string;
|
|
32
|
+
}>): MsgCenterSwitchableApp[];
|
|
33
|
+
export declare function getMsgCenterAppKey(fallbackAppKey: string): string;
|
|
34
|
+
export declare function setMsgCenterAppKey(appKey: string, allowed?: readonly string[]): void;
|
|
35
|
+
export declare function subscribeMsgCenterAppKey(listener: Listener): () => void;
|
|
36
|
+
/** 浏览器多页签:storage 事件(仅跨 tab;同页靠 subscribe) */
|
|
37
|
+
export declare function bindMsgCenterAppKeyStorageSync(): () => void;
|
|
38
|
+
export declare function resolveMsgCenterSwitchState(apps: MsgCenterSwitchableApp[], fallbackAppKey: string): MsgCenterAppSwitchState;
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const c = "marsun.msgCenter.currentAppKey", S = {
|
|
2
|
+
"equipment-agent": "equipment-agent",
|
|
3
|
+
"s3-agent": "s3-quality"
|
|
4
|
+
}, g = ["equipment-agent", "s3-quality"], u = /* @__PURE__ */ new Set();
|
|
5
|
+
function m() {
|
|
6
|
+
if (typeof sessionStorage > "u") return "";
|
|
7
|
+
try {
|
|
8
|
+
return String(sessionStorage.getItem(c) || "").trim();
|
|
9
|
+
} catch {
|
|
10
|
+
return "";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function y(t) {
|
|
14
|
+
if (!(typeof sessionStorage > "u"))
|
|
15
|
+
try {
|
|
16
|
+
sessionStorage.setItem(c, t);
|
|
17
|
+
} catch {
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function p(t) {
|
|
21
|
+
u.forEach((e) => {
|
|
22
|
+
try {
|
|
23
|
+
e(t);
|
|
24
|
+
} catch {
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function a(t) {
|
|
29
|
+
const e = String(t || "").trim();
|
|
30
|
+
return e ? S[e] || e : "";
|
|
31
|
+
}
|
|
32
|
+
function f(t) {
|
|
33
|
+
const e = [], o = /* @__PURE__ */ new Set();
|
|
34
|
+
for (const r of t) {
|
|
35
|
+
const n = String((r == null ? void 0 : r.code) || "").trim(), i = String((r == null ? void 0 : r.name) || "").trim() || n;
|
|
36
|
+
if (!n) continue;
|
|
37
|
+
const s = a(n);
|
|
38
|
+
g.includes(s) && (o.has(s) || (o.add(s), e.push({ appKey: s, systemAppCode: n, name: i })));
|
|
39
|
+
}
|
|
40
|
+
return e;
|
|
41
|
+
}
|
|
42
|
+
function d(t) {
|
|
43
|
+
const e = m();
|
|
44
|
+
return e || String(t || "").trim();
|
|
45
|
+
}
|
|
46
|
+
function A(t, e) {
|
|
47
|
+
const o = String(t || "").trim();
|
|
48
|
+
if (o) {
|
|
49
|
+
if (e && e.length > 0 && !e.includes(o))
|
|
50
|
+
throw new Error(`appKey 不在可切换列表:${o}`);
|
|
51
|
+
y(o), p(o);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function C(t) {
|
|
55
|
+
return u.add(t), () => {
|
|
56
|
+
u.delete(t);
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function E() {
|
|
60
|
+
if (typeof window > "u") return () => {
|
|
61
|
+
};
|
|
62
|
+
const t = (e) => {
|
|
63
|
+
e.storageArea === sessionStorage && e.key === c && p(String(e.newValue || "").trim());
|
|
64
|
+
};
|
|
65
|
+
return window.addEventListener("storage", t), () => window.removeEventListener("storage", t);
|
|
66
|
+
}
|
|
67
|
+
function _(t, e) {
|
|
68
|
+
const o = d(e), r = t.find((i) => i.appKey === o);
|
|
69
|
+
if (r)
|
|
70
|
+
return {
|
|
71
|
+
currentAppKey: r.appKey,
|
|
72
|
+
currentSystemAppCode: r.systemAppCode,
|
|
73
|
+
currentSystemAppName: r.name
|
|
74
|
+
};
|
|
75
|
+
const n = t.find((i) => i.appKey === e) || t[0];
|
|
76
|
+
return {
|
|
77
|
+
currentAppKey: (n == null ? void 0 : n.appKey) || e,
|
|
78
|
+
currentSystemAppCode: (n == null ? void 0 : n.systemAppCode) || e,
|
|
79
|
+
currentSystemAppName: (n == null ? void 0 : n.name) || e
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
export {
|
|
83
|
+
c as MSG_CENTER_APP_SWITCH_STORAGE_KEY,
|
|
84
|
+
g as MSG_CENTER_SWITCHABLE_APP_KEYS,
|
|
85
|
+
S as SYSTEM_APP_TO_MSG_CENTER_APP_KEY,
|
|
86
|
+
E as bindMsgCenterAppKeyStorageSync,
|
|
87
|
+
f as filterMsgCenterSwitchableApps,
|
|
88
|
+
d as getMsgCenterAppKey,
|
|
89
|
+
a as msgCenterAppKeyFromSystemAppCode,
|
|
90
|
+
_ as resolveMsgCenterSwitchState,
|
|
91
|
+
A as setMsgCenterAppKey,
|
|
92
|
+
C as subscribeMsgCenterAppKey
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=msgCenterAppSwitch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"msgCenterAppSwitch.js","sources":["../../../../src/components/Tools/MessageCenter/msgCenterAppSwitch.ts"],"sourcesContent":["/**\n * 消息中心运行时 appKey 切换(Phase B)。\n * Hub 写入;各业务 App 铃铛/Admin 读取。跨页签用 sessionStorage + storage 事件。\n * 禁 Hub=全 Agent;仅 catalog 可切换对。\n */\n\nexport const MSG_CENTER_APP_SWITCH_STORAGE_KEY = 'marsun.msgCenter.currentAppKey';\n\n/** SystemApp.code → mc catalog appKey(非中文表;仅 Quality 例外) */\nexport const SYSTEM_APP_TO_MSG_CENTER_APP_KEY: Readonly<Record<string, string>> = {\n 'equipment-agent': 'equipment-agent',\n 's3-agent': 's3-quality',\n};\n\n/** 本期允许出现在切换器中的 mc appKey */\nexport const MSG_CENTER_SWITCHABLE_APP_KEYS = ['equipment-agent', 's3-quality'] as const;\n\nexport type MsgCenterSwitchableAppKey = (typeof MSG_CENTER_SWITCHABLE_APP_KEYS)[number];\n\nexport type MsgCenterAppSwitchState = {\n currentAppKey: string;\n currentSystemAppCode: string;\n currentSystemAppName: string;\n};\n\nexport type MsgCenterSwitchableApp = {\n appKey: string;\n systemAppCode: string;\n name: string;\n};\n\ntype Listener = (appKey: string) => void;\n\nconst listeners = new Set<Listener>();\n\nfunction readStorage(): string {\n if (typeof sessionStorage === 'undefined') return '';\n try {\n return String(sessionStorage.getItem(MSG_CENTER_APP_SWITCH_STORAGE_KEY) || '').trim();\n } catch {\n return '';\n }\n}\n\nfunction writeStorage(appKey: string): void {\n if (typeof sessionStorage === 'undefined') return;\n try {\n sessionStorage.setItem(MSG_CENTER_APP_SWITCH_STORAGE_KEY, appKey);\n } catch {\n /* ignore quota */\n }\n}\n\nfunction notify(appKey: string): void {\n listeners.forEach((fn) => {\n try {\n fn(appKey);\n } catch {\n /* listener error 不阻断 */\n }\n });\n}\n\n/** 从 SystemApp.code 解析 mc appKey;未知则原样返回(调用方须再过滤) */\nexport function msgCenterAppKeyFromSystemAppCode(systemAppCode: string): string {\n const code = String(systemAppCode || '').trim();\n if (!code) return '';\n return SYSTEM_APP_TO_MSG_CENTER_APP_KEY[code] || code;\n}\n\n/**\n * 仅保留本期可切换且用户有权进入的项(禁全量 Agent)。\n * `apps` 须已是「有权进入」子集(由 Hub 用 EP 过滤后再传入)。\n */\nexport function filterMsgCenterSwitchableApps(\n apps: Array<{ code: string; name: string }>,\n): MsgCenterSwitchableApp[] {\n const out: MsgCenterSwitchableApp[] = [];\n const seen = new Set<string>();\n for (const raw of apps) {\n const systemAppCode = String(raw?.code || '').trim();\n const name = String(raw?.name || '').trim() || systemAppCode;\n if (!systemAppCode) continue;\n const appKey = msgCenterAppKeyFromSystemAppCode(systemAppCode);\n if (!(MSG_CENTER_SWITCHABLE_APP_KEYS as readonly string[]).includes(appKey)) continue;\n if (seen.has(appKey)) continue;\n seen.add(appKey);\n out.push({ appKey, systemAppCode, name });\n }\n return out;\n}\n\nexport function getMsgCenterAppKey(fallbackAppKey: string): string {\n const fromStore = readStorage();\n if (fromStore) return fromStore;\n return String(fallbackAppKey || '').trim();\n}\n\nexport function setMsgCenterAppKey(appKey: string, allowed?: readonly string[]): void {\n const next = String(appKey || '').trim();\n if (!next) return;\n if (allowed && allowed.length > 0 && !allowed.includes(next)) {\n throw new Error(`appKey 不在可切换列表:${next}`);\n }\n writeStorage(next);\n notify(next);\n}\n\nexport function subscribeMsgCenterAppKey(listener: Listener): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n/** 浏览器多页签:storage 事件(仅跨 tab;同页靠 subscribe) */\nexport function bindMsgCenterAppKeyStorageSync(): () => void {\n if (typeof window === 'undefined') return () => undefined;\n const onStorage = (ev: StorageEvent) => {\n if (ev.storageArea !== sessionStorage) return;\n if (ev.key !== MSG_CENTER_APP_SWITCH_STORAGE_KEY) return;\n notify(String(ev.newValue || '').trim());\n };\n window.addEventListener('storage', onStorage);\n return () => window.removeEventListener('storage', onStorage);\n}\n\nexport function resolveMsgCenterSwitchState(\n apps: MsgCenterSwitchableApp[],\n fallbackAppKey: string,\n): MsgCenterAppSwitchState {\n const currentAppKey = getMsgCenterAppKey(fallbackAppKey);\n const hit = apps.find((a) => a.appKey === currentAppKey);\n if (hit) {\n return {\n currentAppKey: hit.appKey,\n currentSystemAppCode: hit.systemAppCode,\n currentSystemAppName: hit.name,\n };\n }\n const fb = apps.find((a) => a.appKey === fallbackAppKey) || apps[0];\n return {\n currentAppKey: fb?.appKey || fallbackAppKey,\n currentSystemAppCode: fb?.systemAppCode || fallbackAppKey,\n currentSystemAppName: fb?.name || fallbackAppKey,\n };\n}\n"],"names":["MSG_CENTER_APP_SWITCH_STORAGE_KEY","SYSTEM_APP_TO_MSG_CENTER_APP_KEY","MSG_CENTER_SWITCHABLE_APP_KEYS","listeners","readStorage","writeStorage","appKey","notify","fn","msgCenterAppKeyFromSystemAppCode","systemAppCode","code","filterMsgCenterSwitchableApps","apps","out","seen","raw","name","getMsgCenterAppKey","fallbackAppKey","fromStore","setMsgCenterAppKey","allowed","next","subscribeMsgCenterAppKey","listener","bindMsgCenterAppKeyStorageSync","onStorage","ev","resolveMsgCenterSwitchState","currentAppKey","hit","a","fb"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useState as p, useEffect as g } from "react";
|
|
2
|
+
import { getMsgCenterAppKey as t, subscribeMsgCenterAppKey as i, bindMsgCenterAppKeyStorageSync as c } from "./msgCenterAppSwitch.js";
|
|
3
|
+
function C(e) {
|
|
4
|
+
const [r, n] = p(() => t(e));
|
|
5
|
+
return g(() => {
|
|
6
|
+
n(t(e));
|
|
7
|
+
const s = i((u) => {
|
|
8
|
+
n(u || t(e));
|
|
9
|
+
}), o = c();
|
|
10
|
+
return () => {
|
|
11
|
+
s(), o();
|
|
12
|
+
};
|
|
13
|
+
}, [e]), r;
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
C as useMsgCenterAppKey
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=useMsgCenterAppKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMsgCenterAppKey.js","sources":["../../../../src/components/Tools/MessageCenter/useMsgCenterAppKey.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n getMsgCenterAppKey,\n subscribeMsgCenterAppKey,\n bindMsgCenterAppKeyStorageSync,\n} from './msgCenterAppSwitch';\n\n/** 订阅当前消息中心 appKey(Hub 切换后触发重渲染) */\nexport function useMsgCenterAppKey(fallbackAppKey: string): string {\n const [appKey, setAppKey] = useState(() => getMsgCenterAppKey(fallbackAppKey));\n\n useEffect(() => {\n setAppKey(getMsgCenterAppKey(fallbackAppKey));\n const unsub = subscribeMsgCenterAppKey((next) => {\n setAppKey(next || getMsgCenterAppKey(fallbackAppKey));\n });\n const unbind = bindMsgCenterAppKeyStorageSync();\n return () => {\n unsub();\n unbind();\n };\n }, [fallbackAppKey]);\n\n return appKey;\n}\n"],"names":["useMsgCenterAppKey","fallbackAppKey","appKey","setAppKey","useState","getMsgCenterAppKey","useEffect","unsub","subscribeMsgCenterAppKey","next","unbind","bindMsgCenterAppKeyStorageSync"],"mappings":";;AAQO,SAASA,EAAmBC,GAAgC;AACjE,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,MAAMC,EAAmBJ,CAAc,CAAC;AAE7E,SAAAK,EAAU,MAAM;AACd,IAAAH,EAAUE,EAAmBJ,CAAc,CAAC;AAC5C,UAAMM,IAAQC,EAAyB,CAACC,MAAS;AAC/C,MAAAN,EAAUM,KAAQJ,EAAmBJ,CAAc,CAAC;AAAA,IACtD,CAAC,GACKS,IAASC,EAAA;AACf,WAAO,MAAM;AACX,MAAAJ,EAAA,GACAG,EAAA;AAAA,IACF;AAAA,EACF,GAAG,CAACT,CAAc,CAAC,GAEZC;AACT;"}
|
|
@@ -2,4 +2,5 @@ export { InboxBell } from './Inbox';
|
|
|
2
2
|
export type { InboxBellItem, InboxBellListResult, InboxBellListParams, InboxBellProps, InboxBellMessageType, } from './Inbox';
|
|
3
3
|
export { MessageTemplateAdmin } from './MessageCenter';
|
|
4
4
|
export type { MessageTemplateAdminProps, MessageTemplateAdminItem, MessageEventCatalogItem, MessageEventCatalogPayload, MessageAudienceRoleOption, MessageTemplateVariable, MessageTemplateVariableAdmin, PushRuleAdminItem, MessageCrudFlags, MessageAdminPermissions, } from './MessageCenter';
|
|
5
|
-
export { generateTemplateCode, normalizeTemplatePlaceholders, applyTemplateVars, resolveMessageAdminPermissions, } from './MessageCenter';
|
|
5
|
+
export { generateTemplateCode, normalizeTemplatePlaceholders, applyTemplateVars, resolveMessageAdminPermissions, MSG_CENTER_APP_SWITCH_STORAGE_KEY, SYSTEM_APP_TO_MSG_CENTER_APP_KEY, MSG_CENTER_SWITCHABLE_APP_KEYS, msgCenterAppKeyFromSystemAppCode, filterMsgCenterSwitchableApps, getMsgCenterAppKey, setMsgCenterAppKey, subscribeMsgCenterAppKey, bindMsgCenterAppKeyStorageSync, resolveMsgCenterSwitchState, useMsgCenterAppKey, MsgCenterAppSwitcher, } from './MessageCenter';
|
|
6
|
+
export type { MsgCenterAppSwitchState, MsgCenterSwitchableApp, MsgCenterSwitchableAppKey, MsgCenterAppSwitcherProps, } from './MessageCenter';
|