From 4d163c7676c9f5e5707198a382ee89b4ee61764d Mon Sep 17 00:00:00 2001 From: linkeyu <798648091@qq.com> Date: Wed, 29 Jul 2026 19:06:57 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=9A=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E7=BB=9F=E4=B8=80=E9=99=90=E5=88=B6=E7=99=BD=E5=90=8D?= =?UTF-8?q?=E5=8D=95=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增全局限制分组管理、多限制项临时不限白名单、设备搜索选择和风控记录快捷加入入口,并同步引导视频配置展示。 --- src/app/(main)/config/GuideVideoConfig.tsx | 116 ++- src/app/(main)/layout.tsx | 2 + src/app/(main)/limit-whitelist/page.tsx | 1024 ++++++++++++++++++++ src/app/(main)/risk-monitor/page.tsx | 77 +- src/lib/types.ts | 66 +- 5 files changed, 1258 insertions(+), 27 deletions(-) create mode 100644 src/app/(main)/limit-whitelist/page.tsx diff --git a/src/app/(main)/config/GuideVideoConfig.tsx b/src/app/(main)/config/GuideVideoConfig.tsx index 706a636..cb721fd 100644 --- a/src/app/(main)/config/GuideVideoConfig.tsx +++ b/src/app/(main)/config/GuideVideoConfig.tsx @@ -1,7 +1,18 @@ 'use client'; import { useEffect, useState } from 'react'; -import { Button, Card, InputNumber, Space, Spin, Switch, Tag, Typography, Upload, message } from 'antd'; +import { + Button, + Card, + InputNumber, + Space, + Spin, + Switch, + Tag, + Typography, + Upload, + message, +} from 'antd'; import { DeleteOutlined, UploadOutlined } from '@ant-design/icons'; import { api, errMsg } from '@/lib/api'; import { canDo } from '@/lib/auth'; @@ -38,7 +49,9 @@ function SceneConfig({ scene }: { scene: Scene }) { const load = async () => { setLoading(true); try { - const { data } = await api.get('/admin/api/guide-video', { params: { scene } }); + const { data } = await api.get('/admin/api/guide-video', { + params: { scene }, + }); sync(data); } catch (e) { message.error(errMsg(e)); @@ -56,7 +69,11 @@ function SceneConfig({ scene }: { scene: Scene }) { try { const { data } = await api.patch( '/admin/api/guide-video', - { enabled, max_plays: maxPlays, reward_coin: rewardCoin }, + { + enabled, + reward_coin: rewardCoin, + ...(scene === 'comparison' ? { max_plays: maxPlays } : {}), + }, { params: { scene } }, ); sync(data); @@ -121,11 +138,20 @@ function SceneConfig({ scene }: { scene: Scene }) { size="small" title={meta.title} style={{ marginBottom: 16 }} - extra={cfg?.updated_at ? 更新于 {new Date(cfg.updated_at).toLocaleString('zh-CN')} : null} + extra={ + cfg?.updated_at ? ( + + 更新于 {new Date(cfg.updated_at).toLocaleString('zh-CN')} + + ) : null + } >

- Android 用户点击「{meta.action}」后,前若干次在等候浮层广告位播放本视频并奖励金币。 - 次数按账号、按功能分别计算;开播即计次,播完或中途关闭均发放当次配置的金币。 + Android 用户点击「{meta.action}」后,前 {cfg?.max_plays ?? 3}{' '} + 次在等候浮层广告位播放本视频并奖励金币。次数按账号、按功能分别计算; + 开播即计次,播完或中途关闭均发放当次配置的金币。 + {scene === 'coupon' && + '领券引导视频的播放次数上限请在「监控审计 → 白名单」中调整。'}

{loading || !cfg ? ( @@ -137,10 +163,24 @@ function SceneConfig({ scene }: { scene: Scene }) {