• 【“在路上”疫情信息检测】——项目基础框架搭建


            此次项目是一个移动端的疫情数据信息展示平台,后期会将该项目上传到云平台,有机会的话也可以用于自己出行时使用。

    1、使用技术点:

    • 组件的拆分;
    • 使用axios进行网络请求;
    • 在Vue中使用echarts图表;
    • 在vue中封装tabs自定义组件;
    • 在Vue中使用Swiper;
    • 在Vue中使用Vant库;
    • 项目的版本控制——GIT;
    • 使用yarn进行项目包管理;

    2、项目初始化

            在之前的项目中也有总结的项目初始话的方式,这里简单复一下,如果有需要可以看前面有详细的关于项目初始化的介绍。

    1. 创建远程仓库:这里我们使用gitee仓库,为了更加贴近实际项目,我们的master分支只放项目的README文件,我们的项目放在project分支上,之后开发时基于project分支分别创建feat_develop和fix_develop分支,分别进行新建和修改操作。
    2. 初始化项目:vue create vue-ontheway
    3. 安装Axios:yarn add axios -S
    4. 安装Vant:yarn add vant -S
    5. 启动项目:yarn serve

    3、项目基础结构

    1.  css初始化:在assets文件夹下创建base.css文件,用来存放项目基础css样式;
    2. 引入初始化css:直接在App.vue中引入或者在main.js中引入,即可对整个项目适用; 
    全局引入1:App.vue中引入
    全局引入2:main.js中引入

     4、移动端适配方案——vw布局

            vw布局相当于把当前屏幕分成100份,即100vw=750px;

    如果想要使用vw布局,需要设置根字体的大小,所以这个在base.css中进行设置。

    5、搭建初步页面样式

            我们在搭建页面的时候,首先要想到的是将我们的组件进行拆分,毕竟我们使用Vue的目的就是方便我们的组件化拆分嘛!

    这里我们先构想一下我们可能涉及到的模块,然后之后我们不够的话可以再添加。

    1. 首页:我们的页面是需要有一个首页,去承载这些组件的,这里我们使用HomeView.vue;
    2. 病毒信息:这里是对病毒的信息进行一个简单的介绍,这里我们直接新建一个ConInfo模块(文件),来存放我们的ConInfo.vue组件。
    3. 疫情热点信息:这里需要在首页展示疫情热点信息,所以这里直接放在ConInfo模块。

    6、接口注册

    这里我们后台用到的数据全部来自网上现成的免费接口,所以需要我们注册一下。 

    1. 疫情信息接口 ——https://www.tianapi.com/apiview/169
      1. 注册:我们首先需要注册天行数据  用户注册 - 天行数据TianAPIhttps://www.tianapi.com/signup.html
      2. 申请接口:注册完成后,我们直接点击这个链接,点击申请接口即可抗击疫情API接口 - 天行数据TianAPI抗击疫情,nCoV新冠疫情实时播报。接口稳定高效、简单易用,支持免费试用再付费,欢迎使用。https://www.tianapi.com/apiview/169
      3. 查看接口:申请接口后,可以在“首页”—“数据管理”—“我申请的接口”中查看该接口。

    7、配置公共接口地址

            之所以配置公共的接口,目的是为了方便我们对于发送请求的一个统一管理,这样我们在之后需要修改请求地址的时候,就不用去每一个组件中去寻找了,直接找到我们公共的接口地址修改即可。

    接口文件存放地址:src/api/base.js

    1. /**
    2. * 公共的请求接口
    3. **/
    4. const base = {
    5. host: 'https://api.tianapi.com', //天行数据
    6. covInfo: '/ncov/index?key=271aaa17a71d72bf78582a79bdcce075',//疫情病毒信息
    7. }
    8. export default base;

     8、页面结构与页面代码

     /src/api/base.js

    1. /**
    2. * 公共的请求接口
    3. **/
    4. const base = {
    5. host: 'https://api.tianapi.com', //天行数据
    6. covInfo: '/ncov/index?key=271aaa17a71d72bf78582a79bdcce075',//疫情病毒信息
    7. }
    8. export default base;

    /src/api/index.js

    1. /**
    2. * 请求接口的方法
    3. */
    4. // 引入axios 发送请求
    5. import axios from "axios";
    6. //引入接口地址
    7. import base from './base'
    8. // 获取请求方法
    9. const api = {
    10. /**
    11. * 从接口获取病毒信息
    12. */
    13. getCovInfo() {
    14. const url = base.host + base.covInfo
    15. // get请求接受一个参数:请求地址
    16. // 注意:这里我们只拿到数据,不做解析,解析在对应的组件中进行
    17. return axios.get(url)
    18. },
    19. // 自己定义了一个病毒信息对象
    20. cracteCovInfo() {
    21. var conInfo={
    22. note1:'病毒:SARA-CoV-2,其导致疾病命名 COVID-19。',
    23. note2:'传染源:新冠肺炎的患者.无症状感染者也可能成为传染源。',
    24. note3:'传染途径:经呼吸道飞沫、接触传播是主要的传播途径。气溶胶传播和消化道传播途径尚待明确。',
    25. remark1: '易感人群:人群普遍易感。老年人及有基础疾病者感染后病情较重,儿童及婴儿也有发病。',
    26. remark2: '潜伏期:一般为3~7天,最长不超过14天,潜伏期可能存在传染性,其中无症状病例传染性非常罕见。',
    27. remark3: '宿主:野生动物,可能为中华菊头蝠。',
    28. }
    29. return conInfo
    30. }
    31. }
    32. export default api

    /src/api/assets/css/base.css

    1. /* css初始化文件 */
    2. body,ul,li,p,h1,h2,h3,h4,h5,h6{
    3. margin: 0;
    4. padding: 0;
    5. }
    6. ul{
    7. list-style: none;
    8. }
    9. a{
    10. text-decoration: none;
    11. color: #333;
    12. }
    13. img{
    14. border: 0;
    15. }
    16. /* 移动布局 */
    17. html{
    18. font-size: 13.333333vw;
    19. }
    20. /* 防止字体过大 */
    21. @media (min-width:750px) {
    22. html{
    23. font-size: 100px;
    24. }
    25. }
    26. body{
    27. font-size: 14px;
    28. font-family: '微软雅黑','Arial Narrow',Arial, sans-serif;
    29. max-width: 750px;
    30. margin: 0;
    31. }

    /src/api/router/index.js

    1. import Vue from 'vue'
    2. import VueRouter from 'vue-router'
    3. import HomeView from '../views/HomeView.vue'
    4. Vue.use(VueRouter)
    5. const routes = [
    6. {
    7. path: '/',
    8. name: 'home',
    9. component: HomeView
    10. },
    11. ]
    12. const router = new VueRouter({
    13. mode: 'history',
    14. base: process.env.BASE_URL,
    15. routes
    16. })
    17. export default router

    /src/api/views/ConInfo/ConInfo.vue

    1. <template>
    2. <div class="info">
    3. <div class="cov">
    4. <div class="title">病毒信息div>
    5. <p>{{ covDesc.note1 }}p>
    6. <p>{{ covDesc.note2 }}p>
    7. <p>{{ covDesc.note3 }}p>
    8. <p>{{ covDesc.remark1 }}p>
    9. <p>{{ covDesc.remark2 }}p>
    10. <p>{{ covDesc.remark3 }}p>
    11. div>
    12. <div class="hot">
    13. <div class="title">
    14. <img src="../../assets/images/hot.png" width="60px" alt="" />
    15. div>
    16. <ul>
    17. <li v-for="item in news" :key="item.id">
    18. {{ item.title }}
    19. li>
    20. ul>
    21. div>
    22. div>
    23. template>
    24. <script>
    25. export default {
    26. // 接受父组件传来的信息
    27. props: {
    28. covDesc: {
    29. type: Object,
    30. default: function () {
    31. return {};
    32. },
    33. },
    34. news: {
    35. type: Array,
    36. default: function () {
    37. return [];
    38. },
    39. },
    40. },
    41. };
    42. script>
    43. <style lang="scss" scoped>
    44. .info {
    45. // 因为我们提前把根标签设置成100px 所以 0.2rem=20px
    46. padding: 0.2rem;
    47. .title {
    48. border-left: 0.1rem solid rgb(20, 49, 128);
    49. padding-left: 0.1rem;
    50. margin-bottom: 0.2rem;
    51. }
    52. P {
    53. line-height: 0.5rem;
    54. color: #666;
    55. }
    56. }
    57. style>

    /src/api/views/HomeView.vue

    1. <template>
    2. <div class="home">
    3. <picture>
    4. <img src="../assets/images/true.jpg" width="100%" alt="" />
    5. picture>
    6. <ConInfo :covDesc="covDesc" :news="news" />
    7. div>
    8. template>
    9. <script>
    10. import ConInfo from "./ConInfo/ConInfo.vue";
    11. import api from "../api/index";
    12. export default {
    13. components: { ConInfo },
    14. //快捷键:vd 快速创建data模板
    15. data() {
    16. return {
    17. covDesc: {},
    18. news: [],
    19. };
    20. },
    21. created() {
    22. // 拿到我们定义好的数据 病毒信息
    23. this.covDesc = api.cracteCovInfo();
    24. // 请求病毒信息接口=====
    25. api.getCovInfo().then((res) => {
    26. console.log(res.data);
    27. // 获取疫情热点信息
    28. this.news=res.data.newslist[0].news;
    29. });
    30. },
    31. };
    32. script>
    33. <style lang="scss" scoped>
    34. style>

    /src/App.vue

    1. <template>
    2. <div id="app">
    3. <router-view />
    4. div>
    5. template>
    6. <style lang="scss">
    7. @import url("./assets/css/base.css");
    8. style>

    静态图片我还没有想好以什么形式上传,后续会想办法,项目持续更新中~~~

  • 相关阅读:
    一文搞懂EMAS Serverless小程序开发|电子书免费下载
    Ubuntu22.04安装PostgreSQL
    C++中统计代码的运算时间
    <一>继承的基本意义
    Golang实现JAVA虚拟机-运行时数据区
    【智能优化算法】基于凌日算法求解单目标优化问题附matlab代码Transit Search Optimization Algorithm
    基于 JMeter 完成 Dubbo 接口的测试
    2023CSP-J游寄
    使用Java解决快手滑块验证码
    聊聊秒杀系统的设计(二)
  • 原文地址:https://blog.csdn.net/io_123io_123/article/details/126612410