You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

122 lines
4.9 KiB

import { jsx as _jsx } from "react/jsx-runtime";
import { urlCacheData } from '@component/app';
import { ProTable } from '@ant-design/pro-components';
import { isEmpty, map, zipObject, fill, keys } from 'lodash';
import { useUpdate } from 'ahooks';
import useUrl0State from '@ahooksjs/use-url-state';
import { useImperativeHandle, useRef } from 'react';
import { useLocation, useNavigate } from 'react-router-dom';
import { parse, stringify } from 'query-string';
export function CustomProTable(props) {
var _a, _b, _c;
const navigate = useNavigate();
const location = useLocation();
const { onChangeTab, activeKeyParams, onReset, onSubmit, initialValue } = props;
const resetRef = useRef(false);
const formRef = useRef();
const actionRef = useRef();
const update = useUpdate();
const activeKey = (_b = (_a = props === null || props === void 0 ? void 0 : props.toolbar) === null || _a === void 0 ? void 0 : _a.tabs) === null || _b === void 0 ? void 0 : _b.activeKey;
function onChange(activeKey) {
var _a, _b;
const params = (_a = formRef.current) === null || _a === void 0 ? void 0 : _a.getFieldsValue();
setTimeout(onChangeTab, 0, activeKey);
actionRef.current.reset();
(_b = formRef.current) === null || _b === void 0 ? void 0 : _b.setFieldsValue(zipObject(keys(params), fill(keys(params), undefined)));
}
if (onChangeTab && !isEmpty((_c = props.toolbar) === null || _c === void 0 ? void 0 : _c.tabs)) {
props.toolbar.tabs.onChange = onChange;
}
function getTransformKeys(values) {
var _a;
if (isEmpty(props === null || props === void 0 ? void 0 : props.columns)) {
return {};
}
let data = {};
for (let item of props === null || props === void 0 ? void 0 : props.columns) {
if (item.valueType === 'dateRange' && item.search) {
const keys = Object.keys((_a = item.search) === null || _a === void 0 ? void 0 : _a.transform([]));
if (isEmpty(item.initialValue)) {
data[item.dataIndex] = map(keys, (item) => values[item]);
}
else {
data[item.dataIndex] = item.initialValue;
}
}
}
return data;
}
function request(params, sort, filter) {
return props.request(Object.assign(params, activeKeyParams), sort, filter);
}
useImperativeHandle(props.formRef, () => {
return formRef.current;
});
useImperativeHandle(props.actionRef, () => {
return actionRef.current;
});
function handleReset() {
var _a;
onReset && onReset();
resetRef.current = true;
navigate({
hash: location.hash,
search: activeKey ? stringify({ activeKey }) : '?',
}, {
replace: true,
});
const params = (_a = formRef.current) === null || _a === void 0 ? void 0 : _a.getFieldsValue();
update();
setTimeout(() => {
var _a;
actionRef.current.reset();
(_a = formRef.current) === null || _a === void 0 ? void 0 : _a.setFieldsValue(Object.assign(Object.assign({}, zipObject(keys(params), fill(keys(params), undefined))), initialValue));
});
}
function handleSubmit() {
resetRef.current = false;
onSubmit && onSubmit();
}
return (_jsx(ProTable, Object.assign({ onSubmit: handleSubmit, search: {
span: 8,
className: 'proTableSearch',
labelWidth: 80,
defaultCollapsed: false,
collapseRender: () => null,
cardProps: {},
}, cardProps: {
bodyStyle: {
padding: '0 16px 16px',
},
}, toolbar: {
title: _jsx("span", { children: "\u67E5\u8BE2\u7ED3\u679C" }),
}, tableClassName: "tableClassName", options: false, pagination: {
pageSize: 10,
showSizeChanger: false,
}, "columnEmptyText:false": true, scroll: {
x: 'max-content',
}, form: {
syncToUrl: (values, type) => {
if (resetRef.current) {
if (!activeKey) {
return {};
}
urlCacheData.set(location.pathname, { activeKey });
resetRef.current = false;
return {
activeKey,
};
}
if (activeKey) {
values.activeKey = activeKey;
}
if (type === 'get') {
return Object.assign(Object.assign({}, values), getTransformKeys(values));
}
if (type === 'set') {
urlCacheData.set(location.pathname, values);
}
return values;
},
} }, props, { onReset: handleReset, formRef: formRef, actionRef: actionRef, request: request })));
}