UNPKG

@flatbiz/antd

Version:
1,243 lines (1,223 loc) 60.1 kB
/* eslint-disable */ import './../box-grid/index.css'; import './../fba-hooks/index.css'; import './../fba-utils/index.css'; import './../form-grid/index.css'; import './../pre-defined-class-name/index.css'; import './index.css'; /*! @flatjs/forge MIT @flatbiz/antd */ import { f as fbaUtils } from '../fba-utils-CusZeveq.js'; import { isArray } from '@dimjs/lang/is-array'; import { isObject } from '@dimjs/lang/is-object'; import { b as _objectSpread2, a as _slicedToArray, i as _defineProperty, c as _toConsumableArray, _ as _objectWithoutProperties } from '../_rollupPluginBabelHelpers-BspM60Sw.js'; import { sessionStorageCache, localStorageCache, noop, trim, getUuid, isUndefinedOrNull, isMac } from '@flatbiz/utils'; import { classNames } from '@dimjs/utils/class-names/class-names'; import { isUndefined } from '@dimjs/lang/is-undefined'; import { get } from '@dimjs/utils/get/get'; import { isString } from '@dimjs/lang/is-string'; import { createContext, useState, Fragment, forwardRef, useRef, useMemo, useImperativeHandle, cloneElement, useContext, Children, useEffect } from 'react'; import { useMemoizedFn, useUpdateEffect } from 'ahooks'; import { Checkbox, Popover, Form, message, Badge, Drawer, Table, Empty, Space } from 'antd'; import { fbaHooks } from '../fba-hooks/index.js'; import { P as PaginationWrapper } from '../pagination-BHbEACI4.js'; import { jsx, jsxs } from 'react/jsx-runtime'; import _DownOutlined from '@ant-design/icons/es/icons/DownOutlined.js'; import _UpOutlined from '@ant-design/icons/es/icons/UpOutlined.js'; import { isFragment } from 'react-is'; import { B as BlockLayout } from '../layout-2woF_D6T.js'; import { B as ButtonWrapper } from '../button-wrapper-BGjkUPpk.js'; import { E as EasyForm } from '../form-ByFljQr9.js'; import { FormGrid } from '../form-grid/index.js'; import { F as FlexLayout } from '../flex-layout-BGtMe7zr.js'; import { T as TableScrollbar } from '../table-scrollbar-yqz5FkCz.js'; import { I as IconWrapper } from '../icon-wrapper-DE97bI14.js'; import { S as SvgHttpView } from '../svg-CqFW3W-s.js'; import { T as TipsWrapper } from '../tips-wrapper-DvbgHMwl.js'; import '../use-responsive-point-Bp3D3lZT.js'; import '@ant-design/icons/es/icons/LoadingOutlined.js'; import '@dimjs/lang/is-promise'; import '../config-provider-wrapper-Bxh9JdL4.js'; import 'antd/es/locale/en_US.js'; import 'antd/es/locale/zh_CN.js'; import 'dayjs'; import 'dayjs/plugin/advancedFormat.js'; import 'dayjs/plugin/customParseFormat.js'; import 'dayjs/plugin/localeData.js'; import 'dayjs/plugin/utc.js'; import 'dayjs/plugin/weekday.js'; import 'dayjs/plugin/weekOfYear.js'; import 'dayjs/plugin/weekYear.js'; import '@dimjs/utils/extend/extend'; import 'dayjs/locale/en.js'; import 'dayjs/locale/zh-cn.js'; import '../box-grid/index.js'; import '@dimjs/lang/is-number'; import '../form-wrapper-DBDMN0mN.js'; import '../pre-defined-class-name/index.js'; import '@ant-design/icons/es/icons/QuestionCircleOutlined.js'; var filterCache = { set: function set(cacheKey, filterCondition) { var value = filterCache.get(cacheKey); var mergeParams = _objectSpread2(_objectSpread2({}, value), filterCondition); sessionStorageCache.set("easy_tab_filter_".concat(cacheKey), mergeParams); return mergeParams; }, get: function get(cacheKey) { var value = sessionStorageCache.get("easy_tab_filter_".concat(cacheKey)); return isObject(value) ? value : {}; }, remove: function remove(cacheKey) { sessionStorageCache.remove("easy_tab_filter_".concat(cacheKey)); } }; var firstQueryCache = { set: function set(cacheKey, flag) { sessionStorageCache.set("easy_tab_firstQuery_".concat(cacheKey), { value: flag }); }, get: function get(cacheKey) { var _sessionStorageCache$; var value = (_sessionStorageCache$ = sessionStorageCache.get("easy_tab_firstQuery_".concat(cacheKey))) === null || _sessionStorageCache$ === void 0 ? void 0 : _sessionStorageCache$.value; return value === false ? false : true; }, remove: function remove(cacheKey) { sessionStorageCache.remove("easy_tab_firstQuery_".concat(cacheKey)); } }; var columnFoldCache = { set: function set(cacheKey, value) { localStorageCache.set("easy_tab_columnFold_".concat(cacheKey), { value: value }); }, get: function get(cacheKey) { var _localStorageCache$ge; var value = (_localStorageCache$ge = localStorageCache.get("easy_tab_columnFold_".concat(cacheKey))) === null || _localStorageCache$ge === void 0 ? void 0 : _localStorageCache$ge.value; return isArray(value) ? value : []; }, remove: function remove(cacheKey) { localStorageCache.remove("easy_tab_columnFold_".concat(cacheKey)); } }; var EasyTableContext = /*#__PURE__*/createContext({ onRequest: noop, tableList: [], getEasyTableRef: function getEasyTableRef() { // } }); var FoldOperateDropdown = function FoldOperateDropdown(props) { var _useState = useState(props.initSelectedRowKeys || []), _useState2 = _slicedToArray(_useState, 2), selectedRowKeys = _useState2[0], setSelectedRowKeys = _useState2[1]; var onChange = function onChange(keys) { setSelectedRowKeys(keys); props.onChange(keys); if (props.cacheKey) { columnFoldCache.set(props.cacheKey, keys); } }; var content = /*#__PURE__*/jsx(Fragment, { children: /*#__PURE__*/jsx(Checkbox.Group, { defaultValue: selectedRowKeys, onChange: onChange, value: selectedRowKeys, style: { display: 'flex', flexDirection: 'column' }, children: props.dataList.map(function (item) { var label = item['_isFoldTitle'] || item.title; return /*#__PURE__*/jsx(Checkbox, { value: item.dataIndex, style: { padding: '0 0 5px 0' }, children: label }, item.dataIndex); }) }) }); var onChangeAll = function onChangeAll(e) { if (e.target.checked) { onChange(props.dataList.map(function (item) { return item.dataIndex; })); } else { onChange([]); } }; return /*#__PURE__*/jsx(Popover, { content: content, title: /*#__PURE__*/jsx(Checkbox, { checked: selectedRowKeys.length === props.dataList.length, onChange: onChangeAll, children: "\u5168\u9009" }), placement: "bottomRight", overlayClassName: "fold-operate-popiver", children: props.children }); }; var getFormFieldsValue = function getFormFieldsValue(form, filterFormItemKeys) { var formValues = form.getFieldsValue() || {}; if (!(filterFormItemKeys !== null && filterFormItemKeys !== void 0 && filterFormItemKeys.length)) { return formValues; } var values = {}; filterFormItemKeys.forEach(function (item) { values[item] = formValues[item]; }); return values; }; /** * 请求参数内部转换处理 * ``` * 1. 对象中值为空字符串、null、undefined 的key值,直接删除 * 2. 对象中以`__#invalid_xxxx`开头的key值,直接删除 * 3. 注意params可能会有嵌套,只考虑object嵌套 * ``` */ var _requestParamsInternalAdapter = function requestParamsInternalAdapter(params) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!params || typeof params !== 'object' || Array.isArray(params)) { return params; } var _options$removeEmptyV = options.removeEmptyValue, removeEmptyValue = _options$removeEmptyV === void 0 ? true : _options$removeEmptyV; var result = {}; for (var key in params) { if (!Object.prototype.hasOwnProperty.call(params, key)) { continue; } var value = params[key]; if (typeof value === 'string') { value = trim(value, true); } // 删除以 `__#invalid_` 开头的key if (key.includes('__#invalid_') || removeEmptyValue && (value === '' || value === null || value === undefined)) { continue; } // 处理嵌套对象 if (value !== null && typeof value === 'object' && !Array.isArray(value)) { result[key] = _requestParamsInternalAdapter(value, options); } else { result[key] = value; } } return result; }; var EasyTable$1 = /*#__PURE__*/forwardRef(function (props, ref) { var screenType = fbaHooks.useResponsivePoint() || ''; var _useState = useState(), _useState2 = _slicedToArray(_useState, 2), dataSource = _useState2[0], setDataSource = _useState2[1]; var _useState3 = useState(0), _useState4 = _slicedToArray(_useState3, 2), total = _useState4[0], setTotal = _useState4[1]; var _useState5 = useState(false), _useState6 = _slicedToArray(_useState5, 2), loading = _useState6[0], setLoading = _useState6[1]; var columnFoldConfig = props.columnFoldConfig; var asyncColumnRequest = props.asyncColumnRequest; // 记录是否发起过请求 var alreadyRequestFlag = useRef(false); var removeRequestParamsEmptyValue = props.removeRequestParamsEmptyValue === undefined ? true : props.removeRequestParamsEmptyValue; var _useState7 = useState(false), _useState8 = _slicedToArray(_useState7, 2), columnFoldOpen = _useState8[0], setColumnFoldOpen = _useState8[1]; var cacheKey = useMemo(function () { if (props.cacheKey) { try { var iframe = window.frameElement; var iframeId = (iframe === null || iframe === void 0 ? void 0 : iframe.id) || ''; return "".concat(props.cacheKey, "_").concat(iframeId); } catch (_error) { return props.cacheKey; } } return "".concat(Date.now(), "-").concat(getUuid()); }, [props.cacheKey]); var cacheParams = filterCache.get(cacheKey); var _useState9 = useState(function () { if (cacheKey) { var columnFoldCacheValue = columnFoldCache.get(cacheKey); var cacheKeyList = isArray(columnFoldCacheValue) ? columnFoldCacheValue.filter(function (item) { return isString(item); }) : []; return cacheKeyList.length > 0 ? cacheKeyList : (columnFoldConfig === null || columnFoldConfig === void 0 ? void 0 : columnFoldConfig.initSelectedKeys) || []; } else { return (columnFoldConfig === null || columnFoldConfig === void 0 ? void 0 : columnFoldConfig.initSelectedKeys) || []; } }), _useState0 = _slicedToArray(_useState9, 2), showFoldKeyList = _useState0[0], setShowFoldKeyList = _useState0[1]; var pageSize = props.pageSize || 10; var cancelInitAutoRequest = useMemo(function () { if (typeof props.cancelInitAutoRequest === 'function') { return props.cancelInitAutoRequest(); } if (!isUndefinedOrNull(props.cancelInitAutoRequest)) { return props.cancelInitAutoRequest; } return props.initRequest == false ? true : false; }, [props]); var alwaysCancelInitAutoRequest = useMemo(function () { if (typeof props.alwaysCancelInitAutoRequest === 'function') { return props.alwaysCancelInitAutoRequest(); } return props.alwaysCancelInitAutoRequest; }, [props]); var paginationStatusRef = useRef(false); var respOriginalDataRef = useRef(); var baseColumnsRef = useRef([]); var _useState1 = useState(), _useState10 = _slicedToArray(_useState1, 2), dynamicColumns = _useState10[0], setDynamicColumns = _useState10[1]; var columnsRef = useRef([]); var fieldNames = _objectSpread2({ list: 'list', total: 'total', pageNo: 'pageNo', pageSize: 'pageSize' }, props.fieldNames); var outerForm = Form.useFormInstance(); var _Form$useForm = Form.useForm(props.form || outerForm), _Form$useForm2 = _slicedToArray(_Form$useForm, 1), form = _Form$useForm2[0]; var onInnerRequest = useMemoizedFn(function (params) { return new Promise(function ($return, $error) { var _props$onDataSourceCh, paramsAll, _props$serviceConfig, requestParamsAdapter, onRequest, requestResultAdapter, dynamicColumsAdapter, paramsNew, respData, respDataNew, _dynamicColumns, respList; var $Try_2_Post = function () { try { return $return(); } catch ($boundEx) { return $error($boundEx); } }; var $Try_2_Catch = function (error) { try { setLoading(false); if (props.onRequestErrorHandle) { props.onRequestErrorHandle(error); } else { void message.error((error === null || error === void 0 ? void 0 : error.message) || '未知异常'); } return $Try_2_Post(); } catch ($boundEx) { return $error($boundEx); } }; try { if (props.breforeRequest) { var $Try_3_Post = function () { try { return $If_4.call(this); } catch ($boundEx) { return $Try_2_Catch($boundEx); } }.bind(this); var $Try_3_Catch = function (_error) { try { return $return(); } catch ($boundEx) { return $Try_2_Catch($boundEx); } }; try { return Promise.resolve(props.breforeRequest(form)).then(function ($await_5) { try { return $Try_3_Post(); } catch ($boundEx) { return $Try_3_Catch($boundEx); } }, $Try_3_Catch); } catch (_error) { $Try_3_Catch(_error); } } function $If_4() { firstQueryCache.set(cacheKey, false); paramsAll = filterCache.set(cacheKey, params); setLoading(true); _props$serviceConfig = props.serviceConfig, requestParamsAdapter = _props$serviceConfig.requestParamsAdapter, onRequest = _props$serviceConfig.onRequest, requestResultAdapter = _props$serviceConfig.requestResultAdapter, dynamicColumsAdapter = _props$serviceConfig.dynamicColumsAdapter; paramsNew = _requestParamsInternalAdapter(paramsAll, { removeEmptyValue: removeRequestParamsEmptyValue }); paramsNew = requestParamsAdapter ? requestParamsAdapter(paramsNew, paramsAll) : paramsNew; return Promise.resolve(onRequest(paramsNew)).then(function ($await_6) { try { respData = $await_6 || {}; alreadyRequestFlag.current = true; respOriginalDataRef.current = respData; (_props$onDataSourceCh = props.onDataSourceChange) === null || _props$onDataSourceCh === void 0 || _props$onDataSourceCh.call(props, respData); respDataNew = respData; if (requestResultAdapter) { respDataNew = requestResultAdapter(respData); } if (dynamicColumsAdapter) { _dynamicColumns = dynamicColumsAdapter(respData, baseColumnsRef.current); /** 不要添加默认值 */ setDynamicColumns(_dynamicColumns); } respList = get(respDataNew, fieldNames.list); setDataSource(isArray(respList) ? respList : []); setTotal(get(respDataNew, fieldNames.total)); setLoading(false); return $Try_2_Post(); } catch ($boundEx) { return $Try_2_Catch($boundEx); } }, $Try_2_Catch); } return $If_4.call(this); } catch (error) { $Try_2_Catch(error); } }); }); fbaHooks.useEffectCustom(function () { var hasPagination = getPaginationStatus(); var firstQueryFlag = firstQueryCache.get(cacheKey); /** 缓存的优先级高于 initialValues */ form.setFieldsValue(_objectSpread2(_objectSpread2({}, props.initialValues), cacheParams)); if (alwaysCancelInitAutoRequest) { filterCache.set(cacheKey, props.initialValues || {}); return; } if (!cancelInitAutoRequest || !firstQueryFlag) { if (hasPagination) { void onInnerRequest(_objectSpread2(_objectSpread2(_defineProperty(_defineProperty({}, fieldNames.pageNo, 1), fieldNames.pageSize, pageSize), props.initialValues), cacheParams)); } else { void onInnerRequest(props.initialValues); } } else { filterCache.set(cacheKey, props.initialValues || {}); } }, []); var clearQueryCondition = useMemoizedFn(function (values) { filterCache.remove(cacheKey); form.resetFields(); if (values) { filterCache.set(cacheKey, values); form.setFieldsValue(values); } }); var updateQueryCondition = useMemoizedFn(function (values) { filterCache.set(cacheKey, values); form.setFieldsValue(values); }); var getPaginationData = function getPaginationData(pageNo, _pageSize) { if (getPaginationStatus()) { return _defineProperty(_defineProperty({}, fieldNames.pageNo, pageNo), fieldNames.pageSize, _pageSize || pageSize); } else { return _defineProperty(_defineProperty({}, fieldNames.pageNo, undefined), fieldNames.pageSize, undefined); } }; var onResetRequest = useMemoizedFn(function (values) { var params = _objectSpread2(_objectSpread2(_objectSpread2({}, getPaginationData(1, cacheParams[fieldNames.pageSize])), props.initialValues), values); filterCache.remove(cacheKey); form.resetFields(); if (values) { form.setFieldsValue(values); } void onInnerRequest(params); }); var getRequestParams = useMemoizedFn(function () { var _props$filterFormItem; var cacheParams = filterCache.get(cacheKey); var parameAll = _objectSpread2(_objectSpread2({}, cacheParams), form.getFieldsValue()); var params = _objectSpread2({}, getPaginationData(1, parameAll[fieldNames.pageSize])); if ((_props$filterFormItem = props.filterFormItemKeys) !== null && _props$filterFormItem !== void 0 && _props$filterFormItem.length) { props.filterFormItemKeys.forEach(function (item) { params[item] = parameAll[item]; }); } else { params = _objectSpread2(_objectSpread2({}, parameAll), params); } return _requestParamsInternalAdapter(params, { removeEmptyValue: removeRequestParamsEmptyValue }); }); var onOpenColumnFoldModal = useMemoizedFn(function () { setColumnFoldOpen(true); }); var onCloseColumnFoldModal = useMemoizedFn(function () { setColumnFoldOpen(false); }); var getSubmitParams = useMemoizedFn(function () { var _props$filterFormItem2; var cacheParams = filterCache.get(cacheKey); var params = _objectSpread2({}, getPaginationData(1, cacheParams[fieldNames.pageSize])); if ((_props$filterFormItem2 = props.filterFormItemKeys) !== null && _props$filterFormItem2 !== void 0 && _props$filterFormItem2.length) { props.filterFormItemKeys.forEach(function (item) { params[item] = cacheParams[item]; }); } else { params = _objectSpread2(_objectSpread2({}, cacheParams), params); } return _requestParamsInternalAdapter(params, { removeEmptyValue: removeRequestParamsEmptyValue }); }); var getEasyTableRef = function getEasyTableRef() { return { /** * 参数 * 1. 不用添加已存在的搜索条件 * 2. 此处可重新 */ onRequest: onInnerRequest, clearQueryCondition: clearQueryCondition, updateQueryCondition: updateQueryCondition, getRequestParams: getRequestParams, getSubmitParams: getSubmitParams, onResetRequest: onResetRequest, form: form, dataSource: respOriginalDataRef.current, getDataSource: function getDataSource() { return respOriginalDataRef.current; }, onFilterDataSource: function onFilterDataSource(filterDataSource) { setDataSource(filterDataSource); }, getTableDataList: function getTableDataList() { return dataSource || []; }, onClearDataSource: function onClearDataSource() { setTotal(0); setDataSource([]); }, onUpdateDataSource: function onUpdateDataSource(dataList) { var _props$onDataSourceCh2; setDataSource(dataList); respOriginalDataRef.current = _defineProperty({}, fieldNames.list, dataList); (_props$onDataSourceCh2 = props.onDataSourceChange) === null || _props$onDataSourceCh2 === void 0 || _props$onDataSourceCh2.call(props, respOriginalDataRef.current); }, columnFoldTriggerRender: function columnFoldTriggerRender(children, columns) { var _props$columnFoldConf; if (((_props$columnFoldConf = props.columnFoldConfig) === null || _props$columnFoldConf === void 0 ? void 0 : _props$columnFoldConf.triggerType) === 'drawer') { return /*#__PURE__*/cloneElement(children, { onClick: onOpenColumnFoldModal }); } var foldColumnList = columns.filter(function (item) { return !item.hidden && item.isFold && item.dataIndex; }); return /*#__PURE__*/jsx(FoldOperateDropdown, { dataList: foldColumnList, onChange: onChangeFoldColumnList, cacheKey: cacheKey, initSelectedRowKeys: showFoldKeyList, children: children }); }, onChangeTableColumns: function onChangeTableColumns(columns) { setDynamicColumns(columns); }, getTableColumns: function getTableColumns() { return columnsRef.current; }, loading: loading, setEnabledInitRequest: function setEnabledInitRequest() { firstQueryCache.set(cacheKey, false); } }; }; useImperativeHandle(ref, function () { return getEasyTableRef(); }); var onSetPaginationStatus = function onSetPaginationStatus(status) { paginationStatusRef.current = status; }; var onSetBaseColumns = function onSetBaseColumns(base) { baseColumnsRef.current = base; }; var onSetColumns = function onSetColumns(columns) { columnsRef.current = columns; }; var onFormFinish = function onFormFinish() { if (loading) { console.log('loading...'); return; } var values = getFormFieldsValue(form, props.filterFormItemKeys); if (props.onFormFinish) { props.onFormFinish(_objectSpread2(_objectSpread2({}, values), getPaginationData(1, cacheParams[fieldNames.pageSize]))); } else { void onInnerRequest(_objectSpread2(_objectSpread2({}, values), getPaginationData(1, cacheParams[fieldNames.pageSize]))); } }; var isFull = isUndefined(props.isFull) ? true : props.isFull; var filterFixedFt = screenType === 'xs' ? false : props.filterFixed; var className = classNames('fba-easy-table', { 'fba-easy-table-full': isFull, 'fba-easy-table-filter-fixed': filterFixedFt, 'fba-easy-table-pagination-fixed': props.paginationFixed }, props.className); var paginationData = fbaHooks.useMemoCustom(function () { return _objectSpread2({ showSizeChanger: true, current: cacheParams[fieldNames.pageNo] || 1, pageSize: cacheParams[fieldNames.pageSize] || pageSize, total: total, showTotal: function showTotal(total) { return "\u5171 ".concat(total, " \u6761\u8BB0\u5F55"); } }, props.pagination); }, [fieldNames.pageNo, cacheParams, fieldNames.pageSize, cacheKey, pageSize, props.pagination, total]); var onChangeFoldColumnList = function onChangeFoldColumnList(keyList) { var _columnFoldConfig$onC; setShowFoldKeyList(keyList); columnFoldConfig === null || columnFoldConfig === void 0 || (_columnFoldConfig$onC = columnFoldConfig.onChange) === null || _columnFoldConfig$onC === void 0 || _columnFoldConfig$onC.call(columnFoldConfig, keyList); }; var onChange = useMemoizedFn(function (page, pageSize) { var _props$pagination, _props$pagination$onC; var params = _defineProperty(_defineProperty({}, fieldNames.pageSize, pageSize), fieldNames.pageNo, page); filterCache.set(cacheKey, params); void onInnerRequest(params); (_props$pagination = props.pagination) === null || _props$pagination === void 0 || (_props$pagination$onC = _props$pagination.onChange) === null || _props$pagination$onC === void 0 || _props$pagination$onC.call(_props$pagination, page, pageSize); }); var getPaginationStatus = function getPaginationStatus() { return props.paginationFixed || paginationStatusRef.current; }; // 分页参数发生变更 useUpdateEffect(function () { if (props.paginationFixed) { void onInnerRequest(_defineProperty(_defineProperty({}, fieldNames.pageSize, cacheParams[fieldNames.pageSize] || pageSize), fieldNames.pageNo, 1)); } else { void onInnerRequest(_defineProperty(_defineProperty({}, fieldNames.pageSize, undefined), fieldNames.pageNo, undefined)); } }, [props.paginationFixed]); var wrapperClassName = classNames('fba-easy-table-wrapper', { 'fba-easy-table-wrapper-inline': props.isInline }, props.className); var wrapperStyle = _objectSpread2({ overflowY: props.filterFixed || props.paginationFixed ? 'hidden' : 'auto' }, props.style); var children = typeof props.children === 'function' ? props.children(respOriginalDataRef.current) : props.children; var showCancelInitRequestTips = alreadyRequestFlag.current ? false : cancelInitAutoRequest || alwaysCancelInitAutoRequest; return /*#__PURE__*/jsx(EasyTableContext.Provider, { value: { onSetBaseColumns: onSetBaseColumns, onSetColumns: onSetColumns, getEasyTableRef: getEasyTableRef, cacheKey: cacheKey, onRequest: onInnerRequest, tableDataSource: dataSource, tableTotal: total, loading: loading, fieldNames: fieldNames, pageSize: pageSize, onSetPaginationStatus: onSetPaginationStatus, getPaginationStatus: getPaginationStatus, onFormFinish: onFormFinish, form: form, paginationFixed: props.paginationFixed || false, foldKeys: props.foldKeys || [], columns: dynamicColumns, initialValues: props.initialValues, filterFormItemKeys: props.filterFormItemKeys, showCancelInitRequestTips: showCancelInitRequestTips, dynamicColumnsConfig: { showFoldKeyList: showFoldKeyList, onChangeShowFoldKeyList: onChangeFoldColumnList, columnFoldConfig: columnFoldConfig, onOpenColumnFoldModal: onOpenColumnFoldModal, onCloseColumnFoldModal: onCloseColumnFoldModal, columnFoldOpen: columnFoldOpen, asyncColumnRequest: asyncColumnRequest } }, children: props.paginationFixed ? /*#__PURE__*/jsxs("div", { className: wrapperClassName, style: wrapperStyle, children: [/*#__PURE__*/jsx("div", { className: className, children: children }), total > 0 && /*#__PURE__*/jsx("div", { className: "fba-easy-table-pagination", children: /*#__PURE__*/jsx(PaginationWrapper, _objectSpread2(_objectSpread2({ size: "small" }, paginationData), {}, { onChange: onChange })) })] }) : /*#__PURE__*/jsx("div", { className: wrapperClassName, style: props.style, children: /*#__PURE__*/jsx("div", { className: className, children: children }) }) }); }); /** * 过滤条件 *``` * 1. 用法1 * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 } * <EasyTableFilter> * <FormItemWrapper name="field1" label="条件1">xxx</FormItemWrapper> * </EasyTableFilter> * * -- 自定义网格布局 使用 FormGrid.Col 组件包装 FormItemWrapper * <EasyTableFilter> * <FormGrid.Col span={12}><FormItemWrapper name="field1" label="条件1">xxx</FormItemWrapper></FormGrid.Col> * </EasyTableFilter> * * -- children 可为 function * <EasyTableFilter> * {(form) => { * return <FormItemWrapper name="field1" label="条件1">xxx</FormItemWrapper> * }} * </EasyTableFilter> * * 2. 用户2(自定义布局) * EasyTableFilter设置 isPure = true,FormItem无布局规则 * 3. EasyTableFilter中内置了 Form 标签,当children为函数时,可获取form实例 * 4. 默认布局下,可通过设置 filterOperate 设置操作按钮 * 5. Filter 子节点包含 hidden = true 会被忽略 * 6. 如果想隐藏【查询、重置】按钮中的某一个,可设置 queryButtonProps.hidden、resetButtonProps.hidden * 7. 通过设置 defaultResetButtonTriggerRequest,默认重启按钮触发请求,默认值:true * 8. EasyTableFilter 子节点可使用 FormItemWrapper,FormItemWrapper中可配置label宽度等 *``` */ var EasyTableFilter = function EasyTableFilter(props) { var _ctx$filterFormItemKe2; var screenType = fbaHooks.useResponsivePoint() || 'md'; var ctx = useContext(EasyTableContext); var inheritForm = Form.useFormInstance(); // 当条件输入有变化时,在查询按钮上添加一个小红点提示 var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), showQueryTips = _useState2[0], setShowQueryTips = _useState2[1]; // const [emptyText, setEmptyText] = useState<string>(''); var queryButtonProps = props.queryButtonProps, resetButtonProps = props.resetButtonProps, filterOperate = props.filterOperate, _props$formClassName = props.formClassName, formClassName = _props$formClassName === void 0 ? '' : _props$formClassName, defaultResetButtonTriggerRequest = props.defaultResetButtonTriggerRequest, filterWrapperStyle = props.filterWrapperStyle, filterWrapperClassName = props.filterWrapperClassName, rightOperateAreaAppendType = props.rightOperateAreaAppendType, easyFormProps = props.easyFormProps; var cacheKey = ctx.cacheKey, foldKeys = ctx.foldKeys, fieldNames = ctx.fieldNames, onRequest = ctx.onRequest, pageSize = ctx.pageSize, getPaginationStatus = ctx.getPaginationStatus, initialValues = ctx.initialValues, form = ctx.form, onFormFinish = ctx.onFormFinish; var children = typeof props.children === 'function' ? props.children(form) : props.children; var rightOperateAreaAppendTypeFt = rightOperateAreaAppendType || 'cover'; var childrens = useMemo(function () { if (isFragment(children)) { return Children.toArray(children.props.children); } else { return Children.toArray(children); } }, [children]); var _useState3 = useState(false), _useState4 = _slicedToArray(_useState3, 2), openFold = _useState4[0], setOpenFold = _useState4[1]; /** 是否支持回车事件 */ var supportEnterEvent = useMemo(function () { var _ctx$filterFormItemKe; if ((_ctx$filterFormItemKe = ctx.filterFormItemKeys) !== null && _ctx$filterFormItemKe !== void 0 && _ctx$filterFormItemKe.length || inheritForm) { return false; } return true; }, [(_ctx$filterFormItemKe2 = ctx.filterFormItemKeys) === null || _ctx$filterFormItemKe2 === void 0 ? void 0 : _ctx$filterFormItemKe2.length, inheritForm]); var onReset = useMemoizedFn(function () { return new Promise(function ($return, $error) { if (ctx.loading) { console.log('loading...'); return $return(); } setShowQueryTips(false); filterCache.remove(cacheKey); form.resetFields(); form.setFieldsValue(initialValues); if (isUndefined(defaultResetButtonTriggerRequest) || defaultResetButtonTriggerRequest) { return Promise.resolve(form.validateFields(ctx.filterFormItemKeys)).then(function ($await_2) { try { if (getPaginationStatus()) { onRequest(_objectSpread2(_defineProperty(_defineProperty({}, fieldNames.pageNo, 1), fieldNames.pageSize, pageSize), initialValues)); } else { onRequest(initialValues); } return $If_1.call(this); } catch ($boundEx) { return $error($boundEx); } }.bind(this), $error); } function $If_1() { return $return(); } return $If_1.call(this); }); }); var onFormFinishFn = useMemoizedFn(function () { return new Promise(function ($return, $error) { setShowQueryTips(false); onFormFinish === null || onFormFinish === void 0 || onFormFinish(); return $return(); }); }); var formRowChildren = useMemo(function () { var defaultRightList = [!(queryButtonProps !== null && queryButtonProps !== void 0 && queryButtonProps.hidden) ? /*#__PURE__*/jsx(ButtonWrapper, _objectSpread2(_objectSpread2({ type: "primary", htmlType: supportEnterEvent ? 'submit' : undefined, loadingPosition: "center", loading: ctx.loading, onClick: function onClick() { return new Promise(function ($return, $error) { var _ctx$filterFormItemKe3; // 当前EasyTable嵌套在Form内部时,EasyForm 的 onFinish={onFormFinish}配置将失效 if (inheritForm || (_ctx$filterFormItemKe3 = ctx.filterFormItemKeys) !== null && _ctx$filterFormItemKe3 !== void 0 && _ctx$filterFormItemKe3.length) { form.validateFields(ctx.filterFormItemKeys).then(function () { onFormFinishFn === null || onFormFinishFn === void 0 || onFormFinishFn(); }); } return $return(); }); } }, queryButtonProps), {}, { style: _objectSpread2(_objectSpread2({}, queryButtonProps === null || queryButtonProps === void 0 ? void 0 : queryButtonProps.style), {}, { cursor: ctx.loading ? 'not-allowed' : undefined }), children: showQueryTips ? /*#__PURE__*/jsx(Badge, { classNames: { root: 'query-button-badge' }, dot: true, style: { right: -3 }, children: (queryButtonProps === null || queryButtonProps === void 0 ? void 0 : queryButtonProps.text) || '查询' }) : (queryButtonProps === null || queryButtonProps === void 0 ? void 0 : queryButtonProps.text) || '查询' }), "1") : null, !(resetButtonProps !== null && resetButtonProps !== void 0 && resetButtonProps.hidden) ? /*#__PURE__*/jsx(ButtonWrapper, _objectSpread2(_objectSpread2({ onClick: onReset }, resetButtonProps), {}, { style: _objectSpread2(_objectSpread2({}, resetButtonProps === null || resetButtonProps === void 0 ? void 0 : resetButtonProps.style), {}, { cursor: ctx.loading ? 'not-allowed' : undefined }), children: (resetButtonProps === null || resetButtonProps === void 0 ? void 0 : resetButtonProps.text) || '重置' }), "2") : null].filter(Boolean); var customFormOperateCol = filterOperate === null || filterOperate === void 0 ? void 0 : filterOperate(form); var customRightList = customFormOperateCol === null || customFormOperateCol === void 0 ? void 0 : customFormOperateCol.rightList; var leftList = (customFormOperateCol === null || customFormOperateCol === void 0 ? void 0 : customFormOperateCol.leftList) || []; var rightList = defaultRightList; if (customRightList) { if (rightOperateAreaAppendTypeFt === 'afterAppend') { rightList = [].concat(_toConsumableArray(defaultRightList), _toConsumableArray(customRightList)); } else if (rightOperateAreaAppendTypeFt === 'beforeAppend') { rightList = [].concat(_toConsumableArray(customRightList), _toConsumableArray(defaultRightList)); } else { rightList = customRightList; } } if (foldKeys.length > 0) { var changeFolditem = /*#__PURE__*/jsx(ButtonWrapper, { type: "link", style: { padding: '0' }, onClick: function onClick() { setOpenFold(!openFold); }, children: openFold ? /*#__PURE__*/jsxs("span", { children: ["\u6536\u8D77", /*#__PURE__*/jsx(_UpOutlined, { style: { marginLeft: 3, fontSize: 12 } })] }) : /*#__PURE__*/jsxs("span", { children: ["\u5C55\u5F00", /*#__PURE__*/jsx(_DownOutlined, { style: { marginLeft: 3, fontSize: 12 } })] }) }, "fold-trigger"); if (rightList.length > 0 || leftList.length === 0) { rightList.push(changeFolditem); } else if ((leftList === null || leftList === void 0 ? void 0 : leftList.length) > 0) { leftList.push(changeFolditem); } } return childrens.map(function (item, index) { if (!openFold && foldKeys.find(function (keyItem) { return ".$".concat(keyItem) === item.key; })) return null; if (item.props['hidden']) return null; if (item.type['domTypeName'] === 'FormCol') return item; return /*#__PURE__*/jsx(FormGrid.Col, { children: item }, index); }).filter(Boolean).concat(/*#__PURE__*/jsx(FormGrid.OperateCol, _objectSpread2(_objectSpread2({}, customFormOperateCol), {}, { leftList: leftList, rightList: rightList }), 999)); }, [showQueryTips, queryButtonProps, supportEnterEvent, ctx.loading, ctx.filterFormItemKeys, resetButtonProps, onReset, filterOperate, form, foldKeys, childrens, inheritForm, onFormFinishFn, rightOperateAreaAppendTypeFt, openFold]); var labelAlign = screenType === 'xs' ? 'left' : (easyFormProps === null || easyFormProps === void 0 ? void 0 : easyFormProps.labelAlign) || 'right'; return /*#__PURE__*/jsx(BlockLayout, { className: classNames('easy-table-filter', filterWrapperClassName), style: filterWrapperStyle, children: /*#__PURE__*/jsx(EasyForm, _objectSpread2(_objectSpread2({ form: form, autoComplete: "off", onFinish: supportEnterEvent ? onFormFinishFn : undefined, className: formClassName, style: props.formStyle, isPure: true, labelWidth: "auto", formItemGap: "15" }, easyFormProps), {}, { onValuesChange: function onValuesChange(changedValues, allValues) { var _easyFormProps$onValu; setShowQueryTips(true); easyFormProps === null || easyFormProps === void 0 || (_easyFormProps$onValu = easyFormProps.onValuesChange) === null || _easyFormProps$onValu === void 0 || _easyFormProps$onValu.call(easyFormProps, changedValues, allValues); }, labelAlign: labelAlign, children: props.isPure ? children : /*#__PURE__*/jsx(FormGrid.Row, { gutter: [15, 0], gridSize: props.formGridSize, children: formRowChildren }) })) }); }; /** * 在 EasyTable子组件内才可使用 * @returns */ var useEasyTable = function useEasyTable() { var ctx = useContext(EasyTableContext); return ctx.getEasyTableRef(); }; var FoldOperate = function FoldOperate(props) { var _useState = useState(props.initSelectedRowKeys || []), _useState2 = _slicedToArray(_useState, 2), selectedRowKeys = _useState2[0], setSelectedRowKeys = _useState2[1]; var rowSelection = { type: 'checkbox', selectedRowKeys: selectedRowKeys, onChange: function onChange(selectedRowKeys) { setSelectedRowKeys(selectedRowKeys); props.onChange(selectedRowKeys); if (props.cacheKey) { columnFoldCache.set(props.cacheKey, selectedRowKeys); } } }; var columns = [{ title: '字段名称', dataIndex: 'title', render: function render(value, recrd) { return recrd['_isFoldTitle'] || value; } }, { title: '字段Key', dataIndex: 'dataIndex' }]; return /*#__PURE__*/jsx(Fragment, { children: /*#__PURE__*/jsx(Drawer, { title: "\u9009\u62E9\u5B57\u6BB5", open: props.open, onClose: props.onClose, width: '35%', styles: { body: { padding: 15 } }, children: /*#__PURE__*/jsx(Table, { bordered: true, size: "small", columns: columns, rowSelection: rowSelection, rowKey: "dataIndex", pagination: false, scroll: { x: 'max-content' }, dataSource: props.dataList }) }) }); }; var _excluded$1 = ["tipsWrapperProps", "title"]; var useColumnsAppendTips = function useColumnsAppendTips(props) { return useMemo(function () { var tempList = props.columns.map(function (item) { var tipsWrapperProps = item.tipsWrapperProps, title = item.title, otherProps = _objectWithoutProperties(item, _excluded$1); if (typeof title === 'string' && tipsWrapperProps) { if (typeof tipsWrapperProps === 'string') { return _objectSpread2(_objectSpread2({}, otherProps), {}, { title: /*#__PURE__*/jsx(TipsWrapper, { tipType: "popover", popoverProps: { content: tipsWrapperProps }, children: title }) }); } return _objectSpread2(_objectSpread2({}, otherProps), {}, { title: /*#__PURE__*/jsx(TipsWrapper, _objectSpread2(_objectSpread2({}, tipsWrapperProps), {}, { children: title })) }); } return item; }).filter(Boolean); return _toConsumableArray(tempList); }, [props.columns]); }; var useColumnsAppendInnerColumn = function useColumnsAppendInnerColumn(props) { var columnsNew = props.columns; return fbaHooks.useMemoCustom(function () { var _props$columnFoldConf; if ((_props$columnFoldConf = props.columnFoldConfig) !== null && _props$columnFoldConf !== void 0 && _props$columnFoldConf.hidden) return columnsNew; var finalItem = columnsNew[columnsNew.length - 1]; if (props.foldColumnList.length > 0 && columnsNew.length > 0) { var foldColumnTarget = columnsNew.find(function (item) { return item['_isFoldColumn']; }); if (foldColumnTarget && finalItem.dataIndex !== foldColumnTarget.dataIndex) { foldColumnTarget.title = foldColumnTarget['_isFoldTitle']; foldColumnTarget['_isFoldColumn'] = false; } if (!finalItem['_isFoldColumn']) { var _props$columnFoldConf2, _props$columnFoldConf3, _props$columnFoldConf4, _props$columnFoldConf5, _props$columnFoldConf6, _props$columnFoldConf7; finalItem['_isFoldTitle'] = finalItem['_isFoldTitle'] || finalItem.title; finalItem['_isFoldColumn'] = true; var triggerType = (_props$columnFoldConf2 = props.columnFoldConfig) === null || _props$columnFoldConf2 === void 0 ? void 0 : _props$columnFoldConf2.triggerType; finalItem.title = /*#__PURE__*/jsxs(FlexLayout, { direction: "horizontal", fullIndex: 0, style: { alignItems: 'center' }, children: [/*#__PURE__*/jsx("span", { children: finalItem.title }), /*#__PURE__*/jsx("div", { style: { padding: '0 5px 0 20px', display: 'flex' }, children: triggerType === 'drawer' ? /*#__PURE__*/jsx(IconWrapper, { onClick: props.onOpenColumnFoldModal, text: (_props$columnFoldConf3 = props.columnFoldConfig) === null || _props$columnFoldConf3 === void 0 ? void 0 : _props$columnFoldConf3.text, size: "small", icon: ((_props$columnFoldConf4 = props.columnFoldConfig) === null || _props$columnFoldConf4 === void 0 ? void 0 : _props$columnFoldConf4.icon) || /*#__PURE__*/jsx(SvgHttpView, { svgPath: "ionic/list-circle", color: "#868686" }), hoverTips: ((_props$columnFoldConf5 = props.columnFoldConfig) === null || _props$columnFoldConf5 === void 0 ? void 0 : _props$columnFoldConf5.hoverTipText) || '字段列表', style: { padding: 0, margin: 0 } }) : /*#__PURE__*/jsx(FoldOperateDropdown, { dataList: props.foldColumnList, onChange: props.onChangeFoldColumnList, cacheKey: props.cacheKey, initSelectedRowKeys: props.showFoldKeyList, children: /*#__PURE__*/jsx(IconWrapper, { text: (_props$columnFoldConf6 = props.columnFoldConfig) === null || _props$columnFoldConf6 === void 0 ? void 0 : _props$columnFoldConf6.text, style: { padding: 0, margin: 0 }, size: "small", icon: ((_props$columnFoldConf7 = props.columnFoldConfig) === null || _props$columnFoldConf7 === void 0 ? void 0 : _props$columnFoldConf7.icon) || /*#__PURE__*/jsx(SvgHttpView, { svgPath: "ionic/list-circle", color: "#868686" }) }) }) })] }); } } return columnsNew; }, [props.columns, props.columnFoldConfig]); }; var useColumnsToHidden = function useColumnsToHidden(props) { return useMemo(function () { var tempList = props.columns.map(function (item) { var hidden = item.hidden, isFold = item.isFold; if (hidden) return null; if (isFold && !props.showFoldKeyList.includes(item.dataIndex)) return null; return item; }).filter(Boolean); return _toConsumableArray(tempList); }, [props.columns, props.showFoldKeyList]); }; var useColumnByAsyncColumnRequest = function useColumnByAsyncColumnRequest(props) { return useMemo(function () { if (!Object.keys(props.asyncColumnRequestResult)) return props.columns; return props.columns.map(function (item) { var dataIndex = item.dataIndex; var result = props.asyncColumnRequestResult[dataIndex]; if (dataIndex && result) { if (result.loading) { item.render = function (value) { return /*#__PURE__*/jsx(ButtonWrapper, { loading: true, type: "text", loadingPosition: "center", removeGap: true, children: value }); }; } else if (item.asyncRender) { item.render = function (value, record, index) { var _item$asyncRender; return (_item$asyncRender = item.asyncRender) === null || _item$asyncRender === void 0 ? void 0 : _item$asyncRender.call(item, value, record, index, result.respData); }; } } return item; }); }, [props.columns, props.asyncColumnRequestResult]); }; var _excluded = ["children", "rowKey", "pagination", "isSync", "title", "actions"]; var TitleRender = function TitleRender(props) { var _props$actions; if (!props.title && !((_props$actions = props.actions) !== null && _props$actions !== void 0 && _props$actions.length)) { return null; } return /*#__PURE__*/jsxs(FlexLayout, { fullIndex: 0, direction: "horizontal", style: { marginBottom: 10, alignItems: 'center' }, children: [props.title ? /*#__PURE__*/jsx("div", { style: { fontWeight: 400, fontSize: 16 }, children: props.title }) : null, /*#__PURE__*/jsx(Space, { size: 10, children: props.actions })] }); }; /** * 表格渲染 * @param props * ``` * 1. 继承了 TableProps 可设置antd table功能 * 2. 分页功能已内置处理,不调用 onChange * ``` */ var EasyTableTable = function EasyTableTable(props) { var ctx = useContext(EasyTableContext); var children = props.children, rowKey = props.rowKey, pagination = props.pagination, isSync = props.isSync, title = props.title, actions = props.actions, otherProps = _objectWithoutProperties(props, _excluded); var screenType = fbaHooks.useResponsivePoint() || ''; var asyncColumnRequestResultRef = useRef({}); var _useState = useState({}), _useState2 = _slicedToArray(_useState, 2), asyncColumnRequestResult = _useState2[0], setAsyncColumnRequestResult = _useState2[1]; var _ctx$dynamicColumnsCo = ctx.dynamicColumnsConfig, columnFoldConfig = _ctx$dynamicColumnsCo.columnFoldConfig, onCloseColumnFoldModal = _ctx$dynamicColumnsCo.onCloseColumnFoldModal, columnFoldOpen = _ctx$dynamicColumnsCo.columnFoldOpen, onOpenColumnFoldModal = _ctx$dynamicColumnsCo.onOpenColumnFoldModal, asyncColumnRequest = _ctx$dynamicColumnsCo.asyncColumnRequest, showFoldKeyList = _ctx$dynamicColumnsCo.showFoldKeyList, onChangeShowFoldKeyList = _ctx$dynamicColumnsCo.onChangeShowFoldKeyList; var cacheKey = ctx.cacheKey, fieldNames = ctx.fieldNames, onRequest = ctx.onRequest, tableDataSource = ctx.tableDataSource, pageSize = ctx.pageSize, tableTotal = ctx.tableTotal, loading = ctx.loading, paginationFixed = ctx.paginationFixed, onSetPaginationStatus = ctx.onSetPaginationStatus; var cacheParams = filterCache.get(cacheKey); fbaHooks.useEffectCustom(function () { /** 获取初始化 columns 数据 */ ctx.onSetBaseColumns(props.columns || []); }, []); useEffect(function () { if (asyncColumnRequest !== null && asyncColumnRequest !== void 0 && asyncColumnRequest.length) { var _loop = function _loop() { var element = asyncColumnRequest[index]; asyncColumnRequestResultRef.current = _objectSpread2(_objectSpread2({}, asyncColumnRequestResultRef.current), {}, _defineProperty({}, element.dataIndex, { loading: true })); setAsyncColumnRequestResult(asyncColumnRequestResultRef.current); element.onRequest().then(function (respData) { asyncColumnRequestResultRef.current = _objectSpread2(_objectSpread2({}, asyncColumnRequestResultRef.current), {}, _defineProperty({}, element.dataIndex, { loading: false, respData: respData })); setAsyncColumnRequestResult(asyncColumnRequestResultRef.current); }).catch(function (error) { console.error(error === null || error === void 0 ? void 0 : error.message); asyncColumnRequestResultRef.current = _objectSpread2(_objectSpread2({}, asyncColumnRequestResultRef.current), {}, _defineProperty({}, element.dataIndex, { loading: false })); setAsyncColumnRequestResult(asyncColumnRequestResultRef.current); }); }; for (var index = 0; index < asyncColumnRequest.length; index++) { _loop(); } } }, [asyncColumnRequest]); var columnsOriginal = fbaHooks.useMemoCustom(function () { if (ctx.columns) { ctx.onSetColumns(ctx.columns); return ctx.columns; } else { ctx.onSetColumns(props.columns); return props.columns; } }, [ctx.columns, props.columns]); var columnsNew = useColumnsAppendTips({ columns: _toConsumableArray(columnsOriginal) }); var foldColumnList = columnsOriginal.filter(function (item) { return !item.hidden && item.isFold && item.dataIndex; }); columnsNew = useColumnsAppendInnerColumn({ cacheKey: cacheKey, columns: columnsNew,