Browse Source

第一次提交

master
unknown 5 months ago
commit
bc8a6aa7d0
  1. 30
      .gitignore
  2. 3
      .vscode/extensions.json
  3. 29
      README.md
  4. 13
      index.html
  5. 8
      jsconfig.json
  6. 24
      package.json
  7. 2121
      pnpm-lock.yaml
  8. BIN
      public/favicon.ico
  9. 12
      src/App.vue
  10. 86
      src/assets/base.css
  11. BIN
      src/assets/images/aboutusbanner.png
  12. BIN
      src/assets/images/appQrCode.png
  13. BIN
      src/assets/images/bannerjjfa.png
  14. BIN
      src/assets/images/cantan.png
  15. BIN
      src/assets/images/gywm.png
  16. BIN
      src/assets/images/gzhQrcode.png
  17. BIN
      src/assets/images/h1icon.png
  18. BIN
      src/assets/images/homebanner.png
  19. BIN
      src/assets/images/hxys.png
  20. BIN
      src/assets/images/jjtd.png
  21. BIN
      src/assets/images/newbanner_02.png
  22. BIN
      src/assets/images/onething.png
  23. BIN
      src/assets/images/pross.png
  24. BIN
      src/assets/images/topLogo.png
  25. BIN
      src/assets/images/加入我们_02.png
  26. BIN
      src/assets/images/加入我们_05.png
  27. BIN
      src/assets/images/加入我们_09.png
  28. BIN
      src/assets/images/首页-(1)_14.png
  29. BIN
      src/assets/images/首页-(1)_17.png
  30. BIN
      src/assets/images/首页-(1)_21.png
  31. BIN
      src/assets/images/首页-(1)_24.png
  32. BIN
      src/assets/images/首页-(1)_27.png
  33. BIN
      src/assets/images/首页-(1)_29.png
  34. BIN
      src/assets/images/首页-(1)_34-35.png
  35. BIN
      src/assets/images/首页-(1)_37.png
  36. 1
      src/assets/logo.svg
  37. 40
      src/assets/main.css
  38. 44
      src/components/HelloWorld.vue
  39. 88
      src/components/TheWelcome.vue
  40. 86
      src/components/WelcomeItem.vue
  41. 167
      src/components/bottoms/bottoms.vue
  42. 7
      src/components/icons/IconCommunity.vue
  43. 7
      src/components/icons/IconDocumentation.vue
  44. 7
      src/components/icons/IconEcosystem.vue
  45. 7
      src/components/icons/IconSupport.vue
  46. 19
      src/components/icons/IconTooling.vue
  47. 56
      src/components/mapCard/mapCard.vue
  48. 54
      src/components/title/title.vue
  49. 71
      src/components/top/top.vue
  50. 21
      src/layout/index.vue
  51. 18
      src/main.js
  52. 46
      src/router/index.js
  53. 12
      src/stores/counter.js
  54. 15
      src/views/AboutView.vue
  55. 9
      src/views/HomeView.vue
  56. 236
      src/views/aboutUs/aboutUs.vue
  57. 14
      src/views/contactUs/contactUs.vue
  58. 14
      src/views/joinUs/joinUs.vue
  59. 13
      src/views/news/news.vue
  60. 12
      src/views/solution/solution.vue
  61. 18
      vite.config.js

30
.gitignore

@ -0,0 +1,30 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
*.tsbuildinfo

3
.vscode/extensions.json

@ -0,0 +1,3 @@
{
"recommendations": ["Vue.volar"]
}

29
README.md

@ -0,0 +1,29 @@
# jakjwebsite
This template should help get you started developing with Vue 3 in Vite.
## Recommended IDE Setup
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
## Customize configuration
See [Vite Configuration Reference](https://vitejs.dev/config/).
## Project Setup
```sh
npm install
```
### Compile and Hot-Reload for Development
```sh
npm run dev
```
### Compile and Minify for Production
```sh
npm run build
```

13
index.html

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

8
jsconfig.json

@ -0,0 +1,8 @@
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
},
"exclude": ["node_modules", "dist"]
}

24
package.json

@ -0,0 +1,24 @@
{
"name": "jakjwebsite",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"@amap/amap-jsapi-loader": "^1.0.1",
"element-plus": "^2.7.6",
"pinia": "^2.1.7",
"sass": "^1.77.6",
"vue": "^3.4.29",
"vue-router": "^4.3.3"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.0.5",
"vite": "^5.3.1",
"vite-plugin-vue-devtools": "^7.3.1"
}
}

2121
pnpm-lock.yaml
File diff suppressed because it is too large
View File

BIN
public/favicon.ico

12
src/App.vue

@ -0,0 +1,12 @@
<template>
<RouterView />
</template>
<script setup>
import { RouterView } from 'vue-router'
</script>
<style scoped>
</style>

86
src/assets/base.css

@ -0,0 +1,86 @@
/* color palette from <https://github.com/vuejs/theme> */
:root {
--vt-c-white: #ffffff;
--vt-c-white-soft: #f8f8f8;
--vt-c-white-mute: #f2f2f2;
--vt-c-black: #181818;
--vt-c-black-soft: #222222;
--vt-c-black-mute: #282828;
--vt-c-indigo: #2c3e50;
--vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
--vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
--vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
--vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
--vt-c-text-light-1: var(--vt-c-indigo);
--vt-c-text-light-2: rgba(60, 60, 60, 0.66);
--vt-c-text-dark-1: var(--vt-c-white);
--vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
}
/* semantic color variables for this project */
:root {
--color-background: var(--vt-c-white);
--color-background-soft: var(--vt-c-white-soft);
--color-background-mute: var(--vt-c-white-mute);
--color-border: var(--vt-c-divider-light-2);
--color-border-hover: var(--vt-c-divider-light-1);
--color-heading: var(--vt-c-text-light-1);
--color-text: var(--vt-c-text-light-1);
--section-gap: 160px;
}
@media (prefers-color-scheme: dark) {
:root {
--color-background: var(--vt-c-black);
--color-background-soft: var(--vt-c-black-soft);
--color-background-mute: var(--vt-c-black-mute);
--color-border: var(--vt-c-divider-dark-2);
--color-border-hover: var(--vt-c-divider-dark-1);
--color-heading: var(--vt-c-text-dark-1);
--color-text: var(--vt-c-text-dark-2);
}
}
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
font-weight: normal;
}
body {
min-height: 100vh;
color: var(--color-text);
background: var(--color-background);
transition:
color 0.5s,
background-color 0.5s;
line-height: 1.6;
font-family:
Inter,
-apple-system,
BlinkMacSystemFont,
'Segoe UI',
Roboto,
Oxygen,
Ubuntu,
Cantarell,
'Fira Sans',
'Droid Sans',
'Helvetica Neue',
sans-serif;
font-size: 15px;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

BIN
src/assets/images/aboutusbanner.png

After

Width: 1920  |  Height: 475  |  Size: 376 KiB

BIN
src/assets/images/appQrCode.png

After

Width: 216  |  Height: 216  |  Size: 23 KiB

BIN
src/assets/images/bannerjjfa.png

After

Width: 1920  |  Height: 482  |  Size: 637 KiB

BIN
src/assets/images/cantan.png

After

Width: 1920  |  Height: 480  |  Size: 447 KiB

BIN
src/assets/images/gywm.png

After

Width: 1920  |  Height: 580  |  Size: 266 KiB

BIN
src/assets/images/gzhQrcode.png

After

Width: 216  |  Height: 216  |  Size: 38 KiB

BIN
src/assets/images/h1icon.png

After

Width: 45  |  Height: 30  |  Size: 1.8 KiB

BIN
src/assets/images/homebanner.png

After

Width: 1920  |  Height: 983  |  Size: 2.3 MiB

BIN
src/assets/images/hxys.png

After

Width: 1920  |  Height: 956  |  Size: 351 KiB

BIN
src/assets/images/jjtd.png

After

Width: 1920  |  Height: 960  |  Size: 68 KiB

BIN
src/assets/images/newbanner_02.png

After

Width: 1920  |  Height: 480  |  Size: 397 KiB

BIN
src/assets/images/onething.png

After

Width: 622  |  Height: 766  |  Size: 140 KiB

BIN
src/assets/images/pross.png

After

Width: 1574  |  Height: 378  |  Size: 99 KiB

BIN
src/assets/images/topLogo.png

After

Width: 178  |  Height: 42  |  Size: 4.4 KiB

BIN
src/assets/images/加入我们_02.png

After

Width: 1920  |  Height: 477  |  Size: 367 KiB

BIN
src/assets/images/加入我们_05.png

After

Width: 739  |  Height: 515  |  Size: 173 KiB

BIN
src/assets/images/加入我们_09.png

After

Width: 45  |  Height: 45  |  Size: 2.2 KiB

BIN
src/assets/images/首页-(1)_14.png

After

Width: 123  |  Height: 100  |  Size: 11 KiB

BIN
src/assets/images/首页-(1)_17.png

After

Width: 123  |  Height: 100  |  Size: 7.4 KiB

BIN
src/assets/images/首页-(1)_21.png

After

Width: 1920  |  Height: 218  |  Size: 108 KiB

BIN
src/assets/images/首页-(1)_24.png

After

Width: 754  |  Height: 633  |  Size: 124 KiB

BIN
src/assets/images/首页-(1)_27.png

After

Width: 62  |  Height: 62  |  Size: 3.8 KiB

BIN
src/assets/images/首页-(1)_29.png

After

Width: 62  |  Height: 62  |  Size: 4.9 KiB

BIN
src/assets/images/首页-(1)_34-35.png

After

Width: 62  |  Height: 62  |  Size: 4.1 KiB

BIN
src/assets/images/首页-(1)_37.png

After

Width: 62  |  Height: 62  |  Size: 3.2 KiB

1
src/assets/logo.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg>

40
src/assets/main.css

@ -0,0 +1,40 @@
@import './base.css';
.container {
max-width: 1280px;
margin: 0 auto;
}
/* #app {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
font-weight: normal;
}
a,
.green {
text-decoration: none;
color: hsla(160, 100%, 37%, 1);
transition: 0.4s;
padding: 3px;
}
@media (hover: hover) {
a:hover {
background-color: hsla(160, 100%, 37%, 0.2);
}
}
@media (min-width: 1024px) {
body {
display: flex;
place-items: center;
}
#app {
display: grid;
grid-template-columns: 1fr 1fr;
padding: 0 2rem;
}
} */

44
src/components/HelloWorld.vue

@ -0,0 +1,44 @@
<script setup>
defineProps({
msg: {
type: String,
required: true
}
})
</script>
<template>
<div class="greetings">
<h1 class="green">{{ msg }}</h1>
<h3>
Youve successfully created a project with
<a href="https://vitejs.dev/" target="_blank" rel="noopener">Vite</a> +
<a href="https://vuejs.org/" target="_blank" rel="noopener">Vue 3</a>.
</h3>
</div>
</template>
<style scoped>
h1 {
font-weight: 500;
font-size: 2.6rem;
position: relative;
top: -10px;
}
h3 {
font-size: 1.2rem;
}
.greetings h1,
.greetings h3 {
text-align: center;
}
@media (min-width: 1024px) {
.greetings h1,
.greetings h3 {
text-align: left;
}
}
</style>

88
src/components/TheWelcome.vue

@ -0,0 +1,88 @@
<script setup>
import WelcomeItem from './WelcomeItem.vue'
import DocumentationIcon from './icons/IconDocumentation.vue'
import ToolingIcon from './icons/IconTooling.vue'
import EcosystemIcon from './icons/IconEcosystem.vue'
import CommunityIcon from './icons/IconCommunity.vue'
import SupportIcon from './icons/IconSupport.vue'
</script>
<template>
<WelcomeItem>
<template #icon>
<DocumentationIcon />
</template>
<template #heading>Documentation</template>
Vues
<a href="https://vuejs.org/" target="_blank" rel="noopener">official documentation</a>
provides you with all information you need to get started.
</WelcomeItem>
<WelcomeItem>
<template #icon>
<ToolingIcon />
</template>
<template #heading>Tooling</template>
This project is served and bundled with
<a href="https://vitejs.dev/guide/features.html" target="_blank" rel="noopener">Vite</a>. The
recommended IDE setup is
<a href="https://code.visualstudio.com/" target="_blank" rel="noopener">VSCode</a> +
<a href="https://github.com/johnsoncodehk/volar" target="_blank" rel="noopener">Volar</a>. If
you need to test your components and web pages, check out
<a href="https://www.cypress.io/" target="_blank" rel="noopener">Cypress</a> and
<a href="https://on.cypress.io/component" target="_blank" rel="noopener"
>Cypress Component Testing</a
>.
<br />
More instructions are available in <code>README.md</code>.
</WelcomeItem>
<WelcomeItem>
<template #icon>
<EcosystemIcon />
</template>
<template #heading>Ecosystem</template>
Get official tools and libraries for your project:
<a href="https://pinia.vuejs.org/" target="_blank" rel="noopener">Pinia</a>,
<a href="https://router.vuejs.org/" target="_blank" rel="noopener">Vue Router</a>,
<a href="https://test-utils.vuejs.org/" target="_blank" rel="noopener">Vue Test Utils</a>, and
<a href="https://github.com/vuejs/devtools" target="_blank" rel="noopener">Vue Dev Tools</a>. If
you need more resources, we suggest paying
<a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">Awesome Vue</a>
a visit.
</WelcomeItem>
<WelcomeItem>
<template #icon>
<CommunityIcon />
</template>
<template #heading>Community</template>
Got stuck? Ask your question on
<a href="https://chat.vuejs.org" target="_blank" rel="noopener">Vue Land</a>, our official
Discord server, or
<a href="https://stackoverflow.com/questions/tagged/vue.js" target="_blank" rel="noopener"
>StackOverflow</a
>. You should also subscribe to
<a href="https://news.vuejs.org" target="_blank" rel="noopener">our mailing list</a> and follow
the official
<a href="https://twitter.com/vuejs" target="_blank" rel="noopener">@vuejs</a>
twitter account for latest news in the Vue world.
</WelcomeItem>
<WelcomeItem>
<template #icon>
<SupportIcon />
</template>
<template #heading>Support Vue</template>
As an independent project, Vue relies on community backing for its sustainability. You can help
us by
<a href="https://vuejs.org/sponsor/" target="_blank" rel="noopener">becoming a sponsor</a>.
</WelcomeItem>
</template>

86
src/components/WelcomeItem.vue

@ -0,0 +1,86 @@
<template>
<div class="item">
<i>
<slot name="icon"></slot>
</i>
<div class="details">
<h3>
<slot name="heading"></slot>
</h3>
<slot></slot>
</div>
</div>
</template>
<style scoped>
.item {
margin-top: 2rem;
display: flex;
position: relative;
}
.details {
flex: 1;
margin-left: 1rem;
}
i {
display: flex;
place-items: center;
place-content: center;
width: 32px;
height: 32px;
color: var(--color-text);
}
h3 {
font-size: 1.2rem;
font-weight: 500;
margin-bottom: 0.4rem;
color: var(--color-heading);
}
@media (min-width: 1024px) {
.item {
margin-top: 0;
padding: 0.4rem 0 1rem calc(var(--section-gap) / 2);
}
i {
top: calc(50% - 25px);
left: -26px;
position: absolute;
border: 1px solid var(--color-border);
background: var(--color-background);
border-radius: 8px;
width: 50px;
height: 50px;
}
.item:before {
content: ' ';
border-left: 1px solid var(--color-border);
position: absolute;
left: 0;
bottom: calc(50% + 25px);
height: calc(50% - 25px);
}
.item:after {
content: ' ';
border-left: 1px solid var(--color-border);
position: absolute;
left: 0;
top: calc(50% + 25px);
height: calc(50% - 25px);
}
.item:first-of-type:before {
display: none;
}
.item:last-of-type:after {
display: none;
}
}
</style>

167
src/components/bottoms/bottoms.vue

@ -0,0 +1,167 @@
<template>
<div class="bottoms">
<div class="container">
<div class="onerow">
<div class="leftTxt">
<div class="ul">
<div class="lab">关于我们</div>
<div class="li">公司介绍</div>
<div class="li">核心优势</div>
<div class="li">主要业务</div>
</div>
<div class="ul">
<div class="lab">我们的产品</div>
<div class="li">浙里学车</div>
<div class="li">浙里学车驾校端</div>
<div class="li">浙里学车官网</div>
<div class="li">缙驾通</div>
<div class="li">治理端</div>
<div class="li">数据驾驶舱</div>
</div>
<div class="ul">
<div class="lab">关于我们</div>
<div class="li">社会招聘</div>
</div>
</div>
<div class="centerTxt">
<div class="label">联系我们</div>
<div class="phone">0571-5660 6030</div>
<div class="qrcode">
<div class="qrItem">
<div class="img">
<img src="@/assets/images/appQrCode.png" alt="">
</div>
<div class="txt">浙里学车APP</div>
</div>
<!-- <div class="qrItem">
<div class="img">
<img src="" alt="">
</div>
<div class="txt">浙里学车-驾校版</div>
</div> -->
<div class="qrItem">
<div class="img">
<img src="@/assets/images/gzhQrcode.png" alt="">
</div>
<div class="txt">浙里学车-公众号</div>
</div>
</div>
</div>
<div class="rightLogo">
<img src="@/assets/images/topLogo.png" alt="">
</div>
</div>
<div class="copyright">
<div class="text">
<span>版权所有杭州市机动车驾驶人培训行业协会</span>
<span>指导单位杭州市交通运输管理服务中心</span>
<span>杭州市机动车驾驶人培训公众服务平台</span>
</div>
<div class="text">技术支持杭州钧安科技有限公司浙公网安备 33010202001775 浙ICP备2021007687号-1</div>
</div>
</div>
</div>
</template>
<script setup>
</script>
<style lang="scss" scoped>
.bottoms {
// position: fixed;
// bottom: 0;
// left: 0;
width: 100%;
color: #333;
.onerow {
display: flex;
justify-content: space-between;
border-top: 1px solid #EaEaEa;
padding-top: 32px;
.leftTxt {
display: flex;
justify-content: space-between;
flex: 2;
.ul {
flex: 1;
.lab {
font-size: 18px;
font-weight: 700;
margin-bottom: 15px;
}
.li {
font-size: 16px;
margin-bottom: 8px;
}
}
}
.centerTxt {
.label {
font-size: 18px;
}
.phone {
font-size: 24px;
padding: 16px 0 56px 0;
font-weight: 700;
}
.qrcode {
display: flex;
.qrItem {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-right: 36px;
.img {
width: 74px;
height: 74px;
img {
display: block;
width: 100%;
height: 100%;
}
}
.txt {
font-size: 12px;
margin-top: 8px;
}
}
}
}
.rightLogo {
// width: 220px;
height: 40px;
img {
display: block;
// width: 100%;
height: 100%;
}
}
}
.copyright {
text-align: center;
padding: 40px 0;
width: 100%;
.text {
margin-bottom: 10px;
span {margin-right: 30px;}
}
}
}
</style>

7
src/components/icons/IconCommunity.vue

@ -0,0 +1,7 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
<path
d="M15 4a1 1 0 1 0 0 2V4zm0 11v-1a1 1 0 0 0-1 1h1zm0 4l-.707.707A1 1 0 0 0 16 19h-1zm-4-4l.707-.707A1 1 0 0 0 11 14v1zm-4.707-1.293a1 1 0 0 0-1.414 1.414l1.414-1.414zm-.707.707l-.707-.707.707.707zM9 11v-1a1 1 0 0 0-.707.293L9 11zm-4 0h1a1 1 0 0 0-1-1v1zm0 4H4a1 1 0 0 0 1.707.707L5 15zm10-9h2V4h-2v2zm2 0a1 1 0 0 1 1 1h2a3 3 0 0 0-3-3v2zm1 1v6h2V7h-2zm0 6a1 1 0 0 1-1 1v2a3 3 0 0 0 3-3h-2zm-1 1h-2v2h2v-2zm-3 1v4h2v-4h-2zm1.707 3.293l-4-4-1.414 1.414 4 4 1.414-1.414zM11 14H7v2h4v-2zm-4 0c-.276 0-.525-.111-.707-.293l-1.414 1.414C5.42 15.663 6.172 16 7 16v-2zm-.707 1.121l3.414-3.414-1.414-1.414-3.414 3.414 1.414 1.414zM9 12h4v-2H9v2zm4 0a3 3 0 0 0 3-3h-2a1 1 0 0 1-1 1v2zm3-3V3h-2v6h2zm0-6a3 3 0 0 0-3-3v2a1 1 0 0 1 1 1h2zm-3-3H3v2h10V0zM3 0a3 3 0 0 0-3 3h2a1 1 0 0 1 1-1V0zM0 3v6h2V3H0zm0 6a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1H0zm3 3h2v-2H3v2zm1-1v4h2v-4H4zm1.707 4.707l.586-.586-1.414-1.414-.586.586 1.414 1.414z"
/>
</svg>
</template>

7
src/components/icons/IconDocumentation.vue

@ -0,0 +1,7 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" fill="currentColor">
<path
d="M11 2.253a1 1 0 1 0-2 0h2zm-2 13a1 1 0 1 0 2 0H9zm.447-12.167a1 1 0 1 0 1.107-1.666L9.447 3.086zM1 2.253L.447 1.42A1 1 0 0 0 0 2.253h1zm0 13H0a1 1 0 0 0 1.553.833L1 15.253zm8.447.833a1 1 0 1 0 1.107-1.666l-1.107 1.666zm0-14.666a1 1 0 1 0 1.107 1.666L9.447 1.42zM19 2.253h1a1 1 0 0 0-.447-.833L19 2.253zm0 13l-.553.833A1 1 0 0 0 20 15.253h-1zm-9.553-.833a1 1 0 1 0 1.107 1.666L9.447 14.42zM9 2.253v13h2v-13H9zm1.553-.833C9.203.523 7.42 0 5.5 0v2c1.572 0 2.961.431 3.947 1.086l1.107-1.666zM5.5 0C3.58 0 1.797.523.447 1.42l1.107 1.666C2.539 2.431 3.928 2 5.5 2V0zM0 2.253v13h2v-13H0zm1.553 13.833C2.539 15.431 3.928 15 5.5 15v-2c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM5.5 15c1.572 0 2.961.431 3.947 1.086l1.107-1.666C9.203 13.523 7.42 13 5.5 13v2zm5.053-11.914C11.539 2.431 12.928 2 14.5 2V0c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM14.5 2c1.573 0 2.961.431 3.947 1.086l1.107-1.666C18.203.523 16.421 0 14.5 0v2zm3.5.253v13h2v-13h-2zm1.553 12.167C18.203 13.523 16.421 13 14.5 13v2c1.573 0 2.961.431 3.947 1.086l1.107-1.666zM14.5 13c-1.92 0-3.703.523-5.053 1.42l1.107 1.666C11.539 15.431 12.928 15 14.5 15v-2z"
/>
</svg>
</template>

7
src/components/icons/IconEcosystem.vue

@ -0,0 +1,7 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="20" fill="currentColor">
<path
d="M11.447 8.894a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm0 1.789a1 1 0 1 0 .894-1.789l-.894 1.789zM7.447 7.106a1 1 0 1 0-.894 1.789l.894-1.789zM10 9a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0H8zm9.447-5.606a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm2 .789a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zM18 5a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0h-2zm-5.447-4.606a1 1 0 1 0 .894-1.789l-.894 1.789zM9 1l.447-.894a1 1 0 0 0-.894 0L9 1zm-2.447.106a1 1 0 1 0 .894 1.789l-.894-1.789zm-6 3a1 1 0 1 0 .894 1.789L.553 4.106zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zm-2-.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 2.789a1 1 0 1 0 .894-1.789l-.894 1.789zM2 5a1 1 0 1 0-2 0h2zM0 7.5a1 1 0 1 0 2 0H0zm8.553 12.394a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 1a1 1 0 1 0 .894 1.789l-.894-1.789zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zM8 19a1 1 0 1 0 2 0H8zm2-2.5a1 1 0 1 0-2 0h2zm-7.447.394a1 1 0 1 0 .894-1.789l-.894 1.789zM1 15H0a1 1 0 0 0 .553.894L1 15zm1-2.5a1 1 0 1 0-2 0h2zm12.553 2.606a1 1 0 1 0 .894 1.789l-.894-1.789zM17 15l.447.894A1 1 0 0 0 18 15h-1zm1-2.5a1 1 0 1 0-2 0h2zm-7.447-5.394l-2 1 .894 1.789 2-1-.894-1.789zm-1.106 1l-2-1-.894 1.789 2 1 .894-1.789zM8 9v2.5h2V9H8zm8.553-4.894l-2 1 .894 1.789 2-1-.894-1.789zm.894 0l-2-1-.894 1.789 2 1 .894-1.789zM16 5v2.5h2V5h-2zm-4.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zm-2.894-1l-2 1 .894 1.789 2-1L8.553.106zM1.447 5.894l2-1-.894-1.789-2 1 .894 1.789zm-.894 0l2 1 .894-1.789-2-1-.894 1.789zM0 5v2.5h2V5H0zm9.447 13.106l-2-1-.894 1.789 2 1 .894-1.789zm0 1.789l2-1-.894-1.789-2 1 .894 1.789zM10 19v-2.5H8V19h2zm-6.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zM2 15v-2.5H0V15h2zm13.447 1.894l2-1-.894-1.789-2 1 .894 1.789zM18 15v-2.5h-2V15h2z"
/>
</svg>
</template>

7
src/components/icons/IconSupport.vue

@ -0,0 +1,7 @@
<template>
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor">
<path
d="M10 3.22l-.61-.6a5.5 5.5 0 0 0-7.666.105 5.5 5.5 0 0 0-.114 7.665L10 18.78l8.39-8.4a5.5 5.5 0 0 0-.114-7.665 5.5 5.5 0 0 0-7.666-.105l-.61.61z"
/>
</svg>
</template>

19
src/components/icons/IconTooling.vue

@ -0,0 +1,19 @@
<!-- This icon is from <https://github.com/Templarian/MaterialDesign>, distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license-->
<template>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
aria-hidden="true"
role="img"
class="iconify iconify--mdi"
width="24"
height="24"
preserveAspectRatio="xMidYMid meet"
viewBox="0 0 24 24"
>
<path
d="M20 18v-4h-3v1h-2v-1H9v1H7v-1H4v4h16M6.33 8l-1.74 4H7v-1h2v1h6v-1h2v1h2.41l-1.74-4H6.33M9 5v1h6V5H9m12.84 7.61c.1.22.16.48.16.8V18c0 .53-.21 1-.6 1.41c-.4.4-.85.59-1.4.59H4c-.55 0-1-.19-1.4-.59C2.21 19 2 18.53 2 18v-4.59c0-.32.06-.58.16-.8L4.5 7.22C4.84 6.41 5.45 6 6.33 6H7V5c0-.55.18-1 .57-1.41C7.96 3.2 8.44 3 9 3h6c.56 0 1.04.2 1.43.59c.39.41.57.86.57 1.41v1h.67c.88 0 1.49.41 1.83 1.22l2.34 5.39z"
fill="currentColor"
></path>
</svg>
</template>

56
src/components/mapCard/mapCard.vue

@ -0,0 +1,56 @@
<template>
<div class="mapBox" id="mapBox"></div>
</template>
<script setup>
import AMapLoader from "@amap/amap-jsapi-loader";
import { onMounted } from 'vue'
let AMap = null
let map = null
onMounted(() => {
window._AMapSecurityConfig = {
securityJsCode: "43f3681535ceb4d8571c3fbc545544f8",
};
AMapLoader.load({
key: "9976825e68c533f387b48de66eb4dc49", // WebKey load
// version: "1.4.", // JSAPI 1.4.15 PolyEditor
plugins: ["AMap.Scale", 'AMap.MouseTool', 'AMap.Marker'], //使'AMap.Scale'['...','...']
})
.then((v) => {
AMap = v
map = new AMap.Map("mapBox", {
// id
viewMode: "3D", // 3D
resizeEnable: true,
content: '<div>这里是名片内容</div>',
zoom: 16, //
center: [120.210197, 30.356117], //
});
addMarker()
})
.catch((e) => {
console.log(e);
});
// initMap()
})
function addMarker() {
let marker = new AMap.Marker({
icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
position: [120.210197, 30.356117],
offset: new AMap.Pixel(-13, -80)
});
marker.setMap(map);
}
</script>
<style scoped>
.mapBox {
width: 1280px;
height: 400px;
}
</style>

54
src/components/title/title.vue

@ -0,0 +1,54 @@
<template>
<div class="title">
<div class="h1_row">
<div class="icon"><img src="@/assets/images/h1icon.png" alt=""></div>
<div class="h1">{{ text.h1 }}</div>
<div class="icon"><img src="@/assets/images/h1icon.png" alt=""></div>
</div>
<div class="tps"> {{ text.tps }}</div>
</div>
</template>
<script setup>
defineProps({
text: {
type: Object,
default: {}
}
})
</script>
<style lang="scss" scoped>
.title {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: #333;
padding: 60px 0 40px 0;
.h1_row {
display: flex;
align-items: center;
}
.icon {
width: 45px;
height: 30px;
img {
display: block;
width: 100%;
height: 100%;
}
}
.h1 {
font-size: 48px;
padding: 0 8px;
font-weight: 700;
}
}
.tps {
font-size: 18px;
}
</style>

71
src/components/top/top.vue

@ -0,0 +1,71 @@
<template>
<div class="top">
<div class="container">
<div class="logoCon">
<img src="@/assets/images/topLogo.png" alt="">
</div>
<div class="menuRight">
<el-menu :default-active="activeIndex" class="el-menu-demo-topBar" mode="horizontal" @select="handleSelect">
<el-menu-item index="aboutUs">关于我们</el-menu-item>
<el-menu-item index="solution">解决方案</el-menu-item>
<el-menu-item index="news">新闻动态</el-menu-item>
<el-menu-item index="joinUs">加入我们</el-menu-item>
<el-menu-item index="contactUs">联系我们</el-menu-item>
</el-menu>
</div>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'
const router = useRouter()
// console.log(router)
const activeIndex = ref('aboutUs')
const handleSelect = (key, keyPath) => {
router.push({name: key})
}
</script>
<style scoped lang="scss">
.top {
position: fixed;
top: 0;
left: 0;
width: 100%;
background: #fff;
z-index: 99;
.container {
display: flex;
justify-content: space-between;
align-items: center;
height: 72px;
}
.logoCon {
height: 44px;
}
.menuRight {
width: 560px;
}
}
</style>
<style lang="scss">
.el-menu-demo-topBar {
height: 50px;
border-bottom: none !important;
.el-menu-item.is-active {
border-top: 2px solid var(--el-menu-active-color);
border-bottom: none;
}
}
</style>

21
src/layout/index.vue

@ -0,0 +1,21 @@
<template>
<div class="layout-main">
<tops></tops>
<router-view ></router-view>
<bottoms></bottoms>
</div>
</template>
<script setup>
import { useRoute } from 'vue-router';
import tops from '@/components/top/top.vue'
import bottoms from '@/components/bottoms/bottoms.vue'
const route = useRoute();
</script>
<style lang="scss" scoped>
.layout-main {
padding: 72px 0 0 0;
}
</style>

18
src/main.js

@ -0,0 +1,18 @@
import './assets/main.css'
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
import router from './router'
const app = createApp(App)
app.use(ElementPlus)
app.use(createPinia())
app.use(router)
app.mount('#app')

46
src/router/index.js

@ -0,0 +1,46 @@
import { createRouter, createWebHistory } from 'vue-router'
import layout from '../layout/index.vue'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: '/',
name: 'layout',
component: layout,
redirect: 'aboutUs',
children: [
{
path: 'aboutUs', name: 'aboutUs', meta: {title: '关于我们', },
component: () => import('../views/aboutUs/aboutUs.vue')
},
{
path: 'solution', name: 'solution', meta: {title: '解决方案', },
component: () => import('../views/solution/solution.vue')
},
{
path: 'news', name: 'news', meta: {title: '消息动态', },
component: () => import('../views/news/news.vue')
},
{
path: 'joinUs', name: 'joinUs', meta: {title: '加入我们', },
component: () => import('../views/joinUs/joinUs.vue')
},
{
path: 'contactUs', name: 'contactUs', meta: {title: '联系我们', },
component: () => import('../views/contactUs/contactUs.vue')
},
]
},
{
path: '/about',
name: 'about',
// route level code-splitting
// this generates a separate chunk (About.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import('../views/AboutView.vue')
}
]
})
export default router

12
src/stores/counter.js

@ -0,0 +1,12 @@
import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', () => {
const count = ref(0)
const doubleCount = computed(() => count.value * 2)
function increment() {
count.value++
}
return { count, doubleCount, increment }
})

15
src/views/AboutView.vue

@ -0,0 +1,15 @@
<template>
<div class="about">
<h1>This is an about page</h1>
</div>
</template>
<style>
@media (min-width: 1024px) {
.about {
min-height: 100vh;
display: flex;
align-items: center;
}
}
</style>

9
src/views/HomeView.vue

@ -0,0 +1,9 @@
<script setup>
import TheWelcome from '../components/TheWelcome.vue'
</script>
<template>
<main>
<TheWelcome />
</main>
</template>

236
src/views/aboutUs/aboutUs.vue

@ -0,0 +1,236 @@
<template>
<div class="aboutUs">
<div class="banner">
<img src="@/assets/images/aboutusbanner.png" alt="">
</div>
<div class="menuTop">
<div class="container">
<el-menu :default-active="activeIndex" class="el-menu-topBar" mode="horizontal" @select="handleSelect">
<el-menu-item index="con1Top">公司介绍</el-menu-item>
<el-menu-item index="con2Top">核心优势</el-menu-item>
<el-menu-item index="con3Top">主要业务</el-menu-item>
<el-menu-item index="con4Top">办公地址</el-menu-item>
</el-menu>
</div>
</div>
<div class="container" ref="con1Ref">
<div class="titleBox">
<titles :text="{h1: '杭州钧安科技', tps: '驾培行业数字化改革全域解决方案开发商'}"/>
</div>
<div class="con1">
<div class="leftTxt">
<div class="p">
<div class="text">杭州钧安科技有限公司成立于2021年1月是一家专注于为驾培行业数字化改革提供技术支持和服务为行业提供数字化解决方案的软件开发公司</div>
<div class="text">公司的骨干均是在驾培行业互联网行业深耕多年有着丰富经验的人员公司秉承精心服务用户至上的服务宗旨为驾校提供推广招生服务及驾校管理系统为用户提供集找驾校报名缴费学车于一体的一站式平台为行业管理部门提供行业监管治理平台公司致力于为驾培行业创新发展提升行业数字化服务水平做出贡献</div>
</div>
<div class="ul1">
<div class="li1">
<div class="num_row">
<div class="num">123</div>
<div class="unit"></div>
</div>
<div class="label">服务驾校</div>
</div>
<div class="li1">
<div class="num_row">
<div class="num">123</div>
<div class="unit"></div>
</div>
<div class="label">服务教练</div>
</div>
<div class="li1">
<div class="num_row">
<div class="num">123</div>
<div class="unit"></div>
</div>
<div class="label">报名学员</div>
</div>
</div>
</div>
<div class="rightImg">
<img src="@/assets/images/onething.png" alt="">
</div>
</div>
</div>
<div class="con2" ref="con2Ref" style="padding-top: 40px;">
<img src="@/assets/images/hxys.png" alt="">
</div>
<div class="con3" ref="con3Ref">
<div class="titleBox">
<titles :text="{h1: '主要业务', tps: '驾培行业数字化改革全域解决方案开发商'}"/>
</div>
<div class="con2">
<img src="@/assets/images/gywm.png" alt="">
</div>
</div>
<div class="con4" ref="con4Ref">
<div class="container">
<div class="titleBox">
<titles :text="{h1: '办公地点', tps: ''}"/>
</div>
<div class="h2">杭州钧安科技有限公司</div>
<div class="txt">地址杭州市上城区临丁路1190号尚坤丁兰国际8楼808室</div>
<div class="txt">电话0571-5660 6030</div>
<div class="map">
<mapCard/>
<!-- <iframe width="1280" height="400" frameborder='0' scrolling='no' marginheight='0' marginwidth='0' src="https://surl.amap.com/m7DFsyYWeMy"></iframe> -->
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref, onMounted, nextTick } from 'vue'
import titles from '@/components/title/title.vue'
import mapCard from '@/components/mapCard/mapCard.vue'
const con1Ref = ref(null)
const con2Ref = ref(null)
const con3Ref = ref(null)
const con4Ref = ref(null)
const refOfferTop = ref({})
const activeIndex = ref('aboutUs')
const handleSelect = (key, keyPath) => {
console.log(refOfferTop.value[key])
window.scrollTo({
top: refOfferTop.value[key],
behavior: 'smooth' //
});
}
onMounted(()=>{
setTimeout(()=>{
refOfferTop.value.con1Top = con1Ref.value.offsetTop
refOfferTop.value.con2Top = con2Ref.value.offsetTop
refOfferTop.value.con3Top = con3Ref.value.offsetTop
refOfferTop.value.con4Top = con4Ref.value.offsetTop
console.log(con2Ref.value.offsetTop)
console.log(con3Ref.value.offsetTop)
}, 1000)
})
</script>
<style lang="scss" scoped>
.banner {
width: 100%;
img {
display: block;
width: 100%;
height: 100%;
}
}
.map {
width: 1280px;
height: 400px;
border-radius: 10px;
overflow: hidden;
margin-top: 30px;
}
.menuTop {
width: 100%;
height: 54px;
overflow: hidden;
background: #F6F7F8;
}
.con4 {
padding: 60px 0 150px 0;
background: #F6F7F8;
.h2 {
font-size: 24px;
font-weight: 700;
padding: 20px 0;
}
.txt {
font-size: 16px;
margin-bottom: 14px;
}
}
.con1 {
display: flex;
justify-content: space-between;
.leftTxt {
color: #333;
padding-right: 60px;
flex: 1;
.p {
font-size: 22px;
.text {
margin-bottom: 20px;
}
}
.ul1 {
display: flex;
justify-content: space-between;
margin-top: 60px;
.li1 {
.num_row {
display: flex;
.num {
font-size: 28px;
font-weight: 700;
}
.unit {
font-size: 12px;
margin-top: 16px;
margin-left: 6px;
}
}
.label {
font-size: 14px;
}
}
}
}
.rightImg {
img {
}
}
}
.con2 {
width: 100%;
img {
width: 100%;
}
}
.con3 {
padding-bottom: 154px;
}
</style>
<style lang="scss">
.el-menu-topBar {
border: none !important;
background: none;
.el-menu-item.is-active {
border-top: 2px solid var(--el-menu-active-color);
border-bottom: none !important;
}
}
</style>

14
src/views/contactUs/contactUs.vue

@ -0,0 +1,14 @@
<template>
<div class="a">联系我们</div>
</template>
<script setup>
</script>
<style>
</style>

14
src/views/joinUs/joinUs.vue

@ -0,0 +1,14 @@
<template>
<div class="a">加入我们</div>
</template>
<script setup>
</script>
<style>
</style>

13
src/views/news/news.vue

@ -0,0 +1,13 @@
<template>
<div class="a">新闻动态</div>
</template>
<script setup>
</script>
<style>
</style>

12
src/views/solution/solution.vue

@ -0,0 +1,12 @@
<template>
<div class="a">解决方案</div>
</template>
<script setup>
</script>
<style>
</style>

18
vite.config.js

@ -0,0 +1,18 @@
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
vueDevTools(),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})
Loading…
Cancel
Save