import Taro, { getCurrentInstance, useShareAppMessage } from '@tarojs/taro' import { View, Text } from '@tarojs/components' import { useMemo, useState } from 'react' import { Button } from '@nutui/nutui-react-taro' import { useConfig } from '@/hooks/useConfig' import './index.scss' function Home() { const [ecoTab, setEcoTab] = useState<'template' | 'plugin'>('template') const { config } = useConfig() useShareAppMessage(() => { // 获取当前用户ID,用于生成邀请链接 const userId = Taro.getStorageSync('UserId') return { title: config?.siteName ? `${config.siteName} - 网宿软件` : '软件开发平台:SaaS + 私有化 + 模板/插件生态', path: userId ? `/pages/index/index?inviter=${userId}&source=share&t=${Date.now()}` : `/pages/index/index`, success: function () { console.log('首页分享成功') Taro.showToast({ title: '分享成功', icon: 'success', duration: 2000 }) }, fail: function () { console.log('首页分享失败') Taro.showToast({ title: '分享失败', icon: 'none', duration: 2000 }) } } }) const scrollToSection = (id: string) => { const query = Taro.createSelectorQuery() const inst = getCurrentInstance() // 兼容 React 运行时:尽量将查询限定在当前页面作用域内 if (inst?.page && typeof query.in === 'function') query.in(inst.page) query.selectViewport().scrollOffset() query.select(`#${id}`).boundingClientRect() query.exec((res: any[]) => { const viewport = res?.[0] const rect = res?.[1] const scrollTop = (viewport?.scrollTop || 0) + (rect?.top || 0) - 50 if (Number.isFinite(scrollTop)) { Taro.pageScrollTo({ scrollTop: Math.max(scrollTop, 0), duration: 260 }) } }) } const toAbsoluteMaybe = (url: string) => { if (/^https?:\/\//i.test(url)) return url const base = (config?.domain || '').trim() if (!base) return url const withProto = /^https?:\/\//i.test(base) ? base : `https://${base}` // 处理 domain 末尾/ 与 url 开头/ 的组合 const normalizedBase = withProto.replace(/\/+$/, '') const normalizedPath = url.startsWith('/') ? url : `/${url}` return `${normalizedBase}${normalizedPath}` } const openMaybeLink = (url?: string) => { if (!url) return const abs = toAbsoluteMaybe(url) // 相对路径在小程序内直接跳转 if (url.startsWith('/')) { Taro.navigateTo({ url }) return } // 小程序内无法直接打开外链,提示用户手动复制到浏览器 if (/^https?:\/\//i.test(abs)) { Taro.showModal({ title: '提示', content: '该链接需要在浏览器中打开,请点击确认后手动复制链接访问。', showCancel: false, confirmText: '知道了' }) return } Taro.showToast({ title: '请在 PC 端访问该入口', icon: 'none', duration: 1600 }) } const callPhone = () => { const tel = (config?.tel || '').trim() if (!tel) { Taro.showToast({ title: '暂无联系电话', icon: 'none', duration: 1600 }) return } Taro.makePhoneCall({ phoneNumber: tel }) } const goToDeveloperCenter = () => { Taro.navigateTo({ url: '/developer/index' }) } const goToEnterpriseConsole = () => { Taro.navigateTo({ url: '/enterprise/index' }) } const products = useMemo( () => [ { title: '企业官网', recommend: true, desc: '品牌展示与获客转化,支持多模板、多语言、SEO 与可视化配置。', tags: ['模板', 'SEO', '多语言', '私有化'], adminUrl: 'https://site.websoft.top', }, { title: '小程序/公众号', recommend: false, desc: '多端渠道接入与统一管理,适配常见内容与电商场景。', tags: ['多端', '渠道', '可扩展'], adminUrl: 'https://mp.websoft.top', }, { title: '电商系统', recommend: true, desc: '商品/订单/支付/营销基础能力,插件化扩展,支持多端触达。', tags: ['支付', '插件', '营销', '多租户'], adminUrl: 'https://shop.websoft.top', }, { title: '管理后台', recommend: false, desc: '多租户管理、角色权限、组织架构与可扩展菜单体系。', tags: ['权限', '多租户', '审计'], adminUrl: 'https://oa.websoft.top', }, { title: '开发者中心', recommend: false, desc: '应用开发与交付入口:项目、应用、API Key、部署与教程文档。', tags: ['项目', '应用', 'API Key', '部署'], adminUrl: '/developer', onClick: goToDeveloperCenter, }, { title: '企业控制台', recommend: false, desc: '企业应用管理、成员权限、订单账单与运营监控。', tags: ['应用', '成员', '账单', '监控'], adminUrl: '/enterprise', onClick: goToEnterpriseConsole, }, ], [] ) const capabilities = useMemo( () => [ { title: 'SaaS 多租户平台', badge: '核心', desc: '租户隔离、组织与权限体系、配置中心与审计能力,为多业务线统一底座。', }, { title: '私有化部署', badge: '可选', desc: '支持本地/专有云部署,提供部署文档、验收清单与升级策略,满足安全合规。', }, { title: '模板市场', badge: '生态', desc: '行业模板一键套用,默认配置与初始化脚本配套,交付更标准、上线更快。', }, { title: '插件市场', badge: '扩展', desc: '支付、会员、营销、工单等能力按需加购;支持授权、更新与版本管理。', }, { title: '自动开通链路', badge: '交付', desc: '选品支付后自动创建租户、初始化模块/菜单/基础数据,并交付访问入口。', }, { title: '模块化与可扩展', badge: '开发', desc: '支持按模块组合产品能力,插件化扩展点让二开与生态合作更高效。', }, ], [] ) return ( <> {/* 首屏:价值主张 + 关键动作 */} v3.0 版本发布 SaaS + 私有化 + 模板/插件生态 面向企业官网、公众号/小程序、电商系统、企业管理后台等业务场景,提供多租户架构与模块化能力;客户下单后自动创建租户、初始化模块与基础数据,实现“支付即开通”。 {/* 快捷导航:减少滚动成本 */} {[ { key: 'products', title: '产品矩阵' }, { key: 'capabilities', title: '核心能力' }, { key: 'flow', title: '开通流程' }, { key: 'ecosystem', title: '生态' }, ].map((x) => ( scrollToSection(x.key)}> {x.title} ))} {/* 角色入口卡片 */} 快速入口 🛠️ 开发者中心 项目 · 应用 · API Key 🏢 企业控制台 应用 · 成员 · 账单 {/* 产品矩阵 */} 产品矩阵 面向不同业务场景的可售卖产品,支持套餐化售卖、支付即开通、模板/插件加购与私有化交付。 {products.map((p) => ( {p.title} {p.recommend ? ( 推荐 ) : null} {p.desc} {p.tags.map((t) => ( {t} ))} {p.onClick ? ( ) : ( )} ))} {/* 核心能力 */} 核心能力 用一套平台能力,覆盖产品售卖、交付开通、运营升级与生态变现。 {capabilities.map((c) => ( {c.title} {c.badge} {c.desc} ))} {/* 支付即开通 */} 支付即开通 客户选择产品并支付后,平台自动完成:创建租户、初始化模块、写入默认配置与基础数据、生成管理员账号并交付访问入口。 {[ { title: '选择产品/套餐', desc: '支持产品矩阵、模板/插件加购、增值项' }, { title: '下单支付', desc: '支付成功触发开通任务编排' }, { title: '创建租户', desc: '租户隔离、域名/应用信息绑定、管理员生成' }, { title: '模块初始化', desc: '按所购产品加载模块与菜单权限,写入基础数据/示例数据' }, { title: '交付上线', desc: 'SaaS 直接可用;私有化交付镜像/部署文档/验收清单' }, ].map((s, idx) => ( {idx + 1} {s.title} {s.desc} ))} {/* 模板与插件生态 */} 模板与插件生态 通过模板加速交付,通过插件扩展能力;支持购买、授权、更新与版本管理。 setEcoTab('template')} > 模板 setEcoTab('plugin')} > 插件 {ecoTab === 'template' ? ( 行业模板 按行业/场景提供成套页面与配置,支持一键套用、二次编辑与多版本管理。 交付标准化 模板与初始化脚本配套,让“开通后的默认站点”可直接验收。 ) : ( 能力扩展 支付、会员、营销、工单、数据统计等能力按需加购,随买随用。 升级与授权 支持版本升级、授权校验、到期续费与灰度发布。 )} {/* 底部 CTA */} 联系我们 直接电话沟通或留下需求,我们会按你的业务场景给出产品组合、开通链路与部署方案(SaaS/私有化)。 咨询内容建议 {[ '你希望售卖哪些产品(官网/电商/小程序/门户等)?', '是否需要模板/插件市场(购买、授权、更新)?', '是否需要“支付即开通”(自动创建租户/初始化模块与数据)?', '交付方式:SaaS 或私有化部署?是否有合规要求?', ].map((t) => ( {t} ))} {config?.tel ? ( 电话 {config.tel} ) : null} {config?.workDay ? ( 工作日 {config.workDay} ) : null} 想快速搭建并交付一个可运营的产品? 预约演示,我们将按你的业务场景给出方案与报价。 ) } export default Home