rsf-admin/src/page/components/TaskPathTemplateMergeSelect.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 TaskPathTemplateMergeSelect = (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('/taskPathTemplateMerge/createSelectList'); if (res?.data?.code === 200) { setList(res.data.data.map((item) => { return { id: item.id, name: item.name }; })); } 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 TaskPathTemplateMergeSelect; rsf-admin/src/page/taskPathTemplateMerge/TaskPathTemplateMergeCreate.jsx
@@ -17,6 +17,7 @@ useNotify, Form, useCreateController, SelectArrayInput, } from 'react-admin'; import { Dialog, @@ -30,6 +31,7 @@ import DialogCloseButton from "../components/DialogCloseButton"; import StatusSelectInput from "../components/StatusSelectInput"; import MemoInput from "../components/MemoInput"; import TaskPathTemplateMergeSelect from "../components/TaskPathTemplateMergeSelect"; const TaskPathTemplateMergeCreate = (props) => { const { open, setOpen } = props; @@ -84,7 +86,7 @@ </DialogTitle> <DialogContent sx={{ mt: 2 }}> <Grid container rowSpacing={2} columnSpacing={2}> <Grid item xs={6} display="flex" gap={1}> {/* <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.taskPathTemplateMerge.templateCode" source="templateCode" @@ -100,39 +102,48 @@ parse={v => v} validate={required()} /> </Grid> </Grid> */} <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.taskPathTemplateMerge.sourceType" source="sourceType" parse={v => v} validate={required()} <TaskPathTemplateMergeSelect label={translate("table.field.taskPathTemplateMerge.sourceType")} name="sourceType" validate={[required()]} /> </Grid> <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.taskPathTemplateMerge.targetType" source="targetType" parse={v => v} validate={required()} <TaskPathTemplateMergeSelect label={translate("table.field.taskPathTemplateMerge.targetType")} name="targetType" validate={[required()]} /> </Grid> <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.taskPathTemplateMerge.conditionExpression" source="conditionExpression" parse={v => v} validate={required()} /> <ReferenceArrayInput source="conditionExpression" reference="taskPathTemplate"> <SelectArrayInput label="table.field.taskPathTemplateMerge.conditionExpression" optionText="templateName" optionValue="id" fullWidth validate={(value) => { if (value && value.length > 1) { return '只能选择一个模板'; } return undefined; }} /> </ReferenceArrayInput> </Grid> <Grid item xs={6} display="flex" gap={1}> {/* <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.taskPathTemplateMerge.conditionDesc" source="conditionDesc" parse={v => v} /> </Grid> <Grid item xs={6} display="flex" gap={1}> </Grid> */} {/* <Grid item xs={6} display="flex" gap={1}> <NumberInput label="table.field.taskPathTemplateMerge.version" source="version" @@ -192,7 +203,7 @@ label="table.field.taskPathTemplateMerge.stepSize" source="stepSize" /> </Grid> </Grid> */} <Grid item xs={6} display="flex" gap={1}> <StatusSelectInput /> rsf-server/src/main/java/com/vincent/rsf/server/system/controller/TaskPathTemplateMergeController.java
@@ -26,6 +26,12 @@ private TaskPathTemplateMergeService taskPathTemplateMergeService; @PreAuthorize("hasAuthority('system:taskPathTemplateMerge:list')") @PostMapping("/taskPathTemplateMerge/createSelectList") public R createSelectList() { return taskPathTemplateMergeService.createSelectList(); } @PreAuthorize("hasAuthority('system:taskPathTemplateMerge:list')") @PostMapping("/taskPathTemplateMerge/page") public R page(@RequestBody Map<String, Object> map) { BaseParam baseParam = buildParam(map, BaseParam.class); @@ -59,6 +65,12 @@ taskPathTemplateMerge.setCreateTime(new Date()); taskPathTemplateMerge.setUpdateBy(getLoginUserId()); taskPathTemplateMerge.setUpdateTime(new Date()); if (Cools.isEmpty(taskPathTemplateMerge.getSourceType(),taskPathTemplateMerge.getTargetType())) { return R.error(); } String name = taskPathTemplateMerge.getSourceType()+"==>"+taskPathTemplateMerge.getTargetType(); taskPathTemplateMerge.setTemplateName(name); taskPathTemplateMerge.setTemplateCode(name); if (!taskPathTemplateMergeService.save(taskPathTemplateMerge)) { return R.error("Save Fail"); } rsf-server/src/main/java/com/vincent/rsf/server/system/service/TaskPathTemplateMergeService.java
@@ -1,8 +1,10 @@ package com.vincent.rsf.server.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.system.entity.TaskPathTemplateMerge; public interface TaskPathTemplateMergeService extends IService<TaskPathTemplateMerge> { R createSelectList(); } rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TaskPathTemplateMergeServiceImpl.java
@@ -1,12 +1,53 @@ package com.vincent.rsf.server.system.service.impl; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.manager.entity.BasStation; import com.vincent.rsf.server.manager.entity.WarehouseAreas; import com.vincent.rsf.server.manager.service.BasStationService; import com.vincent.rsf.server.manager.service.WarehouseAreasService; import com.vincent.rsf.server.system.mapper.TaskPathTemplateMergeMapper; import com.vincent.rsf.server.system.entity.TaskPathTemplateMerge; import com.vincent.rsf.server.system.service.TaskPathTemplateMergeService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service("taskPathTemplateMergeService") public class TaskPathTemplateMergeServiceImpl extends ServiceImpl<TaskPathTemplateMergeMapper, TaskPathTemplateMerge> implements TaskPathTemplateMergeService { @Autowired private BasStationService basStationService; @Autowired private WarehouseAreasService warehouseAreasService; @Override public R createSelectList() { List<BasStation> basStations = basStationService.list(); List<WarehouseAreas> warehouseAreas = warehouseAreasService.list(); ArrayList<Map<String, Object>> maps = new ArrayList<>(); basStations.forEach(basStation -> { Map<String, Object> map = new HashMap<>(); map.put("id", basStation.getStationName()); map.put("name", basStation.getStationId()); maps.add(map); }); warehouseAreas.forEach(warehouseArea -> { Map<String, Object> map = new HashMap<>(); map.put("id", warehouseArea.getId()); map.put("name", warehouseArea.getName()); maps.add(map); }); return R.ok(maps); } }