首页更新
This commit is contained in:
parent
15bd988891
commit
19b9cf3cfd
@ -18,19 +18,80 @@ export default {
|
|||||||
switchEnSuccess: 'Switched to English'
|
switchEnSuccess: 'Switched to English'
|
||||||
},
|
},
|
||||||
home: {
|
home: {
|
||||||
heroTitle: 'One Platform, Across All Industries',
|
heroTitle: 'One Platform ● Intelligent Leap ● Across All Industries.',
|
||||||
heroSubtitle: 'Intelligent Leap',
|
heroSubtitle: '',
|
||||||
heroSlogan: 'Making AI Everywhere, Make AI Easy',
|
heroSlogan: 'Make AI Everywhere, Make AI Easy',
|
||||||
solutionsBtn: 'Solutions',
|
solutionsBtn: 'Solutions',
|
||||||
contactSalesBtn: 'Contact Sales',
|
contactSalesBtn: 'Contact Sales',
|
||||||
aiSolutionsTitle: 'AI + Solutions',
|
aiSolutionsTitle: 'AI + Solutions',
|
||||||
successCasesTitle: 'Success Stories',
|
successCasesTitle: 'Use Cases',
|
||||||
moreCases: 'View More Cases',
|
moreCases: 'View All Use Cases →',
|
||||||
ctaTitle: 'How Do These Solutions Work in Practice?',
|
ctaTitle: 'How Do These Solutions Work in Practice?',
|
||||||
ctaDesc: 'Get industry-specific AI solutions.',
|
ctaDesc: 'Get industry-specific AI solutions.',
|
||||||
contactUsArrow: 'Contact Us →',
|
contactUsArrow: 'Contact Us →',
|
||||||
companyNewsTitle: 'Company News',
|
companyNewsTitle: 'Company News',
|
||||||
viewMore: 'View More →'
|
viewMore: 'View More →',
|
||||||
|
footerProducts: 'Products & Services',
|
||||||
|
footerContact: 'Contact Us',
|
||||||
|
onlineChat: 'Online Chat',
|
||||||
|
solutionCards: {
|
||||||
|
collaboration: {
|
||||||
|
title: 'Collaborative Intelligence',
|
||||||
|
subtitle: 'Multi-Agent Coordination'
|
||||||
|
},
|
||||||
|
spatial: {
|
||||||
|
title: 'Spatial Intelligence',
|
||||||
|
subtitle: 'GIS Smart Analysis'
|
||||||
|
},
|
||||||
|
predictive: {
|
||||||
|
title: 'Predictive Insight',
|
||||||
|
subtitle: 'Intelligent Forecasting Engine'
|
||||||
|
},
|
||||||
|
vision: {
|
||||||
|
title: 'Microscopic Insight',
|
||||||
|
subtitle: 'Machine Vision Inspection'
|
||||||
|
},
|
||||||
|
qa: {
|
||||||
|
title: 'Instant Answers',
|
||||||
|
subtitle: 'Intelligent Q&A Knowledge Base'
|
||||||
|
},
|
||||||
|
protection: {
|
||||||
|
title: 'Continuous Protection',
|
||||||
|
subtitle: 'Intelligent Device Monitoring'
|
||||||
|
},
|
||||||
|
document: {
|
||||||
|
title: 'Document Intelligence',
|
||||||
|
subtitle: 'Smart Document Parsing'
|
||||||
|
},
|
||||||
|
edge: {
|
||||||
|
title: 'Edge Intelligence',
|
||||||
|
subtitle: 'Edge AI Inference'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cases: {
|
||||||
|
railway: {
|
||||||
|
name: 'China Railway Group · AI Industry Bidding Agent Engine',
|
||||||
|
title: 'Smart Engineering',
|
||||||
|
desc: 'AI-Powered Bidding Process'
|
||||||
|
},
|
||||||
|
forestry: {
|
||||||
|
name: 'Nanning Forestry Bureau · Smart Harvesting',
|
||||||
|
title: 'Smart Harvesting',
|
||||||
|
desc: 'AI-Powered Forestry Spatial Intelligence Review'
|
||||||
|
},
|
||||||
|
beigang: {
|
||||||
|
name: 'AI Empowerment · Beibu Gulf Big Data',
|
||||||
|
title: 'Digital & Intelligent Upgrade',
|
||||||
|
desc: 'Three Core AI Agent Platforms'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
news: {
|
||||||
|
tag: 'Company News',
|
||||||
|
firstTitle: 'Open Computing AI Visits ASEAN with CCPIT',
|
||||||
|
firstDesc: 'Open Computing AI joined the CCPIT Guangxi branch delegation on business visits to Vietnam and Laos, where it engaged in deep discussions on AI agent deployment, cross-border digital infrastructure cooperation, and smart city solutions — further expanding its footprint in Southeast Asian markets.',
|
||||||
|
secondTitle: 'Open Computing AI Named Forbes China AI Commercial Application Demonstration Enterprise',
|
||||||
|
secondDesc: 'Recognized for its industrial-grade AI agent factory delivery capabilities and benchmark cases among central and state-owned enterprises, Open Computing AI was named a Forbes China AI Commercial Application Demonstration Enterprise — underscoring its leadership in turning AI technology into scalable, real-world industry solutions.'
|
||||||
|
}
|
||||||
},
|
},
|
||||||
...autoMessages
|
...autoMessages
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,7 +30,68 @@ export default {
|
|||||||
ctaDesc: '获取行业专属 AI 解决方案',
|
ctaDesc: '获取行业专属 AI 解决方案',
|
||||||
contactUsArrow: '联系我们 →',
|
contactUsArrow: '联系我们 →',
|
||||||
companyNewsTitle: '企业动态',
|
companyNewsTitle: '企业动态',
|
||||||
viewMore: '查看更多 →'
|
viewMore: '查看更多 →',
|
||||||
|
footerProducts: '产品服务',
|
||||||
|
footerContact: '联系我们',
|
||||||
|
onlineChat: '在线咨询',
|
||||||
|
solutionCards: {
|
||||||
|
collaboration: {
|
||||||
|
title: '群智协作',
|
||||||
|
subtitle: '多智能体协同'
|
||||||
|
},
|
||||||
|
spatial: {
|
||||||
|
title: '空间觉醒',
|
||||||
|
subtitle: 'GIS智能分析'
|
||||||
|
},
|
||||||
|
predictive: {
|
||||||
|
title: '先见一步',
|
||||||
|
subtitle: '智能预测引擎'
|
||||||
|
},
|
||||||
|
vision: {
|
||||||
|
title: '洞察入微',
|
||||||
|
subtitle: '机器视觉检测'
|
||||||
|
},
|
||||||
|
qa: {
|
||||||
|
title: '一问即达',
|
||||||
|
subtitle: '智能问答知识库'
|
||||||
|
},
|
||||||
|
protection: {
|
||||||
|
title: '全程守护',
|
||||||
|
subtitle: '设备智能监控'
|
||||||
|
},
|
||||||
|
document: {
|
||||||
|
title: '触文即懂',
|
||||||
|
subtitle: '智能文档解析'
|
||||||
|
},
|
||||||
|
edge: {
|
||||||
|
title: '端侧即算',
|
||||||
|
subtitle: '边缘AI推理'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cases: {
|
||||||
|
railway: {
|
||||||
|
name: '中国中铁 · 慧投标智能体',
|
||||||
|
title: '智慧工程',
|
||||||
|
desc: 'AI驱动投标全流程,从标书解读到报价编制,中标率提升显著'
|
||||||
|
},
|
||||||
|
forestry: {
|
||||||
|
name: '南宁林业局',
|
||||||
|
title: '智慧采伐',
|
||||||
|
desc: '从采伐审批到科学监管——空间智能融合,让数据真正服务林区治理。'
|
||||||
|
},
|
||||||
|
beigang: {
|
||||||
|
name: '北港大数据',
|
||||||
|
title: 'AI赋能,数智升级',
|
||||||
|
desc: '从投标到决策,从合同到管理——全链路AI智能体,让业务快人一步'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
news: {
|
||||||
|
tag: '企业动态',
|
||||||
|
firstTitle: '开元云随贸促会走访东盟',
|
||||||
|
firstDesc: '开元云科技随贸促会广西分会经贸代表团密集出访越南、老挝,深度参与区域 AI 产业合作与数字经济交流。',
|
||||||
|
secondTitle: '开元云荣登福布斯中国人工智能商业落地示范企业',
|
||||||
|
secondDesc: '凭借 AI 智能体工厂的工业级交付能力与央国企标杆案例,开元云入选福布斯中国人工智能商业落地示范企业。'
|
||||||
|
}
|
||||||
},
|
},
|
||||||
...autoMessages
|
...autoMessages
|
||||||
}
|
}
|
||||||
|
|||||||
@ -289,6 +289,11 @@ var onOverflow = ["/shoppingManagement", "/supplierManagement"];
|
|||||||
|
|
||||||
// 修复:在路由守卫中恢复用户状态和重新生成路由
|
// 修复:在路由守卫中恢复用户状态和重新生成路由
|
||||||
router.beforeEach(async (to, from, next) => {
|
router.beforeEach(async (to, from, next) => {
|
||||||
|
if (to.path === '/login' || to.path.startsWith('/login/')) {
|
||||||
|
next();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 清空面包屑状态的代码
|
// 清空面包屑状态的代码
|
||||||
// store.commit('tagsView/resetBreadcrumbState');
|
// store.commit('tagsView/resetBreadcrumbState');
|
||||||
|
|
||||||
@ -351,78 +356,6 @@ window.addEventListener('beforeunload', function () {
|
|||||||
Object.keys(filters).forEach(key => {
|
Object.keys(filters).forEach(key => {
|
||||||
Vue.filter(key, filters[key])
|
Vue.filter(key, filters[key])
|
||||||
})
|
})
|
||||||
// 在 main.js 的 router.beforeEach 中添加
|
|
||||||
router.beforeEach((to, from, next) => {
|
|
||||||
// 清空面包屑状态的代码
|
|
||||||
// store.commit('tagsView/resetBreadcrumbState');
|
|
||||||
|
|
||||||
// 新增:检测是否为移动设备
|
|
||||||
// const userAgent = navigator.userAgent;
|
|
||||||
// const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent);
|
|
||||||
|
|
||||||
// // 如果是移动设备且访问的是根路径,重定向到移动端首页
|
|
||||||
// if (isMobile && to.path === '/') {
|
|
||||||
// next('/h5HomePage');
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // 如果是移动设备且访问的不是移动端页面,重定向到移动端首页
|
|
||||||
// if (isMobile && !to.meta?.isMobile && to.path !== '/h5HomePage' && !to.path.startsWith('/h5HomePage/')) {
|
|
||||||
// next('/h5HomePage');
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 如果已登录且有token,但Vuex状态丢失,从sessionStorage恢复
|
|
||||||
if (store.getters.token && (!store.getters.user || !store.getters.userType)) {
|
|
||||||
console.log("检测到状态丢失,从sessionStorage恢复用户状态");
|
|
||||||
|
|
||||||
const user = sessionStorage.getItem('user');
|
|
||||||
const auths = sessionStorage.getItem('auths');
|
|
||||||
const userType = sessionStorage.getItem('userType');
|
|
||||||
const orgType = sessionStorage.getItem('orgType');
|
|
||||||
|
|
||||||
if (user) {
|
|
||||||
store.commit('user/SET_USER', user);
|
|
||||||
}
|
|
||||||
if (auths) {
|
|
||||||
store.commit('user/SET_AUTHS', JSON.parse(auths));
|
|
||||||
}
|
|
||||||
if (userType) {
|
|
||||||
store.commit('user/SET_USER_TYPE', userType);
|
|
||||||
}
|
|
||||||
if (orgType) {
|
|
||||||
store.commit('user/SET_ORG_TYPE', parseInt(orgType));
|
|
||||||
}
|
|
||||||
|
|
||||||
// 重新生成路由
|
|
||||||
try {
|
|
||||||
const accessRoutes = store.dispatch('permission/generateRoutes', {
|
|
||||||
user: store.getters.user,
|
|
||||||
auths: store.getters.auths,
|
|
||||||
userType: store.getters.userType,
|
|
||||||
orgType: store.getters.orgType
|
|
||||||
});
|
|
||||||
|
|
||||||
// 重新添加路由
|
|
||||||
router.addRoutes(accessRoutes);
|
|
||||||
|
|
||||||
// 重定向到当前路由以确保路由更新
|
|
||||||
next({ ...to, replace: true });
|
|
||||||
return;
|
|
||||||
} catch (error) {
|
|
||||||
console.error('重新生成路由失败:', error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onOverflow.forEach(element => {
|
|
||||||
if (to.path == element) {
|
|
||||||
document.querySelector("body").setAttribute("style", "overflow: auto !important;")
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
next();
|
|
||||||
});
|
|
||||||
|
|
||||||
Vue.config.productionTip = false
|
Vue.config.productionTip = false
|
||||||
|
|
||||||
new Vue({
|
new Vue({
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="footer-link-col">
|
<div class="footer-link-col">
|
||||||
<h4 class="footer-col-title">产品服务</h4>
|
<h4 class="footer-col-title">{{ $t('home.footerProducts') }}</h4>
|
||||||
<ul class="footer-link-list">
|
<ul class="footer-link-list">
|
||||||
<li
|
<li
|
||||||
v-for="item in footerProductServices"
|
v-for="item in footerProductServices"
|
||||||
@ -36,7 +36,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="footer-contact-col">
|
<div class="footer-contact-col">
|
||||||
<h4 class="footer-col-title">联系我们</h4>
|
<h4 class="footer-col-title">{{ $t('home.footerContact') }}</h4>
|
||||||
<ul class="footer-contact-list">
|
<ul class="footer-contact-list">
|
||||||
<li>地址:<span>{{ footerHomeInfo.adress }}</span></li>
|
<li>地址:<span>{{ footerHomeInfo.adress }}</span></li>
|
||||||
<li>邮箱:<span>{{ footerHomeInfo.email }}</span></li>
|
<li>邮箱:<span>{{ footerHomeInfo.email }}</span></li>
|
||||||
@ -47,7 +47,7 @@
|
|||||||
<div class="qr-code">
|
<div class="qr-code">
|
||||||
<img src="./img/img.png" alt="">
|
<img src="./img/img.png" alt="">
|
||||||
</div>
|
</div>
|
||||||
<span class="qr-content">微信客服</span>
|
<span class="qr-content">{{ $t('home.onlineChat') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="qr-box">
|
<div class="qr-box">
|
||||||
<div class="qr-code">
|
<div class="qr-code">
|
||||||
@ -370,10 +370,6 @@ export default Vue.extend({
|
|||||||
transform: translateX(3px);
|
transform: translateX(3px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer-contact-col {
|
|
||||||
// width: 360px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer-contact-list {
|
.footer-contact-list {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<div class="hero-title-row">
|
<div class="hero-title-row">
|
||||||
<h1>{{ $t('home.heroTitle') }}</h1>
|
<h1>{{ $t('home.heroTitle') }}</h1>
|
||||||
</div>
|
</div>
|
||||||
<h2>{{ $t('home.heroSubtitle') }}</h2>
|
<h2 v-if="$t('home.heroSubtitle')">{{ $t('home.heroSubtitle') }}</h2>
|
||||||
<p>{{ $t('home.heroSlogan') }}</p>
|
<p>{{ $t('home.heroSlogan') }}</p>
|
||||||
<div class="hero-actions">
|
<div class="hero-actions">
|
||||||
<button type="button" class="use-btn">{{ $t('home.solutionsBtn') }}</button>
|
<button type="button" class="use-btn">{{ $t('home.solutionsBtn') }}</button>
|
||||||
@ -62,7 +62,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="carousel-dots">
|
<div class="carousel-dots">
|
||||||
<button
|
<button
|
||||||
v-for="(item, index) in solutionCards"
|
v-for="(item, index) in localizedSolutionCards"
|
||||||
:key="item.title"
|
:key="item.title"
|
||||||
type="button"
|
type="button"
|
||||||
:class="{ active: index === currentSolutionIndex }"
|
:class="{ active: index === currentSolutionIndex }"
|
||||||
@ -84,7 +84,7 @@
|
|||||||
|
|
||||||
<div class="case-grid">
|
<div class="case-grid">
|
||||||
<article
|
<article
|
||||||
v-for="item in caseCards"
|
v-for="item in localizedCaseCards"
|
||||||
:key="item.title"
|
:key="item.title"
|
||||||
class="case-card"
|
class="case-card"
|
||||||
>
|
>
|
||||||
@ -127,7 +127,7 @@
|
|||||||
|
|
||||||
<div class="news-list">
|
<div class="news-list">
|
||||||
<article
|
<article
|
||||||
v-for="(item, index) in newsList"
|
v-for="(item, index) in localizedNewsList"
|
||||||
:key="item.title"
|
:key="item.title"
|
||||||
class="news-card"
|
class="news-card"
|
||||||
:class="{ 'news-card-active': index === activeNewsIndex }"
|
:class="{ 'news-card-active': index === activeNewsIndex }"
|
||||||
@ -228,7 +228,7 @@ export default {
|
|||||||
{
|
{
|
||||||
title: '一问即达',
|
title: '一问即达',
|
||||||
subtitle: '智能问答知识库',
|
subtitle: '智能问答知识库',
|
||||||
detailTitle: '智能知识问答',
|
detailTitle: '智能问答知识库',
|
||||||
detailSubTitle: '燃机 AI 诊断助手',
|
detailSubTitle: '燃机 AI 诊断助手',
|
||||||
detailDesc: '融合专家知识库,支持中英文自然语言多轮对话,自动生成诊断建议。',
|
detailDesc: '融合专家知识库,支持中英文自然语言多轮对话,自动生成诊断建议。',
|
||||||
metrics: [
|
metrics: [
|
||||||
@ -337,15 +337,62 @@ export default {
|
|||||||
showTalkVisible() {
|
showTalkVisible() {
|
||||||
return this.$store.state.product.showTalk
|
return this.$store.state.product.showTalk
|
||||||
},
|
},
|
||||||
|
localizedSolutionCards() {
|
||||||
|
const keyMap = {
|
||||||
|
'群智协作': 'collaboration',
|
||||||
|
'空间觉醒': 'spatial',
|
||||||
|
'先见一步': 'predictive',
|
||||||
|
'洞察入微': 'vision',
|
||||||
|
'一问即达': 'qa',
|
||||||
|
'全程守护': 'protection',
|
||||||
|
'触文即懂': 'document',
|
||||||
|
'端侧即算': 'edge'
|
||||||
|
}
|
||||||
|
return this.solutionCards.map((card) => {
|
||||||
|
const key = keyMap[card.title]
|
||||||
|
if (!key) return card
|
||||||
|
return {
|
||||||
|
...card,
|
||||||
|
title: this.$t(`home.solutionCards.${key}.title`),
|
||||||
|
subtitle: this.$t(`home.solutionCards.${key}.subtitle`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
localizedCaseCards() {
|
||||||
|
const keys = ['railway', 'forestry', 'beigang']
|
||||||
|
return this.caseCards.map((card, index) => {
|
||||||
|
const key = keys[index]
|
||||||
|
if (!key) return card
|
||||||
|
return {
|
||||||
|
...card,
|
||||||
|
name: this.$t(`home.cases.${key}.name`),
|
||||||
|
title: this.$t(`home.cases.${key}.title`),
|
||||||
|
desc: this.$t(`home.cases.${key}.desc`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
localizedNewsList() {
|
||||||
|
const keys = ['first', 'second']
|
||||||
|
return this.newsList.map((item, index) => {
|
||||||
|
const key = keys[index]
|
||||||
|
if (!key) return item
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
tag: this.$t('home.news.tag'),
|
||||||
|
title: this.$t(`home.news.${key}Title`),
|
||||||
|
desc: this.$t(`home.news.${key}Desc`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
visibleSolutionCards() {
|
visibleSolutionCards() {
|
||||||
const slots = [-3, -2, -1, 0, 1, 2, 3]
|
const slots = [-3, -2, -1, 0, 1, 2, 3]
|
||||||
const len = this.solutionCards.length
|
const len = this.localizedSolutionCards.length
|
||||||
return slots.map((slot) => {
|
return slots.map((slot) => {
|
||||||
const index = (this.currentSolutionIndex + slot + len) % len
|
const index = (this.currentSolutionIndex + slot + len) % len
|
||||||
return {
|
return {
|
||||||
slot,
|
slot,
|
||||||
index,
|
index,
|
||||||
card: this.solutionCards[index]
|
card: this.localizedSolutionCards[index]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -387,6 +434,9 @@ export default {
|
|||||||
goCases() {
|
goCases() {
|
||||||
this.navigateTo('/homePage/agentStore')
|
this.navigateTo('/homePage/agentStore')
|
||||||
},
|
},
|
||||||
|
goNews() {
|
||||||
|
this.navigateTo('/homePage/new')
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
nextSolution() {
|
nextSolution() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user