feat(demo-vue): 新闻页面与行业动态页面新增多语言支持
- 升级组件与页面,支持根据语言环境(中/英)条件渲染标题与内容 - 在 IndustryNews 和 News 实体类中新增英文标题、英文内容字段 - sql导出demo_news_full_dump_utf8mb4_2026-04-28.sql
This commit is contained in:
@@ -20,16 +20,16 @@
|
||||
<div class="dropdown-item" @click="navigateTo('/corporate-culture')">
|
||||
<div class="dropdown-item-main">{{ t('nav.culture') }}</div>
|
||||
</div>
|
||||
<div class="dropdown-item" @click="navigateTo('/production-base')">
|
||||
<div v-if="false" class="dropdown-item" @click="navigateTo('/production-base')">
|
||||
<div class="dropdown-item-main">{{ t('nav.base') }}</div>
|
||||
</div>
|
||||
<div class="dropdown-item" @click="navigateTo('/organization')">
|
||||
<div v-if="false" class="dropdown-item" @click="navigateTo('/organization')">
|
||||
<div class="dropdown-item-main">{{ t('nav.org') }}</div>
|
||||
</div>
|
||||
<div class="dropdown-item" @click="navigateTo('/honors')">
|
||||
<div v-if="false" class="dropdown-item" @click="navigateTo('/honors')">
|
||||
<div class="dropdown-item-main">{{ t('nav.honors') }}</div>
|
||||
</div>
|
||||
<div class="dropdown-item" @click="navigateTo('/development-history')">
|
||||
<div v-if="false" class="dropdown-item" @click="navigateTo('/development-history')">
|
||||
<div class="dropdown-item-main">{{ t('nav.history') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<section class="detail-section" v-loading="loading">
|
||||
<div class="detail-wrapper">
|
||||
<article class="article-content">
|
||||
<h1 class="article-title">{{ industryDetail.title }}</h1>
|
||||
<h1 class="article-title">{{ locale === 'en-US' && industryDetail.titleEn ? industryDetail.titleEn : industryDetail.title }}</h1>
|
||||
<div class="article-meta">
|
||||
<span class="meta-item">
|
||||
<el-icon><Calendar /></el-icon>
|
||||
@@ -36,7 +36,7 @@
|
||||
{{ t('common.viewsLabel') }}{{ industryDetail.views }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="article-body" v-html="industryDetail.content"></div>
|
||||
<div class="article-body" v-html="locale === 'en-US' && industryDetail.contentEn ? industryDetail.contentEn : industryDetail.content"></div>
|
||||
</article>
|
||||
|
||||
<div class="back-button">
|
||||
@@ -65,7 +65,7 @@ import { industryApi } from '@/api/industry-api.ts'
|
||||
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
const { t } = useI18n()
|
||||
const { t, locale } = useI18n()
|
||||
|
||||
// 行业动态详情数据
|
||||
const industryDetail = ref<any>({
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<div class="industry-list-wrapper">
|
||||
<div class="industry-item" v-for="(item, index) in industryList" :key="index" @click="goToDetail(item.id)">
|
||||
<div class="industry-item-main">
|
||||
<h3 class="industry-title">{{ item.title }}</h3>
|
||||
<h3 class="industry-title">{{ locale === 'en-US' && item.titleEn ? item.titleEn : item.title }}</h3>
|
||||
<div class="industry-meta">
|
||||
<span class="meta-item">
|
||||
<el-icon><View /></el-icon>
|
||||
@@ -71,7 +71,7 @@ import FooterComponent from '@/components/FooterComponent.vue'
|
||||
import { post } from '@/utils/request'
|
||||
|
||||
const router = useRouter()
|
||||
const { t } = useI18n()
|
||||
const { t, locale } = useI18n()
|
||||
|
||||
// 行业动态列表数据
|
||||
const industryList = ref<any[]>([])
|
||||
@@ -114,6 +114,7 @@ const getIndustryList = async (page: number = 1) => {
|
||||
return {
|
||||
id: item.id,
|
||||
title: item.title,
|
||||
titleEn: item.titleEn,
|
||||
views: item.views || 0,
|
||||
year: year,
|
||||
day: day,
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<section class="news-detail-section">
|
||||
<div class="news-detail-wrapper">
|
||||
<!-- 新闻标题 -->
|
||||
<h1 class="detail-title">{{ newsDetail.title }}</h1>
|
||||
<h1 class="detail-title">{{ locale === 'en-US' && newsDetail.titleEn ? newsDetail.titleEn : newsDetail.title }}</h1>
|
||||
|
||||
<!-- 新闻元信息 -->
|
||||
<div class="detail-meta">
|
||||
@@ -46,7 +46,7 @@
|
||||
<el-divider />
|
||||
|
||||
<!-- 新闻内容 -->
|
||||
<div class="detail-content" v-html="formatContent(newsDetail.content)">
|
||||
<div class="detail-content" v-html="locale === 'en-US' && newsDetail.contentEn ? formatContent(newsDetail.contentEn) : formatContent(newsDetail.content)">
|
||||
</div>
|
||||
|
||||
<!-- 返回按钮 -->
|
||||
@@ -74,7 +74,7 @@ import FooterComponent from '@/components/FooterComponent.vue'
|
||||
import { post } from '@/utils/request'
|
||||
|
||||
const route = useRoute()
|
||||
const { t } = useI18n()
|
||||
const { t, locale } = useI18n()
|
||||
const newsDetail = ref<any>({
|
||||
title: '',
|
||||
content: '',
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<div class="news-list-wrapper">
|
||||
<div class="news-item" v-for="(news, index) in newsList" :key="index" @click="goToDetail(news.id)">
|
||||
<div class="news-item-main">
|
||||
<h3 class="news-title">{{ news.title }}</h3>
|
||||
<h3 class="news-title">{{ locale === 'en-US' && news.titleEn ? news.titleEn : news.title }}</h3>
|
||||
<div class="news-meta">
|
||||
<span class="meta-item">
|
||||
<el-icon><View /></el-icon>
|
||||
@@ -72,7 +72,7 @@ import FooterComponent from '@/components/FooterComponent.vue'
|
||||
import { post } from '@/utils/request'
|
||||
|
||||
const router = useRouter()
|
||||
const { t } = useI18n()
|
||||
const { t, locale } = useI18n()
|
||||
|
||||
// 新闻列表数据
|
||||
const newsList = ref<any[]>([])
|
||||
@@ -115,6 +115,7 @@ const getNewsList = async (page: number = 1) => {
|
||||
return {
|
||||
id: item.id,
|
||||
title: item.title,
|
||||
titleEn: item.titleEn,
|
||||
views: item.views || 0,
|
||||
year: year,
|
||||
day: day,
|
||||
|
||||
Reference in New Issue
Block a user