Vue--》打造个性化医疗服务的医院预约系统(一)

news2024/11/25 9:52:11

今天开始使用 vue3 + ts 搭建一个医院预约系统的前台页面,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏,学习更多前端vue知识,然后开篇先简单介绍一下本项目用到的技术栈都有哪几个方面(阅读本文章能够学习到的技术):

vite:快速轻量且功能丰富的前端构建工具,帮助开发人员更高效构建现代Web应用程序。

pnpm:高性能、轻量级npm替代品,帮助开发人员更加高效地处理应用程序的依赖关系。

Vue3:Vue.js最新版本的用于构建用户界面的渐进式JavaScript框架。

TypeScript:JavaScript的超集,提供了静态类型检查,使得代码更加健壮。

vue-router:Vue.js官方提供的路由管理器与Vue.js紧密耦合,非常方便与Vue.js一同使用。

Pinia:Vue3构建的Vuex替代品,具有响应式能力,提供非常简单的 API,进行状态管理。

element-plus:基于Vue.js 3.0的UI组件库,用于构建高品质的响应式Web应用程序。

axios:基于Promise的HTTP客户端,可以在浏览器和node.js中使用。

当然还有许多其他的需要安装的第三方库,这里就不再一一介绍了,在项目中用到的地方自行会进行讲解,大家自行学习即可,现在就让我们走进vue3+ts的实战项目吧。

目录

初始化项目

src别名的配置

重置标签默认样式

顶部组件静态搭建

底部组件静态搭建

路由搭建


初始化项目

找到自己想要创建项目的文件夹,在地址栏输入cmd,从而进入当前文件路径,在当前路径下执行如下命令,使用vite构建工具进行创建vue3项目,具体的操作这里就不再赘述,不了解 vite 构建工具的朋友可以先去看 vite脚手架的搭建与使用 ,因为我这里使用 vite3 版本,其安装命令如下:

我这里就使用 pnpm 进行安装项目了,没有安装过pnpm的朋友,cmd进行全局安装即可,命令为:npm i -g pnpm 。

pnpm create vite

安装过程与我上面分享的文章基本一致,cd到项目路径安装下依赖,最后的结果如下表明创建项目成功:

然后将项目文件拖到编辑器中,打开终端执行 npm run dev 打开项目,结果如下:

注意:如果已经学习过我上一个项目的朋友可能已经了解过项目开始前的一些基础配置,觉得我再在新的项目再讲一遍有点啰嗦,但是我仍然坚持不厌其烦的去再讲一遍,一方面是培养自己的习惯另一方面是想不断加深读者对项目开始前基础配置的熟练程度,希望大家能够在小事中获得经验:

src别名的配置

在开发项目的时候文件与文件关系可能很复杂,因此我们需要给src文件夹配置一个别名!在创建的项目中找到 vite.config.ts 配置文件,如果红色语法提示请安装 @type/node 其是TypeScript 的一个文件包,用于描述 Node.js 核心模块和常用的第三方库的类型信息,配置如下:

pnpm i @types/node --save-dev

// vite.config.ts
import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
    plugins: [vue()],
    resolve: {
        alias: {
            "@": path.resolve(__dirname, 'src') // 相对路径别名配置,使用 @ 代替 src
        }
    }
})

找到 tsconfig.json 配置文件,找到配置项 compilerOptions 添加配置,这一步的作用是让 IDE 可以对路径进行智能提示:

// tsconfig.json
{
  "compilerOptions": {
    "baseUrl": ".", // 解析非相对模块的基地址,默认是当前目录
    "paths": { //路径映射,相对于baseUrl
      "@/*": ["src/*"] 
    }
  }
}

验证我们是否配置成功?我们可以在main.js入口文件处进行校验,如果有提示说明配置成功!

重置标签默认样式

在项目中我们都会用到一些标签,但是这些标签可能本身自带一些默认样式,这些默认样式可能会影响我们的排版布局,如果每次引用就去清除一遍默认样式有点太过繁琐,因此这里需要我们清除一下默认样式。

直接引入文件:点击 npm官网 ,然后搜索 reset.css 在第一个选项中点击进入,然后点击code复制如下代码即可,如下:

这里可以在src文件夹下新建一个 style 文件夹,然后把上文的代码复制到 style文件夹下的reset.scss文件中,因为 vite 创建的vue项目,并不支持 scss 文件格式,所以需要我们执行如下命令进行安装:

pnpm i sass

安装完成之后,在入口文件处进行引入该重置文件,如下:

安装第三方包:可以会有人因为网络的问题而打不开该网站(该网站是国外的站点),没关系,我们可以执行如下命令安装第三方包,也能解决该问题:

pnpm install reset.css --save

安装完成之后,我们在入口文件处进行引入即可,如下:

后期如果想对默认进行修改,可以在包模块找到安装的reset.css文件,进行修改即可,如下:

顶部组件静态搭建

因为项目的顶部组件在每个页面都会出现,所以我们先行对该系统的顶部组件样式进行相关处理,将其封装为全局组件,保证每个页面都能进行展示,如下:

封装成全局组件之后,接下来就可以在App根组件中进行引入:

<template>
  <div class="container">
    <!-- 顶部的全局组件 -->
    <HospitalTop />
  </div>
</template>

定义好基本排版之后,接下来就是对顶部组件具体样式的搭建了,其基本模板定义如下:

<template>
  <div class="top">
    <div class="content">
      <!-- 左侧 -->
      <div class="left">
        <img src="../../assets/images/logo.jpg" alt="医院图标">
        <p>医院预约系统平台</p>
      </div>
      <div class="right">
        <p class="help">帮助中心</p>
        <p class="login">登录/注册</p>
      </div>
    </div>
  </div>
</template>

css采用flex布局,让内容呈现出左右两边的排版样式,css代码如下:

<style lang="scss" scoped>
.top {
  position: fixed;
  z-index: 100;
  width: 100%;
  height: 70px;
  background: #b1bde2;
  display: flex;
  justify-content: center;
  .content {
    width: 80%;
    height: 70px;
    display: flex;
    justify-content: space-between;
    .left {
      display: flex;
      justify-content: center;
      align-items: center;
      img{
        width: 70px;
        height: 50px;
        margin-right: 10px;
      }
      p {
        font-size: 20px;
        color: rgb(120, 3, 3);
      }
    }
    .right {
      display: flex;
      justify-content: center;
      align-items: center;
      font-size: 16px;
      color: #fff;
      .help {
        margin-right: 10px;
        &:hover {
          color: red;
          cursor: pointer;
        }
      }
      .login {
        &:hover {
          color: rgb(3, 105, 40);
          cursor: pointer;
        }
      }
    }
  }
}
</style>

最终达到的效果如下:

底部组件静态搭建

底部组件与顶部组件一致,也是全局组件,所以我们也需要对底部组件进行全局配置,如下:

封装好全局组件之后,我们需要先对App根组件处进行一些排版的布局,如下:

我们对根组件的内容也设置一下flex布局,让其进行上下排列,然后要设置一下margin,防止内容覆盖,如下:

设置完基础布局之后,接下来开始对底部组件的样式进行具体搭建,其基本结构如下:

<template>
  <div class="bottom">
    <div class="content">
      <div class="left">京ICP备 13xxxxxx号 电话挂号010-56xxxxxx</div>
      <div class="right">
        <span>联系我们</span>
        <span>合作伙伴</span>
        <span>用户协议</span>
        <span>隐私协议</span>
      </div>
    </div>
  </div>
</template>

设置完基础结构之后,接下来开始对其样式进行点缀,样式的css代码如下:

<style lang="scss" scoped>
.bottom {
  position: fixed;
  z-index: 100;
  bottom: 0;
  width: 100%;
  height: 50px;
  background: #f0f2f5;
  display: flex;
  justify-content: center;
  .content {
    width: 80%;
    height: 50px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 14px;
    .right {
      span {
        margin: 0 5px;
      }
    }
  }
} 
</style>

最终的效果如下所示:

路由搭建

接下来开始进行路由模块的搭建,首先我们要先创建几个路由作为路由模块,在src目录下新建一个pages文件夹,其用于存放路由组件相关的内容,如下:

项目的主体内容分为好多个板块,每个板块之间都对应者一个路由组件,所以这里我们就需要设置一下项目的路由内容,不清楚vue路由的使用,推荐看一下我之前讲解过的文章:Vue 3 路由进阶 接下来正式开始配置项目的路由,首先终端执行如下命令安装vue路由:

pnpm i vue-router

安装完插件之后,接下来就可以对路由进行相关配置了,在src,目录下新建router文件,如下:

import { createRouter, createWebHistory } from "vue-router";
// createRouter用于创建路由器实例,可以管理多个路由
export default createRouter({
  // 路由的模式的设置
  history: createWebHistory(),
  // 管理路由
  routes: [
    {
      path: '/home',
      component:()=>import('@/pages/home/index.vue')
    },
    {
      path: '/hospital',
      component:()=>import('@/pages/hospital/index.vue')
    },
    {
      path: '/',
      redirect: '/home'
    }
  ]
})

配置完路由组件之后,我们需要在入口文件 main.ts 中进行引入安装,如下:

安装完成之后,我们需要设置一下路由的出口位置,在上文我们已经配置好App.vue根组件的基本排版布局,接下来只需要设置路由出口位置即可,如下:

设置完这些之后,路由组件的基础配置可以说是完工了,但是还是有个小细节,当你进行路由组件的切换的时候,如果你在切换之前滚动条已经滑动过,那么当你切换路由之后会仍然保持当前滚动条的位置,所以我们要在路由切换的时候控制一下滚动条的位置,如下:

最终的效果如下:

本项目的顶部、底部以及路由模块基础搭建就讲解到这,下一篇文章将继续讲解首页内容的搭建,关注博主学习更多前端vue知识,您的支持就是博主创作的最大动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/754056.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧农场丨2023年数字经济发展助力生态农场规划

智慧农场丨2023年数字经济发展助力生态农场规划 导读&#xff1a;生态农场是保护环境和发展农业的新模式&#xff0c;它遵循生态平衡规律&#xff0c;在持续利用的原则下开发利用农业自然资源&#xff0c;进行多层次、立体、循环利用的农业生产&#xff0c;使能量和物质流动在生…

【大数据之Hive】二十三、HQL语法优化之数据倾斜

1 数据倾斜概述 数据倾斜指参与计算的数据分布不均&#xff0c;即某个key或者某些key的数据量远超其他key&#xff0c;导致在shuffle阶段&#xff0c;大量相同key的数据被发往同一个Reduce&#xff0c;导致该Reduce所需的时间远超其他Reduce&#xff0c;成为整个任务的瓶颈。  …

System.InvalidOperationException:对象当前正在其他地方使用

System.InvalidOperationException:对象当前正在其他地方使用 出现此情况&#xff0c;一般是对象被多个线程同时使用了 解决办法就是同一时间只允许单线程访问目标对象&#xff1b;

面试上海某小厂Java岗,全程一小时问的全是细节

之前分享很多大厂的面经&#xff0c;这次分享一家上海某小厂的 Java 岗位面试&#xff0c;面试的时间也挺长的&#xff0c;接近 1 个小时&#xff0c;无算法&#xff0c;全程抓着项目mysqlredisjava这 4 个方向问。 问题记录 项目 介绍你的项目 这个项目是企业里面做的还是学…

Redis数据结构 — Listpack

目录 listpack 结构 listpack 节点结构 quicklist 虽然通过控制 quicklistNode 结构里的压缩列表的大小或者元素个数&#xff0c;来减少连锁更新带来的性能影响&#xff0c;但是并没有完全解决连锁更新的问题。 于是&#xff0c;Redis 在 5.0 新设计一个数据结构叫 listpack…

助力环保问题检测,基于YOLOv5全系列模型【n/s/m/l/x】开发构建不同量级裸土检测识别模型,对比实验分析检测性能

道路裸土扬尘问题是城市环境中常见的环境污染问题之一。在以往的一些项目中也有实际接触到过类似的检测识别需求&#xff0c;本文的主要目的是单纯地从实验分析的角度来对比裸土这一数据场景下不同量级参数模型的实际性能。 首先看下整体效果&#xff1a; 接下来简单看下数据集…

uniapp微信小程序使用axios(vue3+axios+ts版)

版本号 "vue": "^3.2.45", "axios": "^1.4.0", "axios-miniprogram-adapter": "^0.3.5", 安装axios及axios适配器&#xff0c;适配小程序 yarn add axios axios-miniprogram-adapter 使用axios 在utils创建utils/…

ES6新特性基础总结

目录 简介 node.js安装 babel转码器 let命令 const命令 解构对象 字符串扩展 新增方法&#xff1a; 数组扩展 扩展运算符 伪数组 对象扩展 属性的简介表示法 属性名表达式 对象的扩展运算符 函数扩展 箭头函数 使用注意 Set数据结构 基本用法 size属性 特有方法 P…

【数据结构常见七大排序(二)】—选择排序篇【直接选择排序】And【堆排序】

目录 前言 1.直接选择排序 1.1基本思想 1.2直接选择排序实现过程 1.3动图助解 1.4直接选择排序源码 2.堆排序 2.1堆排序的概念 2.2堆排序源码 前言 选择排序有两种常见的【直接选择排序】、【堆排序】 1.直接选择排序 1.1基本思想 每一次从待排序的数据元素中选出最…

Kafka 入门到起飞 - 核心概念(术语解释)

在kafka之旅&#xff0c;我们会大量讨论Kafka中的术语&#xff0c;那么就让我们先来了解一下这些核心概念 消息(Message)&#xff1a; kafka的数据单元称为消息&#xff0c;相当于DB里的一行数据或一条记录 消息由字节数组组成 批次&#xff1a; 生产者组一批数据再向kafka推送…

短视频seo矩阵源码开发与实践分享

在短视频矩阵系统源码开发中&#xff0c;需要注意以下几个细节&#xff1a; 1. 确定系统的功能需求&#xff1a;在开发短视频矩阵系统源码时&#xff0c;必须先明确系统的功能需求&#xff0c;包括用户的基本操作、系统数据的生成和处理等。 2. 定义数据库结构&#xff1a;短…

提高开发效率!5个对开发者有用的Kotlin扩展函数

本文已同步发表于我的微信公众号&#xff0c;搜索 代码说 即可关注&#xff0c;欢迎与我沟通交流。 文章目录 runCatching代替try catchView的可见性dp、sp、px之间相互转换by lazy 替代findViewByIdToast、Log Kotlin 中扩展函数是一种允许在已有的类中添加新函数&#xff0c;…

Day52| 300.最长递增子序列 、 674. 最长连续递增序列 、718. 最长重复子数组

300.最长递增子序列 1.题目&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 …

从编写metadata.yaml到测试processor文件成功

检查模型和客户端&#xff08; Excel 原型图&#xff09;字段是否对应 修改 applications\commands\metadata\cai_liao_ she_bei_metadata.yaml 文件 wen_jian_db_conf 下的 all 下的 content_field_name 选项&#xff0c;要根据 model 中写的文件路径找到对应的 model&#x…

论文阅读—2023.7.13:遥感图像语义分割空间全局上下文信息网络(主要为unet网络以及改unet)附加个人理解与代码解析

前期看的文章大部分都是深度学习原理含量多一点&#xff0c;一直在纠结怎么改模型&#xff0c;论文看的很吃力&#xff0c;看一篇忘一篇&#xff0c;总感觉摸不到方向。想到自己是遥感专业&#xff0c;所以还是回归遥感影像去谈深度学习&#xff0c;回归问题&#xff0c;再想着…

resultType和parameterType的基本使用和区别

我们在使用Mybatis的过程中不难发现Mapper文件中的select,insert,update,delect操作中都有一个parameterType 或 resultType属性。 resultType&#xff1a;返回值类型&#xff0c;类型即为对象类型&#xff0c;返回结果字段与对象属性匹配映射&#xff0c;类型中的属性名要与查…

数学建模-假设检验

原假设&#xff0c;备择假设P值&#xff0c;显著性水平单侧建议&#xff0c;双侧检验

IPUU的小工具拍了拍你(上)

IPUU是埃文科技旗下的综合性IP查询网站&#xff0c;提供多维度的IP数据信息。通过在线查询&#xff0c;用户可以获取目标IP地址的详尽信息&#xff0c;包括位置属性、网络属性、风险属性以及业务属性等&#xff0c;同时还可以查询域名信息。无论您是需要查看某个IP地址归属地&a…

VBA技术资料1-120

MF系列VBA技术资料 为了让广大学员在实际VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属…

一篇文章让你搞懂内存函数

内存操作函数 memcpy 库函数memcmp介绍 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 这个函数在遇到 ‘\0’ 的时候并不会停下来。 如果source和destination有任何的重叠&#xff0c;复制的结果都是未定义的。 库函数memcmp的代码形式 v…