| rsf-admin/src/page/basicInfo/deviceSite/DeviceSiteEdit.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| rsf-admin/src/page/components/BasStationSelect.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/BasStationController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/DeviceSite.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
rsf-admin/src/page/basicInfo/deviceSite/DeviceSiteEdit.jsx
@@ -30,6 +30,8 @@ import StatusSelectInput from "../../components/StatusSelectInput"; import DictionarySelect from "../../components/DictionarySelect"; import WarehouseSelect from "../../components/WarehouseSelect"; import BasStationSelect from "../../components/BasStationSelect"; import BasStation from "@/page/basicInfo/basStation/index.jsx"; const FormToolbar = () => { const { getValues } = useFormContext(); @@ -115,10 +117,10 @@ /> </Stack> <Stack direction='row' gap={2}> <TextInput label="table.field.deviceSite.deviceCode" source="deviceCode" parse={v => v} <BasStationSelect label={translate("table.field.deviceSite.deviceCode")} name="deviceCode" validate={[required()]} /> </Stack> <Stack direction='row' gap={2}> rsf-admin/src/page/components/BasStationSelect.jsx
New file @@ -0,0 +1,76 @@ import { useState, useEffect } from 'react'; import { useTranslate, useNotify, required } from 'react-admin'; import { useController } from 'react-hook-form'; import request from '@/utils/request'; import { Select, MenuItem, FormControl, InputLabel } from '@mui/material'; const BasStationSelect = (props) => { const { dictTypeCode, label, name, validate, ...params } = props; const translate = useTranslate(); const notify = useNotify(); const [list, setList] = useState([]); // 使用 useController 与 react-hook-form 集成 const { field, fieldState } = useController({ name: name, rules: validate ? { validate: (value) => { for (const rule of validate) { const result = rule(value); if (result) return result; } return true; } } : undefined }); useEffect(() => { http(); }, [dictTypeCode]); const http = async () => { const res = await request.post('/basStation/page/v1', { current: 1, pageSize: 100 }); if (res?.data?.code === 200) { setList(res.data.data.records.map((item) => { return { id: item.id.toString(), name: item.stationName }; })); } else { notify(res.data.msg); } }; const handleChange = (event) => { const selectedValue = event.target.value; field.onChange(selectedValue); }; const validValue = list.some(item => item.id === field.value) ? field.value : ''; return ( <FormControl required fullWidth error={!!fieldState.error}> <InputLabel id={`${name}-label`}>{label}</InputLabel> <Select labelId={`${name}-label`} value={validValue} variant="filled" onChange={handleChange} size='small' > {list.map((item) => ( <MenuItem key={item.id} value={item.id}> {item.name} </MenuItem> ))} </Select> </FormControl> ); }; export default BasStationSelect; rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/BasStationController.java
@@ -47,6 +47,14 @@ return R.ok().add(page); } @PreAuthorize("hasAuthority('manager:warehouseAreas:list')") @PostMapping("/basStation/page/v1") public R pagev22(@RequestBody Map<String, Object> map) { BaseParam baseParam = buildParam(map, BaseParam.class); PageParam<BasStation, BaseParam> pageParam = new PageParam<>(baseParam, BasStation.class); return R.ok().add(basStationService.page(pageParam, pageParam.buildWrapper(true))); } @PreAuthorize("hasAuthority('manager:basStation:list')") @PostMapping("/basStation/list") public R list(@RequestBody Map<String, Object> map) { rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/DeviceSite.java
@@ -84,7 +84,7 @@ /** * 设备编号 */ @ApiModelProperty(value= "设备编号") @ApiModelProperty(value= "接驳位") private String deviceCode; /**