diff --git a/app/assets/weChatGroup.png b/app/assets/weChatGroup.png new file mode 100644 index 0000000..06fd563 Binary files /dev/null and b/app/assets/weChatGroup.png differ diff --git a/app/page.jsx b/app/page.jsx index 79154a0..b13598d 100644 --- a/app/page.jsx +++ b/app/page.jsx @@ -11,6 +11,7 @@ import Announcement from "./components/Announcement"; import { DatePicker, DonateTabs, NumericInput, Stat } from "./components/Common"; import { ChevronIcon, CloseIcon, CloudIcon, DragIcon, ExitIcon, GridIcon, ListIcon, LoginIcon, LogoutIcon, MailIcon, PlusIcon, RefreshIcon, SettingsIcon, SortIcon, StarIcon, TrashIcon, UpdateIcon, UserIcon } from "./components/Icons"; import githubImg from "./assets/github.svg"; +import weChatGroupImg from "./assets/weChatGroup.png"; import { supabase, isSupabaseConfigured } from './lib/supabase'; import { fetchFundData, fetchLatestRelease, fetchShanghaiIndexDate, fetchSmartFundNetValue, searchFunds, submitFeedback } from './api/fund'; import packageJson from '../package.json'; @@ -24,7 +25,7 @@ const nowInTz = () => dayjs().tz(TZ); const toTz = (input) => (input ? dayjs.tz(input, TZ) : nowInTz()); const formatDate = (input) => toTz(input).format('YYYY-MM-DD'); -function FeedbackModal({ onClose, user }) { +function FeedbackModal({ onClose, user, onOpenWeChat }) { const [submitting, setSubmitting] = useState(false); const [succeeded, setSucceeded] = useState(false); const [error, setError] = useState(""); @@ -148,6 +149,16 @@ function FeedbackModal({ onClose, user }) { 区留言互动

+

+ 或加入我们的 + + 微信用户交流群 + +

)} @@ -156,6 +167,46 @@ function FeedbackModal({ onClose, user }) { ); } +function WeChatModal({ onClose }) { + return ( + + e.stopPropagation()} + style={{ maxWidth: '360px', padding: '24px' }} + > +
+
+ 💬 微信用户交流群 +
+ +
+
+ WeChat Group +
+

+ 扫码加入群聊,获取最新更新与交流 +

+
+
+ ); +} + function HoldingActionModal({ fund, onClose, onAction }) { return ( { @@ -4545,9 +4599,15 @@ export default function HomePage() { key={feedbackNonce} onClose={() => setFeedbackOpen(false)} user={user} + onOpenWeChat={() => setWeChatOpen(true)} /> )} + + {weChatOpen && ( + setWeChatOpen(false)} /> + )} + {addResultOpen && (