feat:临时关闭登录功能
This commit is contained in:
24
app/page.jsx
24
app/page.jsx
@@ -472,7 +472,7 @@ function Stat({ label, value, delta }) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function FeedbackModal({ onClose }) {
|
function FeedbackModal({ onClose, user }) {
|
||||||
const [submitting, setSubmitting] = useState(false);
|
const [submitting, setSubmitting] = useState(false);
|
||||||
const [succeeded, setSucceeded] = useState(false);
|
const [succeeded, setSucceeded] = useState(false);
|
||||||
const [error, setError] = useState("");
|
const [error, setError] = useState("");
|
||||||
@@ -563,7 +563,7 @@ function FeedbackModal({ onClose }) {
|
|||||||
style={{ width: '100%' }}
|
style={{ width: '100%' }}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<input type="hidden" name="email" value={user?.email || ''} />
|
||||||
<div className="form-group" style={{ marginBottom: 20 }}>
|
<div className="form-group" style={{ marginBottom: 20 }}>
|
||||||
<label htmlFor="message" className="muted" style={{ display: 'block', marginBottom: 8, fontSize: '14px' }}>
|
<label htmlFor="message" className="muted" style={{ display: 'block', marginBottom: 8, fontSize: '14px' }}>
|
||||||
反馈内容
|
反馈内容
|
||||||
@@ -1858,6 +1858,11 @@ export default function HomePage() {
|
|||||||
const [latestVersion, setLatestVersion] = useState('');
|
const [latestVersion, setLatestVersion] = useState('');
|
||||||
const [updateContent, setUpdateContent] = useState('');
|
const [updateContent, setUpdateContent] = useState('');
|
||||||
|
|
||||||
|
// FIXME 强制登出
|
||||||
|
useLayoutEffect(() => {
|
||||||
|
handleLogout();
|
||||||
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const checkUpdate = async () => {
|
const checkUpdate = async () => {
|
||||||
try {
|
try {
|
||||||
@@ -3225,7 +3230,6 @@ export default function HomePage() {
|
|||||||
}))
|
}))
|
||||||
: [];
|
: [];
|
||||||
return {
|
return {
|
||||||
version: 1,
|
|
||||||
funds,
|
funds,
|
||||||
favorites: cleanedFavorites,
|
favorites: cleanedFavorites,
|
||||||
groups: cleanedGroups,
|
groups: cleanedGroups,
|
||||||
@@ -3236,7 +3240,6 @@ export default function HomePage() {
|
|||||||
};
|
};
|
||||||
} catch {
|
} catch {
|
||||||
return {
|
return {
|
||||||
version: 1,
|
|
||||||
funds: [],
|
funds: [],
|
||||||
favorites: [],
|
favorites: [],
|
||||||
groups: [],
|
groups: [],
|
||||||
@@ -3367,13 +3370,11 @@ export default function HomePage() {
|
|||||||
const exportLocalData = async () => {
|
const exportLocalData = async () => {
|
||||||
try {
|
try {
|
||||||
const payload = {
|
const payload = {
|
||||||
version: 1,
|
|
||||||
funds: JSON.parse(localStorage.getItem('funds') || '[]'),
|
funds: JSON.parse(localStorage.getItem('funds') || '[]'),
|
||||||
favorites: JSON.parse(localStorage.getItem('favorites') || '[]'),
|
favorites: JSON.parse(localStorage.getItem('favorites') || '[]'),
|
||||||
groups: JSON.parse(localStorage.getItem('groups') || '[]'),
|
groups: JSON.parse(localStorage.getItem('groups') || '[]'),
|
||||||
collapsedCodes: JSON.parse(localStorage.getItem('collapsedCodes') || '[]'),
|
collapsedCodes: JSON.parse(localStorage.getItem('collapsedCodes') || '[]'),
|
||||||
refreshMs: parseInt(localStorage.getItem('refreshMs') || '30000', 10),
|
refreshMs: parseInt(localStorage.getItem('refreshMs') || '30000', 10),
|
||||||
viewMode,
|
|
||||||
holdings: JSON.parse(localStorage.getItem('holdings') || '{}'),
|
holdings: JSON.parse(localStorage.getItem('holdings') || '{}'),
|
||||||
exportedAt: new Date().toISOString()
|
exportedAt: new Date().toISOString()
|
||||||
};
|
};
|
||||||
@@ -3605,8 +3606,16 @@ export default function HomePage() {
|
|||||||
>
|
>
|
||||||
<RefreshIcon className={refreshing ? 'spin' : ''} width="18" height="18" />
|
<RefreshIcon className={refreshing ? 'spin' : ''} width="18" height="18" />
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
className="icon-button"
|
||||||
|
aria-label="打开设置"
|
||||||
|
onClick={() => setSettingsOpen(true)}
|
||||||
|
title="设置"
|
||||||
|
>
|
||||||
|
<SettingsIcon width="18" height="18" />
|
||||||
|
</button>
|
||||||
{/* 用户菜单 */}
|
{/* 用户菜单 */}
|
||||||
<div className="user-menu-container" ref={userMenuRef}>
|
<div className="user-menu-container" ref={userMenuRef} hidden>
|
||||||
<button
|
<button
|
||||||
className={`icon-button user-menu-trigger ${user ? 'logged-in' : ''}`}
|
className={`icon-button user-menu-trigger ${user ? 'logged-in' : ''}`}
|
||||||
aria-label={user ? '用户菜单' : '登录'}
|
aria-label={user ? '用户菜单' : '登录'}
|
||||||
@@ -4600,6 +4609,7 @@ export default function HomePage() {
|
|||||||
<FeedbackModal
|
<FeedbackModal
|
||||||
key={feedbackNonce}
|
key={feedbackNonce}
|
||||||
onClose={() => setFeedbackOpen(false)}
|
onClose={() => setFeedbackOpen(false)}
|
||||||
|
user={user}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</AnimatePresence>
|
</AnimatePresence>
|
||||||
|
|||||||
Reference in New Issue
Block a user