feat: 接口联调

develop
JINGYJ 1 year ago
parent 310471c1bb
commit 5214210ad6

@ -32,15 +32,15 @@ export default {
changeOrigin: true,
secure: false,
},
// '/api/': {
// // 要代理的地址
// target: 'http://192.168.10.22:8000/',
// // target: 'https://www.baidu.com',
// // 配置了这个可以从 http 代理到 https
// // 依赖 origin 的功能可能需要这个,比如 cookie
// changeOrigin: true,
// secure: false,
// },
'/api/': {
// 要代理的地址
target: 'http://192.168.10.21:8000/',
// target: 'https://www.baidu.com',
// 配置了这个可以从 http 代理到 https
// 依赖 origin 的功能可能需要这个,比如 cookie
changeOrigin: true,
secure: false,
},
// '/video_save_path/': {
// // 要代理的地址
// target: 'http://192.168.10.96/',

@ -16,87 +16,97 @@ const getMenus = (req: Request, res: Response) => {
"title": "首页",
"routes": []
},
// {
// "path": "/device",
// "key": "",
// "name": "device",
// "icon": "DesktopOutlined",
// "access": "",
// "component": "",
// "title": "设备管理",
// "routes": [
// {
// "path": "/device/device-list",
// "key": "12",
// "name": "device-list",
// "icon": "",
// "access": "",
// "component": "Device/DeviceList",
// "title": "设备列表",
// "routes": []
// },
// {
// "path": "/device/device-category-list",
// "key": "13",
// "name": "device-category-list",
// "icon": "",
// "access": "",
// "component": "Device/DeviceCategoryList",
// "title": "设备类别",
// "routes": []
// },
// {
// "path": "/device/device-group-list",
// "key": "14",
// "name": "device-group-list",
// "icon": "",
// "access": "",
// "component": "Device/DeviceGroupList",
// "title": "设备组",
// "routes": []
// }
// ]
// },
// {
// "path": "/alarm",
// "key": "",
// "name": "alarm",
// "icon": "WarningOutlined",
// "access": "",
// "component": "",
// "title": "告警管理",
// "routes": [
// {
// "path": "/alarm/alarm-list",
// "key": "50",
// "name": "alarm-list",
// "icon": "",
// "access": "",
// "component": "Alarm/AlarmList",
// "title": "告警列表",
// "routes": []
// },
// {
// "path": "/alarm/alarm-setting",
// "key": "51",
// "name": "alarm-setting",
// "icon": "",
// "access": "",
// "component": "Alarm/AlarmSetting",
// "title": "告警设置",
// "routes": []
// },
// {
// "path": "/alarm/alarm-ways",
// "key": "55",
// "name": "alarm-ways",
// "icon": "",
// "access": "",
// "component": "Alarm/AlarmWays",
// "title": "告警方式",
// "routes": []
// }
// ]
// },
{
"path": "/device",
"path": "/alarm/alarm-list",
"key": "",
"name": "device",
"icon": "DesktopOutlined",
"access": "",
"component": "",
"title": "设备管理",
"routes": [
{
"path": "/device/device-list",
"key": "12",
"name": "device-list",
"icon": "",
"access": "",
"component": "Device/DeviceList",
"title": "设备列表",
"routes": []
},
{
"path": "/device/device-category-list",
"key": "13",
"name": "device-category-list",
"icon": "",
"access": "",
"component": "Device/DeviceCategoryList",
"title": "设备类别",
"routes": []
},
{
"path": "/device/device-group-list",
"key": "14",
"name": "device-group-list",
"icon": "",
"access": "",
"component": "Device/DeviceGroupList",
"title": "设备组",
"routes": []
}
]
},
{
"path": "/alarm",
"key": "",
"name": "alarm",
"name": "alarm-list",
"icon": "WarningOutlined",
"access": "",
"component": "",
"title": "告警管理",
"routes": [
{
"path": "/alarm/alarm-list",
"key": "50",
"name": "alarm-list",
"icon": "",
"access": "",
"component": "Alarm/AlarmList",
"title": "告警列表",
"routes": []
},
{
"path": "/alarm/alarm-setting",
"key": "51",
"name": "alarm-setting",
"icon": "",
"access": "",
"component": "Alarm/AlarmSetting",
"title": "告警设置",
"routes": []
},
{
"path": "/alarm/alarm-ways",
"key": "55",
"name": "alarm-ways",
"icon": "",
"access": "",
"component": "Alarm/AlarmWays",
"title": "告警方式",
"routes": []
}
]
"component": "Hidden",
"title": "告警列表",
"routes": []
},
{
"path": "alarm_rules",

@ -68,6 +68,7 @@
"react-dev-inspector": "^1.8.4",
"react-dom": "^18.2.0",
"react-helmet-async": "^1.3.0",
"swiper": "^11.0.5",
"video.js": "^8.5.2",
"webrtc-streamer": "^0.8.3-4-g2d0afce"
},

@ -215,6 +215,7 @@ const responseHeaderInterceptor = (response: Response) => {
localStorage.setItem('access', (response.headers['new-token'] || '') as string);
window.location.reload();
}
console.log(response, 'responseHeaderInterceptor');
return response;
};

@ -4,19 +4,19 @@ import { DownOutlined } from "@ant-design/icons";
export const alarmRulesEnums: Record<string, any>[] = [
{
label: '单人徘徊告警',
key: '0',
key: '1',
},
{
label: '多人聚集告警',
key: '1',
key: '2',
},
{
label: '敏感时间段告警',
key: '2',
key: '3',
},
{
label: '已忽略',
key: '3',
key: '4',
},
];

@ -9,6 +9,7 @@
// 设备列表
export const alarm_list: { [key: string]: string } = {
'alarm.list.table.list.id': 'ID',
'alarm.list.table.form.title': '告警详情',
}
// 设备状态

@ -76,6 +76,7 @@ export const interface_manage: { [key: string]: string } = {
'device.interface_manage.table.list.address': '接口地址',
'device.interface_manage.table.list.createTime': '创建时间',
'device.interface_manage.table.list.remark': '备注',
'device.interface_manage.table.list.add': '新建设备/输入源',
'device.interface_manage.table.rule.required.name': '接口名称为必填项',
'device.interface_manage.table.rule.required.address': '接口地址为必填项',
};

@ -78,5 +78,6 @@ export default {
'menu.DCSDevice.DCSDevice-device-category-list': '设备类别',
'menu.DCSDevice.DCSDevice-device-group-list': '设备组',
'menu.Contact.Contact-contact-list': '联系人列表',
'menu.notice': '消息通知'
'menu.notice': '消息通知',
'menu.alarm.alarm-list': '告警列表'
};

@ -0,0 +1,57 @@
.alarmImgBox {
display: flex;
justify-content: flex-start;
.alarmImgLeft {
position: relative;
margin-right: 32px;
width: 120px;
// height: 600px;
.alarmImgLeftBox {
width: 112px;
height: 112px;
// border-radius: 4px;
// background: skyblue;
}
.shadowBox {
position: absolute;
left: 0;
bottom: 0px;
width: 112px;
height: 20px;
background: #FFF;
z-index: 999;
}
}
.alarmImgRight{
flex: 1;
position: relative;
.alarmImgRightTopBox {
width: 640px;
height: 640px;
background: skyblue;
}
.alarmDetails {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 38px;
padding-left: 24px;
line-height: 38px;
margin-bottom: 16px;
font-family: PingFang SC;
font-size: 16px;
font-weight: 400;
color: #FFFFFF;
background: rgba(0, 0, 0, 0.6);
.alarmSpan {
// color: #333;
margin-right: 24px;
}
}
}
}
.myButtonDisabled{
visibility: hidden;
}

@ -0,0 +1,175 @@
import { putDeviceCategoryUpdateDeviceCategory } from '@/services/device/DeviceCategory';
import { postDeviceGroupGetDeviceGroupFkSelect } from '@/services/device/DeviceGroup';
import { ModalForm, ProForm, ProFormFieldSet, ProFormSelect, ProFormSwitch, ProFormText } from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message,Image } from 'antd';
import React from 'react';
import {
proFormSmallItemStyleProps,
proFormSmallModelWidth,
} from '../../../../../config/defaultForm';
import { postIgnoringvents } from '@/services/alarm/Alarmlist';
// Import Swiper React components
import { Swiper, SwiperSlide } from 'swiper/react';
import { Navigation, Pagination } from 'swiper/modules';
// Import Swiper styles
import 'swiper/css';
import 'swiper/css/navigation';
import 'swiper/css/pagination';
import styles from './AlarmDetails.less'
import moment from 'moment';
export type FormValueType = {
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.AlarmDetailsParams>;
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.AlarmDetailsParams>;
reload: any;
};
const UpdateForm: React.FC<UpdateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.AlarmDetailsParams>();
return (
<ModalForm<any>
width={832}
title={intl.formatMessage({
id: 'alarm.list.table.form.title',
defaultMessage: `编辑${props.values.warning_name}`,
})}
open={props.updateModalOpen}
form={form}
autoFocusFirstInput
modalProps={{
destroyOnClose: true,
onCancel: () => props.handleModal(),
}}
submitter={{
resetButtonProps: {
style: {
display: 'none',
},
},
searchConfig: {
submitText: '忽略此事件',
},
}}
submitTimeout={2000}
onFinish={async (values) => {
// values.is_ignore = true
// values.person_id = props.values.person_id
console.log(values);
// postIgnoringvents(values)
// .then(() => {
// message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
// })
// .catch(() => {
// message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
// });
// props.handleModal();
// return true;
}}
>
{/* <ProForm.Group> */}
{/* <div className={styles.alarmDetails}>
: <span className={styles.alarmSpan}></span>: <span className={styles.alarmSpan}>广1#</span>: <span className={styles.alarmSpan}>2023-01-15 22:00:03</span>
</div> */}
<div className={styles.alarmImgBox}>
<div className={styles.alarmImgLeft}>
<Swiper
style={{height:660}}
slidesPerView={5}
spaceBetween={20}
direction='vertical'
// pagination={{
// clickable: true,
// }}
// modules={[Pagination]}
>
<SwiperSlide>
<div className={styles.alarmImgLeftBox}>
<Image
preview={false}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
/>
</div>
</SwiperSlide>
<SwiperSlide>
<div className={styles.alarmImgLeftBox}>
<Image
preview={false}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
/>
</div>
</SwiperSlide>
<SwiperSlide>
<div className={styles.alarmImgLeftBox}>
<Image
preview={false}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
/>
</div>
</SwiperSlide>
<SwiperSlide>
<div className={styles.alarmImgLeftBox}>
<Image
preview={false}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
/>
</div>
</SwiperSlide>
<SwiperSlide>
<div className={styles.alarmImgLeftBox}>
<Image
preview={false}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
/>
</div>
</SwiperSlide>
<SwiperSlide>
<div className={styles.alarmImgLeftBox}>
<Image
preview={false}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
/>
</div>
</SwiperSlide>
<SwiperSlide>
<div className={styles.alarmImgLeftBox}>
<Image
preview={false}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
/>
</div>
</SwiperSlide>
</Swiper>
<div className={styles.shadowBox}></div>
</div>
<div className={styles.alarmImgRight}>
<div className={styles.alarmImgRightTopBox}>
<Image
width={640}
height={640}
preview={false}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
/>
</div>
<div className={styles.alarmDetails}>
: <span className={styles.alarmSpan}>{props.values.device_name}</span>: <span className={styles.alarmSpan}>{moment(props.values.trigger_time).format('YYYY-MM-DD hh:mm:ss')}</span>
</div>
</div>
</div>
{/* </ProForm.Group> */}
</ModalForm>
);
};
export default UpdateForm;

@ -1,14 +1,14 @@
import TableActionCard from '@/components/TableActionCard';
import { alarmRulesEnums } from '@/enums/status';
import { ActionType, PageContainer, ProCard, ProList } from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Button, Modal, Tabs, Image } from 'antd';
import { ActionType, PageContainer, ProCard, ProList, useIntl } from '@ant-design/pro-components';
import { Image, Modal, Tabs } from 'antd';
import React, { useEffect, useRef, useState } from 'react';
import { proTableCommonOptions, proTablePaginationOptions } from '../../../../config/defaultTable';
import { proTablePaginationOptions } from '../../../../config/defaultTable';
// import DeviceStatusCard from './components/DeviceStatusCard';
// import CreateForm from './components/CreateForm';
// import UpdateForm from './components/UpdateForm';
import { postAlarmList } from '@/services/alarm/Alarmlist';
import { QuestionCircleFilled } from '@ant-design/icons';
import AlarmDetails from './components/AlarmDetails';
import moment from 'moment';
/**
* @
@ -18,14 +18,14 @@ const tabOptions: Record<string, any> = {
singlePersonHoveringAlarm: 90,
multiplePersonGatheringAlarm: 20,
sensitiveTimePeriodAlarm: 20,
ignored: 2
ignored: 2,
// processingStatus: 10,
// errorStatus: 20,
};
export type DeleteBoxProps = {
modalOpen: boolean;
handleModal: () => void;
values: any
values: any;
reload: any;
};
@ -58,22 +58,24 @@ const AlarmList: React.FC = () => {
const [currentPageSize, setCurrentPageSize] = useState<number>(8);
const [activeTabIndex, setActiveTabIndex] = useState<number>(0);
const [dataTestList, setdataTestList] = useState<any>([]);
const [tab, setTab] = useState<string>('');
const [tab, setTab] = useState<string>(alarmRulesEnums[0].key);
const [tabs, setTabs] = useState<any>([]);
const changeProjectTab = (key: React.SetStateAction<string>) => {
setTab(key)
const changeProjectTab = (key: string) => {
setTab(key);
console.log(key);
}
initList(key)
};
const getTabs = () => {
if (alarmRulesEnums.length) {
setTab(alarmRulesEnums[0].key);
}
setTabs(alarmRulesEnums)
}
useEffect(() => {
getTabs()
}, []);
// if (alarmRulesEnums.length) {
// setTab(alarmRulesEnums[0].key);
// }
setTabs(alarmRulesEnums);
};
// useEffect(() => {
// getTabs();
// }, []);
const handleCreateModal = () => {
if (createModalOpen) {
setCreateModalOpen(false);
@ -127,120 +129,152 @@ const AlarmList: React.FC = () => {
});
};
const dataTestList = [
{
status: '在线' ,
name: '服务器1'
},
{
status: '在线' ,
name: '服务器2'
},
{
status: '在线' ,
name: '服务器3'
},
{
status: '在线' ,
name: '服务器4'
},
{
status: '在线' ,
name: '服务器5'
},
{
status: '在线' ,
name: '服务器6'
},
{
status: '在线' ,
name: '服务器7'
},
{
status: '在线' ,
name: '服务器8'
},
].map((record, index) => {
let currColor = 'default';
switch (record.status) {
case '在线':
currColor = 'success';
break;
case '故障':
currColor = 'error';
break;
case '运行中':
currColor = 'warning';
break;
default:
// eslint-disable-next-line @typescript-eslint/no-unused-vars
currColor = 'default';
break;
// 处理初始值
function initDataTestList(dataList: Record<string, any>[]) {
console.log(dataList, 'initDataTestList');
let finalList: { content: React.JSX.Element; }[] = []
if (Array.isArray(dataList) && dataList.length) {
finalList = dataList.map((record, index) => {
return {
content: (
<ProCard
className="gn"
style={{ backgroundColor: '#F5F6FF', margin: 0, padding: 0, borderRadius: 4 }}
bodyStyle={{ margin: 0, padding: 0 }}
>
<div
style={{
display: 'flex',
alignItems: 'center',
padding: 20,
justifyContent: 'flex-start',
}}
onClick={() => {
console.log(index, 'index');
setUpdateModalOpen(true);
setCurrentRow(record);
}}
>
<Image
width={96}
preview={false}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
/>
<div
style={{
marginLeft: 16,
height: 90,
display: 'flex',
flexDirection: 'column',
justifyContent: 'space-between',
color: '#666',
}}
>
<div>
:{' '}
<span
style={{
color: '#333',
}}
>
{record.warning_name}
</span>
</div>
<div>
:{' '}
<span
style={{
color: '#333',
}}
>
{record.device_name}
</span>
</div>
<div>
:{' '}
<span
style={{
color: '#333',
}}
>
{moment(record.trigger_time).format('YYYY-MM-DD hh:mm:ss')}
</span>
</div>
</div>
</div>
</ProCard>
),
};
});
}
return {
content: (
<ProCard
className="gn"
style={{ backgroundColor: '#F5F6FF', margin: 0, padding: 0,borderRadius: 4 }}
bodyStyle={{ margin: 0, padding: 0 }}
>
<div
style={{
display: 'flex',
alignItems: 'center',
padding: 20,
justifyContent: 'flex-start',
}}
onClick={() => {
console.log(index,'index');
}}
>
<Image
width={96}
preview={false}
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
/>
<div style={{
marginLeft: 16,
height: 90,
display: 'flex',
flexDirection: 'column',
justifyContent: 'space-between',
color: '#666'
}}>
<div>: <span style={{
color: '#333'
}}></span></div>
<div>: <span style={{
color: '#333'
}}>广1#</span></div>
<div>: <span style={{
color: '#333'
}}>2023-01-15 22:00:03</span></div>
</div>
</div>
</ProCard>
),
setdataTestList(() => [...finalList]);
}
// 初始化加载
async function initList(tabId:string = tab) {
const reqParams = {
// page: current,
// desc: false,
warning_type: tabId,
// ...rest,
};
});
const resp = await postAlarmList({ ...reqParams });
// console.log(resp,'resp');
initDataTestList(resp?.data?.results);
// request={async (params = {}, sort) => {
// const { current, ...rest } = params;
// const reqParams = {
// page: current,
// desc: false,
// warning_type: tab,
// ...rest,
// };
// if (sort && Object.keys(sort).length) {
// reqParams.orderKey = Object.keys(sort)[0];
// let sort_select = sort[reqParams.orderKey];
// reqParams.desc = sort_select === 'descend';
// }
// // TODO 联调查询设备状态接口
// console.log(reqParams, 'reqParams');
// let resp = await postAlarmList({ ...reqParams });
// console.log(resp, 'postAlarmList_result');
// initDataTestList(resp.result);
// // return {
// // data: resp.result,
// // success: resp.success,
// // total: resp.count,
// // current: resp.count,
// // pageSize: resp.count,
// // };
// }}
}
useEffect(() => {
getTabs();
initList();
}, []);
return (
<PageContainer
title={false}
content={
<div style={{
display: 'flex',
justifyContent: 'space-between'
}}>
<div style={{
fontWeight: 600,
fontSize: 20,
color: '#333'
}}></div>
</div>
}
// title={false}
// content={
// <div style={{
// display: 'flex',
// justifyContent: 'space-between'
// }}>
// <div style={{
// fontWeight: 600,
// fontSize: 20,
// color: '#333'
// }}></div>
// </div>
// }
>
<ProCard className="gn" bodyStyle={{ padding: 0, margin: 0 }} style={{ padding: 0, margin: 0 }}>
<ProCard
className="gn"
bodyStyle={{ padding: 0, margin: 0 }}
style={{ padding: 0, margin: 0 }}
>
<Tabs
activeKey={tab}
items={tabs}
@ -253,12 +287,12 @@ const AlarmList: React.FC = () => {
ghost={true}
itemCardProps={{
ghost: true,
bodyStyle: { padding: 0, margin: 0},
bodyStyle: { padding: 0, margin: 0 },
style: {
width: '100%',
border: 0
border: 0,
// padding: 0, margin: 0
}
},
}}
// search={{
// labelWidth: proTableCommonOptions.searchLabelWidth,
@ -290,7 +324,7 @@ const AlarmList: React.FC = () => {
cardProps={{
bodyStyle: {
padding: '8px 16px 16px',
borderRadius: 8
borderRadius: 8,
},
}}
pagination={{
@ -353,53 +387,22 @@ const AlarmList: React.FC = () => {
// },
// },
}}
request={async (params = {}, sort) => {
const { current, ...rest } = params;
const reqParams = {
page: current,
desc: false,
orderKey: '',
...rest,
};
if (sort && Object.keys(sort).length) {
reqParams.orderKey = Object.keys(sort)[0];
let sort_select = sort[reqParams.orderKey];
reqParams.desc = sort_select === 'descend';
}
// TODO 联调查询设备状态接口
// let resps = await postDeviceGroupGetDeviceGroupList({ ...reqParams });
let resp = {
success: true,
data: {
list: dataTestList,
total: 8,
page: 1,
pageSize: 8,
},
};
return {
data: resp.data.list,
success: resp.success,
total: resp.data.total,
current: resp.data.page,
pageSize: resp.data.pageSize,
};
}}
dataSource={dataTestList}
/>
</ProCard>
{/* <CreateForm
createModalOpen={createModalOpen}
values={currentRow || {}}
handleModal={handleCreateModal}
reload={actionRef.current?.reload}
/>
<UpdateForm
/> */}
<AlarmDetails
updateModalOpen={updateModalOpen}
values={currentRow || {}}
handleModal={handleUpdateModal}
reload={actionRef.current?.reload}
/> */}
/>
</PageContainer>
);
};

@ -1,17 +1,10 @@
/*
* @Author: zhoux zhouxia@supervision.ltd
* @Date: 2023-11-01 13:56:33
* @LastEditors: zhoux zhouxia@supervision.ltd
* @LastEditTime: 2023-12-26 15:01:08
* @FilePath: \general-ai-platform-web\src\pages\Device\DeviceCategoryList\components\UpdateForm.tsx
* @Description: ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { putDeviceCategoryUpdateDeviceCategory } from '@/services/device/DeviceCategory';
import { postDeviceGroupGetDeviceGroupFkSelect } from '@/services/device/DeviceGroup';
import { postAlarmRules } from '@/services/alarm/AlarmRules';
import { ModalForm, ProForm, ProFormFieldSet, ProFormSelect, ProFormSwitch, ProFormText } from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message } from 'antd';
import React from 'react';
import React, { useState } from 'react';
import {
proFormSmallItemStyleProps,
proFormSmallModelWidth,
@ -23,24 +16,24 @@ export type FormValueType = {
type?: string;
time?: string;
frequency?: string;
} & Partial<API.DeviceCategory>;
} & Partial<API.UpdateAlarmRulesForm>;
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.DeviceCategory>;
values: Partial<API.UpdateAlarmRulesForm>;
reload: any;
};
const UpdateForm: React.FC<UpdateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.DeviceCategory>();
const [form] = Form.useForm<API.UpdateAlarmRulesForm>();
return (
<ModalForm<any>
width={proFormSmallModelWidth}
title={intl.formatMessage({
id: 'alarm_rules.page.form.title',
defaultMessage: `编辑${props.values.name}`,
id: 'alarm_rules.page.form.title1',
defaultMessage: `编辑${props.values.warning_name}`,
})}
open={props.updateModalOpen}
form={form}
@ -50,19 +43,26 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
onCancel: () => props.handleModal(),
}}
submitTimeout={2000}
initialValues={{
list: [props.values.time_period,
props.values.time_interval,
props.values.appear_number],
}}
onFinish={async (values) => {
console.log(values);
// putDeviceCategoryUpdateDeviceCategory(values)
// .then(() => {
// message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
// props.reload();
// })
// .catch(() => {
// message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
// });
values.id = props.values.id
values.is_use = values.is_use ? 1 : 0
// console.log(values);
await postAlarmRules(values)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
});
// props.handleModal();
// return true;
props.handleModal();
return true;
}}
>
<ProForm.Group>
@ -83,7 +83,7 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
/> */}
<ProFormSwitch
width={proFormSmallItemStyleProps.column2Width}
name="isEnable"
name="is_use"
label={
<FormattedMessage
id="alarm_rules.page.form.isEnabled"
@ -92,12 +92,12 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
}
checkedChildren="启用"
unCheckedChildren="关闭"
initialValue={props.values.isEnabled}
initialValue={props.values.is_use}
disabled={false}
/>
<ProFormText
width={proFormSmallItemStyleProps.width}
name="name"
name="warning_name"
label={<FormattedMessage id="alarm_rules.page.form.name" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
@ -107,7 +107,7 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.name}
initialValue={props.values.warning_name}
disabled={false}
rules={[
{
@ -121,106 +121,159 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
},
]}
/>
{/* <ProFormSelect
width={proFormSmallItemStyleProps.width}
name="level"
label={<FormattedMessage id="alarm.setting.table.list.level" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_select',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm.setting.table.list.level',
defaultMessage: '$$$',
})}`}
required={false}
// TODO 在types中增加类型注释
initialValue={props.values?.level}
debounceTime={1000}
request={async () => {
// TODO 此处需要使用告警级别接口联调
const resp = await postDeviceGroupGetDeviceGroupFkSelect({});
return resp.data.list.map((v: any) => {
return {
label: v.name,
value: v.id,
};
});
}}
/> */}
{/* <ProFormText
width={proFormSmallItemStyleProps.width}
name="triggerConditions"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.triggerConditions}
disabled={false}
/> */}
<ProFormFieldSet
name="list"
label="触发条件"
type='space'
transform={(value: any) => ({
list: value,
startTime: value[0],
endTime: value[1],
})}
className={styles}
>
<ProFormText
width={100}
name="triggerConditions"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.time1}
disabled={false}
/>
<ProFormText
width={100}
name="triggerConditions"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.time2}
disabled={false}
/>
<ProFormText
width={100}
name="triggerConditions"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.time3}
disabled={false}
/>
</ProFormFieldSet>
<ProFormFieldSet
name="list"
label="触发条件"
type='space'
transform={(value: any) => ({
// list: value,
// startTime: value[0],
// endTime: value[1],
time_period: value[0],
time_interval: value[1],
appear_number: value[2],
})}
className={styles}
>
<ProFormText
width={100}
name="time_period"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.time_period}
disabled={false}
/>
<ProFormText
width={100}
name="time_interval"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.time_interval}
disabled={false}
/>
<ProFormText
width={100}
name="appear_number"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.appear_number}
disabled={false}
/>
</ProFormFieldSet>
{/* { multipleStatus &&
<ProFormFieldSet
name="list"
label="触发条件"
type='space'
transform={(value: any) => ({
// list: value,
// startTime: value[0],
// endTime: value[1],
time_period: value[0],
time_interval: value[1],
appear_number: value[2],
})}
className={styles}
>
<ProFormText
width={100}
name="person_number"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.person_number}
disabled={false}
/>
<ProFormText
width={100}
name="time_interval"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.time_interval}
disabled={false}
/>
</ProFormFieldSet>}
{ timeStatus &&
<ProFormFieldSet
name="list"
label="触发条件"
type='space'
transform={(value: any) => ({
// list: value,
// startTime: value[0],
// endTime: value[1],
time_period: value[0],
time_interval: value[1],
appear_number: value[2],
})}
className={styles}
>
<ProFormText
width={100}
name="trigger_start_time"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.trigger_start_time}
disabled={false}
/>
<ProFormText
width={100}
name="trigger_end_time"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.trigger_end_time}
disabled={false}
/>
</ProFormFieldSet>} */}
</ProForm.Group>
</ModalForm>
);

@ -0,0 +1,217 @@
import { putDeviceCategoryUpdateDeviceCategory } from '@/services/device/DeviceCategory';
import { postDeviceGroupGetDeviceGroupFkSelect } from '@/services/device/DeviceGroup';
import { postAlarmRules } from '@/services/alarm/AlarmRules';
import { ModalForm, ProForm, ProFormFieldSet, ProFormSelect, ProFormSwitch, ProFormText } from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message } from 'antd';
import React, { useState } from 'react';
import {
proFormSmallItemStyleProps,
proFormSmallModelWidth,
} from '../../../../../config/defaultForm';
import styles from './updateForm.less'
export type FormValueType = {
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.UpdateAlarmRulesForm>;
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.UpdateAlarmRulesForm>;
reload: any;
};
const UpdateMultiForm: React.FC<UpdateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.UpdateAlarmRulesForm>();
return (
<ModalForm<any>
width={proFormSmallModelWidth}
title={intl.formatMessage({
id: 'alarm_rules.page.form.title1',
defaultMessage: `编辑${props.values.warning_name}`,
})}
open={props.updateModalOpen}
form={form}
autoFocusFirstInput
modalProps={{
destroyOnClose: true,
onCancel: () => props.handleModal(),
}}
submitTimeout={2000}
initialValues={{
list: [props.values.person_number,
props.values.time_interval],
}}
onFinish={async (values) => {
values.id = props.values.id
values.is_use = values.is_use ? 1 : 0
// console.log(values);
await postAlarmRules(values)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
});
props.handleModal();
return true;
}}
>
<ProForm.Group>
{/* <ProFormText
width={proFormSmallItemStyleProps.width}
name="name"
label={<FormattedMessage id="alarm_rules.page.form.enabled" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.enabled',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.enabled}
disabled={false}
/> */}
<ProFormSwitch
width={proFormSmallItemStyleProps.column2Width}
name="is_use"
label={
<FormattedMessage
id="alarm_rules.page.form.isEnabled"
defaultMessage="$$$"
/>
}
checkedChildren="启用"
unCheckedChildren="关闭"
initialValue={props.values.is_use}
disabled={false}
/>
<ProFormText
width={proFormSmallItemStyleProps.width}
name="warning_name"
label={<FormattedMessage id="alarm_rules.page.form.name" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.name',
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.warning_name}
disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="alarm_rules.page.rule.required.name"
defaultMessage="name is required"
/>
),
},
]}
/>
<ProFormFieldSet
name="list"
label="触发条件"
type='space'
transform={(value: any) => ({
// list: value,
// startTime: value[0],
// endTime: value[1],
person_number: value[0],
time_interval: value[1]
})}
className={styles}
>
<ProFormText
width={100}
name="person_number"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.person_number}
disabled={false}
/>
<ProFormText
width={100}
name="time_interval"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.time_interval}
disabled={false}
/>
</ProFormFieldSet>
{/* { timeStatus &&
<ProFormFieldSet
name="list"
label="触发条件"
type='space'
transform={(value: any) => ({
// list: value,
// startTime: value[0],
// endTime: value[1],
time_period: value[0],
time_interval: value[1],
appear_number: value[2],
})}
className={styles}
>
<ProFormText
width={100}
name="trigger_start_time"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.trigger_start_time}
disabled={false}
/>
<ProFormText
width={100}
name="trigger_end_time"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.trigger_end_time}
disabled={false}
/>
</ProFormFieldSet>} */}
</ProForm.Group>
</ModalForm>
);
};
export default UpdateMultiForm;

@ -0,0 +1,171 @@
import { putDeviceCategoryUpdateDeviceCategory } from '@/services/device/DeviceCategory';
import { postDeviceGroupGetDeviceGroupFkSelect } from '@/services/device/DeviceGroup';
import { postAlarmRules } from '@/services/alarm/AlarmRules';
import { ModalForm, ProForm, ProFormFieldSet, ProFormSelect, ProFormSwitch, ProFormText } from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message } from 'antd';
import React, { useState } from 'react';
import {
proFormSmallItemStyleProps,
proFormSmallModelWidth,
} from '../../../../../config/defaultForm';
import styles from './updateForm.less'
export type FormValueType = {
target?: string;
template?: string;
type?: string;
time?: string;
frequency?: string;
} & Partial<API.UpdateAlarmRulesForm>;
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.UpdateAlarmRulesForm>;
reload: any;
};
const UpdateTimeForm: React.FC<UpdateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.UpdateAlarmRulesForm>();
return (
<ModalForm<any>
width={proFormSmallModelWidth}
title={intl.formatMessage({
id: 'alarm_rules.page.form.title1',
defaultMessage: `编辑${props.values.warning_name}`,
})}
open={props.updateModalOpen}
form={form}
autoFocusFirstInput
modalProps={{
destroyOnClose: true,
onCancel: () => props.handleModal(),
}}
submitTimeout={2000}
initialValues={{
list: [props.values.trigger_start_time,
props.values.trigger_end_time],
}}
onFinish={async (values) => {
values.id = props.values.id
values.is_use = values.is_use ? 1 : 0
// console.log(values);
await postAlarmRules(values)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
});
props.handleModal();
return true;
}}
>
<ProForm.Group>
{/* <ProFormText
width={proFormSmallItemStyleProps.width}
name="name"
label={<FormattedMessage id="alarm_rules.page.form.enabled" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.enabled',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.enabled}
disabled={false}
/> */}
<ProFormSwitch
width={proFormSmallItemStyleProps.column2Width}
name="is_use"
label={
<FormattedMessage
id="alarm_rules.page.form.isEnabled"
defaultMessage="$$$"
/>
}
checkedChildren="启用"
unCheckedChildren="关闭"
initialValue={props.values.is_use}
disabled={false}
/>
<ProFormText
width={proFormSmallItemStyleProps.width}
name="warning_name"
label={<FormattedMessage id="alarm_rules.page.form.name" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.name',
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.warning_name}
disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="alarm_rules.page.rule.required.name"
defaultMessage="name is required"
/>
),
},
]}
/>
<ProFormFieldSet
name="list"
label="触发条件"
type='space'
transform={(value: any) => ({
// list: value,
// startTime: value[0],
// endTime: value[1],
trigger_start_time: value[0],
trigger_end_time: value[1]
})}
className={styles}
>
<ProFormText
width={100}
name="trigger_start_time"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.trigger_start_time}
disabled={false}
/>
<ProFormText
width={100}
name="trigger_end_time"
label={<FormattedMessage id="alarm_rules.page.form.triggerConditions" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.triggerConditions',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.trigger_end_time}
disabled={false}
/>
</ProFormFieldSet>
</ProForm.Group>
</ModalForm>
);
};
export default UpdateTimeForm;

@ -6,6 +6,7 @@ import {
deleteDeviceCategoryDeleteDeviceCategory,
postDeviceCategoryGetDeviceCategoryList,
} from '@/services/device/DeviceCategory';
import {getAlarmRules} from '@/services/alarm/AlarmRules'
import type { ActionType, ProColumns } from '@ant-design/pro-components';
import { PageContainer, ProTable } from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
@ -15,6 +16,8 @@ import { proTablePaginationOptions } from '../../../../config/defaultTable';
import { proIconForTableActionStyle } from '../../../../config/defaultIcon';
import { EditOutlined } from '@ant-design/icons';
import UpdateForm from './components/UpdateForm';
import UpdateMultiForm from './components/UpdateMultiForm';
import UpdateTimeForm from './components/UpdateTimeForm';
const AlarmRulesList: React.FC = () => {
/**
* @en-US International configuration
@ -39,6 +42,8 @@ const AlarmRulesList: React.FC = () => {
const [currentRow, setCurrentRow] = useState<API.DeviceCategory>();
// 编辑弹框
const [updateModalOpen, setUpdateModalOpen] = useState<boolean>(false);
const [updateMultiModalOpen, setUpdateMultiModalOpen] = useState<boolean>(false);
const [updateTimeModalOpen, setUpdateTimeModalOpen] = useState<boolean>(false);
const handleUpdateModal = () => {
if (updateModalOpen) {
@ -48,6 +53,22 @@ const AlarmRulesList: React.FC = () => {
setUpdateModalOpen(true);
}
};
const handleUpdateMultiModal = () => {
if (updateMultiModalOpen) {
setUpdateMultiModalOpen(false);
setCurrentRow(undefined);
} else {
setUpdateMultiModalOpen(true);
}
};
const handleUpdateTimeModal = () => {
if (updateTimeModalOpen) {
setUpdateTimeModalOpen(false);
setCurrentRow(undefined);
} else {
setUpdateTimeModalOpen(true);
}
};
const getAlarmRulesList = async () => {
return {
@ -94,7 +115,7 @@ const AlarmRulesList: React.FC = () => {
const columns: ProColumns<API.DeviceCategory>[] = [
{
title: <FormattedMessage id="alarm_rules.page.name" defaultMessage="$$$" />,
dataIndex: 'name',
dataIndex: 'warning_name',
hideInSearch: true,
},
@ -105,21 +126,22 @@ const AlarmRulesList: React.FC = () => {
},
{
title: <FormattedMessage id="alarm_rules.page.status" defaultMessage="$$$" />,
dataIndex: 'status',
dataIndex: 'is_use',
hideInSearch: true,
render: (dom) => {
return (
<Tag bordered={false} color={dom === '已启用'? "success": ""} style={{
color: dom === '已启用'? '#52C41A': "#999"
<Tag bordered={false} color={dom === 1? "success": ""} style={{
// fontSize:14,
color: dom === 1? '#52C41A': "#999"
}}>
{dom}
{dom === 1 ? '已启用' : '未启用'}
</Tag>
);
},
},
{
title: <FormattedMessage id="alarm_rules.page.updateTime" defaultMessage="$$$" />,
dataIndex: 'updateTime',
dataIndex: 'update_time',
sorter: true,
hideInSearch: true,
valueType: 'dateTime',
@ -149,7 +171,14 @@ const AlarmRulesList: React.FC = () => {
marginRight: 3
}} />}
onClick={() => {
setUpdateModalOpen(true);
console.log(record);
if(record.id === 1) {
setUpdateModalOpen(true);
}else if(record.id === 2) {
setUpdateMultiModalOpen(true);
}else {
setUpdateTimeModalOpen(true);
}
setCurrentRow(record);
}}
>
@ -207,13 +236,14 @@ const AlarmRulesList: React.FC = () => {
reqParams.desc = sort_select === 'descend';
}
// let resp = await postDeviceCategoryGetDeviceCategoryList({ ...reqParams });
let resp = await getAlarmRulesList();
let resp = await getAlarmRules(reqParams);
console.log(resp);
return {
data: resp.data.list.map((v: API.DeviceCategory) => {
data: resp.data.results.map((v: API.DeviceCategory) => {
return { ...v, key: v.id };
}),
success: resp.success,
total: resp.data.total,
total: resp.data.count,
current: resp.data.page,
pageSize: resp.data.pageSize,
};
@ -226,6 +256,18 @@ const AlarmRulesList: React.FC = () => {
handleModal={handleUpdateModal}
reload={actionRef.current?.reload}
/>
<UpdateMultiForm
updateModalOpen={updateMultiModalOpen}
values={currentRow || {}}
handleModal={handleUpdateMultiModal}
reload={actionRef.current?.reload}
/>
<UpdateTimeForm
updateModalOpen={updateTimeModalOpen}
values={currentRow || {}}
handleModal={handleUpdateTimeModal}
reload={actionRef.current?.reload}
/>
</PageContainer>
);
};

@ -6,7 +6,8 @@ import { postBusinessImageCreateBusinessImage } from '@/services/resource/Busine
import { ModalForm, ProForm, ProFormText, ProFormTextArea } from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Button, Form, message } from 'antd';
import { proFormItemStyleProps, proFormModelWidth } from '../../../../../config/defaultForm';
import { postInterfaces } from '@/services/alarm/Interfaces';
import { proFormSmallItemStyleProps, proFormSmallModelWidth } from '../../../../../config/defaultForm';
import React from 'react';
export type FormValueType = {
target?: string;
@ -14,21 +15,21 @@ export type FormValueType = {
type?: string;
time?: string;
frequency?: string;
} & Partial<API.BusinessImage>;
} & Partial<API.UpdateInterfacesParams>;
export type CreateFormProps = {
createModalOpen: boolean;
handleModal: () => void;
values: Partial<API.BusinessImage>;
values: Partial<API.UpdateInterfacesParams>;
reload: any;
};
const CreateForm: React.FC<CreateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.BusinessImage>();
const [form] = Form.useForm<API.UpdateInterfacesParams>();
return (
<ModalForm<API.BusinessImage>
width={proFormModelWidth}
<ModalForm<API.UpdateInterfacesParams>
width={proFormSmallModelWidth}
title={intl.formatMessage({
id: 'resource.server_status.table.list.add',
defaultMessage: '$$$',
@ -42,7 +43,8 @@ const CreateForm: React.FC<CreateFormProps> = (props) => {
}}
submitTimeout={2000}
onFinish={async (values) => {
postBusinessImageCreateBusinessImage(values)
console.log(values);
postInterfaces(values)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
@ -54,34 +56,27 @@ const CreateForm: React.FC<CreateFormProps> = (props) => {
return true;
}}
>
<span style={{
display: 'inline-block',
fontWeight: 600,
marginBottom: 12
}}>
<FormattedMessage id="resource.server_status.table.list.parameter" defaultMessage="$$$" />
</span>
<ProForm.Group>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="name"
width={proFormSmallItemStyleProps.width}
name="device_name"
label={
<FormattedMessage id="resource.server_status.table.list.name" defaultMessage="$$$" />
<FormattedMessage id="device.interface_manage.table.list.name" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.server_status.table.list.name',
id: 'device.interface_manage.table.list.name',
defaultMessage: '$$$',
})}`}
required={false}
required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.server_status.table.list.name"
id="device.interface_manage.table.rule.required.name"
defaultMessage="name is required"
/>
),
@ -89,101 +84,46 @@ const CreateForm: React.FC<CreateFormProps> = (props) => {
]}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="userName"
width={proFormSmallItemStyleProps.width}
name="device_api"
label={
<FormattedMessage
id="resource.server_status.table.list.userName"
defaultMessage="$$$"
/>
<FormattedMessage id="device.interface_manage.table.list.address" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.server_status.table.list.userName',
id: 'device.interface_manage.table.list.address',
defaultMessage: '$$$',
})}`}
required={false}
required={true}
rules={[
{
required: true,
message: (
<FormattedMessage
id="resource.server_status.table.list.userName"
defaultMessage="version is required"
id="device.interface_manage.table.rule.required.address"
defaultMessage="name is required"
/>
),
},
]}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="ip"
label={
<FormattedMessage id="resource.server_status.table.list.ip" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.server_status.table.list.ip',
defaultMessage: '$$$',
})}`}
required={false}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="password"
label={
<FormattedMessage
id="resource.server_status.table.list.password"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.server_status.table.list.password',
defaultMessage: '$$$',
})}`}
required={false}
/>
<ProFormText
width={proFormItemStyleProps.column2Width}
name="defaultPort"
label={
<FormattedMessage
id="resource.server_status.table.list.defaultPort"
defaultMessage="$$$"
/>
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.server_status.table.list.defaultPort',
defaultMessage: '$$$',
})}`}
required={false}
/>
<ProFormTextArea
width={proFormItemStyleProps.width}
name="publicKeyString"
width={proFormSmallItemStyleProps.width}
name="note"
label={
<FormattedMessage id="resource.server_status.table.list.publicKeyString" defaultMessage="$$$" />
<FormattedMessage id="device.interface_manage.table.list.remark" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'resource.server_status.table.list.publicKeyString',
id: 'device.interface_manage.table.list.remark',
defaultMessage: '$$$',
})}`}
required={false}
/>
<Button type="primary" ghost><FormattedMessage id="resource.server_status.table.list.connectivityTesting" defaultMessage="$$$" /></Button>
</ProForm.Group>
</ModalForm>
);

@ -8,7 +8,8 @@
*/
import { putDeviceCategoryUpdateDeviceCategory } from '@/services/device/DeviceCategory';
import { postDeviceGroupGetDeviceGroupFkSelect } from '@/services/device/DeviceGroup';
import { ModalForm, ProForm, ProFormFieldSet, ProFormSelect, ProFormSwitch, ProFormText } from '@ant-design/pro-components';
import { postInterfaces } from '@/services/alarm/Interfaces';
import { ModalForm, ProForm, ProFormFieldSet, ProFormSelect, ProFormSwitch, ProFormText, ProFormTextArea } from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
import { Form, message } from 'antd';
import React from 'react';
@ -22,24 +23,24 @@ export type FormValueType = {
type?: string;
time?: string;
frequency?: string;
} & Partial<API.DeviceCategory>;
} & Partial<API.UpdateInterfacesParams>;
export type UpdateFormProps = {
updateModalOpen: boolean;
handleModal: () => void;
values: Partial<API.DeviceCategory>;
values: Partial<API.UpdateInterfacesParams>;
reload: any;
};
const UpdateForm: React.FC<UpdateFormProps> = (props) => {
const intl = useIntl();
const [form] = Form.useForm<API.DeviceCategory>();
const [form] = Form.useForm<API.UpdateInterfacesParams>();
return (
<ModalForm<any>
width={proFormSmallModelWidth}
title={intl.formatMessage({
id: 'alarm_rules.page.form.title',
defaultMessage: `编辑${props.values.name}`,
defaultMessage: `编辑${props.values.device_name}`,
})}
open={props.updateModalOpen}
form={form}
@ -51,75 +52,90 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
submitTimeout={2000}
onFinish={async (values) => {
console.log(values);
// putDeviceCategoryUpdateDeviceCategory(values)
// .then(() => {
// message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
// props.reload();
// })
// .catch(() => {
// message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
// });
values.id = props.values.id
postInterfaces(values)
.then(() => {
message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
props.reload();
})
.catch(() => {
message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
});
// props.handleModal();
// return true;
props.handleModal();
return true;
}}
>
<ProForm.Group>
{/* <ProFormText
<ProFormText
width={proFormSmallItemStyleProps.width}
name="name"
label={<FormattedMessage id="alarm_rules.page.form.enabled" defaultMessage="$$$" />}
name="device_name"
label={
<FormattedMessage id="device.interface_manage.table.list.name" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.enabled',
id: 'device.interface_manage.table.list.name',
defaultMessage: '$$$',
})}`}
required={false}
initialValue={props.values.enabled}
disabled={false}
/> */}
<ProFormSwitch
width={proFormSmallItemStyleProps.column2Width}
name="isEnable"
label={
<FormattedMessage
id="alarm_rules.page.form.isEnabled"
defaultMessage="$$$"
/>
}
checkedChildren="启用"
unCheckedChildren="关闭"
initialValue={props.values.isEnabled}
disabled={false}
required={true}
initialValue={props.values.device_name}
rules={[
{
required: true,
message: (
<FormattedMessage
id="device.interface_manage.table.rule.required.name"
defaultMessage="name is required"
/>
),
},
]}
/>
<ProFormText
width={proFormSmallItemStyleProps.width}
name="name"
label={<FormattedMessage id="alarm_rules.page.form.name" defaultMessage="$$$" />}
name="device_api"
label={<FormattedMessage id="device.interface_manage.table.list.address" defaultMessage="$$$" />}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'alarm_rules.page.form.name',
id: 'device.interface_manage.table.list.address',
defaultMessage: '$$$',
})}`}
required={true}
initialValue={props.values.name}
initialValue={props.values.device_api}
disabled={false}
rules={[
{
required: true,
message: (
<FormattedMessage
id="alarm_rules.page.rule.required.name"
id="device.interface_manage.table.rule.required.address"
defaultMessage="name is required"
/>
),
},
]}
/>
<ProFormTextArea
width={proFormSmallItemStyleProps.width}
name="note"
label={
<FormattedMessage id="device.interface_manage.table.list.remark" defaultMessage="$$$" />
}
placeholder={`${intl.formatMessage({
id: 'common.please_input',
defaultMessage: '$$$',
})}${intl.formatMessage({
id: 'device.interface_manage.table.list.remark',
defaultMessage: '$$$',
})}`}
initialValue={props.values.note}
required={false}
/>
{/* <ProFormSelect
width={proFormSmallItemStyleProps.width}
name="level"

@ -6,6 +6,7 @@ import {
deleteDeviceCategoryDeleteDeviceCategory,
postDeviceCategoryGetDeviceCategoryList,
} from '@/services/device/DeviceCategory';
import { getInterfaces } from '@/services/alarm/Interfaces'
import type { ActionType, ProColumns } from '@ant-design/pro-components';
import { PageContainer, ProTable } from '@ant-design/pro-components';
import { FormattedMessage, useIntl } from '@umijs/max';
@ -14,6 +15,7 @@ import React, { useRef, useState } from 'react';
import { proTablePaginationOptions } from '../../../../config/defaultTable';
import { proIconForTableActionStyle } from '../../../../config/defaultIcon';
import { EditOutlined } from '@ant-design/icons';
import CreateForm from './components/CreateForm';
import UpdateForm from './components/UpdateForm';
const InterfaceManageList: React.FC = () => {
/**
@ -37,6 +39,19 @@ const InterfaceManageList: React.FC = () => {
};
const [currentRow, setCurrentRow] = useState<API.DeviceCategory>();
/**
* @en-US Pop-up window of new window
* @zh-CN
* */
const [createModalOpen, setCreateModalOpen] = useState<boolean>(false);
const handleCreateModal = () => {
if (createModalOpen) {
setCreateModalOpen(false);
setCurrentRow(undefined);
} else {
setCreateModalOpen(true);
}
};
// 编辑弹框
const [updateModalOpen, setUpdateModalOpen] = useState<boolean>(false);
@ -94,18 +109,18 @@ const InterfaceManageList: React.FC = () => {
const columns: ProColumns<API.DeviceCategory>[] = [
{
title: <FormattedMessage id="device.interface_manage.table.list.name" defaultMessage="$$$" />,
dataIndex: 'name',
dataIndex: 'device_name',
hideInSearch: true,
},
{
title: <FormattedMessage id="device.interface_manage.table.list.address" defaultMessage="$$$" />,
dataIndex: 'address',
dataIndex: 'device_api',
hideInSearch: true,
},
{
title: <FormattedMessage id="device.interface_manage.table.list.createTime" defaultMessage="$$$" />,
dataIndex: 'createTime',
dataIndex: 'create_time',
sorter: true,
hideInSearch: true,
valueType: 'dateTime',
@ -173,10 +188,10 @@ const InterfaceManageList: React.FC = () => {
}}></div>
<Button type="primary"
onClick={() => {
// setCreateModalOpen(true);
setCreateModalOpen(true);
}}
>
<FormattedMessage id="resource.server_status.table.list.add" defaultMessage="add" />
<FormattedMessage id="device.interface_manage.table.list.add" defaultMessage="add" />
</Button>
</div>
}
@ -214,19 +229,25 @@ const InterfaceManageList: React.FC = () => {
reqParams.desc = sort_select === 'descend';
}
// let resp = await postDeviceCategoryGetDeviceCategoryList({ ...reqParams });
let resp = await getAlarmRulesList();
let resp = await getInterfaces({ ...reqParams });
return {
data: resp.data.list.map((v: API.DeviceCategory) => {
data: resp.data.results.map((v: API.DeviceCategory) => {
return { ...v, key: v.id };
}),
success: resp.success,
total: resp.data.total,
total: resp.data.count,
current: resp.data.page,
pageSize: resp.data.pageSize,
};
}}
columns={columns}
/>
<CreateForm
createModalOpen={createModalOpen}
values={currentRow || {}}
handleModal={handleCreateModal}
reload={actionRef.current?.reload}
/>
<UpdateForm
updateModalOpen={updateModalOpen}
values={currentRow || {}}

@ -22,7 +22,7 @@ import Settings from '../../../../config/defaultSettings';
import React, {useEffect, useState} from 'react';
import { flushSync } from 'react-dom';
import styles from './login1.less'
import {postBaseCaptcha, postBaseLogin} from "@/services/system/Base";
import {postBaseCaptcha, postBaseLogin, postLogin} from "@/services/system/Base";
import {postMenuGetMenu} from "@/services/system/Menu";
import {getLocale} from "@@/exports";
import {getAllRouteNameTile} from "@/utils/common";
@ -160,8 +160,10 @@ const Login: React.FC = () => {
//{username: "admin", password: "123456", captcha: "5531", captchaId: "GMeC0be8js61jFfbBaXz"}
// const msg = await postBaseLogin({...values, captchaId: captchaId})
const msg = await login({ ...values, type });
console.log(msg);
// const msg = await login({ ...values, type });
const msg = await postLogin({ ...values });
msg.data.token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJJZCI6MSwiVXNlcm5hbWUiOiJhZG1pbiIsIk5pY2tOYW1lIjoi566h55CG5ZGYIiwiUm9sZUlkIjoxLCJCdWZmZXJUaW1lIjo4NjQwMCwiaXNzIjoicW1QbHVzIiwiYXVkIjpbIkdWQSJdLCJleHAiOjE3MDYyNTk0NjIsIm5iZiI6MTcwNTY1NDY2Mn0.Iyc74dPDLCc-J3AA_V-KEmVP4vihYzmasXok_jlvOvE"
console.log(msg.data?.token);
if (msg.success === true) {
const defaultLoginSuccessMessage = intl.formatMessage({
id: 'pages.login.success',
@ -294,7 +296,7 @@ const Login: React.FC = () => {
},
]}
/>
<ProFormText
{/* <ProFormText
name="captcha"
fieldProps={{
size: 'large',
@ -316,7 +318,7 @@ const Login: React.FC = () => {
},
]}
addonAfter={<Image style={{backgroundColor:'white'}} width={120} preview={false} src={captcha} onClick={refreshCaptcha}></Image>}
/>
/> */}
</>
)}
{status === 'error' && loginType === 'mobile' && <LoginMessage content="验证码错误" />}

@ -30,6 +30,7 @@ export const errorConfig: RequestConfig = {
errorConfig: {
// 错误抛出
errorThrower: (res) => {
console.log(res,'errorThrower');
let { success, data, errorCode, errorMessage, showType,msg } =
res as unknown as ResponseStructure;
if (msg && !errorMessage) {
@ -38,12 +39,16 @@ export const errorConfig: RequestConfig = {
if (!success) {
const error: any = new Error(errorMessage);
error.name = 'BizError';
error.info = { errorCode, errorMessage, showType, data };
throw error; // 抛出自制的错误
error.info = { errorCode: 500, errorMessage, showType: 2, data };
message.error(errorMessage);
return
// throw error; // 抛出自制的错误
}
},
// 错误接收及处理
errorHandler: (error: any, opts: any) => {
console.log(error,'errorHandler');
if (opts?.skipErrorHandler) throw error;
// 我们的 errorThrower 抛出的错误。
if (error.name === 'BizError') {

@ -0,0 +1,41 @@
// @ts-ignore
/* eslint-disable */
import { request } from '@umijs/max';
/** 告警列表 */
export async function getAlarmRules(
params: API.SearchAlarmRulesParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.PageResult; msg?: string }>(
`/api/warning_rule/`,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
params: {
...params,
},
...(options || {}),
},
);
}
/** 更新告警列表 */
export async function postAlarmRules(
body: API.UpdateAlarmRulesParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.PageResult; msg?: string }>(
`/api/warning_rule/`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
},
);
}

@ -0,0 +1,40 @@
// @ts-ignore
/* eslint-disable */
import { request } from '@umijs/max';
/** 告警列表 */
export async function postAlarmList(
params: API.SearchAlarmListParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.PageResult; msg?: string }>(
`/api/warning_info/`,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
params: {
...params,
},
...(options || {}),
},
);
}
/** 忽略事件 */
export async function postIgnoringvents(
body: API.IgnoringventsParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.PageResult; msg?: string }>(
`/api/detect_result/`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
},
);
}

@ -0,0 +1,41 @@
// @ts-ignore
/* eslint-disable */
import { request } from '@umijs/max';
/** 接口列表 */
export async function getInterfaces(
params: API.SearchAlarmRulesParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.PageResult; msg?: string }>(
`/api/device/`,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
params: {
...params,
},
...(options || {}),
},
);
}
/** 更新接口列表 */
export async function postInterfaces(
body: API.UpdateAlarmRulesParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.PageResult; msg?: string }>(
`/api/device/`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
},
);
}

@ -0,0 +1,12 @@
// @ts-ignore
/* eslint-disable */
// API 更新时间:
// API 唯一标识:
import * as Alarmlist from './Alarmlist';
import * as AlarmRules from './AlarmRules';
import * as Interfaces from './Interfaces';
export default {
Alarmlist,
AlarmRules,
Interfaces
};

@ -0,0 +1,96 @@
declare namespace API {
type ActionDetection = {
id?: string;
source?: string;
configFile?: string;
type?: string;
remark?: string;
time?: number;
imagesPath?: string;
};
type PageResult = {
list?: any;
page?: number;
pageSize?: number;
total?: number;
};
type AlarmListResponse = {
code?: number;
data?: any;
msg?: string;
success?: boolean;
// count?: number,
// next?: any,
// previous?: any,
// results?:any
};
type SearchAlarmListParams = {
warning_type?: string;
/** 排序方式:升序false(默认)|降序true */
desc?: boolean;
/** 页码 */
page?: number;
/** 每页大小 */
pageSize?: number;
};
type SearchAlarmRulesParams = {
id?: string;
};
type InterfacesForm = {
code?: string;
createTime?: string;
id?: number;
is_use?: number;
device_name?: string;
remark?: string;
device_api?: string;
};
type UpdateAlarmRulesForm = {
warning_name?: string; // 告警规则名称
warning_type?: string; // 告警类型
is_use?: number; // 是否启用
person_number?: number; // 人数
appear_number?: number; // 出现次数
time_interval?: string; // 时间间隔(小时)
time_period?: string; // 时间段(小时)
trigger_start_time?: string;// 敏感起始时间
trigger_end_time?: string; // 敏感结束时间
id?: number;
}
type UpdateAlarmRulesParams = {
warning_name?: string; // 告警规则名称
warning_type?: string; // 告警类型
is_use?: number; // 是否启用
person_number?: number; // 人数
appear_number?: number; // 出现次数
time_interval?: string; // 时间间隔(小时)
time_period?: string; // 时间段(小时)
trigger_start_time?: string;// 敏感起始时间
trigger_end_time?: string; // 敏感结束时间
id?: string;
}
type UpdateInterfacesParams = {
device_name?: string; // 设备名称
device_code?: string; // 设备代码
is_use?: number; // 是否启用
device_api?: string; // 设备地址
note?: string; // 备注
device_status?: string; // 设备状态
id?: string;
}
type AlarmDetailsParams = {
warning_name?: string; // 设备名称
picture_path?: any; // 设备代码
device_name?: string; // 是否启用
person_id?: string;
trigger_time?: string;
}
type IgnoringventsParams = {
is_ignore?: any; // 设备代码 // 是否启用
person_id?: string;
}
}

@ -23,17 +23,17 @@ declare namespace API {
phone?: string;
};
// type LoginResult = {
// status?: string;
// type?: string;
// currentAuthority?: string;
// };
type LoginResult = {
code?: number;
success?: boolean;
data?: {};
msg?: string;
};
// type LoginResult = {
// code?: number;
// success?: boolean;
// data?: {};
// msg?: string;
// };
type PageParams = {
current?: number;

@ -21,7 +21,8 @@ declare namespace API {
code?: string;
createTime?: string;
id?: number;
name?: string;
is_use?: number;
warning_name?: string;
remark?: string;
updateTime?: string;
};

@ -24,3 +24,15 @@ export async function postBaseLogin(body: API.Login, options?: { [key: string]:
...(options || {}),
});
}
/** 用户登录 POST /base/login */
export async function postLogin(body: API.BaseLogin, options?: { [key: string]: any }) {
return request<API.Response & { data?: API.LoginResponse; msg?: string }>(`/api/login/`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}

@ -417,6 +417,12 @@ declare namespace API {
user?: User;
};
//第一版登录接口
type BaseLogin = {
password?: string;
username?: string;
};
type Menu = {
children?: Menu[];
component?: string;

Loading…
Cancel
Save