feat(home): 简介与视频前置、侧栏 Win/安卓直链;后台与 API 默认中文
Made-with: Cursor
This commit is contained in:
@@ -17,13 +17,13 @@
|
||||
<el-form v-if="siteId" ref="formRef" :model="form" label-width="120px" class="homepage-form">
|
||||
<el-divider content-position="left">导航与标题</el-divider>
|
||||
<el-form-item label="Logo 文案">
|
||||
<el-input v-model="form.logo_text" placeholder="YUHENG ONE" />
|
||||
<el-input v-model="form.logo_text" placeholder="宇恒一号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主标题">
|
||||
<el-input v-model="form.title" placeholder="宇恒一号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="副标题">
|
||||
<el-input v-model="form.subtitle" placeholder="INTERSTELLAR EXPLORER EDITION" />
|
||||
<el-input v-model="form.subtitle" placeholder="可选,前台大标题区已精简" />
|
||||
</el-form-item>
|
||||
<el-form-item label="描述">
|
||||
<el-input v-model="form.description" type="textarea" :rows="3" placeholder="支持换行,会显示在首页" />
|
||||
@@ -50,51 +50,46 @@
|
||||
<el-button link type="primary" @click="form.nav_links.push({ label: '', url: '#' })">+ 添加链接</el-button>
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left">下载按钮</el-divider>
|
||||
<el-form-item label="按钮文案">
|
||||
<el-input v-model="form.download_text" placeholder="START EXPLORING" />
|
||||
<el-divider content-position="left">侧栏下载(Windows / 安卓直链)</el-divider>
|
||||
<p class="builder-tip" style="margin: -6px 0 12px">
|
||||
填写同域可下载的静态地址(需将安装包放到站点 <code>promotion/downloads/</code> 并部署)。前台为「Windows 版下载」「安卓版下载」直连,不跳转整页。
|
||||
</p>
|
||||
<el-form-item label="Windows 安装包">
|
||||
<el-input v-model="form.download_windows_url" placeholder="/promotion/downloads/yuheng-windows.zip" />
|
||||
</el-form-item>
|
||||
<el-form-item label="按钮链接">
|
||||
<el-form-item label="安卓安装包">
|
||||
<el-input v-model="form.download_android_url" placeholder="/promotion/downloads/yuheng-android.apk" />
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left">旧版字段(前台 Vue 已不使用轨道路由)</el-divider>
|
||||
<el-form-item label="下载按钮文案">
|
||||
<el-input v-model="form.download_text" placeholder="下载" />
|
||||
</el-form-item>
|
||||
<el-form-item label="下载按钮链接">
|
||||
<div style="display: flex; gap: 8px; align-items: center; flex-wrap: wrap; width: 100%">
|
||||
<el-input v-model="form.download_url" placeholder="#" style="flex: 1; min-width: 200px" />
|
||||
<el-button type="primary" link @click="openLinkPicker({ type: 'download' })">选择链接</el-button>
|
||||
<el-link
|
||||
v-if="previewReady(form.download_url)"
|
||||
type="primary"
|
||||
:href="previewHref(form.download_url)"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>试跳</el-link>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left">平台(轨道)</el-divider>
|
||||
<el-form-item label="平台列表">
|
||||
<el-form-item label="平台轨道(可选)">
|
||||
<div v-for="(p, i) in form.platforms" :key="i" style="display: flex; gap: 8px; margin-bottom: 8px; align-items: center">
|
||||
<el-input v-model="p.name" placeholder="如 WINDOWS" style="width: 140px" />
|
||||
<el-input v-model="p.name" placeholder="名称" style="width: 140px" />
|
||||
<el-input v-model="p.url" placeholder="链接" style="flex: 1; min-width: 140px" />
|
||||
<el-button type="primary" link @click="openLinkPicker({ type: 'platform', index: i })">选择链接</el-button>
|
||||
<el-link
|
||||
v-if="previewReady(p.url)"
|
||||
type="primary"
|
||||
:href="previewHref(p.url)"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>试跳</el-link>
|
||||
<el-button link type="danger" @click="form.platforms.splice(i, 1)">删除</el-button>
|
||||
</div>
|
||||
<el-button link type="primary" @click="form.platforms.push({ name: '', url: '#' })">+ 添加平台</el-button>
|
||||
<el-button link type="primary" @click="form.platforms.push({ name: '', url: '#' })">+ 添加</el-button>
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left">版本与徽章</el-divider>
|
||||
<el-divider content-position="left">版本与徽章(前台已隐藏主视觉条,可留空)</el-divider>
|
||||
<el-form-item label="版本">
|
||||
<el-input v-model="form.version" placeholder="VERSION 3.2.1" style="width: 200px" />
|
||||
<el-input v-model="form.version" placeholder="可留空" style="width: 200px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发射年份">
|
||||
<el-input v-model="form.launch_year" placeholder="LAUNCH: 2024" style="width: 200px" />
|
||||
<el-form-item label="发布说明">
|
||||
<el-input v-model="form.launch_year" placeholder="发布日期:以官网为准" style="width: 200px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="徽章文案">
|
||||
<el-input v-model="form.badge_text" placeholder="FREE ACCESS" style="width: 200px" />
|
||||
<el-input v-model="form.badge_text" placeholder="完全免费" style="width: 200px" />
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left">特性卡片</el-divider>
|
||||
@@ -108,12 +103,12 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="页脚文案">
|
||||
<el-input v-model="form.footer_text" placeholder="© 2024 YUHENG ONE" />
|
||||
<el-input v-model="form.footer_text" placeholder="© 2024 宇恒一号 · 成都宇信达智能科技有限公司" />
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left">首页下方扩展区(可视化积木,可拖拽排序)</el-divider>
|
||||
<p class="builder-tip">
|
||||
与「网页管理 → 积木」相同:从左侧手柄拖拽调整模块顺序。保存后内容显示在落地页主视觉与特性卡片<strong>之后</strong>、页脚之前。留空则不显示扩展区。
|
||||
与「网页管理 → 积木」相同:从左侧手柄拖拽调整模块顺序。保存后内容显示在落地页主体模块<strong>之后</strong>、页脚之前。留空则不显示扩展区。
|
||||
</p>
|
||||
<el-form-item label="扩展积木" class="builder-form-item homepage-builder-wrap">
|
||||
<PageBuilderEditor v-model="form.body_builder" :site-id="siteId" />
|
||||
@@ -149,29 +144,29 @@ const linkPickerVisible = ref(false)
|
||||
const linkPickTarget = ref({ type: 'download' })
|
||||
|
||||
const defaultForm = () => ({
|
||||
logo_text: 'YUHENG ONE',
|
||||
nav_links: [{ label: 'MISSION', url: '#' }, { label: 'DOWNLOAD', url: '#' }, { label: 'CONTACT', url: '#' }],
|
||||
title: '宇恒一号',
|
||||
subtitle: 'INTERSTELLAR EXPLORER EDITION',
|
||||
description: '跨越星际的智能伙伴 · 探索无限可能\n引领您进入前所未有的数字宇宙',
|
||||
download_text: 'START EXPLORING',
|
||||
download_url: '#',
|
||||
platforms: [
|
||||
{ name: 'WINDOWS', url: '#' },
|
||||
{ name: 'MACOS', url: '#' },
|
||||
{ name: 'LINUX', url: '#' },
|
||||
{ name: 'IOS', url: '#' },
|
||||
{ name: 'ANDROID', url: '#' }
|
||||
logo_text: '宇恒一号',
|
||||
nav_links: [
|
||||
{ label: '产品简介', url: '#intro' },
|
||||
{ label: '产品视频', url: '#videos' },
|
||||
{ label: '联系我们', url: '#contact' }
|
||||
],
|
||||
version: 'VERSION 3.2.1',
|
||||
launch_year: 'LAUNCH: 2024',
|
||||
badge_text: 'FREE ACCESS',
|
||||
title: '宇恒一号',
|
||||
subtitle: '',
|
||||
description: '跨越星际的智能伙伴 · 探索无限可能\n引领您进入前所未有的数字宇宙',
|
||||
download_text: '下载',
|
||||
download_url: '#',
|
||||
download_windows_url: '/promotion/downloads/yuheng-windows.zip',
|
||||
download_android_url: '/promotion/downloads/yuheng-android.apk',
|
||||
platforms: [],
|
||||
version: '',
|
||||
launch_year: '发布日期:以官网为准',
|
||||
badge_text: '完全免费',
|
||||
features: [
|
||||
{ title: '星际导航', desc: '先进的AI导航系统,精准定位您的需求,引领探索之旅' },
|
||||
{ title: '星际导航', desc: '先进的 AI 导航系统,精准定位您的需求,引领探索之旅' },
|
||||
{ title: '量子同步', desc: '跨维度数据同步技术,您的数据在多宇宙中保持一致' },
|
||||
{ title: '星际防护', desc: '来自未来的安全加密协议,守护您的数字资产安全' }
|
||||
],
|
||||
footer_text: '© 2024 YUHENG ONE // STELLAR EXPLORATION INITIATIVE',
|
||||
footer_text: '© 2024 宇恒一号 · 成都宇信达智能科技有限公司',
|
||||
body_builder: ''
|
||||
})
|
||||
|
||||
@@ -205,12 +200,15 @@ const fetchData = async () => {
|
||||
if (!siteId.value) return
|
||||
try {
|
||||
const data = await getHomepage(siteId.value)
|
||||
const base = defaultForm()
|
||||
Object.assign(form, {
|
||||
...defaultForm(),
|
||||
...base,
|
||||
...data,
|
||||
nav_links: Array.isArray(data.nav_links) && data.nav_links.length ? data.nav_links : defaultForm().nav_links,
|
||||
platforms: Array.isArray(data.platforms) && data.platforms.length ? data.platforms : defaultForm().platforms,
|
||||
features: Array.isArray(data.features) && data.features.length ? data.features : defaultForm().features
|
||||
nav_links: Array.isArray(data.nav_links) && data.nav_links.length ? data.nav_links : base.nav_links,
|
||||
platforms: Array.isArray(data.platforms) ? data.platforms : base.platforms,
|
||||
features: Array.isArray(data.features) && data.features.length ? data.features : base.features,
|
||||
download_windows_url: data.download_windows_url || base.download_windows_url,
|
||||
download_android_url: data.download_android_url || base.download_android_url
|
||||
})
|
||||
} catch (e) {
|
||||
ElMessage.error(e.message)
|
||||
|
||||
Reference in New Issue
Block a user