Commit 43d69214 authored by shaoan123's avatar shaoan123

将任务调度相关接口加入新运维

parent fbe4558f
Pipeline #26743 skipped with stages
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { Form, Modal, Input, Select, notification, DatePicker } from 'antd'; import { Form, Modal, Input, Select, notification, DatePicker, Spin } from 'antd';
import styles from './taskScheduling.less' import styles from './taskScheduling.less'
import { ConfigProvider } from 'antd';
// import moment from 'moment'; // import moment from 'moment';
// import locale from 'antd/es/date-picker/locale/zh_CN'; // import locale from 'antd/es/date-picker/locale/zh_CN';
// import 'moment/locale/zh-cn'; // import 'moment/locale/zh-cn';
...@@ -11,34 +9,32 @@ import moment from 'moment' ...@@ -11,34 +9,32 @@ import moment from 'moment'
import locale from 'antd/lib/date-picker/locale/zh_CN' import locale from 'antd/lib/date-picker/locale/zh_CN'
import 'moment/locale/zh-cn' import 'moment/locale/zh-cn'
moment.locale('zh-cn') moment.locale('zh-cn')
import { import {
getIotDeviceType, algorithmList, getEquipmentInfo getEquipmentInfo
} from '@/services/intelligence/api'; } from '@/services/intelligence/api';
const { RangePicker } = DatePicker; const { RangePicker } = DatePicker;
const { TextArea } = Input; const { TextArea } = Input;
const AddModal = props => { const AddModal = props => {
const { callBackSubmit = () => { }, type, formObj, visible, solutionNames } = props; const { callBackSubmit = () => { }, type, formObj, visible, deviceType } = props;
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [workSpace, setWorkSpace] = useState(''); // const [isloading, setIsLoading] = useState(false);
const [workList, setWorkList] = useState([]); //设备类型列表 const [deviceCodes, setDeviceCode] = useState([]); //设备编码列表
const [deviceType, setDeviceType] = useState([]); //设备类型列表
const [deviceCode, setDeviceCode] = useState([]); //设备编码列表
const [timeType, setTimeType] = useState(['分钟', '小时', '天']); const [timeType, setTimeType] = useState(['分钟', '小时', '天']);
const [intervalType, setIntervalType] = useState('分钟') const [intervalType, setIntervalType] = useState('分钟')
const [gsIp, setGsIp] = useState([]);
const [form] = Form.useForm(); const [form] = Form.useForm();
const { Item } = Form; const { Item } = Form;
// 提交 // 提交
const onSubmit = () => { const onSubmit = () => {
form.validateFields().then(validate => { form.validateFields().then(validate => {
if (validate) { if (validate) {
setLoading(true);
let obj = form.getFieldsValue(); let obj = form.getFieldsValue();
if (type === 'add') { let DateFrom = moment(obj.Date[0]).format('YYYY-MM-DD')
let DateTo = moment(obj.Date[1]).format('YYYY-MM-DD')
setLoading(true);
if (type === 'add') {
} else if (type === 'edit') { } else if (type === 'edit') {
handleEdit(); handleEdit();
...@@ -79,7 +75,7 @@ const AddModal = props => { ...@@ -79,7 +75,7 @@ const AddModal = props => {
useEffect(() => { useEffect(() => {
switch (type) { switch (type) {
case 'add': case 'add':
getDeviceInfo() deviceType.length && getDeviceCode(deviceType[0].DeviceType)
break; break;
case 'edit': case 'edit':
form.setFieldsValue({ ...formObj }); form.setFieldsValue({ ...formObj });
...@@ -90,17 +86,16 @@ const AddModal = props => { ...@@ -90,17 +86,16 @@ const AddModal = props => {
}, [visible]); }, [visible]);
const getDeviceInfo = () => {
const getIotDevice = getIotDeviceType() const getDeviceCode = (type) => {
const algorithm = algorithmList() setLoading(false)
Promise.all([getIotDevice, algorithm]).then(res => { getEquipmentInfo(type).then(respone => {
if (res[0].getMe.length) { respone.getMe[0].DeviceList.length && setDeviceCode(respone.getMe[0].DeviceList)
setDeviceType(res[0].getMe) form.setFieldsValue({
getEquipmentInfo(res[0].getMe[0].DeviceType).then(respone => { deviceType: deviceType[0].DeviceType,
respone.getMe[0].DeviceList.length && setDeviceCode(respone.getMe[0].DeviceList) deviceCode: respone.getMe[0].DeviceList[0].Code
form.setFieldsValue({ deviceType: res[0].getMe[0].DeviceType, deviceCode: respone.getMe[0].DeviceList[0].Code }); });
}) setLoading(false)
}
}) })
} }
const layout = { const layout = {
...@@ -112,13 +107,16 @@ const AddModal = props => { ...@@ -112,13 +107,16 @@ const AddModal = props => {
span: 16, span: 16,
}, },
}; };
//选择设备类型
const handleWorkspace = () => { } const handleDeviceType = (value) => {
getDeviceCode(value)
}
const handleIntervalType = (value) => { const handleIntervalType = (value) => {
setIntervalType(value) setIntervalType(value)
} }
return ( return (
<Modal <Modal
title={`${type === 'add' ? '元数据发布' : '编辑'}`} title={`${type === 'add' ? '元数据发布' : '编辑'}`}
bodyStyle={{ width: '100%', minHeight: '100px' }} bodyStyle={{ width: '100%', minHeight: '100px' }}
...@@ -134,98 +132,104 @@ const AddModal = props => { ...@@ -134,98 +132,104 @@ const AddModal = props => {
forceRender={true} forceRender={true}
getContainer={false} getContainer={false}
> >
{visible && ( <Spin spinning={isloading} delay={300}>
<Form form={form} {...layout} onFinish={onFinish}> {visible && (
<Item <Form form={form} {...layout} onFinish={onFinish}>
label="任务名称" <Item
name="TaskName" label="任务名称"
rules={[{ required: true, message: '请输入任务名称' }]} name="TaskName"
> rules={[{ required: true, message: '请输入任务名称' }]}
<Input placeholder="请输入任务名称" allowClear /> >
</Item> <Input placeholder="请输入任务名称" allowClear />
<Item </Item>
label="场景" <Item
name="scene" label="场景"
rules={[{ required: true, message: '请选择场景' }]} name="scene"
> rules={[{ required: true, message: '请选择场景' }]}
<Select onChange={handleWorkspace} > >
{/* {workList.length ? workList.map((item, index) => { return <Option key={index} value={item.name}>{item.name}</Option> }) : ''} */} <Select >
</Select> {/* {workList.length ? workList.map((item, index) => { return <Option key={index} value={item.name}>{item.name}</Option> }) : ''} */}
</Item> </Select>
</Item>
<Item
label="策略名称" <Item
name="strategy" label="策略名称"
rules={[{ required: true, message: '请选择策略名称' }]} name="strategy"
> // rules={[{ required: true, message: '请选择策略名称' }]}
<Select onChange={handleWorkspace} > >
{/* {workList.length ? workList.map((item, index) => { return <Option key={index} value={item.name}>{item.name}</Option> }) : ''} */} <Select >
</Select> {/* {workList.length ? workList.map((item, index) => { return <Option key={index} value={item.name}>{item.name}</Option> }) : ''} */}
</Item> </Select>
<Item </Item>
label="类型" <Item
name="type" label="类型"
rules={[{ required: true, message: '请选择类型' }]} name="type"
> rules={[{ required: true, message: '请选择类型' }]}
<Select onChange={handleWorkspace} > >
<Select.Option value='水龄预测'>水龄预测</Select.Option> <Select>
<Select.Option value='二供泵房'>二供泵房</Select.Option> <Select.Option value='水龄预测'>水龄预测</Select.Option>
</Select> <Select.Option value='二供泵房'>二供泵房</Select.Option>
</Item> </Select>
<Item </Item>
label="设备类型" <Item
name="deviceType" label="设备类型"
rules={[{ required: true, message: '请输入设备类型' }]} name="deviceType"
> rules={[{ required: true, message: '请输入设备类型' }]}
<Select onChange={handleWorkspace} > >
{deviceType.length ? deviceType.map((item, index) => { return <Select.Option key={index} value={item.DeviceType}>{item.DeviceType}</Select.Option> }) : ''} <Select onChange={handleDeviceType} >
</Select> {deviceType.length ? deviceType.map((item, index) => { return <Select.Option key={index} value={item.DeviceType}>{item.DeviceType}</Select.Option> }) : ''}
</Item> </Select>
<Item </Item>
label="设备编码" <Item
name="deviceCode" label="设备编码"
rules={[{ required: true, message: '请选择设备编码' }]} name="deviceCode"
> rules={[{ required: true, message: '请选择设备编码' }]}
<Select onChange={handleWorkspace} > >
{deviceCode.length ? deviceCode.map((item, index) => { return <Select.Option key={index} value={item.PointAddressID}>{item.Code}</Select.Option> }) : ''} <Select>
</Select> {deviceCodes.length ? deviceCodes.map((item, index) => { return <Select.Option key={index} value={item.PointAddressID}>{item.Code}</Select.Option> }) : ''}
</Item> </Select>
</Item>
<Item
label="间隔(Cron)" <Item
name="Interval" label="间隔(Cron)"
rules={[{ required: true, message: '请输入间隔' }]} name="Interval"
> rules={[{ required: true, message: '请输入间隔' }]}
<Input placeholder="请输入间隔" allowClear /> >
</Item> <div className={styles.predict}>
<Item <Input placeholder="请输入间隔" allowClear />
label="首次预测时间" <a className={styles.corn} target="view_window" href="https://cron.qqe2.com/">cron在线生成</a>
name="Date" </div>
rules={[{ required: true, message: '请选择首次预测时间' }]} </Item>
> <Item
label="首次预测时间"
<RangePicker locale={locale} name="Date"
style={{ width: '100%' }} /> rules={[{ required: true, message: '请选择首次预测时间' }]}
</Item> >
<Item
label="预测间隔" <RangePicker locale={locale}
rules={[{ required: true, message: '请输入预测间隔' }]} style={{ width: '100%' }} />
> </Item>
<div className={styles.predict}></div> <Item
<Input style={{ width: '70%' }} placeholder="请输入预测间隔" allowClear /> label="预测间隔"
<Select style={{ marginLeft: '0.5rem', width: '28%' }} onChange={handleIntervalType} value={intervalType}> rules={[{ required: true, message: '请输入预测间隔' }]}
{timeType.length ? timeType.map((item, index) => { return <Select.Option key={index} value={item}>{item}</Select.Option> }) : ''} >
</Select> <div className={styles.predict}></div>
</Item> <Input style={{ width: '70%' }} placeholder="请输入预测间隔" allowClear />
<Select style={{ marginLeft: '0.5rem', width: '28%' }} onChange={handleIntervalType} value={intervalType}>
<Item {timeType.length ? timeType.map((item, index) => { return <Select.Option key={index} value={item}>{item}</Select.Option> }) : ''}
label="描述" </Select>
name="des" </Item>
>
<TextArea placeholder="可输入描述信息" rows={4} allowClear /> <Item
</Item> label="描述"
</Form> name="dec"
)} >
<TextArea placeholder="可输入描述信息" rows={4} allowClear />
</Item>
</Form>
)}
</Spin>
</Modal> </Modal>
); );
}; };
......
...@@ -2,20 +2,20 @@ import { Space, Table, Button, Popconfirm, notification } from 'antd'; ...@@ -2,20 +2,20 @@ import { Space, Table, Button, Popconfirm, notification } from 'antd';
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import styles from './taskScheduling.less' import styles from './taskScheduling.less'
import { import {
GetVectorService, deleteVectorService, getSolutionList, updatePublishedMetaData deleteTaskOptions, taskOptionsList, getIotDeviceType, algorithmList, getEquipmentInfo
} from '@/services/webConfig/api'; } from '@/services/intelligence/api';
import AddModal from './AddModal' import AddModal from './AddModal'
const VectorData = props => { const VectorData = props => {
const [treeLoading, setTreeLoading] = useState(false);// 弹窗显示 const [treeLoading, setTreeLoading] = useState(false);// 弹窗显示
const [tileData, setTileData] = useState([]); // table表格数据 const [tileData, setTileData] = useState([]); // table表格数据
const [visible, setVisible] = useState(false); // 弹窗 const [visible, setVisible] = useState(false); // 弹窗
const [previewVisible, setPreviewVisible] = useState(false); // 预览弹窗 const [deviceType, setDeviceType] = useState([]); //设备类型列表
const [flag, setFlag] = useState(0); // 更新list const [flag, setFlag] = useState(0); // 更新list
const [loading, setLoading] = useState([]); // 更新状态 const [loading, setLoading] = useState([]); // 更新状态
const [type, setType] = useState(''); // 弹窗类型 const [type, setType] = useState(''); // 弹窗类型
const [solutionNames, setSolutionNames] = useState(''); const [solutionNames, setSolutionNames] = useState('');
const [formObj, setFormObj] = useState({ user: 'admin', password: 'geoserver' }); const [formObj, setFormObj] = useState({ user: 'admin', password: 'geoserver' });
const [currentMetaData,setCurrentMetaData] = useState(null) const [currentMetaData, setCurrentMetaData] = useState(null)
const columns = [ const columns = [
{ {
title: '序号', title: '序号',
...@@ -25,26 +25,26 @@ const VectorData = props => { ...@@ -25,26 +25,26 @@ const VectorData = props => {
}, },
{ {
title: '场景名称', title: '场景名称',
dataIndex: 'GISServerIP', dataIndex: 'AlgorithmName',
key: 'GISServerIP', key: 'AlgorithmName',
align: 'center' align: 'center'
}, },
{ {
title: '任务名称', title: '任务名称',
dataIndex: 'GISServerPort', dataIndex: 'TaskName',
key: 'GISServerPort', key: 'TaskName',
align: 'center' align: 'center'
}, },
{ {
title: '状态', title: '状态',
dataIndex: 'GISServerProjectName', dataIndex: 'Status',
key: 'GISServerProjectName', key: 'Status',
align: 'center' align: 'center'
}, },
{ {
title: '任务类型', title: '任务类型',
dataIndex: 'publishTime', dataIndex: 'TaskType',
key: 'publishTime', key: 'TaskType',
align: 'center' align: 'center'
}, },
{ {
...@@ -55,14 +55,14 @@ const VectorData = props => { ...@@ -55,14 +55,14 @@ const VectorData = props => {
}, },
{ {
title: '描述', title: '描述',
dataIndex: 'publishTime', dataIndex: 'Describe',
key: 'publishTime', key: 'Describe',
align: 'center' align: 'center'
}, },
{ {
title: '访问方式', title: '访问方式',
dataIndex: 'publishTime', dataIndex: 'RequestType',
key: 'publishTime', key: 'RequestType',
align: 'center' align: 'center'
}, },
{ {
...@@ -70,7 +70,7 @@ const VectorData = props => { ...@@ -70,7 +70,7 @@ const VectorData = props => {
align: 'center', align: 'center',
render: (text, record, index) => ( render: (text, record, index) => (
<Space> <Space>
<div onClick={e => e.stopPropagation()}> <div onClick={e => e.stopPropagation()}>
<Popconfirm <Popconfirm
title="是否删除该矢量数据?" title="是否删除该矢量数据?"
...@@ -92,10 +92,10 @@ const VectorData = props => { ...@@ -92,10 +92,10 @@ const VectorData = props => {
]; ];
const onSubmit = prop => { const onSubmit = prop => {
setVisible(false); setVisible(false);
setFlag(flag+1) setFlag(flag + 1)
}; };
const delConfirm = (record) => { const delConfirm = (record) => {
let query = { let query = {
...@@ -127,11 +127,20 @@ const VectorData = props => { ...@@ -127,11 +127,20 @@ const VectorData = props => {
useEffect(() => { useEffect(() => {
renderTile(); renderTile();
}, [flag]); }, [flag]);
// 获取瓦片数据配置数据 // 获取任务列表及设备类型及编码数据
const renderTile = () => { const renderTile = () => {
setTreeLoading(true)
}; const getIotDevice = getIotDeviceType()
const algorithm = algorithmList()
const taskOption = taskOptionsList()
Promise.all([getIotDevice, algorithm, taskOption]).then(res => {
res[0].getMe && res[0].getMe.length && setDeviceType(res[0].getMe)
res[2].getMe && res[2].getMe.length && setDeviceType(res[2].getMe)
setTreeLoading(false)
}).catch(err => {
setTreeLoading(false)
})
}
return ( return (
...@@ -161,6 +170,7 @@ const VectorData = props => { ...@@ -161,6 +170,7 @@ const VectorData = props => {
onCancel={() => setVisible(false)} onCancel={() => setVisible(false)}
callBackSubmit={onSubmit} callBackSubmit={onSubmit}
type={type} type={type}
deviceType={deviceType}
formObj={formObj} formObj={formObj}
solutionNames={solutionNames} solutionNames={solutionNames}
/> />
......
.predict{ .predict{
display: flex; display: flex;
align-items: flex-end;
justify-content: space-between;
width: 100%;
} }
.tileBtn{ .tileBtn{
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
width: 100%; width: 100%;
padding: 0 0 2rem padding: 0 0 2rem
}
.corn{
cursor: pointer;
margin-left:1rem;
text-decoration: underline;
width: 8rem;
} }
\ No newline at end of file
...@@ -2,16 +2,33 @@ import qs from 'qs'; ...@@ -2,16 +2,33 @@ import qs from 'qs';
import { CITY_SERVICE, get, PUBLISH_SERVICE, post, postForm } from '../index'; import { CITY_SERVICE, get, PUBLISH_SERVICE, post, postForm } from '../index';
//获取任务列表
export const taskOptionsList = () =>
get(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/TaskOptionsList`);
//获取设备类型 //获取设备类型
export const getIotDeviceType = () => export const getIotDeviceType = () =>
get(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/GetIotDeviceType` ); get(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/GetIotDeviceType`);
//获取场景列表 //获取场景列表
export const algorithmList = () => export const algorithmList = () =>
get(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/AlgorithmList` ); get(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/AlgorithmList`);
//获取设备列表 //获取设备列表
export const getEquipmentInfo = (query) => export const getEquipmentInfo = (query) =>
get(`${CITY_SERVICE}/IOTPlatform.svc/AcrossTable/GetEquipmentInfo?equipType=${query}` ); get(`${CITY_SERVICE}/IOTPlatform.svc/AcrossTable/GetEquipmentInfo?equipType=${query}`);
//任务添加
export const addTaskOptions = (params) =>
post(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/AddTaskOptions`, params);
//任务编辑
export const updateTaskOptions = (params) =>
post(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/UpdateTaskOptions`, params);
//任务删除
export const deleteTaskOptions = (params) =>
post(`${CITY_SERVICE}/IOTPlatform.svc/WaterAge/DeleteTaskOptions`, params);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment