This commit is contained in:
WindowBird 2025-10-27 16:22:18 +08:00
commit 20cb57d615
29 changed files with 10479 additions and 0 deletions

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Nuxt dev/build outputs
.output
.data
.nuxt
.nitro
.cache
dist
# Node dependencies
node_modules
# Logs
logs
*.log
# Misc
.DS_Store
.fleet
.idea
# Local env files
.env
.env.*
!.env.example

75
README.md Normal file
View File

@ -0,0 +1,75 @@
# Nuxt Minimal Starter
Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
## Setup
Make sure to install dependencies:
```bash
# npm
npm install
# pnpm
pnpm install
# yarn
yarn install
# bun
bun install
```
## Development Server
Start the development server on `http://localhost:3000`:
```bash
# npm
npm run dev
# pnpm
pnpm dev
# yarn
yarn dev
# bun
bun run dev
```
## Production
Build the application for production:
```bash
# npm
npm run build
# pnpm
pnpm build
# yarn
yarn build
# bun
bun run build
```
Locally preview production build:
```bash
# npm
npm run preview
# pnpm
pnpm preview
# yarn
yarn preview
# bun
bun run preview
```
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.

32
app/app.config.ts Normal file
View File

@ -0,0 +1,32 @@
export default defineAppConfig({
ui: {
header: {
slots: {
root: 'bg-default/75 backdrop-blur border-b border-default h-(--ui-header-height) sticky top-0 z-50',
container: 'flex items-center justify-between gap-3 h-full',
left: 'lg:flex-1 flex items-center gap-1.5',
center: 'hidden lg:flex',
right: 'flex items-center justify-end lg:flex-1 gap-1.5',
title: 'shrink-0 font-bold text-xl text-highlighted flex items-end gap-1.5',
toggle: 'lg:hidden',
content: 'lg:hidden',
overlay: 'lg:hidden',
header: 'px-4 sm:px-6 h-(--ui-header-height) shrink-0 flex items-center justify-between gap-3',
body: 'p-4 sm:p-6 overflow-y-auto'
},
variants: {
toggleSide: {
left: {
toggle: '-ms-1.5'
},
right: {
toggle: '-me-1.5'
}
}
}
},
colors: {
primary: 'blue',
}
}
})

27
app/app.vue Normal file
View File

@ -0,0 +1,27 @@
<template>
<UApp>
<NuxtLayout>
<Upagae>
<UPageSection
:ui="{container:'py-9 lg:px-0' }">
<img src="/img/banner.png" alt="" class="w-full">
<img src="/img/1.jpg" alt="" class="w-full">
<img src="/img/2.jpg" alt="" class="w-full">
<img src="/img/3.jpg" alt="" class="w-full">
<img src="/img/4.jpg" alt="" class="w-full">
<img src="/img/5.jpg" alt="" class="w-full">
<img src="/img/6.jpg" alt="" class="w-full">
<img src="/img/7.jpg" alt="" class="w-full">
<img src="/img/8.jpg" alt="" class="w-full">
<img src="/img/9.jpg" alt="" class="w-full">
</UPageSection>
</Upagae>
</NuxtLayout>
</UApp>
</template>
<script setup lang="ts">
</script>

17
app/assets/css/main.css Normal file
View File

@ -0,0 +1,17 @@
@import "tailwindcss";
@import "@nuxt/ui";
/*:root {*/
/* --ui-container: var(--container-4xl);*/
/* !*::selection {*!*/
/* !* color: #282a30;*!*/
/* !* background-color: #c8c8c8;*!*/
/* !*}*!*/
/*}*/
/*:root {*/
/* --ui-header-height: --spacing(24);*/
/*}*/

View File

@ -0,0 +1,80 @@
<script lang="ts" setup>
const contacts = [
{
label: '电话',
value: '15280659990',
icon: 'i-heroicons-phone',
},
{
label: '邮箱',
value: '564737095@qq.com',
icon: 'i-heroicons-envelope',
},
{
label: '地址',
value: '福建省福鼎市太姥山镇海埕路13号',
icon: 'i-heroicons-map-pin',
}
]
</script>
<template>
<div
:style="{ backgroundImage: `url('/img/index/footer_bg.png')` , }"
class="bg-cover bg-no-repeat bg-center w-full ">
<UFooter>
<template #left>
<p class="text-bold text-sm">Copyright © 闽ICP备2023022186号-2</p>
</template>
<div class="grid grid-cols-1 md:flex gap-4">
<div
v-for="(item, index) in contacts"
:key="index"
class="flex items-center rounded-xl transition-all hover:scale-[1.02] md:flex-row"
>
<UIcon :name="item.icon" class="w-6 h-6 text-current"/>
<div class="font-medium">{{ item.label }}:</div>
<div class="mt-1 text-sm">{{ item.value }}</div>
</div>
</div>
<template #right>
<!-- <UButton-->
<!-- aria-label="Discord"-->
<!-- color="neutral"-->
<!-- icon="i-simple-icons-discord"-->
<!-- target="_blank"-->
<!-- to="https://go.nuxt.com/discord"-->
<!-- variant="ghost"-->
<!-- />-->
<UButton
color="neutral"
icon="simple-icons-alibabadotcom"
target="_blank"
to="https://chuangtewulian.1688.com/page/index.html"
/>
<UButton
color="neutral"
icon="i-simple-icons-tiktok"
target="_blank"
to="https://www.douyin.com/user/MS4wLjABAAAAdPkGyADnJFLrZBwDM9U7faUJs-wmmyEU9L34SS0CKhs"
/>
</template>
</UFooter>
</div>
</template>

View File

@ -0,0 +1,45 @@
<script lang="ts" setup>
const isScrolled = ref(false)
const headerUI = ref({
root: 'fixed top-0 left-0 right-0 z-50 bg-green-600/25 backdrop-filter-none h-8 lg:h-16'
})
const handleScroll = () => {
isScrolled.value = window.scrollY > 10
headerUI.value.root = isScrolled.value
? 'fixed top-0 left-0 right-0 z-50 bg-green-700 h-8 lg:h-16' //
: 'fixed top-0 left-0 right-0 z-50 bg-green-600/25 backdrop-filter-none h-8 lg:h-16' //
}
onMounted(() => window.addEventListener('scroll', handleScroll))
onUnmounted(() => window.removeEventListener('scroll', handleScroll))
</script>
<template>
<UHeader
:ui="{root:'fixed right-0 left-0 h-8 lg:h-16'}"
>
<!-- 标题部分 -->
<template #title>
<view class="h-6 w-auto text-primary">
小鹿骑行
</view>
</template>
<!-- 右侧区域 -->
<template #right/>
</UHeader>
</template>
//:ui="headerUI"
//:ui="{link: 'text-white text-lg font-bold '}"

View File

@ -0,0 +1,22 @@
<!-- components/ContactFloatingButton.vue -->
<template>
<div class="fixed right-6 top-1/2 transform -translate-y-1/2 z-50 flex items-center">
<UPopover mode="hover">
<UButton
class="bg-green-500 hover:bg-green-600 text-white px-4 py-3 rounded-l-lg shadow-lg transition-all duration-300"
color="neutral" label="联系客服"
variant="subtle"/>
<template #content>
<div class="w-64 overflow-hidden transition-all duration-300 ease-out;">
<img
alt="QRCode"
class="w-full h-auto border-4 border-white rounded-lg shadow-xl"
src="/img/QRCode.png"
>
</div>
</template>
</UPopover>
</div>
</template>

View File

@ -0,0 +1,25 @@
<!-- components/TitleSection.vue -->
<template>
<view class="flex flex-col items-center">
<view class="text-sm mt-4 lg:mt-20 text-primary font-bold">
{{ subtitle }}
</view>
<view class="text-4xl my-6 font-bold">
{{ title }}
</view>
</view>
</template>
<script setup>
defineProps({
title: {
type: String,
default: '默认标题'
},
subtitle: {
type: String,
default: '默认副标题'
}
})
</script>

12
app/layouts/default.vue Normal file
View File

@ -0,0 +1,12 @@
<template>
<div>
<AppHeader/>
<slot/>
<AppFooter/>
<ContactFloatingButton/>
</div>
</template>
<script setup>
// AppHeader
</script>

6
eslint.config.mjs Normal file
View File

@ -0,0 +1,6 @@
// @ts-check
import withNuxt from './.nuxt/eslint.config.mjs'
export default withNuxt(
// Your custom configs here
)

13
nuxt.config.ts Normal file
View File

@ -0,0 +1,13 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
compatibilityDate: '2025-07-15',
devtools: { enabled: true },
modules: ['@nuxt/eslint', '@nuxt/ui', '@nuxt/image'],
css: ['~/assets/css/main.css'],
fonts: {
providers: {
google: false, // 禁用 Google Fonts
googleicons: false // 禁用 Google Icons
}
},
})

24
package.json Normal file
View File

@ -0,0 +1,24 @@
{
"name": "bike",
"type": "module",
"private": true,
"scripts": {
"build": "nuxt build",
"dev": "nuxt dev",
"generate": "nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare"
},
"dependencies": {
"@nuxt/eslint": "1.9.0",
"@nuxt/image": "1.11.0",
"@nuxt/ui": "4.1.0",
"@tailwindcss/postcss": "^4.1.16",
"eslint": "^9.38.0",
"nuxt": "^4.2.0",
"tailwindcss": "^4.1.16",
"typescript": "^5.9.3",
"vue": "^3.5.22",
"vue-router": "^4.6.3"
}
}

10057
pnpm-lock.yaml Normal file

File diff suppressed because it is too large Load Diff

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
public/img/1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
public/img/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
public/img/2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
public/img/3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
public/img/4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

BIN
public/img/5.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
public/img/6.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

BIN
public/img/7.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

BIN
public/img/8.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

BIN
public/img/9.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 KiB

BIN
public/img/QRCode.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
public/img/banner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

2
public/robots.txt Normal file
View File

@ -0,0 +1,2 @@
User-Agent: *
Disallow:

18
tsconfig.json Normal file
View File

@ -0,0 +1,18 @@
{
// https://nuxt.com/docs/guide/concepts/typescript
"files": [],
"references": [
{
"path": "./.nuxt/tsconfig.app.json"
},
{
"path": "./.nuxt/tsconfig.server.json"
},
{
"path": "./.nuxt/tsconfig.shared.json"
},
{
"path": "./.nuxt/tsconfig.node.json"
}
]
}