diff --git a/app/login/page.js b/app/login/page.js index 5b9b189..c3eb975 100644 --- a/app/login/page.js +++ b/app/login/page.js @@ -9,7 +9,6 @@ import { Divider, Checkbox, Toast, - Image, Dialog, Popup, } from "antd-mobile"; @@ -21,10 +20,8 @@ import { saveUserInfo, get, save } from "@/utils/storeInfo"; import { connect } from "react-redux"; import { cryptoPassword } from "@/utils/crypto"; import requireAPI from "@/utils/requireAPI"; -import { signOut, signIn, checkAuth } from "@/utils/auth"; +import { signIn, checkAuth } from "@/utils/auth"; import OwnInput from "@/components/OwnInput"; -import Link from "next/link"; -import OwnImage from "@/components/OwnImage"; import OwnIcon from "@/components/OwnIcon"; /* params格式: diff --git a/app/my/setting/page.js b/app/my/setting/page.js index 3fb85d2..95852ac 100644 --- a/app/my/setting/page.js +++ b/app/my/setting/page.js @@ -6,7 +6,9 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faAngleLeft, faAngleRight } from "@fortawesome/free-solid-svg-icons"; import { useRouter } from "next/navigation"; import { handleLogout } from "@/api/public"; -export default function Setting() { +import { connect } from "react-redux"; +import { handleLogin } from "@/store/actions"; +function Setting({ handleLogin }) { const router = useRouter(); return (
@@ -36,7 +38,9 @@ export default function Setting() { /> } onClick={() => { - handleLogout(); + handleLogout().then(() => { + handleLogin({ isSignin: false, userToken: null }); + }); router.push("/login"); }} > @@ -125,3 +129,8 @@ export default function Setting() {
); } + +const mapDispatchToProps = { + handleLogin, +}; +export default connect(null, mapDispatchToProps)(Setting); diff --git a/app/noticeDetail/components/MessageList/index.jsx b/app/noticeDetail/components/MessageList/index.jsx index f3969da..8bb2963 100644 --- a/app/noticeDetail/components/MessageList/index.jsx +++ b/app/noticeDetail/components/MessageList/index.jsx @@ -106,6 +106,7 @@ const MessageList = ({ mid, changeNoticeCount, refInstance, noticeCount }) => { }); return; } + changeNoticeCount(_data.data.total); const noticeObj = _data.data.result; setData(noticeObj); setInfoItems((old) => { diff --git a/app/noticeDetail/components/NoticeItem/index.jsx b/app/noticeDetail/components/NoticeItem/index.jsx index 4ca43e0..386534d 100644 --- a/app/noticeDetail/components/NoticeItem/index.jsx +++ b/app/noticeDetail/components/NoticeItem/index.jsx @@ -43,7 +43,7 @@ export default function NoticeItem({ leftIcon, hasLink, data }) {
{ - if (data.is_valid) { + if (!data.is_valid) { Toast.show({ icon: "fail", content: "此链接已失效", diff --git a/app/noticeDetail/systemNotice/[type]/page.js b/app/noticeDetail/systemNotice/[type]/page.js index 835ccf4..be51da1 100644 --- a/app/noticeDetail/systemNotice/[type]/page.js +++ b/app/noticeDetail/systemNotice/[type]/page.js @@ -41,7 +41,7 @@ function SystemNotice({ mid, changeNoticeCount, total, ...props }) { }); return; } - changeNoticeCount(); + changeNoticeCount(0); received.current = true; } diff --git a/components/BottomNav/index.js b/components/BottomNav/index.js index 9fb7d2e..f57d1a1 100644 --- a/components/BottomNav/index.js +++ b/components/BottomNav/index.js @@ -43,7 +43,7 @@ function BottomNav({ changeNoticeCount, changeInviter, noticeCount }) { }; getDtata(); return () => {}; - }, [noticeCount]); + }, [noticeCount, pathname]); const setRouteActive = (value) => { router.replace(value); }; diff --git a/components/Websocket/index.jsx b/components/Websocket/index.jsx index 2ecf1eb..0204ad1 100644 --- a/components/Websocket/index.jsx +++ b/components/Websocket/index.jsx @@ -1,37 +1,45 @@ -import React, { useEffect, useState, useTransition } from "react"; +import React, { useEffect, useState, useRef } from "react"; import baseRequest from "@/utils/baseRequest"; -const WebSocketComponent = ({ getData }) => { +import { connect } from "react-redux"; +import { get } from "@/utils/storeInfo"; +const WebSocketComponent = ({ getData, authInfo }) => { const [messages, setMessages] = useState([]); - const [pending, startTransition] = useTransition(); + // const [pending, startTransition] = useTransition(); + const socketRef = useRef(null); useEffect(() => { - let socket = null; let interval = null; - + const account = get("account"); function connect_socket() { const base = baseRequest(); - if (socket && socket.readyState === 1) return; + + if (socketRef.current && socketRef.current.readyState === 1) return; // 创建WebSocket连接 - if (!socket) - socket = new WebSocket( + if (!socketRef.current && account) + socketRef.current = new WebSocket( `${process.env.NEXT_PUBLIC_WEBSOCKET_URL}/ws?b_mid=${base.b_mid}&b_dt=1&b_token=${base.b_token}&b-ch=h5` ); // 响应服务器的 ping - // socket.on("ping", () => { - // socket.send("pong"); + // socketRef.current.on("ping", () => { + // socketRef.current.send("pong"); // }); } + if (!account && socketRef.current) { + socketRef.current.close(); + socketRef.current = null; + return; + } connect_socket(); - if (socket) { + if (socketRef.current) { // 注意使用wss协议(如果服务器支持) // 连接打开时触发 - socket.onopen = () => { - // console.log("WebSocket connected.", socket.readyState); + socketRef.current.onopen = () => { + // console.log("WebSocket connected.", socketRef.current.readyState); // 可以在这里发送消息到服务器,例如:socket.send('Hello Server!'); - socket.send(JSON.stringify({ t: 1 })); + socketRef.current.send(JSON.stringify({ t: 1 })); }; // 处理收到的消息 - socket.onmessage = (event) => { + socketRef.current.onmessage = (event) => { if (Object.prototype.toString.call(event.data) === "[object Blob]") { var reader = new FileReader(); reader.readAsText(event.data, "utf-8"); @@ -39,13 +47,13 @@ const WebSocketComponent = ({ getData }) => { try { const data = JSON.parse(reader.result); if (data.t === 2 && data.msg.ping_interval) { - socket.send("ping"); + socketRef.current.send("ping"); interval = setInterval(() => { // 发送 ping 给服务器 - socket.send("ping"); + socketRef.current.send("ping"); // 响应服务器的 ping - // socket.on("ping", () => { - // socket.send("pong"); + // socketRef.current.on("ping", () => { + // socketRef.current.send("pong"); // }); }, data.msg.ping_interval * 1000); } @@ -59,23 +67,25 @@ const WebSocketComponent = ({ getData }) => { }; // 连接关闭时触发 - socket.onclose = () => { + socketRef.current.onclose = () => { clearInterval(interval); connect_socket(); // console.log("WebSocket disconnected."); }; // 连接错误时触发 - socket.onerror = (error) => { + socketRef.current.onerror = (error) => { // console.error("WebSocket error:", error); }; } // 组件卸载时关闭WebSocket连接 return () => { - // console.log("state", socket.readyState); - socket?.readyState === WebSocket.OPEN && socket?.close(); + // console.log("state", socketRef.current.readyState); + if (socketRef.current) + socketRef.current?.readyState === WebSocket.OPEN && + socketRef.current?.close(); clearInterval(interval); }; - }, []); // 空依赖数组表示这个effect只在组件挂载时运行一次 + }, [authInfo]); // 空依赖数组表示这个effect只在组件挂载时运行一次 // return ; return (
@@ -89,4 +99,9 @@ const WebSocketComponent = ({ getData }) => { ); }; -export default WebSocketComponent; +const mapStateToProps = ({ reducer }) => { + return { + authInfo: reducer.authInfo, + }; +}; +export default connect(mapStateToProps, null)(WebSocketComponent); diff --git a/utils/requireAPI.js b/utils/requireAPI.js index 0f83342..792c860 100644 --- a/utils/requireAPI.js +++ b/utils/requireAPI.js @@ -56,9 +56,11 @@ export default function customFetch( // // 检查响应状态码 if (!response.ok) { - throw new Error( - "Network response was not ok " + response.statusText - ); + try { + throw new Error( + "Network response was not ok " + response.statusText + ); + } catch (error) {} } // console.log("response-----", response); // const contentLength = response.headers.get("Content-Length"); @@ -79,13 +81,13 @@ export default function customFetch( .read() .then(({ done, value }) => { if (done) { - controller.close(); + controller?.close(); return; } // loaded += value.byteLength; // const progress = (loaded / total) * 100; // console.log(`Progress: ${progress.toFixed(2)}%`); - controller.enqueue(value); + controller?.enqueue(value); push(); }) .catch((error) => {