diff --git a/web/src/App.js b/web/src/App.js index aa0d38c..1f32b2c 100644 --- a/web/src/App.js +++ b/web/src/App.js @@ -18,6 +18,7 @@ import { StatusContext } from './context/Status'; import Message from './pages/Message'; import Channel from './pages/Channel'; import EditChannel from './pages/Channel/EditChannel'; +import EditMessage from './pages/Message/EditMessage'; const Home = lazy(() => import('./pages/Home')); const About = lazy(() => import('./pages/About')); @@ -141,6 +142,22 @@ function App() { } /> + + + + } + /> + + + + } + /> { > 查看 + - + diff --git a/web/src/helpers/loader.js b/web/src/helpers/loader.js new file mode 100644 index 0000000..a2b3771 --- /dev/null +++ b/web/src/helpers/loader.js @@ -0,0 +1,38 @@ +import { API } from './api'; +import { showError } from './utils'; + +export const loadUser = async () => { + let res = await API.get(`/api/user/self`); + const { success, message, data } = res.data; + if (success) { + if (data.channel === '') { + data.channel = 'email'; + } + if (data.token === ' ') { + data.token = ''; + } + return data; + } else { + showError(message); + return null; + } +}; + +export const loadUserChannels = async () => { + let res = await API.get(`/api/channel?brief=true`); + const { success, message, data } = res.data; + if (success) { + data.forEach((channel) => { + channel.key = channel.name; + channel.text = channel.name; + channel.value = channel.name; + if (channel.description === '') { + channel.description = '无备注信息'; + } + }); + return data; + } else { + showError(message); + return null; + } +}; \ No newline at end of file diff --git a/web/src/pages/Message/EditMessage.js b/web/src/pages/Message/EditMessage.js new file mode 100644 index 0000000..2098e6c --- /dev/null +++ b/web/src/pages/Message/EditMessage.js @@ -0,0 +1,158 @@ +import React, { useEffect, useState } from 'react'; +import { Button, Form, Segment } from 'semantic-ui-react'; +import { useParams } from 'react-router-dom'; +import { API, showError, showSuccess } from '../../helpers'; +import { loadUser, loadUserChannels } from '../../helpers/loader'; + +const EditMessage = () => { + const params = useParams(); + const messageId = params.id; + const isEditing = messageId !== undefined; + let [user, setUser] = useState({ + id: '', + username: '', + channel: '', + token: '', + }); + let [channels, setChannels] = useState([]); + const [loading, setLoading] = useState(isEditing); + const originInputs = { + title: '', + description: '', + content: '', + url: '', + channel: '', + to: '', + async: false, + }; + + const [inputs, setInputs] = useState(originInputs); + const { title, description, content, url, channel, to, async } = inputs; + + const handleInputChange = (e, { name, value }) => { + setInputs((inputs) => ({ ...inputs, [name]: value })); + }; + + const loadMessage = async () => { + let res = await API.get(`/api/message/${messageId}`); + const { success, message, data } = res.data; + if (success) { + data.id = 0; + setInputs(data); + } else { + showError(message); + } + setLoading(false); + }; + + useEffect(() => { + if (isEditing) { + loadMessage().then(); + } + const loader = async () => { + let user = await loadUser(); + if (user) { + setUser(user); + } + let channels = await loadUserChannels(); + if (channels) { + setChannels(channels); + } + }; + loader().then(); + }, []); + + const send = async () => { + if (!description && !content) return; + let res = await API.post(`/push/${user.username}/`, { + ...inputs, + token: user.token, + }); + const { success, message } = res.data; + if (success) { + if (isEditing) { + showSuccess('消息重发成功!'); + } else { + showSuccess('消息发送成功!'); + setInputs(originInputs); + } + } else { + showError(message); + } + }; + + return ( + <> + +
+ + + + + + + + + + + + + + + + +
+
+ + ); +}; + +export default EditMessage;