| | |
| | | |
| | | const defaultPair = () => ({ stationName: '', stationId: '' }); |
| | | |
| | | const BasStationInitModal = ({ open, setOpen }) => { |
| | | const BasStationInitModal = ({ open, setOpen, initialData = null, onClose }) => { |
| | | const translate = useTranslate(); |
| | | const notify = useNotify(); |
| | | const refresh = useRefresh(); |
| | |
| | | request.post('/dictData/page', { dictTypeCode: 'sys_container_type', current: 1, pageSize: 100 }) |
| | | .then((res) => { |
| | | if (res?.data?.code === 200 && res?.data?.data?.records) { |
| | | setContainerTypeOptions(res.data.data.records.map((item) => ({ |
| | | const options = res.data.data.records.map((item) => ({ |
| | | id: item.id, |
| | | value: item.value, |
| | | label: item.label ?? item.value ?? item.id, |
| | | }))); |
| | | })); |
| | | setContainerTypeOptions(options); |
| | | if (initialData?.common?.containerTypes?.length) { |
| | | const list = initialData.common.containerTypes; |
| | | const mapped = list.map((item) => { |
| | | const byId = options.find((o) => Number(o.id) === Number(item) || String(o.id) === String(item)); |
| | | if (byId) return String(byId.value); |
| | | const byVal = options.find((o) => String(o.value) === String(item) || o.value == item); |
| | | if (byVal) return String(byVal.value); |
| | | return item; |
| | | }); |
| | | setCommon((prev) => ({ ...prev, containerTypes: mapped })); |
| | | } |
| | | } |
| | | }) |
| | | .catch(() => {}); |
| | | }, [open]); |
| | | |
| | | useEffect(() => { |
| | | if (!open) return; |
| | | if (initialData?.pairs?.length) { |
| | | setPairs(initialData.pairs); |
| | | } |
| | | if (initialData?.common) { |
| | | setCommon({ |
| | | type: initialData.common.type ?? 0, |
| | | useStatus: initialData.common.useStatus ?? '', |
| | | areaIds: Array.isArray(initialData.common.areaIds) ? [...initialData.common.areaIds] : [], |
| | | containerTypes: Array.isArray(initialData.common.containerTypes) ? [...initialData.common.containerTypes] : [], |
| | | inAble: initialData.common.inAble ?? 0, |
| | | outAble: initialData.common.outAble ?? 0, |
| | | }); |
| | | } |
| | | }, [open, initialData]); |
| | | const handleClose = (event, reason) => { |
| | | if (reason !== "backdropClick") { |
| | | setOpen(false); |
| | | setPairs([defaultPair()]); |
| | | if (typeof onClose === 'function') onClose(); |
| | | } |
| | | }; |
| | | |
| | |
| | | onChange={(e) => setCommon((c) => ({ ...c, containerTypes: e.target.value }))} |
| | | renderValue={(selected) => |
| | | (selected || []) |
| | | .map((val) => containerTypeOptions.find((c) => c.value === val)?.label ?? val) |
| | | .map((val) => containerTypeOptions.find((c) => String(c.value) === String(val))?.label ?? val) |
| | | .join(', ') |
| | | } |
| | | > |
| | |
| | | resettable |
| | | />, |
| | | ] |
| | | const CopyButton = ({ setCopyRecord, setCreateDialog }) => { |
| | | const CopyButton = ({ setInitCopyData, setInitDialogOpen }) => { |
| | | const record = useRecordContext(); |
| | | const translate = useTranslate(); |
| | | if (!record) return null; |
| | |
| | | sx={{ padding: '1px', fontSize: '.75rem', minWidth: 'auto' }} |
| | | onClick={(e) => { |
| | | e.stopPropagation(); |
| | | const { id, createTime, updateTime, createBy, updateBy, createBy$, updateBy$, ...rest } = record; |
| | | const copied = { ...rest }; |
| | | if (record.areaIds) copied.areaIds = [...(Array.isArray(record.areaIds) ? record.areaIds : [])]; |
| | | if (record.containerTypes) copied.containerTypes = [...(Array.isArray(record.containerTypes) ? record.containerTypes : [])]; |
| | | setCopyRecord(copied); |
| | | setCreateDialog(true); |
| | | const pairs = [{ stationName: record.stationName ?? '', stationId: record.stationId ?? '' }]; |
| | | const areaIds = Array.isArray(record.areaIds) ? [...record.areaIds] : []; |
| | | const containerTypes = Array.isArray(record.containerTypes) ? [...record.containerTypes] : []; |
| | | setInitCopyData({ |
| | | pairs, |
| | | common: { |
| | | type: record.type ?? 0, |
| | | useStatus: record.useStatus ?? '', |
| | | areaIds, |
| | | containerTypes, |
| | | inAble: record.inAble ?? 0, |
| | | outAble: record.outAble ?? 0, |
| | | }, |
| | | }); |
| | | setInitDialogOpen(true); |
| | | }} |
| | | > |
| | | {translate('toolbar.copy')} |
| | |
| | | const [areaFieldDialog2, setAreaFieldDialog2] = useState(false); |
| | | const [copyRecord, setCopyRecord] = useState(null); |
| | | const [initDialogOpen, setInitDialogOpen] = useState(false); |
| | | const [initCopyData, setInitCopyData] = useState(null); |
| | | return ( |
| | | <Box display="flex"> |
| | | <List |
| | |
| | | {/* <BooleanField source="statusBool" label="common.field.status" sortable={false} /> */} |
| | | <TextField source="memo" label="common.field.memo" sortable={false} /> |
| | | <WrapperField cellClassName="opt" label="common.field.opt"> |
| | | <CopyButton setCopyRecord={setCopyRecord} setCreateDialog={setCreateDialog} /> |
| | | <CopyButton setInitCopyData={setInitCopyData} setInitDialogOpen={setInitDialogOpen} /> |
| | | <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> |
| | | <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> |
| | | </WrapperField> |
| | |
| | | <BasStationInitModal |
| | | open={initDialogOpen} |
| | | setOpen={setInitDialogOpen} |
| | | initialData={initCopyData} |
| | | onClose={() => setInitCopyData(null)} |
| | | /> |
| | | <PageDrawer |
| | | title='BasStation Detail' |