@hkyhy/marsun-components-core 0.1.46 → 0.1.49
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/_virtual/zh-cn.js +3 -0
- package/dist/_virtual/zh-cn.js.map +1 -0
- package/dist/_virtual/zh-cn2.js +5 -0
- package/dist/_virtual/zh-cn2.js.map +1 -0
- package/dist/components/Filter/FilterDatePicker/index.js +10 -9
- package/dist/components/Filter/FilterDatePicker/index.js.map +1 -1
- package/dist/components/Filter/FilterDateRange/index.js +3 -2
- package/dist/components/Filter/FilterDateRange/index.js.map +1 -1
- package/dist/components/Form/index.d.ts +1 -1
- package/dist/components/Form/kneFormInfo.d.ts +2 -0
- package/dist/components/Form/kneFormInfo.js +18 -17
- package/dist/components/Form/kneFormInfo.js.map +1 -1
- package/dist/components/OrgTree/OrgTree.js +52 -43
- package/dist/components/OrgTree/OrgTree.js.map +1 -1
- package/dist/components/OrgTree/style.module.scss.js +5 -5
- package/dist/components/PermissionBindPanel/PermissionBindPanel.d.ts +4 -1
- package/dist/components/PermissionBindPanel/PermissionBindPanel.js +121 -117
- package/dist/components/PermissionBindPanel/PermissionBindPanel.js.map +1 -1
- package/dist/components/ReactFilter/common/TypeDateRangePickerField/index.js +31 -30
- package/dist/components/ReactFilter/common/TypeDateRangePickerField/index.js.map +1 -1
- package/dist/components/ReactFilter/fields/DatePickerFilterItem.js +7 -6
- package/dist/components/ReactFilter/fields/DatePickerFilterItem.js.map +1 -1
- package/dist/components/ReactFilter/fields/DateRangePickerFilterItem.js +3 -2
- package/dist/components/ReactFilter/fields/DateRangePickerFilterItem.js.map +1 -1
- package/dist/components/ReactFilter/fields/TypeDateRangePickerFilterItem.js +11 -10
- package/dist/components/ReactFilter/fields/TypeDateRangePickerFilterItem.js.map +1 -1
- package/dist/components/SegmentedRadio/SegmentedRadio.d.ts +29 -0
- package/dist/components/SegmentedRadio/SegmentedRadio.js +48 -0
- package/dist/components/SegmentedRadio/SegmentedRadio.js.map +1 -0
- package/dist/components/SegmentedRadio/index.d.ts +2 -0
- package/dist/components/SegmentedRadio/style.module.scss.js +9 -0
- package/dist/components/SegmentedRadio/style.module.scss.js.map +1 -0
- package/dist/components/Stat/StatCard/index.d.ts +4 -0
- package/dist/components/Stat/StatCard/index.js +45 -29
- package/dist/components/Stat/StatCard/index.js.map +1 -1
- package/dist/components/Stat/StatCardList.d.ts +0 -2
- package/dist/components/Stat/StatCardList.js.map +1 -1
- package/dist/components/Tag/Tags/index.d.ts +2 -2
- package/dist/components/Tag/Tags/index.js +37 -22
- package/dist/components/Tag/Tags/index.js.map +1 -1
- package/dist/components/Tag/Tags/style.module.scss.js +3 -3
- package/dist/components/TooltipInfo/TooltipInfo.js +14 -8
- package/dist/components/TooltipInfo/TooltipInfo.js.map +1 -1
- package/dist/components/Upload/index.d.ts +6 -23
- package/dist/components/Upload/index.js +254 -141
- package/dist/components/Upload/index.js.map +1 -1
- package/dist/components/Upload/style.module.scss.js +22 -15
- package/dist/components/Upload/style.module.scss.js.map +1 -1
- package/dist/components/index.d.ts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +580 -576
- package/dist/index.js.map +1 -1
- package/dist/marsun-components-core.css +1 -1
- package/dist/node_modules/dayjs/locale/zh-cn.js +25 -0
- package/dist/node_modules/dayjs/locale/zh-cn.js.map +1 -0
- package/dist/provider/MarsunCoreProvider.js +10 -9
- package/dist/provider/MarsunCoreProvider.js.map +1 -1
- package/dist/styles/global.css +1 -1
- package/dist/utils/ensureDayjsZhCn.d.ts +0 -0
- package/dist/utils/ensureDayjsZhCn.js +4 -0
- package/dist/utils/ensureDayjsZhCn.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zh-cn.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zh-cn2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsxs as T, jsx as O } from "react/jsx-runtime";
|
|
2
2
|
import { DatePicker as Y } from "antd";
|
|
3
3
|
import w from "dayjs";
|
|
4
|
+
import "../../../utils/ensureDayjsZhCn.js";
|
|
4
5
|
import { useState as P, useRef as z, useMemo as M, useEffect as R } from "react";
|
|
5
6
|
import { parsePickerValue as m, formatPickerValue as G } from "../../../utils/pickerDate.js";
|
|
6
7
|
import J from "../FilterPopover/index.js";
|
|
@@ -20,25 +21,25 @@ function Z(t, l, e) {
|
|
|
20
21
|
const i = m(t, l);
|
|
21
22
|
if (!i.isValid()) return null;
|
|
22
23
|
for (const s of e) {
|
|
23
|
-
const d = s.getValue(),
|
|
24
|
-
if (d.isSame(i,
|
|
24
|
+
const d = s.getValue(), p = l === "year" ? "year" : l === "month" ? "month" : "day";
|
|
25
|
+
if (d.isSame(i, p)) return s.key;
|
|
25
26
|
}
|
|
26
27
|
return null;
|
|
27
28
|
}
|
|
28
|
-
const
|
|
29
|
+
const fe = ({
|
|
29
30
|
filterKey: t,
|
|
30
31
|
label: l,
|
|
31
32
|
value: e,
|
|
32
33
|
onChange: i,
|
|
33
34
|
picker: s = "date",
|
|
34
35
|
defaultValue: d,
|
|
35
|
-
showDefaultAsSelected:
|
|
36
|
+
showDefaultAsSelected: p = !1,
|
|
36
37
|
showQuickOptions: N = !1,
|
|
37
38
|
quickOptions: x,
|
|
38
39
|
placeholder: A,
|
|
39
40
|
disabledDate: B,
|
|
40
41
|
active: L,
|
|
41
|
-
hidden:
|
|
42
|
+
hidden: k,
|
|
42
43
|
dependsOn: g,
|
|
43
44
|
clearOnDepsChange: E = !0
|
|
44
45
|
}) => {
|
|
@@ -65,10 +66,10 @@ const ae = ({
|
|
|
65
66
|
R(() => {
|
|
66
67
|
e ? (n(m(e, s)), h(e)) : (n(null), o(null));
|
|
67
68
|
}, [e, s, f]);
|
|
68
|
-
const b =
|
|
69
|
+
const b = p ? !!e : !!e && !X(e, d), F = M(() => !b || !e ? "" : e, [b, e]);
|
|
69
70
|
return R(() => {
|
|
70
71
|
if (a) {
|
|
71
|
-
if (S(
|
|
72
|
+
if (S(k)) {
|
|
72
73
|
a.unregister(t);
|
|
73
74
|
return;
|
|
74
75
|
}
|
|
@@ -78,7 +79,7 @@ const ae = ({
|
|
|
78
79
|
onRemove: () => i == null ? void 0 : i(null)
|
|
79
80
|
}) : a.unregister(t);
|
|
80
81
|
}
|
|
81
|
-
}, [F, t, D,
|
|
82
|
+
}, [F, t, D, k]), S(k) ? null : /* @__PURE__ */ T(
|
|
82
83
|
J,
|
|
83
84
|
{
|
|
84
85
|
label: D,
|
|
@@ -138,7 +139,7 @@ const ae = ({
|
|
|
138
139
|
);
|
|
139
140
|
};
|
|
140
141
|
export {
|
|
141
|
-
|
|
142
|
+
fe as default,
|
|
142
143
|
Z as findMatchingQuickKey,
|
|
143
144
|
W as getBuiltInQuickOptions,
|
|
144
145
|
X as isSamePickerValue
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterDatePicker/index.tsx"],"sourcesContent":["import { DatePicker } from 'antd';\nimport dayjs, { type Dayjs } from 'dayjs';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n formatPickerValue,\n parsePickerValue,\n type DatePickerGranularity,\n} from '@/utils/pickerDate';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport { useFilterFieldBridge, useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\n/** 单值快捷选项 */\ninterface SingleQuickOption {\n key: string;\n label: string;\n getValue: () => Dayjs;\n}\n\ninterface FilterDatePickerProps extends BaseFilterProps {\n value?: string | null;\n onChange?: (value: string | null) => void;\n /** 选择粒度:日 / 月 / 年 */\n picker?: DatePickerGranularity;\n /** 默认值:与默认相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: string;\n /** 为 true 时,value 等于 defaultValue 仍展示在已选 Tag 中 */\n showDefaultAsSelected?: boolean;\n showQuickOptions?: boolean;\n quickOptions?: SingleQuickOption[];\n placeholder?: string;\n disabledDate?: (current: Dayjs) => boolean;\n}\n\nfunction getBuiltInQuickOptions(picker: DatePickerGranularity): SingleQuickOption[] {\n const now = dayjs();\n if (picker === 'year') {\n return [{ key: 'thisYear', label: '今年', getValue: () => now.startOf('year') }];\n }\n if (picker === 'month') {\n return [{ key: 'thisMonth', label: '本月', getValue: () => now.startOf('month') }];\n }\n return [{ key: 'today', label: '今天', getValue: () => now.startOf('day') }];\n}\n\nfunction isSamePickerValue(a?: string | null, b?: string): boolean {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return a === b;\n}\n\nfunction findMatchingQuickKey(\n value: string | null | undefined,\n picker: DatePickerGranularity,\n opts: SingleQuickOption[],\n): string | null {\n if (!value) return null;\n const current = parsePickerValue(value, picker);\n if (!current.isValid()) return null;\n for (const opt of opts) {\n const candidate = opt.getValue();\n const unit = picker === 'year' ? 'year' : picker === 'month' ? 'month' : 'day';\n if (candidate.isSame(current, unit)) return opt.key;\n }\n return null;\n}\n\nconst FilterDatePicker: React.FC<FilterDatePickerProps> = ({\n filterKey,\n label,\n value,\n onChange,\n picker = 'date',\n defaultValue,\n showDefaultAsSelected = false,\n showQuickOptions = false,\n quickOptions,\n placeholder,\n disabledDate,\n active,\n hidden,\n dependsOn,\n clearOnDepsChange = true,\n}) => {\n const [open, setOpen] = useState(false);\n const [draft, setDraft] = useState<Dayjs | null>(value ? parsePickerValue(value, picker) : null);\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const { resolvedLabel } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(null),\n });\n\n const registerFn = useFilterRegister();\n const opts = useMemo(\n () => quickOptions ?? (showQuickOptions ? getBuiltInQuickOptions(picker) : []),\n [quickOptions, showQuickOptions, picker],\n );\n\n const syncActiveQuickKey = (nextValue: string | null | undefined) => {\n setActiveQuickKey(findMatchingQuickKey(nextValue, picker, opts));\n };\n\n const revertToCommitted = () => {\n if (value) {\n setDraft(parsePickerValue(value, picker));\n syncActiveQuickKey(value);\n } else {\n setDraft(null);\n setActiveQuickKey(null);\n }\n };\n\n useEffect(() => {\n if (value) {\n setDraft(parsePickerValue(value, picker));\n syncActiveQuickKey(value);\n } else {\n setDraft(null);\n setActiveQuickKey(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, picker, opts]);\n\n const hasNonDefaultValue = showDefaultAsSelected\n ? !!value\n : !!value && !isSamePickerValue(value, defaultValue);\n\n const valueLabel = useMemo(() => {\n if (!hasNonDefaultValue || !value) return '';\n return value;\n }, [hasNonDefaultValue, value]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel,\n onRemove: () => onChange?.(null),\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, resolvedLabel, hidden]);\n\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (draft) {\n onChange?.(formatPickerValue(draft, picker));\n } else {\n onChange?.(null);\n }\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n revertToCommitted();\n setOpen(nextOpen);\n };\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || hasNonDefaultValue}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={handleConfirm}\n onReset={handleDiscardDraft}\n >\n {opts.length > 0 ? (\n <div\n className={classNames(\n 'filter-date-picker-quick-options',\n styles['filter-date-picker-quick-options'],\n )}\n >\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames(\n 'filter-date-picker-quick-option',\n styles['filter-date-picker-quick-option'],\n activeQuickKey === opt.key && 'filter-date-picker-quick-option-active',\n activeQuickKey === opt.key && styles['filter-date-picker-quick-option-active'],\n )}\n onClick={() => {\n const next = opt.getValue();\n setDraft(next);\n setActiveQuickKey(opt.key);\n }}\n >\n {opt.label}\n </span>\n ))}\n </div>\n ) : null}\n <DatePicker\n className={classNames('filter-date-picker', styles['filter-date-picker'])}\n picker={picker}\n value={draft}\n placeholder={placeholder}\n disabledDate={disabledDate}\n onChange={(next) => {\n setDraft(next);\n setActiveQuickKey(null);\n }}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterDatePicker;\nexport type { FilterDatePickerProps, SingleQuickOption };\nexport { findMatchingQuickKey, getBuiltInQuickOptions, isSamePickerValue };\n"],"names":["getBuiltInQuickOptions","picker","now","dayjs","isSamePickerValue","a","b","findMatchingQuickKey","value","opts","current","parsePickerValue","opt","candidate","unit","FilterDatePicker","filterKey","label","onChange","defaultValue","showDefaultAsSelected","showQuickOptions","quickOptions","placeholder","disabledDate","active","hidden","dependsOn","clearOnDepsChange","open","setOpen","useState","draft","setDraft","activeQuickKey","setActiveQuickKey","onChangeRef","useRef","resolvedLabel","useFilterFieldBridge","_a","registerFn","useFilterRegister","useMemo","syncActiveQuickKey","nextValue","revertToCommitted","useEffect","hasNonDefaultValue","valueLabel","resolveHidden","jsxs","FilterPopover","nextOpen","formatPickerValue","jsx","classNames","styles","next","DatePicker"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterDatePicker/index.tsx"],"sourcesContent":["import { DatePicker } from 'antd';\nimport dayjs, { type Dayjs } from 'dayjs';\nimport '@/utils/ensureDayjsZhCn';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n formatPickerValue,\n parsePickerValue,\n type DatePickerGranularity,\n} from '@/utils/pickerDate';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport { useFilterFieldBridge, useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\n/** 单值快捷选项 */\ninterface SingleQuickOption {\n key: string;\n label: string;\n getValue: () => Dayjs;\n}\n\ninterface FilterDatePickerProps extends BaseFilterProps {\n value?: string | null;\n onChange?: (value: string | null) => void;\n /** 选择粒度:日 / 月 / 年 */\n picker?: DatePickerGranularity;\n /** 默认值:与默认相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: string;\n /** 为 true 时,value 等于 defaultValue 仍展示在已选 Tag 中 */\n showDefaultAsSelected?: boolean;\n showQuickOptions?: boolean;\n quickOptions?: SingleQuickOption[];\n placeholder?: string;\n disabledDate?: (current: Dayjs) => boolean;\n}\n\nfunction getBuiltInQuickOptions(picker: DatePickerGranularity): SingleQuickOption[] {\n const now = dayjs();\n if (picker === 'year') {\n return [{ key: 'thisYear', label: '今年', getValue: () => now.startOf('year') }];\n }\n if (picker === 'month') {\n return [{ key: 'thisMonth', label: '本月', getValue: () => now.startOf('month') }];\n }\n return [{ key: 'today', label: '今天', getValue: () => now.startOf('day') }];\n}\n\nfunction isSamePickerValue(a?: string | null, b?: string): boolean {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return a === b;\n}\n\nfunction findMatchingQuickKey(\n value: string | null | undefined,\n picker: DatePickerGranularity,\n opts: SingleQuickOption[],\n): string | null {\n if (!value) return null;\n const current = parsePickerValue(value, picker);\n if (!current.isValid()) return null;\n for (const opt of opts) {\n const candidate = opt.getValue();\n const unit = picker === 'year' ? 'year' : picker === 'month' ? 'month' : 'day';\n if (candidate.isSame(current, unit)) return opt.key;\n }\n return null;\n}\n\nconst FilterDatePicker: React.FC<FilterDatePickerProps> = ({\n filterKey,\n label,\n value,\n onChange,\n picker = 'date',\n defaultValue,\n showDefaultAsSelected = false,\n showQuickOptions = false,\n quickOptions,\n placeholder,\n disabledDate,\n active,\n hidden,\n dependsOn,\n clearOnDepsChange = true,\n}) => {\n const [open, setOpen] = useState(false);\n const [draft, setDraft] = useState<Dayjs | null>(value ? parsePickerValue(value, picker) : null);\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const { resolvedLabel } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(null),\n });\n\n const registerFn = useFilterRegister();\n const opts = useMemo(\n () => quickOptions ?? (showQuickOptions ? getBuiltInQuickOptions(picker) : []),\n [quickOptions, showQuickOptions, picker],\n );\n\n const syncActiveQuickKey = (nextValue: string | null | undefined) => {\n setActiveQuickKey(findMatchingQuickKey(nextValue, picker, opts));\n };\n\n const revertToCommitted = () => {\n if (value) {\n setDraft(parsePickerValue(value, picker));\n syncActiveQuickKey(value);\n } else {\n setDraft(null);\n setActiveQuickKey(null);\n }\n };\n\n useEffect(() => {\n if (value) {\n setDraft(parsePickerValue(value, picker));\n syncActiveQuickKey(value);\n } else {\n setDraft(null);\n setActiveQuickKey(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, picker, opts]);\n\n const hasNonDefaultValue = showDefaultAsSelected\n ? !!value\n : !!value && !isSamePickerValue(value, defaultValue);\n\n const valueLabel = useMemo(() => {\n if (!hasNonDefaultValue || !value) return '';\n return value;\n }, [hasNonDefaultValue, value]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel,\n onRemove: () => onChange?.(null),\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, resolvedLabel, hidden]);\n\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (draft) {\n onChange?.(formatPickerValue(draft, picker));\n } else {\n onChange?.(null);\n }\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n revertToCommitted();\n setOpen(nextOpen);\n };\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || hasNonDefaultValue}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={handleConfirm}\n onReset={handleDiscardDraft}\n >\n {opts.length > 0 ? (\n <div\n className={classNames(\n 'filter-date-picker-quick-options',\n styles['filter-date-picker-quick-options'],\n )}\n >\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames(\n 'filter-date-picker-quick-option',\n styles['filter-date-picker-quick-option'],\n activeQuickKey === opt.key && 'filter-date-picker-quick-option-active',\n activeQuickKey === opt.key && styles['filter-date-picker-quick-option-active'],\n )}\n onClick={() => {\n const next = opt.getValue();\n setDraft(next);\n setActiveQuickKey(opt.key);\n }}\n >\n {opt.label}\n </span>\n ))}\n </div>\n ) : null}\n <DatePicker\n className={classNames('filter-date-picker', styles['filter-date-picker'])}\n picker={picker}\n value={draft}\n placeholder={placeholder}\n disabledDate={disabledDate}\n onChange={(next) => {\n setDraft(next);\n setActiveQuickKey(null);\n }}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterDatePicker;\nexport type { FilterDatePickerProps, SingleQuickOption };\nexport { findMatchingQuickKey, getBuiltInQuickOptions, isSamePickerValue };\n"],"names":["getBuiltInQuickOptions","picker","now","dayjs","isSamePickerValue","a","b","findMatchingQuickKey","value","opts","current","parsePickerValue","opt","candidate","unit","FilterDatePicker","filterKey","label","onChange","defaultValue","showDefaultAsSelected","showQuickOptions","quickOptions","placeholder","disabledDate","active","hidden","dependsOn","clearOnDepsChange","open","setOpen","useState","draft","setDraft","activeQuickKey","setActiveQuickKey","onChangeRef","useRef","resolvedLabel","useFilterFieldBridge","_a","registerFn","useFilterRegister","useMemo","syncActiveQuickKey","nextValue","revertToCommitted","useEffect","hasNonDefaultValue","valueLabel","resolveHidden","jsxs","FilterPopover","nextOpen","formatPickerValue","jsx","classNames","styles","next","DatePicker"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsxs as W, jsx as R } from "react/jsx-runtime";
|
|
2
2
|
import { DatePicker as $ } from "antd";
|
|
3
3
|
import d from "dayjs";
|
|
4
|
+
import "../../../utils/ensureDayjsZhCn.js";
|
|
4
5
|
import { useState as q, useRef as E, useMemo as x, useEffect as A } from "react";
|
|
5
6
|
import { parsePickerValue as f, formatPickerValue as B } from "../../../utils/pickerDate.js";
|
|
6
7
|
import H from "../FilterPopover/index.js";
|
|
@@ -55,7 +56,7 @@ function b(e, r, t) {
|
|
|
55
56
|
}
|
|
56
57
|
return null;
|
|
57
58
|
}
|
|
58
|
-
const
|
|
59
|
+
const ut = ({
|
|
59
60
|
filterKey: e,
|
|
60
61
|
label: r,
|
|
61
62
|
value: t,
|
|
@@ -168,7 +169,7 @@ const dt = ({
|
|
|
168
169
|
);
|
|
169
170
|
};
|
|
170
171
|
export {
|
|
171
|
-
|
|
172
|
+
ut as default,
|
|
172
173
|
b as findMatchingQuickKey,
|
|
173
174
|
K as getBuiltInMonthOptions,
|
|
174
175
|
X as isSameRange
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterDateRange/index.tsx"],"sourcesContent":["import { DatePicker } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n formatPickerValue,\n parsePickerValue,\n type DatePickerGranularity,\n} from '@/utils/pickerDate';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport { useFilterFieldBridge, useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { RangePicker } = DatePicker;\n\n/** 快捷选项配置类型 */\ninterface QuickOption {\n key: string;\n label: string;\n getValue: () => [Dayjs, Dayjs] | null;\n}\n\n/** 内置快捷选项(日粒度) */\nconst BUILT_IN_DAY_OPTIONS: QuickOption[] = [\n {\n key: 'lastWeek',\n label: '上周',\n getValue: () => [\n dayjs().subtract(1, 'week').startOf('week'),\n dayjs().subtract(1, 'week').endOf('week'),\n ],\n },\n {\n key: 'thisWeek',\n label: '本周',\n getValue: () => [dayjs().startOf('week'), dayjs().endOf('week')],\n },\n];\n\nfunction getBuiltInMonthOptions(): QuickOption[] {\n const end = dayjs().startOf('month');\n return [\n { key: '1m', label: '近1月', getValue: () => [end, end] },\n {\n key: '3m',\n label: '近3月',\n getValue: () => [end.subtract(2, 'month'), end],\n },\n {\n key: '6m',\n label: '近6月',\n getValue: () => [end.subtract(5, 'month'), end],\n },\n ];\n}\n\ninterface FilterDateRangeProps extends BaseFilterProps {\n value?: [string, string] | null;\n onChange?: (value: [string, string] | null) => void;\n /** 选择粒度:日 / 月 / 年 */\n picker?: DatePickerGranularity;\n /** 默认区间:与默认相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: [string, string];\n /** 为 true 时,value 等于 defaultValue 仍展示在已选 Tag 中 */\n showDefaultAsSelected?: boolean;\n showQuickOptions?: boolean;\n quickOptions?: QuickOption[];\n disabledDate?: (current: Dayjs) => boolean;\n}\n\nfunction isSameRange(a?: [string, string] | null, b?: [string, string]): boolean {\n if (!a?.[0] || !a?.[1]) return !b?.[0] || !b?.[1];\n if (!b?.[0] || !b?.[1]) return false;\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction rangeUnit(picker: DatePickerGranularity): 'day' | 'month' | 'year' {\n if (picker === 'month') return 'month';\n if (picker === 'year') return 'year';\n return 'day';\n}\n\nfunction findMatchingQuickKey(\n range: [string, string] | null | undefined,\n opts: QuickOption[],\n picker: DatePickerGranularity,\n): string | null {\n if (!range?.[0] || !range?.[1]) return null;\n const start = parsePickerValue(range[0], picker);\n const end = parsePickerValue(range[1], picker);\n const unit = rangeUnit(picker);\n for (const opt of opts) {\n const v = opt.getValue();\n if (v && v[0].isSame(start, unit) && v[1].isSame(end, unit)) {\n return opt.key;\n }\n }\n return null;\n}\n\nconst FilterDateRange: React.FC<FilterDateRangeProps> = ({\n filterKey,\n label,\n value,\n onChange,\n picker = 'date',\n defaultValue,\n showDefaultAsSelected = false,\n showQuickOptions = true,\n quickOptions,\n disabledDate,\n active,\n hidden,\n dependsOn,\n clearOnDepsChange = true,\n}) => {\n const [open, setOpen] = useState(false);\n const [dates, setDates] = useState<[Dayjs | null, Dayjs | null] | null>(\n value ? [parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)] : null,\n );\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const { resolvedLabel } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(null),\n });\n\n const registerFn = useFilterRegister();\n const opts = useMemo(\n () =>\n quickOptions ??\n (showQuickOptions\n ? picker === 'month'\n ? getBuiltInMonthOptions()\n : BUILT_IN_DAY_OPTIONS\n : []),\n [quickOptions, showQuickOptions, picker],\n );\n\n const syncActiveQuickKey = (range: [string, string] | null | undefined) => {\n setActiveQuickKey(findMatchingQuickKey(range, opts, picker));\n };\n\n const revertToCommitted = () => {\n if (value?.[0] && value?.[1]) {\n setDates([parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)]);\n syncActiveQuickKey(value);\n } else {\n setDates(null);\n setActiveQuickKey(null);\n }\n };\n\n useEffect(() => {\n if (value?.[0] && value?.[1]) {\n setDates([parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)]);\n syncActiveQuickKey(value);\n } else {\n setDates(null);\n setActiveQuickKey(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, opts, picker]);\n\n const hasNonDefaultValue = showDefaultAsSelected\n ? !!value?.[0]\n : !!value?.[0] && !isSameRange(value, defaultValue);\n\n const valueLabel = useMemo(() => {\n if (!hasNonDefaultValue || !value?.[0] || !value?.[1]) return '';\n return `${value[0]} ~ ${value[1]}`;\n }, [hasNonDefaultValue, value]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel,\n onRemove: () => onChange?.(null),\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, resolvedLabel, hidden]);\n\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (dates?.[0] && dates?.[1]) {\n onChange?.([formatPickerValue(dates[0], picker), formatPickerValue(dates[1], picker)]);\n } else {\n onChange?.(null);\n }\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n revertToCommitted();\n setOpen(nextOpen);\n };\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || hasNonDefaultValue}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={handleConfirm}\n onReset={handleDiscardDraft}\n >\n {opts.length > 0 && (\n <div\n className={classNames(\n 'filter-date-range-quick-options',\n styles['filter-date-range-quick-options'],\n )}\n >\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames(\n 'filter-date-range-quick-option',\n styles['filter-date-range-quick-option'],\n activeQuickKey === opt.key && 'filter-date-range-quick-option-active',\n activeQuickKey === opt.key && styles['filter-date-range-quick-option-active'],\n )}\n onClick={() => {\n const v = opt.getValue();\n if (v) {\n setDates(v);\n setActiveQuickKey(opt.key);\n }\n }}\n >\n {opt.label}\n </span>\n ))}\n </div>\n )}\n <RangePicker\n className={classNames('filter-date-range-picker', styles['filter-date-range-picker'])}\n picker={picker}\n value={dates}\n disabledDate={disabledDate}\n onChange={(vals) => {\n setDates(vals as [Dayjs | null, Dayjs | null] | null);\n setActiveQuickKey(null);\n }}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterDateRange;\nexport type { FilterDateRangeProps, QuickOption };\nexport { findMatchingQuickKey, isSameRange, getBuiltInMonthOptions };\n"],"names":["RangePicker","DatePicker","BUILT_IN_DAY_OPTIONS","dayjs","getBuiltInMonthOptions","end","isSameRange","a","b","rangeUnit","picker","findMatchingQuickKey","range","opts","start","parsePickerValue","unit","opt","v","FilterDateRange","filterKey","label","value","onChange","defaultValue","showDefaultAsSelected","showQuickOptions","quickOptions","disabledDate","active","hidden","dependsOn","clearOnDepsChange","open","setOpen","useState","dates","setDates","activeQuickKey","setActiveQuickKey","onChangeRef","useRef","resolvedLabel","useFilterFieldBridge","_a","registerFn","useFilterRegister","useMemo","syncActiveQuickKey","revertToCommitted","useEffect","hasNonDefaultValue","valueLabel","resolveHidden","jsxs","FilterPopover","nextOpen","formatPickerValue","jsx","classNames","styles","vals"],"mappings":";;;;;;;;;;AAeA,MAAM,EAAE,aAAAA,MAAgBC,GAUlBC,IAAsC;AAAA,EAC1C;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU,MAAM;AAAA,MACdC,IAAQ,SAAS,GAAG,MAAM,EAAE,QAAQ,MAAM;AAAA,MAC1CA,IAAQ,SAAS,GAAG,MAAM,EAAE,MAAM,MAAM;AAAA,IAAA;AAAA,EAC1C;AAAA,EAEF;AAAA,IACE,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU,MAAM,CAACA,EAAA,EAAQ,QAAQ,MAAM,GAAGA,EAAA,EAAQ,MAAM,MAAM,CAAC;AAAA,EAAA;AAEnE;AAEA,SAASC,IAAwC;AAC/C,QAAMC,IAAMF,IAAQ,QAAQ,OAAO;AACnC,SAAO;AAAA,IACL,EAAE,KAAK,MAAM,OAAO,OAAO,UAAU,MAAM,CAACE,GAAKA,CAAG,EAAA;AAAA,IACpD;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,UAAU,MAAM,CAACA,EAAI,SAAS,GAAG,OAAO,GAAGA,CAAG;AAAA,IAAA;AAAA,IAEhD;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,UAAU,MAAM,CAACA,EAAI,SAAS,GAAG,OAAO,GAAGA,CAAG;AAAA,IAAA;AAAA,EAChD;AAEJ;AAgBA,SAASC,EAAYC,GAA6BC,GAA+B;AAC/E,SAAI,EAACD,KAAA,QAAAA,EAAI,OAAM,EAACA,KAAA,QAAAA,EAAI,MAAW,EAACC,KAAA,QAAAA,EAAI,OAAM,EAACA,KAAA,QAAAA,EAAI,MAC3C,EAACA,KAAA,QAAAA,EAAI,OAAM,EAACA,KAAA,QAAAA,EAAI,MAAW,KACxBD,EAAE,CAAC,MAAMC,EAAE,CAAC,KAAKD,EAAE,CAAC,MAAMC,EAAE,CAAC;AACtC;AAEA,SAASC,EAAUC,GAAyD;AAC1E,SAAIA,MAAW,UAAgB,UAC3BA,MAAW,SAAe,SACvB;AACT;AAEA,SAASC,EACPC,GACAC,GACAH,GACe;AACf,MAAI,EAACE,KAAA,QAAAA,EAAQ,OAAM,EAACA,KAAA,QAAAA,EAAQ,IAAI,QAAO;AACvC,QAAME,IAAQC,EAAiBH,EAAM,CAAC,GAAGF,CAAM,GACzCL,IAAMU,EAAiBH,EAAM,CAAC,GAAGF,CAAM,GACvCM,IAAOP,EAAUC,CAAM;AAC7B,aAAWO,KAAOJ,GAAM;AACtB,UAAMK,IAAID,EAAI,SAAA;AACd,QAAIC,KAAKA,EAAE,CAAC,EAAE,OAAOJ,GAAOE,CAAI,KAAKE,EAAE,CAAC,EAAE,OAAOb,GAAKW,CAAI;AACxD,aAAOC,EAAI;AAAA,EAEf;AACA,SAAO;AACT;AAEA,MAAME,KAAkD,CAAC;AAAA,EACvD,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAb,IAAS;AAAA,EACT,cAAAc;AAAA,EACA,uBAAAC,IAAwB;AAAA,EACxB,kBAAAC,IAAmB;AAAA,EACnB,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,mBAAAC,IAAoB;AACtB,MAAM;AACJ,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChC,CAACC,GAAOC,CAAQ,IAAIF;AAAA,IACxBb,IAAQ,CAACP,EAAiBO,EAAM,CAAC,GAAGZ,CAAM,GAAGK,EAAiBO,EAAM,CAAC,GAAGZ,CAAM,CAAC,IAAI;AAAA,EAAA,GAE/E,CAAC4B,GAAgBC,CAAiB,IAAIJ,EAAwB,IAAI,GAElEK,IAAcC,EAAOlB,CAAQ;AACnC,EAAAiB,EAAY,UAAUjB;AAEtB,QAAM,EAAE,eAAAmB,EAAA,IAAkBC,EAAqB;AAAA,IAC7C,WAAAvB;AAAA,IACA,OAAAE;AAAA,IACA,OAAAD;AAAA,IACA,WAAAU;AAAA,IACA,mBAAAC;AAAA,IACA,aAAa,MAAA;;AAAM,cAAAY,IAAAJ,EAAY,YAAZ,gBAAAI,EAAA,KAAAJ,GAAsB;AAAA;AAAA,EAAI,CAC9C,GAEKK,IAAaC,EAAA,GACbjC,IAAOkC;AAAA,IACX,MACEpB,MACCD,IACGhB,MAAW,UACTN,EAAA,IACAF,IACF;IACN,CAACyB,GAAcD,GAAkBhB,CAAM;AAAA,EAAA,GAGnCsC,IAAqB,CAACpC,MAA+C;AACzE,IAAA2B,EAAkB5B,EAAqBC,GAAOC,GAAMH,CAAM,CAAC;AAAA,EAC7D,GAEMuC,IAAoB,MAAM;AAC9B,IAAI3B,KAAA,QAAAA,EAAQ,OAAMA,KAAA,QAAAA,EAAQ,OACxBe,EAAS,CAACtB,EAAiBO,EAAM,CAAC,GAAGZ,CAAM,GAAGK,EAAiBO,EAAM,CAAC,GAAGZ,CAAM,CAAC,CAAC,GACjFsC,EAAmB1B,CAAK,MAExBe,EAAS,IAAI,GACbE,EAAkB,IAAI;AAAA,EAE1B;AAEA,EAAAW,EAAU,MAAM;AACd,IAAI5B,KAAA,QAAAA,EAAQ,OAAMA,KAAA,QAAAA,EAAQ,OACxBe,EAAS,CAACtB,EAAiBO,EAAM,CAAC,GAAGZ,CAAM,GAAGK,EAAiBO,EAAM,CAAC,GAAGZ,CAAM,CAAC,CAAC,GACjFsC,EAAmB1B,CAAK,MAExBe,EAAS,IAAI,GACbE,EAAkB,IAAI;AAAA,EAG1B,GAAG,CAACjB,GAAOT,GAAMH,CAAM,CAAC;AAExB,QAAMyC,IAAqB1B,IACvB,CAAC,EAACH,KAAA,QAAAA,EAAQ,MACV,CAAC,EAACA,KAAA,QAAAA,EAAQ,OAAM,CAAChB,EAAYgB,GAAOE,CAAY,GAE9C4B,IAAaL,EAAQ,MACrB,CAACI,KAAsB,EAAC7B,KAAA,QAAAA,EAAQ,OAAM,EAACA,KAAA,QAAAA,EAAQ,MAAW,KACvD,GAAGA,EAAM,CAAC,CAAC,MAAMA,EAAM,CAAC,CAAC,IAC/B,CAAC6B,GAAoB7B,CAAK,CAAC;AAoB9B,SAlBA4B,EAAU,MAAM;AACd,QAAKL,GACL;AAAA,UAAIQ,EAAcvB,CAAM,GAAG;AACzB,QAAAe,EAAW,WAAWzB,CAAS;AAC/B;AAAA,MACF;AACA,MAAIgC,IACFP,EAAW,SAASzB,GAAW;AAAA,QAC7B,OAAOsB;AAAA,QACP,YAAAU;AAAA,QACA,UAAU,MAAM7B,KAAA,gBAAAA,EAAW;AAAA,MAAI,CAChC,IAEDsB,EAAW,WAAWzB,CAAS;AAAA;AAAA,EAGnC,GAAG,CAACgC,GAAYhC,GAAWsB,GAAeZ,CAAM,CAAC,GAE7CuB,EAAcvB,CAAM,IAAU,OAsBhC,gBAAAwB;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAOb;AAAA,MACP,QAAQb,KAAUsB;AAAA,MAClB,MAAAlB;AAAA,MACA,cAVqB,CAACuB,MAAsB;AAC9C,QAAAP,EAAA,GACAf,EAAQsB,CAAQ;AAAA,MAClB;AAAA,MAQI,WAzBkB,MAAM;AAC1B,QAAIpB,KAAA,QAAAA,EAAQ,OAAMA,KAAA,QAAAA,EAAQ,MACxBb,KAAA,QAAAA,EAAW,CAACkC,EAAkBrB,EAAM,CAAC,GAAG1B,CAAM,GAAG+C,EAAkBrB,EAAM,CAAC,GAAG1B,CAAM,CAAC,KAEpFa,KAAA,QAAAA,EAAW,OAEbW,EAAQ,EAAK;AAAA,MACf;AAAA,MAmBI,SAjBuB,MAAM;AAC/B,QAAAe,EAAA,GACAf,EAAQ,EAAK;AAAA,MACf;AAAA,MAgBK,UAAA;AAAA,QAAArB,EAAK,SAAS,KACb,gBAAA6C;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC;AAAA,cACT;AAAA,cACAC,EAAO,iCAAiC;AAAA,YAAA;AAAA,YAGzC,UAAA/C,EAAK,IAAI,CAACI,MACT,gBAAAyC;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAWC;AAAA,kBACT;AAAA,kBACAC,EAAO,gCAAgC;AAAA,kBACvCtB,MAAmBrB,EAAI,OAAO;AAAA,kBAC9BqB,MAAmBrB,EAAI,OAAO2C,EAAO,uCAAuC;AAAA,gBAAA;AAAA,gBAE9E,SAAS,MAAM;AACb,wBAAM1C,IAAID,EAAI,SAAA;AACd,kBAAIC,MACFmB,EAASnB,CAAC,GACVqB,EAAkBtB,EAAI,GAAG;AAAA,gBAE7B;AAAA,gBAEC,UAAAA,EAAI;AAAA,cAAA;AAAA,cAfAA,EAAI;AAAA,YAAA,CAiBZ;AAAA,UAAA;AAAA,QAAA;AAAA,QAGL,gBAAAyC;AAAA,UAAC1D;AAAA,UAAA;AAAA,YACC,WAAW2D,EAAW,4BAA4BC,EAAO,0BAA0B,CAAC;AAAA,YACpF,QAAAlD;AAAA,YACA,OAAO0B;AAAA,YACP,cAAAR;AAAA,YACA,UAAU,CAACiC,MAAS;AAClB,cAAAxB,EAASwB,CAA2C,GACpDtB,EAAkB,IAAI;AAAA,YACxB;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterDateRange/index.tsx"],"sourcesContent":["import { DatePicker } from 'antd';\nimport dayjs, { type Dayjs } from 'dayjs';\nimport '@/utils/ensureDayjsZhCn';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n formatPickerValue,\n parsePickerValue,\n type DatePickerGranularity,\n} from '@/utils/pickerDate';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport { useFilterFieldBridge, useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { RangePicker } = DatePicker;\n\n/** 快捷选项配置类型 */\ninterface QuickOption {\n key: string;\n label: string;\n getValue: () => [Dayjs, Dayjs] | null;\n}\n\n/** 内置快捷选项(日粒度) */\nconst BUILT_IN_DAY_OPTIONS: QuickOption[] = [\n {\n key: 'lastWeek',\n label: '上周',\n getValue: () => [\n dayjs().subtract(1, 'week').startOf('week'),\n dayjs().subtract(1, 'week').endOf('week'),\n ],\n },\n {\n key: 'thisWeek',\n label: '本周',\n getValue: () => [dayjs().startOf('week'), dayjs().endOf('week')],\n },\n];\n\nfunction getBuiltInMonthOptions(): QuickOption[] {\n const end = dayjs().startOf('month');\n return [\n { key: '1m', label: '近1月', getValue: () => [end, end] },\n {\n key: '3m',\n label: '近3月',\n getValue: () => [end.subtract(2, 'month'), end],\n },\n {\n key: '6m',\n label: '近6月',\n getValue: () => [end.subtract(5, 'month'), end],\n },\n ];\n}\n\ninterface FilterDateRangeProps extends BaseFilterProps {\n value?: [string, string] | null;\n onChange?: (value: [string, string] | null) => void;\n /** 选择粒度:日 / 月 / 年 */\n picker?: DatePickerGranularity;\n /** 默认区间:与默认相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: [string, string];\n /** 为 true 时,value 等于 defaultValue 仍展示在已选 Tag 中 */\n showDefaultAsSelected?: boolean;\n showQuickOptions?: boolean;\n quickOptions?: QuickOption[];\n disabledDate?: (current: Dayjs) => boolean;\n}\n\nfunction isSameRange(a?: [string, string] | null, b?: [string, string]): boolean {\n if (!a?.[0] || !a?.[1]) return !b?.[0] || !b?.[1];\n if (!b?.[0] || !b?.[1]) return false;\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction rangeUnit(picker: DatePickerGranularity): 'day' | 'month' | 'year' {\n if (picker === 'month') return 'month';\n if (picker === 'year') return 'year';\n return 'day';\n}\n\nfunction findMatchingQuickKey(\n range: [string, string] | null | undefined,\n opts: QuickOption[],\n picker: DatePickerGranularity,\n): string | null {\n if (!range?.[0] || !range?.[1]) return null;\n const start = parsePickerValue(range[0], picker);\n const end = parsePickerValue(range[1], picker);\n const unit = rangeUnit(picker);\n for (const opt of opts) {\n const v = opt.getValue();\n if (v && v[0].isSame(start, unit) && v[1].isSame(end, unit)) {\n return opt.key;\n }\n }\n return null;\n}\n\nconst FilterDateRange: React.FC<FilterDateRangeProps> = ({\n filterKey,\n label,\n value,\n onChange,\n picker = 'date',\n defaultValue,\n showDefaultAsSelected = false,\n showQuickOptions = true,\n quickOptions,\n disabledDate,\n active,\n hidden,\n dependsOn,\n clearOnDepsChange = true,\n}) => {\n const [open, setOpen] = useState(false);\n const [dates, setDates] = useState<[Dayjs | null, Dayjs | null] | null>(\n value ? [parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)] : null,\n );\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const { resolvedLabel } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(null),\n });\n\n const registerFn = useFilterRegister();\n const opts = useMemo(\n () =>\n quickOptions ??\n (showQuickOptions\n ? picker === 'month'\n ? getBuiltInMonthOptions()\n : BUILT_IN_DAY_OPTIONS\n : []),\n [quickOptions, showQuickOptions, picker],\n );\n\n const syncActiveQuickKey = (range: [string, string] | null | undefined) => {\n setActiveQuickKey(findMatchingQuickKey(range, opts, picker));\n };\n\n const revertToCommitted = () => {\n if (value?.[0] && value?.[1]) {\n setDates([parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)]);\n syncActiveQuickKey(value);\n } else {\n setDates(null);\n setActiveQuickKey(null);\n }\n };\n\n useEffect(() => {\n if (value?.[0] && value?.[1]) {\n setDates([parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)]);\n syncActiveQuickKey(value);\n } else {\n setDates(null);\n setActiveQuickKey(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, opts, picker]);\n\n const hasNonDefaultValue = showDefaultAsSelected\n ? !!value?.[0]\n : !!value?.[0] && !isSameRange(value, defaultValue);\n\n const valueLabel = useMemo(() => {\n if (!hasNonDefaultValue || !value?.[0] || !value?.[1]) return '';\n return `${value[0]} ~ ${value[1]}`;\n }, [hasNonDefaultValue, value]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel,\n onRemove: () => onChange?.(null),\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, resolvedLabel, hidden]);\n\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (dates?.[0] && dates?.[1]) {\n onChange?.([formatPickerValue(dates[0], picker), formatPickerValue(dates[1], picker)]);\n } else {\n onChange?.(null);\n }\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n revertToCommitted();\n setOpen(nextOpen);\n };\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || hasNonDefaultValue}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={handleConfirm}\n onReset={handleDiscardDraft}\n >\n {opts.length > 0 && (\n <div\n className={classNames(\n 'filter-date-range-quick-options',\n styles['filter-date-range-quick-options'],\n )}\n >\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames(\n 'filter-date-range-quick-option',\n styles['filter-date-range-quick-option'],\n activeQuickKey === opt.key && 'filter-date-range-quick-option-active',\n activeQuickKey === opt.key && styles['filter-date-range-quick-option-active'],\n )}\n onClick={() => {\n const v = opt.getValue();\n if (v) {\n setDates(v);\n setActiveQuickKey(opt.key);\n }\n }}\n >\n {opt.label}\n </span>\n ))}\n </div>\n )}\n <RangePicker\n className={classNames('filter-date-range-picker', styles['filter-date-range-picker'])}\n picker={picker}\n value={dates}\n disabledDate={disabledDate}\n onChange={(vals) => {\n setDates(vals as [Dayjs | null, Dayjs | null] | null);\n setActiveQuickKey(null);\n }}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterDateRange;\nexport type { FilterDateRangeProps, QuickOption };\nexport { findMatchingQuickKey, isSameRange, getBuiltInMonthOptions };\n"],"names":["RangePicker","DatePicker","BUILT_IN_DAY_OPTIONS","dayjs","getBuiltInMonthOptions","end","isSameRange","a","b","rangeUnit","picker","findMatchingQuickKey","range","opts","start","parsePickerValue","unit","opt","v","FilterDateRange","filterKey","label","value","onChange","defaultValue","showDefaultAsSelected","showQuickOptions","quickOptions","disabledDate","active","hidden","dependsOn","clearOnDepsChange","open","setOpen","useState","dates","setDates","activeQuickKey","setActiveQuickKey","onChangeRef","useRef","resolvedLabel","useFilterFieldBridge","_a","registerFn","useFilterRegister","useMemo","syncActiveQuickKey","revertToCommitted","useEffect","hasNonDefaultValue","valueLabel","resolveHidden","jsxs","FilterPopover","nextOpen","formatPickerValue","jsx","classNames","styles","vals"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ export type { PersonOptionRowProps } from './PersonOptionRow';
|
|
|
9
9
|
export { default as FormDataSync } from './FormDataSync';
|
|
10
10
|
export type { FormDataSyncProps } from './FormDataSync';
|
|
11
11
|
/** @kne/form-info — 业务从包根导入,勿直连 @kne/form-info */
|
|
12
|
-
export { FormInfo, Form, FormModal, FormSteps, FormStepsModal, List, TableList, MultiField, Input, TextArea, Select, InputNumber, Switch, RadioGroup, SubmitButton, ResetButton, CancelButton, } from './kneFormInfo';
|
|
12
|
+
export { FormInfo, Form, FormModal, FormSteps, FormStepsModal, List, TableList, MultiField, Input, TextArea, Select, InputNumber, Switch, RadioGroup, TreeSelect, SubmitButton, ResetButton, CancelButton, } from './kneFormInfo';
|
|
13
13
|
export type { FormInfoProps, FormProps, FormModalProps, FormStepsProps, FormStepsModalProps, ListProps, TableListProps, MultiFieldProps, } from './kneFormInfo';
|
|
14
14
|
/** @kne/react-form — 引擎 API;默认组件为 ReactForm(勿与 FormInfo 的 Form 混淆) */
|
|
15
15
|
export { ReactForm, GroupList, useField, useFormApi, useFormContext, useGroup, useSubmit, useReset, RULES, preset, interceptors, compileErrMsg, computedFieldValueFromFormData, computedFormDataFormState, filterEmpty, findField, formUtils, isEmpty, isNotEmpty, matchFields, stateToError, stateToIsPass, } from './kneReactForm';
|
|
@@ -43,6 +43,8 @@ export declare const Select: ComponentType<FieldProps>;
|
|
|
43
43
|
export declare const InputNumber: ComponentType<FieldProps>;
|
|
44
44
|
export declare const Switch: ComponentType<FieldProps>;
|
|
45
45
|
export declare const RadioGroup: ComponentType<FieldProps>;
|
|
46
|
+
/** 与 Input/Select 同源再导出,避免业务直连 @kne/react-form-antd 导致双 Context */
|
|
47
|
+
export declare const TreeSelect: ComponentType<FieldProps>;
|
|
46
48
|
export declare const SubmitButton: ComponentType<ButtonProps>;
|
|
47
49
|
export declare const ResetButton: ComponentType<ButtonProps>;
|
|
48
50
|
export declare const CancelButton: ComponentType<ButtonProps>;
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
/* empty css */
|
|
2
|
-
import t, { Form as o, FormModal as s, FormSteps as e, FormStepsModal as n, List as a, MultiField as r, TableList as
|
|
3
|
-
import { CancelButton as
|
|
4
|
-
const I = t, L = o, R = s,
|
|
2
|
+
import t, { Form as o, FormModal as s, FormSteps as e, FormStepsModal as n, List as a, MultiField as r, TableList as c } from "@kne/form-info";
|
|
3
|
+
import { CancelButton as u, Input as m, InputNumber as i, RadioGroup as l, ResetButton as p, Select as S, SubmitButton as F, Switch as $, TextArea as d, TreeSelect as B } from "@kne/react-form-antd";
|
|
4
|
+
const I = t, L = o, R = s, f = e, x = n, h = a, w = c, A = r, C = m, G = d, N = S, g = i, j = $, k = l, q = B, v = F, y = p, z = u;
|
|
5
5
|
export {
|
|
6
|
-
|
|
6
|
+
z as CancelButton,
|
|
7
7
|
L as Form,
|
|
8
8
|
I as FormInfo,
|
|
9
9
|
R as FormModal,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
10
|
+
f as FormSteps,
|
|
11
|
+
x as FormStepsModal,
|
|
12
|
+
C as Input,
|
|
13
|
+
g as InputNumber,
|
|
14
|
+
h as List,
|
|
15
|
+
A as MultiField,
|
|
16
|
+
k as RadioGroup,
|
|
17
|
+
y as ResetButton,
|
|
18
|
+
N as Select,
|
|
19
|
+
v as SubmitButton,
|
|
20
|
+
j as Switch,
|
|
21
|
+
w as TableList,
|
|
22
|
+
G as TextArea,
|
|
23
|
+
q as TreeSelect
|
|
23
24
|
};
|
|
24
25
|
//# sourceMappingURL=kneFormInfo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kneFormInfo.js","sources":["../../../src/components/Form/kneFormInfo.ts"],"sourcesContent":["/**\n * 经 core 再导出 @kne/form-info(业务唯一入口)。\n * 布局组件来自 @kne/form-info;字段组件须从 @kne/react-form-antd 具名导入\n * (form-info 的 `export *` 在 Vite 下经 namespace 读取时常为 undefined)。\n */\nimport '@kne/form-info/dist/index.css';\nimport FormInfoBase, {\n Form as KneForm,\n FormModal as KneFormModal,\n FormSteps as KneFormSteps,\n FormStepsModal as KneFormStepsModal,\n List as KneList,\n MultiField as KneMultiField,\n TableList as KneTableList,\n type FormModalProps,\n type FormProps,\n type FormStepsModalProps,\n type FormStepsProps,\n type ListProps,\n type MultiFieldProps,\n type TableListProps,\n type FormInfoProps,\n} from '@kne/form-info';\nimport {\n CancelButton as KneCancelButton,\n Input as KneInput,\n InputNumber as KneInputNumber,\n RadioGroup as KneRadioGroup,\n ResetButton as KneResetButton,\n Select as KneSelect,\n SubmitButton as KneSubmitButton,\n Switch as KneSwitch,\n TextArea as KneTextArea,\n} from '@kne/react-form-antd';\nimport type { ComponentType, FC, ReactNode } from 'react';\n\ntype FieldProps = {\n name: string;\n label?: ReactNode;\n rule?: string;\n placeholder?: string;\n disabled?: boolean;\n block?: boolean;\n rows?: number;\n options?: unknown[];\n [key: string]: unknown;\n};\n\ntype ButtonProps = {\n children?: ReactNode;\n type?: string;\n loading?: boolean;\n [key: string]: unknown;\n};\n\ntype ItemTitleCtx = { index: number; data?: Record<string, unknown> };\n\nexport type {\n FormInfoProps,\n FormProps,\n FormModalProps,\n FormStepsProps,\n FormStepsModalProps,\n ListProps,\n TableListProps,\n MultiFieldProps,\n};\n\nexport const FormInfo = FormInfoBase;\nexport const Form = KneForm;\nexport const FormModal = KneFormModal as FC<FormModalProps & { children?: ReactNode }>;\nexport const FormSteps = KneFormSteps as FC<FormStepsProps>;\nexport const FormStepsModal = KneFormStepsModal as FC<FormStepsModalProps>;\n\nexport const List = KneList as FC<\n Omit<ListProps, 'itemTitle'> & {\n maxLength?: number;\n itemTitle?: (ctx: ItemTitleCtx) => string;\n }\n>;\nexport const TableList = KneTableList as FC<\n Omit<TableListProps, 'itemTitle'> & {\n itemTitle?: (ctx: ItemTitleCtx) => string;\n }\n>;\nexport const MultiField = KneMultiField as FC<MultiFieldProps>;\n\nexport const Input = KneInput as ComponentType<FieldProps>;\nexport const TextArea = KneTextArea as ComponentType<FieldProps>;\nexport const Select = KneSelect as ComponentType<FieldProps>;\nexport const InputNumber = KneInputNumber as ComponentType<FieldProps>;\nexport const Switch = KneSwitch as ComponentType<FieldProps>;\nexport const RadioGroup = KneRadioGroup as ComponentType<FieldProps>;\nexport const SubmitButton = KneSubmitButton as ComponentType<ButtonProps>;\nexport const ResetButton = KneResetButton as ComponentType<ButtonProps>;\nexport const CancelButton = KneCancelButton as ComponentType<ButtonProps>;\n"],"names":["FormInfo","FormInfoBase","Form","KneForm","FormModal","KneFormModal","FormSteps","KneFormSteps","FormStepsModal","KneFormStepsModal","List","KneList","TableList","KneTableList","MultiField","KneMultiField","Input","KneInput","TextArea","KneTextArea","Select","KneSelect","InputNumber","KneInputNumber","Switch","KneSwitch","RadioGroup","KneRadioGroup","SubmitButton","KneSubmitButton","ResetButton","KneResetButton","CancelButton","KneCancelButton"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"kneFormInfo.js","sources":["../../../src/components/Form/kneFormInfo.ts"],"sourcesContent":["/**\n * 经 core 再导出 @kne/form-info(业务唯一入口)。\n * 布局组件来自 @kne/form-info;字段组件须从 @kne/react-form-antd 具名导入\n * (form-info 的 `export *` 在 Vite 下经 namespace 读取时常为 undefined)。\n */\nimport '@kne/form-info/dist/index.css';\nimport FormInfoBase, {\n Form as KneForm,\n FormModal as KneFormModal,\n FormSteps as KneFormSteps,\n FormStepsModal as KneFormStepsModal,\n List as KneList,\n MultiField as KneMultiField,\n TableList as KneTableList,\n type FormModalProps,\n type FormProps,\n type FormStepsModalProps,\n type FormStepsProps,\n type ListProps,\n type MultiFieldProps,\n type TableListProps,\n type FormInfoProps,\n} from '@kne/form-info';\nimport {\n CancelButton as KneCancelButton,\n Input as KneInput,\n InputNumber as KneInputNumber,\n RadioGroup as KneRadioGroup,\n ResetButton as KneResetButton,\n Select as KneSelect,\n SubmitButton as KneSubmitButton,\n Switch as KneSwitch,\n TextArea as KneTextArea,\n TreeSelect as KneTreeSelect,\n} from '@kne/react-form-antd';\nimport type { ComponentType, FC, ReactNode } from 'react';\n\ntype FieldProps = {\n name: string;\n label?: ReactNode;\n rule?: string;\n placeholder?: string;\n disabled?: boolean;\n block?: boolean;\n rows?: number;\n options?: unknown[];\n [key: string]: unknown;\n};\n\ntype ButtonProps = {\n children?: ReactNode;\n type?: string;\n loading?: boolean;\n [key: string]: unknown;\n};\n\ntype ItemTitleCtx = { index: number; data?: Record<string, unknown> };\n\nexport type {\n FormInfoProps,\n FormProps,\n FormModalProps,\n FormStepsProps,\n FormStepsModalProps,\n ListProps,\n TableListProps,\n MultiFieldProps,\n};\n\nexport const FormInfo = FormInfoBase;\nexport const Form = KneForm;\nexport const FormModal = KneFormModal as FC<FormModalProps & { children?: ReactNode }>;\nexport const FormSteps = KneFormSteps as FC<FormStepsProps>;\nexport const FormStepsModal = KneFormStepsModal as FC<FormStepsModalProps>;\n\nexport const List = KneList as FC<\n Omit<ListProps, 'itemTitle'> & {\n maxLength?: number;\n itemTitle?: (ctx: ItemTitleCtx) => string;\n }\n>;\nexport const TableList = KneTableList as FC<\n Omit<TableListProps, 'itemTitle'> & {\n itemTitle?: (ctx: ItemTitleCtx) => string;\n }\n>;\nexport const MultiField = KneMultiField as FC<MultiFieldProps>;\n\nexport const Input = KneInput as ComponentType<FieldProps>;\nexport const TextArea = KneTextArea as ComponentType<FieldProps>;\nexport const Select = KneSelect as ComponentType<FieldProps>;\nexport const InputNumber = KneInputNumber as ComponentType<FieldProps>;\nexport const Switch = KneSwitch as ComponentType<FieldProps>;\nexport const RadioGroup = KneRadioGroup as ComponentType<FieldProps>;\n/** 与 Input/Select 同源再导出,避免业务直连 @kne/react-form-antd 导致双 Context */\nexport const TreeSelect = KneTreeSelect as ComponentType<FieldProps>;\nexport const SubmitButton = KneSubmitButton as ComponentType<ButtonProps>;\nexport const ResetButton = KneResetButton as ComponentType<ButtonProps>;\nexport const CancelButton = KneCancelButton as ComponentType<ButtonProps>;\n"],"names":["FormInfo","FormInfoBase","Form","KneForm","FormModal","KneFormModal","FormSteps","KneFormSteps","FormStepsModal","KneFormStepsModal","List","KneList","TableList","KneTableList","MultiField","KneMultiField","Input","KneInput","TextArea","KneTextArea","Select","KneSelect","InputNumber","KneInputNumber","Switch","KneSwitch","RadioGroup","KneRadioGroup","TreeSelect","KneTreeSelect","SubmitButton","KneSubmitButton","ResetButton","KneResetButton","CancelButton","KneCancelButton"],"mappings":";;;AAqEO,MAAMA,IAAWC,GACXC,IAAOC,GACPC,IAAYC,GACZC,IAAYC,GACZC,IAAiBC,GAEjBC,IAAOC,GAMPC,IAAYC,GAKZC,IAAaC,GAEbC,IAAQC,GACRC,IAAWC,GACXC,IAASC,GACTC,IAAcC,GACdC,IAASC,GACTC,IAAaC,GAEbC,IAAaC,GACbC,IAAeC,GACfC,IAAcC,GACdC,IAAeC;"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { Plus as
|
|
3
|
-
import { Spin as
|
|
1
|
+
import { jsx as a, jsxs as u, Fragment as K } from "react/jsx-runtime";
|
|
2
|
+
import { Plus as S, Pencil as w, Trash2 as j } from "../Icons/index.js";
|
|
3
|
+
import { Spin as v, Tree as B, Tooltip as F, Space as L, Button as p, Popconfirm as M } from "antd";
|
|
4
4
|
import o from "classnames";
|
|
5
5
|
import { useMemo as O, useState as q, useEffect as A } from "react";
|
|
6
6
|
import c from "./style.module.scss.js";
|
|
7
|
-
function T(
|
|
7
|
+
function T(t) {
|
|
8
8
|
var l;
|
|
9
9
|
const i = [];
|
|
10
|
-
for (const n of
|
|
10
|
+
for (const n of t)
|
|
11
11
|
i.push(n.id), (l = n.children) != null && l.length && i.push(...T(n.children));
|
|
12
12
|
return i;
|
|
13
13
|
}
|
|
14
|
-
function k(
|
|
14
|
+
function k(t, i) {
|
|
15
15
|
var l;
|
|
16
|
-
for (const n of
|
|
16
|
+
for (const n of t) {
|
|
17
17
|
if (n.id === i)
|
|
18
18
|
return { id: n.id, name: n.name, parentId: n.parentId ?? null };
|
|
19
19
|
if ((l = n.children) != null && l.length) {
|
|
@@ -23,21 +23,21 @@ function k(a, i) {
|
|
|
23
23
|
}
|
|
24
24
|
return null;
|
|
25
25
|
}
|
|
26
|
-
const
|
|
27
|
-
nodes:
|
|
26
|
+
const U = ({
|
|
27
|
+
nodes: t,
|
|
28
28
|
loading: i = !1,
|
|
29
29
|
editable: l = !1,
|
|
30
30
|
className: n,
|
|
31
31
|
selectedKeys: m,
|
|
32
32
|
onSelect: f,
|
|
33
|
-
onAdd:
|
|
34
|
-
onEdit:
|
|
35
|
-
onDelete:
|
|
36
|
-
deleteConfirmTitle:
|
|
33
|
+
onAdd: g,
|
|
34
|
+
onEdit: h,
|
|
35
|
+
onDelete: d,
|
|
36
|
+
deleteConfirmTitle: E = "确认删除该节点?",
|
|
37
37
|
deleteOkText: x = "删除",
|
|
38
|
-
deleteOkType:
|
|
38
|
+
deleteOkType: b = "danger"
|
|
39
39
|
}) => {
|
|
40
|
-
const y = O(() => T(
|
|
40
|
+
const y = O(() => T(t), [t]), [C, N] = q([]);
|
|
41
41
|
A(() => {
|
|
42
42
|
N(y);
|
|
43
43
|
}, [y]);
|
|
@@ -46,43 +46,52 @@ const R = ({
|
|
|
46
46
|
return {
|
|
47
47
|
key: r.id,
|
|
48
48
|
title: /* @__PURE__ */ u("div", { className: o("marsun-org-tree-row", c["marsun-org-tree-row"]), children: [
|
|
49
|
-
/* @__PURE__ */
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
49
|
+
/* @__PURE__ */ a(
|
|
50
|
+
F,
|
|
51
|
+
{
|
|
52
|
+
title: r.nameExtra ? /* @__PURE__ */ u(K, { children: [
|
|
53
|
+
r.name,
|
|
54
|
+
r.nameExtra
|
|
55
|
+
] }) : r.name,
|
|
56
|
+
children: /* @__PURE__ */ u("span", { className: o("marsun-org-tree-name", c["marsun-org-tree-name"]), children: [
|
|
57
|
+
r.name,
|
|
58
|
+
r.nameExtra ? /* @__PURE__ */ a(
|
|
59
|
+
"span",
|
|
60
|
+
{
|
|
61
|
+
className: o("marsun-org-tree-extra", c["marsun-org-tree-extra"]),
|
|
62
|
+
children: r.nameExtra
|
|
63
|
+
}
|
|
64
|
+
) : null
|
|
65
|
+
] })
|
|
66
|
+
}
|
|
67
|
+
),
|
|
59
68
|
l ? /* @__PURE__ */ u(
|
|
60
69
|
L,
|
|
61
70
|
{
|
|
62
71
|
size: 0,
|
|
63
72
|
className: o("marsun-org-tree-actions", c["marsun-org-tree-actions"]),
|
|
64
73
|
children: [
|
|
65
|
-
|
|
74
|
+
g ? /* @__PURE__ */ a(
|
|
66
75
|
p,
|
|
67
76
|
{
|
|
68
77
|
type: "text",
|
|
69
78
|
size: "small",
|
|
70
79
|
"aria-label": "添加子节点",
|
|
71
|
-
icon: /* @__PURE__ */
|
|
80
|
+
icon: /* @__PURE__ */ a(S, { size: 14 }),
|
|
72
81
|
onClick: (e) => {
|
|
73
|
-
e.stopPropagation(),
|
|
82
|
+
e.stopPropagation(), g(r.id);
|
|
74
83
|
}
|
|
75
84
|
}
|
|
76
85
|
) : null,
|
|
77
|
-
|
|
86
|
+
h ? /* @__PURE__ */ a(
|
|
78
87
|
p,
|
|
79
88
|
{
|
|
80
89
|
type: "text",
|
|
81
90
|
size: "small",
|
|
82
91
|
"aria-label": "编辑",
|
|
83
|
-
icon: /* @__PURE__ */
|
|
92
|
+
icon: /* @__PURE__ */ a(w, { size: 14 }),
|
|
84
93
|
onClick: (e) => {
|
|
85
|
-
e.stopPropagation(),
|
|
94
|
+
e.stopPropagation(), h({
|
|
86
95
|
id: r.id,
|
|
87
96
|
name: r.name,
|
|
88
97
|
parentId: r.parentId ?? null
|
|
@@ -90,23 +99,23 @@ const R = ({
|
|
|
90
99
|
}
|
|
91
100
|
}
|
|
92
101
|
) : null,
|
|
93
|
-
|
|
102
|
+
d ? /* @__PURE__ */ a(
|
|
94
103
|
M,
|
|
95
104
|
{
|
|
96
|
-
title:
|
|
105
|
+
title: E,
|
|
97
106
|
okText: x,
|
|
98
|
-
okType:
|
|
107
|
+
okType: b,
|
|
99
108
|
cancelText: "取消",
|
|
100
|
-
onConfirm: (e) => (e == null || e.stopPropagation(),
|
|
109
|
+
onConfirm: (e) => (e == null || e.stopPropagation(), d({ id: r.id, name: r.name })),
|
|
101
110
|
onCancel: (e) => e == null ? void 0 : e.stopPropagation(),
|
|
102
|
-
children: /* @__PURE__ */
|
|
111
|
+
children: /* @__PURE__ */ a(
|
|
103
112
|
p,
|
|
104
113
|
{
|
|
105
114
|
type: "text",
|
|
106
115
|
size: "small",
|
|
107
116
|
danger: !0,
|
|
108
117
|
"aria-label": x,
|
|
109
|
-
icon: /* @__PURE__ */
|
|
118
|
+
icon: /* @__PURE__ */ a(j, { size: 14 }),
|
|
110
119
|
onClick: (e) => e.stopPropagation()
|
|
111
120
|
}
|
|
112
121
|
)
|
|
@@ -118,19 +127,19 @@ const R = ({
|
|
|
118
127
|
] }),
|
|
119
128
|
children: (z = r.children) != null && z.length ? P(r.children) : void 0
|
|
120
129
|
};
|
|
121
|
-
}), I = P(
|
|
122
|
-
return /* @__PURE__ */
|
|
123
|
-
|
|
130
|
+
}), I = P(t);
|
|
131
|
+
return /* @__PURE__ */ a(v, { spinning: i, children: /* @__PURE__ */ a(
|
|
132
|
+
B,
|
|
124
133
|
{
|
|
125
134
|
className: o("marsun-org-tree", c["marsun-org-tree"], n),
|
|
126
135
|
treeData: I,
|
|
127
|
-
expandedKeys:
|
|
136
|
+
expandedKeys: C,
|
|
128
137
|
onExpand: (s) => N(s),
|
|
129
138
|
selectedKeys: m,
|
|
130
139
|
onSelect: (s) => {
|
|
131
140
|
if (!f) return;
|
|
132
141
|
const r = s[0] != null ? String(s[0]) : "";
|
|
133
|
-
f(r ? k(
|
|
142
|
+
f(r ? k(t, r) : null);
|
|
134
143
|
},
|
|
135
144
|
showLine: !0,
|
|
136
145
|
blockNode: !0
|
|
@@ -138,6 +147,6 @@ const R = ({
|
|
|
138
147
|
) });
|
|
139
148
|
};
|
|
140
149
|
export {
|
|
141
|
-
|
|
150
|
+
U as default
|
|
142
151
|
};
|
|
143
152
|
//# sourceMappingURL=OrgTree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrgTree.js","sources":["../../../src/components/OrgTree/OrgTree.tsx"],"sourcesContent":["import { Pencil, Plus, Trash2 } from '../Icons';\nimport { Button, Popconfirm, Space, Spin, Tooltip, Tree } from 'antd';\nimport type { DataNode } from 'antd/es/tree';\nimport classNames from 'classnames';\nimport React, { useEffect, useMemo, useState, type Key, type ReactNode } from 'react';\nimport styles from './style.module.scss';\n\nexport type OrgTreeNode = {\n id: string;\n name: string;\n parentId?: string | null;\n children?: OrgTreeNode[];\n /** 名称旁附加文案(如 mapped) */\n nameExtra?: ReactNode;\n};\n\nexport type OrgTreeProps = {\n nodes: OrgTreeNode[];\n loading?: boolean;\n /** 展示节点内增删改操作 */\n editable?: boolean;\n className?: string;\n /** 受控选中(点选节点,如右侧岗位面板) */\n selectedKeys?: Key[];\n onSelect?: (node: { id: string; name: string; parentId: string | null } | null) => void;\n onAdd?: (parentId: string) => void;\n onEdit?: (node: { id: string; name: string; parentId: string | null }) => void;\n /** 确认删除后回调;由业务执行 API */\n onDelete?: (node: { id: string; name: string }) => void | Promise<void>;\n /** 删除确认文案 */\n deleteConfirmTitle?: string;\n /** 确认钮文案(软禁用场景可传「禁用」) */\n deleteOkText?: string;\n deleteOkType?: 'primary' | 'danger';\n};\n\nfunction collectAllKeys(nodes: OrgTreeNode[]): string[] {\n const keys: string[] = [];\n for (const n of nodes) {\n keys.push(n.id);\n if (n.children?.length) keys.push(...collectAllKeys(n.children));\n }\n return keys;\n}\n\nfunction findOrgNode(\n list: OrgTreeNode[],\n id: string,\n): { id: string; name: string; parentId: string | null } | null {\n for (const n of list) {\n if (n.id === id) {\n return { id: n.id, name: n.name, parentId: n.parentId ?? null };\n }\n if (n.children?.length) {\n const hit = findOrgNode(n.children, id);\n if (hit) return hit;\n }\n }\n return null;\n}\n\n/**\n * 组织树(对齐 Assets 组织架构行为):默认展开、节点 hover 增删改。\n * 纯 UI,无业务 API。\n */\nconst OrgTree: React.FC<OrgTreeProps> = ({\n nodes,\n loading = false,\n editable = false,\n className,\n selectedKeys,\n onSelect,\n onAdd,\n onEdit,\n onDelete,\n deleteConfirmTitle = '确认删除该节点?',\n deleteOkText = '删除',\n deleteOkType = 'danger',\n}) => {\n const allKeys = useMemo(() => collectAllKeys(nodes), [nodes]);\n const [expandedKeys, setExpandedKeys] = useState<Key[]>([]);\n\n useEffect(() => {\n setExpandedKeys(allKeys);\n }, [allKeys]);\n\n const buildTreeNodes = (list: OrgTreeNode[]): DataNode[] =>\n list.map((node) => ({\n key: node.id,\n title: (\n <div className={classNames('marsun-org-tree-row', styles['marsun-org-tree-row'])}>\n <Tooltip
|
|
1
|
+
{"version":3,"file":"OrgTree.js","sources":["../../../src/components/OrgTree/OrgTree.tsx"],"sourcesContent":["import { Pencil, Plus, Trash2 } from '../Icons';\nimport { Button, Popconfirm, Space, Spin, Tooltip, Tree } from 'antd';\nimport type { DataNode } from 'antd/es/tree';\nimport classNames from 'classnames';\nimport React, { useEffect, useMemo, useState, type Key, type ReactNode } from 'react';\nimport styles from './style.module.scss';\n\nexport type OrgTreeNode = {\n id: string;\n name: string;\n parentId?: string | null;\n children?: OrgTreeNode[];\n /** 名称旁附加文案(如 mapped) */\n nameExtra?: ReactNode;\n};\n\nexport type OrgTreeProps = {\n nodes: OrgTreeNode[];\n loading?: boolean;\n /** 展示节点内增删改操作 */\n editable?: boolean;\n className?: string;\n /** 受控选中(点选节点,如右侧岗位面板) */\n selectedKeys?: Key[];\n onSelect?: (node: { id: string; name: string; parentId: string | null } | null) => void;\n onAdd?: (parentId: string) => void;\n onEdit?: (node: { id: string; name: string; parentId: string | null }) => void;\n /** 确认删除后回调;由业务执行 API */\n onDelete?: (node: { id: string; name: string }) => void | Promise<void>;\n /** 删除确认文案 */\n deleteConfirmTitle?: string;\n /** 确认钮文案(软禁用场景可传「禁用」) */\n deleteOkText?: string;\n deleteOkType?: 'primary' | 'danger';\n};\n\nfunction collectAllKeys(nodes: OrgTreeNode[]): string[] {\n const keys: string[] = [];\n for (const n of nodes) {\n keys.push(n.id);\n if (n.children?.length) keys.push(...collectAllKeys(n.children));\n }\n return keys;\n}\n\nfunction findOrgNode(\n list: OrgTreeNode[],\n id: string,\n): { id: string; name: string; parentId: string | null } | null {\n for (const n of list) {\n if (n.id === id) {\n return { id: n.id, name: n.name, parentId: n.parentId ?? null };\n }\n if (n.children?.length) {\n const hit = findOrgNode(n.children, id);\n if (hit) return hit;\n }\n }\n return null;\n}\n\n/**\n * 组织树(对齐 Assets 组织架构行为):默认展开、节点 hover 增删改。\n * 纯 UI,无业务 API。\n */\nconst OrgTree: React.FC<OrgTreeProps> = ({\n nodes,\n loading = false,\n editable = false,\n className,\n selectedKeys,\n onSelect,\n onAdd,\n onEdit,\n onDelete,\n deleteConfirmTitle = '确认删除该节点?',\n deleteOkText = '删除',\n deleteOkType = 'danger',\n}) => {\n const allKeys = useMemo(() => collectAllKeys(nodes), [nodes]);\n const [expandedKeys, setExpandedKeys] = useState<Key[]>([]);\n\n useEffect(() => {\n setExpandedKeys(allKeys);\n }, [allKeys]);\n\n const buildTreeNodes = (list: OrgTreeNode[]): DataNode[] =>\n list.map((node) => ({\n key: node.id,\n title: (\n <div className={classNames('marsun-org-tree-row', styles['marsun-org-tree-row'])}>\n <Tooltip\n title={\n node.nameExtra ? (\n <>\n {node.name}\n {node.nameExtra}\n </>\n ) : (\n node.name\n )\n }\n >\n <span className={classNames('marsun-org-tree-name', styles['marsun-org-tree-name'])}>\n {node.name}\n {node.nameExtra ? (\n <span\n className={classNames('marsun-org-tree-extra', styles['marsun-org-tree-extra'])}\n >\n {node.nameExtra}\n </span>\n ) : null}\n </span>\n </Tooltip>\n {editable ? (\n <Space\n size={0}\n className={classNames('marsun-org-tree-actions', styles['marsun-org-tree-actions'])}\n >\n {onAdd ? (\n <Button\n type=\"text\"\n size=\"small\"\n aria-label=\"添加子节点\"\n icon={<Plus size={14} />}\n onClick={(e) => {\n e.stopPropagation();\n onAdd(node.id);\n }}\n />\n ) : null}\n {onEdit ? (\n <Button\n type=\"text\"\n size=\"small\"\n aria-label=\"编辑\"\n icon={<Pencil size={14} />}\n onClick={(e) => {\n e.stopPropagation();\n onEdit({\n id: node.id,\n name: node.name,\n parentId: node.parentId ?? null,\n });\n }}\n />\n ) : null}\n {onDelete ? (\n <Popconfirm\n title={deleteConfirmTitle}\n okText={deleteOkText}\n okType={deleteOkType}\n cancelText=\"取消\"\n onConfirm={(e) => {\n e?.stopPropagation();\n return onDelete({ id: node.id, name: node.name });\n }}\n onCancel={(e) => e?.stopPropagation()}\n >\n <Button\n type=\"text\"\n size=\"small\"\n danger\n aria-label={deleteOkText}\n icon={<Trash2 size={14} />}\n onClick={(e) => e.stopPropagation()}\n />\n </Popconfirm>\n ) : null}\n </Space>\n ) : null}\n </div>\n ),\n children: node.children?.length ? buildTreeNodes(node.children) : undefined,\n }));\n\n const treeData = buildTreeNodes(nodes);\n\n return (\n <Spin spinning={loading}>\n <Tree\n className={classNames('marsun-org-tree', styles['marsun-org-tree'], className)}\n treeData={treeData}\n expandedKeys={expandedKeys}\n onExpand={(keys) => setExpandedKeys(keys)}\n selectedKeys={selectedKeys}\n onSelect={(keys) => {\n if (!onSelect) return;\n const id = keys[0] != null ? String(keys[0]) : '';\n onSelect(id ? findOrgNode(nodes, id) : null);\n }}\n showLine\n blockNode\n />\n </Spin>\n );\n};\n\nexport default OrgTree;\n"],"names":["collectAllKeys","nodes","keys","_a","findOrgNode","list","id","hit","OrgTree","loading","editable","className","selectedKeys","onSelect","onAdd","onEdit","onDelete","deleteConfirmTitle","deleteOkText","deleteOkType","allKeys","useMemo","expandedKeys","setExpandedKeys","useState","useEffect","buildTreeNodes","node","classNames","styles","jsx","Tooltip","jsxs","Fragment","Space","Button","Plus","Pencil","Popconfirm","Trash2","treeData","Spin","Tree"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const r = {
|
|
2
|
-
"marsun-org-tree": "_marsun-org-
|
|
3
|
-
"marsun-org-tree-row": "_marsun-org-tree-
|
|
4
|
-
"marsun-org-tree-actions": "_marsun-org-tree-
|
|
5
|
-
"marsun-org-tree-name": "_marsun-org-tree-
|
|
6
|
-
"marsun-org-tree-extra": "_marsun-org-tree-
|
|
2
|
+
"marsun-org-tree": "_marsun-org-tree_j34q1_2",
|
|
3
|
+
"marsun-org-tree-row": "_marsun-org-tree-row_j34q1_10",
|
|
4
|
+
"marsun-org-tree-actions": "_marsun-org-tree-actions_j34q1_18",
|
|
5
|
+
"marsun-org-tree-name": "_marsun-org-tree-name_j34q1_22",
|
|
6
|
+
"marsun-org-tree-extra": "_marsun-org-tree-extra_j34q1_33"
|
|
7
7
|
};
|
|
8
8
|
export {
|
|
9
9
|
r as default
|
|
@@ -9,12 +9,15 @@ export type PermissionBindPanelProps = {
|
|
|
9
9
|
onChange: (nextIds: string[]) => void;
|
|
10
10
|
/** SYSTEM 入口码;未勾时禁用 requiresSystemEntry 模块 */
|
|
11
11
|
systemEntryCodes?: string[];
|
|
12
|
+
/** 只读预览(如用户有效权限):勾选态展示、禁止改、左右栏仍受 height 约束 */
|
|
13
|
+
readOnly?: boolean;
|
|
12
14
|
className?: string;
|
|
13
15
|
style?: CSSProperties;
|
|
16
|
+
/** 左右栏最大高度(默认 420) */
|
|
14
17
|
height?: number;
|
|
15
18
|
};
|
|
16
19
|
/**
|
|
17
20
|
* 角色绑权三栏信息架构:左页面模块 · 主区按业务功能点分类分组勾选。
|
|
18
21
|
* defaultGranted 叶子勾选且不可取消。
|
|
19
22
|
*/
|
|
20
|
-
export default function PermissionBindPanel({ catalog, permissions, value, onChange, systemEntryCodes, className, style, height, }: PermissionBindPanelProps): import("react").JSX.Element;
|
|
23
|
+
export default function PermissionBindPanel({ catalog, permissions, value, onChange, systemEntryCodes, readOnly, className, style, height, }: PermissionBindPanelProps): import("react").JSX.Element;
|