diff --git a/components/LicenseInfo.tsx b/components/LicenseInfo.tsx index d95ac6f..c5ba103 100644 --- a/components/LicenseInfo.tsx +++ b/components/LicenseInfo.tsx @@ -2,6 +2,7 @@ import { useEffect, useState } from 'react'; import ActivationModal from './ui/ActivationModal'; +import { cn } from '@/lib/ui-styles'; interface LicenseData { type: 'FREE' | 'STANDARD' | 'PRO'; @@ -22,7 +23,7 @@ interface LicenseData { } const LICENSE_TYPE_NAMES = { - FREE: '免费版', + FREE: '基础版', STANDARD: '标准版', PRO: '专业版', }; @@ -33,6 +34,18 @@ const STATUS_NAMES = { grace: '宽限期', }; +const LICENSE_TYPE_BADGE_CLASSES: Record = { + FREE: 'border-slate-200 bg-slate-50 text-slate-700 dark:border-slate-700 dark:bg-slate-900 dark:text-slate-300', + STANDARD: 'border-slate-300 bg-white text-slate-800 dark:border-slate-600 dark:bg-slate-800 dark:text-slate-200', + PRO: 'border-slate-400 bg-slate-100 text-slate-900 dark:border-slate-500 dark:bg-slate-700 dark:text-slate-100', +}; + +const STATUS_BADGE_CLASSES: Record = { + active: 'border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900/70 dark:bg-emerald-950/40 dark:text-emerald-300', + expired: 'border-red-200 bg-red-50 text-red-700 dark:border-red-900/70 dark:bg-red-950/40 dark:text-red-300', + grace: 'border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-900/70 dark:bg-amber-950/40 dark:text-amber-300', +}; + export default function LicenseInfo() { const [license, setLicense] = useState(null); const [loading, setLoading] = useState(true); @@ -100,24 +113,18 @@ export default function LicenseInfo() {
{LICENSE_TYPE_NAMES[license.type]} {STATUS_NAMES[license.status]} @@ -129,7 +136,7 @@ export default function LicenseInfo() { {isExpiringSoon && license.expiresAt && (

- ⚠️ 许可证将于 {new Date(license.expiresAt).toLocaleDateString()} 到期,请及时续期 + 许可证将于 {new Date(license.expiresAt).toLocaleDateString()} 到期,请联系管理员处理续期

)} @@ -147,12 +154,12 @@ export default function LicenseInfo() {
{license.usage.users.max !== -1 && ( -
+
0.9 ? 'bg-red-500' - : 'bg-blue-500' + : 'bg-slate-500' }`} style={{ width: `${Math.min(100, (license.usage.users.current / license.usage.users.max) * 100)}%`, @@ -171,12 +178,12 @@ export default function LicenseInfo() {
{license.usage.materials.max !== -1 && ( -
+
0.9 ? 'bg-red-500' - : 'bg-blue-500' + : 'bg-slate-500' }`} style={{ width: `${Math.min(100, (license.usage.materials.current / license.usage.materials.max) * 100)}%`, @@ -203,16 +210,13 @@ export default function LicenseInfo() {
- +

+ 如需调整授权范围,请联系系统管理员或交付人员。 +

)} @@ -231,9 +235,9 @@ function FeatureItem({ label, enabled }: { label: string; enabled: boolean }) {
{label} {enabled ? ( - ✓ + 已启用 ) : ( - ✗ + 未启用 )}
); diff --git a/docs/商业化地基排查问题清单_20260524.md b/docs/商业化地基排查问题清单_20260524.md index 5a565d3..80ffa5c 100644 --- a/docs/商业化地基排查问题清单_20260524.md +++ b/docs/商业化地基排查问题清单_20260524.md @@ -1133,6 +1133,7 @@ NAS 私有化系统可能在平板或窄屏浏览器里使用。模板编辑器 - `components/ui/RestrictedToggle.tsx`:受限开关提示已改为“当前许可证未包含此功能”。 - `components/ui/ActivationModal.tsx`:手动激活弹窗已移除“前往购买”官网跳转,改为联系系统交付人员或管理员;弹窗和输入控件同步收为普通圆角、轻阴影和中性色按钮。 - `components/ui/StorageEditConfirmModal.tsx`:对象存储编辑二次确认弹窗已从大圆角、重阴影和蓝紫焦点态收为普通安全确认表单。 +- `components/LicenseInfo.tsx`:许可证信息面板已去掉紫色/蓝色胶囊标签、emoji 到期提醒和“购买授权”官网外链,改为中性状态标签、矩形使用量条和“联系系统管理员或交付人员”的私有化交付口径。 - `lib/license/check-limits.ts`:用户数和素材数超限提示已改为联系管理员处理授权。 - `app/api/admin/upload-templates/route.ts`、`app/api/admin/upload-templates/[id]/route.ts`、`app/api/admin/upload-templates/[id]/migrate/route.ts`、`app/api/departments/route.ts`、`app/api/system-settings/route.ts`:授权不足错误已统一成私有化口径。 - `components/ui/ProBadge.tsx`:PRO 徽章已改为中性许可证标签,不再使用胶囊圆角、阴影或渐变展示感。 @@ -1144,6 +1145,7 @@ NAS 私有化系统可能在平板或窄屏浏览器里使用。模板编辑器 - 已完成:通用授权弹窗不再展示营销化“升级好处”。 - 已完成:手动激活入口不再引导客户跳官网购买。 - 已完成:PRO 徽章改为中性许可证标签,不用紫蓝渐变、胶囊圆角和阴影。 +- 已完成:许可证信息面板不再提供“购买授权”跳转,授权调整统一提示联系系统管理员或交付人员。 ### P2-12 登录、激活、回调页风格和后台不统一