Commit 15d518e0 authored by XieZhiXiong's avatar XieZhiXiong

Merge branch 'fix-v2-220518-order' into 'v2-220518'

fix: 修复分页之后点击确认无法拿到上一页填写的数据问题;修复默认不展开的问题 See merge request linkseeks-design/pro-platform!671
parents 3baa4dcc 5740aa3b
......@@ -35,6 +35,7 @@ const NormalTable: React.ForwardRefRenderFunction<NormalTableRefHandleType, Norm
onPaginationChange,
full,
renderFootContent,
beforePaginationChange,
...restProps
} = props;
......@@ -99,7 +100,11 @@ const NormalTable: React.ForwardRefRenderFunction<NormalTableRefHandleType, Norm
}
}, [props.dataSource]);
const handlePaginationChange = (page: number, size: number) => {
const handlePaginationChange = async (page: number, size: number) => {
if (beforePaginationChange) {
const flag = await beforePaginationChange?.(page, size);
if (!flag) return;
}
// 内部自己维护 page、size
if (!('current' in pagination)) {
setCurrent(page);
......
......@@ -87,6 +87,10 @@ export interface NormalTableProps<T> extends Omit<TableProps<T>, 'pagination'> {
* 渲染底部内容
*/
renderFootContent?: () => React.ReactNode,
/**
* 分页器改变触发的钩子,若返回 false 则停止触发请求
*/
beforePaginationChange?: (nextPage: number, nextSize: number) => boolean | Promise<boolean>,
}
export interface EditableCellProps {
......
......@@ -96,6 +96,11 @@ type MaterialsListItem = Omit<GetContractManagePagePurchaseMaterielListResponseD
children: RequisitionListItem[],
}
export type FetchReponseType = {
data: MaterialsListItem[],
totalCount: number,
}
const normalizeMaterialsList = (dataSource: GetContractManagePagePurchaseMaterielListResponseDetail[]): MaterialsListItem[] => {
const ret: MaterialsListItem[] = [];
dataSource.forEach(({ requisitionList, ...rest }) => {
......@@ -123,10 +128,14 @@ const OrderMaterialsDrawer: React.ForwardRefRenderFunction<OrderMaterialsDrawerR
const [checkedKeysState, setCheckedKeysState] = useState([]);
const [halfCheckedState, setHalfCheckedState] = useState([]);
const [expandedRowKeys, setExpandedRowKeys] = useState([]);
const polymericRef = useRef<NormalTableRefHandleType | null>(null);
const keyEntities = useRef<any>({});
const requisitionListValue = useRef<OrderMaterialsSubmitValue['materials']['requisitionList']>({});
const [form] = Form.useForm();
const intl = useIntl();
......@@ -185,6 +194,7 @@ const OrderMaterialsDrawer: React.ForwardRefRenderFunction<OrderMaterialsDrawerR
...keyEntities.current,
...convertDataToEntities(dataSource).keyEntities,
};
setExpandedRowKeys(dataSource.map((item) => item.key));
return {
data: dataSource,
totalCount: res.data.totalCount,
......@@ -222,7 +232,7 @@ const OrderMaterialsDrawer: React.ForwardRefRenderFunction<OrderMaterialsDrawerR
const { levelMap, maxLevel } = getLevelEntities(keyEntities.current);
if (selected) {
const keys = [...checkedKeysState, ...selectedRows.map((item) => item.key)];
const keys = [...checkedKeysState, ...selectedRows.filter(Boolean).map((item) => item.key)];
const { halfCheckedKeys, checkedKeys } = fillConductCheck(keys, levelMap, maxLevel);
setCheckedKeysState(checkedKeys);
setHalfCheckedState(halfCheckedKeys);
......@@ -323,7 +333,8 @@ const OrderMaterialsDrawer: React.ForwardRefRenderFunction<OrderMaterialsDrawerR
const { materials } = res;
const ret: OrderMaterialsConfirmValue = [];
const checkedKeys = Object.keys(materials.requisitionList);
// const checkedKeys = Object.keys(materials.requisitionList);
const checkedKeys = Object.keys(requisitionListValue.current);
for (let i = 0; i < checkedKeys.length; i++) {
const checked = checkedKeys[i];
const { parentNode } = keyEntities.current[checked];
......@@ -338,7 +349,8 @@ const OrderMaterialsDrawer: React.ForwardRefRenderFunction<OrderMaterialsDrawerR
...restParent,
requisitionList: children.map((item) => ({
...item,
orderQuantity: +materials.requisitionList[checked],
// orderQuantity: +materials.requisitionList[checked],
orderQuantity: +requisitionListValue.current[checked],
})),
};
ret.push(material);
......@@ -350,7 +362,8 @@ const OrderMaterialsDrawer: React.ForwardRefRenderFunction<OrderMaterialsDrawerR
...(ret[index]).requisitionList,
...children.map((item) => ({
...item,
orderQuantity: +materials.requisitionList[checked],
// orderQuantity: +materials.requisitionList[checked],
orderQuantity: +requisitionListValue.current[checked],
})),
],
}));
......@@ -377,6 +390,23 @@ const OrderMaterialsDrawer: React.ForwardRefRenderFunction<OrderMaterialsDrawerR
// });
};
const handleBeforePaginationChange = async () => {
try {
await form.validateFields()
return true;
} catch (error) {
return false;
}
};
const handleFormValuesChange = (_, allValues: OrderMaterialsSubmitValue) => {
const { materials } = allValues;
requisitionListValue.current = {
...requisitionListValue.current,
...(materials.requisitionList || {}),
};
};
useImperativeHandle(ref, () => ({
deleteItem: handleDelete,
}));
......@@ -415,7 +445,7 @@ const OrderMaterialsDrawer: React.ForwardRefRenderFunction<OrderMaterialsDrawerR
onSelect: handleSelectRow,
onSelectAll: handlehandleSelectAll,
}}
defaultPageSize={20}
defaultPageSize={10}
expandable={isPurchaseOrderContract ? {
expandedRowRender,
expandIcon: ({ expanded, onExpand, record }) => (
......@@ -426,7 +456,7 @@ const OrderMaterialsDrawer: React.ForwardRefRenderFunction<OrderMaterialsDrawerR
)
),
childrenColumnName: 'xx', // 默认是 children,与 dataSource数据中 冲突,随便改了名称,否则不能正常展开
defaultExpandAllRows: true, // 无效,我giao
expandedRowKeys,
} : undefined}
searchFormProps={{
schema: querySchema,
......@@ -442,12 +472,12 @@ const OrderMaterialsDrawer: React.ForwardRefRenderFunction<OrderMaterialsDrawerR
ref={polymericRef}
components={{
table: ({ children }) => (
<Form form={form}>
<Form form={form} onValuesChange={handleFormValuesChange}>
<table>{children}</table>
</Form>
),
}}
defaultExpandAllRows
beforePaginationChange={handleBeforePaginationChange}
full
/>
</Drawer>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment