unknown 2 months ago
parent
commit
e7c50bc5ee
  1. 10
      .env.development
  2. 6
      .env.production
  3. 3
      index.html
  4. 2
      package.json
  5. 286
      pnpm-lock.yaml
  6. BIN
      public/favicon.ico
  7. 1
      src/App.vue
  8. 6
      src/assets/base.css
  9. 0
      src/assets/images/appal.png
  10. 0
      src/assets/images/homeIcon (1).png
  11. 0
      src/assets/images/homeIcon (2).png
  12. 0
      src/assets/images/homeIcon (3).png
  13. 0
      src/assets/images/homeIcon (4).png
  14. 0
      src/assets/images/homeTit.png
  15. 0
      src/assets/images/homeicon.png
  16. 0
      src/assets/images/homeicon2.png
  17. 0
      src/assets/images/joinus.png
  18. BIN
      src/assets/images/jxQrcode.png
  19. 6
      src/components/bottoms/bottoms.vue
  20. 17
      src/components/top/top.vue
  21. 32
      src/http/api.js
  22. 48
      src/http/request.js
  23. 7
      src/main.js
  24. 19
      src/router/index.js
  25. 43
      src/utils/utils.js
  26. 15
      src/views/AboutView.vue
  27. 9
      src/views/HomeView.vue
  28. 17
      src/views/aboutUs/aboutUs.vue
  29. 2
      src/views/contactUs/contactUs.vue
  30. 344
      src/views/home/home.vue
  31. 2
      src/views/joinUs/joinUs.vue
  32. 48
      src/views/news/detils.vue
  33. 61
      src/views/news/news.vue
  34. 31
      src/views/solution/solution.vue
  35. 16
      vite.config.js

10
.env.development

@ -0,0 +1,10 @@
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
VITE_APP_PORT = 3000
# 开发环境配置
VITE_APP_ENV = 'development'
# 若依管理系统/开发环境
VITE_APP_BASE_API = '/dev-api'

6
.env.production

@ -0,0 +1,6 @@
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
VITE_APP_PORT = 3000
VITE_APP_BASE_API = 'https://www.jaxc.cn/gzpt/'

3
index.html

@ -4,10 +4,11 @@
<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>
<title>钧安科技</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

2
package.json

@ -10,9 +10,11 @@
},
"dependencies": {
"@amap/amap-jsapi-loader": "^1.0.1",
"axios": "^1.7.2",
"element-plus": "^2.7.6",
"pinia": "^2.1.7",
"sass": "^1.77.6",
"video.js": "^8.16.1",
"vue": "^3.4.29",
"vue-router": "^4.3.3"
},

286
pnpm-lock.yaml

@ -11,6 +11,9 @@ importers:
'@amap/amap-jsapi-loader':
specifier: ^1.0.1
version: 1.0.1
axios:
specifier: ^1.7.2
version: 1.7.2
element-plus:
specifier: ^2.7.6
version: 2.7.6(vue@3.4.31)
@ -20,6 +23,9 @@ importers:
sass:
specifier: ^1.77.6
version: 1.77.6
video.js:
specifier: ^8.16.1
version: 8.16.1
vue:
specifier: ^3.4.29
version: 3.4.31
@ -201,6 +207,10 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
'@babel/runtime@7.24.8':
resolution: {integrity: sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==, tarball: https://registry.npmmirror.com/@babel/runtime/-/runtime-7.24.8.tgz}
engines: {node: '>=6.9.0'}
'@babel/template@7.24.7':
resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==, tarball: https://registry.npmmirror.com/@babel/template/-/template-7.24.7.tgz}
engines: {node: '>=6.9.0'}
@ -503,6 +513,23 @@ packages:
'@types/web-bluetooth@0.0.16':
resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==, tarball: https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz}
'@videojs/http-streaming@3.13.1':
resolution: {integrity: sha512-G7YrgNEq9ETaUmtkoTnTuwkY9U+xP7Xncedzgxio/Rmz2Gn2zmodEbBIVQinb2UDznk7X8uY5XBr/Ew6OD/LWg==, tarball: https://registry.npmmirror.com/@videojs/http-streaming/-/http-streaming-3.13.1.tgz}
engines: {node: '>=8', npm: '>=5'}
peerDependencies:
video.js: ^8.14.0
'@videojs/vhs-utils@3.0.5':
resolution: {integrity: sha512-PKVgdo8/GReqdx512F+ombhS+Bzogiofy1LgAj4tN8PfdBx3HSS7V5WfJotKTqtOWGwVfSWsrYN/t09/DSryrw==, tarball: https://registry.npmmirror.com/@videojs/vhs-utils/-/vhs-utils-3.0.5.tgz}
engines: {node: '>=8', npm: '>=5'}
'@videojs/vhs-utils@4.0.0':
resolution: {integrity: sha512-xJp7Yd4jMLwje2vHCUmi8MOUU76nxiwII3z4Eg3Ucb+6rrkFVGosrXlMgGnaLjq724j3wzNElRZ71D/CKrTtxg==, tarball: https://registry.npmmirror.com/@videojs/vhs-utils/-/vhs-utils-4.0.0.tgz}
engines: {node: '>=8', npm: '>=5'}
'@videojs/xhr@2.7.0':
resolution: {integrity: sha512-giab+EVRanChIupZK7gXjHy90y3nncA2phIOyG3Ne5fvpiMJzvqYwiTOnEVW2S4CoYcuKJkomat7bMXA/UoUZQ==, tarball: https://registry.npmmirror.com/@videojs/xhr/-/xhr-2.7.0.tgz}
'@vitejs/plugin-vue@5.0.5':
resolution: {integrity: sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.0.5.tgz}
engines: {node: ^18.0.0 || >=20.0.0}
@ -578,6 +605,13 @@ packages:
'@vueuse/shared@9.13.0':
resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==, tarball: https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz}
'@xmldom/xmldom@0.8.10':
resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==, tarball: https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz}
engines: {node: '>=10.0.0'}
aes-decrypter@4.0.1:
resolution: {integrity: sha512-H1nh/P9VZXUf17AA5NQfJML88CFjVBDuGkp5zDHa7oEhYN9TTpNLJknRY1ie0iSKWlDf6JRnJKaZVDSQdPy6Cg==, tarball: https://registry.npmmirror.com/aes-decrypter/-/aes-decrypter-4.0.1.tgz}
ansi-styles@3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz}
engines: {node: '>=4'}
@ -589,6 +623,12 @@ packages:
async-validator@4.2.5:
resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==, tarball: https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz}
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, tarball: https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz}
axios@1.7.2:
resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==, tarball: https://registry.npmmirror.com/axios/-/axios-1.7.2.tgz}
binary-extensions@2.3.0:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz}
engines: {node: '>=8'}
@ -630,6 +670,10 @@ packages:
color-name@1.1.3:
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz}
combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, tarball: https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz}
engines: {node: '>= 0.8'}
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, tarball: https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz}
@ -668,6 +712,13 @@ packages:
resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==, tarball: https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz}
engines: {node: '>=12'}
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, tarball: https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz}
engines: {node: '>=0.4.0'}
dom-walk@0.1.2:
resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==, tarball: https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz}
electron-to-chromium@1.4.818:
resolution: {integrity: sha512-eGvIk2V0dGImV9gWLq8fDfTTsCAeMDwZqEPMr+jMInxZdnp9Us8UpovYpRCf9NQ7VOFgrN2doNSgvISbsbNpxA==, tarball: https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.818.tgz}
@ -710,6 +761,19 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz}
engines: {node: '>=8'}
follow-redirects@1.15.6:
resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.6.tgz}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
peerDependenciesMeta:
debug:
optional: true
form-data@4.0.0:
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, tarball: https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz}
engines: {node: '>= 6'}
fs-extra@11.2.0:
resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-11.2.0.tgz}
engines: {node: '>=14.14'}
@ -731,6 +795,9 @@ packages:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz}
engines: {node: '>= 6'}
global@4.4.0:
resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==, tarball: https://registry.npmmirror.com/global/-/global-4.4.0.tgz}
globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, tarball: https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz}
engines: {node: '>=4'}
@ -756,6 +823,9 @@ packages:
immutable@4.3.6:
resolution: {integrity: sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==, tarball: https://registry.npmmirror.com/immutable/-/immutable-4.3.6.tgz}
individual@2.0.0:
resolution: {integrity: sha512-pWt8hBCqJsUWI/HtcfWod7+N9SgAqyPEaF7JQjwzjn5vGrpg6aQ5qeAFQ7dx//UH4J1O+7xqew+gCeeFt6xN/g==, tarball: https://registry.npmmirror.com/individual/-/individual-2.0.0.tgz}
is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz}
engines: {node: '>=8'}
@ -769,6 +839,9 @@ packages:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz}
engines: {node: '>=0.10.0'}
is-function@1.0.2:
resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==, tarball: https://registry.npmmirror.com/is-function/-/is-function-1.0.2.tgz}
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz}
engines: {node: '>=0.10.0'}
@ -832,6 +905,9 @@ packages:
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz}
m3u8-parser@7.1.0:
resolution: {integrity: sha512-7N+pk79EH4oLKPEYdgRXgAsKDyA/VCo0qCHlUwacttQA0WqsjZQYmNfywMvjlY9MpEBVZEt0jKFd73Kv15EBYQ==, tarball: https://registry.npmmirror.com/m3u8-parser/-/m3u8-parser-7.1.0.tgz}
magic-string@0.30.10:
resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.30.10.tgz}
@ -841,13 +917,28 @@ packages:
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, tarball: https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz}
mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, tarball: https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz}
engines: {node: '>= 0.6'}
mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, tarball: https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz}
engines: {node: '>= 0.6'}
mimic-fn@4.0.0:
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, tarball: https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz}
engines: {node: '>=12'}
min-document@2.19.0:
resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==, tarball: https://registry.npmmirror.com/min-document/-/min-document-2.19.0.tgz}
mitt@3.0.1:
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==, tarball: https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz}
mpd-parser@1.3.0:
resolution: {integrity: sha512-WgeIwxAqkmb9uTn4ClicXpEQYCEduDqRKfmUdp4X8vmghKfBNXZLYpREn9eqrDx/Tf5LhzRcJLSpi4ohfV742Q==, tarball: https://registry.npmmirror.com/mpd-parser/-/mpd-parser-1.3.0.tgz}
hasBin: true
mrmime@2.0.0:
resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==, tarball: https://registry.npmmirror.com/mrmime/-/mrmime-2.0.0.tgz}
engines: {node: '>=10'}
@ -855,6 +946,11 @@ packages:
ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz}
mux.js@7.0.3:
resolution: {integrity: sha512-gzlzJVEGFYPtl2vvEiJneSWAWD4nfYRHD5XgxmB2gWvXraMPOYk+sxfvexmNfjQUFpmk6hwLR5C6iSFmuwCHdQ==, tarball: https://registry.npmmirror.com/mux.js/-/mux.js-7.0.3.tgz}
engines: {node: '>=8', npm: '>=5'}
hasBin: true
nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@ -915,14 +1011,28 @@ packages:
typescript:
optional: true
pkcs7@1.0.4:
resolution: {integrity: sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ==, tarball: https://registry.npmmirror.com/pkcs7/-/pkcs7-1.0.4.tgz}
hasBin: true
postcss@8.4.39:
resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.39.tgz}
engines: {node: ^10 || ^12 || >=14}
process@0.11.10:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==, tarball: https://registry.npmmirror.com/process/-/process-0.11.10.tgz}
engines: {node: '>= 0.6.0'}
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, tarball: https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz}
readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz}
engines: {node: '>=8.10.0'}
regenerator-runtime@0.14.1:
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz}
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==, tarball: https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz}
@ -935,6 +1045,12 @@ packages:
resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==, tarball: https://registry.npmmirror.com/run-applescript/-/run-applescript-7.0.0.tgz}
engines: {node: '>=18'}
rust-result@1.0.0:
resolution: {integrity: sha512-6cJzSBU+J/RJCF063onnQf0cDUOHs9uZI1oroSGnHOph+CQTIJ5Pp2hK5kEQq1+7yE/EEWfulSNXAQ2jikPthA==, tarball: https://registry.npmmirror.com/rust-result/-/rust-result-1.0.0.tgz}
safe-json-parse@4.0.0:
resolution: {integrity: sha512-RjZPPHugjK0TOzFrLZ8inw44s9bKox99/0AZW9o/BEQVrJfhI+fIHMErnPyRa89/yRXUUr93q+tiN6zhoVV4wQ==, tarball: https://registry.npmmirror.com/safe-json-parse/-/safe-json-parse-4.0.0.tgz}
sass@1.77.6:
resolution: {integrity: sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==, tarball: https://registry.npmmirror.com/sass/-/sass-1.77.6.tgz}
engines: {node: '>=14.0.0'}
@ -1005,6 +1121,24 @@ packages:
peerDependencies:
browserslist: '>= 4.21.0'
url-toolkit@2.2.5:
resolution: {integrity: sha512-mtN6xk+Nac+oyJ/PrI7tzfmomRVNFIWKUbG8jdYFt52hxbiReFAXIjYskvu64/dvuW71IcB7lV8l0HvZMac6Jg==, tarball: https://registry.npmmirror.com/url-toolkit/-/url-toolkit-2.2.5.tgz}
video.js@8.16.1:
resolution: {integrity: sha512-yAhxu4Vhyx5DdOgPn2PcRKHx3Vzs9tpvCWA0yX+sv5bIeBkg+IWdEX+MHGZgktgDQ/R8fJDxDbEASyvxXnFn1A==, tarball: https://registry.npmmirror.com/video.js/-/video.js-8.16.1.tgz}
videojs-contrib-quality-levels@4.1.0:
resolution: {integrity: sha512-TfrXJJg1Bv4t6TOCMEVMwF/CoS8iENYsWNKip8zfhB5kTcegiFYezEA0eHAJPU64ZC8NQbxQgOwAsYU8VXbOWA==, tarball: https://registry.npmmirror.com/videojs-contrib-quality-levels/-/videojs-contrib-quality-levels-4.1.0.tgz}
engines: {node: '>=16', npm: '>=8'}
peerDependencies:
video.js: ^8
videojs-font@4.2.0:
resolution: {integrity: sha512-YPq+wiKoGy2/M7ccjmlvwi58z2xsykkkfNMyIg4xb7EZQQNwB71hcSsB3o75CqQV7/y5lXkXhI/rsGAS7jfEmQ==, tarball: https://registry.npmmirror.com/videojs-font/-/videojs-font-4.2.0.tgz}
videojs-vtt.js@0.15.5:
resolution: {integrity: sha512-yZbBxvA7QMYn15Lr/ZfhhLPrNpI/RmCSCqgIff57GC2gIrV5YfyzLfLyZMj0NnZSAz8syB4N0nHXpZg9MyrMOQ==, tarball: https://registry.npmmirror.com/videojs-vtt.js/-/videojs-vtt.js-0.15.5.tgz}
vite-hot-client@0.2.3:
resolution: {integrity: sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==, tarball: https://registry.npmmirror.com/vite-hot-client/-/vite-hot-client-0.2.3.tgz}
peerDependencies:
@ -1304,6 +1438,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@babel/runtime@7.24.8':
dependencies:
regenerator-runtime: 0.14.1
'@babel/template@7.24.7':
dependencies:
'@babel/code-frame': 7.24.7
@ -1504,6 +1642,35 @@ snapshots:
'@types/web-bluetooth@0.0.16': {}
'@videojs/http-streaming@3.13.1(video.js@8.16.1)':
dependencies:
'@babel/runtime': 7.24.8
'@videojs/vhs-utils': 4.0.0
aes-decrypter: 4.0.1
global: 4.4.0
m3u8-parser: 7.1.0
mpd-parser: 1.3.0
mux.js: 7.0.3
video.js: 8.16.1
'@videojs/vhs-utils@3.0.5':
dependencies:
'@babel/runtime': 7.24.8
global: 4.4.0
url-toolkit: 2.2.5
'@videojs/vhs-utils@4.0.0':
dependencies:
'@babel/runtime': 7.24.8
global: 4.4.0
url-toolkit: 2.2.5
'@videojs/xhr@2.7.0':
dependencies:
'@babel/runtime': 7.24.8
global: 4.4.0
is-function: 1.0.2
'@vitejs/plugin-vue@5.0.5(vite@5.3.3(sass@1.77.6))(vue@3.4.31)':
dependencies:
vite: 5.3.3(sass@1.77.6)
@ -1639,6 +1806,15 @@ snapshots:
- '@vue/composition-api'
- vue
'@xmldom/xmldom@0.8.10': {}
aes-decrypter@4.0.1:
dependencies:
'@babel/runtime': 7.24.8
'@videojs/vhs-utils': 3.0.5
global: 4.4.0
pkcs7: 1.0.4
ansi-styles@3.2.1:
dependencies:
color-convert: 1.9.3
@ -1650,6 +1826,16 @@ snapshots:
async-validator@4.2.5: {}
asynckit@0.4.0: {}
axios@1.7.2:
dependencies:
follow-redirects: 1.15.6
form-data: 4.0.0
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
binary-extensions@2.3.0: {}
birpc@0.2.17: {}
@ -1697,6 +1883,10 @@ snapshots:
color-name@1.1.3: {}
combined-stream@1.0.8:
dependencies:
delayed-stream: 1.0.0
convert-source-map@2.0.0: {}
copy-anything@3.0.5:
@ -1726,6 +1916,10 @@ snapshots:
define-lazy-prop@3.0.0: {}
delayed-stream@1.0.0: {}
dom-walk@0.1.2: {}
electron-to-chromium@1.4.818: {}
element-plus@2.7.6(vue@3.4.31):
@ -1803,6 +1997,14 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
follow-redirects@1.15.6: {}
form-data@4.0.0:
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
mime-types: 2.1.35
fs-extra@11.2.0:
dependencies:
graceful-fs: 4.2.11
@ -1820,6 +2022,11 @@ snapshots:
dependencies:
is-glob: 4.0.3
global@4.4.0:
dependencies:
min-document: 2.19.0
process: 0.11.10
globals@11.12.0: {}
graceful-fs@4.2.11: {}
@ -1834,6 +2041,8 @@ snapshots:
immutable@4.3.6: {}
individual@2.0.0: {}
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.3.0
@ -1842,6 +2051,8 @@ snapshots:
is-extglob@2.1.1: {}
is-function@1.0.2: {}
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
@ -1890,6 +2101,12 @@ snapshots:
dependencies:
yallist: 3.1.1
m3u8-parser@7.1.0:
dependencies:
'@babel/runtime': 7.24.8
'@videojs/vhs-utils': 3.0.5
global: 4.4.0
magic-string@0.30.10:
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
@ -1898,14 +2115,36 @@ snapshots:
merge-stream@2.0.0: {}
mime-db@1.52.0: {}
mime-types@2.1.35:
dependencies:
mime-db: 1.52.0
mimic-fn@4.0.0: {}
min-document@2.19.0:
dependencies:
dom-walk: 0.1.2
mitt@3.0.1: {}
mpd-parser@1.3.0:
dependencies:
'@babel/runtime': 7.24.8
'@videojs/vhs-utils': 4.0.0
'@xmldom/xmldom': 0.8.10
global: 4.4.0
mrmime@2.0.0: {}
ms@2.1.2: {}
mux.js@7.0.3:
dependencies:
'@babel/runtime': 7.24.8
global: 4.4.0
nanoid@3.3.7: {}
node-releases@2.0.14: {}
@ -1947,16 +2186,26 @@ snapshots:
vue: 3.4.31
vue-demi: 0.14.8(vue@3.4.31)
pkcs7@1.0.4:
dependencies:
'@babel/runtime': 7.24.8
postcss@8.4.39:
dependencies:
nanoid: 3.3.7
picocolors: 1.0.1
source-map-js: 1.2.0
process@0.11.10: {}
proxy-from-env@1.1.0: {}
readdirp@3.6.0:
dependencies:
picomatch: 2.3.1
regenerator-runtime@0.14.1: {}
rfdc@1.4.1: {}
rollup@4.18.0:
@ -1983,6 +2232,14 @@ snapshots:
run-applescript@7.0.0: {}
rust-result@1.0.0:
dependencies:
individual: 2.0.0
safe-json-parse@4.0.0:
dependencies:
rust-result: 1.0.0
sass@1.77.6:
dependencies:
chokidar: 3.6.0
@ -2037,6 +2294,35 @@ snapshots:
escalade: 3.1.2
picocolors: 1.0.1
url-toolkit@2.2.5: {}
video.js@8.16.1:
dependencies:
'@babel/runtime': 7.24.8
'@videojs/http-streaming': 3.13.1(video.js@8.16.1)
'@videojs/vhs-utils': 4.0.0
'@videojs/xhr': 2.7.0
aes-decrypter: 4.0.1
global: 4.4.0
m3u8-parser: 7.1.0
mpd-parser: 1.3.0
mux.js: 7.0.3
safe-json-parse: 4.0.0
videojs-contrib-quality-levels: 4.1.0(video.js@8.16.1)
videojs-font: 4.2.0
videojs-vtt.js: 0.15.5
videojs-contrib-quality-levels@4.1.0(video.js@8.16.1):
dependencies:
global: 4.4.0
video.js: 8.16.1
videojs-font@4.2.0: {}
videojs-vtt.js@0.15.5:
dependencies:
global: 4.4.0
vite-hot-client@0.2.3(vite@5.3.3(sass@1.77.6)):
dependencies:
vite: 5.3.3(sass@1.77.6)

BIN
public/favicon.ico

1
src/App.vue

@ -6,6 +6,7 @@
<script setup>
import { RouterView } from 'vue-router'
</script>
<style scoped>

6
src/assets/base.css

@ -84,3 +84,9 @@ body {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.oneRowTxt {
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;
}

0
src/assets/images/首页-(1)_24.png → src/assets/images/appal.png

Before

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

After

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

0
src/assets/images/首页-(1)_37.png → src/assets/images/homeIcon (1).png

Before

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

After

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

0
src/assets/images/首页-(1)_27.png → src/assets/images/homeIcon (2).png

Before

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

After

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

0
src/assets/images/首页-(1)_29.png → src/assets/images/homeIcon (3).png

Before

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

After

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

0
src/assets/images/首页-(1)_34-35.png → src/assets/images/homeIcon (4).png

Before

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

After

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

0
src/assets/images/首页-(1)_21.png → src/assets/images/homeTit.png

Before

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

After

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

0
src/assets/images/首页-(1)_14.png → src/assets/images/homeicon.png

Before

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

After

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

0
src/assets/images/首页-(1)_17.png → src/assets/images/homeicon2.png

Before

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

After

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

0
src/assets/images/加入我们_02.png → src/assets/images/joinus.png

Before

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

After

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

BIN
src/assets/images/jxQrcode.png

After

Width: 400  |  Height: 400  |  Size: 12 KiB

6
src/components/bottoms/bottoms.vue

@ -36,12 +36,12 @@
</div>
<div class="txt">浙里学车APP</div>
</div>
<!-- <div class="qrItem">
<div class="qrItem">
<div class="img">
<img src="@/assets/images/jxqr_11.png" alt="">
<img src="@/assets/images/jxQrcode.png" alt="">
</div>
<div class="txt">浙里学车-驾校版</div>
</div> -->
</div>
<div class="qrItem">
<div class="img">
<img src="@/assets/images/gzhQrcode.png" alt="">

17
src/components/top/top.vue

@ -1,7 +1,7 @@
<template>
<div class="top">
<div class="container">
<div class="logoCon">
<div class="logoCon" @click="router.push({name: 'home'})">
<img src="@/assets/images/topLogo.png" alt="">
</div>
<div class="menuRight">
@ -19,13 +19,19 @@
</template>
<script setup>
import { ref } from 'vue'
import { ref, watch } from 'vue'
import { useRouter } from 'vue-router'
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
// console.log(router)
const route = useRoute()
const activeIndex = ref(route.name)
watch(()=>route.name, (value)=>{
activeIndex.value = value
})
const activeIndex = ref('aboutUs')
const handleSelect = (key, keyPath) => {
router.push({name: key})
@ -49,6 +55,7 @@ const handleSelect = (key, keyPath) => {
}
.logoCon {
height: 44px;
cursor: pointer;
}
.menuRight {

32
src/http/api.js

@ -0,0 +1,32 @@
import request from './request'
// 获取新闻数据
export const querySimpleIndustryDynamics = (data) => {
return request({
url: '/index/querySimpleIndustryDynamics.do',
method: 'post',
data
})
}
// 获取新闻详情
export const getIndustryDynamicDetails = (industryDynamicId) => {
return request({
url: '/index/getIndustryDynamicDetails.do',
method: 'get',
params: {
industryDynamicId
}
})
}
// 获取报名数据
export const indexCollectList = (data) => {
return request({
url: '/index/indexCollectList.do',
method: 'post',
data
})
}

48
src/http/request.js

@ -0,0 +1,48 @@
import axios from 'axios';
import {ElMessage} from 'element-plus';
import router from '@/router';
const service = axios.create({
baseURL: import.meta.env.VITE_APP_BASE_API
});
// 请求拦截器
service.interceptors.request.use(
config => {
return config;
},
error => Promise.reject(error),
);
// 响应拦截器
service.interceptors.response.use(
response => {
const {code, msg} = response.data;
const logoutCodes = [207, 200, 403, 8001, 703];
if (logoutCodes.includes(code)) {
if (!service.msg) {
service.msg = ElMessage({
type: 'error',
message: msg || 'Error',
onClose: () => service.msg = null,
});
}
const {pathname, search} = window.location;
router.replace({ path: `/login?redirect=${pathname + search}` });
} else {
return response.data;
}
},
error => {
if (error.response.data) {
const {code, msg} = error.response.data;
ElMessage.error(msg || '系统出错');
}
return Promise.reject(error.message);
},
);
export default service;

7
src/main.js

@ -5,13 +5,18 @@ import { createPinia } from 'pinia'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
import App from './App.vue'
import router from './router'
const app = createApp(App)
app.use(ElementPlus)
app.use(ElementPlus, {
locale: zhCn,
})
app.use(createPinia())
app.use(router)

19
src/router/index.js

@ -3,14 +3,19 @@ import layout from '../layout/index.vue'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
scrollBehavior: () => ({ left: 0, top: 0 }),
routes: [
{
path: '/',
name: 'layout',
component: layout,
redirect: 'aboutUs',
redirect: 'home',
children: [
{
path: 'home', name: 'home', meta: {title: '首页', },
component: () => import('../views/home/home.vue')
},
{
path: 'aboutUs', name: 'aboutUs', meta: {title: '关于我们', },
component: () => import('../views/aboutUs/aboutUs.vue')
},
@ -23,6 +28,10 @@ const router = createRouter({
component: () => import('../views/news/news.vue')
},
{
path: 'detils', name: 'detils', meta: {title: '消息详情', },
component: () => import('../views/news/detils.vue')
},
{
path: 'joinUs', name: 'joinUs', meta: {title: '加入我们', },
component: () => import('../views/joinUs/joinUs.vue')
},
@ -32,14 +41,6 @@ const router = createRouter({
},
]
},
{
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')
}
]
})

43
src/utils/utils.js

@ -0,0 +1,43 @@
// 日期格式化
export function parseTime(time, pattern) {
if (arguments.length === 0 || !time) {
return null
}
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '');
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}

15
src/views/AboutView.vue

@ -1,15 +0,0 @@
<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

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

17
src/views/aboutUs/aboutUs.vue

@ -28,7 +28,7 @@
<div class="ul1">
<div class="li1">
<div class="num_row">
<div class="num">123</div>
<div class="num">{{info.schoolCount}}</div>
<div class="unit"></div>
</div>
<div class="label">服务驾校</div>
@ -36,7 +36,7 @@
<div class="li1">
<div class="num_row">
<div class="num">123</div>
<div class="num">{{info.coachCount}}</div>
<div class="unit"></div>
</div>
<div class="label">服务教练</div>
@ -44,8 +44,8 @@
<div class="li1">
<div class="num_row">
<div class="num">123</div>
<div class="unit"></div>
<div class="num">{{ (info.studentCount / 10000).toFixed(1) }}</div>
<div class="unit"> </div>
</div>
<div class="label">报名学员</div>
</div>
@ -97,6 +97,15 @@ import titles from '@/components/title/title.vue'
import mapCard from '@/components/mapCard/mapCard.vue'
import { indexCollectList } from '@/http/api'
const info = ref({})
async function indexCollectListFn() {
const { data: res } = await indexCollectList()
info.value = res
console.log(res)
}
indexCollectListFn()
const con1Ref = ref(null)
const con2Ref = ref(null)
const con3Ref = ref(null)

2
src/views/contactUs/contactUs.vue

@ -4,7 +4,7 @@
<template>
<div class="contantUs">
<div class="banner">
<img src="@/assets/images/bannerjjfa.png" alt="">
<img src="@/assets/images/cantan.png" alt="">
</div>
<h1bg :text="{en: 'CONTACT US', cn: '联系我们'}"/>

344
src/views/home/home.vue

@ -0,0 +1,344 @@
<template>
<div class="aboutUs">
<div class="banner">
<img src="@/assets/images/homebanner.png" alt="">
</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="h1">杭州钧安科技</div>
<div class="text">杭州钧安科技有限公司成立于2021年1月是一家专注于为驾培行业数字化改革提供技术支持和服务为行业提供数字化解决方案的软件开发公司</div>
<div class="text2">
公司的骨干均是在驾培行业互联网行业深耕多年有着丰富经验的人员公司秉承精心服务用户至上的服务宗旨为驾校提供推广招生服务及驾校管理系统为用户提供集找驾校报名缴费学车于一体的一站式平台为行业管理部门提供行业监管治理平台公司致力于为驾培行业创新发展提升行业数字化服务水平做出贡献
</div>
</div>
</div>
<div class="rightImg">
<img src="@/assets/images/onething.png" alt="">
</div>
</div>
</div>
<div class="con2" ref="con4Ref">
<div class="container">
<div class="titleBox">
<titles :text="{ h1: '数字驾培解决方案', tps: '学驾资金监管解决方案、行业监管治理解决方案' }" />
</div>
<div class="flex-b">
<div class="item">
<div class="icon"><img src="@/assets/images/homeicon.png" alt=""></div>
<div class="h2">学驾资金监管解决方案</div>
<div class="txt">用户找驾校身份验证填报名表电子合同签署 认订单支付缴费报名成功资金流第三方支付平台T+1工作
驾校资金监管户驾校自有资金账户</div>
<div class="btn" @click="router.push('/solution?offsetTops=con2Top')">查看更多</div>
</div>
<div class="item">
<div class="icon"><img src="@/assets/images/homeicon2.png" alt=""></div>
<div class="h2">行业监管治理解决方案</div>
<div class="txt">
· 行业基础数据归集赋码管理 <br> · 业务管理 <br>· 行业监测预警处置分析 <br>· 行业态势研判分析
</div>
<div class="btn" @click="router.push('/solution?offsetTops=con3Top')">查看更多</div>
</div>
</div>
</div>
</div>
<div class="con3">
<div class="tit"><img src="@/assets/images/homeTit.png" alt=""></div>
<div class="container">
<div class="leftImg">
<img src="@/assets/images/appal.png" alt="">
</div>
<div class="rightText">
<div class="h2">浙里学车平台</div>
<div class="txt">浙里学车平台应用场景投入使用后杭州市委常委常务副市长戴建平等领导听取场景汇报并给予了充分肯定</div>
<div class="txt">中国交通报头版中国新闻网浙江交通旅游导报浙江新闻网钱江晚报杭州日报钱江频道杭州一套等30多家国家省市媒体对改革场景进行了专题正面报道</div>
<div class="txt">入选2021年杭州市党史学习教育民呼我为最佳实践案例</div>
<div class="ul">
<div class="li">
<div class="icon"><img src="@/assets/images/homeIcon (2).png" alt=""></div>
<div class="rightTxt">
<div class="numRow">
<div class="num">{{ (info.studentCount / 10000).toFixed(1) }}</div>
<div class="unit"></div>
</div>
<div class="lab">累计报名学员</div>
</div>
</div>
<div class="li">
<div class="icon"><img src="@/assets/images/homeIcon (3).png" alt=""></div>
<div class="rightTxt">
<div class="numRow">
<div class="num">7.3</div>
<div class="unit">亿+</div>
</div>
<div class="lab">学员学费监管账户累计监管资金总额</div>
</div>
</div>
<div class="li">
<div class="icon"><img src="@/assets/images/homeIcon (4).png" alt=""></div>
<div class="rightTxt">
<div class="numRow">
<div class="num">30</div>
<div class="unit">+</div>
</div>
<div class="lab">APP累计下载量</div>
</div>
</div>
<div class="li">
<div class="icon"><img src="@/assets/images/homeIcon (1).png" alt=""></div>
<div class="rightTxt">
<div class="numRow">
<div class="num">30</div>
<div class="unit">%</div>
</div>
<div class="lab">资金监管账户留存率</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref, onMounted, nextTick } from 'vue'
import titles from '@/components/title/title.vue'
import { useRouter } from 'vue-router'
const router = useRouter()
import { indexCollectList } from '@/http/api'
const info = ref({})
async function indexCollectListFn() {
const { data: res } = await indexCollectList()
info.value = res
console.log(res)
}
indexCollectListFn()
</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;
}
.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: 120px;
flex: 1;
.p {
.text {
margin-bottom: 20px;
font-size: 22px;
}
.text2 {
margin-bottom: 20px;
font-size: 16px;
color: #999;
}
.h1 {
font-size: 24px;
margin-bottom: 25px;
font-weight: 700;
}
}
}
}
.con2 {
padding: 30px 0 96px 0;
background: #F6F7F8;
.flex-b {
display: flex;
width: 100%;
justify-content: space-between;
.item {
display: flex;
width: 48%;
flex-direction: column;
align-items: center;
justify-content: center;
background: #fff;
border-radius: 10px;
padding: 106px 130px 60px 130px;
&:hover {
// background: linear-gradient( 180deg, #53D3E5 0%, #3593FB 100%);
box-shadow: 0px 2px 24px 0px rgba(0, 0, 0, 0.1);
}
.icon {
width: 123px;
height: 100px;
img {
display: block;
width: 100%;
}
}
.h2 {
font-size: 24px;
padding: 73px 0 25px 0;
font-weight: 600;
}
.txt {
font-size: 16px;
color: #333;
}
.btn {
width: 178px;
height: 40px;
background: #1989FA;
border-radius: 2px;
font-size: 16px;
margin-top: 140px;
color: #fff;
text-align: center;
line-height: 40px;
cursor: pointer;
}
}
}
}
.con3 {
width: 100%;
padding: 20px 0 74px 0;
background: #1C232B;
.tit {
width: 100%;
img {display: block;width: 100%;}
}
.container {
display: flex;
background: #fff;
border-radius: 10px;
.leftImg {
flex: 1;
background: #F6F7F8;
img {
width: 100%;
}
}
.rightText {
flex: 1;
width: 0;
padding: 0 56px 0 70px;
.h2 {
font-size: 24px;
font-weight: 700;
color: #333;
margin-top: 65px;
}
.txt {
font-size: 16px;
color: #666;
margin-top: 20px;
}
.ul {
display: flex;
flex-wrap: wrap;
margin-top: 30px;
.li {
width: 50%;
display: flex;
align-items: center;
margin-bottom: 40px;
.icon {
width: 62px;
height: 62px;
img {}
}
.rightTxt {
flex: 1;
width: 0;
padding-left: 6px;
.numRow {
display: flex;
.num {font-size: 28px;font-weight: 700;}
.unit {
font-size: 14px;
font-weight: 400;
margin-top: 14px;
margin-left: 4px;
color: #999;
}
}
.lab {
font-size: 14px;
color: #333;
margin-top: 3px;
white-space: nowrap;
}
}
}
}
}
}
}
</style>

2
src/views/joinUs/joinUs.vue

@ -4,7 +4,7 @@
<template>
<div class="joinUs">
<div class="banner">
<img src="@/assets/images/bannerjjfa.png" alt="">
<img src="@/assets/images/joinus.png" alt="">
</div>
<div class="con1">

48
src/views/news/detils.vue

@ -0,0 +1,48 @@
<template>
<div class="container">
<div class="back" @click="router.back()">
<svg xmlns="http://www.w3.org/2000/svg" class="backSvg" viewBox="0 0 1024 1024" ><path fill="currentColor" d="M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"></path><path fill="currentColor" d="m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"></path></svg>
<div class="txt">返回</div>
</div>
<div v-html="info.content"></div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { useRoute, useRouter } from 'vue-router'
const route = useRoute()
const router = useRouter()
import { getIndustryDynamicDetails } from '@/http/api'
const info = ref({})
async function getIndustryDynamicDetailsFn() {
const { data: res } = await getIndustryDynamicDetails(route.query.industryDynamicId)
console.log(res)
info.value = res
}
getIndustryDynamicDetailsFn()
</script>
<style scoped>
.container {
padding: 30px 0;
}
.back {
display: flex;
align-items: center;
margin-bottom: 20px;
cursor: pointer;
}
.txt {
font-size: 18px; color: var(--el-menu-active-color);margin-right: 4px;
}
.backSvg {
width: 30px;
color: var(--el-menu-active-color);
}
</style>

61
src/views/news/news.vue

@ -1,40 +1,80 @@
<template>
<div class="news">
<div class="banner">
<img src="@/assets/images/bannerjjfa.png" alt="">
<img src="@/assets/images/newbanner_02.png" alt="">
</div>
<div class="li">
<div class="li" v-for="(item,index) in list" :key="index" @click="goDetail(item)">
<div class="container">
<div class="cover">
<img src="" alt="">
</div>
<div class="textCon">
<div class="tit">获评杭州市党史学习教育民呼我为最佳实践案例</div>
<div class="text">日前杭州市党史学习教育民呼我为最佳实践案例名单出炉杭州市交通运输局的浙里学车APP一站式学驾平台入选其中</div>
<div class="tit">{{ item.title }}</div>
<div class="text oneRowTxt">{{ item.content }}</div>
<div class="target">
<div class="icon">来源</div>
<div class="targetTxt">杭州交通</div>
</div>
</div>
<div class="date">2022-01-25</div>
<div class="date">{{ parseTime(item.createDate, '{y}-{m}-{d}') }}</div>
</div>
</div>
<div class="container" style="display: flex;justify-content: center;" v-if="total>0">
<el-pagination background layout="total, sizes, prev, pager, next, jumper" v-model:current-page="queryParams.pageIndex"
v-model:page-size="queryParams.pageSize" :page-sizes="pageSizes" :total="total"
@size-change="handleSizeChange" @current-change="handleCurrentChange" />
</div>
</div>
</template>
<script setup>
import { useRouter } from 'vue-router'
const router = useRouter()
import { ref } from 'vue'
import { parseTime } from '@/utils/utils'
const queryParams = ref({
"isPublish": 1, "pageIndex": 1, "pageSize": 10, "type": 3
})
const pageSizes = [10, 20, 30, 50]
const total = ref(0)
const list = ref([])
import { querySimpleIndustryDynamics } from '@/http/api'
async function querySimpleIndustryDynamicsFn() {
const { data: res } = await querySimpleIndustryDynamics(queryParams.value)
total.value = res.count
list.value = res.list
}
querySimpleIndustryDynamicsFn()
function handleSizeChange(val) {
queryParams.value.pageSize = val
queryParams.value.pageIndex = 1
querySimpleIndustryDynamicsFn()
}
function handleCurrentChange(val) {
queryParams.value.pageIndex = val
querySimpleIndustryDynamicsFn()
}
function goDetail(item) {
router.push('/detils?industryDynamicId='+item.industryDynamicId)
}
</script>
<style lang="scss" scoped>
.news {
width: 100%;
.banner {
width: 100%;
img {
width: 100%;
}
@ -42,9 +82,11 @@
.li {
width: 100%;
cursor: pointer;
&:hover {
background: #F6F7F8;
}
.container {
width: 100%;
display: flex;
@ -56,6 +98,7 @@
height: 118px;
border-radius: 4px;
overflow: hidden;
img {
width: 100%;
}
@ -66,18 +109,20 @@
width: 0;
padding: 0 64px 0 24px;
color: #333;
.tit {
font-size: 22px;
}
.text {
font-size: 12px;
padding: 8px 0 16px 0;
padding: 8px 0 8px 0;
}
.target {
display: flex;
align-items: center;
.icon {
background: #B3B5B9;
padding: 0 4px;

31
src/views/solution/solution.vue

@ -1,11 +1,10 @@
<template>
<div class="solution">
<div class="banner">
<img src="@/assets/images/bannerjjfa.png" alt="">
</div>
<div class="con2">
<div class="con2" ref="con2Ref">
<div class="container">
<div class="tit">
<img src="@/assets/images/tit1.png" alt="">
@ -16,7 +15,7 @@
</div>
</div>
<div class="con3">
<div class="con3" ref="con3Ref">
<div class="container">
<div class="tit">
<img src="@/assets/images/tit2.png" alt="">
@ -26,27 +25,49 @@
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref, onMounted, } from 'vue'
import { useRoute } from 'vue-router'
const route = useRoute()
const con2Ref = ref(null)
const con3Ref = ref(null)
const refOfferTop = ref({})
onMounted(() => {
setTimeout(() => {
refOfferTop.value.con2Top = con2Ref.value.offsetTop
refOfferTop.value.con3Top = con3Ref.value.offsetTop
if(route.query.offsetTops) {
window.scrollTo({
top: refOfferTop.value[route.query.offsetTops],
behavior: 'smooth' //
});
}
}, 1000)
})
</script>
<style lang="scss" scoped>
.solution {
width: 100%;
.banner {
width: 100%;
img {
width: 100%;
}
}
.container {
.tit {
padding: 62px 0 92px 0;
width: 611px;
margin: 0 auto;
img {
display: block;
width: 100%;
@ -55,12 +76,14 @@
.xjzj {
width: 100%;
img {
display: block;
width: 100%;
}
}
}
.con2 {
width: 100%;
padding: 60px 0 300px 0;

16
vite.config.js

@ -10,9 +10,25 @@ export default defineConfig({
vue(),
vueDevTools(),
],
server: {
host: true,
open: true,
port: 18889,
proxy: {
// https://cn.vitejs.dev/config/#server-proxy
'/dev-api': {
target: 'https://www.jaxc.cn/gzpt/',
// target: 'https://5da5902884.vicp.fun/',
// target: 'https://5590g288c4.goho.co/',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api/, '')
}
}
},
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})
Loading…
Cancel
Save