Teng's blog Teng's blog
首页
Java
H5前端
GitHub (opens new window)
首页
Java
H5前端
GitHub (opens new window)
  • 01.项目介绍
  • 02.后台系统-搭建项目
  • 03.后台系统-医院设置模块
  • 04.后台系统-统一异常处理
  • 05.后台系统-统一日志处理
  • 06.后台系统-搭建管理后台前端
  • 07.后台系统-医院设置前端
  • 08.后台系统-数据字典
  • 09.SpringCache+Redis缓存数据
  • 10.集成与配置Nginx
  • 11.启动医院接口模拟系统
  • 12.后台系统-上传医院信息
  • 13.后台系统-上传科室信息
  • 14.后台系统-上传排班信息
  • 15.搭建服务注册中心Nacos
  • 16.后台系统-医院管理
  • 17.后台系统-排班管理
  • 18.搭建服务网关Gateway
  • 19.前台系统-搭建前端环境
    • 服务端渲染
    • 关于Nuxt
    • 初始化平台前端
      • 修改package.json
      • 修改nuxt.config.js
      • 安装项目依赖
      • 引入elementUI
      • 运行测试
      • Nuxt的目录结构
      • 引入 axios
  • 20.前台系统-首页
  • 21.前台系统-医院详情页
  • 22.前台系统-用户登录
  • 23.后台系统-短信服务
  • 24.用户认证与网关整合
  • 25.前台系统-微信登录
  • 26.前台系统-实名认证
  • 27.前台系统-就诊人管理
  • 28.后台系统-平台用户管理
  • 29.前台系统-预约挂号详情
  • 30.前台系统-预约确认
  • 31.前台系统-预约下单
  • 32.前台系统-订单管理
  • 33.后台系统-订单管理
  • 34.前台系统-微信支付
  • 35.前台系统-取消预约
  • 36.前台系统-就医提醒
  • 37.后台系统-预约统计
  • 38.小结
  • 附录:医院接口模拟系统说明
  • 附录:在线预约挂号API接口文档
  • Project-尚医通
Shetengteng
2021-12-11

19.前台系统-搭建前端环境

使用服务端渲染技术 Nuxt.js框架

# 服务端渲染

服务端渲染又称SSR (Server Side Render)是在服务端完成页面的内容,而不是在客户端通过AJAX获取数据

优势

  • 更好的 SEO,由于搜索引擎爬虫抓取工具可以直接查看完全渲染的页面
    • 如果你的应用程序初始展示 loading 菊花图,然后通过 Ajax 获取内容,抓取工具并不会等待异步完成后再进行页面内容的抓取
    • 如果 SEO 对你的站点至关重要,而页面又是异步获取内容,则需要服务器端渲染(SSR)解决此问题
  • 获得更快的内容到达时间(time-to-content),无需等待所有的 JavaScript 都完成下载并执行,产生更好的用户体验
    • 对于那些内容到达时间与转化率直接相关的应用程序而言,服务器端渲染(SSR)至关重要

# 关于Nuxt

  • 一个基于 Vue.js 的轻量级应用框架
  • 用来创建服务端渲染 (SSR) 应用,也可充当静态站点引擎生成静态站点应用
  • 具有优雅的代码结构分层和热加载等特性
  • 官网网站:https://zh.nuxtjs.org/

# 初始化平台前端

创建yygh-site文件夹作为前台项目目录

下载初始化模板压缩包 https://github.com/nuxt-community/starter-template/archive/master.zip 解压后复制template中的所有内容到yygh-site目录下

# 修改package.json

将 name、description、author 修改,否则项目无法安装

{
  "name": "yygh-site",
  "version": "1.0.0",
  "description": "在线挂号",
  "author": "stt",
  "private": true,
  "scripts": {
    "dev": "nuxt",
    "build": "nuxt build",
    "start": "nuxt start",
    "generate": "nuxt generate",
    "lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
    "precommit": "npm run lint"
  },
  "dependencies": {
    "nuxt": "^2.0.0"
  },
  "devDependencies": {
    "babel-eslint": "^10.0.1",
    "eslint": "^4.19.1",
    "eslint-friendly-formatter": "^4.0.1",
    "eslint-loader": "^2.1.1",
    "eslint-plugin-vue": "^4.0.0"
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 修改nuxt.config.js

该设置最后会显示在页面标题栏和meta数据中






 



 



module.exports = {
  /*
  ** Headers of the page
  */
  head: {
    title: 'yygh-site',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: '在线挂号预约' }
    ],
...
1
2
3
4
5
6
7
8
9
10
11
12

# 安装项目依赖

在yygh-site目录下打开cmd,输入如下命令

npm install
1

# 引入elementUI

下载依赖

npm install element-ui
1

添加配置js

  • 创建plugins/my-plugins.js文件,并添加如下内容
import Vue from 'vue'
import ElementUI from 'element-ui' //element-ui的全部组件
import 'element-ui/lib/theme-chalk/index.css' //element-ui的css
Vue.use(ElementUI) //使用elementUI
1
2
3
4

在nuxt.config.js中引入plugins/my-plugins.js文件,添加如下 plugins内容

module.exports = {
...
  build: {
...
  },
  plugins: [
    { src: '~/plugins/my-plugins.js', ssr: false }
  ]
}
1
2
3
4
5
6
7
8
9

# 运行测试

npm run dev
1

访问http://localhost:3000/

# Nuxt的目录结构

资源目录 assets

  • 用于组织未编译的静态资源如 LESS、SASS 或 JS

组件目录 components

  • 用于组织应用的 Vue.js 组件
  • Nuxt.js 不会扩展增强该目录下 Vue.js 组件,即这些组件不会像页面组件那样有 asyncData 方法的特性。

布局目录 layouts

  • 用于组织应用的布局组件

页面目录 pages

  • 用于组织应用的路由及视图
  • Nuxt.js 框架读取该目录下所有的 .vue 文件并自动生成对应的路由配置

插件目录 plugins

  • 用于组织那些需要在 根vue.js应用 实例化之前需要运行的 JS 插件

nuxt.config.js 文件

  • nuxt.config.js 文件用于组织Nuxt.js 应用的个性化配置
  • 覆盖默认配置

# 引入 axios

安装

npm install axios
1

创建utils文件夹,utils下创建request.js

import axios from 'axios'
import { Message } from 'element-ui'

// 创建axios实例
const service = axios.create({
  baseURL: 'http://localhost:8080',
  timeout: 15000 // 请求超时时间
})

// http request 拦截器
service.interceptors.request.use(
  config => {
    // token 先不处理,后续使用时在完善
    return config
  },
  err => {
    return Promise.reject(err)
  })

// http response 拦截器
service.interceptors.response.use(
  response => {
    if (response.data.code !== 200) {
      Message({
        message: response.data.message,
        type: 'error',
        duration: 5 * 1000
      })
      return Promise.reject(response.data)
    } else {
      return response.data
    }
  },
  error => {
    return Promise.reject(error.response)
  })

export default service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Last Updated: 2022/01/16, 11:29:51
18.搭建服务网关Gateway
20.前台系统-首页

← 18.搭建服务网关Gateway 20.前台系统-首页→

Theme by Vdoing | Copyright © 2021-2022 Shetengteng | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式