diff --git a/apps/web/src/pages/Start/ConfigDialog.tsx b/apps/web/src/pages/Start/ConfigDialog.tsx index 5c90e12..464498b 100644 --- a/apps/web/src/pages/Start/ConfigDialog.tsx +++ b/apps/web/src/pages/Start/ConfigDialog.tsx @@ -1,6 +1,8 @@ import React, { useEffect, useState } from 'react'; import Button from '@mui/material/Button'; import Chip from '@mui/material/Chip'; +import AddIcon from '@mui/icons-material/Add'; +import DeleteIcon from '@mui/icons-material/Delete'; import DialogActions from '@mui/material/DialogActions'; import DialogContent from '@mui/material/DialogContent'; import DialogContentText from '@mui/material/DialogContentText'; @@ -13,6 +15,7 @@ import Switch from '@mui/material/Switch'; import Divider from '@mui/material/Divider'; import Box from '@mui/material/Box'; import MenuItem from '@mui/material/MenuItem'; +import ButtonBase from '@mui/material/ButtonBase'; type renderLoginType = React.FC<{ onOK: (phone: string, password: string) => Promise; @@ -92,17 +95,43 @@ const listTargetType = [ ]; export const RenderConfig: renderConfigType = (props) => { - const [config, setConfig] = useState(defaultConfig); + const [config, setConfig] = useState({ ...defaultConfig }); + const [presetAddress, setPresetAddress] = useState([...defaultConfig.monitor.presetAddress]); useEffect(() => { if (props.current.config !== undefined) { setConfig(props.current.config); + setPresetAddress(props.current.config.monitor.presetAddress); } }, [props.current]); // 写入配置 const onOK = () => { - props.onOK(props.current, config); + props.onOK(props.current, { + ...config, + monitor: { + ...config.monitor, + presetAddress + } + }); + }; + + const addPresetAddress = () => { + setPresetAddress(prev => { + prev.push({ + lon: '', + lat: '', + address: '' + }); + return [...prev]; + }); + }; + + const removePresetAddress = (i: number) => { + setPresetAddress(prev => { + prev.splice(i, 1); + return [...prev]; + }); }; return ( @@ -112,7 +141,7 @@ export const RenderConfig: renderConfigType = (props) => { 配置监听模式下的签到信息:默认签到信息、邮箱信息、QQ机器人信息。 - + { fullWidth variant="outlined" /> - ) => { - setConfig(prev => { - return { ...prev, monitor: { ...prev.monitor, lon: event.target.value } }; - }); - }} - fullWidth - variant="outlined" - /> - ) => { - setConfig(prev => { - return { ...prev, monitor: { ...prev.monitor, lat: event.target.value } }; - }); - }} - fullWidth - variant="outlined" - /> - ) => { - setConfig(prev => { - return { ...prev, monitor: { ...prev.monitor, address: event.target.value } }; - }); - }} - fullWidth - variant="outlined" - /> + { + presetAddress.map((preset, i) => { + return ( + + + + ) => { + setPresetAddress(prev => { + prev[i].lon = event.target.value; + return [...prev]; + }); + }} + /> + ) => { + setPresetAddress(prev => { + prev[i].lat = event.target.value; + return [...prev]; + }); + }} + /> + + ) => { + setPresetAddress(prev => { + prev[i].address = event.target.value; + return [...prev]; + }); + }} + fullWidth + variant="outlined" + /> + + { + i !== 0 && + { removePresetAddress(i); }} + > + + + } + + ); + }) + } + diff --git a/apps/web/src/pages/Start/Start.tsx b/apps/web/src/pages/Start/Start.tsx index d279823..e33cf0b 100644 --- a/apps/web/src/pages/Start/Start.tsx +++ b/apps/web/src/pages/Start/Start.tsx @@ -21,9 +21,11 @@ export enum DialogChoice { export const defaultConfig: UserConfig = { monitor: { delay: 0, - lon: '113.516288', - lat: '34.817038', - address: '' + presetAddress: [{ + lon: '113.516288', + lat: '34.817038', + address: '安徽省蚌埠市蚌埠坦克学院' + }] }, mailing: { enabled: false, diff --git a/apps/web/src/types/global.d.ts b/apps/web/src/types/global.d.ts index 196f872..ab0a42e 100644 --- a/apps/web/src/types/global.d.ts +++ b/apps/web/src/types/global.d.ts @@ -23,12 +23,19 @@ interface UserConfig { cqserver: CQServerConfig; } -interface MonitorConfig { - delay: number; +interface AddressItem { lon: string; lat: string; address: string; } + +type PresetAddress = AddressItem[]; + +interface MonitorConfig { + delay: number; + presetAddress: PresetAddress; +} + interface MailingConfig { enabled: boolean; host: string; @@ -38,6 +45,7 @@ interface MailingConfig { pass: string; to: string; } + interface CQServerConfig { cq_enabled: boolean; ws_url: string;