feat: 接口错误处理

This commit is contained in:
“张嘉宁” 2023-04-03 10:44:47 +08:00
parent 0e58843896
commit f6e393b3d2
1 changed files with 124 additions and 112 deletions

View File

@ -608,7 +608,8 @@ export function Home() {
// setting // setting
const [openSettings, setOpenSettings] = useState(false); const [openSettings, setOpenSettings] = useState(false);
const config = useChatStore((state) => state.config); const config = useChatStore((state) => state.config);
const [isAllow, setIsAllow] = useState(true); const [isAllow, setIsAllow] = useState(true); // 白名单状态
const [isRequestErr, setIsRequestErr] = useState(false); // 接口报错状态
useEffect(() => { useEffect(() => {
const urlParams = new URLSearchParams(window.location.search); const urlParams = new URLSearchParams(window.location.search);
@ -620,44 +621,46 @@ export function Home() {
const { code, msg } = data; const { code, msg } = data;
setIsAllow(code === 0); setIsAllow(code === 0);
}) })
.catch((error) => console.error(error)); // 接口错误处理
.catch((error) => {
setIsAllow(false);
setIsRequestErr(true);
console.error(error);
});
}, []); }, []);
//const isWorkWechat = () => { //const isWorkWechat = () => {
//获取user-agaent标识头 //获取user-agaent标识头
// const ua = window.navigator.userAgent.toLowerCase(); // const ua = window.navigator.userAgent.toLowerCase();
//判断ua和微信浏览器的标识头是否匹配 //判断ua和微信浏览器的标识头是否匹配
// if ( // if (
// ua.match(/micromessenger/i) == "micromessenger" && // ua.match(/micromessenger/i) == "micromessenger" &&
// ua.match(/wxwork/i) == "wxwork" // ua.match(/wxwork/i) == "wxwork"
//) { //) {
// return true; // return true;
//} else { //} else {
// return false; // return false;
//} //}
//}; //};
const isWorkWechat = () => { const isWorkWechat = () => {
// 获取user-agent标识头 // 获取user-agent标识头
const userAgent = window.navigator.userAgent; const userAgent = window.navigator.userAgent;
// 检查userAgent是否为null或undefined // 检查userAgent是否为null或undefined
if (!userAgent) { if (!userAgent) {
return false; return false;
} }
// 转换为小写 // 转换为小写
const ua = userAgent.toLowerCase(); const ua = userAgent.toLowerCase();
// 判断ua和微信浏览器的标识头是否匹配 // 判断ua和微信浏览器的标识头是否匹配
if ( if (/micromessenger/i.test(ua) && /wxwork/i.test(ua)) {
/micromessenger/i.test(ua) && return true;
/wxwork/i.test(ua) } else {
) { return false;
return true; }
} else { };
return false;
}
};
useSwitchTheme(); useSwitchTheme();
@ -677,100 +680,109 @@ const isWorkWechat = () => {
: styles.container : styles.container
}`} }`}
> >
{!isWorkWechat() ? ( {
<h2 className="not-wx-work">使ChatGPT</h2> // 接口报错
) : typeof isAllow === "boolean" && !isAllow ? ( isRequestErr ? (
<h2 className="not-allow"> <h2>~</h2>
<span className="text">使Gpt~</span> ) : // 不在企业微信
<span onClick={goApply} className={styles["button"]}> !isWorkWechat() ? (
<h2 className="not-wx-work">使ChatGPT</h2>
</span> ) : // 不在白名单
</h2> !isAllow ? (
) : ( <h2 className="not-allow">
<> <span className="text">使Gpt~</span>
<div <span onClick={goApply} className={styles["button"]}>
className={
styles.sidebar + ` ${showSideBar && styles["sidebar-show"]}` </span>
} </h2>
> ) : (
<div className={styles["sidebar-header"]}> <>
<div className={styles["sidebar-title"]}>ChatGPT Next</div>
<div className={styles["sidebar-sub-title"]}>
Build your own AI assistant.
</div>
<div className={styles["sidebar-logo"]}>
<ChatGptIcon />
</div>
</div>
<div <div
className={styles["sidebar-body"]} className={
onClick={() => { styles.sidebar + ` ${showSideBar && styles["sidebar-show"]}`
setOpenSettings(false); }
setShowSideBar(false);
}}
> >
<ChatList /> <div className={styles["sidebar-header"]}>
</div> <div className={styles["sidebar-title"]}>ChatGPT Next</div>
<div className={styles["sidebar-sub-title"]}>
<div className={styles["sidebar-tail"]}> Build your own AI assistant.
<div className={styles["sidebar-actions"]}>
<div className={styles["sidebar-action"] + " " + styles.mobile}>
<IconButton
icon={<CloseIcon />}
onClick={() => {
if (confirm(Locale.Home.DeleteChat)) {
removeSession(currentIndex);
}
}}
/>
</div> </div>
<div className={styles["sidebar-action"]}> <div className={styles["sidebar-logo"]}>
<ChatGptIcon />
</div>
</div>
<div
className={styles["sidebar-body"]}
onClick={() => {
setOpenSettings(false);
setShowSideBar(false);
}}
>
<ChatList />
</div>
<div className={styles["sidebar-tail"]}>
<div className={styles["sidebar-actions"]}>
<div
className={styles["sidebar-action"] + " " + styles.mobile}
>
<IconButton
icon={<CloseIcon />}
onClick={() => {
if (confirm(Locale.Home.DeleteChat)) {
removeSession(currentIndex);
}
}}
/>
</div>
<div className={styles["sidebar-action"]}>
<IconButton
icon={<SettingsIcon />}
onClick={() => {
setOpenSettings(true);
setShowSideBar(false);
}}
/>
</div>
<div className={styles["sidebar-action"]}>
<a href={REPO_URL} target="_blank">
<IconButton icon={<GithubIcon />} />
</a>
</div>
</div>
<div>
<IconButton <IconButton
icon={<SettingsIcon />} icon={<AddIcon />}
text={Locale.Home.NewChat}
onClick={() => { onClick={() => {
setOpenSettings(true); createNewSession();
setShowSideBar(false); setShowSideBar(false);
}} }}
/> />
</div> </div>
<div className={styles["sidebar-action"]}>
<a href={REPO_URL} target="_blank">
<IconButton icon={<GithubIcon />} />
</a>
</div>
</div>
<div>
<IconButton
icon={<AddIcon />}
text={Locale.Home.NewChat}
onClick={() => {
createNewSession();
setShowSideBar(false);
}}
/>
</div> </div>
</div> </div>
</div>
<div className={styles["window-content"]}> <div className={styles["window-content"]}>
{openSettings ? ( {openSettings ? (
<Settings <Settings
closeSettings={() => { closeSettings={() => {
setOpenSettings(false); setOpenSettings(false);
setShowSideBar(true); setShowSideBar(true);
}} }}
/> />
) : ( ) : (
<Chat <Chat
key="chat" key="chat"
showSideBar={() => setShowSideBar(true)} showSideBar={() => setShowSideBar(true)}
sideBarShowing={showSideBar} sideBarShowing={showSideBar}
/> />
)} )}
</div> </div>
</> </>
)} )
}
</div> </div>
); );
} }