This commit is contained in:
2026-01-29 10:43:43 +08:00
commit 4a76df3391
426 changed files with 74975 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
<template>
<!-- 底部菜单 -->
<SubMenu />
<!-- 版权信息 -->
<Copyright />
<!-- 侧边工具栏 -->
<ToolBar />
<!-- 底部菜单 -->
<!-- <TabBar />-->
</template>
<script setup lang="ts">
import SubMenu from "~/components/AppFooter/SubMenu/SubMenu.vue";
import Copyright from "~/components/AppFooter/Copyright/Copyright.vue";
import ToolBar from "~/components/AppFooter/ToolBar/ToolBar.vue";
import TabBar from "~/components/AppFooter/TabBar/TabBar.vue";
import Partners from "~/components/Index/Partners.vue";
import Customized from "~/components/Index/Customized.vue";
</script>
<style lang="scss">
</style>

View File

@@ -0,0 +1,46 @@
<script setup lang="ts">
import {useConfigInfo} from "~/composables/configState";
import Link from "~/components/AppFooter/Link/Link.vue";
const config = useConfigInfo();
</script>
<template>
<!-- PC端 -->
<div class="w-full sm:bg-black hidden-sm-and-down">
<div class="xl:w-screen-xl flex flex-col justify-between m-auto">
<!-- 友情链接 -->
<Link />
<!-- 版权信息 -->
<div class="w-full xl:w-screen-xl xl:px-0 px-4 w-full m-auto flex flex-row sm:justify-between justify-center items-center sm:py-3 text-center text-sm">
<div class="text-gray-400 sm:gap-xs leading-7 flex flex-col sm:flex-row">
<span>Copyright © {{ new Date().getFullYear() }} {{ config?.copyright }}</span>
<nuxt-link to="https://beian.miit.gov.cn/" class="visited:text-gray-400 hover:text-gray-200" target="_blank"> <span>备案号{{ config?.icpNo }}</span></nuxt-link>
</div>
<div class="tools flex items-center opacity-80 hover:opacity-90 text-gray-400 text-xs">
Powered by <a rel="nofollow" href="https://site.websoft.top" target="_blank" class="visited:text-gray-400 hover:text-gray-200 ml-1">·企业官网</a>
</div>
</div>
</div>
</div>
<!-- 移动端 -->
<div class="w-full sm:bg-black hidden-sm-and-up">
<div class="xl:w-screen-xl flex flex-col justify-between m-auto">
<!-- 友情链接 -->
<Link />
<!-- 版权信息 -->
<div class="w-full xl:w-screen-xl xl:px-0 px-4 w-full m-auto flex flex-col sm:justify-between justify-center items-center py-3 text-center text-sm">
<div class="text-gray-400 sm:gap-xs leading-7 flex flex-col sm:flex-row">
<span>Copyright © {{ new Date().getFullYear() }} {{ config?.copyright }}</span>
<nuxt-link to="https://beian.miit.gov.cn/" class="visited:text-gray-400 hover:text-gray-200" target="_blank"> <span>备案号{{ config?.icpNo }}</span></nuxt-link>
</div>
<div class="tools flex items-center opacity-80 hover:opacity-90 text-gray-300 text-xs mt-5">
Powered by <a rel="nofollow" href="https://site.websoft.top" target="_blank" class="visited:text-gray-300 hover:text-gray-200 ml-1">·企业官网</a>
</div>
</div>
</div>
</div>
</template>
<style scoped lang="scss">
</style>

View File

@@ -0,0 +1,24 @@
<template>
<el-space class="text-gray-400 text-sm hidden-sm-and-down">
<span>友情链接</span>
<template v-for="(item,index) in list" :key="index">
<nuxt-link :to="item.url" target="_blank" class="link:text-gray-400 visited:text-gray-400 hover:text-gray-200">{{ item.name }}</nuxt-link>
<el-divider v-if="list.length-1 != index" direction="vertical" style="border-color: #9ca3af;" />
</template>
<el-divider direction="vertical" style="border-color: #9ca3af;" />
<nuxt-link :to="`/links`" class="link:text-gray-400 visited:text-gray-400 hover:text-gray-200">更多...</nuxt-link>
</el-space>
<div class="border-b-solid bg-gray-700 border-1 mt-4 opacity-40 hidden-sm-and-down"></div>
</template>
<script setup lang="ts">
import {listCmsLink, pageCmsLink} from "~/api/cms/cmsLink";
import type {CmsLink} from "~/api/cms/cmsLink/model";
const list = ref<CmsLink[]>([])
pageCmsLink({limit: 10}).then(res => {
list.value = res?.list || [];
})
</script>
<style scoped lang="scss">
</style>

View File

@@ -0,0 +1,55 @@
<template>
<!-- PC端 -->
<div class="w-full bg-black h-[300px] py-5 hidden-sm-and-down">
<div class="xl:w-screen-xl flex justify-between m-auto">
<template v-for="(item,index) in subMenu">
<div class="item">
<div class="text-base text-gray-400 hover:text-gray-200 py-3 font-bold">{{ item.title }}</div>
<div class="sub-menu flex flex-col">
<template v-for="(sub,subIndex) in item.children">
<nuxt-link :to="navTo(sub)" class="py-1 text-sm"><span class="text-gray-400 hover:text-gray-200">{{ sub.title }}</span></nuxt-link>
</template>
</div>
</div>
</template>
<div class="flex flex-col text-base">
<p class="text-base text-gray-400 py-2 font-bold">微信公众号</p>
<el-avatar :src="config.wxQrcode" shape="square" :size="120" />
</div>
</div>
</div>
<!-- 移动端 -->
<el-collapse v-model="activeNames" accordion class="hidden-sm-and-up my-collapse">
<template v-for="(item,index) in subMenu">
<el-collapse-item :title="item.title" :name="index">
<template v-if="item.children">
<template v-for="sub in item.children">
<nuxt-link :to="sub.path" class="block cursor-pointer text-gray-600 hover:text-gray-900 py-0.5">
<span class="px-4">{{ sub.title }}</span>
</nuxt-link>
</template>
</template>
</el-collapse-item>
</template>
</el-collapse>
</template>
<script setup lang="ts">
import {useConfigInfo, useSubMenu} from "~/composables/configState";
const subMenu = useSubMenu();
const config = useConfigInfo();
const activeNames = ref(['1'])
</script>
<style lang="scss">
.my-collapse{
.el-collapse-item__header{
background-color: transparent !important;
}
.el-collapse-item__wrap{
background-color: transparent !important;
}
.el-collapse-item{
padding: 0 16px;
}
}
</style>

View File

@@ -0,0 +1,53 @@
<template>
<div class="hidden-sm-and-up tab-bar flex justify-around items-center bg-white w-full fixed bottom-0 pt-2 pb-5 border-t border-gray-100 border-solid">
<template v-for="(item,index) in list">
<nuxt-link class="item flex flex-col justify-center items-center hover:text-green-700 block" @click="onLink(item,index)">
<component :is="item.icon" :style="{ fontSize: '18px',color: currentIndex == index ? '#15803DFF' : '#333333' }" />
<span :style="{ color: currentIndex == index ? '#15803DFF' : '#333333'}" class="py-1">{{ item.name }}</span>
</nuxt-link>
</template>
</div>
<div class="hidden-sm-and-up h-[80px]"></div>
</template>
<script lang="ts" setup>
import { HomeOutlined, MessageOutlined, ShopOutlined, AppstoreOutlined, ReadOutlined } from '@ant-design/icons-vue';
const currentIndex = ref<number>()
const list = ref([
{
name: '首页',
icon: HomeOutlined,
path: '/'
},
{
name: '产品',
icon: AppstoreOutlined,
path: '/market'
},
{
name: '文档',
icon: ReadOutlined,
path: '/docs'
},
{
name: '店铺',
icon: ShopOutlined,
path: '/user'
}
])
const onLink = (item: any,index: number) => {
if(item.path == '/'){
// 回到页面顶部
window.scrollTo(0, 0)
}
currentIndex.value = index
navigateTo(item.path)
}
</script>
<style lang="scss" scoped>
</style>

View File

@@ -0,0 +1,47 @@
<script setup lang="ts">
import {useConfigInfo, useSetting} from "~/composables/configState";
const config = useConfigInfo();
const setting = useSetting()
</script>
<template>
<div v-if="setting.floatTool" id="toolbar" class="hidden-sm-and-down">
<ul>
<!-- <li>-->
<!-- <a :href="`http://wpa.qq.com/msgrd?v=3&amp;uin=${config.qqCode}&amp;site=qq&amp;menu=yes`" target="_blank">-->
<!-- <span class="icon-font icon-qq"></span>-->
<!-- <span class="wz">腾讯QQ{{ config.qqCode }}</span>-->
<!-- </a>-->
<!-- </li>-->
<li>
<a href="#">
<span class="icon-font icon-qq"></span>
<span class="wz">{{ config.qqCode }}</span>
</a>
</li>
<li>
<a href="#">
<span class="icon-font icon-phone">config.callPhone</span>
<span class="wz">{{ config.callPhone }}</span>
</a>
</li>
<li class="ewm">
<span class="icon-font icon-ewm"></span>
<div class="ewm-box"><img :src="config.wxMpQrcode" alt="微信二维码"/></div>
</li>
<li>
<nuxt-link to="/order/3622">
<span class="icon-font icon-message"></span>
<span class="wz">在线留言</span>
</nuxt-link>
</li>
</ul>
</div>
<el-backtop :bottom="100" :right="25"></el-backtop>
</template>
<style scoped lang="scss">
</style>