新增工单模型 增加航线的
This commit is contained in:
20
env.js
20
env.js
@@ -9,11 +9,11 @@ const currentEnv = import.meta.env?.MODE || process.env.NODE_ENV;
|
||||
// 环境配置映射
|
||||
const envConfig = {
|
||||
[ENV.DEV]: {
|
||||
//baseURL: 'http://192.168.2.59:8081',//http://192.168.2.56:8081
|
||||
////baseURL: 'http://1.95.137.212:59015',//http://192.168.2.56:8081
|
||||
//WS_URL: 'ws://192.168.2.59:9002/ws/',
|
||||
//mqtt_url: "ws://1.95.137.212:8083/mqtt",
|
||||
//geoserver_url: "http://192.168.2.59:7000/geoserver"
|
||||
baseURL: 'http://192.168.2.59:8081',//http://192.168.2.56:8081
|
||||
//baseURL: 'http://1.95.137.212:59015',//http://192.168.2.56:8081
|
||||
WS_URL: 'ws://192.168.2.59:9002/ws/',
|
||||
mqtt_url: "ws://1.95.137.212:8083/mqtt",
|
||||
geoserver_url: "http://192.168.2.59:7000/geoserver"
|
||||
|
||||
//baseURL: 'http://1.95.137.212:8081',//http://192.168.2.56:8081
|
||||
////baseURL: 'https://serviceri.satabot.com',
|
||||
@@ -21,11 +21,11 @@ const envConfig = {
|
||||
//mqtt_url: "ws://1.95.137.212:8083/mqtt",
|
||||
//geoserver_url: "http://1.95.137.212:59018/geoserver"
|
||||
|
||||
baseURL: 'http://1.95.137.212:59015',//http://192.168.2.56:8081
|
||||
//baseURL: 'https://serviceri.satabot.com',
|
||||
WS_URL: 'ws://1.95.137.212:59017/ws/',
|
||||
mqtt_url: "ws://1.95.137.212:59021/mqtt",
|
||||
geoserver_url: "http://1.95.137.212:59018/geoserver"
|
||||
//baseURL: 'http://1.95.137.212:59015',//http://192.168.2.56:8081
|
||||
////baseURL: 'https://serviceri.satabot.com',
|
||||
//WS_URL: 'ws://1.95.137.212:59017/ws/',
|
||||
//mqtt_url: "ws://1.95.137.212:59021/mqtt",
|
||||
//geoserver_url: "http://1.95.137.212:59018/geoserver"
|
||||
},
|
||||
[ENV.PROD]: {
|
||||
//baseURL: 'https://pvcloudservice.satabot.com',
|
||||
|
||||
@@ -29,7 +29,7 @@ import {
|
||||
deleteWorkOrderModelApi,
|
||||
|
||||
} from '../../api/systemSetting';
|
||||
import { getSiteDevice, getRobotRouteList } from '../../api/device';
|
||||
import { getSiteDevice, getRobotRouteList, getWayLine, getSiteUAVList } from '../../api/device';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { RootState } from '@/src/store';
|
||||
import utils, { workOrderTypeOptions, getWorkOrderTypeText, errorLevelOptions, LEVEL_TAG_COLOR } from '@/lib/utils';
|
||||
@@ -52,34 +52,64 @@ const WorkOrderModelManagement: React.FC = () => {
|
||||
// 设备和预设路径数据
|
||||
const [deviceOptions, setDeviceOptions] = useState([]);
|
||||
const [routeOptions, setRouteOptions] = useState([]);
|
||||
const [waylineOptions, setWaylineOptions] = useState([]);
|
||||
|
||||
// 当前选择的设备类型
|
||||
const [selectedDeviceType, setSelectedDeviceType] = useState<'robot' | 'uav' | null>(null);
|
||||
|
||||
// 批量多选
|
||||
const [selectedRowKeys, setSelectedRowKeys] = useState<(string | number)[]>([]);
|
||||
|
||||
// 获取设备列表
|
||||
// 获取设备列表(分组显示机器人和无人机)
|
||||
const fetchDeviceList = async () => {
|
||||
try {
|
||||
const res = await getSiteDevice({
|
||||
// 获取机器人列表
|
||||
const robotRes = await getSiteDevice({
|
||||
siteId: stationId,
|
||||
pageSize: 9999,
|
||||
pageNum: 1,
|
||||
orgId: userInfo?.orgId
|
||||
});
|
||||
if (res.code === 200) {
|
||||
const devices = res.rows || [];
|
||||
setDeviceOptions(
|
||||
devices.map((item: any) => ({
|
||||
|
||||
// 获取无人机列表
|
||||
const uavRes = await getSiteUAVList(stationId);
|
||||
|
||||
const robotOptions = [];
|
||||
if (robotRes.code === 200) {
|
||||
const robots = robotRes.rows || [];
|
||||
robotOptions.push({
|
||||
label: '机器人',
|
||||
title: '机器人',
|
||||
options: robots.map((item: any) => ({
|
||||
label: item.deviceAlias || item.serialNumber,
|
||||
value: item.serialNumber
|
||||
value: item.serialNumber,
|
||||
type: 'robot'
|
||||
}))
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
const uavOptions = [];
|
||||
if (uavRes.code === 200) {
|
||||
const uavs = uavRes.rows || [];
|
||||
uavOptions.push({
|
||||
label: '无人机',
|
||||
title: '无人机',
|
||||
options: uavs.map((item: any) => ({
|
||||
label: item.drone_callsign,
|
||||
|
||||
value: item.device_sn,
|
||||
type: 'uav'
|
||||
}))
|
||||
});
|
||||
}
|
||||
|
||||
setDeviceOptions([...robotOptions, ...uavOptions]);
|
||||
} catch (e) {
|
||||
console.error('获取设备列表失败', e);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取预设路径列表
|
||||
// 获取预设路径列表(机器人)
|
||||
const fetchRouteList = async () => {
|
||||
try {
|
||||
const res = await getRobotRouteList({ siteId: stationId });
|
||||
@@ -97,6 +127,24 @@ const WorkOrderModelManagement: React.FC = () => {
|
||||
}
|
||||
};
|
||||
|
||||
// 获取无人机航线列表
|
||||
const fetchWaylineList = async () => {
|
||||
try {
|
||||
const res = await getWayLine();
|
||||
if (res.code === 0) {
|
||||
const waylines = res?.data?.list || [];
|
||||
setWaylineOptions(
|
||||
waylines.map((item: any) => ({
|
||||
label: item.name,
|
||||
value: item.id
|
||||
}))
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('获取无人机航线失败', e);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取数据
|
||||
const fetchList = async () => {
|
||||
setLoading(true);
|
||||
@@ -123,21 +171,40 @@ const WorkOrderModelManagement: React.FC = () => {
|
||||
fetchList();
|
||||
fetchDeviceList();
|
||||
fetchRouteList();
|
||||
fetchWaylineList();
|
||||
}
|
||||
}, [stationId]);
|
||||
|
||||
const handleAdd = () => {
|
||||
setEditingItem(null);
|
||||
form.resetFields();
|
||||
setSelectedDeviceType(null);
|
||||
setModalVisible(true);
|
||||
};
|
||||
|
||||
const handleEdit = (record: any) => {
|
||||
setEditingItem(record);
|
||||
form.setFieldsValue(record);
|
||||
// 判断当前编辑的设备类型
|
||||
if (record.waylineId) {
|
||||
setSelectedDeviceType('uav');
|
||||
} else if (record.routeId) {
|
||||
setSelectedDeviceType('robot');
|
||||
}
|
||||
setModalVisible(true);
|
||||
};
|
||||
|
||||
// 处理设备选择变化
|
||||
const handleDeviceChange = (value, option) => {
|
||||
console.log('handleDeviceChange value:', value, 'option:', option);
|
||||
if (option) {
|
||||
setSelectedDeviceType(option.type);
|
||||
// 清空路径选择
|
||||
form.setFieldValue('routeId', undefined);
|
||||
form.setFieldValue('waylineId', undefined);
|
||||
}
|
||||
};
|
||||
|
||||
// 单条删除
|
||||
const handleDelete = (id: string | number) => {
|
||||
modal.confirm({
|
||||
@@ -192,7 +259,9 @@ const WorkOrderModelManagement: React.FC = () => {
|
||||
...values,
|
||||
siteId: stationId,
|
||||
deviceId: values.deviceId,
|
||||
routeId: values.routeId
|
||||
// 根据设备类型设置对应的路径字段
|
||||
routeId: selectedDeviceType === 'robot' ? values.routeId : undefined,
|
||||
waylineId: selectedDeviceType === 'uav' ? values.waylineId : undefined,
|
||||
};
|
||||
if (editingItem) {
|
||||
res = await addWorkOrderModelApi({ ...payload, id: editingItem.id });
|
||||
@@ -210,6 +279,19 @@ const WorkOrderModelManagement: React.FC = () => {
|
||||
}
|
||||
};
|
||||
|
||||
// 辅助函数:获取所有设备的选项(展开分组)
|
||||
const getAllDeviceOptions = () => {
|
||||
const result = [];
|
||||
deviceOptions.forEach((group: any) => {
|
||||
if (group.options) {
|
||||
group.options.forEach((opt: any) => {
|
||||
result.push(opt);
|
||||
});
|
||||
}
|
||||
});
|
||||
return result;
|
||||
};
|
||||
|
||||
const columns = [
|
||||
{ title: '工单名称', dataIndex: 'orderName', key: 'orderName' },
|
||||
{
|
||||
@@ -229,19 +311,24 @@ const WorkOrderModelManagement: React.FC = () => {
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '机器人',
|
||||
title: '设备',
|
||||
dataIndex: 'deviceId',
|
||||
key: 'deviceId',
|
||||
render: (val) => {
|
||||
const device = deviceOptions.find(d => d.value === val);
|
||||
const allDevices = getAllDeviceOptions();
|
||||
const device = allDevices.find(d => d.value === val);
|
||||
return device ? device.label : val;
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '预设路径',
|
||||
title: '路径/航线',
|
||||
dataIndex: 'routeId',
|
||||
key: 'routeId',
|
||||
render: (val) => {
|
||||
render: (val, record) => {
|
||||
if (record.waylineId) {
|
||||
const wayline = waylineOptions.find(w => w.value === record.waylineId);
|
||||
return wayline ? wayline.label : record.waylineId;
|
||||
}
|
||||
const route = routeOptions.find(r => r.value === val);
|
||||
return route ? route.label : val;
|
||||
}
|
||||
@@ -312,13 +399,28 @@ const WorkOrderModelManagement: React.FC = () => {
|
||||
<Form.Item label="错误等级" name="errorLevel" rules={[{ required: true, message: '请选择错误等级' }]}>
|
||||
<Select placeholder="请选择错误等级" options={errorLevelOptions} />
|
||||
</Form.Item>
|
||||
<Form.Item label="机器人" name="deviceId" rules={[{ required: true, message: '请选择机器人' }]}>
|
||||
<Select placeholder="请选择机器人" options={deviceOptions} />
|
||||
</Form.Item>
|
||||
<Form.Item label="预设路径" name="routeId" rules={[{ required: true, message: '请选择预设路径' }]}>
|
||||
<Select placeholder="请选择预设路径" options={routeOptions} />
|
||||
<Form.Item label="设备" name="deviceId" rules={[{ required: true, message: '请选择设备' }]}>
|
||||
<Select
|
||||
placeholder="请选择设备"
|
||||
options={deviceOptions}
|
||||
onChange={handleDeviceChange}
|
||||
labelInValue={false}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
{/* 根据设备类型显示不同的路径选择 */}
|
||||
{selectedDeviceType === 'robot' && (
|
||||
<Form.Item label="预设路径" name="routeId" rules={[{ required: true, message: '请选择预设路径' }]}>
|
||||
<Select placeholder="请选择预设路径" options={routeOptions} />
|
||||
</Form.Item>
|
||||
)}
|
||||
|
||||
{selectedDeviceType === 'uav' && (
|
||||
<Form.Item label="无人机航线" name="waylineId" rules={[{ required: true, message: '请选择无人机航线' }]}>
|
||||
<Select placeholder="请选择无人机航线" options={waylineOptions} />
|
||||
</Form.Item>
|
||||
)}
|
||||
|
||||
<Form.Item label="自动生成任务" name="autoGenerateTask" valuePropName="checked">
|
||||
<Switch />
|
||||
</Form.Item>
|
||||
|
||||
Reference in New Issue
Block a user