diff --git a/web/src/views/AboutView.vue b/web/src/views/AboutView.vue index a2453af..15b9214 100644 --- a/web/src/views/AboutView.vue +++ b/web/src/views/AboutView.vue @@ -1,5 +1,5 @@ @@ -81,17 +154,27 @@ import { onMounted, ref } from 'vue' import { NButton, NIcon, useMessage } from 'naive-ui' import { - CheckmarkCircleOutline, + CloudDownloadOutline, CloudOutline, DocumentTextOutline, + GitNetworkOutline, + GridOutline, + HardwareChipOutline, + LockClosedOutline, LogoGithub, RefreshOutline, + ShieldCheckmarkOutline, + SwapHorizontalOutline, } from '@vicons/ionicons5' import { api } from '../api/client' +import brandLogo from '../assets/brand/havline-logo.svg' import HavlineCard from '../components/HavlineCard.vue' import PageHeader from '../components/PageHeader.vue' -import StatCard from '../components/StatCard.vue' -import { GITHUB_REPO, GITHUB_REPO_URL } from '../constants/app' +import { + GITHUB_RELEASES_URL, + GITHUB_REPO, + GITHUB_REPO_URL, +} from '../constants/app' import { formatDate } from '../utils/format' const GPL_URL = 'https://www.gnu.org/licenses/gpl-3.0.html' @@ -99,17 +182,63 @@ const message = useMessage() const version = ref(__APP_VERSION__) const checkedAt = ref('') const refreshing = ref(false) -const stack = [ - 'Go 1.23', - 'Vue 3', - 'TypeScript', - 'Vite', - 'Naive UI', - 'ECharts', - 'SQLite', - 'Nginx', - 'FRP', - 'Cloudflare Tunnel', + +const features = [ + { + title: '反向代理', + description: '通过 Web 界面管理 Nginx 域名与端口规则,自动生成配置并热重载。', + icon: SwapHorizontalOutline, + }, + { + title: 'DDNS', + description: '对接 Cloudflare、DNSPod、阿里云、腾讯云和火山引擎,自动同步公网 IP。', + icon: CloudOutline, + }, + { + title: 'HTTPS 证书', + description: '使用 ACME DNS-01 自动申请与续期证书,支持通配符和手动导入。', + icon: LockClosedOutline, + }, + { + title: '内网穿透', + description: '内置 FRP 多服务端管理,在没有公网 IP 时把服务安全暴露到 VPS。', + icon: GitNetworkOutline, + }, + { + title: '公网 Agent', + description: '通过 SSH 安装和维护 VPS 上的 havline-agent,远程编排 frps 与 Nginx。', + icon: HardwareChipOutline, + }, + { + title: 'Cloudflare Tunnel', + description: '管理 cloudflared 隧道、路由与 DNS,适合不愿意开放公网端口的场景。', + icon: CloudOutline, + }, + { + title: '日志与监控', + description: '查看系统、访问和错误日志,观察流量趋势、服务状态与运行健康度。', + icon: GridOutline, + }, + { + title: '安全与备份', + description: '提供访问控制、凭据加密、配置备份和恢复,降低误操作与数据丢失风险。', + icon: ShieldCheckmarkOutline, + }, +] + +const techGroups = [ + { + title: '后端', + items: ['Go 1.23', 'SQLite', 'Nginx', 'FRP', 'ACME / lego'], + }, + { + title: '前端', + items: ['Vue 3', 'TypeScript', 'Vite', 'Naive UI', 'ECharts'], + }, + { + title: '部署', + items: ['Docker', 'Docker Compose', 'Linux systemd', 'amd64 / arm64'], + }, ] async function refreshVersion() { @@ -131,45 +260,72 @@ onMounted(() => {