From add24e7553a20b46a5ff660e5b02c9603f23e067 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期三, 04 二月 2026 12:32:48 +0800
Subject: [PATCH] #路径流程页

---
 rsf-admin/src/page/taskPathTemplateMerge/TaskPathTemplateMergeCreate.jsx                                  |   55 ++++++++-----
 rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TaskPathTemplateMergeServiceImpl.java |   41 ++++++++++
 rsf-admin/src/page/components/TaskPathTemplateMergeSelect.jsx                                             |   76 +++++++++++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/system/service/TaskPathTemplateMergeService.java          |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/system/controller/TaskPathTemplateMergeController.java    |   12 +++
 5 files changed, 164 insertions(+), 22 deletions(-)

diff --git a/rsf-admin/src/page/components/TaskPathTemplateMergeSelect.jsx b/rsf-admin/src/page/components/TaskPathTemplateMergeSelect.jsx
new file mode 100644
index 0000000..05a05b5
--- /dev/null
+++ b/rsf-admin/src/page/components/TaskPathTemplateMergeSelect.jsx
@@ -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;    
\ No newline at end of file
diff --git a/rsf-admin/src/page/taskPathTemplateMerge/TaskPathTemplateMergeCreate.jsx b/rsf-admin/src/page/taskPathTemplateMerge/TaskPathTemplateMergeCreate.jsx
index dc66414..1a19ea2 100644
--- a/rsf-admin/src/page/taskPathTemplateMerge/TaskPathTemplateMergeCreate.jsx
+++ b/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 />
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/TaskPathTemplateMergeController.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/TaskPathTemplateMergeController.java
index ad8d66d..84ddd58 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/TaskPathTemplateMergeController.java
+++ b/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");
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/TaskPathTemplateMergeService.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/TaskPathTemplateMergeService.java
index 09d7f6b..ada6013 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/TaskPathTemplateMergeService.java
+++ b/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();
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TaskPathTemplateMergeServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TaskPathTemplateMergeServiceImpl.java
index fe1404a..74389aa 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TaskPathTemplateMergeServiceImpl.java
+++ b/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);
+    }
 }

--
Gitblit v1.9.1