UNPKG

@flatbiz/antd

Version:
1,271 lines (1,257 loc) 51.7 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-Dfbczn1S.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-BYm17lo8.js'; import { sessionStorageCache, localStorageCache, noop, getUuid, isUndefinedOrNull, isMacEnv } 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 { hooks } from '@wove/react/hooks'; import { isString } from '@dimjs/lang/is-string'; import { createContext, useState, Fragment, forwardRef, useMemo, useRef, useImperativeHandle, cloneElement, useContext, Children, useEffect } from 'react'; import { Checkbox, Popover, Form, message, Drawer, Table } from 'antd'; import { fbaHooks } from '../fba-hooks/index.js'; import { P as PaginationWrapper } from '../pagination-BNbiyV-n.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-OPf8eBBY.js'; import { B as ButtonWrapper } from '../button-wrapper-l9FUsrWl.js'; import { E as EasyForm } from '../form-wa_Ck4Vl.js'; import { FormGrid } from '../form-grid/index.js'; import { T as TableScrollbar } from '../table-scrollbar-CBqQ4pYQ.js'; import { F as FlexLayout } from '../flex-layout-BaDncU_Z.js'; import { I as IconWrapper } from '../icon-wrapper-HJ2r5GeZ.js'; import { S as SvgHttpView } from '../svg-DXIM5sfc.js'; import { T as TableTitleTooltip } from '../title-render-DGYUo6yV.js'; import { T as TipsWrapper } from '../tips-wrapper-Bf9nfZq3.js'; import '@dimjs/model'; import '../use-responsive-point-Bp3D3lZT.js'; import '@ant-design/icons/es/icons/LoadingOutlined.js'; import '@dimjs/lang/is-promise'; import '../config-provider-wrapper-DDa_64Ce.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 'ahooks'; import '../form-wrapper-DSnBmyFu.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\uFF08\u5B57\u6BB5\u5217\u8868\uFF09" }), placement: "bottomRight", overlayClassName: "fold-operate-popiver", children: props.children }); }; var EasyTable$1 = /*#__PURE__*/forwardRef(function (props, ref) { var _props$initialPaginat; 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 _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; } } if (props.cacheSwitch === true) { return location.pathname; } if (typeof props.cacheSwitch === 'string') { return props.cacheSwitch; } return getUuid(); }, [props.cacheSwitch, 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) || []; } }), _useState10 = _slicedToArray(_useState9, 2), showFoldKeyList = _useState10[0], setShowFoldKeyList = _useState10[1]; var pageSize = props.pageSize || ((_props$initialPaginat = props.initialPaginationParams) === null || _props$initialPaginat === void 0 ? void 0 : _props$initialPaginat.pageSize) || 10; var initRequest = props.initRequest === undefined ? true : props.initRequest; var paginationStatusRef = useRef(false); var respOriginalDataRef = useRef(); var baseColumnsRef = useRef([]); var _useState11 = useState(), _useState12 = _slicedToArray(_useState11, 2), dynamicColumns = _useState12[0], setDynamicColumns = _useState12[1]; var columnsRef = useRef([]); var fieldNames = _objectSpread2({ list: 'list', total: 'total', pageNo: 'pageNo', pageSize: 'pageSize' }, props.fieldNames); var _Form$useForm = Form.useForm(props.form), _Form$useForm2 = _slicedToArray(_Form$useForm, 1), form = _Form$useForm2[0]; var onInnerRequest = hooks.useCallbackRef(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.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); setLoading(true); paramsAll = filterCache.set(cacheKey, params); _props$serviceConfig = props.serviceConfig, requestParamsAdapter = _props$serviceConfig.requestParamsAdapter, onRequest = _props$serviceConfig.onRequest, requestResultAdapter = _props$serviceConfig.requestResultAdapter, dynamicColumsAdapter = _props$serviceConfig.dynamicColumsAdapter; paramsNew = requestParamsAdapter ? requestParamsAdapter(paramsAll) : paramsAll; return Promise.resolve(onRequest(fbaUtils.removeFormValuesInvalidField(paramsNew))).then(function ($await_6) { try { respData = $await_6 || {}; 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); form.setFieldsValue(_objectSpread2(_objectSpread2({}, props.initialValues), cacheParams)); if (initRequest || !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 = hooks.useCallbackRef(function (values) { filterCache.remove(cacheKey); form.resetFields(); if (values) { filterCache.set(cacheKey, values); form.setFieldsValue(values); } }); var updateQueryCondition = hooks.useCallbackRef(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 = hooks.useCallbackRef(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 = hooks.useCallbackRef(function () { return _objectSpread2(_objectSpread2({}, cacheParams), form.getFieldsValue()); }); var onOpenColumnFoldModal = hooks.useCallbackRef(function () { setColumnFoldOpen(true); }); var onCloseColumnFoldModal = hooks.useCallbackRef(function () { setColumnFoldOpen(false); }); var getEasyTableRef = function getEasyTableRef() { return { /** * 参数 * 1. 不用添加已存在的搜索条件 * 2. 此处可重新 */ onRequest: onInnerRequest, clearQueryCondition: clearQueryCondition, updateQueryCondition: updateQueryCondition, getRequestParams: getRequestParams, onResetRequest: onResetRequest, form: form, dataSource: respOriginalDataRef.current, getDataSource: function getDataSource() { return respOriginalDataRef.current; }, onFilterDataSource: function onFilterDataSource(filterDataSource) { setDataSource(filterDataSource); }, 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() { var values = form.getFieldsValue(); 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 = hooks.useCallbackRef(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; }; // 分页参数发生变更 hooks.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; 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, 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 screenType = fbaHooks.useResponsivePoint() || 'md'; var ctx = useContext(EasyTableContext); 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 _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), openFold = _useState2[0], setOpenFold = _useState2[1]; var onReset = hooks.useCallbackRef(function () { return new Promise(function ($return, $error) { filterCache.remove(cacheKey); form.resetFields(); form.setFieldsValue(initialValues); if (isUndefined(defaultResetButtonTriggerRequest) || defaultResetButtonTriggerRequest) { return Promise.resolve(form.validateFields()).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 formRowChildren = useMemo(function () { var defaultRightList = [!(queryButtonProps !== null && queryButtonProps !== void 0 && queryButtonProps.hidden) ? /*#__PURE__*/jsx(ButtonWrapper, _objectSpread2(_objectSpread2({ type: "primary", htmlType: "submit" }, queryButtonProps), {}, { children: (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), {}, { 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)); }, [childrens, filterOperate, foldKeys, form, onReset, openFold, queryButtonProps, resetButtonProps, rightOperateAreaAppendTypeFt]); 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: onFormFinish // initialValues={initialValues} , className: formClassName, style: props.formStyle, isPure: true, labelWidth: "80", formItemGap: "15" }, easyFormProps), {}, { 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(); }; /** * @deprecated 已过时 @4.5.0版本移除,请使用 useEasyTable * @returns */ var useEasyTablRef = function useEasyTablRef() { var ctx = useContext(EasyTableContext); return { current: 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 = ["tooltip", "tipsWrapperProps", "title"]; var useColumnsAppendTips = function useColumnsAppendTips(props) { return useMemo(function () { var tempList = props.columns.map(function (item) { var tooltip = item.tooltip, 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 })) }); } if (typeof title === 'string' && !!tooltip) { return _objectSpread2(_objectSpread2({}, otherProps), {}, { title: /*#__PURE__*/jsx(TableTitleTooltip, { tooltip: tooltip, title: 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"]; /** * 表格渲染 * @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, 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, foldColumnList: foldColumnList, showFoldKeyList: showFoldKeyList, columnFoldConfig: columnFoldConfig, onOpenColumnFoldModal: onOpenColumnFoldModal, onChangeFoldColumnList: onChangeShowFoldKeyList }); columnsNew = useColumnsToHidden({ columns: columnsNew, showFoldKeyList: showFoldKeyList }); columnsNew = useColumnByAsyncColumnRequest({ columns: columnsNew, asyncColumnRequestResult: asyncColumnRequestResult }); fbaHooks.useEffectCustom(function () { onSetPaginationStatus(pagination !== false); }, [pagination]); // 分页参数发生变更 hooks.useUpdateEffect(function () { if (!paginationFixed) { if (pagination !== false) { onRequest(_defineProperty(_defineProperty({}, fieldNames.pageSize, cacheParams[fieldNames.pageSize] || pageSize), fieldNames.pageNo, 1)); } else { onRequest(_defineProperty(_defineProperty({}, fieldNames.pageSize, undefined), fieldNames.pageNo, undefined)); } } }, [pagination]); var tablePaginationData = useMemo(function () { if (paginationFixed || pagination === false) return false; return _objectSpread2({ showSizeChanger: true, current: cacheParams[fieldNames.pageNo] || 1, pageSize: cacheParams[fieldNames.pageSize] || pageSize, total: tableTotal, showTotal: function showTotal(total) { return "\u5171 ".concat(total, " \u6761\u8BB0\u5F55"); } }, props.pagination); }, [cacheParams, fieldNames.pageNo, fieldNames.pageSize, pageSize, pagination, paginationFixed, props.pagination, tableTotal]); var onChangePage = function onChangePage(pagination, filters, sorter, extra) { if (extra.action === 'paginate' && tablePaginationData) { onRequest(_defineProperty(_defineProperty({}, fieldNames.pageSize, pagination.pageSize), fieldNames.pageNo, pagination.current)); } else { var _props$onChange; (_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call(props, pagination, filters, sorter, extra); } }; var dataSource = useMemo(function () { if (!tableDataSource) return undefined; if (tableDataSource.length === 0) { return []; } if (typeof rowKey === 'string' && isUndefinedOrNull(tableDataSource[0][rowKey])) { return tableDataSource.map(function (item) { item[rowKey] = getUuid(); return item; }); } return tableDataSource; }, [tableDataSource, rowKey]); columnsNew = useMemo(function () { return columnsNew.map(function (item) { if (!!item.fixed && screenType === 'xs') { item.fixed = undefined; } if (!!item.defaultValue && !item.render) { item.render = function (value) { return isUndefinedOrNull(value) || value == '' ? item.defaultValue : value; }; } return item; }); }, [columnsNew, screenType]); var tableRender = function tableRender() { if (isSync && !dataSource) { return /*#__PURE__*/jsxs(Fragment, { children: [children, /*#__PURE__*/jsx(Table, { size: "small", scroll: { x: 'max-content' }, bordered: true, rowKey: rowKey, columns: columnsNew, loading: loading }, "1")] }); } if (isMacEnv()) { return /*#__PURE__*/jsxs(Fragment, { children: [children, /*#__PURE__*/jsx(Table, _objectSpread2(_objectSpread2({ size: "small", scroll: { x: 'max-content' }, bordered: true }, otherProps), {}, { columns: columnsNew, pagination: tablePaginationData, rowKey: rowKey, onChange: onChangePage, loading: loading, dataSource: dataSource }), "2")] }); } return /*#__PURE__*/jsxs(Fragment, { children: [children, /*#__PURE__*/jsx(TableScrollbar, { children: /*#__PURE__*/jsx(Table, _objectSpread2(_objectSpread2({ size: "small", scroll: { x: 'max-content' }, bordered: true }, otherProps), {}, { columns: columnsNew, pagination: tablePaginationData, rowKey: rowKey, onChange: onChangePage, loading: loading, dataSource: dataSource }), "3") })] }); }; return /*#__PURE__*/jsxs(BlockLayout, { className: classNames('easy-table-table', { 'ett-empty-show-small': props.emptyShowSize === 'small' }, props.tableWrapperClassName), style: props.tableWrapperStyle, children: [tableRender(), /*#__PURE__*/jsx(FoldOperate, { dataList: foldColumnList, onClose: onCloseColumnFoldModal, open: columnFoldOpen, onChange: onChangeShowFoldKeyList, cacheKey: cacheKey, initSelectedRowKeys: showFoldKeyList })] }); }; /** * 对 查询条件+表格数据 进行深度封装,内置数据交互处理 * ``` * Demo https://fex.qa.tcshuke.com/docs/admin/main/crud/easy-table * * 1. 废弃modelKey参数 * 2. 如果需要在路由跳转回退中缓存查询条件,设置cacheSwitch=true;如果存在多个EasyTable缓存情况可设置cacheSwitch为自定义字符串 * 3. 需要获取查询条件、主动发起请求等可通过ref、useEasyTable操作 * 4. 可通过属性 initRequest 设置初始化是否请求数据 * 5. 可通过属性 fieldNames 来设置自定义变量,默认值为:list、total、pageNo、pageSize * 6. isFull=true,设置【在父节点高度下,上下铺满】(默认值:true) * 7. filterFixed=true,设置查询条件固定,不随滚动条滚动 * 8. paginationFixed=true,可设置分页条件在底部固定,不随滚动条滚动 * 9. foldKeys=string[],查询条件展开、收起,被收起数组内容为EasyTable.Filter 子节点key值 * 10. windows环境下,会在EasyTable.Table外部包装一下 TableScrollbar,提高windows下table左右滚动体验 * 11. 可实现部分字段折叠,手动选择显示,将EasyTable.Table columns中isFold属性设为true,可通过EasyTable columnFoldConfig配置属性,demo(https://fex.qa.tcshuke.com/docs/admin/main/crud/demo1) * 12. 通过asyncColumnRequest、asyncRender配合使用可实现表格列数据接口渲染(demo:https://fex.qa.tcshuke.com/docs/admin/main/crud/easy-table) * ``` */ var EasyTable = fbaUtils.attachPropertiesToComponent(EasyTable$1, { /** * 过滤条件 *``` * 1. 用法1 * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 } * <EasyTable.Filter> * <FormItemWrapper name="field1" label="条件1">xxx</FormItemWrapper> * </EasyTable.Filter> * * -- 自定义网格布局 使用 FormGrid.Col 组件包装 FormItemWrapper * <EasyTable.Filter> * <FormGrid.Col span={12}><FormItemWrapper name="field1" label="条件1">xxx</FormItemWrapper></FormGrid.Col> * </EasyTable.Filter> * * -- children 可为 function * <EasyTable.Filter> * {(form) => { * return <FormItemWrapper name="field1" label="条件1">xxx</FormItemWrapper> * }} * </EasyTable.Filter> * 2. 用户2(自定义布局) * EasyTable.Filter设置 isPure = true,FormItem无布局规则 * 3. EasyTable.Filter中内置了 Form 标签,当children为函数时,可获取form实例 * 4. 默认布局下,可通过设置 filterOperate 设置操作按钮 * 5. Filter 子节点包含 hidden = true 会被忽略 * 6. 如果想隐藏【查询、重置】按钮中的某一个,可设置 queryButtonProps.hidden、resetButtonProps.hidden * 7. EasyTableFilter 子节点可使用 FormItemWrapper,FormItemWrapper中可配置label宽度等 * 8. 通过easyFormProps属性可整体控制子节点FormItem布局 *``` */ Filter: EasyTableFilter, /** * 表格渲染 * @param props * ``` * 1. 继承了 TableProps 可设置antd table功能 * 2. 分页功能已内置处理,不调用 onChange * ``` */ Table: EasyTableTable, /** * @deprecated 已过时 4.3.0版本移除,请使用 useEasyTable */ useEasyTablRef: useEasyTablRef, /** 在 EasyTable子组件内才可使用 *