Files
front-pc/components/kl-footer/index.vue
2025-09-01 11:21:04 +08:00

142 lines
5.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="mt-30px bg-[#14213d] px-[40px] pb-[20px] pt-[50px] text-white lg:px-[80px] sm:px-[60px]">
<!-- 主内容区 -->
<div class="mb-[40px] flex flex-col items-start justify-between gap-[30px] lg:flex-row">
<!-- 左侧 Logo -->
<div class="mx-auto w-[200px] shrink-0 lg:mx0">
<img src="~/assets/images/logo5.png" class="h-auto w-full" />
</div>
<!-- 中间部分 -->
<div class="grid grid-cols-2 mx-[80px] flex-1 gap-[10px] lg:grid-cols-3">
<div v-for="(col, index) in bannerList?.slice(0, 3)" :key="index">
<h3 v-if="handle(col)" class="ma-0px mb-[20px] pa-0px text-[16px]">{{ handle(col) }}</h3>
<ul>
<li
v-for="(item, i) in handle2(col)"
:key="i"
class="mb-[15px] cursor-pointer text-[15px] text-white/90"
:class="{ 'cursor-pointer hover:text-blue-400!': item.url }"
@click="handleClick(item)"
>
{{ item.name }}
</li>
</ul>
</div>
</div>
<!-- 右侧二维码 -->
<div class="flex shrink-0 flex-row gap-[30px]">
<div
v-for="(qr, i) in bannerList?.[3]"
:key="i"
class="text-center"
:class="{ 'cursor-pointer hover:text-blue-400!': qr.url }"
@click="handleClick(qr)"
>
<el-image :src="qr.content" class="mx-auto mb-[10px] w-[120px] rounded-lg bg-gray-400/20" />
<p class="text-[15px] text-white/90" :class="{ 'cursor-pointer hover:text-blue-400!': qr.url }">{{ qr.name }}</p>
</div>
</div>
</div>
<!-- 底部版权 -->
<div class="border-t border-white/20 pt-[20px] text-center text-[14px] text-white/70">
Copyright 2007-2025 图夕夕网络科技(成都)有限公司
<a href="http://beian.miit.gov.cn/" target="_blank" class="text-white/90 hover:text-blue-400!"> 蜀ICP备2025141494号-1</a>
</div>
<el-image-viewer v-if="showViewer" :url-list="previewImgList" :url-index="0" @close="showViewer = false"></el-image-viewer>
</div>
</template>
<script setup lang="ts">
import { reactive, ref } from 'vue'
import { getSettingPage } from '~/api/home/index'
import type { PageResultIndexSettingRespVO } from '~/api/home/type'
// 导航数据
// const columns = [
// {
// title: '联系与合作',
// items: ['关于我们', '联系我们', '免责声明', '常见问题'],
// },
// {
// title: '关注我们',
// items: ['微信订阅号:多多机械', '微信服务号:多多网', '技术交流群:点此加入', '创收平台:为设计师创造收益'],
// },
// ]
// 二维码数据(需要替换真实图片路径)
// const qrcodes = [
// {
// img: new URL('~/assets/images/logo2.png', import.meta.url).href,
// text: '抖音电商关注官方号',
// },
// {
// img: new URL('~/assets/images/logo2.png', import.meta.url).href,
// text: '微信扫码关注官方助手',
// },
// ]
const pageReq = reactive({
type: 3,
status: 0,
})
// 方案1: 直接在useAsyncData中通过泛型设置类型当前已使用的方式
const { data: arr } = await useAsyncData<PageResultIndexSettingRespVO[]>('projectTypeListChildren-PopularDrawings-popularDrawings', async (): Promise<PageResultIndexSettingRespVO[]> => {
const res = await getSettingPage(pageReq)
return res?.data || []
})
const bannerList = ref<Array<PageResultIndexSettingRespVO[]>>([])
if (arr && arr.value?.length) {
const bannerListOne = arr.value?.filter((item) => item.rowType === 1)?.sort((a, b) => a.sort - b.sort)
const bannerListTwo = arr.value?.filter((item) => item.rowType === 2)?.sort((a, b) => a.sort - b.sort)
const bannerListThree = arr.value?.filter((item) => item.rowType === 3)?.sort((a, b) => a.sort - b.sort)
const bannerListFour = arr.value?.filter((item) => item.rowType === 4)?.sort((a, b) => a.sort - b.sort)
bannerList.value = [bannerListOne, bannerListTwo, bannerListThree, bannerListFour]
}
// }
const handle = (col: PageResultIndexSettingRespVO[]) => {
if (col?.length > 0) {
return col[0].name
}
return ''
}
const handle2 = (col: PageResultIndexSettingRespVO[]) => {
if (col?.length > 0) {
return col.slice(1)
}
return []
}
/**
*
* @param item.innerType 区分 底部信息展示 0 文本 1 图片地址 2 站内链接地址 3 外部链接地址 4 富文本
*/
const showViewer = ref(false)
const previewImgList = ref<string[]>([])
const handleClick = (item: PageResultIndexSettingRespVO) => {
if (item.content && (item.innerType === 3 || item.innerType === 2)) {
window.open(item.content, '_blank')
} else if (item.content && (item.innerType === 4 || item.innerType === 0)) {
navigateTo(`/editor-view?content=${encodeURIComponent(item.content)}`)
} else if (item.innerType === 1 && item.content) {
showViewer.value = true
previewImgList.value = [item.content]
}
}
</script>
<style scoped lang="scss">
ul {
li {
list-style: none;
}
}
</style>