From b00cacd4609140f4af74ad524e227fe28e4b3d12 Mon Sep 17 00:00:00 2001 From: yanweidong Date: Tue, 21 Jul 2026 11:32:31 +0800 Subject: [PATCH] feat: add footer profile and upgrade dialogs --- apps/web_v1/src/App.css | 72 +++++++++- .../src/pages/projects/project-statusbar.tsx | 123 ++++++++++++++---- 2 files changed, 166 insertions(+), 29 deletions(-) diff --git a/apps/web_v1/src/App.css b/apps/web_v1/src/App.css index 80afd6e..935c949 100644 --- a/apps/web_v1/src/App.css +++ b/apps/web_v1/src/App.css @@ -1893,9 +1893,9 @@ .statusbar { height: 32px; display: grid; - grid-template-columns: minmax(310px, 0.9fr) minmax(480px, 1.2fr) minmax(320px, 0.9fr); + grid-template-columns: minmax(180px, auto) minmax(0, 1fr); align-items: center; - gap: 16px; + gap: 20px; padding: 0 16px; border-top: 1px solid rgba(255, 255, 255, 0.12); background: var(--senlin-status); @@ -1917,6 +1917,18 @@ white-space: nowrap; } +.status-user { + border: 0; + background: transparent; + color: rgba(255, 255, 255, 0.86); + padding: 0; + cursor: pointer; +} + +.status-user:hover .status-name { + color: #fff; +} + .status-tasks { justify-content: center; } @@ -1931,6 +1943,7 @@ .status-system { justify-content: flex-end; + overflow: hidden; } .status-name { @@ -1959,6 +1972,61 @@ color: #7be188; } +.status-upgrade.arco-btn { + height: 22px; + padding: 0 10px; + border-radius: 999px; + font-size: 12px; +} + +.status-modal-form { + margin-top: 8px; +} + +.billing-plan-group { + width: 100%; + display: grid; + gap: 10px; +} + +.billing-plan.arco-card { + cursor: pointer; + border-radius: 8px; +} + +.billing-plan.active.arco-card { + border-color: var(--senlin-primary); + background: var(--senlin-soft-blue); +} + +.billing-plan .arco-card-body { + padding: 12px; +} + +.billing-plan .arco-radio { + width: 100%; + align-items: flex-start; +} + +.billing-plan h6 { + margin: 0 0 4px; +} + +.billing-price { + display: block; + margin-bottom: 4px; + color: var(--senlin-primary); + font-weight: 700; +} + +.billing-payments { + display: grid; + gap: 10px; + margin-top: 16px; + border-top: 1px solid var(--senlin-border); + padding-top: 14px; +} + @media (max-width: 1180px) { .workbench-shell { min-width: 1180px; diff --git a/apps/web_v1/src/pages/projects/project-statusbar.tsx b/apps/web_v1/src/pages/projects/project-statusbar.tsx index e00a464..b076eea 100644 --- a/apps/web_v1/src/pages/projects/project-statusbar.tsx +++ b/apps/web_v1/src/pages/projects/project-statusbar.tsx @@ -1,44 +1,113 @@ -import { Avatar, Button, Layout, Space, Typography } from '@arco-design/web-react' +import { useState } from 'react' +import { Avatar, Button, Card, Form, Input, Layout, Modal, Radio, Space, Typography } from '@arco-design/web-react' import { IconApps, IconCalendar, IconCheckCircleFill, - IconMessage, IconRobot, - IconSettings, IconStorage, IconThunderbolt, - IconUserGroup, + IconUser, } from '@arco-design/web-react/icon' const { Footer } = Layout -const { Text } = Typography +const { Text, Title } = Typography + +const plans = [ + { id: 'starter', name: '基础版', price: '¥29/月', desc: '个人项目、基础智能体与 20GB 存储。' }, + { id: 'pro', name: '专业版', price: '¥99/月', desc: '团队协作、高级智能体与 200GB 存储。' }, + { id: 'team', name: '团队版', price: '¥299/月', desc: '成员管理、审计日志与私有化部署支持。' }, +] export function ProjectStatusbar() { + const [profileOpen, setProfileOpen] = useState(false) + const [upgradeOpen, setUpgradeOpen] = useState(false) + const [selectedPlan, setSelectedPlan] = useState('pro') + return ( - + + ) }