fix: 修改录单的维修赔偿级联点击能显示名称,修改级联组价查看显示标题 (#958)

Reviewed-on: daoyoucloud/tachybase#958
Reviewed-by: sealday <zhanglin@daoyoucloud.com>
Co-authored-by: wjh <wwwjh0710@163.com>
Co-committed-by: wjh <wwwjh0710@163.com>
This commit is contained in:
wjh 2024-05-09 23:02:57 +08:00 committed by sealday
parent 12a2f7c1bb
commit 2b0e1fa573
4 changed files with 55 additions and 17 deletions

View File

@ -32,7 +32,7 @@ export const AssociationFieldProvider = observer(
const currentMode = useMemo( const currentMode = useMemo(
() => () =>
fieldSchema['x-component-props']?.mode || fieldSchema['x-component-props']?.mode ||
(isTreeCollection ? 'Cascader' : isFileCollection ? 'FileManager' : 'Select'), (isFileCollection ? 'FileManager' : isTreeCollection ? 'Cascader' : 'Select'),
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
[fieldSchema['x-component-props']?.mode], [fieldSchema['x-component-props']?.mode],
); );

View File

@ -15,7 +15,7 @@ import { Input, Space } from 'antd';
import React, { useEffect, useMemo, useState } from 'react'; import React, { useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { CustomCascader, SchemaComponent } from '../..'; import { CustomCascader, SchemaComponent } from '../..';
import { css, useAPIClient } from '../../..'; import { css, useAPIClient, useCollection, useRequest } from '../../..';
import { mergeFilter } from '../../../filter-provider/utils'; import { mergeFilter } from '../../../filter-provider/utils';
import useServiceOptions, { useAssociationFieldContext } from './hooks'; import useServiceOptions, { useAssociationFieldContext } from './hooks';
@ -43,22 +43,47 @@ const Cascade = connect((props) => {
const field: any = useField(); const field: any = useField();
const [selectedOptions, setSelectedOptions] = useState([]); const [selectedOptions, setSelectedOptions] = useState([]);
const [chang, setChang] = useState(false); const [chang, setChang] = useState(false);
const [dataList, setDataList] = useState({});
useEffect(() => { useEffect(() => {
const propsValue = props.value || fieldSchema['x-component-props'].value; const propsValue = props.value || fieldSchema['x-component-props'].value;
if (!chang) { if (!chang && propsValue) {
const values = Array.isArray(propsValue) if (!propsValue.parent && !Object.keys(dataList).length) {
? extractLastNonNullValueObjects( resource
propsValue?.filter((v) => v.value), .list({
true, pageSize: 9999,
) filter: { id: { $eq: propsValue.id } },
: transformNestedData(propsValue); sort,
const defaultData = values?.map?.((v) => { tree: true,
return v.id; })
}); .then((res) => {
setSelectedOptions(defaultData); setDataList(res.data?.data[0]);
onDropdownVisibleChange(true); })
.catch(() => {});
} else {
const values = [];
if (!propsValue.parent && Object.keys(dataList).length) {
const defValue = transformChildrenData(dataList, [], propsValue.id);
values.push(...defValue);
} else {
const defValue = Array.isArray(propsValue)
? extractLastNonNullValueObjects(
propsValue?.filter((v) => v.value),
true,
)
: transformNestedData(propsValue);
values.push(...defValue);
}
const defaultData = values?.map?.((v) => {
return v.id;
});
onDropdownVisibleChange(true);
setSelectedOptions(defaultData);
}
} }
}, [fieldSchema['x-component-props'].value, fieldSchema['x-component-props']?.changOnSelect]); }, [fieldSchema['x-component-props'].value, fieldSchema['x-component-props']?.changOnSelect, dataList]);
useEffect(() => {
onDropdownVisibleChange(true);
}, [fieldFilter]);
const handleGetOptions = async () => { const handleGetOptions = async () => {
const response = await resource.list({ const response = await resource.list({
pageSize: 9999, pageSize: 9999,
@ -328,3 +353,14 @@ export function transformNestedData(inputData) {
} }
return resultArray; return resultArray;
} }
export const transformChildrenData = (inputData, result, itemId) => {
const { children, ...other } = inputData;
result.push(other);
if (children && inputData?.id !== itemId && children.length) {
const { children } = inputData;
return transformChildrenData(children[0], result, itemId);
} else {
return result;
}
};

View File

@ -13,7 +13,9 @@ const ReadPrettyAssociationField = observer(
const { currentMode } = useAssociationFieldContext(); const { currentMode } = useAssociationFieldContext();
return ( return (
<> <>
{['Select', 'Picker', 'CascadeSelect'].includes(currentMode) && <ReadPrettyInternalViewer {...props} />} {['Select', 'Picker', 'CascadeSelect', 'Cascader'].includes(currentMode) && (
<ReadPrettyInternalViewer {...props} />
)}
{currentMode === 'Tag' && <ReadPrettyInternalTag {...props} />} {currentMode === 'Tag' && <ReadPrettyInternalTag {...props} />}
{currentMode === 'Nester' && <InternalNester {...props} />} {currentMode === 'Nester' && <InternalNester {...props} />}
{currentMode === 'SubTable' && <InternalSubTable {...props} />} {currentMode === 'SubTable' && <InternalSubTable {...props} />}

View File

@ -43,7 +43,7 @@ export const RecordDetails: CustomFunctionComponent = () => {
const feeItems = {}; const feeItems = {};
// 根据关联产品名称来合并赔偿 // 根据关联产品名称来合并赔偿
if (reqRecordItemFeeItems.data) { if (reqRecordItemFeeItems.data && products) {
reqRecordItemFeeItems.data.data?.forEach((contract, index) => { reqRecordItemFeeItems.data.data?.forEach((contract, index) => {
if (!contract.fees.length) return; if (!contract.fees.length) return;
const movement = contract.movement === '-1' ? '出库合同' : '入库合同'; const movement = contract.movement === '-1' ? '出库合同' : '入库合同';