feat(demo-vue): 新闻页面与行业动态页面新增多语言支持

- 升级组件与页面,支持根据语言环境(中/英)条件渲染标题与内容
- 在 IndustryNews 和 News 实体类中新增英文标题、英文内容字段
- sql导出demo_news_full_dump_utf8mb4_2026-04-28.sql
This commit is contained in:
王文昊
2026-04-28 20:57:24 +08:00
parent a74f3e9401
commit 02a23df5f1
14 changed files with 5524 additions and 15 deletions

View File

@@ -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>

View File

@@ -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>({

View File

@@ -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,

View File

@@ -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: '',

View File

@@ -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,