修复若干bug
This commit is contained in:
@@ -50,7 +50,8 @@ import darkImage from '@/assets/images/404/404-dark.png'
|
||||
import lightImage from '@/assets/images/404/404-light.gif'
|
||||
|
||||
// 导入 jQuery 类型
|
||||
import type { JQueryStatic } from 'jquery'
|
||||
|
||||
type JQueryStatic = any;
|
||||
|
||||
// 声明 Modernizr 类型
|
||||
interface ModernizrStatic {
|
||||
@@ -72,10 +73,6 @@ declare global {
|
||||
useRouter()
|
||||
const isDark = ref(false)
|
||||
|
||||
const toggleTheme = () => {
|
||||
document.body.classList.toggle('dark-theme', isDark.value)
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// Initialize theme
|
||||
document.body.classList.toggle('dark-theme', isDark.value)
|
||||
|
||||
@@ -139,14 +139,15 @@ import Footer from '@/views/components/footer.vue'
|
||||
import { getKingdeeNewsDetail, getCompanyNewsDetail } from '@/api/newscenter'
|
||||
|
||||
const route = useRoute()
|
||||
const article = ref({})
|
||||
const relatedArticles = ref([])
|
||||
const article = ref<any>({})
|
||||
const relatedArticles = ref<any[]>([])
|
||||
const nextPreviousArticles = ref<{
|
||||
previous?: { id: number; title: string }
|
||||
next?: { id: number; title: string }
|
||||
}>({})
|
||||
const loading = ref(true)
|
||||
const { proxy } = getCurrentInstance()
|
||||
const instance = getCurrentInstance()
|
||||
const proxy = instance?.proxy as any
|
||||
const router = useRouter()
|
||||
const contentRef = ref<HTMLElement | null>(null)
|
||||
const VITE_APP_API_URL = import.meta.env.VITE_APP_API_URL
|
||||
@@ -242,11 +243,11 @@ onMounted(async () => {
|
||||
const path = route.path
|
||||
|
||||
if (path.includes('companyNews')) {
|
||||
res = await getCompanyNewsDetail(id)
|
||||
res = await getCompanyNewsDetail(id as string)
|
||||
} else if (path.includes('kingdeeNews')) {
|
||||
res = await getKingdeeNewsDetail(id)
|
||||
res = await getKingdeeNewsDetail(id as string)
|
||||
} else {
|
||||
res = await getKingdeeNewsDetail(id)
|
||||
res = await getKingdeeNewsDetail(id as string)
|
||||
}
|
||||
|
||||
if (res.code === 200) {
|
||||
|
||||
+48
-54
@@ -150,7 +150,9 @@
|
||||
<div class="solutions">
|
||||
<div class="title">
|
||||
<span class="text-4xl">行业解决方案</span>
|
||||
<span class="text-xl"> / INDUSTRY SOLUTIONS</span>
|
||||
<span class="text-xl">
|
||||
/ INDUSTRY SOLUTIONS
|
||||
</span>
|
||||
</div>
|
||||
<div class="solutions-container" v-if="solutions.length >= 4">
|
||||
<!-- 第一行:两个大卡片 -->
|
||||
@@ -215,18 +217,34 @@
|
||||
</div>
|
||||
|
||||
<!-- 平台数据 -->
|
||||
<div class="mt20 newsfoot" ref="platformRef"
|
||||
style="background: url('/src/assets/images/indexImg/about_b1.png') no-repeat center bottom;background-size: cover;display: flex;align-items: center;">
|
||||
<div style="width: 1200px;margin: 0 auto;">
|
||||
<div style="display: flex;justify-content: space-between;">
|
||||
<div style="text-align: center" v-for="item in platformStats" :key="item.id">
|
||||
<div
|
||||
class="mt20 newsfoot"
|
||||
ref="platformRef"
|
||||
style="
|
||||
background: url('/src/assets/images/indexImg/about_b1.png') no-repeat
|
||||
center bottom;
|
||||
background-size: cover;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
<div style="width: 1200px; margin: 0 auto">
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<div
|
||||
style="text-align: center"
|
||||
v-for="item in platformStats"
|
||||
:key="item.id"
|
||||
>
|
||||
<div>
|
||||
<span >
|
||||
<span style="font-size: 48px;font-weight: bold;">{{ item.current }}</span>
|
||||
<span style="font-size: 48px;font-weight: bold;">+</span>{{ item.unit }}
|
||||
<span>
|
||||
<span style="font-size: 48px; font-weight: bold">
|
||||
{{ item.current }}
|
||||
</span>
|
||||
<span style="font-size: 48px; font-weight: bold">+</span>
|
||||
{{ item.unit }}
|
||||
</span>
|
||||
<br />
|
||||
<span style="font-size: 20px;">{{ item.label }}</span>
|
||||
<span style="font-size: 20px">{{ item.label }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -242,11 +260,10 @@
|
||||
|
||||
<div class="partners-content">
|
||||
<div class="partner-inner" v-for="url in partnerImages">
|
||||
<el-image :key="url" :src="url" lazy/>
|
||||
<el-image :key="url" :src="url" lazy />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
<Footer />
|
||||
</div>
|
||||
@@ -305,18 +322,8 @@ const bannerSlides = [
|
||||
},
|
||||
]
|
||||
|
||||
const swiperRef = ref()
|
||||
|
||||
const onSwiper = (swiper: any) => {
|
||||
swiperRef.value = swiper
|
||||
}
|
||||
|
||||
const onSlideChange = () => {
|
||||
// console.log('slide change')
|
||||
}
|
||||
|
||||
// 新闻数据
|
||||
const newsData = ref([])
|
||||
const newsData = ref<any[]>([])
|
||||
// 加载状态
|
||||
const loading = ref(false)
|
||||
// 错误信息
|
||||
@@ -385,7 +392,6 @@ const solutions = ref([
|
||||
},
|
||||
])
|
||||
|
||||
|
||||
// 当前选中的新闻索引
|
||||
const activeNewsIndex = ref<number>(0)
|
||||
|
||||
@@ -413,7 +419,6 @@ const stopAutoScroll = (): void => {
|
||||
}
|
||||
}
|
||||
onMounted(() => {
|
||||
|
||||
startAutoScroll()
|
||||
fetchNewsData()
|
||||
loadImagesWithOptions()
|
||||
@@ -424,21 +429,17 @@ const handleMoreNewsClick = () => {
|
||||
// console.log('more news clicked')
|
||||
}
|
||||
|
||||
|
||||
const partnerImages = ref([])
|
||||
const partnerImages = ref<any[]>([])
|
||||
|
||||
// TODO 改为接口读取图片文件
|
||||
const loadImagesWithOptions = async () => {
|
||||
try {
|
||||
// 如果需要过滤特定格式或处理
|
||||
const modules = import.meta.glob(
|
||||
'/src/assets/images/indexImg/partner/*',
|
||||
{
|
||||
eager: true,
|
||||
query: '?url',
|
||||
import: 'default'
|
||||
}
|
||||
)
|
||||
const modules = import.meta.glob('/src/assets/images/indexImg/partner/*', {
|
||||
eager: true,
|
||||
query: '?url',
|
||||
import: 'default',
|
||||
})
|
||||
|
||||
const images = []
|
||||
for (const path in modules) {
|
||||
@@ -468,8 +469,7 @@ const platformRef = ref<HTMLElement | null>(null)
|
||||
let observer: IntersectionObserver | null = null
|
||||
let hasAnimated = false
|
||||
|
||||
|
||||
const animateNumber = (item:object) => {
|
||||
const animateNumber = (item: any) => {
|
||||
const step = Math.ceil(item.target / 40)
|
||||
const timer = setInterval(() => {
|
||||
item.current += step
|
||||
@@ -482,13 +482,13 @@ const animateNumber = (item:object) => {
|
||||
|
||||
onMounted(() => {
|
||||
observer = new IntersectionObserver(
|
||||
([entry]) => {
|
||||
if (entry.isIntersecting && !hasAnimated) {
|
||||
hasAnimated = true
|
||||
platformStats.value.forEach(animateNumber)
|
||||
}
|
||||
},
|
||||
{ threshold: 0.3 }
|
||||
([entry]) => {
|
||||
if (entry?.isIntersecting && !hasAnimated) {
|
||||
hasAnimated = true
|
||||
platformStats.value.forEach(animateNumber)
|
||||
}
|
||||
},
|
||||
{ threshold: 0.3 },
|
||||
)
|
||||
|
||||
if (platformRef.value) {
|
||||
@@ -499,7 +499,6 @@ onMounted(() => {
|
||||
onUnmounted(() => {
|
||||
observer?.disconnect()
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@@ -594,8 +593,6 @@ onUnmounted(() => {
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* 分页器样式 */
|
||||
@@ -909,7 +906,7 @@ onUnmounted(() => {
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
|
||||
|
||||
//&::before {
|
||||
//background: rgba(24, 144, 255, 0.8);
|
||||
//background: rgba(24, 144, 255, 0.8);
|
||||
//}
|
||||
|
||||
.solution-overlay {
|
||||
@@ -1040,8 +1037,7 @@ onUnmounted(() => {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.partners{
|
||||
|
||||
.partners {
|
||||
.title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -1049,14 +1045,14 @@ onUnmounted(() => {
|
||||
padding: 40px 0;
|
||||
}
|
||||
|
||||
.partners-content{
|
||||
.partners-content {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
grid-gap: 20px 20px;
|
||||
|
||||
.partner-inner{
|
||||
.partner-inner {
|
||||
padding: 1.5rem 2.375rem;
|
||||
margin: -1px;
|
||||
background-color: #fff;
|
||||
@@ -1065,7 +1061,6 @@ onUnmounted(() => {
|
||||
height: 100px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
}
|
||||
|
||||
.partner-inner:hover {
|
||||
@@ -1074,5 +1069,4 @@ onUnmounted(() => {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -20,7 +20,7 @@ import Footer from '@/views/components/footer.vue'
|
||||
import { getKingdeeNewsDetail, getCompanyNewsDetail } from '@/api/newscenter'
|
||||
|
||||
const route = useRoute()
|
||||
const article = ref({})
|
||||
const article = ref<any>({})
|
||||
const loading = ref(true)
|
||||
|
||||
onMounted(async () => {
|
||||
@@ -32,11 +32,11 @@ onMounted(async () => {
|
||||
const path = route.path
|
||||
|
||||
if (path.includes('companyNews')) {
|
||||
res = await getCompanyNewsDetail(id)
|
||||
res = await getCompanyNewsDetail(id as string)
|
||||
} else if (path.includes('kingdeeNews')) {
|
||||
res = await getKingdeeNewsDetail(id)
|
||||
res = await getKingdeeNewsDetail(id as string)
|
||||
} else {
|
||||
res = await getKingdeeNewsDetail(id)
|
||||
res = await getKingdeeNewsDetail(id as string)
|
||||
}
|
||||
|
||||
if (res.code === 200) {
|
||||
|
||||
@@ -1,74 +1,65 @@
|
||||
<script setup lang="ts">
|
||||
import { ref,reactive } from "vue";
|
||||
import Header from "@/views/components/header.vue";
|
||||
import Footer from "@/views/components/footer.vue";
|
||||
import { VideoPlay } from "@element-plus/icons-vue";
|
||||
import { ref } from 'vue'
|
||||
import Header from '@/views/components/header.
|
||||
import Footer from '@/views/components/footer.vue'
|
||||
import { VideoPlay } from '@element-plus/icons-vue'
|
||||
|
||||
|
||||
const activeIndex = ref(0);
|
||||
const activeIndex = ref(0)
|
||||
|
||||
const industryTabs = [
|
||||
{
|
||||
title: "制造行业",
|
||||
icon: "src/assets/images/solution/14194311qxyp.png",
|
||||
iconActive: "src/assets/images/solution/15172752x7hf.png",
|
||||
title: '制造行业',
|
||||
icon: 'src/assets/images/solution/14194311qxyp.png',
|
||||
iconActive: 'src/assets/images/solution/15172752x7hf.png',
|
||||
contents: [
|
||||
{ title: "制造业概述", route: "/solution/manufacture" },
|
||||
{ title: "电子行业", route: "/solution/electronics" }
|
||||
]
|
||||
{ title: '制造业概述', route: '/solution/manufacture' },
|
||||
{ title: '电子行业', route: '/solution/electronics' },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "服务行业",
|
||||
icon: "@/assets/icons/zz1.png",
|
||||
iconActive: "@/assets/icons/zz1.png",
|
||||
contents: [
|
||||
{ title: "服务行业概述", route: "/solution/service" }
|
||||
]
|
||||
title: '服务行业',
|
||||
icon: '@/assets/icons/zz1.png',
|
||||
iconActive: '@/assets/icons/zz1.png',
|
||||
contents: [{ title: '服务行业概述', route: '/solution/service' }],
|
||||
},
|
||||
{
|
||||
title: "批发与零售",
|
||||
icon: new URL("@/assets/icons/zf1.png", import.meta.url).href,
|
||||
iconActive: new URL("@/assets/icons/zf2.png", import.meta.url).href,
|
||||
contents: [
|
||||
{ title: "贸易零售", route: "/solution/government" }
|
||||
]
|
||||
title: '批发与零售',
|
||||
icon: new URL('@/assets/icons/zf1.png', import.meta.url).href,
|
||||
iconActive: new URL('@/assets/icons/zf2.png', import.meta.url).href,
|
||||
contents: [{ title: '贸易零售', route: '/solution/government' }],
|
||||
},
|
||||
{
|
||||
title: "建筑与房地产",
|
||||
icon: new URL("@/assets/icons/yy1.png", import.meta.url).href,
|
||||
iconActive: new URL("@/assets/icons/yy2.png", import.meta.url).href,
|
||||
contents: [
|
||||
{ title: "建筑行业", route: "/solution/medical" }
|
||||
]
|
||||
title: '建筑与房地产',
|
||||
icon: new URL('@/assets/icons/yy1.png', import.meta.url).href,
|
||||
iconActive: new URL('@/assets/icons/yy2.png', import.meta.url).href,
|
||||
contents: [{ title: '建筑行业', route: '/solution/medical' }],
|
||||
},
|
||||
{
|
||||
title: "快速消费品",
|
||||
icon: new URL("@/assets/icons/qc1.png", import.meta.url).href,
|
||||
iconActive: new URL("@/assets/icons/qc2.png", import.meta.url).href,
|
||||
contents: [
|
||||
{ title: "食品行业", route: "/solution/auto" }
|
||||
]
|
||||
}
|
||||
];
|
||||
title: '快速消费品',
|
||||
icon: new URL('@/assets/icons/qc1.png', import.meta.url).href,
|
||||
iconActive: new URL('@/assets/icons/qc2.png', import.meta.url).href,
|
||||
contents: [{ title: '食品行业', route: '/solution/auto' }],
|
||||
},
|
||||
]
|
||||
|
||||
const caseList = [
|
||||
{
|
||||
id: 111,
|
||||
title: '碧桂园:数字化驱动业务创新',
|
||||
desc:
|
||||
'碧桂园集团,是中国最大的新型城镇化住宅开发商。采用集中及标准化的运营模式,业务包含物业发展、建安、装修、物业管理、物业投资、酒店开发和管理,以及现代农业、机器人。\n',
|
||||
image: 'http://backapi.yunzer.cn/storage/uploads/2026/01/20/696ee14c17458.jpg'
|
||||
desc: '碧桂园集团,是中国最大的新型城镇化住宅开发商。采用集中及标准化的运营模式,业务包含物业发展、建安、装修、物业管理、物业投资、酒店开发和管理,以及现代农业、机器人。\n',
|
||||
image:
|
||||
'http://backapi.yunzer.cn/storage/uploads/2026/01/20/696ee14c17458.jpg',
|
||||
},
|
||||
{
|
||||
id: 114,
|
||||
title: '四川路桥:“财务共享助力业务腾飞”',
|
||||
desc:
|
||||
'四川路桥建设集团股份有限公司是国有控股上市公司,中国500强企业,于2003年3月在上海证券交易所挂牌交易,是四川省交通系统首家A股上市企业,母公司为四川省铁路产业投资集团公司。',
|
||||
image: 'http://backapi.yunzer.cn/storage/uploads/2026/01/20/696eec54c8e64.png'
|
||||
}
|
||||
desc: '四川路桥建设集团股份有限公司是国有控股上市公司,中国500强企业,于2003年3月在上海证券交易所挂牌交易,是四川省交通系统首家A股上市企业,母公司为四川省铁路产业投资集团公司。',
|
||||
image:
|
||||
'http://backapi.yunzer.cn/storage/uploads/2026/01/20/696eec54c8e64.png',
|
||||
},
|
||||
]
|
||||
/* 视频弹窗 */
|
||||
const showVideo = ref(false);
|
||||
const showVideo = ref(false)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -95,18 +86,9 @@ const showVideo = ref(false);
|
||||
class="tab-item"
|
||||
@mouseenter="activeIndex = index"
|
||||
>
|
||||
<div
|
||||
class="tab-box"
|
||||
:class="{ active: activeIndex === index }"
|
||||
>
|
||||
<img
|
||||
:src="tab.icon"
|
||||
v-show="activeIndex !== index"
|
||||
/>
|
||||
<img
|
||||
:src="tab.iconActive"
|
||||
v-show="activeIndex === index"
|
||||
/>
|
||||
<div class="tab-box" :class="{ active: activeIndex === index }">
|
||||
<img :src="tab.icon" v-show="activeIndex !== index" />
|
||||
<img :src="tab.iconActive" v-show="activeIndex === index" />
|
||||
<p class="text-xl">{{ tab.title }}</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -115,13 +97,13 @@ const showVideo = ref(false);
|
||||
<!-- 内容区 -->
|
||||
<div class="industry-content">
|
||||
<router-link
|
||||
v-for="(item, i) in industryTabs[activeIndex].contents"
|
||||
v-for="(item, i) in industryTabs[activeIndex]?.contents"
|
||||
:key="i"
|
||||
:to="item.route"
|
||||
class="content-card"
|
||||
>
|
||||
<div class="card-img">
|
||||
<img src="@/assets/images/noimage.png">
|
||||
<img src="@/assets/images/noimage.png" />
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<p class="card-title">{{ item.title }}</p>
|
||||
@@ -170,21 +152,13 @@ const showVideo = ref(false);
|
||||
</router-link>
|
||||
</div>
|
||||
<div>
|
||||
<el-link type="primary" underline="never">
|
||||
更多客户成功故事
|
||||
</el-link>
|
||||
<el-link type="primary" underline="never">更多客户成功故事</el-link>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<el-dialog v-model="showVideo" width="800px">
|
||||
<video
|
||||
src=""
|
||||
controls
|
||||
autoplay
|
||||
style="width:100%"
|
||||
/>
|
||||
<video src="" controls autoplay style="width: 100%" />
|
||||
</el-dialog>
|
||||
|
||||
<Footer />
|
||||
@@ -193,7 +167,8 @@ const showVideo = ref(false);
|
||||
<style scoped lang="scss">
|
||||
.banner {
|
||||
height: 360px;
|
||||
background: url("@/assets/images/solution/solution.png") center / cover no-repeat;
|
||||
background: url('@/assets/images/solution/solution.png') center / cover
|
||||
no-repeat;
|
||||
color: #fff;
|
||||
|
||||
.banner-inner {
|
||||
@@ -282,8 +257,6 @@ const showVideo = ref(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
.banner-center {
|
||||
width: 100%;
|
||||
height: 400px;
|
||||
@@ -292,7 +265,8 @@ const showVideo = ref(false);
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: url(@/assets/images/solution/banner-center-pc.png) center center no-repeat;
|
||||
background: url(@/assets/images/solution/banner-center-pc.png) center center
|
||||
no-repeat;
|
||||
.banner-center-container {
|
||||
width: 1200px;
|
||||
text-align: start;
|
||||
@@ -344,7 +318,7 @@ const showVideo = ref(false);
|
||||
.con3-list-box-content {
|
||||
padding: 24px;
|
||||
flex: 1;
|
||||
background-color: #F6F6F6;
|
||||
background-color: #f6f6f6;
|
||||
}
|
||||
|
||||
.con3-list-content-title {
|
||||
|
||||
Reference in New Issue
Block a user