@wangcheng051/plugin-kit 0.0.0-stage → 0.1.1
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/LICENSE +21 -0
- package/README.md +275 -2
- package/dist/index.cjs +8 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +320 -0
- package/dist/index.js +787 -0
- package/dist/index.js.map +1 -0
- package/dist/index.umd.cjs +8 -0
- package/dist/index.umd.cjs.map +1 -0
- package/dist/style.css +1 -0
- package/package.json +98 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/index.js","../src/table/renderers/index.jsx","../src/theme/antd.js","../src/theme/agGrid.js","../src/components/antdIcons.js","../src/components/tableComponent/settingTableCol.jsx","../src/components/icon.jsx","../src/components/tableComponent/CustomHeader.jsx","../src/components/tableComponent/tableList.jsx","../src/components/tableComponent/useTable.module.jsx","../src/components/tableComponent/slotComponent.jsx"],"sourcesContent":["/**\n * 通用工具函数\n */\n\n/** 空值判断:null / undefined / '' / NaN */\nexport function isEmpty(value) {\n if (value === null || value === undefined || value === '') return true;\n if (typeof value === 'number' && Number.isNaN(value)) return true;\n if (Array.isArray(value)) return value.length === 0;\n return false;\n}\n\n/** 安全取值:path 支持 'a.b.c' 形式 */\nexport function get(obj, path, defaultValue) {\n if (!obj || !path) return defaultValue;\n const keys = String(path).split('.');\n let cur = obj;\n for (let i = 0; i < keys.length; i += 1) {\n if (cur === null || cur === undefined) return defaultValue;\n cur = cur[keys[i]];\n }\n return cur === undefined ? defaultValue : cur;\n}\n\n/** 数字千分位格式化 */\nexport function formatNumber(value, digits = 0) {\n if (isEmpty(value)) return '-';\n const num = Number(value);\n if (Number.isNaN(num)) return '-';\n return num.toLocaleString('zh-CN', {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n });\n}\n\n/**\n * 金额格式化(人民币)\n * @param {number|string} value 金额\n * @param {object} options\n * @param {number} options.digits 小数位数,默认 2\n * @param {string} options.symbol 货币符号,默认 ¥\n * @param {boolean} options.showSymbol 是否显示符号,默认 true\n * @param {boolean} options.showZeroZero 负数是否保留符号位(-0.00),默认 false\n */\nexport function formatMoney(value, options = {}) {\n const { digits = 2, symbol = '¥', showSymbol = true, showZeroZero = false } = options;\n if (isEmpty(value)) return '-';\n const num = Number(value);\n if (Number.isNaN(num)) return '-';\n const abs = formatNumber(Math.abs(num), digits);\n const prefix = showSymbol ? symbol : '';\n if (num < 0) {\n const body = showZeroZero ? abs : abs;\n return `-${prefix}${body}`;\n }\n return `${prefix}${abs}`;\n}\n\n/** 百分比格式化,0.1234 -> '12.34%' */\nexport function formatPercent(value, digits = 2) {\n if (isEmpty(value)) return '-';\n const num = Number(value);\n if (Number.isNaN(num)) return '-';\n return `${formatNumber(num * 100, digits)}%`;\n}\n\n/** 数组按键分组,返回 { key: item[] } */\nexport function groupBy(list, keyFn) {\n const result = {};\n (list || []).forEach((item) => {\n const key = typeof keyFn === 'function' ? keyFn(item) : get(item, keyFn);\n if (!result[key]) result[key] = [];\n result[key].push(item);\n });\n return result;\n}\n\n/** 过滤对象中的空值字段 */\nexport function omitEmpty(obj) {\n const result = {};\n Object.keys(obj || {}).forEach((key) => {\n if (!isEmpty(obj[key])) result[key] = obj[key];\n });\n return result;\n}\n\n/** 防抖 */\nexport function debounce(fn, wait = 300) {\n let timer = null;\n return function debounced(...args) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n fn.apply(this, args);\n }, wait);\n };\n}\n\n/** 类名拼接 */\nexport function cx(...args) {\n return args.filter(Boolean).join(' ');\n}\n\n/**\n * 按 key 生成 Map,便于 O(1) 查找。\n * key 优先取 obj[key],取不到时回退到 obj.id。\n */\nexport function MayList(objectsArray = [], key = 'value') {\n return new Map(\n (objectsArray || []).map((obj) => {\n const mapKey = obj?.[key] ?? obj?.id;\n return [mapKey, obj];\n }),\n );\n}\n\n/**\n * 深拷贝(保留函数引用)。\n *\n * 与 lodash.cloneDeep 的关键差异:遇到函数时直接返回原引用而不复制。\n * 列配置里含有 render 这类 React 组件函数,\n * 用 structuredClone 会直接抛 DataCloneError。\n *\n * @param {*} value 待拷贝的值\n * @param {WeakMap} [seen] 循环引用检测\n */\nexport function deepClone(value, seen = new WeakMap()) {\n // 基本类型与函数直接返回\n if (value === null || typeof value !== 'object') return value;\n\n // 循环引用保护\n if (seen.has(value)) return seen.get(value);\n\n if (Array.isArray(value)) {\n const arr = [];\n seen.set(value, arr);\n value.forEach((item, i) => {\n arr[i] = deepClone(item, seen);\n });\n return arr;\n }\n\n if (value instanceof Date) return new Date(value.getTime());\n if (value instanceof RegExp) return new RegExp(value.source, value.flags);\n\n // React 组件等函数对象已在上面的 typeof 判断中返回原引用\n\n const obj = {};\n seen.set(value, obj);\n Object.keys(value).forEach((key) => {\n obj[key] = deepClone(value[key], seen);\n });\n return obj;\n}\n","import React from 'react';\nimport { Tag, Typography, Tooltip } from 'antd';\nimport { formatMoney, formatNumber, formatPercent } from '../../utils';\n\nconst { Text } = Typography;\n\n/**\n * 单元格渲染器集合\n *\n * ag-grid 的 cellRenderer 既可以是 React 组件,也可以是函数。\n * 这里统一提供 React 组件形式,可通过 columnDef.cellRenderer 引用。\n */\n\n/** 文本渲染(默认) */\nexport function TextCell({ value }) {\n if (value === null || value === undefined || value === '') return <Text type=\"secondary\">-</Text>;\n return <span>{String(value)}</span>;\n}\n\n/** 金额渲染(负数标红) */\nexport function MoneyCell({ value, digits = 2, showSymbol = true }) {\n if (value === null || value === undefined || value === '') {\n return <Text type=\"secondary\">-</Text>;\n }\n const num = Number(value);\n if (Number.isNaN(num)) return <Text type=\"secondary\">-</Text>;\n return (\n <span style={{ color: num < 0 ? '#ff4d4f' : undefined }}>\n {formatMoney(num, { digits, showSymbol })}\n </span>\n );\n}\n\n/** 数字渲染(自动千分位) */\nexport function NumberCell({ value, digits = 0, percent = false }) {\n if (value === null || value === undefined || value === '') {\n return <Text type=\"secondary\">-</Text>;\n }\n const num = Number(value);\n if (Number.isNaN(num)) return <Text type=\"secondary\">-</Text>;\n return <span>{percent ? formatPercent(num, digits) : formatNumber(num, digits)}</span>;\n}\n\n/** 标签渲染 */\nexport function TagCell({ value, color, options }) {\n if (value === null || value === undefined || value === '') {\n return <Text type=\"secondary\">-</Text>;\n }\n let tagColor = color;\n let text = value;\n\n if (options && options.length) {\n const hit = options.find((o) => String(o.value) === String(value));\n if (hit) {\n text = hit.label;\n tagColor = tagColor ?? hit.color;\n }\n }\n return <Tag color={tagColor || 'default'}>{text}</Tag>;\n}\n\n/** 长文本省略 + tooltip */\nexport function EllipsisCell({ value, length = 30 }) {\n if (value === null || value === undefined || value === '') {\n return <Text type=\"secondary\">-</Text>;\n }\n const str = String(value);\n if (str.length <= length) return <span>{str}</span>;\n return (\n <Tooltip title={str}>\n <Text ellipsis style={{ maxWidth: 240 }}>{str}</Text>\n </Tooltip>\n );\n}\n\n/** 链接单元格 */\nexport function LinkCell({ value, onClick }) {\n if (value === null || value === undefined || value === '') {\n return <Text type=\"secondary\">-</Text>;\n }\n return (\n <a onClick={() => onClick && onClick(value)}>{String(value)}</a>\n );\n}\n\n/** 操作列渲染(按钮组) */\nexport function ActionCell({ value, actions = [] }) {\n return (\n <span>\n {actions.map((action) => (\n <a\n key={action.key}\n style={{ marginRight: 8 }}\n onClick={() => action.onClick && action.onClick(action)}\n >\n {action.text}\n </a>\n ))}\n </span>\n );\n}\n","/**\n * antd 5 主题配置\n *\n * 说明:antd 5 使用 CSS-in-JS,主题通过 ConfigProvider 的 token 注入,\n * 宿主应用只需在根节点包一层 <ConfigProvider theme={crmTheme}> 即可。\n */\nexport const crmTheme = {\n token: {\n colorPrimary: '#1677ff',\n colorSuccess: '#52c41a',\n colorWarning: '#faad14',\n colorError: '#ff4d4f',\n colorInfo: '#1677ff',\n borderRadius: 6,\n fontSize: 14,\n controlHeight: 32,\n wireframe: false,\n },\n components: {\n Table: {\n headerBg: '#fafafa',\n headerColor: '#262626',\n rowHoverBg: '#f5f5f5',\n borderColor: '#f0f0f0',\n },\n Layout: {\n headerBg: '#ffffff',\n headerHeight: 56,\n bodyBg: '#f0f2f5',\n },\n Card: {\n headerBg: 'transparent',\n },\n Menu: {\n itemBorderRadius: 6,\n },\n },\n};\n\n/** 状态 -> 颜色 预设,供 StatusTag / 表格状态列复用 */\nexport const STATUS_PRESETS = {\n success: { color: 'success', text: '成功' },\n warning: { color: 'warning', text: '警告' },\n error: { color: 'error', text: '异常' },\n processing: { color: 'processing', text: '处理中' },\n info: { color: 'processing', text: '进行中' },\n default: { color: 'default', text: '未知' },\n};\n\n/** 字典状态常见色值映射 */\nexport const DICT_COLOR_MAP = {\n 1: 'success',\n 0: 'default',\n true: 'success',\n false: 'default',\n};\n","/**\n * ag-grid 31 主题配置\n *\n * ag-grid v31 使用「经典 CSS 主题」机制(新的 Theming API 从 v32 才提供)。\n * 宿主应用需要引入基础样式与所选主题样式:\n *\n * import 'ag-grid-community/styles/ag-grid.css';\n * import 'ag-grid-community/styles/ag-theme-alpine.css';\n *\n * 本包不主动 import 这些 CSS,避免与宿主应用的主题选择冲突;\n * 请在宿主应用中自行 import 上述样式。\n */\n\n/** v31 可用的经典主题名 */\nexport const AG_GRID_THEMES = ['alpine', 'balham', 'material', 'quartz', 'classic'];\n\n/** 默认主题 */\nexport const DEFAULT_AG_GRID_THEME = 'alpine';\n\n/**\n * 生成 ag-grid 容器所需的 className\n * @param {string} theme 主题名,如 alpine\n * @param {string} extra 额外 class\n */\nexport function agGridClass(theme = DEFAULT_AG_GRID_THEME, extra) {\n const name = AG_GRID_THEMES.includes(theme) ? theme : DEFAULT_AG_GRID_THEME;\n return [`ag-theme-${name}`, extra].filter(Boolean).join(' ');\n}\n\n/** 行高预设(compact / normal / relaxed) */\nexport const ROW_HEIGHT_PRESETS = {\n compact: 28,\n normal: 36,\n relaxed: 48,\n};\n","/**\r\n * @ant-design/icons 的导入兼容层。\r\n *\r\n * 该包的 package.json 同时提供 main(CJS) 与 module(ESM):\r\n * - webpack / vite / rollup 优先取 module,加载 es/index.js;\r\n * - Node ESM 因无 exports 字段回退到 main,加载 lib/index.js。\r\n *\r\n * 两个产物的 default 语义完全不同:\r\n * - es/index.js 的 `export { default } from \"./components/Icon\"` 意味着\r\n * default 就是 Icon 组件本身,不是命名空间 —— 所以\r\n * `import icons from '@ant-design/icons'` 之后取 `icons.SearchOutlined`\r\n * 在 webpack/vite 下永远是 undefined,渲染会抛 \"Element type is invalid\";\r\n * - lib/index.js(CJS)的 default 才是包含全部图标的 module.exports。\r\n *\r\n * 因此统一用命名空间导入,并兼容 Node 下只有 default 的情况。\r\n */\r\nimport * as iconsNs from '@ant-design/icons';\r\n\r\nconst iconSet =\r\n iconsNs.default && typeof iconsNs.default === 'object' ? iconsNs.default : iconsNs;\r\n\r\nexport const SearchOutlined = iconsNs.SearchOutlined || iconSet.SearchOutlined;\r\nexport const SettingOutlined = iconsNs.SettingOutlined || iconSet.SettingOutlined;\r\n\r\nexport default iconSet;\r\n","import { Checkbox, Popover, Button } from 'antd'\nimport { SettingOutlined } from '../antdIcons'\nimport { deepClone } from '../../utils'\nimport { useState, useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport Styles from './style/index.module.scss'\nconst SettingTable = ({ onChange = () => {}, columRef }) => {\n const { language } = useSelector((state) => state.controller)\n const [settingStatus, setSettingStatus] = useState(false)\n const [headerCloumsList, setHeaderCloumsList] = useState(\n deepClone(columRef.current)\n )\n\n // 列配置是异步加载的,首屏时 columRef.current 还是空数组。\n // 需要在其变化时同步列表,否则弹层里会没有任何列可选。\n useEffect(() => {\n const current = columRef?.current;\n if (!current || !current.length) return;\n // 弹层打开时以用户正在编辑的内容为准,不要被后台刷新覆盖\n if (!settingStatus) {\n setHeaderCloumsList(deepClone(current))\n }\n }, [columRef?.current, settingStatus])\n\n const saveQuit = () => {\n // 修改列配置\n onChange({\n column: headerCloumsList,\n optType:\"mergeColum\"\n })\n setSettingStatus(false)\n }\n const changeCheck = (index) => {\n // 修改表头显隐\n headerCloumsList[index].visible = !headerCloumsList[index].visible\n setHeaderCloumsList([...headerCloumsList])\n }\n const openInitHeadList = () => {\n setHeaderCloumsList(deepClone(columRef.current))\n // 只负责刷新数据,开关状态交给 Popover 的 onOpenChange 统一处理。\n // 此前这里也 setSettingStatus,与 onOpenChange 形成双重 toggle,\n // 导致弹层状态被翻转两次而永远打不开。\n }\n return (\n <div>\n <Popover\n placement=\"bottomLeft\"\n trigger=\"click\"\n className={Styles.poper}\n // overlayInnerStyle={{\n // padding:0\n // }}\n open={Boolean(settingStatus)}\n onOpenChange={(open) => {\n setSettingStatus(open)\n }}\n content={\n <>\n <div\n style={{\n padding: '10px 10px',\n maxHeight: '300px',\n overflowY: 'auto',\n position: 'relative',\n minWidth: 178,\n }}>\n <div\n style={{\n borderBottom: '1px solid rgba(0, 0, 0, 0.06)',\n paddingBottom: '10px',\n }}>\n {language ? 'Custom List' : '自定义列表'}\n </div>\n {headerCloumsList.map((item, index) => {\n return (\n <div\n style={{\n height: '32px',\n display: 'flex',\n alignItems: 'center',\n }}\n key={item + index}>\n <Checkbox\n color=\"primary\"\n checked={item.visible}\n disabled = {item.disabled}\n onChange={(e) => changeCheck(index)}\n />\n <span\n style={{\n position: 'relative',\n top: '2px',\n marginLeft: '8px',\n }}>\n {(language ? item.enDisplay : item.cnDisplay) ||\n item.field}\n </span>\n </div>\n )\n })}\n </div>\n <div\n style={{\n minWidth: 120,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingTop: 5,\n paddingBottom: 5,\n boxShadow: ' 0 -1px 2px 0 rgba(0, 0, 0, 0.05)',\n }}>\n <Button onClick={saveQuit} type=\"primary\">\n {language ? 'Save' : '保存'}\n </Button>\n <Button onClick={() => setSettingStatus(false)}>\n {language ? 'Cancel' : '取消'}\n </Button>\n </div>\n </>\n }>\n <SettingOutlined onClick={() => openInitHeadList()}></SettingOutlined>\n </Popover>\n </div>\n )\n}\nexport default SettingTable\n","/**\n * 表格排序图标\n *\n * 自包含实现(原先依赖 CRM 主工程的 app/components/icon),\n * 避免插件包反向依赖业务工程。\n *\n * 注意:不使用 @ant-design/icons 的 Icon 包装组件 —— 它同时提供 CJS(main)\n * 与 ESM(module) 产物,两种产物下 default 的语义不一致(见 components/antdIcons.js),\n * 且在 SSR/Node 下具名导入不可靠;直接渲染 svg 更轻也更稳。\n */\nimport React from 'react';\n\nconst svgProps = {\n fill: 'currentColor',\n viewBox: '0 0 1024 1024',\n version: '1.1',\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n};\n\n/** 升序(箭头向上) */\nexport const SortAscending = (props) => (\n <svg {...svgProps} {...props} t=\"1688438905306\" p-id=\"2388\">\n <path\n d=\"M804.571 621.714a36.206 36.206 0 0 1-10.861 25.71l-256 256c-6.84 6.839-16.019 10.862-25.71 10.862s-18.87-3.987-25.71-10.862l-256-256a36.425 36.425 0 0 1-10.861-25.71c0-20.004 16.566-36.571 36.571-36.571h512c20.005 0 36.571 16.567 36.571 36.571z\"\n p-id=\"2389\"\n />\n </svg>\n);\n\n/** 降序(箭头向下) */\nexport const SortDescending = (props) => (\n <svg {...svgProps} {...props} t=\"1688438923470\" p-id=\"2523\">\n <path\n d=\"M804.571 402.286c0 20.004-16.566 36.571-36.571 36.571H256c-20.005 0-36.571-16.567-36.571-36.571a36.206 36.206 0 0 1 10.861-25.71l256-256c6.84-6.839 16.019-10.862 25.71-10.862s18.87 3.987 25.71 10.862l256 256a36.425 36.425 0 0 1 10.861 25.71z\"\n p-id=\"2524\"\n />\n </svg>\n);\n\n/** 未排序(双向箭头) */\nexport const SortUnSort = (props) => (\n <svg {...svgProps} {...props} t=\"1688438886160\" p-id=\"2253\">\n <path\n d=\"M804.571 621.714a36.206 36.206 0 0 1-10.861 25.71l-256 256c-6.84 6.839-16.019 10.862-25.71 10.862s-18.87-3.987-25.71-10.862l-256-256a36.425 36.425 0 0 1-10.861-25.71c0-20.004 16.566-36.571 36.571-36.571h512c20.005 0 36.571 16.567 36.571 36.571z m0-219.428c0 20.004-16.566 36.571-36.571 36.571H256c-20.005 0-36.571-16.567-36.571-36.571a36.206 36.206 0 0 1 10.861-25.71l256-256c6.84-6.839 16.019-10.862 25.71-10.862s18.87 3.987 25.71 10.862l256 256a36.425 36.425 0 0 1 10.861 25.71z\"\n p-id=\"2254\"\n />\n </svg>\n);\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport Styles from './style/index.module.scss';\r\nimport { Input, Popover, Button } from 'antd';\r\nimport { SearchOutlined } from '../antdIcons';\r\nimport { MayList } from '../../utils';\r\nimport { SortAscending, SortDescending, SortUnSort } from '../icon';\r\n\r\nexport default (props) => {\r\n const [ascSort, setAscSort] = useState('inactive');\r\n const [descSort, setDescSort] = useState('inactive');\r\n const [noSort, setNoSort] = useState('inactive');\r\n const refButton = useRef(null);\r\n const [open, setopen] = useState(false);\r\n\r\n const [valueDefs, setvalueDefs] = useState(null)\r\n const onMenuClicked = () => {\r\n props.showColumnMenu(refButton.current);\r\n };\r\n // 注意:filterKey 是数组,之前的依赖写成 props.filterKey?.field 恒为 undefined,\r\n // 导致外部筛选值变化时输入框不回显。改为依赖整个 filterKey。\r\n useEffect(() => {\r\n const arr = Array.isArray(props.filterKey) ? props.filterKey : [];\r\n setvalueDefs(MayList(arr, 'field').get(props.field)?.value ?? null)\r\n }, [props.filterKey, props.field])\r\n \r\n const onSortChanged = () => {\r\n const sort = props.column.getSort();\r\n console.log(sort,'sort');\r\n \r\n setAscSort(sort === 'asc' ? 'active' : 'inactive');\r\n setDescSort(sort === 'desc' ? 'active' : 'inactive');\r\n setNoSort(!sort ? 'active' : 'inactive');\r\n };\r\n\r\n const onSortRequested = (order, event) => {\r\n props.setSort(order, event.shiftKey);\r\n };\r\n\r\n // 监听列排序变化,并在卸载时解绑,否则会泄漏并对已卸载组件 setState\r\n useEffect(() => {\r\n const column = props.column;\r\n if (!column || typeof column.addEventListener !== 'function') return;\r\n column.addEventListener('sortChanged', onSortChanged);\r\n onSortChanged();\r\n return () => {\r\n column.removeEventListener('sortChanged', onSortChanged);\r\n };\r\n }, [props.column]);\r\n\r\n let menu = null;\r\n if (props.enableFilterButton) {\r\n menu = (\r\n <div ref={refButton} className=\"customHeaderMenuButton\" onClick={() => onMenuClicked()}>\r\n <i className={`fa ${props.menuIcon}`}></i>\r\n </div>\r\n );\r\n }\r\n\r\n let sort = null;\r\n if (props.enableSorting) {\r\n // 三个按钮的图标与行为此前是错位的:\r\n // 升序图标配 desc、取消图标配 desc,且 touchEnd 的参数与 onClick 不一致。\r\n // 现按图标语义对齐,并保证 click / touchEnd 传入相同的排序方向。\r\n sort = (\r\n <div className={Styles.sortNames}>\r\n <div onClick={(event) => onSortRequested('', event)} onTouchEnd={(event) => onSortRequested('', event)} className={`${Styles.customSort} ${Styles[ascSort]}`}>\r\n <SortDescending />\r\n </div>\r\n <div onClick={(event) => onSortRequested('asc', event)} onTouchEnd={(event) => onSortRequested('desc', event)} className={`${Styles.customSort} ${Styles[descSort]}`}>\r\n <SortAscending />\r\n </div>\r\n <div\r\n onClick={(event) => onSortRequested('desc', event)}\r\n onTouchEnd={(event) => onSortRequested('', event)}\r\n className={`${Styles.customSort} ${Styles.customUnSort} ${Styles[noSort]}`}\r\n >\r\n <SortUnSort />\r\n </div>\r\n </div>\r\n );\r\n }\r\n const defaultStyle = {\r\n width: '100%',\r\n };\r\n const context = useMemo(() => {\r\n // 注意搜索字段field 有冲突的话 请重新自定义\r\n let Render = props.filterSearchRender[props.field]?.render || Input;\r\n \r\n return (\r\n <Render\r\n {... (props.filterSearchRender[props.field]?.tPropty||{})}\r\n value={valueDefs}\r\n onChange={(e) => {\r\n setvalueDefs(e.target?e.target.value:e)\r\n \r\n }}\r\n style={defaultStyle}\r\n />\r\n );\r\n }, [props.field,valueDefs]);\r\n\r\n \r\n let search = null;\r\n if (props.search) {\r\n search = (\r\n <div>\r\n <Popover\r\n arrow={false}\r\n open={open}\r\n trigger=\"click\"\r\n overlayClassName={Styles.popoverContext}\r\n onOpenChange={(e) => setopen(e)}\r\n placement=\"bottom\"\r\n content={\r\n <div className={Styles.contextRender}>\r\n \r\n {context}\r\n <div className={Styles.contextRenderFooter}>\r\n <Button\r\n type=\"primary\"\r\n onClick={() => {\r\n const filterKeyArrary = props.filterKey.filter(i => i.field != props.field);\r\n if (valueDefs?.length) {\r\n filterKeyArrary.push({\r\n field: props.field,\r\n value: valueDefs\r\n })\r\n }\r\n const values = filterKeyArrary?.length ? filterKeyArrary : []\r\n props.onSearch(values);\r\n props.setfilterKey(values);\r\n setopen(false);\r\n }}\r\n >\r\n {props.language ? 'Search' : '搜索'}\r\n </Button>\r\n <Button\r\n style={{ marginLeft: 10 }}\r\n onClick={() => {\r\n const filterKeyArrary = props.filterKey.filter(i => i.field != props.field);\r\n const values = filterKeyArrary?.length ? filterKeyArrary : []\r\n\r\n setopen(false);\r\n props.setfilterKey(values);\r\n setvalueDefs(null)\r\n props.onSearch(values);\r\n }}\r\n >\r\n {props.language ? 'Reset' : '重置'}\r\n </Button>\r\n </div>\r\n </div>\r\n }\r\n >\r\n <SearchOutlined style={{ color: valueDefs ? '#1890ff' : 'rgba(0, 0, 0, 0.25)', marginLeft: 10, cursor: 'pointer' }} />\r\n </Popover>\r\n </div>\r\n );\r\n }\r\n return (\r\n <div className={Styles.customHead}>\r\n {/* {menu} */}\r\n <div className=\"customHeaderLabel\">{props.displayName}</div>\r\n {sort}\r\n {search}\r\n </div>\r\n );\r\n};\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { AgGridReact } from 'ag-grid-react';\r\n\r\n// 注意:不要在这里 import 'ag-grid-community/styles/ag-grid.css'。\r\n// ag-grid 是 peerDependency,其样式子路径若被保留为外部 import,\r\n// 消费方用 Node CJS require 本包时会因加载 CSS 文件而直接语法报错。\r\n// 正确做法是使用方自行引入(见 README「引入样式」章节):\r\n// import 'ag-grid-community/styles/ag-grid.css';\r\n// import 'ag-grid-community/styles/ag-theme-alpine.css';\r\n\r\nimport './style/styles.css';\r\nimport { Pagination, Spin, Tooltip } from 'antd';\r\nimport { useSelector } from 'react-redux';\r\nimport CustomHeader from './CustomHeader';\r\n\r\n\r\n/**\r\n *\r\n * @columnDefs 表头\r\n * @customBottomTotal 是否开启底部统计\r\n * @customColumn 自定义表头\r\n * @pagination 是否分页配置\r\n * @reset ag tabel拓展配置列如checkbox\r\n * @filterSearchRender 搜索组件\r\n */\r\n\r\nconst TableList = ({ columnDefs = [],loading, customBottomTotal = false, onChange = () => {}, tableRef, tableData,pagination=false,reset={} ,\r\ncustomColumn=[],filterSearchRender={},setfilterKey,filterKey} ) => {\r\n // useEffect(() => {\r\n // console.log(columnDefs,\"columnDefs32333\");\r\n // }, [JSON.stringify(columnDefs)])\r\n\r\n const containerStyle = useMemo(() => ({ width: '100%', height: '100%',position:\"relative\" }), []);\r\n const gridStyle = useMemo(() => ({ height: '100%', width: '100%' }), []);\r\n // const [rowData, setRowData] = useState([])\r\n const language = useSelector((state) => state.controller.language);\r\n // 分页总数:优先取业务传入的 total,其次取分页对象上的 total,\r\n // 最后兜底为当前页条数(避免出现写死的假总数)\r\n const total = useMemo(() => {\r\n const fromPagination = pagination && typeof pagination === 'object' ? pagination.total : undefined;\r\n if (typeof fromPagination === 'number' && !Number.isNaN(fromPagination)) return fromPagination;\r\n return Array.isArray(tableData) ? tableData.length : 0;\r\n }, [pagination, tableData]);\r\n const pinnedBottomRowData = useMemo(() => {\r\n let objTotal = {};\r\n columnDefs.map((i, index) => {\r\n if (index == 0) {\r\n objTotal[i.field] = 'Total';\r\n objTotal['fromData'] = 'total';\r\n } else {\r\n let total = i.lockPosition ? '' : 0;\r\n tableData.map((item) => {\r\n let key = i.field != i.key && i.key ? i.key : i.field;\r\n let disableTotal = ['jobCurrency', 'industries', 'jobSalaryRange'];\r\n if (!isNaN(Number(item[key])) && !disableTotal.includes(i.field)) {\r\n total += Number(item[key]);\r\n }\r\n });\r\n objTotal[i.field] = typeof total == 'number' && total > 0 ? total : '--';\r\n }\r\n });\r\n return [objTotal];\r\n // columnDefs 变化时也要重算,否则列显隐/排序调整后合计行与表格不一致\r\n }, [tableData, columnDefs]);\r\n const defaultCol = {\r\n visible: true,\r\n sortable: true,\r\n active: false,\r\n unSortIcon: true,\r\n minWidth:200,\r\n comparator: (valueA, valueB, nodeA, nodeB, isDescending) => {\r\n // console.log(valueA,valueB,nodeA,nodeB,isDescending,\"sort\",nodeA.gridApi.getSortModel());\r\n return 0;\r\n },\r\n headerComponent: CustomHeader\r\n // suppressMovable: !isDrag,\r\n };\r\n const defaultColDef = useMemo(() => {\r\n return {\r\n width: 170,\r\n lockPinned: true,\r\n };\r\n }, []);\r\n\r\n const onGridReady = useCallback((params) => {\r\n tableRef && (tableRef.current = params);\r\n // fetch('https://www.ag-grid.com/example-assets/olympic-winners.json')\r\n // .then((resp) => resp.json())\r\n // .then((data) => setRowData(data))\r\n }, []);\r\n const getCellParams = (params) => {\r\n const { isNotTip, render } = params.colDef || {};\r\n // params.data 在加载占位行等场景下可能为 undefined,直接取 .fromData 会抛错\r\n const isTotalRow = params.data?.fromData === 'total';\r\n return render && !isTotalRow ? (\r\n render(params)\r\n ) : (\r\n <Tooltip title={isNotTip ? '' : params.value || ''} arrow placement=\"top\">\r\n {typeof params.value == 'number' || params.value ? params.value : '--'}\r\n </Tooltip>\r\n );\r\n };\r\n // ag-grid v31 已移除 frameworkComponents,单元格渲染通过 cellRenderer 直接传组件/函数\r\n // (下方 columnDefs 中的 cellRenderer:getCellParams 即为 v31 正确写法)\r\n\r\n // 排序监听\r\n const sortChanged = useCallback((params) => {\r\n const sortModel = params.api.getState().sort?.sortModel ?? [];\r\n onChange({\r\n sort: sortModel[0] ?? null,\r\n optType: 'sort',\r\n });\r\n }, [onChange]);\r\n // 获取拖拽后的数据\r\n const onDragStopped = (params) => {\r\n onChange({\r\n column: params.api\r\n .getColumnDefs()\r\n .filter((item) => item.field)\r\n .map((item) => {\r\n return {\r\n ...item,\r\n pinned: undefined,\r\n field: item.field,\r\n hide: item.hide,\r\n visible: item.visible,\r\n };\r\n }),\r\n });\r\n };\r\n// 分页\r\nconst handleChangePage = (page,size)=>{\r\n onChange({\r\n optType:\"mergeColum\",\r\n pagination:{\r\n page,size\r\n }\r\n })\r\n}\r\n return (\r\n <div style={containerStyle}>\r\n {loading?<div className={'loadingContent'}>\r\n <Spin />\r\n </div>:null}\r\n <div style={gridStyle} className={'ag-theme-alpine AgGridReact'}>\r\n <AgGridReact\r\n rowData={tableData}\r\n pinnedBottomRowData={customBottomTotal ? pinnedBottomRowData : []}\r\n defaultColDef={defaultColDef}\r\n suppressRowTransform={true}\r\n onSortChanged={sortChanged}\r\n onDragStopped={onDragStopped}\r\n suppressDragLeaveHidesColumns={true}//脱离区域是否可以拖拽\r\n suppressMovableColumns={false}\r\n {...reset}\r\n // 和apn 写法不同注意!!!\r\n columnDefs={[...columnDefs.map((item) => {\r\n return {\r\n ...defaultCol,\r\n ...item,\r\n headerName:!language ? item.cnDisplay : item.enDisplay,\r\n // apn写法\r\n // cellRenderer:\"getCellParams\",\r\n // crm写法\r\n cellRenderer:getCellParams,\r\n headerComponentParams:{\r\n onSearch:(e)=>{\r\n console.log(e,\"搜索\");\r\n \r\n onChange({\r\n filter:e||{}\r\n })\r\n },\r\n setfilterKey,\r\n filterKey,\r\n language,\r\n filterSearchRender,\r\n ...item\r\n }\r\n };\r\n }),...customColumn]}\r\n icons={{\r\n sortAscending: `<span style=\"font-size: inherit;color: rgb(24, 144, 255);vertical-align:-webkit-baseline-middle\">\r\n <svg t=\"1688438905306\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"2388\" width=\"16\" height=\"16\"><path d=\"M804.571 621.714a36.206 36.206 0 0 1-10.861 25.71l-256 256c-6.84 6.839-16.019 10.862-25.71 10.862s-18.87-3.987-25.71-10.862l-256-256a36.425 36.425 0 0 1-10.861-25.71c0-20.004 16.566-36.571 36.571-36.571h512c20.005 0 36.571 16.567 36.571 36.571z\" p-id=\"2389\"></path></svg>\r\n </span>`,\r\n sortDescending: `<span style=\"font-size: inherit;color:rgb(24, 144, 255);vertical-align:-webkit-baseline-middle\">\r\n <svg t=\"1688438923470\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"2523\" width=\"16\" height=\"16\"><path d=\"M804.571 402.286c0 20.004-16.566 36.571-36.571 36.571H256c-20.005 0-36.571-16.567-36.571-36.571a36.206 36.206 0 0 1 10.861-25.71l256-256c6.84-6.839 16.019-10.862 25.71-10.862s18.87 3.987 25.71 10.862l256 256a36.425 36.425 0 0 1 10.861 25.71z\" p-id=\"2524\"></path></svg>\r\n </span>`,\r\n sortUnSort: `<span style=\"font-size: inherit;color: rgb(153, 153, 153);vertical-align:-webkit-baseline-middle\">\r\n <svg t=\"1688438886160\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"2253\" width=\"16\" height=\"16\"><path d=\"M804.571 621.714a36.206 36.206 0 0 1-10.861 25.71l-256 256c-6.84 6.839-16.019 10.862-25.71 10.862s-18.87-3.987-25.71-10.862l-256-256a36.425 36.425 0 0 1-10.861-25.71c0-20.004 16.566-36.571 36.571-36.571h512c20.005 0 36.571 16.567 36.571 36.571z m0-219.428c0 20.004-16.566 36.571-36.571 36.571H256c-20.005 0-36.571-16.567-36.571-36.571a36.206 36.206 0 0 1 10.861-25.71l256-256c6.84-6.839 16.019-10.862 25.71-10.862s18.87 3.987 25.71 10.862l256 256a36.425 36.425 0 0 1 10.861 25.71z\" p-id=\"2254\"></path></svg>\r\n </span>`,\r\n }}\r\n onGridReady={onGridReady}\r\n >\r\n </AgGridReact>\r\n </div>\r\n {pagination?<Pagination total={total} onChange={handleChangePage} {...pagination} />:null}\r\n </div>\r\n );\r\n};\r\nexport default TableList;\r\n","import { useState, useRef, useEffect, useCallback } from 'react';\nimport SettingTable from './settingTableCol';\nimport TableList from './tableList';\nimport { deepClone } from '../../utils';\n\n/**\n * CRM 列表 Hook\n *\n * 所有与业务耦合的接口均通过 props 注入,插件包本身不依赖任何业务工程:\n * @param {object} tProps\n * @param {string} tProps.sessionKey sessionStorage 存储 key\n * @param {object} tProps.renderKey 自定义单元格渲染,如 { companyName: (params) => node }\n * @param {Function} tProps.setParamsList 自定义请求参数转换,默认原样返回\n * @param {string} tProps.configKey 列配置的业务标识\n * @param {string} tProps.tableUrl 列表接口地址\n * @param {Function} tProps.tableRequest 列表接口请求方法 (params, url) => Promise<{response}>\n * @param {Function} tProps.getColConfigRequest 查询列配置接口 (configKey) => Promise<{response}>\n * @param {Function} tProps.saveColConfigRequest 保存列配置接口 (params) => void|Promise\n *\n * 依赖顺序说明(重要):\n * 本文件内各函数互相调用,定义顺序必须保持单向依赖,否则会触发 const 的\n * 暂时性死区(TDZ)报错:\n * checkHeadCols / saveColConfig / getTableData → handleColumn → getColConfig\n * 同时,所有可能由调用方以内联函数形式传入的值(tableRequest 等)\n * 都通过 ref 读取,不进 useCallback 依赖数组 —— 否则 callback 身份每渲染都变,\n * 会连带 useEffect 无限触发,造成请求死循环。\n */\nconst useTableModule = (tProps = {}, defaultProps = {}) => {\n // 保存到session里面的key\n const {\n sessionKey,\n renderKey,\n setParamsList,\n configKey,\n tableUrl,\n tableRequest,\n getColConfigRequest,\n saveColConfigRequest,\n } = { ...defaultProps, ...tProps };\n\n // sessionStorage 在 SSR / 测试环境下可能不存在\n const canUseSession = typeof window !== 'undefined' && !!window.sessionStorage;\n\n const saveSesstion = useCallback(\n (params) => {\n if (!canUseSession) return;\n try {\n window.sessionStorage.setItem(sessionKey, JSON.stringify(params));\n } catch (err) {\n // 隐私模式 / 超配额时写入会抛错,不应阻断业务流程\n console.warn('[useTableModule] sessionStorage 写入失败:', err);\n }\n },\n [sessionKey, canUseSession],\n );\n\n const getSesstion = useCallback(() => {\n if (!canUseSession) return null;\n try {\n const raw = window.sessionStorage.getItem(sessionKey);\n return raw ? JSON.parse(raw) : null;\n } catch (err) {\n // 数据损坏时不能抛错阻断渲染\n console.warn('[useTableModule] sessionStorage 读取失败:', err);\n return null;\n }\n }, [sessionKey, canUseSession]);\n\n const columRef = useRef([]);\n const [columnDefs, setColumnDefs] = useState([]);\n // tableDataList\n const [tableData, setTableData] = useState([]);\n // 分页总条数\n const [total, setTotal] = useState(undefined);\n // table列表loading\n const [loading, setloading] = useState(true);\n // 请求列表的参数\n const paramsCurrent = useRef(getSesstion() || {});\n // 是否还有搜索条件\n const [filterKey, setfilterKey] = useState(getSesstion()?.filter || []);\n // 请求序号,用于丢弃过期响应,避免竞态导致旧数据覆盖新数据\n const requestIdRef = useRef(0);\n\n /* ---------------------------------------------------------------- *\n * 调用方传入的函数/对象通过 ref 持有,避免进入依赖数组导致死循环\n * ---------------------------------------------------------------- */\n const tableRequestRef = useRef(tableRequest);\n tableRequestRef.current = tableRequest;\n const tableUrlRef = useRef(tableUrl);\n tableUrlRef.current = tableUrl;\n const setParamsListRef = useRef(setParamsList);\n setParamsListRef.current = setParamsList;\n const renderKeyRef = useRef(renderKey);\n renderKeyRef.current = renderKey;\n const getColConfigRequestRef = useRef(getColConfigRequest);\n getColConfigRequestRef.current = getColConfigRequest;\n const saveColConfigRequestRef = useRef(saveColConfigRequest);\n saveColConfigRequestRef.current = saveColConfigRequest;\n\n /* ---------------------------------------------------------------- *\n * 1. checkHeadCols —— 无外部依赖\n * ---------------------------------------------------------------- */\n const checkHeadCols = useCallback(() => {\n const { sort } = paramsCurrent.current;\n const NewArr = columRef.current.map((item) => {\n return {\n ...item,\n sort: sort && sort.colId == item.field ? sort.sort : undefined,\n };\n });\n setColumnDefs(deepClone(NewArr));\n }, []);\n\n /* ---------------------------------------------------------------- *\n * 2. saveColConfig —— 依赖 checkHeadCols 之外无\n * ---------------------------------------------------------------- */\n const saveColConfig = useCallback(() => {\n const request = saveColConfigRequestRef.current;\n if (!request) {\n console.warn('[useTableModule] 未注入 saveColConfigRequest,跳过列配置保存');\n return;\n }\n const params = {\n subcategory: configKey,\n userConfig: {\n pageConfig: {\n pageSize: paramsCurrent.current.size ? paramsCurrent.current.size : null,\n },\n columnConfig: columRef.current,\n },\n };\n const res = request(params);\n // 保存失败不应阻断表格交互\n if (res && typeof res.catch === 'function') {\n res.catch((err) => console.error('[useTableModule] 列配置保存失败:', err));\n }\n }, [configKey]);\n\n /* ---------------------------------------------------------------- *\n * 3. getTableData —— 列表数据请求\n * ---------------------------------------------------------------- */\n const getTableData = useCallback(() => {\n const request = tableRequestRef.current;\n if (!request) {\n console.warn('[useTableModule] 未注入 tableRequest,跳过列表加载');\n setloading(false);\n return;\n }\n // 标记本次请求序号,响应回来时若不是最新的一次则丢弃\n requestIdRef.current += 1;\n const currentId = requestIdRef.current;\n\n const transform = setParamsListRef.current;\n const newParams = transform ? transform(paramsCurrent.current) : paramsCurrent.current;\n setloading(true);\n return request(newParams, tableUrlRef.current).then(\n (res) => {\n // 已有更新的请求发出,丢弃本次过期响应\n if (currentId !== requestIdRef.current) return;\n const response = res?.response;\n // 接口可能返回 { response: { data: [], total } } 或 { response: [] } 两种结构\n const rows = Array.isArray(response) ? response : response?.data || [];\n // 总条数用于分页展示,缺失时保持为 undefined 由 TableList 兜底\n const totalCount = Array.isArray(response) ? undefined : response?.total;\n if (typeof totalCount === 'number' && !Number.isNaN(totalCount)) {\n setTotal(totalCount);\n }\n const newData = rows.map((item) => {\n return {\n ...item,\n ...(item._source || {}),\n };\n });\n setTableData(newData);\n setloading(false);\n },\n (err) => {\n if (currentId !== requestIdRef.current) return;\n console.error('[useTableModule] 列表加载失败:', err);\n // 失败时也要关掉 loading,否则界面永久卡在加载态\n setloading(false);\n },\n );\n }, []);\n\n /* ---------------------------------------------------------------- *\n * 4. handleColumn —— 表头变更统一入口\n * ---------------------------------------------------------------- */\n const handleColumn = useCallback(\n (params) => {\n const { column, optType, sort, pagination, filter } = params;\n let arrHead = [];\n if (column) {\n // 拖拽 / 自定义列显隐\n // 注意:column 里的顺序即最终顺序,需要按 column 的顺序重建,\n // 同时保留 columRef.current 中未被 column 覆盖的列,避免丢列。\n const columnMap = new Map(column.map((i) => [i.field, i]));\n arrHead = columRef.current.map((k) => {\n const matched = columnMap.get(k.field);\n if (!matched) return { ...k };\n const visible = matched.visible !== undefined ? matched.visible : !matched.hide;\n return { ...k, hide: !visible, visible };\n });\n\n // column 中存在但 columRef.current 中没有的列(新列),追加到末尾\n const existingFields = new Set(columRef.current.map((k) => k.field));\n column.forEach((i) => {\n if (!existingFields.has(i.field)) {\n const visible = i.visible !== undefined ? i.visible : !i.hide;\n arrHead.push({ ...i, hide: !visible, visible });\n }\n });\n\n columRef.current = arrHead;\n\n // 保持列配置\n saveColConfig();\n }\n if (optType == 'mergeColum') {\n // 合并表头\n setColumnDefs(deepClone(arrHead?.length ? arrHead : columRef.current));\n }\n if (optType == 'sort') {\n // 排序 注意 field 对应的是 colId\n paramsCurrent.current = {\n ...paramsCurrent.current,\n sort: sort,\n };\n\n saveSesstion(paramsCurrent.current);\n // 重新请求列表\n checkHeadCols();\n getTableData();\n }\n if (pagination) {\n // 分页\n paramsCurrent.current = {\n ...paramsCurrent.current,\n ...pagination,\n };\n saveSesstion(paramsCurrent.current);\n getTableData();\n }\n if (filter) {\n // 高级搜索\n paramsCurrent.current = {\n ...paramsCurrent.current,\n filter,\n };\n // 换筛选条件后回到第一页,否则可能停留在越界页码上导致空列表\n if (paramsCurrent.current.page && paramsCurrent.current.page > 1) {\n paramsCurrent.current.page = 1;\n }\n saveSesstion(paramsCurrent.current);\n getTableData();\n }\n },\n [saveSesstion, saveColConfig, checkHeadCols, getTableData],\n );\n\n /* ---------------------------------------------------------------- *\n * 5. getColConfig —— 列配置加载\n * ---------------------------------------------------------------- */\n const getColConfig = useCallback(() => {\n const request = getColConfigRequestRef.current;\n if (!request) {\n console.warn('[useTableModule] 未注入 getColConfigRequest,跳过列配置加载');\n setloading(false);\n return;\n }\n const { sort } = paramsCurrent.current;\n const currentRenderKey = renderKeyRef.current;\n request(configKey).then(\n ({ response }) => {\n const columnConfig = response?.userConfig?.columnConfig || [];\n const newArr = columnConfig.map((item) => {\n return {\n ...item,\n hide: !item.visible,\n visible: item.visible,\n sort: sort && sort.colId == item.field ? sort.sort : undefined,\n render: currentRenderKey ? currentRenderKey[item.field] : undefined,\n };\n });\n setColumnDefs(deepClone(newArr));\n columRef.current = deepClone(newArr);\n getTableData();\n },\n (err) => {\n console.error('[useTableModule] 列配置加载失败:', err);\n setloading(false);\n },\n );\n }, [configKey, getTableData]);\n\n /* ---------------------------------------------------------------- *\n * 6. resetSesstion —— 重置搜索条件\n * ---------------------------------------------------------------- */\n const resetSesstion = useCallback(() => {\n const session = getSesstion() || {};\n paramsCurrent.current = session;\n setfilterKey(session.filter || []);\n checkHeadCols();\n // 重置后必须重新拉数据,否则表格仍显示旧的筛选结果\n getTableData();\n }, [getSesstion, checkHeadCols, getTableData]);\n\n // 仅在 configKey 变化时加载一次列配置。\n // 依赖里若放入 getColConfigRequest(调用方常传内联函数,身份每渲染都变)\n // 会造成无限请求循环,因此请求函数通过 ref 读取。\n useEffect(() => {\n if (configKey) {\n // 交给 getColConfig 内部判断接口是否注入,未注入时它会给出提示并关闭 loading\n getColConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [configKey]);\n\n const SettingTableRender = useCallback(\n (props = {}) => {\n return <SettingTable columRef={columRef} onChange={handleColumn} {...props}></SettingTable>;\n },\n [handleColumn],\n );\n\n const TableListRender = useCallback(\n (props = {}) => {\n return (\n <TableList\n filterKey={filterKey}\n setfilterKey={setfilterKey}\n loading={loading}\n columnDefs={columnDefs}\n pagination={{\n current: paramsCurrent.current.page,\n pageSize: paramsCurrent.current.size,\n total,\n }}\n onChange={handleColumn}\n tableData={tableData}\n {...props}\n />\n );\n },\n [filterKey, loading, columnDefs, tableData, total, handleColumn],\n );\n\n return {\n SettingTableRender,\n TableListRender,\n // 需要单独回调的就抛出去,特殊场景多个列表使用,平常用url回调一次\n getTableData, //获取列表数据\n getColConfig, //获取配置接口\n saveColConfig, //保存配置接口\n resetSesstion,\n tableData,\n setloading,\n // 原实现漏掉了 loading / columnDefs / paramsCurrent / total,\n // 使用方无法感知加载态与分页总数,这里补齐。\n loading,\n columnDefs,\n paramsCurrent,\n total,\n filterKey,\n };\n};\nexport default useTableModule;\n","import { Input } from 'antd';\r\nimport { useMemo } from 'react';\r\n\r\nconst defaultStyle = {\r\n width: '100%',\r\n};\r\n\r\n/**\r\n * 列表页自定义搜索插槽\r\n *\r\n * @param dataIndex 字段名\r\n * @param language 是否英文\r\n * @param onChange 值变化回调\r\n * @param value 当前值\r\n */\r\nconst OtherSlot = ({ dataIndex, language, onChange, value, ...reset }) => {\r\n const slotOther = useMemo(() => {\r\n return (\r\n <Input\r\n value={value?.length ? value : null}\r\n style={defaultStyle}\r\n {...reset}\r\n onChange={(e) => {\r\n onChange(e.target.value);\r\n }}\r\n ></Input>\r\n );\r\n // dataIndex / value 变化时重建;其余字段由调用方通过 reset 透传\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [dataIndex, value]);\r\n return (\r\n <div\r\n style={{\r\n marginBottom: 8,\r\n }}\r\n >\r\n {slotOther}\r\n </div>\r\n );\r\n};\r\nexport default OtherSlot;\r\n"],"names":["isEmpty","value","get","obj","path","defaultValue","keys","cur","i","formatNumber","digits","num","formatMoney","options","symbol","showSymbol","showZeroZero","abs","prefix","formatPercent","groupBy","list","keyFn","result","item","key","omitEmpty","debounce","fn","wait","timer","args","cx","MayList","objectsArray","deepClone","seen","arr","Text","Typography","TextCell","React","MoneyCell","NumberCell","percent","TagCell","color","tagColor","text","hit","o","Tag","EllipsisCell","length","str","Tooltip","LinkCell","onClick","ActionCell","actions","action","crmTheme","STATUS_PRESETS","DICT_COLOR_MAP","AG_GRID_THEMES","DEFAULT_AG_GRID_THEME","agGridClass","theme","extra","ROW_HEIGHT_PRESETS","iconSet","iconsNs","SearchOutlined","SettingOutlined","SettingTable","onChange","columRef","language","useSelector","state","settingStatus","setSettingStatus","useState","headerCloumsList","setHeaderCloumsList","useEffect","current","saveQuit","changeCheck","index","openInitHeadList","Popover","Styles","open","Checkbox","e","Button","svgProps","SortAscending","props","SortDescending","SortUnSort","CustomHeader","ascSort","setAscSort","descSort","setDescSort","noSort","setNoSort","refButton","useRef","setopen","valueDefs","setvalueDefs","onMenuClicked","_a","onSortChanged","sort","onSortRequested","order","event","column","defaultStyle","context","useMemo","Render","Input","_b","search","filterKeyArrary","values","TableList","columnDefs","loading","customBottomTotal","tableRef","tableData","pagination","reset","customColumn","filterSearchRender","setfilterKey","filterKey","containerStyle","gridStyle","total","fromPagination","pinnedBottomRowData","objTotal","disableTotal","defaultCol","valueA","valueB","nodeA","nodeB","isDescending","defaultColDef","onGridReady","useCallback","params","getCellParams","isNotTip","render","isTotalRow","sortChanged","sortModel","onDragStopped","handleChangePage","page","size","Spin","AgGridReact","Pagination","useTableModule","tProps","defaultProps","sessionKey","renderKey","setParamsList","configKey","tableUrl","tableRequest","getColConfigRequest","saveColConfigRequest","canUseSession","saveSesstion","err","getSesstion","raw","setColumnDefs","setTableData","setTotal","setloading","paramsCurrent","requestIdRef","tableRequestRef","tableUrlRef","setParamsListRef","renderKeyRef","getColConfigRequestRef","saveColConfigRequestRef","checkHeadCols","NewArr","saveColConfig","request","res","getTableData","currentId","transform","newParams","response","rows","totalCount","newData","handleColumn","optType","filter","arrHead","columnMap","k","matched","visible","existingFields","getColConfig","currentRenderKey","newArr","resetSesstion","session","SettingTableRender","TableListRender","OtherSlot","dataIndex","slotOther"],"mappings":";;;;;AAKO,SAASA,GAAQC,GAAO;AAE7B,SADIA,KAAU,QAA+BA,MAAU,MACnD,OAAOA,KAAU,YAAY,OAAO,MAAMA,CAAK,IAAU,KACzD,MAAM,QAAQA,CAAK,IAAUA,EAAM,WAAW,IAC3C;AACT;AAGO,SAASC,GAAIC,GAAKC,GAAMC,GAAc;AAC3C,MAAI,CAACF,KAAO,CAACC,EAAM,QAAOC;AAC1B,QAAMC,IAAO,OAAOF,CAAI,EAAE,MAAM,GAAG;AACnC,MAAIG,IAAMJ;AACV,WAASK,IAAI,GAAGA,IAAIF,EAAK,QAAQE,KAAK,GAAG;AACvC,QAAID,KAAQ,KAA2B,QAAOF;AAC9C,IAAAE,IAAMA,EAAID,EAAKE,CAAC,CAAC;AAAA,EACnB;AACA,SAAOD,MAAQ,SAAYF,IAAeE;AAC5C;AAGO,SAASE,GAAaR,GAAOS,IAAS,GAAG;AAC9C,MAAIV,GAAQC,CAAK,EAAG,QAAO;AAC3B,QAAMU,IAAM,OAAOV,CAAK;AACxB,SAAI,OAAO,MAAMU,CAAG,IAAU,MACvBA,EAAI,eAAe,SAAS;AAAA,IACjC,uBAAuBD;AAAA,IACvB,uBAAuBA;AAAA,EAC3B,CAAG;AACH;AAWO,SAASE,GAAYX,GAAOY,IAAU,IAAI;AAC/C,QAAM,EAAE,QAAAH,IAAS,GAAG,QAAAI,IAAS,KAAK,YAAAC,IAAa,IAAM,cAAAC,IAAe,GAAK,IAAKH;AAC9E,MAAIb,GAAQC,CAAK,EAAG,QAAO;AAC3B,QAAMU,IAAM,OAAOV,CAAK;AACxB,MAAI,OAAO,MAAMU,CAAG,EAAG,QAAO;AAC9B,QAAMM,IAAMR,GAAa,KAAK,IAAIE,CAAG,GAAGD,CAAM,GACxCQ,IAASH,IAAaD,IAAS;AACrC,SAAIH,IAAM,IAED,IAAIO,CAAM,GADWD,CACJ,KAEnB,GAAGC,CAAM,GAAGD,CAAG;AACxB;AAGO,SAASE,GAAclB,GAAOS,IAAS,GAAG;AAC/C,MAAIV,GAAQC,CAAK,EAAG,QAAO;AAC3B,QAAMU,IAAM,OAAOV,CAAK;AACxB,SAAI,OAAO,MAAMU,CAAG,IAAU,MACvB,GAAGF,GAAaE,IAAM,KAAKD,CAAM,CAAC;AAC3C;AAGO,SAASU,GAAQC,GAAMC,GAAO;AACnC,QAAMC,IAAS,CAAA;AACf,UAACF,KAAQ,CAAA,GAAI,QAAQ,CAACG,MAAS;AAC7B,UAAMC,IAAM,OAAOH,KAAU,aAAaA,EAAME,CAAI,IAAItB,GAAIsB,GAAMF,CAAK;AACvE,IAAKC,EAAOE,CAAG,MAAGF,EAAOE,CAAG,IAAI,CAAA,IAChCF,EAAOE,CAAG,EAAE,KAAKD,CAAI;AAAA,EACvB,CAAC,GACMD;AACT;AAGO,SAASG,GAAUvB,GAAK;AAC7B,QAAMoB,IAAS,CAAA;AACf,gBAAO,KAAKpB,KAAO,CAAA,CAAE,EAAE,QAAQ,CAACsB,MAAQ;AACtC,IAAKzB,GAAQG,EAAIsB,CAAG,CAAC,MAAGF,EAAOE,CAAG,IAAItB,EAAIsB,CAAG;AAAA,EAC/C,CAAC,GACMF;AACT;AAGO,SAASI,GAASC,GAAIC,IAAO,KAAK;AACvC,MAAIC,IAAQ;AACZ,SAAO,YAAsBC,GAAM;AACjC,IAAID,KAAO,aAAaA,CAAK,GAC7BA,IAAQ,WAAW,MAAM;AACvB,MAAAA,IAAQ,MACRF,EAAG,MAAM,MAAMG,CAAI;AAAA,IACrB,GAAGF,CAAI;AAAA,EACT;AACF;AAGO,SAASG,MAAMD,GAAM;AAC1B,SAAOA,EAAK,OAAO,OAAO,EAAE,KAAK,GAAG;AACtC;AAMO,SAASE,GAAQC,IAAe,IAAIT,IAAM,SAAS;AACxD,SAAO,IAAI;AAAA,KACRS,KAAgB,CAAA,GAAI,IAAI,CAAC/B,MAEjB,EADQA,KAAA,gBAAAA,EAAMsB,QAAQtB,KAAA,gBAAAA,EAAK,KAClBA,CAAG,CACpB;AAAA,EACL;AACA;AAYO,SAASgC,EAAUlC,GAAOmC,IAAO,oBAAI,QAAO,GAAI;AAErD,MAAInC,MAAU,QAAQ,OAAOA,KAAU,SAAU,QAAOA;AAGxD,MAAImC,EAAK,IAAInC,CAAK,EAAG,QAAOmC,EAAK,IAAInC,CAAK;AAE1C,MAAI,MAAM,QAAQA,CAAK,GAAG;AACxB,UAAMoC,IAAM,CAAA;AACZ,WAAAD,EAAK,IAAInC,GAAOoC,CAAG,GACnBpC,EAAM,QAAQ,CAACuB,GAAMhB,MAAM;AACzB,MAAA6B,EAAI7B,CAAC,IAAI2B,EAAUX,GAAMY,CAAI;AAAA,IAC/B,CAAC,GACMC;AAAA,EACT;AAEA,MAAIpC,aAAiB,KAAM,QAAO,IAAI,KAAKA,EAAM,SAAS;AAC1D,MAAIA,aAAiB,OAAQ,QAAO,IAAI,OAAOA,EAAM,QAAQA,EAAM,KAAK;AAIxE,QAAME,IAAM,CAAA;AACZ,SAAAiC,EAAK,IAAInC,GAAOE,CAAG,GACnB,OAAO,KAAKF,CAAK,EAAE,QAAQ,CAACwB,MAAQ;AAClC,IAAAtB,EAAIsB,CAAG,IAAIU,EAAUlC,EAAMwB,CAAG,GAAGW,CAAI;AAAA,EACvC,CAAC,GACMjC;AACT;ACrJA,MAAM,EAAE,MAAAmC,MAASC;AAUV,SAASC,GAAS,EAAE,OAAAvC,KAAS;AAClC,SAAIA,KAAU,QAA+BA,MAAU,KAAWwC,gBAAAA,EAAA,cAACH,GAAA,EAAK,MAAK,YAAA,GAAY,GAAC,IACnFG,gBAAAA,EAAA,cAAC,QAAA,MAAM,OAAOxC,CAAK,CAAE;AAC9B;AAGO,SAASyC,GAAU,EAAE,OAAAzC,GAAO,QAAAS,IAAS,GAAG,YAAAK,IAAa,MAAQ;AAClE,MAAId,KAAU,QAA+BA,MAAU;AACrD,WAAOwC,gBAAAA,EAAA,cAACH,GAAA,EAAK,MAAK,YAAA,GAAY,GAAC;AAEjC,QAAM3B,IAAM,OAAOV,CAAK;AACxB,SAAI,OAAO,MAAMU,CAAG,IAAU8B,gBAAAA,EAAA,cAACH,GAAA,EAAK,MAAK,YAAA,GAAY,GAAC,oCAEnD,QAAA,EAAK,OAAO,EAAE,OAAO3B,IAAM,IAAI,YAAY,OAAA,EAAU,GACnDC,GAAYD,GAAK,EAAE,QAAAD,GAAQ,YAAAK,EAAA,CAAY,CAC1C;AAEJ;AAGO,SAAS4B,GAAW,EAAE,OAAA1C,GAAO,QAAAS,IAAS,GAAG,SAAAkC,IAAU,MAAS;AACjE,MAAI3C,KAAU,QAA+BA,MAAU;AACrD,WAAOwC,gBAAAA,EAAA,cAACH,GAAA,EAAK,MAAK,YAAA,GAAY,GAAC;AAEjC,QAAM3B,IAAM,OAAOV,CAAK;AACxB,SAAI,OAAO,MAAMU,CAAG,IAAU8B,gBAAAA,EAAA,cAACH,GAAA,EAAK,MAAK,YAAA,GAAY,GAAC,IAC/CG,gBAAAA,EAAA,cAAC,QAAA,MAAMG,IAAUzB,GAAcR,GAAKD,CAAM,IAAID,GAAaE,GAAKD,CAAM,CAAE;AACjF;AAGO,SAASmC,GAAQ,EAAE,OAAA5C,GAAO,OAAA6C,GAAO,SAAAjC,KAAW;AACjD,MAAIZ,KAAU,QAA+BA,MAAU;AACrD,WAAOwC,gBAAAA,EAAA,cAACH,GAAA,EAAK,MAAK,YAAA,GAAY,GAAC;AAEjC,MAAIS,IAAWD,GACXE,IAAO/C;AAEX,MAAIY,KAAWA,EAAQ,QAAQ;AAC7B,UAAMoC,IAAMpC,EAAQ,KAAK,CAACqC,MAAM,OAAOA,EAAE,KAAK,MAAM,OAAOjD,CAAK,CAAC;AACjE,IAAIgD,MACFD,IAAOC,EAAI,OACXF,IAAWA,KAAYE,EAAI;AAAA,EAE/B;AACA,SAAOR,gBAAAA,EAAA,cAACU,IAAA,EAAI,OAAOJ,KAAY,aAAYC,CAAK;AAClD;AAGO,SAASI,GAAa,EAAE,OAAAnD,GAAO,QAAAoD,IAAS,MAAM;AACnD,MAAIpD,KAAU,QAA+BA,MAAU;AACrD,WAAOwC,gBAAAA,EAAA,cAACH,GAAA,EAAK,MAAK,YAAA,GAAY,GAAC;AAEjC,QAAMgB,IAAM,OAAOrD,CAAK;AACxB,SAAIqD,EAAI,UAAUD,IAAeZ,gBAAAA,EAAA,cAAC,cAAMa,CAAI,IAE1Cb,gBAAAA,EAAA,cAACc,IAAA,EAAQ,OAAOD,EAAA,mCACbhB,GAAA,EAAK,UAAQ,IAAC,OAAO,EAAE,UAAU,IAAA,EAAI,GAAIgB,CAAI,CAChD;AAEJ;AAGO,SAASE,GAAS,EAAE,OAAAvD,GAAO,SAAAwD,KAAW;AAC3C,SAAIxD,KAAU,QAA+BA,MAAU,KAC9CwC,gBAAAA,EAAA,cAACH,GAAA,EAAK,MAAK,YAAA,GAAY,GAAC,IAG/BG,gBAAAA,EAAA,cAAC,KAAA,EAAE,SAAS,MAAMgB,KAAWA,EAAQxD,CAAK,EAAA,GAAI,OAAOA,CAAK,CAAE;AAEhE;AAGO,SAASyD,GAAW,EAAE,OAAAzD,GAAO,SAAA0D,IAAU,CAAA,KAAM;AAClD,SACElB,gBAAAA,EAAA,cAAC,QAAA,MACEkB,EAAQ,IAAI,CAACC,MACZnB,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKmB,EAAO;AAAA,MACZ,OAAO,EAAE,aAAa,EAAA;AAAA,MACtB,SAAS,MAAMA,EAAO,WAAWA,EAAO,QAAQA,CAAM;AAAA,IAAA;AAAA,IAErDA,EAAO;AAAA,EAAA,CAEX,CACH;AAEJ;AC9FY,MAACC,KAAW;AAAA,EACtB,OAAO;AAAA,IACL,cAAc;AAAA,IACd,cAAc;AAAA,IACd,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc;AAAA,IACd,UAAU;AAAA,IACV,eAAe;AAAA,IACf,WAAW;AAAA,EACf;AAAA,EACE,YAAY;AAAA,IACV,OAAO;AAAA,MACL,UAAU;AAAA,MACV,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,aAAa;AAAA,IACnB;AAAA,IACI,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,cAAc;AAAA,MACd,QAAQ;AAAA,IACd;AAAA,IACI,MAAM;AAAA,MACJ,UAAU;AAAA,IAChB;AAAA,IACI,MAAM;AAAA,MACJ,kBAAkB;AAAA,IACxB;AAAA,EACA;AACA,GAGaC,KAAiB;AAAA,EAC5B,SAAS,EAAE,OAAO,WAAW,MAAM,KAAI;AAAA,EACvC,SAAS,EAAE,OAAO,WAAW,MAAM,KAAI;AAAA,EACvC,OAAO,EAAE,OAAO,SAAS,MAAM,KAAI;AAAA,EACnC,YAAY,EAAE,OAAO,cAAc,MAAM,MAAK;AAAA,EAC9C,MAAM,EAAE,OAAO,cAAc,MAAM,MAAK;AAAA,EACxC,SAAS,EAAE,OAAO,WAAW,MAAM,KAAI;AACzC,GAGaC,KAAiB;AAAA,EAC5B,GAAG;AAAA,EACH,GAAG;AAAA,EACH,MAAM;AAAA,EACN,OAAO;AACT,GCzCaC,KAAiB,CAAC,UAAU,UAAU,YAAY,UAAU,SAAS,GAGrEC,KAAwB;AAO9B,SAASC,GAAYC,IAAQF,IAAuBG,GAAO;AAEhE,SAAO,CAAC,YADKJ,GAAe,SAASG,CAAK,IAAIA,IAAQF,EAC9B,IAAIG,CAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC7D;AAGY,MAACC,KAAqB;AAAA,EAChC,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX,GChBMC,KACJC,EAAQ,WAAW,OAAOA,EAAQ,WAAY,WAAWA,EAAQ,UAAUA,GAEhEC,KAAiBD,EAAQ,kBAAkBD,GAAQ,gBACnDG,KAAkBF,EAAQ,mBAAmBD,GAAQ;;;;;;;;;;;;;;;;;;;GChB5DI,KAAe,CAAC,EAAE,UAAAC,IAAW,MAAM;AAAC,GAAG,UAAAC,QAAe;AAC1D,QAAM,EAAE,UAAAC,EAAA,IAAaC,GAAY,CAACC,MAAUA,EAAM,UAAU,GACtD,CAACC,GAAeC,CAAgB,IAAIC,EAAS,EAAK,GAClD,CAACC,GAAkBC,CAAmB,IAAIF;AAAA,IAC9C/C,EAAUyC,EAAS,OAAO;AAAA,EAAA;AAK5B,EAAAS,EAAU,MAAM;AACd,UAAMC,IAAUV,KAAA,gBAAAA,EAAU;AAC1B,IAAI,CAACU,KAAW,CAACA,EAAQ,UAEpBN,KACHI,EAAoBjD,EAAUmD,CAAO,CAAC;AAAA,EAE1C,GAAG,CAACV,KAAA,gBAAAA,EAAU,SAASI,CAAa,CAAC;AAErC,QAAMO,IAAW,MAAM;AAErB,IAAAZ,EAAS;AAAA,MACP,QAAQQ;AAAA,MACR,SAAQ;AAAA,IAAA,CACT,GACDF,EAAiB,EAAK;AAAA,EACxB,GACMO,IAAc,CAACC,MAAU;AAE7B,IAAAN,EAAiBM,CAAK,EAAE,UAAU,CAACN,EAAiBM,CAAK,EAAE,SAC3DL,EAAoB,CAAC,GAAGD,CAAgB,CAAC;AAAA,EAC3C,GACMO,IAAmB,MAAM;AAC7B,IAAAN,EAAoBjD,EAAUyC,EAAS,OAAO,CAAC;AAAA,EAIjD;AACA,6CACG,OAAA,MACC,sBAAA;AAAA,IAACe;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,WAAWC,EAAO;AAAA,MAIlB,MAAM,EAAQZ;AAAA,MACd,cAAc,CAACa,MAAS;AACtB,QAAAZ,EAAiBY,CAAI;AAAA,MACvB;AAAA,MACA,SACE,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,SAAS;AAAA,YACT,WAAW;AAAA,YACX,WAAW;AAAA,YACX,UAAU;AAAA,YACV,UAAU;AAAA,UAAA;AAAA,QACZ;AAAA,QACA,sBAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,cAAc;AAAA,cACd,eAAe;AAAA,YAAA;AAAA,UACjB;AAAA,UACChB,IAAW,gBAAgB;AAAA,QAAA;AAAA,QAE7BM,EAAiB,IAAI,CAAC3D,GAAMiE,MAEzB,sBAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,YAAA;AAAA,YAEd,KAAKjE,IAAOiE;AAAA,UAAA;AAAA,UACZ,sBAAA;AAAA,YAACK;AAAA,YAAA;AAAA,cACC,OAAM;AAAA,cACN,SAAStE,EAAK;AAAA,cACd,UAAYA,EAAK;AAAA,cACjB,UAAU,CAACuE,MAAMP,EAAYC,CAAK;AAAA,YAAA;AAAA,UAAA;AAAA,UAEpC,sBAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,KAAK;AAAA,gBACL,YAAY;AAAA,cAAA;AAAA,YACd;AAAA,aACEZ,IAAWrD,EAAK,YAAYA,EAAK,cACjCA,EAAK;AAAA,UAAA;AAAA,QACT,CAGL;AAAA,MAAA,GAEH,sBAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,UAAU;AAAA,YACV,SAAS;AAAA,YACT,gBAAgB;AAAA,YAChB,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,WAAW;AAAA,UAAA;AAAA,QACb;AAAA,QACA,sBAAA,cAACwE,MAAO,SAAST,GAAU,MAAK,UAAA,GAC7BV,IAAW,SAAS,IACvB;AAAA,QACA,sBAAA,cAACmB,MAAO,SAAS,MAAMf,EAAiB,EAAK,EAAA,GAC1CJ,IAAW,WAAW,IACzB;AAAA,MAAA,CAEJ;AAAA,IAAA;AAAA,IAEF,sBAAA,cAACJ,IAAA,EAAgB,SAAS,MAAMiB,IAAiB,CAAG;AAAA,EAAA,CAExD;AAEJ,GChHMO,KAAW;AAAA,EACf,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AACV,GAGaC,KAAgB,CAACC,MAC5B1D,gBAAAA,EAAA,cAAC,OAAA,EAAK,GAAGwD,IAAW,GAAGE,GAAO,GAAE,iBAAgB,QAAK,OAAA,GACnD1D,gBAAAA,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,GAAE;AAAA,IACF,QAAK;AAAA,EAAA;AACP,CACF,GAIW2D,KAAiB,CAACD,MAC7B1D,gBAAAA,EAAA,cAAC,OAAA,EAAK,GAAGwD,IAAW,GAAGE,GAAO,GAAE,iBAAgB,QAAK,OAAA,GACnD1D,gBAAAA,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,GAAE;AAAA,IACF,QAAK;AAAA,EAAA;AACP,CACF,GAIW4D,KAAa,CAACF,MACzB1D,gBAAAA,EAAA,cAAC,OAAA,EAAK,GAAGwD,IAAW,GAAGE,GAAO,GAAE,iBAAgB,QAAK,OAAA,GACnD1D,gBAAAA,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,GAAE;AAAA,IACF,QAAK;AAAA,EAAA;AACP,CACF,GCzCF6D,KAAe,CAACH,MAAU;AACxB,QAAM,CAACI,GAASC,CAAU,IAAItB,EAAS,UAAU,GAC3C,CAACuB,GAAUC,CAAW,IAAIxB,EAAS,UAAU,GAC7C,CAACyB,GAAQC,CAAS,IAAI1B,EAAS,UAAU,GACzC2B,IAAYC,EAAO,IAAI,GACvB,CAACjB,GAAMkB,CAAO,IAAI7B,EAAS,EAAK,GAEhC,CAAC8B,GAAWC,CAAY,IAAI/B,EAAS,IAAI,GACzCgC,IAAgB,MAAM;AAC1B,IAAAf,EAAM,eAAeU,EAAU,OAAO;AAAA,EACxC;AAGA,EAAAxB,EAAU,MAAM;;AACd,UAAMhD,IAAM,MAAM,QAAQ8D,EAAM,SAAS,IAAIA,EAAM,YAAY,CAAA;AAC/D,IAAAc,IAAaE,IAAAlF,GAAQI,GAAK,OAAO,EAAE,IAAI8D,EAAM,KAAK,MAArC,gBAAAgB,EAAwC,UAAS,IAAI;AAAA,EACpE,GAAG,CAAChB,EAAM,WAAWA,EAAM,KAAK,CAAC;AAEjC,QAAMiB,IAAgB,MAAM;AAC1B,UAAMC,IAAOlB,EAAM,OAAO,QAAA;AAC1B,YAAQ,IAAIkB,GAAK,MAAM,GAEvBb,EAAWa,MAAS,QAAQ,WAAW,UAAU,GACjDX,EAAYW,MAAS,SAAS,WAAW,UAAU,GACnDT,EAAWS,IAAkB,aAAX,QAAqB;AAAA,EACzC,GAEMC,IAAkB,CAACC,GAAOC,MAAU;AACxC,IAAArB,EAAM,QAAQoB,GAAOC,EAAM,QAAQ;AAAA,EACrC;AAGA,EAAAnC,EAAU,MAAM;AACd,UAAMoC,IAAStB,EAAM;AACrB,QAAI,GAACsB,KAAU,OAAOA,EAAO,oBAAqB;AAClD,aAAAA,EAAO,iBAAiB,eAAeL,CAAa,GACpDA,EAAA,GACO,MAAM;AACX,QAAAK,EAAO,oBAAoB,eAAeL,CAAa;AAAA,MACzD;AAAA,EACF,GAAG,CAACjB,EAAM,MAAM,CAAC,GAGbA,EAAM,sBAGgB,GAAAA,EAAM;AAKhC,MAAIkB,IAAO;AACX,EAAIlB,EAAM,kBAIPkB,IACC5E,gBAAAA,EAAA,cAAC,OAAA,EAAI,WAAWmD,EAAO,UAAA,GACrBnD,gBAAAA,EAAA,cAAC,OAAA,EAAI,SAAS,CAAC+E,MAAUF,EAAgB,IAAIE,CAAK,GAAG,YAAY,CAACA,MAAUF,EAAgB,IAAIE,CAAK,GAAG,WAAW,GAAG5B,EAAO,UAAU,IAAIA,EAAOW,CAAO,CAAC,GAAA,GAC1J9D,gBAAAA,EAAA,cAAC2D,IAAA,IAAe,CAChB,GACA3D,gBAAAA,EAAA,cAAC,OAAA,EAAI,SAAS,CAAC+E,MAAUF,EAAgB,OAAOE,CAAK,GAAG,YAAY,CAACA,MAAUF,EAAgB,QAAQE,CAAK,GAAG,WAAW,GAAG5B,EAAO,UAAU,IAAIA,EAAOa,CAAQ,CAAC,GAAA,GAClKhE,gBAAAA,EAAA,cAACyD,IAAA,IAAc,CACf,GACAzD,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAS,CAAC+E,MAAUF,EAAgB,QAAQE,CAAK;AAAA,MACjD,YAAY,CAACA,MAAUF,EAAgB,IAAIE,CAAK;AAAA,MAChD,WAAW,GAAG5B,EAAO,UAAU,IAAIA,EAAO,YAAY,IAAIA,EAAOe,CAAM,CAAC;AAAA,IAAA;AAAA,oCAEvEN,IAAA,IAAW;AAAA,EAAA,CAEhB;AAGJ,QAAMqB,IAAe;AAAA,IACnB,OAAO;AAAA,EAAA,GAEHC,IAAUC,EAAQ,MAAM;;AAE1B,QAAIC,MAASV,IAAAhB,EAAM,mBAAmBA,EAAM,KAAK,MAApC,gBAAAgB,EAAuC,WAAUW;AAE9D,WACErF,gBAAAA,EAAA;AAAA,MAACoF;AAAA,MAAA;AAAA,QACE,KAAKE,IAAA5B,EAAM,mBAAmBA,EAAM,KAAK,MAApC,gBAAA4B,EAAuC,YAAS,CAAA;AAAA,QACtD,OAAOf;AAAA,QACP,UAAU,CAACjB,MAAM;AACf,UAAAkB,EAAalB,EAAE,SAAOA,EAAE,OAAO,QAAMA,CAAC;AAAA,QAExC;AAAA,QACA,OAAO2B;AAAA,MAAA;AAAA,IAAA;AAAA,EAGf,GAAG,CAACvB,EAAM,OAAMa,CAAS,CAAC;AAG1B,MAAIgB,IAAS;AACb,SAAI7B,EAAM,WACR6B,oCACG,OAAA,MACCvF,gBAAAA,EAAA;AAAA,IAACkD;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,MACP,MAAAE;AAAA,MACA,SAAQ;AAAA,MACR,kBAAkBD,EAAO;AAAA,MACzB,cAAc,CAACG,MAAMgB,EAAQhB,CAAC;AAAA,MAC9B,WAAU;AAAA,MACV,SACEtD,gBAAAA,EAAA,cAAC,OAAA,EAAI,WAAWmD,EAAO,iBAEpB+B,GACDlF,gBAAAA,EAAA,cAAC,OAAA,EAAI,WAAWmD,EAAO,oBAAA,GACrBnD,gBAAAA,EAAA;AAAA,QAACuD;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM;AACZ,kBAAMiC,IAAkB9B,EAAM,UAAU,OAAO,OAAK3F,EAAE,SAAS2F,EAAM,KAAK;AAC3E,YAAIa,KAAA,QAAAA,EAAW,UACbiB,EAAgB,KAAK;AAAA,cACnB,OAAO9B,EAAM;AAAA,cACb,OAAOa;AAAA,YAAA,CACR;AAEH,kBAAMkB,IAASD,KAAA,QAAAA,EAAiB,SAASA,IAAkB,CAAA;AAC3D,YAAA9B,EAAM,SAAS+B,CAAM,GACrB/B,EAAM,aAAa+B,CAAM,GACzBnB,EAAQ,EAAK;AAAA,UACf;AAAA,QAAA;AAAA,QAECZ,EAAM,WAAW,WAAW;AAAA,MAAA,GAE/B1D,gBAAAA,EAAA;AAAA,QAACuD;AAAA,QAAA;AAAA,UACC,OAAO,EAAE,YAAY,GAAA;AAAA,UACrB,SAAS,MAAM;AACX,kBAAMiC,IAAkB9B,EAAM,UAAU,OAAO,OAAK3F,EAAE,SAAS2F,EAAM,KAAK,GACtE+B,IAASD,KAAA,QAAAA,EAAiB,SAASA,IAAkB,CAAA;AAE3D,YAAAlB,EAAQ,EAAK,GACbZ,EAAM,aAAa+B,CAAM,GACzBjB,EAAa,IAAI,GACjBd,EAAM,SAAS+B,CAAM;AAAA,UACvB;AAAA,QAAA;AAAA,QAEC/B,EAAM,WAAW,UAAU;AAAA,MAAA,CAEhC,CACF;AAAA,IAAA;AAAA,IAGF1D,gBAAAA,EAAA,cAAC+B,IAAA,EAAe,OAAO,EAAE,OAAOwC,IAAY,YAAY,uBAAuB,YAAY,IAAI,QAAQ,UAAA,EAAU,CAAG;AAAA,EAAA,CAExH,IAIFvE,gBAAAA,EAAA,cAAC,OAAA,EAAI,WAAWmD,EAAO,WAAA,GAErBnD,gBAAAA,EAAA,cAAC,OAAA,EAAI,WAAU,oBAAA,GAAqB0D,EAAM,WAAY,GACrDkB,GACAW,CACH;AAEJ,GC7IMG,KAAY,CAAC;AAAA,EAAE,YAAAC,IAAa,CAAA;AAAA,EAAG,SAAAC;AAAA,EAAS,mBAAAC,IAAoB;AAAA,EAAO,UAAA3D,IAAW,MAAM;AAAA,EAAC;AAAA,EAAG,UAAA4D;AAAA,EAAU,WAAAC;AAAA,EAAU,YAAAC,IAAW;AAAA,EAAM,OAAAC,IAAM,CAAA;AAAA,EACzI,cAAAC,IAAa,CAAA;AAAA,EAAG,oBAAAC,IAAmB,CAAA;AAAA,EAAG,cAAAC;AAAA,EAAa,WAAAC;AAAS,MAAO;AAKjE,QAAMC,IAAiBnB,EAAQ,OAAO,EAAE,OAAO,QAAQ,QAAS,QAAO,UAAS,WAAA,IAAe,CAAA,CAAE,GAC3FoB,IAAYpB,EAAQ,OAAO,EAAE,QAAQ,QAAQ,OAAO,WAAW,EAAE,GAEjE/C,IAAWC,GAAY,CAACC,MAAUA,EAAM,WAAW,QAAQ,GAG3DkE,IAAQrB,EAAQ,MAAM;AAC1B,UAAMsB,IAAiBT,KAAc,OAAOA,KAAe,WAAWA,EAAW,QAAQ;AACzF,WAAI,OAAOS,KAAmB,YAAY,CAAC,OAAO,MAAMA,CAAc,IAAUA,IACzE,MAAM,QAAQV,CAAS,IAAIA,EAAU,SAAS;AAAA,EACvD,GAAG,CAACC,GAAYD,CAAS,CAAC,GACpBW,IAAsBvB,EAAQ,MAAM;AACxC,QAAIwB,IAAW,CAAA;AACf,WAAAhB,EAAW,IAAI,CAAC5H,GAAGiF,MAAU;AAC3B,UAAIA,KAAS;AACX,QAAA2D,EAAS5I,EAAE,KAAK,IAAI,SACpB4I,EAAS,WAAc;AAAA,WAClB;AACL,YAAIH,IAAQzI,EAAE,eAAe,KAAK;AAClC,QAAAgI,EAAU,IAAI,CAAChH,MAAS;AACtB,cAAIC,IAAMjB,EAAE,SAASA,EAAE,OAAOA,EAAE,MAAMA,EAAE,MAAMA,EAAE,OAC5C6I,IAAe,CAAC,eAAe,cAAc,gBAAgB;AACjE,UAAI,CAAC,MAAM,OAAO7H,EAAKC,CAAG,CAAC,CAAC,KAAK,CAAC4H,EAAa,SAAS7I,EAAE,KAAK,MAC7DyI,KAAS,OAAOzH,EAAKC,CAAG,CAAC;AAAA,QAE7B,CAAC,GACD2H,EAAS5I,EAAE,KAAK,IAAI,OAAOyI,KAAS,YAAYA,IAAQ,IAAIA,IAAQ;AAAA,MACtE;AAAA,IACF,CAAC,GACM,CAACG,CAAQ;AAAA,EAElB,GAAG,CAACZ,GAAWJ,CAAU,CAAC,GACpBkB,IAAa;AAAA,IACjB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,UAAS;AAAA,IACT,YAAY,CAACC,GAAQC,GAAQC,GAAOC,GAAOC,MAElC;AAAA,IAET,iBAAiBrD;AAAA;AAAA,EAAA,GAGbsD,IAAgBhC,EAAQ,OACrB;AAAA,IACL,OAAO;AAAA,IACP,YAAY;AAAA,EAAA,IAEb,CAAA,CAAE,GAECiC,IAAcC,EAAY,CAACC,MAAW;AAC1C,IAAAxB,MAAaA,EAAS,UAAUwB;AAAA,EAIlC,GAAG,CAAA,CAAE,GACCC,IAAgB,CAACD,MAAW;;AAChC,UAAM,EAAE,UAAAE,GAAU,QAAAC,EAAA,IAAWH,EAAO,UAAU,CAAA,GAExCI,MAAahD,IAAA4C,EAAO,SAAP,gBAAA5C,EAAa,cAAa;AAC7C,WAAO+C,KAAU,CAACC,IAChBD,EAAOH,CAAM,IAEbtH,gBAAAA,EAAA,cAACc,IAAA,EAAQ,OAAO0G,IAAW,KAAKF,EAAO,SAAS,IAAI,OAAK,IAAC,WAAU,MAAA,GACjE,OAAOA,EAAO,SAAS,YAAYA,EAAO,QAAQA,EAAO,QAAQ,IACpE;AAAA,EAEJ,GAKMK,IAAcN,EAAY,CAACC,MAAW;;AAC1C,UAAMM,MAAYlD,IAAA4C,EAAO,IAAI,WAAW,SAAtB,gBAAA5C,EAA4B,cAAa,CAAA;AAC3D,IAAAxC,EAAS;AAAA,MACP,MAAM0F,EAAU,CAAC,KAAK;AAAA,MACtB,SAAS;AAAA,IAAA,CACV;AAAA,EACH,GAAG,CAAC1F,CAAQ,CAAC,GAEP2F,IAAgB,CAACP,MAAW;AAChC,IAAApF,EAAS;AAAA,MACP,QAAQoF,EAAO,IACZ,cAAA,EACA,OAAO,CAACvI,MAASA,EAAK,KAAK,EAC3B,IAAI,CAACA,OACG;AAAA,QACL,GAAGA;AAAA,QACH,QAAQ;AAAA,QACR,OAAOA,EAAK;AAAA,QACZ,MAAMA,EAAK;AAAA,QACX,SAASA,EAAK;AAAA,MAAA,EAEjB;AAAA,IAAA,CACJ;AAAA,EACH,GAEI+I,IAAmB,CAACC,GAAKC,MAAO;AACpC,IAAA9F,EAAS;AAAA,MACP,SAAQ;AAAA,MACR,YAAW;AAAA,QACT,MAAA6F;AAAA,QAAK,MAAAC;AAAA,MAAA;AAAA,IACP,CACD;AAAA,EACH;AACE,yCACG,OAAA,EAAI,OAAO1B,KACTV,IAAQ5F,gBAAAA,EAAA,cAAC,SAAI,WAAW,iBAAA,mCAClBiI,IAAA,IAAK,CACZ,IAAO,MACPjI,gBAAAA,EAAA,cAAC,SAAI,OAAOuG,GAAW,WAAW,8BAAA,GAChCvG,gBAAAA,EAAA;AAAA,IAACkI;AAAA,IAAA;AAAA,MACC,SAASnC;AAAA,MACT,qBAAqBF,IAAoBa,IAAsB,CAAA;AAAA,MAC/D,eAAAS;AAAA,MACA,sBAAsB;AAAA,MACtB,eAAeQ;AAAA,MACf,eAAAE;AAAA,MACA,+BAA+B;AAAA,MAC/B,wBAAwB;AAAA,MACvB,GAAG5B;AAAA,MAEJ,YAAY,CAAC,GAAGN,EAAW,IAAI,CAAC5G,OACvB;AAAA,QACL,GAAG8H;AAAA,QACH,GAAG9H;AAAA,QACH,YAAYqD,IAA4BrD,EAAK,YAAtBA,EAAK;AAAA;AAAA;AAAA;AAAA,QAI5B,cAAawI;AAAA,QACb,uBAAsB;AAAA,UACpB,UAAS,CAACjE,MAAI;AACZ,oBAAQ,IAAIA,GAAE,IAAI,GAElBpB,EAAS;AAAA,cACP,QAAOoB,KAAG,CAAA;AAAA,YAAC,CACZ;AAAA,UACH;AAAA,UACA,cAAA8C;AAAA,UACA,WAAAC;AAAA,UACA,UAAAjE;AAAA,UACA,oBAAA+D;AAAA,UACA,GAAGpH;AAAA,QAAA;AAAA,MACL,EAEH,GAAE,GAAGmH,CAAY;AAAA,MAClB,OAAO;AAAA,QACL,eAAe;AAAA;AAAA;AAAA,QAGf,gBAAgB;AAAA;AAAA;AAAA,QAGhB,YAAY;AAAA;AAAA;AAAA,MAAA;AAAA,MAId,aAAAkB;AAAA,IAAA;AAAA,EAAA,CAGJ,GACCpB,IAAWhG,gBAAAA,EAAA,cAACmI,IAAA,EAAW,OAAA3B,GAAc,UAAUsB,GAAmB,GAAG9B,EAAA,CAAY,IAAG,IACvF;AAEJ,GC5KMoC,KAAiB,CAACC,IAAS,IAAIC,IAAe,CAAA,MAAO;;AAEzD,QAAM;AAAA,IACJ,YAAAC;AAAA,IACA,WAAAC;AAAA,IACA,eAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,cAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,sBAAAC;AAAA,EAAA,IACE,EAAE,GAAGR,GAAc,GAAGD,EAAA,GAGpBU,IAAgB,OAAO,SAAW,OAAe,CAAC,CAAC,OAAO,gBAE1DC,IAAe3B;AAAA,IACnB,CAACC,MAAW;AACV,UAAKyB;AACL,YAAI;AACF,iBAAO,eAAe,QAAQR,GAAY,KAAK,UAAUjB,CAAM,CAAC;AAAA,QAClE,SAAS2B,GAAK;AAEZ,kBAAQ,KAAK,yCAAyCA,CAAG;AAAA,QAC3D;AAAA,IACF;AAAA,IACA,CAACV,GAAYQ,CAAa;AAAA,EAAA,GAGtBG,IAAc7B,EAAY,MAAM;AACpC,QAAI,CAAC0B,EAAe,QAAO;AAC3B,QAAI;AACF,YAAMI,IAAM,OAAO,eAAe,QAAQZ,CAAU;AACpD,aAAOY,IAAM,KAAK,MAAMA,CAAG,IAAI;AAAA,IACjC,SAASF,GAAK;AAEZ,qBAAQ,KAAK,yCAAyCA,CAAG,GAClD;AAAA,IACT;AAAA,EACF,GAAG,CAACV,GAAYQ,CAAa,CAAC,GAExB5G,IAAWkC,EAAO,EAAE,GACpB,CAACsB,GAAYyD,CAAa,IAAI3G,EAAS,CAAA,CAAE,GAEzC,CAACsD,GAAWsD,CAAY,IAAI5G,EAAS,CAAA,CAAE,GAEvC,CAAC+D,GAAO8C,CAAQ,IAAI7G,EAAS,MAAS,GAEtC,CAACmD,GAAS2D,CAAU,IAAI9G,EAAS,EAAI,GAErC+G,IAAgBnF,EAAO6E,EAAA,KAAiB,CAAA,CAAE,GAE1C,CAAC7C,GAAWD,CAAY,IAAI3D,IAASiC,KAAAwE,EAAA,MAAA,gBAAAxE,GAAe,WAAU,EAAE,GAEhE+E,IAAepF,EAAO,CAAC,GAKvBqF,IAAkBrF,EAAOuE,CAAY;AAC3C,EAAAc,EAAgB,UAAUd;AAC1B,QAAMe,IAActF,EAAOsE,CAAQ;AACnC,EAAAgB,EAAY,UAAUhB;AACtB,QAAMiB,IAAmBvF,EAAOoE,CAAa;AAC7C,EAAAmB,EAAiB,UAAUnB;AAC3B,QAAMoB,IAAexF,EAAOmE,CAAS;AACrC,EAAAqB,EAAa,UAAUrB;AACvB,QAAMsB,IAAyBzF,EAAOwE,CAAmB;AACzD,EAAAiB,EAAuB,UAAUjB;AACjC,QAAMkB,KAA0B1F,EAAOyE,CAAoB;AAC3D,EAAAiB,GAAwB,UAAUjB;AAKlC,QAAMkB,IAAgB3C,EAAY,MAAM;AACtC,UAAM,EAAE,MAAAzC,MAAS4E,EAAc,SACzBS,IAAS9H,EAAS,QAAQ,IAAI,CAACpD,OAC5B;AAAA,MACL,GAAGA;AAAA,MACH,MAAM6F,KAAQA,EAAK,SAAS7F,EAAK,QAAQ6F,EAAK,OAAO;AAAA,IAAA,EAExD;AACD,IAAAwE,EAAc1J,EAAUuK,CAAM,CAAC;AAAA,EACjC,GAAG,CAAA,CAAE,GAKCC,KAAgB7C,EAAY,MAAM;AACtC,UAAM8C,IAAUJ,GAAwB;AACxC,QAAI,CAACI,GAAS;AACZ,cAAQ,KAAK,mDAAmD;AAChE;AAAA,IACF;AACA,UAAM7C,IAAS;AAAA,MACb,aAAaoB;AAAA,MACb,YAAY;AAAA,QACV,YAAY;AAAA,UACV,UAAUc,EAAc,QAAQ,OAAOA,EAAc,QAAQ,OAAO;AAAA,QAAA;AAAA,QAEtE,cAAcrH,EAAS;AAAA,MAAA;AAAA,IACzB,GAEIiI,IAAMD,EAAQ7C,CAAM;AAE1B,IAAI8C,KAAO,OAAOA,EAAI,SAAU,cAC9BA,EAAI,MAAM,CAACnB,MAAQ,QAAQ,MAAM,6BAA6BA,CAAG,CAAC;AAAA,EAEtE,GAAG,CAACP,CAAS,CAAC,GAKR2B,IAAehD,EAAY,MAAM;AACrC,UAAM8C,IAAUT,EAAgB;AAChC,QAAI,CAACS,GAAS;AACZ,cAAQ,KAAK,0CAA0C,GACvDZ,EAAW,EAAK;AAChB;AAAA,IACF;AAEA,IAAAE,EAAa,WAAW;AACxB,UAAMa,IAAYb,EAAa,SAEzBc,IAAYX,EAAiB,SAC7BY,IAAYD,IAAYA,EAAUf,EAAc,OAAO,IAAIA,EAAc;AAC/E,WAAAD,EAAW,EAAI,GACRY,EAAQK,GAAWb,EAAY,OAAO,EAAE;AAAA,MAC7C,CAACS,MAAQ;AAEP,YAAIE,MAAcb,EAAa,QAAS;AACxC,cAAMgB,IAAWL,KAAA,gBAAAA,EAAK,UAEhBM,IAAO,MAAM,QAAQD,CAAQ,IAAIA,KAAWA,KAAA,gBAAAA,EAAU,SAAQ,CAAA,GAE9DE,IAAa,MAAM,QAAQF,CAAQ,KAAgBA,KAAA,OAAZ,SAAYA,EAAU;AACnE,QAAI,OAAOE,KAAe,YAAY,CAAC,OAAO,MAAMA,CAAU,KAC5DrB,EAASqB,CAAU;AAErB,cAAMC,KAAUF,EAAK,IAAI,CAAC3L,OACjB;AAAA,UACL,GAAGA;AAAA,UACH,GAAIA,EAAK,WAAW,CAAA;AAAA,QAAC,EAExB;AACD,QAAAsK,EAAauB,EAAO,GACpBrB,EAAW,EAAK;AAAA,MAClB;AAAA,MACA,CAACN,MAAQ;AACP,QAAIqB,MAAcb,EAAa,YAC/B,QAAQ,MAAM,4BAA4BR,CAAG,GAE7CM,EAAW,EAAK;AAAA,MAClB;AAAA,IAAA;AAAA,EAEJ,GAAG,CAAA,CAAE,GAKCsB,IAAexD;AAAA,IACnB,CAACC,MAAW;AACV,YAAM,EAAE,QAAAtC,GAAQ,SAAA8F,GAAS,MAAAlG,GAAM,YAAAoB,GAAY,QAAA+E,MAAWzD;AACtD,UAAI0D,IAAU,CAAA;AACd,UAAIhG,GAAQ;AAIV,cAAMiG,IAAY,IAAI,IAAIjG,EAAO,IAAI,CAACjH,MAAM,CAACA,EAAE,OAAOA,CAAC,CAAC,CAAC;AACzD,QAAAiN,IAAU7I,EAAS,QAAQ,IAAI,CAAC+I,MAAM;AACpC,gBAAMC,IAAUF,EAAU,IAAIC,EAAE,KAAK;AACrC,cAAI,CAACC,EAAS,QAAO,EAAE,GAAGD,EAAA;AAC1B,gBAAME,KAAUD,EAAQ,YAAY,SAAYA,EAAQ,UAAU,CAACA,EAAQ;AAC3E,iBAAO,EAAE,GAAGD,GAAG,MAAM,CAACE,IAAS,SAAAA,GAAA;AAAA,QACjC,CAAC;AAGD,cAAMC,KAAiB,IAAI,IAAIlJ,EAAS,QAAQ,IAAI,CAAC+I,MAAMA,EAAE,KAAK,CAAC;AACnE,QAAAlG,EAAO,QAAQ,CAACjH,MAAM;AACpB,cAAI,CAACsN,GAAe,IAAItN,EAAE,KAAK,GAAG;AAChC,kBAAMqN,IAAUrN,EAAE,YAAY,SAAYA,EAAE,UAAU,CAACA,EAAE;AACzD,YAAAiN,EAAQ,KAAK,EAAE,GAAGjN,GAAG,MAAM,CAACqN,GAAS,SAAAA,GAAS;AAAA,UAChD;AAAA,QACF,CAAC,GAEDjJ,EAAS,UAAU6I,GAGnBd,GAAA;AAAA,MACF;AACA,MAAIY,KAAW,gBAEb1B,EAAc1J,EAAUsL,KAAA,QAAAA,EAAS,SAASA,IAAU7I,EAAS,OAAO,CAAC,GAEnE2I,KAAW,WAEbtB,EAAc,UAAU;AAAA,QACtB,GAAGA,EAAc;AAAA,QACjB,MAAA5E;AAAA,MAAA,GAGFoE,EAAaQ,EAAc,OAAO,GAElCQ,EAAA,GACAK,EAAA,IAEErE,MAEFwD,EAAc,UAAU;AAAA,QACtB,GAAGA,EAAc;AAAA,QACjB,GAAGxD;AAAA,MAAA,GAELgD,EAAaQ,EAAc,OAAO,GAClCa,EAAA,IAEEU,MAEFvB,EAAc,UAAU;AAAA,QACtB,GAAGA,EAAc;AAAA,QACjB,QAAAuB;AAAA,MAAA,GAGEvB,EAAc,QAAQ,QAAQA,EAAc,QAAQ,OAAO,MAC7DA,EAAc,QAAQ,OAAO,IAE/BR,EAAaQ,EAAc,OAAO,GAClCa,EAAA;AAAA,IAEJ;AAAA,IACA,CAACrB,GAAckB,IAAeF,GAAeK,CAAY;AAAA,EAAA,GAMrDiB,KAAejE,EAAY,MAAM;AACrC,UAAM8C,IAAUL,EAAuB;AACvC,QAAI,CAACK,GAAS;AACZ,cAAQ,KAAK,kDAAkD,GAC/DZ,EAAW,EAAK;AAChB;AAAA,IACF;AACA,UAAM,EAAE,MAAA3E,MAAS4E,EAAc,SACzB+B,IAAmB1B,EAAa;AACtC,IAAAM,EAAQzB,CAAS,EAAE;AAAA,MACjB,CAAC,EAAE,UAAA+B,EAAA,MAAe;;AAEhB,cAAMe,OADe9G,IAAA+F,KAAA,gBAAAA,EAAU,eAAV,gBAAA/F,EAAsB,iBAAgB,CAAA,GAC/B,IAAI,CAAC3F,OACxB;AAAA,UACL,GAAGA;AAAA,UACH,MAAM,CAACA,EAAK;AAAA,UACZ,SAASA,EAAK;AAAA,UACd,MAAM6F,KAAQA,EAAK,SAAS7F,EAAK,QAAQ6F,EAAK,OAAO;AAAA,UACrD,QAAQ2G,IAAmBA,EAAiBxM,EAAK,KAAK,IAAI;AAAA,QAAA,EAE7D;AACD,QAAAqK,EAAc1J,EAAU8L,CAAM,CAAC,GAC/BrJ,EAAS,UAAUzC,EAAU8L,CAAM,GACnCnB,EAAA;AAAA,MACF;AAAA,MACA,CAACpB,MAAQ;AACP,gBAAQ,MAAM,6BAA6BA,CAAG,GAC9CM,EAAW,EAAK;AAAA,MAClB;AAAA,IAAA;AAAA,EAEJ,GAAG,CAACb,GAAW2B,CAAY,CAAC,GAKtBoB,KAAgBpE,EAAY,MAAM;AACtC,UAAMqE,IAAUxC,EAAA,KAAiB,CAAA;AACjC,IAAAM,EAAc,UAAUkC,GACxBtF,EAAasF,EAAQ,UAAU,EAAE,GACjC1B,EAAA,GAEAK,EAAA;AAAA,EACF,GAAG,CAACnB,GAAac,GAAeK,CAAY,CAAC;AAK7C,EAAAzH,EAAU,MAAM;AACd,IAAI8F,KAEF4C,GAAA;AAAA,EAGJ,GAAG,CAAC5C,CAAS,CAAC;AAEd,QAAMiD,KAAqBtE;AAAA,IACzB,CAAC3D,IAAQ,CAAA,0CACCzB,IAAA,EAAa,UAAAE,GAAoB,UAAU0I,GAAe,GAAGnH,GAAO;AAAA,IAE9E,CAACmH,CAAY;AAAA,EAAA,GAGTe,KAAkBvE;AAAA,IACtB,CAAC3D,IAAQ,CAAA,MAEL,sBAAA;AAAA,MAACgC;AAAA,MAAA;AAAA,QACC,WAAAW;AAAA,QACA,cAAAD;AAAA,QACA,SAAAR;AAAA,QACA,YAAAD;AAAA,QACA,YAAY;AAAA,UACV,SAAS6D,EAAc,QAAQ;AAAA,UAC/B,UAAUA,EAAc,QAAQ;AAAA,UAChC,OAAAhD;AAAA,QAAA;AAAA,QAEF,UAAUqE;AAAA,QACV,WAAA9E;AAAA,QACC,GAAGrC;AAAA,MAAA;AAAA,IAAA;AAAA,IAIV,CAAC2C,GAAWT,GAASD,GAAYI,GAAWS,GAAOqE,CAAY;AAAA,EAAA;AAGjE,SAAO;AAAA,IACL,oBAAAc;AAAA,IACA,iBAAAC;AAAA;AAAA,IAEA,cAAAvB;AAAA;AAAA,IACA,cAAAiB;AAAA;AAAA,IACA,eAAApB;AAAA;AAAA,IACA,eAAAuB;AAAA,IACA,WAAA1F;AAAA,IACA,YAAAwD;AAAA;AAAA;AAAA,IAGA,SAAA3D;AAAA,IACA,YAAAD;AAAA,IACA,eAAA6D;AAAA,IACA,OAAAhD;AAAA,IACA,WAAAH;AAAA,EAAA;AAEJ,GC1WMpB,KAAe;AAAA,EACnB,OAAO;AACT,GAUM4G,KAAY,CAAC,EAAE,WAAAC,GAAW,UAAA1J,GAAU,UAAAF,GAAU,OAAA1E,GAAO,GAAGyI,QAAY;AACxE,QAAM8F,IAAY5G,EAAQ,MAEtB,sBAAA;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,OAAO7H,KAAA,QAAAA,EAAO,SAASA,IAAQ;AAAA,MAC/B,OAAOyH;AAAA,MACN,GAAGgB;AAAA,MACJ,UAAU,CAAC3C,MAAM;AACf,QAAApB,EAASoB,EAAE,OAAO,KAAK;AAAA,MACzB;AAAA,IAAA;AAAA,EAAA,GAKH,CAACwI,GAAWtO,CAAK,CAAC;AACrB,SACE,sBAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,cAAc;AAAA,MAAA;AAAA,IAChB;AAAA,IAECuO;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
(function(l,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("react"),require("antd"),require("@ant-design/icons"),require("react-redux"),require("ag-grid-react")):typeof define=="function"&&define.amd?define(["exports","react","antd","@ant-design/icons","react-redux","ag-grid-react"],t):(l=typeof globalThis<"u"?globalThis:l||self,t(l.CrmPluginKit={},l.React,l.antd,l.antdIcons,l.ReactRedux,l.agGridReact))})(this,function(l,t,S,be,re,Ee){"use strict";function ve(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,o.get?o:{enumerable:!0,get:()=>e[n]})}}return r.default=e,Object.freeze(r)}const W=ve(be);function j(e){return e==null||e===""||typeof e=="number"&&Number.isNaN(e)?!0:Array.isArray(e)?e.length===0:!1}function oe(e,r,n){if(!e||!r)return n;const o=String(r).split(".");let a=e;for(let i=0;i<o.length;i+=1){if(a==null)return n;a=a[o[i]]}return a===void 0?n:a}function Y(e,r=0){if(j(e))return"-";const n=Number(e);return Number.isNaN(n)?"-":n.toLocaleString("zh-CN",{minimumFractionDigits:r,maximumFractionDigits:r})}function se(e,r={}){const{digits:n=2,symbol:o="¥",showSymbol:a=!0,showZeroZero:i=!1}=r;if(j(e))return"-";const g=Number(e);if(Number.isNaN(g))return"-";const _=Y(Math.abs(g),n),k=a?o:"";return g<0?`-${k}${_}`:`${k}${_}`}function le(e,r=2){if(j(e))return"-";const n=Number(e);return Number.isNaN(n)?"-":`${Y(n*100,r)}%`}function Te(e,r){const n={};return(e||[]).forEach(o=>{const a=typeof r=="function"?r(o):oe(o,r);n[a]||(n[a]=[]),n[a].push(o)}),n}function _e(e){const r={};return Object.keys(e||{}).forEach(n=>{j(e[n])||(r[n]=e[n])}),r}function we(e,r=300){let n=null;return function(...a){n&&clearTimeout(n),n=setTimeout(()=>{n=null,e.apply(this,a)},r)}}function Ne(...e){return e.filter(Boolean).join(" ")}function ie(e=[],r="value"){return new Map((e||[]).map(n=>[(n==null?void 0:n[r])??(n==null?void 0:n.id),n]))}function H(e,r=new WeakMap){if(e===null||typeof e!="object")return e;if(r.has(e))return r.get(e);if(Array.isArray(e)){const o=[];return r.set(e,o),e.forEach((a,i)=>{o[i]=H(a,r)}),o}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e.source,e.flags);const n={};return r.set(e,n),Object.keys(e).forEach(o=>{n[o]=H(e[o],r)}),n}const{Text:I}=S.Typography;function Me({value:e}){return e==null||e===""?t.createElement(I,{type:"secondary"},"-"):t.createElement("span",null,String(e))}function ke({value:e,digits:r=2,showSymbol:n=!0}){if(e==null||e==="")return t.createElement(I,{type:"secondary"},"-");const o=Number(e);return Number.isNaN(o)?t.createElement(I,{type:"secondary"},"-"):t.createElement("span",{style:{color:o<0?"#ff4d4f":void 0}},se(o,{digits:r,showSymbol:n}))}function Ae({value:e,digits:r=0,percent:n=!1}){if(e==null||e==="")return t.createElement(I,{type:"secondary"},"-");const o=Number(e);return Number.isNaN(o)?t.createElement(I,{type:"secondary"},"-"):t.createElement("span",null,n?le(o,r):Y(o,r))}function De({value:e,color:r,options:n}){if(e==null||e==="")return t.createElement(I,{type:"secondary"},"-");let o=r,a=e;if(n&&n.length){const i=n.find(g=>String(g.value)===String(e));i&&(a=i.label,o=o??i.color)}return t.createElement(S.Tag,{color:o||"default"},a)}function Be({value:e,length:r=30}){if(e==null||e==="")return t.createElement(I,{type:"secondary"},"-");const n=String(e);return n.length<=r?t.createElement("span",null,n):t.createElement(S.Tooltip,{title:n},t.createElement(I,{ellipsis:!0,style:{maxWidth:240}},n))}function xe({value:e,onClick:r}){return e==null||e===""?t.createElement(I,{type:"secondary"},"-"):t.createElement("a",{onClick:()=>r&&r(e)},String(e))}function He({value:e,actions:r=[]}){return t.createElement("span",null,r.map(n=>t.createElement("a",{key:n.key,style:{marginRight:8},onClick:()=>n.onClick&&n.onClick(n)},n.text)))}const Le={token:{colorPrimary:"#1677ff",colorSuccess:"#52c41a",colorWarning:"#faad14",colorError:"#ff4d4f",colorInfo:"#1677ff",borderRadius:6,fontSize:14,controlHeight:32,wireframe:!1},components:{Table:{headerBg:"#fafafa",headerColor:"#262626",rowHoverBg:"#f5f5f5",borderColor:"#f0f0f0"},Layout:{headerBg:"#ffffff",headerHeight:56,bodyBg:"#f0f2f5"},Card:{headerBg:"transparent"},Menu:{itemBorderRadius:6}}},Ie={success:{color:"success",text:"成功"},warning:{color:"warning",text:"警告"},error:{color:"error",text:"异常"},processing:{color:"processing",text:"处理中"},info:{color:"processing",text:"进行中"},default:{color:"default",text:"未知"}},Oe={1:"success",0:"default",true:"success",false:"default"},ce=["alpine","balham","material","quartz","classic"],$="alpine";function Pe(e=$,r){return[`ag-theme-${ce.includes(e)?e:$}`,r].filter(Boolean).join(" ")}const qe={compact:28,normal:36,relaxed:48},ae=W.default&&typeof W.default=="object"?W.default:W,ze=W.SearchOutlined||ae.SearchOutlined,Ge=W.SettingOutlined||ae.SettingOutlined,T={poper:"_poper_cidv4_2",antTable:"_antTable_cidv4_6",detailTable:"_detailTable_cidv4_10",opts:"_opts_cidv4_10",commonDetail:"_commonDetail_cidv4_18",title:"_title_cidv4_18",searchAndAdd:"_searchAndAdd_cidv4_25",addIcons:"_addIcons_cidv4_25",noteTitle:"_noteTitle_cidv4_31",customHead:"_customHead_cidv4_40",sortNames:"_sortNames_cidv4_43",customSort:"_customSort_cidv4_48",customUnSort:"_customUnSort_cidv4_53",active:"_active_cidv4_56",inactive:"_inactive_cidv4_59",popoverContext:"_popoverContext_cidv4_63",contextRender:"_contextRender_cidv4_68",contextRenderFooter:"_contextRenderFooter_cidv4_71"},ue=({onChange:e=()=>{},columRef:r})=>{const{language:n}=re.useSelector(u=>u.controller),[o,a]=t.useState(!1),[i,g]=t.useState(H(r.current));t.useEffect(()=>{const u=r==null?void 0:r.current;!u||!u.length||o||g(H(u))},[r==null?void 0:r.current,o]);const _=()=>{e({column:i,optType:"mergeColum"}),a(!1)},k=u=>{i[u].visible=!i[u].visible,g([...i])},A=()=>{g(H(r.current))};return React.createElement("div",null,React.createElement(S.Popover,{placement:"bottomLeft",trigger:"click",className:T.poper,open:!!o,onOpenChange:u=>{a(u)},content:React.createElement(React.Fragment,null,React.createElement("div",{style:{padding:"10px 10px",maxHeight:"300px",overflowY:"auto",position:"relative",minWidth:178}},React.createElement("div",{style:{borderBottom:"1px solid rgba(0, 0, 0, 0.06)",paddingBottom:"10px"}},n?"Custom List":"自定义列表"),i.map((u,w)=>React.createElement("div",{style:{height:"32px",display:"flex",alignItems:"center"},key:u+w},React.createElement(S.Checkbox,{color:"primary",checked:u.visible,disabled:u.disabled,onChange:O=>k(w)}),React.createElement("span",{style:{position:"relative",top:"2px",marginLeft:"8px"}},(n?u.enDisplay:u.cnDisplay)||u.field)))),React.createElement("div",{style:{minWidth:120,display:"flex",justifyContent:"space-between",alignItems:"center",paddingTop:5,paddingBottom:5,boxShadow:" 0 -1px 2px 0 rgba(0, 0, 0, 0.05)"}},React.createElement(S.Button,{onClick:_,type:"primary"},n?"Save":"保存"),React.createElement(S.Button,{onClick:()=>a(!1)},n?"Cancel":"取消")))},React.createElement(Ge,{onClick:()=>A()})))},ee={fill:"currentColor",viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16"},de=e=>t.createElement("svg",{...ee,...e,t:"1688438905306","p-id":"2388"},t.createElement("path",{d:"M804.571 621.714a36.206 36.206 0 0 1-10.861 25.71l-256 256c-6.84 6.839-16.019 10.862-25.71 10.862s-18.87-3.987-25.71-10.862l-256-256a36.425 36.425 0 0 1-10.861-25.71c0-20.004 16.566-36.571 36.571-36.571h512c20.005 0 36.571 16.567 36.571 36.571z","p-id":"2389"})),fe=e=>t.createElement("svg",{...ee,...e,t:"1688438923470","p-id":"2523"},t.createElement("path",{d:"M804.571 402.286c0 20.004-16.566 36.571-36.571 36.571H256c-20.005 0-36.571-16.567-36.571-36.571a36.206 36.206 0 0 1 10.861-25.71l256-256c6.84-6.839 16.019-10.862 25.71-10.862s18.87 3.987 25.71 10.862l256 256a36.425 36.425 0 0 1 10.861 25.71z","p-id":"2524"})),me=e=>t.createElement("svg",{...ee,...e,t:"1688438886160","p-id":"2253"},t.createElement("path",{d:"M804.571 621.714a36.206 36.206 0 0 1-10.861 25.71l-256 256c-6.84 6.839-16.019 10.862-25.71 10.862s-18.87-3.987-25.71-10.862l-256-256a36.425 36.425 0 0 1-10.861-25.71c0-20.004 16.566-36.571 36.571-36.571h512c20.005 0 36.571 16.567 36.571 36.571z m0-219.428c0 20.004-16.566 36.571-36.571 36.571H256c-20.005 0-36.571-16.567-36.571-36.571a36.206 36.206 0 0 1 10.861-25.71l256-256c6.84-6.839 16.019-10.862 25.71-10.862s18.87 3.987 25.71 10.862l256 256a36.425 36.425 0 0 1 10.861 25.71z","p-id":"2254"})),ge=e=>{const[r,n]=t.useState("inactive"),[o,a]=t.useState("inactive"),[i,g]=t.useState("inactive"),_=t.useRef(null),[k,A]=t.useState(!1),[u,w]=t.useState(null),O=()=>{e.showColumnMenu(_.current)};t.useEffect(()=>{var h;const s=Array.isArray(e.filterKey)?e.filterKey:[];w(((h=ie(s,"field").get(e.field))==null?void 0:h.value)??null)},[e.filterKey,e.field]);const v=()=>{const s=e.column.getSort();console.log(s,"sort"),n(s==="asc"?"active":"inactive"),a(s==="desc"?"active":"inactive"),g(s?"inactive":"active")},N=(s,h)=>{e.setSort(s,h.shiftKey)};t.useEffect(()=>{const s=e.column;if(!(!s||typeof s.addEventListener!="function"))return s.addEventListener("sortChanged",v),v(),()=>{s.removeEventListener("sortChanged",v)}},[e.column]),e.enableFilterButton&&`${e.menuIcon}`;let G=null;e.enableSorting&&(G=t.createElement("div",{className:T.sortNames},t.createElement("div",{onClick:s=>N("",s),onTouchEnd:s=>N("",s),className:`${T.customSort} ${T[r]}`},t.createElement(fe,null)),t.createElement("div",{onClick:s=>N("asc",s),onTouchEnd:s=>N("desc",s),className:`${T.customSort} ${T[o]}`},t.createElement(de,null)),t.createElement("div",{onClick:s=>N("desc",s),onTouchEnd:s=>N("",s),className:`${T.customSort} ${T.customUnSort} ${T[i]}`},t.createElement(me,null))));const U={width:"100%"},J=t.useMemo(()=>{var h,C;let s=((h=e.filterSearchRender[e.field])==null?void 0:h.render)||S.Input;return t.createElement(s,{...((C=e.filterSearchRender[e.field])==null?void 0:C.tPropty)||{},value:u,onChange:f=>{w(f.target?f.target.value:f)},style:U})},[e.field,u]);let K=null;return e.search&&(K=t.createElement("div",null,t.createElement(S.Popover,{arrow:!1,open:k,trigger:"click",overlayClassName:T.popoverContext,onOpenChange:s=>A(s),placement:"bottom",content:t.createElement("div",{className:T.contextRender},J,t.createElement("div",{className:T.contextRenderFooter},t.createElement(S.Button,{type:"primary",onClick:()=>{const s=e.filterKey.filter(C=>C.field!=e.field);u!=null&&u.length&&s.push({field:e.field,value:u});const h=s!=null&&s.length?s:[];e.onSearch(h),e.setfilterKey(h),A(!1)}},e.language?"Search":"搜索"),t.createElement(S.Button,{style:{marginLeft:10},onClick:()=>{const s=e.filterKey.filter(C=>C.field!=e.field),h=s!=null&&s.length?s:[];A(!1),e.setfilterKey(h),w(null),e.onSearch(h)}},e.language?"Reset":"重置")))},t.createElement(ze,{style:{color:u?"#1890ff":"rgba(0, 0, 0, 0.25)",marginLeft:10,cursor:"pointer"}})))),t.createElement("div",{className:T.customHead},t.createElement("div",{className:"customHeaderLabel"},e.displayName),G,K)},he=({columnDefs:e=[],loading:r,customBottomTotal:n=!1,onChange:o=()=>{},tableRef:a,tableData:i,pagination:g=!1,reset:_={},customColumn:k=[],filterSearchRender:A={},setfilterKey:u,filterKey:w})=>{const O=t.useMemo(()=>({width:"100%",height:"100%",position:"relative"}),[]),v=t.useMemo(()=>({height:"100%",width:"100%"}),[]),N=re.useSelector(c=>c.controller.language),G=t.useMemo(()=>{const c=g&&typeof g=="object"?g.total:void 0;return typeof c=="number"&&!Number.isNaN(c)?c:Array.isArray(i)?i.length:0},[g,i]),U=t.useMemo(()=>{let c={};return e.map((d,D)=>{if(D==0)c[d.field]="Total",c.fromData="total";else{let L=d.lockPosition?"":0;i.map(P=>{let Q=d.field!=d.key&&d.key?d.key:d.field,X=["jobCurrency","industries","jobSalaryRange"];!isNaN(Number(P[Q]))&&!X.includes(d.field)&&(L+=Number(P[Q]))}),c[d.field]=typeof L=="number"&&L>0?L:"--"}}),[c]},[i,e]),J={visible:!0,sortable:!0,active:!1,unSortIcon:!0,minWidth:200,comparator:(c,d,D,L,P)=>0,headerComponent:ge},K=t.useMemo(()=>({width:170,lockPinned:!0}),[]),s=t.useCallback(c=>{a&&(a.current=c)},[]),h=c=>{var P;const{isNotTip:d,render:D}=c.colDef||{},L=((P=c.data)==null?void 0:P.fromData)==="total";return D&&!L?D(c):t.createElement(S.Tooltip,{title:d?"":c.value||"",arrow:!0,placement:"top"},typeof c.value=="number"||c.value?c.value:"--")},C=t.useCallback(c=>{var D;const d=((D=c.api.getState().sort)==null?void 0:D.sortModel)??[];o({sort:d[0]??null,optType:"sort"})},[o]),f=c=>{o({column:c.api.getColumnDefs().filter(d=>d.field).map(d=>({...d,pinned:void 0,field:d.field,hide:d.hide,visible:d.visible}))})},Z=(c,d)=>{o({optType:"mergeColum",pagination:{page:c,size:d}})};return t.createElement("div",{style:O},r?t.createElement("div",{className:"loadingContent"},t.createElement(S.Spin,null)):null,t.createElement("div",{style:v,className:"ag-theme-alpine AgGridReact"},t.createElement(Ee.AgGridReact,{rowData:i,pinnedBottomRowData:n?U:[],defaultColDef:K,suppressRowTransform:!0,onSortChanged:C,onDragStopped:f,suppressDragLeaveHidesColumns:!0,suppressMovableColumns:!1,..._,columnDefs:[...e.map(c=>({...J,...c,headerName:N?c.enDisplay:c.cnDisplay,cellRenderer:h,headerComponentParams:{onSearch:d=>{console.log(d,"搜索"),o({filter:d||{}})},setfilterKey:u,filterKey:w,language:N,filterSearchRender:A,...c}})),...k],icons:{sortAscending:`<span style="font-size: inherit;color: rgb(24, 144, 255);vertical-align:-webkit-baseline-middle">
|
|
2
|
+
<svg t="1688438905306" fill="currentColor" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2388" width="16" height="16"><path d="M804.571 621.714a36.206 36.206 0 0 1-10.861 25.71l-256 256c-6.84 6.839-16.019 10.862-25.71 10.862s-18.87-3.987-25.71-10.862l-256-256a36.425 36.425 0 0 1-10.861-25.71c0-20.004 16.566-36.571 36.571-36.571h512c20.005 0 36.571 16.567 36.571 36.571z" p-id="2389"></path></svg>
|
|
3
|
+
</span>`,sortDescending:`<span style="font-size: inherit;color:rgb(24, 144, 255);vertical-align:-webkit-baseline-middle">
|
|
4
|
+
<svg t="1688438923470" fill="currentColor" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2523" width="16" height="16"><path d="M804.571 402.286c0 20.004-16.566 36.571-36.571 36.571H256c-20.005 0-36.571-16.567-36.571-36.571a36.206 36.206 0 0 1 10.861-25.71l256-256c6.84-6.839 16.019-10.862 25.71-10.862s18.87 3.987 25.71 10.862l256 256a36.425 36.425 0 0 1 10.861 25.71z" p-id="2524"></path></svg>
|
|
5
|
+
</span>`,sortUnSort:`<span style="font-size: inherit;color: rgb(153, 153, 153);vertical-align:-webkit-baseline-middle">
|
|
6
|
+
<svg t="1688438886160" fill="currentColor" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2253" width="16" height="16"><path d="M804.571 621.714a36.206 36.206 0 0 1-10.861 25.71l-256 256c-6.84 6.839-16.019 10.862-25.71 10.862s-18.87-3.987-25.71-10.862l-256-256a36.425 36.425 0 0 1-10.861-25.71c0-20.004 16.566-36.571 36.571-36.571h512c20.005 0 36.571 16.567 36.571 36.571z m0-219.428c0 20.004-16.566 36.571-36.571 36.571H256c-20.005 0-36.571-16.567-36.571-36.571a36.206 36.206 0 0 1 10.861-25.71l256-256c6.84-6.839 16.019-10.862 25.71-10.862s18.87 3.987 25.71 10.862l256 256a36.425 36.425 0 0 1 10.861 25.71z" p-id="2254"></path></svg>
|
|
7
|
+
</span>`},onGridReady:s})),g?t.createElement(S.Pagination,{total:G,onChange:Z,...g}):null)},Ke=(e={},r={})=>{var pe;const{sessionKey:n,renderKey:o,setParamsList:a,configKey:i,tableUrl:g,tableRequest:_,getColConfigRequest:k,saveColConfigRequest:A}={...r,...e},u=typeof window<"u"&&!!window.sessionStorage,w=t.useCallback(m=>{if(u)try{window.sessionStorage.setItem(n,JSON.stringify(m))}catch(p){console.warn("[useTableModule] sessionStorage 写入失败:",p)}},[n,u]),O=t.useCallback(()=>{if(!u)return null;try{const m=window.sessionStorage.getItem(n);return m?JSON.parse(m):null}catch(m){return console.warn("[useTableModule] sessionStorage 读取失败:",m),null}},[n,u]),v=t.useRef([]),[N,G]=t.useState([]),[U,J]=t.useState([]),[K,s]=t.useState(void 0),[h,C]=t.useState(!0),f=t.useRef(O()||{}),[Z,c]=t.useState(((pe=O())==null?void 0:pe.filter)||[]),d=t.useRef(0),D=t.useRef(_);D.current=_;const L=t.useRef(g);L.current=g;const P=t.useRef(a);P.current=a;const Q=t.useRef(o);Q.current=o;const X=t.useRef(k);X.current=k;const ye=t.useRef(A);ye.current=A;const V=t.useCallback(()=>{const{sort:m}=f.current,p=v.current.map(b=>({...b,sort:m&&m.colId==b.field?m.sort:void 0}));G(H(p))},[]),te=t.useCallback(()=>{const m=ye.current;if(!m){console.warn("[useTableModule] 未注入 saveColConfigRequest,跳过列配置保存");return}const p={subcategory:i,userConfig:{pageConfig:{pageSize:f.current.size?f.current.size:null},columnConfig:v.current}},b=m(p);b&&typeof b.catch=="function"&&b.catch(B=>console.error("[useTableModule] 列配置保存失败:",B))},[i]),q=t.useCallback(()=>{const m=D.current;if(!m){console.warn("[useTableModule] 未注入 tableRequest,跳过列表加载"),C(!1);return}d.current+=1;const p=d.current,b=P.current,B=b?b(f.current):f.current;return C(!0),m(B,L.current).then(z=>{if(p!==d.current)return;const E=z==null?void 0:z.response,M=Array.isArray(E)?E:(E==null?void 0:E.data)||[],x=Array.isArray(E)||E==null?void 0:E.total;typeof x=="number"&&!Number.isNaN(x)&&s(x);const ne=M.map(y=>({...y,...y._source||{}}));J(ne),C(!1)},z=>{p===d.current&&(console.error("[useTableModule] 列表加载失败:",z),C(!1))})},[]),R=t.useCallback(m=>{const{column:p,optType:b,sort:B,pagination:z,filter:E}=m;let M=[];if(p){const x=new Map(p.map(y=>[y.field,y]));M=v.current.map(y=>{const F=x.get(y.field);if(!F)return{...y};const Se=F.visible!==void 0?F.visible:!F.hide;return{...y,hide:!Se,visible:Se}});const ne=new Set(v.current.map(y=>y.field));p.forEach(y=>{if(!ne.has(y.field)){const F=y.visible!==void 0?y.visible:!y.hide;M.push({...y,hide:!F,visible:F})}}),v.current=M,te()}b=="mergeColum"&&G(H(M!=null&&M.length?M:v.current)),b=="sort"&&(f.current={...f.current,sort:B},w(f.current),V(),q()),z&&(f.current={...f.current,...z},w(f.current),q()),E&&(f.current={...f.current,filter:E},f.current.page&&f.current.page>1&&(f.current.page=1),w(f.current),q())},[w,te,V,q]),Ce=t.useCallback(()=>{const m=X.current;if(!m){console.warn("[useTableModule] 未注入 getColConfigRequest,跳过列配置加载"),C(!1);return}const{sort:p}=f.current,b=Q.current;m(i).then(({response:B})=>{var M;const E=(((M=B==null?void 0:B.userConfig)==null?void 0:M.columnConfig)||[]).map(x=>({...x,hide:!x.visible,visible:x.visible,sort:p&&p.colId==x.field?p.sort:void 0,render:b?b[x.field]:void 0}));G(H(E)),v.current=H(E),q()},B=>{console.error("[useTableModule] 列配置加载失败:",B),C(!1)})},[i,q]),We=t.useCallback(()=>{const m=O()||{};f.current=m,c(m.filter||[]),V(),q()},[O,V,q]);t.useEffect(()=>{i&&Ce()},[i]);const je=t.useCallback((m={})=>React.createElement(ue,{columRef:v,onChange:R,...m}),[R]),Je=t.useCallback((m={})=>React.createElement(he,{filterKey:Z,setfilterKey:c,loading:h,columnDefs:N,pagination:{current:f.current.page,pageSize:f.current.size,total:K},onChange:R,tableData:U,...m}),[Z,h,N,U,K,R]);return{SettingTableRender:je,TableListRender:Je,getTableData:q,getColConfig:Ce,saveColConfig:te,resetSesstion:We,tableData:U,setloading:C,loading:h,columnDefs:N,paramsCurrent:f,total:K,filterKey:Z}},Ue={width:"100%"},Fe=({dataIndex:e,language:r,onChange:n,value:o,...a})=>{const i=t.useMemo(()=>React.createElement(S.Input,{value:o!=null&&o.length?o:null,style:Ue,...a,onChange:g=>{n(g.target.value)}}),[e,o]);return React.createElement("div",{style:{marginBottom:8}},i)};l.AG_GRID_THEMES=ce,l.ActionCell=He,l.CustomHeader=ge,l.DEFAULT_AG_GRID_THEME=$,l.DICT_COLOR_MAP=Oe,l.EllipsisCell=Be,l.LinkCell=xe,l.MayList=ie,l.MoneyCell=ke,l.NumberCell=Ae,l.OtherSlot=Fe,l.ROW_HEIGHT_PRESETS=qe,l.STATUS_PRESETS=Ie,l.SettingTable=ue,l.SortAscending=de,l.SortDescending=fe,l.SortUnSort=me,l.TableList=he,l.TagCell=De,l.TextCell=Me,l.agGridClass=Pe,l.crmTheme=Le,l.cx=Ne,l.debounce=we,l.deepClone=H,l.formatMoney=se,l.formatNumber=Y,l.formatPercent=le,l.get=oe,l.groupBy=Te,l.isEmpty=j,l.omitEmpty=_e,l.useTableModule=Ke,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
|
|
8
|
+
//# sourceMappingURL=index.umd.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.cjs","sources":["../src/utils/index.js","../src/table/renderers/index.jsx","../src/theme/antd.js","../src/theme/agGrid.js","../src/components/antdIcons.js","../src/components/tableComponent/settingTableCol.jsx","../src/components/icon.jsx","../src/components/tableComponent/CustomHeader.jsx","../src/components/tableComponent/tableList.jsx","../src/components/tableComponent/useTable.module.jsx","../src/components/tableComponent/slotComponent.jsx"],"sourcesContent":["/**\n * 通用工具函数\n */\n\n/** 空值判断:null / undefined / '' / NaN */\nexport function isEmpty(value) {\n if (value === null || value === undefined || value === '') return true;\n if (typeof value === 'number' && Number.isNaN(value)) return true;\n if (Array.isArray(value)) return value.length === 0;\n return false;\n}\n\n/** 安全取值:path 支持 'a.b.c' 形式 */\nexport function get(obj, path, defaultValue) {\n if (!obj || !path) return defaultValue;\n const keys = String(path).split('.');\n let cur = obj;\n for (let i = 0; i < keys.length; i += 1) {\n if (cur === null || cur === undefined) return defaultValue;\n cur = cur[keys[i]];\n }\n return cur === undefined ? defaultValue : cur;\n}\n\n/** 数字千分位格式化 */\nexport function formatNumber(value, digits = 0) {\n if (isEmpty(value)) return '-';\n const num = Number(value);\n if (Number.isNaN(num)) return '-';\n return num.toLocaleString('zh-CN', {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n });\n}\n\n/**\n * 金额格式化(人民币)\n * @param {number|string} value 金额\n * @param {object} options\n * @param {number} options.digits 小数位数,默认 2\n * @param {string} options.symbol 货币符号,默认 ¥\n * @param {boolean} options.showSymbol 是否显示符号,默认 true\n * @param {boolean} options.showZeroZero 负数是否保留符号位(-0.00),默认 false\n */\nexport function formatMoney(value, options = {}) {\n const { digits = 2, symbol = '¥', showSymbol = true, showZeroZero = false } = options;\n if (isEmpty(value)) return '-';\n const num = Number(value);\n if (Number.isNaN(num)) return '-';\n const abs = formatNumber(Math.abs(num), digits);\n const prefix = showSymbol ? symbol : '';\n if (num < 0) {\n const body = showZeroZero ? abs : abs;\n return `-${prefix}${body}`;\n }\n return `${prefix}${abs}`;\n}\n\n/** 百分比格式化,0.1234 -> '12.34%' */\nexport function formatPercent(value, digits = 2) {\n if (isEmpty(value)) return '-';\n const num = Number(value);\n if (Number.isNaN(num)) return '-';\n return `${formatNumber(num * 100, digits)}%`;\n}\n\n/** 数组按键分组,返回 { key: item[] } */\nexport function groupBy(list, keyFn) {\n const result = {};\n (list || []).forEach((item) => {\n const key = typeof keyFn === 'function' ? keyFn(item) : get(item, keyFn);\n if (!result[key]) result[key] = [];\n result[key].push(item);\n });\n return result;\n}\n\n/** 过滤对象中的空值字段 */\nexport function omitEmpty(obj) {\n const result = {};\n Object.keys(obj || {}).forEach((key) => {\n if (!isEmpty(obj[key])) result[key] = obj[key];\n });\n return result;\n}\n\n/** 防抖 */\nexport function debounce(fn, wait = 300) {\n let timer = null;\n return function debounced(...args) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = null;\n fn.apply(this, args);\n }, wait);\n };\n}\n\n/** 类名拼接 */\nexport function cx(...args) {\n return args.filter(Boolean).join(' ');\n}\n\n/**\n * 按 key 生成 Map,便于 O(1) 查找。\n * key 优先取 obj[key],取不到时回退到 obj.id。\n */\nexport function MayList(objectsArray = [], key = 'value') {\n return new Map(\n (objectsArray || []).map((obj) => {\n const mapKey = obj?.[key] ?? obj?.id;\n return [mapKey, obj];\n }),\n );\n}\n\n/**\n * 深拷贝(保留函数引用)。\n *\n * 与 lodash.cloneDeep 的关键差异:遇到函数时直接返回原引用而不复制。\n * 列配置里含有 render 这类 React 组件函数,\n * 用 structuredClone 会直接抛 DataCloneError。\n *\n * @param {*} value 待拷贝的值\n * @param {WeakMap} [seen] 循环引用检测\n */\nexport function deepClone(value, seen = new WeakMap()) {\n // 基本类型与函数直接返回\n if (value === null || typeof value !== 'object') return value;\n\n // 循环引用保护\n if (seen.has(value)) return seen.get(value);\n\n if (Array.isArray(value)) {\n const arr = [];\n seen.set(value, arr);\n value.forEach((item, i) => {\n arr[i] = deepClone(item, seen);\n });\n return arr;\n }\n\n if (value instanceof Date) return new Date(value.getTime());\n if (value instanceof RegExp) return new RegExp(value.source, value.flags);\n\n // React 组件等函数对象已在上面的 typeof 判断中返回原引用\n\n const obj = {};\n seen.set(value, obj);\n Object.keys(value).forEach((key) => {\n obj[key] = deepClone(value[key], seen);\n });\n return obj;\n}\n","import React from 'react';\nimport { Tag, Typography, Tooltip } from 'antd';\nimport { formatMoney, formatNumber, formatPercent } from '../../utils';\n\nconst { Text } = Typography;\n\n/**\n * 单元格渲染器集合\n *\n * ag-grid 的 cellRenderer 既可以是 React 组件,也可以是函数。\n * 这里统一提供 React 组件形式,可通过 columnDef.cellRenderer 引用。\n */\n\n/** 文本渲染(默认) */\nexport function TextCell({ value }) {\n if (value === null || value === undefined || value === '') return <Text type=\"secondary\">-</Text>;\n return <span>{String(value)}</span>;\n}\n\n/** 金额渲染(负数标红) */\nexport function MoneyCell({ value, digits = 2, showSymbol = true }) {\n if (value === null || value === undefined || value === '') {\n return <Text type=\"secondary\">-</Text>;\n }\n const num = Number(value);\n if (Number.isNaN(num)) return <Text type=\"secondary\">-</Text>;\n return (\n <span style={{ color: num < 0 ? '#ff4d4f' : undefined }}>\n {formatMoney(num, { digits, showSymbol })}\n </span>\n );\n}\n\n/** 数字渲染(自动千分位) */\nexport function NumberCell({ value, digits = 0, percent = false }) {\n if (value === null || value === undefined || value === '') {\n return <Text type=\"secondary\">-</Text>;\n }\n const num = Number(value);\n if (Number.isNaN(num)) return <Text type=\"secondary\">-</Text>;\n return <span>{percent ? formatPercent(num, digits) : formatNumber(num, digits)}</span>;\n}\n\n/** 标签渲染 */\nexport function TagCell({ value, color, options }) {\n if (value === null || value === undefined || value === '') {\n return <Text type=\"secondary\">-</Text>;\n }\n let tagColor = color;\n let text = value;\n\n if (options && options.length) {\n const hit = options.find((o) => String(o.value) === String(value));\n if (hit) {\n text = hit.label;\n tagColor = tagColor ?? hit.color;\n }\n }\n return <Tag color={tagColor || 'default'}>{text}</Tag>;\n}\n\n/** 长文本省略 + tooltip */\nexport function EllipsisCell({ value, length = 30 }) {\n if (value === null || value === undefined || value === '') {\n return <Text type=\"secondary\">-</Text>;\n }\n const str = String(value);\n if (str.length <= length) return <span>{str}</span>;\n return (\n <Tooltip title={str}>\n <Text ellipsis style={{ maxWidth: 240 }}>{str}</Text>\n </Tooltip>\n );\n}\n\n/** 链接单元格 */\nexport function LinkCell({ value, onClick }) {\n if (value === null || value === undefined || value === '') {\n return <Text type=\"secondary\">-</Text>;\n }\n return (\n <a onClick={() => onClick && onClick(value)}>{String(value)}</a>\n );\n}\n\n/** 操作列渲染(按钮组) */\nexport function ActionCell({ value, actions = [] }) {\n return (\n <span>\n {actions.map((action) => (\n <a\n key={action.key}\n style={{ marginRight: 8 }}\n onClick={() => action.onClick && action.onClick(action)}\n >\n {action.text}\n </a>\n ))}\n </span>\n );\n}\n","/**\n * antd 5 主题配置\n *\n * 说明:antd 5 使用 CSS-in-JS,主题通过 ConfigProvider 的 token 注入,\n * 宿主应用只需在根节点包一层 <ConfigProvider theme={crmTheme}> 即可。\n */\nexport const crmTheme = {\n token: {\n colorPrimary: '#1677ff',\n colorSuccess: '#52c41a',\n colorWarning: '#faad14',\n colorError: '#ff4d4f',\n colorInfo: '#1677ff',\n borderRadius: 6,\n fontSize: 14,\n controlHeight: 32,\n wireframe: false,\n },\n components: {\n Table: {\n headerBg: '#fafafa',\n headerColor: '#262626',\n rowHoverBg: '#f5f5f5',\n borderColor: '#f0f0f0',\n },\n Layout: {\n headerBg: '#ffffff',\n headerHeight: 56,\n bodyBg: '#f0f2f5',\n },\n Card: {\n headerBg: 'transparent',\n },\n Menu: {\n itemBorderRadius: 6,\n },\n },\n};\n\n/** 状态 -> 颜色 预设,供 StatusTag / 表格状态列复用 */\nexport const STATUS_PRESETS = {\n success: { color: 'success', text: '成功' },\n warning: { color: 'warning', text: '警告' },\n error: { color: 'error', text: '异常' },\n processing: { color: 'processing', text: '处理中' },\n info: { color: 'processing', text: '进行中' },\n default: { color: 'default', text: '未知' },\n};\n\n/** 字典状态常见色值映射 */\nexport const DICT_COLOR_MAP = {\n 1: 'success',\n 0: 'default',\n true: 'success',\n false: 'default',\n};\n","/**\n * ag-grid 31 主题配置\n *\n * ag-grid v31 使用「经典 CSS 主题」机制(新的 Theming API 从 v32 才提供)。\n * 宿主应用需要引入基础样式与所选主题样式:\n *\n * import 'ag-grid-community/styles/ag-grid.css';\n * import 'ag-grid-community/styles/ag-theme-alpine.css';\n *\n * 本包不主动 import 这些 CSS,避免与宿主应用的主题选择冲突;\n * 请在宿主应用中自行 import 上述样式。\n */\n\n/** v31 可用的经典主题名 */\nexport const AG_GRID_THEMES = ['alpine', 'balham', 'material', 'quartz', 'classic'];\n\n/** 默认主题 */\nexport const DEFAULT_AG_GRID_THEME = 'alpine';\n\n/**\n * 生成 ag-grid 容器所需的 className\n * @param {string} theme 主题名,如 alpine\n * @param {string} extra 额外 class\n */\nexport function agGridClass(theme = DEFAULT_AG_GRID_THEME, extra) {\n const name = AG_GRID_THEMES.includes(theme) ? theme : DEFAULT_AG_GRID_THEME;\n return [`ag-theme-${name}`, extra].filter(Boolean).join(' ');\n}\n\n/** 行高预设(compact / normal / relaxed) */\nexport const ROW_HEIGHT_PRESETS = {\n compact: 28,\n normal: 36,\n relaxed: 48,\n};\n","/**\r\n * @ant-design/icons 的导入兼容层。\r\n *\r\n * 该包的 package.json 同时提供 main(CJS) 与 module(ESM):\r\n * - webpack / vite / rollup 优先取 module,加载 es/index.js;\r\n * - Node ESM 因无 exports 字段回退到 main,加载 lib/index.js。\r\n *\r\n * 两个产物的 default 语义完全不同:\r\n * - es/index.js 的 `export { default } from \"./components/Icon\"` 意味着\r\n * default 就是 Icon 组件本身,不是命名空间 —— 所以\r\n * `import icons from '@ant-design/icons'` 之后取 `icons.SearchOutlined`\r\n * 在 webpack/vite 下永远是 undefined,渲染会抛 \"Element type is invalid\";\r\n * - lib/index.js(CJS)的 default 才是包含全部图标的 module.exports。\r\n *\r\n * 因此统一用命名空间导入,并兼容 Node 下只有 default 的情况。\r\n */\r\nimport * as iconsNs from '@ant-design/icons';\r\n\r\nconst iconSet =\r\n iconsNs.default && typeof iconsNs.default === 'object' ? iconsNs.default : iconsNs;\r\n\r\nexport const SearchOutlined = iconsNs.SearchOutlined || iconSet.SearchOutlined;\r\nexport const SettingOutlined = iconsNs.SettingOutlined || iconSet.SettingOutlined;\r\n\r\nexport default iconSet;\r\n","import { Checkbox, Popover, Button } from 'antd'\nimport { SettingOutlined } from '../antdIcons'\nimport { deepClone } from '../../utils'\nimport { useState, useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport Styles from './style/index.module.scss'\nconst SettingTable = ({ onChange = () => {}, columRef }) => {\n const { language } = useSelector((state) => state.controller)\n const [settingStatus, setSettingStatus] = useState(false)\n const [headerCloumsList, setHeaderCloumsList] = useState(\n deepClone(columRef.current)\n )\n\n // 列配置是异步加载的,首屏时 columRef.current 还是空数组。\n // 需要在其变化时同步列表,否则弹层里会没有任何列可选。\n useEffect(() => {\n const current = columRef?.current;\n if (!current || !current.length) return;\n // 弹层打开时以用户正在编辑的内容为准,不要被后台刷新覆盖\n if (!settingStatus) {\n setHeaderCloumsList(deepClone(current))\n }\n }, [columRef?.current, settingStatus])\n\n const saveQuit = () => {\n // 修改列配置\n onChange({\n column: headerCloumsList,\n optType:\"mergeColum\"\n })\n setSettingStatus(false)\n }\n const changeCheck = (index) => {\n // 修改表头显隐\n headerCloumsList[index].visible = !headerCloumsList[index].visible\n setHeaderCloumsList([...headerCloumsList])\n }\n const openInitHeadList = () => {\n setHeaderCloumsList(deepClone(columRef.current))\n // 只负责刷新数据,开关状态交给 Popover 的 onOpenChange 统一处理。\n // 此前这里也 setSettingStatus,与 onOpenChange 形成双重 toggle,\n // 导致弹层状态被翻转两次而永远打不开。\n }\n return (\n <div>\n <Popover\n placement=\"bottomLeft\"\n trigger=\"click\"\n className={Styles.poper}\n // overlayInnerStyle={{\n // padding:0\n // }}\n open={Boolean(settingStatus)}\n onOpenChange={(open) => {\n setSettingStatus(open)\n }}\n content={\n <>\n <div\n style={{\n padding: '10px 10px',\n maxHeight: '300px',\n overflowY: 'auto',\n position: 'relative',\n minWidth: 178,\n }}>\n <div\n style={{\n borderBottom: '1px solid rgba(0, 0, 0, 0.06)',\n paddingBottom: '10px',\n }}>\n {language ? 'Custom List' : '自定义列表'}\n </div>\n {headerCloumsList.map((item, index) => {\n return (\n <div\n style={{\n height: '32px',\n display: 'flex',\n alignItems: 'center',\n }}\n key={item + index}>\n <Checkbox\n color=\"primary\"\n checked={item.visible}\n disabled = {item.disabled}\n onChange={(e) => changeCheck(index)}\n />\n <span\n style={{\n position: 'relative',\n top: '2px',\n marginLeft: '8px',\n }}>\n {(language ? item.enDisplay : item.cnDisplay) ||\n item.field}\n </span>\n </div>\n )\n })}\n </div>\n <div\n style={{\n minWidth: 120,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingTop: 5,\n paddingBottom: 5,\n boxShadow: ' 0 -1px 2px 0 rgba(0, 0, 0, 0.05)',\n }}>\n <Button onClick={saveQuit} type=\"primary\">\n {language ? 'Save' : '保存'}\n </Button>\n <Button onClick={() => setSettingStatus(false)}>\n {language ? 'Cancel' : '取消'}\n </Button>\n </div>\n </>\n }>\n <SettingOutlined onClick={() => openInitHeadList()}></SettingOutlined>\n </Popover>\n </div>\n )\n}\nexport default SettingTable\n","/**\n * 表格排序图标\n *\n * 自包含实现(原先依赖 CRM 主工程的 app/components/icon),\n * 避免插件包反向依赖业务工程。\n *\n * 注意:不使用 @ant-design/icons 的 Icon 包装组件 —— 它同时提供 CJS(main)\n * 与 ESM(module) 产物,两种产物下 default 的语义不一致(见 components/antdIcons.js),\n * 且在 SSR/Node 下具名导入不可靠;直接渲染 svg 更轻也更稳。\n */\nimport React from 'react';\n\nconst svgProps = {\n fill: 'currentColor',\n viewBox: '0 0 1024 1024',\n version: '1.1',\n xmlns: 'http://www.w3.org/2000/svg',\n width: '16',\n height: '16',\n};\n\n/** 升序(箭头向上) */\nexport const SortAscending = (props) => (\n <svg {...svgProps} {...props} t=\"1688438905306\" p-id=\"2388\">\n <path\n d=\"M804.571 621.714a36.206 36.206 0 0 1-10.861 25.71l-256 256c-6.84 6.839-16.019 10.862-25.71 10.862s-18.87-3.987-25.71-10.862l-256-256a36.425 36.425 0 0 1-10.861-25.71c0-20.004 16.566-36.571 36.571-36.571h512c20.005 0 36.571 16.567 36.571 36.571z\"\n p-id=\"2389\"\n />\n </svg>\n);\n\n/** 降序(箭头向下) */\nexport const SortDescending = (props) => (\n <svg {...svgProps} {...props} t=\"1688438923470\" p-id=\"2523\">\n <path\n d=\"M804.571 402.286c0 20.004-16.566 36.571-36.571 36.571H256c-20.005 0-36.571-16.567-36.571-36.571a36.206 36.206 0 0 1 10.861-25.71l256-256c6.84-6.839 16.019-10.862 25.71-10.862s18.87 3.987 25.71 10.862l256 256a36.425 36.425 0 0 1 10.861 25.71z\"\n p-id=\"2524\"\n />\n </svg>\n);\n\n/** 未排序(双向箭头) */\nexport const SortUnSort = (props) => (\n <svg {...svgProps} {...props} t=\"1688438886160\" p-id=\"2253\">\n <path\n d=\"M804.571 621.714a36.206 36.206 0 0 1-10.861 25.71l-256 256c-6.84 6.839-16.019 10.862-25.71 10.862s-18.87-3.987-25.71-10.862l-256-256a36.425 36.425 0 0 1-10.861-25.71c0-20.004 16.566-36.571 36.571-36.571h512c20.005 0 36.571 16.567 36.571 36.571z m0-219.428c0 20.004-16.566 36.571-36.571 36.571H256c-20.005 0-36.571-16.567-36.571-36.571a36.206 36.206 0 0 1 10.861-25.71l256-256c6.84-6.839 16.019-10.862 25.71-10.862s18.87 3.987 25.71 10.862l256 256a36.425 36.425 0 0 1 10.861 25.71z\"\n p-id=\"2254\"\n />\n </svg>\n);\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport Styles from './style/index.module.scss';\r\nimport { Input, Popover, Button } from 'antd';\r\nimport { SearchOutlined } from '../antdIcons';\r\nimport { MayList } from '../../utils';\r\nimport { SortAscending, SortDescending, SortUnSort } from '../icon';\r\n\r\nexport default (props) => {\r\n const [ascSort, setAscSort] = useState('inactive');\r\n const [descSort, setDescSort] = useState('inactive');\r\n const [noSort, setNoSort] = useState('inactive');\r\n const refButton = useRef(null);\r\n const [open, setopen] = useState(false);\r\n\r\n const [valueDefs, setvalueDefs] = useState(null)\r\n const onMenuClicked = () => {\r\n props.showColumnMenu(refButton.current);\r\n };\r\n // 注意:filterKey 是数组,之前的依赖写成 props.filterKey?.field 恒为 undefined,\r\n // 导致外部筛选值变化时输入框不回显。改为依赖整个 filterKey。\r\n useEffect(() => {\r\n const arr = Array.isArray(props.filterKey) ? props.filterKey : [];\r\n setvalueDefs(MayList(arr, 'field').get(props.field)?.value ?? null)\r\n }, [props.filterKey, props.field])\r\n \r\n const onSortChanged = () => {\r\n const sort = props.column.getSort();\r\n console.log(sort,'sort');\r\n \r\n setAscSort(sort === 'asc' ? 'active' : 'inactive');\r\n setDescSort(sort === 'desc' ? 'active' : 'inactive');\r\n setNoSort(!sort ? 'active' : 'inactive');\r\n };\r\n\r\n const onSortRequested = (order, event) => {\r\n props.setSort(order, event.shiftKey);\r\n };\r\n\r\n // 监听列排序变化,并在卸载时解绑,否则会泄漏并对已卸载组件 setState\r\n useEffect(() => {\r\n const column = props.column;\r\n if (!column || typeof column.addEventListener !== 'function') return;\r\n column.addEventListener('sortChanged', onSortChanged);\r\n onSortChanged();\r\n return () => {\r\n column.removeEventListener('sortChanged', onSortChanged);\r\n };\r\n }, [props.column]);\r\n\r\n let menu = null;\r\n if (props.enableFilterButton) {\r\n menu = (\r\n <div ref={refButton} className=\"customHeaderMenuButton\" onClick={() => onMenuClicked()}>\r\n <i className={`fa ${props.menuIcon}`}></i>\r\n </div>\r\n );\r\n }\r\n\r\n let sort = null;\r\n if (props.enableSorting) {\r\n // 三个按钮的图标与行为此前是错位的:\r\n // 升序图标配 desc、取消图标配 desc,且 touchEnd 的参数与 onClick 不一致。\r\n // 现按图标语义对齐,并保证 click / touchEnd 传入相同的排序方向。\r\n sort = (\r\n <div className={Styles.sortNames}>\r\n <div onClick={(event) => onSortRequested('', event)} onTouchEnd={(event) => onSortRequested('', event)} className={`${Styles.customSort} ${Styles[ascSort]}`}>\r\n <SortDescending />\r\n </div>\r\n <div onClick={(event) => onSortRequested('asc', event)} onTouchEnd={(event) => onSortRequested('desc', event)} className={`${Styles.customSort} ${Styles[descSort]}`}>\r\n <SortAscending />\r\n </div>\r\n <div\r\n onClick={(event) => onSortRequested('desc', event)}\r\n onTouchEnd={(event) => onSortRequested('', event)}\r\n className={`${Styles.customSort} ${Styles.customUnSort} ${Styles[noSort]}`}\r\n >\r\n <SortUnSort />\r\n </div>\r\n </div>\r\n );\r\n }\r\n const defaultStyle = {\r\n width: '100%',\r\n };\r\n const context = useMemo(() => {\r\n // 注意搜索字段field 有冲突的话 请重新自定义\r\n let Render = props.filterSearchRender[props.field]?.render || Input;\r\n \r\n return (\r\n <Render\r\n {... (props.filterSearchRender[props.field]?.tPropty||{})}\r\n value={valueDefs}\r\n onChange={(e) => {\r\n setvalueDefs(e.target?e.target.value:e)\r\n \r\n }}\r\n style={defaultStyle}\r\n />\r\n );\r\n }, [props.field,valueDefs]);\r\n\r\n \r\n let search = null;\r\n if (props.search) {\r\n search = (\r\n <div>\r\n <Popover\r\n arrow={false}\r\n open={open}\r\n trigger=\"click\"\r\n overlayClassName={Styles.popoverContext}\r\n onOpenChange={(e) => setopen(e)}\r\n placement=\"bottom\"\r\n content={\r\n <div className={Styles.contextRender}>\r\n \r\n {context}\r\n <div className={Styles.contextRenderFooter}>\r\n <Button\r\n type=\"primary\"\r\n onClick={() => {\r\n const filterKeyArrary = props.filterKey.filter(i => i.field != props.field);\r\n if (valueDefs?.length) {\r\n filterKeyArrary.push({\r\n field: props.field,\r\n value: valueDefs\r\n })\r\n }\r\n const values = filterKeyArrary?.length ? filterKeyArrary : []\r\n props.onSearch(values);\r\n props.setfilterKey(values);\r\n setopen(false);\r\n }}\r\n >\r\n {props.language ? 'Search' : '搜索'}\r\n </Button>\r\n <Button\r\n style={{ marginLeft: 10 }}\r\n onClick={() => {\r\n const filterKeyArrary = props.filterKey.filter(i => i.field != props.field);\r\n const values = filterKeyArrary?.length ? filterKeyArrary : []\r\n\r\n setopen(false);\r\n props.setfilterKey(values);\r\n setvalueDefs(null)\r\n props.onSearch(values);\r\n }}\r\n >\r\n {props.language ? 'Reset' : '重置'}\r\n </Button>\r\n </div>\r\n </div>\r\n }\r\n >\r\n <SearchOutlined style={{ color: valueDefs ? '#1890ff' : 'rgba(0, 0, 0, 0.25)', marginLeft: 10, cursor: 'pointer' }} />\r\n </Popover>\r\n </div>\r\n );\r\n }\r\n return (\r\n <div className={Styles.customHead}>\r\n {/* {menu} */}\r\n <div className=\"customHeaderLabel\">{props.displayName}</div>\r\n {sort}\r\n {search}\r\n </div>\r\n );\r\n};\r\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { AgGridReact } from 'ag-grid-react';\r\n\r\n// 注意:不要在这里 import 'ag-grid-community/styles/ag-grid.css'。\r\n// ag-grid 是 peerDependency,其样式子路径若被保留为外部 import,\r\n// 消费方用 Node CJS require 本包时会因加载 CSS 文件而直接语法报错。\r\n// 正确做法是使用方自行引入(见 README「引入样式」章节):\r\n// import 'ag-grid-community/styles/ag-grid.css';\r\n// import 'ag-grid-community/styles/ag-theme-alpine.css';\r\n\r\nimport './style/styles.css';\r\nimport { Pagination, Spin, Tooltip } from 'antd';\r\nimport { useSelector } from 'react-redux';\r\nimport CustomHeader from './CustomHeader';\r\n\r\n\r\n/**\r\n *\r\n * @columnDefs 表头\r\n * @customBottomTotal 是否开启底部统计\r\n * @customColumn 自定义表头\r\n * @pagination 是否分页配置\r\n * @reset ag tabel拓展配置列如checkbox\r\n * @filterSearchRender 搜索组件\r\n */\r\n\r\nconst TableList = ({ columnDefs = [],loading, customBottomTotal = false, onChange = () => {}, tableRef, tableData,pagination=false,reset={} ,\r\ncustomColumn=[],filterSearchRender={},setfilterKey,filterKey} ) => {\r\n // useEffect(() => {\r\n // console.log(columnDefs,\"columnDefs32333\");\r\n // }, [JSON.stringify(columnDefs)])\r\n\r\n const containerStyle = useMemo(() => ({ width: '100%', height: '100%',position:\"relative\" }), []);\r\n const gridStyle = useMemo(() => ({ height: '100%', width: '100%' }), []);\r\n // const [rowData, setRowData] = useState([])\r\n const language = useSelector((state) => state.controller.language);\r\n // 分页总数:优先取业务传入的 total,其次取分页对象上的 total,\r\n // 最后兜底为当前页条数(避免出现写死的假总数)\r\n const total = useMemo(() => {\r\n const fromPagination = pagination && typeof pagination === 'object' ? pagination.total : undefined;\r\n if (typeof fromPagination === 'number' && !Number.isNaN(fromPagination)) return fromPagination;\r\n return Array.isArray(tableData) ? tableData.length : 0;\r\n }, [pagination, tableData]);\r\n const pinnedBottomRowData = useMemo(() => {\r\n let objTotal = {};\r\n columnDefs.map((i, index) => {\r\n if (index == 0) {\r\n objTotal[i.field] = 'Total';\r\n objTotal['fromData'] = 'total';\r\n } else {\r\n let total = i.lockPosition ? '' : 0;\r\n tableData.map((item) => {\r\n let key = i.field != i.key && i.key ? i.key : i.field;\r\n let disableTotal = ['jobCurrency', 'industries', 'jobSalaryRange'];\r\n if (!isNaN(Number(item[key])) && !disableTotal.includes(i.field)) {\r\n total += Number(item[key]);\r\n }\r\n });\r\n objTotal[i.field] = typeof total == 'number' && total > 0 ? total : '--';\r\n }\r\n });\r\n return [objTotal];\r\n // columnDefs 变化时也要重算,否则列显隐/排序调整后合计行与表格不一致\r\n }, [tableData, columnDefs]);\r\n const defaultCol = {\r\n visible: true,\r\n sortable: true,\r\n active: false,\r\n unSortIcon: true,\r\n minWidth:200,\r\n comparator: (valueA, valueB, nodeA, nodeB, isDescending) => {\r\n // console.log(valueA,valueB,nodeA,nodeB,isDescending,\"sort\",nodeA.gridApi.getSortModel());\r\n return 0;\r\n },\r\n headerComponent: CustomHeader\r\n // suppressMovable: !isDrag,\r\n };\r\n const defaultColDef = useMemo(() => {\r\n return {\r\n width: 170,\r\n lockPinned: true,\r\n };\r\n }, []);\r\n\r\n const onGridReady = useCallback((params) => {\r\n tableRef && (tableRef.current = params);\r\n // fetch('https://www.ag-grid.com/example-assets/olympic-winners.json')\r\n // .then((resp) => resp.json())\r\n // .then((data) => setRowData(data))\r\n }, []);\r\n const getCellParams = (params) => {\r\n const { isNotTip, render } = params.colDef || {};\r\n // params.data 在加载占位行等场景下可能为 undefined,直接取 .fromData 会抛错\r\n const isTotalRow = params.data?.fromData === 'total';\r\n return render && !isTotalRow ? (\r\n render(params)\r\n ) : (\r\n <Tooltip title={isNotTip ? '' : params.value || ''} arrow placement=\"top\">\r\n {typeof params.value == 'number' || params.value ? params.value : '--'}\r\n </Tooltip>\r\n );\r\n };\r\n // ag-grid v31 已移除 frameworkComponents,单元格渲染通过 cellRenderer 直接传组件/函数\r\n // (下方 columnDefs 中的 cellRenderer:getCellParams 即为 v31 正确写法)\r\n\r\n // 排序监听\r\n const sortChanged = useCallback((params) => {\r\n const sortModel = params.api.getState().sort?.sortModel ?? [];\r\n onChange({\r\n sort: sortModel[0] ?? null,\r\n optType: 'sort',\r\n });\r\n }, [onChange]);\r\n // 获取拖拽后的数据\r\n const onDragStopped = (params) => {\r\n onChange({\r\n column: params.api\r\n .getColumnDefs()\r\n .filter((item) => item.field)\r\n .map((item) => {\r\n return {\r\n ...item,\r\n pinned: undefined,\r\n field: item.field,\r\n hide: item.hide,\r\n visible: item.visible,\r\n };\r\n }),\r\n });\r\n };\r\n// 分页\r\nconst handleChangePage = (page,size)=>{\r\n onChange({\r\n optType:\"mergeColum\",\r\n pagination:{\r\n page,size\r\n }\r\n })\r\n}\r\n return (\r\n <div style={containerStyle}>\r\n {loading?<div className={'loadingContent'}>\r\n <Spin />\r\n </div>:null}\r\n <div style={gridStyle} className={'ag-theme-alpine AgGridReact'}>\r\n <AgGridReact\r\n rowData={tableData}\r\n pinnedBottomRowData={customBottomTotal ? pinnedBottomRowData : []}\r\n defaultColDef={defaultColDef}\r\n suppressRowTransform={true}\r\n onSortChanged={sortChanged}\r\n onDragStopped={onDragStopped}\r\n suppressDragLeaveHidesColumns={true}//脱离区域是否可以拖拽\r\n suppressMovableColumns={false}\r\n {...reset}\r\n // 和apn 写法不同注意!!!\r\n columnDefs={[...columnDefs.map((item) => {\r\n return {\r\n ...defaultCol,\r\n ...item,\r\n headerName:!language ? item.cnDisplay : item.enDisplay,\r\n // apn写法\r\n // cellRenderer:\"getCellParams\",\r\n // crm写法\r\n cellRenderer:getCellParams,\r\n headerComponentParams:{\r\n onSearch:(e)=>{\r\n console.log(e,\"搜索\");\r\n \r\n onChange({\r\n filter:e||{}\r\n })\r\n },\r\n setfilterKey,\r\n filterKey,\r\n language,\r\n filterSearchRender,\r\n ...item\r\n }\r\n };\r\n }),...customColumn]}\r\n icons={{\r\n sortAscending: `<span style=\"font-size: inherit;color: rgb(24, 144, 255);vertical-align:-webkit-baseline-middle\">\r\n <svg t=\"1688438905306\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"2388\" width=\"16\" height=\"16\"><path d=\"M804.571 621.714a36.206 36.206 0 0 1-10.861 25.71l-256 256c-6.84 6.839-16.019 10.862-25.71 10.862s-18.87-3.987-25.71-10.862l-256-256a36.425 36.425 0 0 1-10.861-25.71c0-20.004 16.566-36.571 36.571-36.571h512c20.005 0 36.571 16.567 36.571 36.571z\" p-id=\"2389\"></path></svg>\r\n </span>`,\r\n sortDescending: `<span style=\"font-size: inherit;color:rgb(24, 144, 255);vertical-align:-webkit-baseline-middle\">\r\n <svg t=\"1688438923470\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"2523\" width=\"16\" height=\"16\"><path d=\"M804.571 402.286c0 20.004-16.566 36.571-36.571 36.571H256c-20.005 0-36.571-16.567-36.571-36.571a36.206 36.206 0 0 1 10.861-25.71l256-256c6.84-6.839 16.019-10.862 25.71-10.862s18.87 3.987 25.71 10.862l256 256a36.425 36.425 0 0 1 10.861 25.71z\" p-id=\"2524\"></path></svg>\r\n </span>`,\r\n sortUnSort: `<span style=\"font-size: inherit;color: rgb(153, 153, 153);vertical-align:-webkit-baseline-middle\">\r\n <svg t=\"1688438886160\" fill=\"currentColor\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"2253\" width=\"16\" height=\"16\"><path d=\"M804.571 621.714a36.206 36.206 0 0 1-10.861 25.71l-256 256c-6.84 6.839-16.019 10.862-25.71 10.862s-18.87-3.987-25.71-10.862l-256-256a36.425 36.425 0 0 1-10.861-25.71c0-20.004 16.566-36.571 36.571-36.571h512c20.005 0 36.571 16.567 36.571 36.571z m0-219.428c0 20.004-16.566 36.571-36.571 36.571H256c-20.005 0-36.571-16.567-36.571-36.571a36.206 36.206 0 0 1 10.861-25.71l256-256c6.84-6.839 16.019-10.862 25.71-10.862s18.87 3.987 25.71 10.862l256 256a36.425 36.425 0 0 1 10.861 25.71z\" p-id=\"2254\"></path></svg>\r\n </span>`,\r\n }}\r\n onGridReady={onGridReady}\r\n >\r\n </AgGridReact>\r\n </div>\r\n {pagination?<Pagination total={total} onChange={handleChangePage} {...pagination} />:null}\r\n </div>\r\n );\r\n};\r\nexport default TableList;\r\n","import { useState, useRef, useEffect, useCallback } from 'react';\nimport SettingTable from './settingTableCol';\nimport TableList from './tableList';\nimport { deepClone } from '../../utils';\n\n/**\n * CRM 列表 Hook\n *\n * 所有与业务耦合的接口均通过 props 注入,插件包本身不依赖任何业务工程:\n * @param {object} tProps\n * @param {string} tProps.sessionKey sessionStorage 存储 key\n * @param {object} tProps.renderKey 自定义单元格渲染,如 { companyName: (params) => node }\n * @param {Function} tProps.setParamsList 自定义请求参数转换,默认原样返回\n * @param {string} tProps.configKey 列配置的业务标识\n * @param {string} tProps.tableUrl 列表接口地址\n * @param {Function} tProps.tableRequest 列表接口请求方法 (params, url) => Promise<{response}>\n * @param {Function} tProps.getColConfigRequest 查询列配置接口 (configKey) => Promise<{response}>\n * @param {Function} tProps.saveColConfigRequest 保存列配置接口 (params) => void|Promise\n *\n * 依赖顺序说明(重要):\n * 本文件内各函数互相调用,定义顺序必须保持单向依赖,否则会触发 const 的\n * 暂时性死区(TDZ)报错:\n * checkHeadCols / saveColConfig / getTableData → handleColumn → getColConfig\n * 同时,所有可能由调用方以内联函数形式传入的值(tableRequest 等)\n * 都通过 ref 读取,不进 useCallback 依赖数组 —— 否则 callback 身份每渲染都变,\n * 会连带 useEffect 无限触发,造成请求死循环。\n */\nconst useTableModule = (tProps = {}, defaultProps = {}) => {\n // 保存到session里面的key\n const {\n sessionKey,\n renderKey,\n setParamsList,\n configKey,\n tableUrl,\n tableRequest,\n getColConfigRequest,\n saveColConfigRequest,\n } = { ...defaultProps, ...tProps };\n\n // sessionStorage 在 SSR / 测试环境下可能不存在\n const canUseSession = typeof window !== 'undefined' && !!window.sessionStorage;\n\n const saveSesstion = useCallback(\n (params) => {\n if (!canUseSession) return;\n try {\n window.sessionStorage.setItem(sessionKey, JSON.stringify(params));\n } catch (err) {\n // 隐私模式 / 超配额时写入会抛错,不应阻断业务流程\n console.warn('[useTableModule] sessionStorage 写入失败:', err);\n }\n },\n [sessionKey, canUseSession],\n );\n\n const getSesstion = useCallback(() => {\n if (!canUseSession) return null;\n try {\n const raw = window.sessionStorage.getItem(sessionKey);\n return raw ? JSON.parse(raw) : null;\n } catch (err) {\n // 数据损坏时不能抛错阻断渲染\n console.warn('[useTableModule] sessionStorage 读取失败:', err);\n return null;\n }\n }, [sessionKey, canUseSession]);\n\n const columRef = useRef([]);\n const [columnDefs, setColumnDefs] = useState([]);\n // tableDataList\n const [tableData, setTableData] = useState([]);\n // 分页总条数\n const [total, setTotal] = useState(undefined);\n // table列表loading\n const [loading, setloading] = useState(true);\n // 请求列表的参数\n const paramsCurrent = useRef(getSesstion() || {});\n // 是否还有搜索条件\n const [filterKey, setfilterKey] = useState(getSesstion()?.filter || []);\n // 请求序号,用于丢弃过期响应,避免竞态导致旧数据覆盖新数据\n const requestIdRef = useRef(0);\n\n /* ---------------------------------------------------------------- *\n * 调用方传入的函数/对象通过 ref 持有,避免进入依赖数组导致死循环\n * ---------------------------------------------------------------- */\n const tableRequestRef = useRef(tableRequest);\n tableRequestRef.current = tableRequest;\n const tableUrlRef = useRef(tableUrl);\n tableUrlRef.current = tableUrl;\n const setParamsListRef = useRef(setParamsList);\n setParamsListRef.current = setParamsList;\n const renderKeyRef = useRef(renderKey);\n renderKeyRef.current = renderKey;\n const getColConfigRequestRef = useRef(getColConfigRequest);\n getColConfigRequestRef.current = getColConfigRequest;\n const saveColConfigRequestRef = useRef(saveColConfigRequest);\n saveColConfigRequestRef.current = saveColConfigRequest;\n\n /* ---------------------------------------------------------------- *\n * 1. checkHeadCols —— 无外部依赖\n * ---------------------------------------------------------------- */\n const checkHeadCols = useCallback(() => {\n const { sort } = paramsCurrent.current;\n const NewArr = columRef.current.map((item) => {\n return {\n ...item,\n sort: sort && sort.colId == item.field ? sort.sort : undefined,\n };\n });\n setColumnDefs(deepClone(NewArr));\n }, []);\n\n /* ---------------------------------------------------------------- *\n * 2. saveColConfig —— 依赖 checkHeadCols 之外无\n * ---------------------------------------------------------------- */\n const saveColConfig = useCallback(() => {\n const request = saveColConfigRequestRef.current;\n if (!request) {\n console.warn('[useTableModule] 未注入 saveColConfigRequest,跳过列配置保存');\n return;\n }\n const params = {\n subcategory: configKey,\n userConfig: {\n pageConfig: {\n pageSize: paramsCurrent.current.size ? paramsCurrent.current.size : null,\n },\n columnConfig: columRef.current,\n },\n };\n const res = request(params);\n // 保存失败不应阻断表格交互\n if (res && typeof res.catch === 'function') {\n res.catch((err) => console.error('[useTableModule] 列配置保存失败:', err));\n }\n }, [configKey]);\n\n /* ---------------------------------------------------------------- *\n * 3. getTableData —— 列表数据请求\n * ---------------------------------------------------------------- */\n const getTableData = useCallback(() => {\n const request = tableRequestRef.current;\n if (!request) {\n console.warn('[useTableModule] 未注入 tableRequest,跳过列表加载');\n setloading(false);\n return;\n }\n // 标记本次请求序号,响应回来时若不是最新的一次则丢弃\n requestIdRef.current += 1;\n const currentId = requestIdRef.current;\n\n const transform = setParamsListRef.current;\n const newParams = transform ? transform(paramsCurrent.current) : paramsCurrent.current;\n setloading(true);\n return request(newParams, tableUrlRef.current).then(\n (res) => {\n // 已有更新的请求发出,丢弃本次过期响应\n if (currentId !== requestIdRef.current) return;\n const response = res?.response;\n // 接口可能返回 { response: { data: [], total } } 或 { response: [] } 两种结构\n const rows = Array.isArray(response) ? response : response?.data || [];\n // 总条数用于分页展示,缺失时保持为 undefined 由 TableList 兜底\n const totalCount = Array.isArray(response) ? undefined : response?.total;\n if (typeof totalCount === 'number' && !Number.isNaN(totalCount)) {\n setTotal(totalCount);\n }\n const newData = rows.map((item) => {\n return {\n ...item,\n ...(item._source || {}),\n };\n });\n setTableData(newData);\n setloading(false);\n },\n (err) => {\n if (currentId !== requestIdRef.current) return;\n console.error('[useTableModule] 列表加载失败:', err);\n // 失败时也要关掉 loading,否则界面永久卡在加载态\n setloading(false);\n },\n );\n }, []);\n\n /* ---------------------------------------------------------------- *\n * 4. handleColumn —— 表头变更统一入口\n * ---------------------------------------------------------------- */\n const handleColumn = useCallback(\n (params) => {\n const { column, optType, sort, pagination, filter } = params;\n let arrHead = [];\n if (column) {\n // 拖拽 / 自定义列显隐\n // 注意:column 里的顺序即最终顺序,需要按 column 的顺序重建,\n // 同时保留 columRef.current 中未被 column 覆盖的列,避免丢列。\n const columnMap = new Map(column.map((i) => [i.field, i]));\n arrHead = columRef.current.map((k) => {\n const matched = columnMap.get(k.field);\n if (!matched) return { ...k };\n const visible = matched.visible !== undefined ? matched.visible : !matched.hide;\n return { ...k, hide: !visible, visible };\n });\n\n // column 中存在但 columRef.current 中没有的列(新列),追加到末尾\n const existingFields = new Set(columRef.current.map((k) => k.field));\n column.forEach((i) => {\n if (!existingFields.has(i.field)) {\n const visible = i.visible !== undefined ? i.visible : !i.hide;\n arrHead.push({ ...i, hide: !visible, visible });\n }\n });\n\n columRef.current = arrHead;\n\n // 保持列配置\n saveColConfig();\n }\n if (optType == 'mergeColum') {\n // 合并表头\n setColumnDefs(deepClone(arrHead?.length ? arrHead : columRef.current));\n }\n if (optType == 'sort') {\n // 排序 注意 field 对应的是 colId\n paramsCurrent.current = {\n ...paramsCurrent.current,\n sort: sort,\n };\n\n saveSesstion(paramsCurrent.current);\n // 重新请求列表\n checkHeadCols();\n getTableData();\n }\n if (pagination) {\n // 分页\n paramsCurrent.current = {\n ...paramsCurrent.current,\n ...pagination,\n };\n saveSesstion(paramsCurrent.current);\n getTableData();\n }\n if (filter) {\n // 高级搜索\n paramsCurrent.current = {\n ...paramsCurrent.current,\n filter,\n };\n // 换筛选条件后回到第一页,否则可能停留在越界页码上导致空列表\n if (paramsCurrent.current.page && paramsCurrent.current.page > 1) {\n paramsCurrent.current.page = 1;\n }\n saveSesstion(paramsCurrent.current);\n getTableData();\n }\n },\n [saveSesstion, saveColConfig, checkHeadCols, getTableData],\n );\n\n /* ---------------------------------------------------------------- *\n * 5. getColConfig —— 列配置加载\n * ---------------------------------------------------------------- */\n const getColConfig = useCallback(() => {\n const request = getColConfigRequestRef.current;\n if (!request) {\n console.warn('[useTableModule] 未注入 getColConfigRequest,跳过列配置加载');\n setloading(false);\n return;\n }\n const { sort } = paramsCurrent.current;\n const currentRenderKey = renderKeyRef.current;\n request(configKey).then(\n ({ response }) => {\n const columnConfig = response?.userConfig?.columnConfig || [];\n const newArr = columnConfig.map((item) => {\n return {\n ...item,\n hide: !item.visible,\n visible: item.visible,\n sort: sort && sort.colId == item.field ? sort.sort : undefined,\n render: currentRenderKey ? currentRenderKey[item.field] : undefined,\n };\n });\n setColumnDefs(deepClone(newArr));\n columRef.current = deepClone(newArr);\n getTableData();\n },\n (err) => {\n console.error('[useTableModule] 列配置加载失败:', err);\n setloading(false);\n },\n );\n }, [configKey, getTableData]);\n\n /* ---------------------------------------------------------------- *\n * 6. resetSesstion —— 重置搜索条件\n * ---------------------------------------------------------------- */\n const resetSesstion = useCallback(() => {\n const session = getSesstion() || {};\n paramsCurrent.current = session;\n setfilterKey(session.filter || []);\n checkHeadCols();\n // 重置后必须重新拉数据,否则表格仍显示旧的筛选结果\n getTableData();\n }, [getSesstion, checkHeadCols, getTableData]);\n\n // 仅在 configKey 变化时加载一次列配置。\n // 依赖里若放入 getColConfigRequest(调用方常传内联函数,身份每渲染都变)\n // 会造成无限请求循环,因此请求函数通过 ref 读取。\n useEffect(() => {\n if (configKey) {\n // 交给 getColConfig 内部判断接口是否注入,未注入时它会给出提示并关闭 loading\n getColConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [configKey]);\n\n const SettingTableRender = useCallback(\n (props = {}) => {\n return <SettingTable columRef={columRef} onChange={handleColumn} {...props}></SettingTable>;\n },\n [handleColumn],\n );\n\n const TableListRender = useCallback(\n (props = {}) => {\n return (\n <TableList\n filterKey={filterKey}\n setfilterKey={setfilterKey}\n loading={loading}\n columnDefs={columnDefs}\n pagination={{\n current: paramsCurrent.current.page,\n pageSize: paramsCurrent.current.size,\n total,\n }}\n onChange={handleColumn}\n tableData={tableData}\n {...props}\n />\n );\n },\n [filterKey, loading, columnDefs, tableData, total, handleColumn],\n );\n\n return {\n SettingTableRender,\n TableListRender,\n // 需要单独回调的就抛出去,特殊场景多个列表使用,平常用url回调一次\n getTableData, //获取列表数据\n getColConfig, //获取配置接口\n saveColConfig, //保存配置接口\n resetSesstion,\n tableData,\n setloading,\n // 原实现漏掉了 loading / columnDefs / paramsCurrent / total,\n // 使用方无法感知加载态与分页总数,这里补齐。\n loading,\n columnDefs,\n paramsCurrent,\n total,\n filterKey,\n };\n};\nexport default useTableModule;\n","import { Input } from 'antd';\r\nimport { useMemo } from 'react';\r\n\r\nconst defaultStyle = {\r\n width: '100%',\r\n};\r\n\r\n/**\r\n * 列表页自定义搜索插槽\r\n *\r\n * @param dataIndex 字段名\r\n * @param language 是否英文\r\n * @param onChange 值变化回调\r\n * @param value 当前值\r\n */\r\nconst OtherSlot = ({ dataIndex, language, onChange, value, ...reset }) => {\r\n const slotOther = useMemo(() => {\r\n return (\r\n <Input\r\n value={value?.length ? value : null}\r\n style={defaultStyle}\r\n {...reset}\r\n onChange={(e) => {\r\n onChange(e.target.value);\r\n }}\r\n ></Input>\r\n );\r\n // dataIndex / value 变化时重建;其余字段由调用方通过 reset 透传\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [dataIndex, value]);\r\n return (\r\n <div\r\n style={{\r\n marginBottom: 8,\r\n }}\r\n >\r\n {slotOther}\r\n </div>\r\n );\r\n};\r\nexport default OtherSlot;\r\n"],"names":["isEmpty","value","get","obj","path","defaultValue","keys","cur","formatNumber","digits","num","formatMoney","options","symbol","showSymbol","showZeroZero","abs","prefix","formatPercent","groupBy","list","keyFn","result","item","key","omitEmpty","debounce","fn","wait","timer","args","cx","MayList","objectsArray","deepClone","seen","arr","Text","Typography","TextCell","React","MoneyCell","NumberCell","percent","TagCell","color","tagColor","text","hit","o","Tag","EllipsisCell","length","str","Tooltip","LinkCell","onClick","ActionCell","actions","action","crmTheme","STATUS_PRESETS","DICT_COLOR_MAP","AG_GRID_THEMES","DEFAULT_AG_GRID_THEME","agGridClass","theme","extra","ROW_HEIGHT_PRESETS","iconSet","iconsNs","SearchOutlined","SettingOutlined","SettingTable","onChange","columRef","language","useSelector","state","settingStatus","setSettingStatus","useState","headerCloumsList","setHeaderCloumsList","useEffect","current","saveQuit","changeCheck","index","openInitHeadList","Popover","Styles","open","Checkbox","e","Button","svgProps","SortAscending","props","SortDescending","SortUnSort","CustomHeader","ascSort","setAscSort","descSort","setDescSort","noSort","setNoSort","refButton","useRef","setopen","valueDefs","setvalueDefs","onMenuClicked","_a","onSortChanged","sort","onSortRequested","order","event","column","defaultStyle","context","useMemo","Render","Input","_b","search","filterKeyArrary","i","values","TableList","columnDefs","loading","customBottomTotal","tableRef","tableData","pagination","reset","customColumn","filterSearchRender","setfilterKey","filterKey","containerStyle","gridStyle","total","fromPagination","pinnedBottomRowData","objTotal","disableTotal","defaultCol","valueA","valueB","nodeA","nodeB","isDescending","defaultColDef","onGridReady","useCallback","params","getCellParams","isNotTip","render","isTotalRow","sortChanged","sortModel","onDragStopped","handleChangePage","page","size","Spin","AgGridReact","Pagination","useTableModule","tProps","defaultProps","sessionKey","renderKey","setParamsList","configKey","tableUrl","tableRequest","getColConfigRequest","saveColConfigRequest","canUseSession","saveSesstion","err","getSesstion","raw","setColumnDefs","setTableData","setTotal","setloading","paramsCurrent","requestIdRef","tableRequestRef","tableUrlRef","setParamsListRef","renderKeyRef","getColConfigRequestRef","saveColConfigRequestRef","checkHeadCols","NewArr","saveColConfig","request","res","getTableData","currentId","transform","newParams","response","rows","totalCount","newData","handleColumn","optType","filter","arrHead","columnMap","k","matched","visible","existingFields","getColConfig","currentRenderKey","newArr","resetSesstion","session","SettingTableRender","TableListRender","OtherSlot","dataIndex","slotOther"],"mappings":"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"}
|
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@charset "UTF-8";._poper_cidv4_2 .ant-popover-inner{padding:0}._antTable_cidv4_6 .ant-table-body{min-height:400px}._detailTable_cidv4_10 ._opts_cidv4_10{display:flex;justify-content:flex-end;align-items:center;color:#00000073;margin-bottom:16px}._commonDetail_cidv4_18 ._title_cidv4_18{display:flex;font-size:14px;align-items:center;padding:14px 0;justify-content:space-between}._commonDetail_cidv4_18 ._searchAndAdd_cidv4_25 ._addIcons_cidv4_25{color:#1890ff;margin-left:20px;cursor:pointer}._noteTitle_cidv4_31{min-width:100px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px;margin-right:10px}._customHead_cidv4_40{display:flex}._customHead_cidv4_40 ._sortNames_cidv4_43{display:inline-flex;align-items:center;cursor:pointer}._customHead_cidv4_40 ._sortNames_cidv4_43 ._customSort_cidv4_48{font-size:14px;margin-left:6px;color:#1890ff}._customHead_cidv4_40 ._sortNames_cidv4_43 ._customUnSort_cidv4_53{color:#999}._customHead_cidv4_40 ._sortNames_cidv4_43 ._active_cidv4_56{display:block}._customHead_cidv4_40 ._sortNames_cidv4_43 ._inactive_cidv4_59{display:none}._popoverContext_cidv4_63 .ant-popover-inner{padding:20px;border-radius:2px}._contextRender_cidv4_68{width:372px}._contextRender_cidv4_68 ._contextRenderFooter_cidv4_71{margin-top:20px}.cell-span{background-color:#fff;border-right:1px solid #dde2eb!important;border-bottom:1px solid #dde2eb!important;display:flex;align-items:center}.ag-theme-alpine .ag-row-odd,.ag-theme-alpine .ag-row-hover{background-color:#fff}.loadingContent{position:absolute;z-index:1000;width:100%;height:100%;background:#fff;display:flex;align-items:center;justify-content:center;top:50%;transform:translateY(-50%)}.ag-pinned-right-header .ag-header-cell-resize:after{display:none}
|
package/package.json
CHANGED
|
@@ -1,6 +1,100 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wangcheng051/plugin-kit",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "CRM 后台 React 插件包:antd 5 二次封装组件 + ag-grid 31 封装表格",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "CRM Platform Team"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/crm-platform/crm-plugin-kit#readme",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/crm-platform/crm-plugin-kit.git"
|
|
13
|
+
},
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/crm-platform/crm-plugin-kit/issues"
|
|
16
|
+
},
|
|
17
|
+
"type": "module",
|
|
18
|
+
"sideEffects": [
|
|
19
|
+
"**/*.css"
|
|
20
|
+
],
|
|
21
|
+
"main": "./dist/index.cjs",
|
|
22
|
+
"module": "./dist/index.js",
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"unpkg": "./dist/index.umd.cjs",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"import": "./dist/index.js",
|
|
29
|
+
"require": "./dist/index.cjs"
|
|
30
|
+
},
|
|
31
|
+
"./style.css": "./dist/style.css",
|
|
32
|
+
"./package.json": "./package.json"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist",
|
|
36
|
+
"README.md",
|
|
37
|
+
"LICENSE"
|
|
38
|
+
],
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public",
|
|
41
|
+
"provenance": false
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "node scripts/check-types.mjs && vite build && node scripts/copy-types.mjs",
|
|
45
|
+
"build:demo": "vite build --config examples/demo/vite.config.js",
|
|
46
|
+
"dev": "vite --config examples/demo/vite.config.js",
|
|
47
|
+
"preview:demo": "vite preview --config examples/demo/vite.config.js",
|
|
48
|
+
"verify:dist": "node scripts/verify-dist.mjs",
|
|
49
|
+
"verify:types": "node scripts/check-types.mjs",
|
|
50
|
+
"smoke": "node scripts/smoke-render.mjs",
|
|
51
|
+
"test:table": "node scripts/test-use-table.mjs",
|
|
52
|
+
"test:table:async": "node scripts/test-use-table-async.mjs",
|
|
53
|
+
"test": "npm run test:table && npm run test:table:async",
|
|
54
|
+
"prepublishOnly": "npm run verify:types && npm run build && npm run verify:dist && npm run smoke && npm run test",
|
|
55
|
+
"publish:public": "node scripts/publish.mjs public",
|
|
56
|
+
"publish:private": "node scripts/publish.mjs private",
|
|
57
|
+
"publish:public:confirm": "node scripts/publish.mjs public --yes",
|
|
58
|
+
"publish:private:confirm": "node scripts/publish.mjs private --yes"
|
|
59
|
+
},
|
|
60
|
+
"keywords": [
|
|
61
|
+
"crm",
|
|
62
|
+
"react",
|
|
63
|
+
"antd",
|
|
64
|
+
"ag-grid",
|
|
65
|
+
"admin",
|
|
66
|
+
"plugin-kit",
|
|
67
|
+
"component-library"
|
|
68
|
+
],
|
|
69
|
+
"peerDependencies": {
|
|
70
|
+
"@ant-design/icons": "^5.5.1",
|
|
71
|
+
"ag-grid-community": "^31.0.1",
|
|
72
|
+
"ag-grid-react": "^31.0.1",
|
|
73
|
+
"antd": "^5.21.6",
|
|
74
|
+
"react": "^17.0.2",
|
|
75
|
+
"react-dom": "^17.0.2",
|
|
76
|
+
"react-redux": "^7.2.4"
|
|
77
|
+
},
|
|
78
|
+
"peerDependenciesMeta": {
|
|
79
|
+
"react-redux": {
|
|
80
|
+
"optional": true
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"devDependencies": {
|
|
84
|
+
"@ant-design/icons": "^5.5.1",
|
|
85
|
+
"@vitejs/plugin-react": "^4.3.4",
|
|
86
|
+
"ag-grid-community": "^31.0.1",
|
|
87
|
+
"ag-grid-react": "^31.0.1",
|
|
88
|
+
"antd": "^5.21.6",
|
|
89
|
+
"jsdom": "^24.1.3",
|
|
90
|
+
"react": "^17.0.2",
|
|
91
|
+
"react-dom": "^17.0.2",
|
|
92
|
+
"react-redux": "^7.2.4",
|
|
93
|
+
"react-router-dom": "^5.2.0",
|
|
94
|
+
"sass": "^1.107.1",
|
|
95
|
+
"vite": "^5.4.11"
|
|
96
|
+
},
|
|
97
|
+
"engines": {
|
|
98
|
+
"node": ">=16"
|
|
99
|
+
}
|
|
100
|
+
}
|