016-Vue-黑马2023:前后端分离开发(在线接口文档),前端工程化、Element、nginx

news2025/2/25 11:01:23

第三节 前后端分离开发

1、介绍

开发模式

  • 前后端混合开发:传统开发模式
    在这里插入图片描述

  • 前后端分离开发:当前最为主流的开发模式
    在这里插入图片描述

  • 页面原型+需求案例:分析出接口文档
    在这里插入图片描述

  • 离线开发文档示例:
    在这里插入图片描述

2、YAPI(官网已停用)

2023.7停止维护了,已经登录不上官网了。

在线接口文档管理平台:

  • 介绍:YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务
  • 地址: http://yapi.smart-xwork.cn/
  • 2个功能:
    • API接口管理
    • Mock服务:通过YAPI平台模拟真实接口,生成接口的模拟测试数据,用于前端工程测试。这样即使后端的人员没有开发完毕,前端开发人员也可以使用YAPI平台所提供的Mock地址来进行模拟数据的测试。
      在这里插入图片描述

使用:

  • 可以部署在公司内部服务器,公司内部自己使用。也可以使用YAPI官方提供的公网部署的YAPI平台,注册一个账号使用。

2.1、添加项目

  • 步骤:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.2、添加分类

  • 步骤:
    在这里插入图片描述

2.3、添加接口

  • 步骤:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.4、编辑接口详细信息

  • 步骤:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.5、预览效果

  • 接口文档保存后,会自动生成一个Mock地址
    在这里插入图片描述
  • 点击此地址可以看到会自动的生成Mock测试数据:前端人员在测试的时候就可以直接访问此地址进行测试。
    在这里插入图片描述
  • 这个数据是根据定义接口时,指定的返回数据格式生成的
    在这里插入图片描述

2.6、高级Mock

  • 当然这个返回数据里面的值是个比较宽泛的数据,可以在高级Mock功能中,手动指定当前接口生成的测试数据是什么。
    在这里插入图片描述
    在这里插入图片描述
    修改value中的值:
    在这里插入图片描述
    再次点击预览中的MocK地址,可以看到生成的测试数据已经被改变了。
    在这里插入图片描述

第四节 前端工程化

1、说明

  • 当前开发中使用到的前端资源,我们什么时候使用就什么时候引用。
    在这里插入图片描述

    • 最终形成的工程结构如下:
      在这里插入图片描述
    • 缺点:在大型项目开发中会存在很多问题,每一次开发一个功能都是从0开始,多个页面当中的组件或者是功能复用性并不好,并且js文件、图片文件没有规范化的存储目录,想怎么定义就怎么定义,团队协作开发时每个开发人员都有自己的开发习惯,这样就很不方便项目的维护以及管理。
  • 现在的前端开发都讲究前端开发的模块化、组件化、规范化、自动化:
    在这里插入图片描述

    • 模块化:把js、css制作成一个个可以复用的模块

    • 组件化:把UI组件,css样式,js行为封装为一个个的组件,便于管理。

    • 规范化:提供一套标准规范的目录结构和编码规范,所有开发人员都遵循这一套统一的规范进行开发。

    • 自动化:项目的构建、项目的部署、项目的测试都可以自动化的完成。

    • 问题:使用前端工程化以后,在使用vue开发大型项目的时候,我们就需要考虑代码的目录结构,项目的目录结构,部署,以及代码的单元测试等事情。如果每一个项目都手动的完成这些工作那么效率是非常低下的。

      • 所以通常会使用一些现成的工具来帮助我们完成这些事情,这个工具就是vue官方提供的脚手架工具。

2、Vue脚手架的环境准备

  • 介绍:Vue-cli 是Vue官方提供的一个脚手架,用于快速生成一个Vue的项目模板。
  • Vue-cli提供了如下功能:
    • 统一的目录结构
    • 本地调试
    • 热部署
    • 单元测试
    • 集成打包上线
  • 依赖环境:Node]s(类似于java当中的jdk)

2.1、安装NodeJS

  • 官网:https://nodejs.org/en
    在这里插入图片描述
    在这里插入图片描述

  • 安装步骤:

    • 双击资料中提供的安装包
      在这里插入图片描述
      在这里插入图片描述

    • 选择安装目录:选择安装到一个,没有中文,没有空格的目录下(新建一个文件夹NodeJS)
      在这里插入图片描述
      在这里插入图片描述

    • 验证NodeJS环境变量:
      NodeJS 安装完毕后,会自动配置好环境变量,我们验证一下是否安装成功,通过: node -v
      在这里插入图片描述

    • 配置npm的全局安装路径
      在这里插入图片描述
      使用管理员身份运行命令行,在命令行中,执行如下指令:
      npm config set prefix "E:\develop\NodeJS"
      注意:E:\develop\NodeJS 这个目录是NodeJS的安装目录

    • 切换npm的淘宝镜像:可以加速资源下载
      使用管理员身份运行命令行,在命令行中,执行如下指令:
      npm config set registry https://registry.npm.taobao.org

    • 安装Vue-cli
      使用管理员身份运行命令行,在命令行中,执行如下指令:
      npm install -g @vue/cli
      这个过程中,会联网下载,可能会耗时几分钟,耐心等待。
      在这里插入图片描述

    • 查看Vue-cli是否安装成功:vue --version
      在这里插入图片描述

3、Vue项目简介

3.1、基于脚手架创建Vue项目

  • 基于脚手架创建好一个工程化的vue项目
    • 方式一:命令行(直接在命令行中输入vue create 项目名称
      在这里插入图片描述
    • 方式二:图形化界面(在命令行中输入命令vue ui,回车后就会vue的项目管理器图形化界面,在此界面中再来创建vue项目)
      在这里插入图片描述
  • 案例测试:以方式二为例
    • 在F盘新创建一个文件夹,以管理员身份打开命令提示符窗口,在窗口中进入到这个新创建的文件夹目录。输入指令vue ui,调出图形化界面。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    • 可以看到磁盘目录已经创建好vue项目了:
      在这里插入图片描述
      在这里插入图片描述

3.2、项目目录结构

  • 基于Vue脚手架创建出来的工程,有标准的目录结构,如下:
    在这里插入图片描述

4、使用vscode打开vue项目

  • 打开vue项目所在的文件夹
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

5、运行vue项目

  • 2种方式:
    • 图形化界面
    • 命令行
      在这里插入图片描述
  • 说明:图形化界面方式需要使用npm脚本运行vue项目,所以要先打开npm脚本工具栏。
    在这里插入图片描述在这里插入图片描述
    重启VSCode,点开项目中的package.json,在资源管理器右边的...中勾选npm脚本,就可以在左下看到NPM脚本
    在这里插入图片描述
  • 以图形化界面方式为例,运行当前案例的vue项目:
    • 以管理员方式打开vscode,之后使用npm运行
    • vue项目构建完毕后它会自动启动一个服务,运行在8080端口号上,所以可以通过此链接访问当前项目。
      在这里插入图片描述
      在这里插入图片描述
    • 这个页面是vue项目中自动提供的根组件App.vue,这个组件指的就是一个页面。
      在这里插入图片描述
    • 修改页面的文本:Home—>Vue Home,之后ctrl+s保存,发现没有重启项目,也没有刷新浏览器,页面仍然发生了变化,这就是vue项目提供的热部署功能。
      在这里插入图片描述
      在这里插入图片描述

6、修改前端vue项目的端口号

  • 在vue的配置文件vue.config.js中进行修改,ctrl+s进行保存。
  • 由于修改了端口号,所以在终端中停掉当前的服务,之后重新启动。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

7、Vue项目开发流程

说明:

  • 启动工程化的vue项目,访问到的页面其实就是vue项目项目默认提供的首页index.html。
    在这里插入图片描述
    创建好vue项目之后,public这个目录下自带的一个页面index.html
    在这里插入图片描述

开发流程:

  • 在index.html首页中(public目录下)它是默认引入了入口文件main.js(此文件是vue项目的入口js文件,在src目录下)
  • 在入口文件main.js中又引入了很多的公共组件,import关键字引入模块,export关键字将对象或函数导出为模块。
    • 这样就可以通过export关键字来导出一个模块,然后在使用到的地方通过import这个关键字再将其导入进来。
  • eg:import App from './App.vue',表示导入当前目录下的App.vue这个组件,并且给它起个名字为App,之后就可以在这个main.js文件中使用这个App组件了。
    在这里插入图片描述在这里插入图片描述
  • 在index.htm只是定义了一个空的div标签,但是界面中展示了很多的信息,那么它是怎么做到的呢???
  • 答:在创建vue对象的时候,通过render函数创建了对应的虚拟Dom元素,这部分Dom元素是在App.vue这个根组件中定义的。
  • 在vue项目中会看到很多的以.vue为结尾的文件,被叫做组件文件,每个组件文件都由三部分组成。

在这里插入图片描述

  • 案例测试:改造App.vue组件
    在这里插入图片描述
<template>
  <div >
    <!-- 当我们定义好了一个数据模型之后,就可以在上面的模版中
         通过插值表达式来展示出数据模型当中的数据
 -->
 <h1>{{message}}</h1>
  </div>
</template>



/* 快捷键:script,选择javascript.vue生成。
  export default:表示将定义的这一部分对象导出去,只有在这个地方将它
  导出一个模块,在别的地方才可以通过import关键字导入进来。

  定义vue当中的数据模型:之前,new一个vue对象,之后声明一个属性data,然后在里面指定一个对象。
                        现在,不能指定一个对象只能是指定一个函数function,之后在function函数
                        中声明一个对象,并且要把对象return回去,

 */
<script>
export default {
  data() {
    return {
      message: "Hello vue"
    }
  },
  //如果还想要定义方法,则使用methods属性,在此属性中定义一个个的方法。
  methods: {
    
  }
}
</script>



<style>

</style>

  • 使用管理员方式打开vscode,并运行,发现数据模型的数据已经被改变了
    在这里插入图片描述
  • 说明:vue项目的开发,其实很少操作main.js入口文件和首页index.heml,主要操作的就是一些组件文件(.vue结尾的文件)。

第五节 Vue组件库Element

1、什么是Element

  • Element:是饿了么团队研发的,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
  • 组件:组成网页的部件,例如 超链接、按钮、图片、表格、表单、分页条等等。
  • 官网https://element.eleme.cn/#/zh-CNListener
  • 为什么要学Element,通过下图的原始html标签所构建的网页和Element提供的各个的网页组件构建的网页效果对比,可以看出右边的完胜。
    在这里插入图片描述

2、快速入门

步骤说明:

  • 安装ElementUI组件库 (在当前工程的目录下),在命令行执行指令:
    在这里插入图片描述

  • 引入ElementUI组件库
    在这里插入图片描述

  • 访问官网,复制组件代码,调整
    在这里插入图片描述

案例演示

  • 步骤1:安装ElementUI组件库 :
    npm install element-ui@2.15.3,回车后他会联网下载ElementUI的2.15.3版本,并将其安装在当前项目中,会存放在node_modules这个目录下
    在这里插入图片描述
    在这里插入图片描述
    在node_modules这个目录下,可以看到element-ui目录,说明组件库安装成功。
    在这里插入图片描述
  • 步骤2:在入口文件main.js中,引入ElementUI组件库
    import ElementUI from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css';
    Vue.use(ElementUI);
    在这里插入图片描述
  • 步骤3:定义一个组件文件访问官网,复制组件代码。(根组件只有一个App.vue,其它的组件可以放在views这个目录下,它自带的有2个vue组件。)
  • 定义文件夹:element,定义文件:ElementView.vue,在文件中定义基本的结构。
    在这里插入图片描述
<template>
    
</template>




<script>
export default {
    
}
</script>



<style>

</style>

  • 复制官网的组件代码,之后进行调整
    在这里插入图片描述
    把样式复制到div标签内部:
    在这里插入图片描述
    <div>
        <!-- button按钮,如果我们复制的组件比较繁琐,还要往下看一下是否还有一些其它的数据模型
           或者vue中方法的定义,如果有也要一并复制过来。 -->
        <el-row>
            <el-button>默认按钮</el-button>
            <el-button type="primary">主要按钮</el-button>
            <el-button type="success">成功按钮</el-button>
            <el-button type="info">信息按钮</el-button>
            <el-button type="warning">警告按钮</el-button>
            <el-button type="danger">危险按钮</el-button>
        </el-row>

    </div>
  • 运行测试:管理员方式打开vscode并运行,发现显示的结果是之前修改后的根组件首页。因为默认情况下展示的是根组件的内容。
    在这里插入图片描述
  • 修改:在根组件App.vue中,引入ElementView.vue这个组件
  • 直接使用</element-view>标,此时它会自动在script标签中使用import关键字将这个组件导入进来,并且在vue对象中已经把这个组件加入进来了。
    在这里插入图片描述
  • 再次测试:
    在这里插入图片描述

3、常用组件

  • 学习思路:那对于element当中的常见组件的学习呢,只需要去参照element的官方网站,然后找到对应的组件,查找到组件的源代码,之后复制到vscode的组件中,然后做一些简单地调整即可,把它改成我们想要的样式。

3.1、常见组件-表格

  • Table 表格:用于展示多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作。
    在这里插入图片描述
  • 官方网站:以带边框表格为例
    在这里插入图片描述
    可以看到表格还要展示数据模型,所以可以把要展示的数据模型也复制进来。
    在这里插入图片描述
  • 组件代码:复制进来后ctrl+alt+L,页面格式化 更规整的显示。
    在这里插入图片描述
    在这里插入图片描述
    <!-- Table表格 -->
    <el-table :data="tableData" border style="width: 100%">
      <el-table-column prop="date" label="日期" width="180"> </el-table-column>
      <el-table-column prop="name" label="姓名" width="180"> </el-table-column>
      <el-table-column prop="address" label="地址"> </el-table-column>
    </el-table>



    data() {
        return {
        tableData: [{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        }]
        }
    },
  • 如果不清楚表格中的属性代表的含义,可以在官网中每一个组件的最下面找到对属性的解释:
    在这里插入图片描述
  • 测试:由于自带的热部署,所以不需要启动项目也不用刷新浏览器
    在这里插入图片描述

3.2、常见组件-分页

  • Pagination 分页:当数据量过多时,使用分页分解数据。
    在这里插入图片描述
  • 官网:
    在这里插入图片描述
  • 组件代码:
    在这里插入图片描述
    <!-- Pagination 分页 -->
    <el-pagination background layout="prev, pager, next" :total="1000">
    </el-pagination>
  • 效果:
    在这里插入图片描述
  • 添加事件:重听
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    <!-- Pagination 分页 -->
    <el-pagination background layout="total,sizes, prev, pager, next, jumper" 
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
     :total="1000"></el-pagination>

    methods: {
    handleSizeChange:function(val){
        alert("每页记录数变化" + val)
    },
    handleCurrentChange:function(val){
        alert("页码发生变化" + val)
    },
    onSubmit:function(){
        alert(JSON.stringify(this.form));
    }
  }

在这里插入图片描述
在这里插入图片描述

3.3、常见组件-对话框

  • Dialog 对话框:在保留当前页面状态的情况下,告知用户并承载相关操作。
    在这里插入图片描述

  • 官网:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 组件代码
    在这里插入图片描述
    在这里插入图片描述

     <!-- Dialog对话框 -->
     <!-- Table -->
    <el-button type="text" @click="dialogTableVisible = true">打开嵌套表格的 Dialog</el-button>

    <el-dialog title="收货地址" :visible.sync="dialogTableVisible">
      <el-table :data="gridData">
        <el-table-column property="date" label="日期" width="150"></el-table-column>
        <el-table-column property="name" label="姓名" width="200"></el-table-column>
        <el-table-column property="address" label="地址" width="200"></el-table-column>
      </el-table>
    </el-dialog>


        gridData: [{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }],
        dialogTableVisible: false
  • 效果:
    在这里插入图片描述

3.4、常见组件-表单

重听

  • Form 表单:由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。
    在这里插入图片描述

  • 官网:
    在这里插入图片描述

  • 功能:点击按钮呈现一个表单,要用到上面的Dialog对话框,只不过里面的内容展示的是form表单。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    <!-- Dialog对话框-Form表单 -->
    <el-button type="text" @click="dialogFormVisible = true">打开嵌套Form的 Dialog</el-button>

    <el-dialog title="Form表单" :visible.sync="dialogFormVisible">
      <el-form ref="form" :model="form" label-width="80px">
        <el-form-item label="活动名称">
          <el-input v-model="form.name"></el-input>
        </el-form-item>

        <el-form-item label="活动区域">
          <el-select v-model="form.region" placeholder="请选择活动区域">
            <el-option label="区域一" value="shanghai"></el-option>
            <el-option label="区域二" value="beijing"></el-option>
          </el-select>
        </el-form-item>

        <el-form-item label="活动时间">
          <el-col :span="11">
            <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 100%;"></el-date-picker>
          </el-col>
          <el-col class="line" :span="2">-</el-col>
          <el-col :span="11">
            <el-time-picker placeholder="选择时间" v-model="form.date2" style="width: 100%;"></el-time-picker>
          </el-col>
        </el-form-item>
        
        <el-form-item>
          <el-button type="primary" @click="onSubmit">提交</el-button>
          <el-button>取消</el-button>
        </el-form-item>
      </el-form>
    </el-dialog>
/* 表单项绑定的数据模型 */
      form: {
        name: '',
        region: '',
        date1: '',
        date2: ''
      },   
       
//声明表单的数据模型      
dialogFormVisible: false,

    /* 提交按钮的事件 */
    onSubmit:function(){
        /*提交按钮时拿到表单数据,因为这些表单项的数据都绑定在了form数据模型中,
        所以要查看表达项数据直接把form这个对象输出出来就可以了,直接输出的是
        对象,需要把它转化为字符串输出才可以看到里面的数据*/
        alert(JSON.stringify(this.form));
    }
  • 效果:
    在这里插入图片描述

4、案例

4.1、需求分析&开发步骤

  • 案例需求:根据页面原型完成员工管理页面开发,并通过Axios完成数据异步加载。
    在这里插入图片描述
  • 服务端数据获取地址:http://yapi.smart-xwork.cn/mock/169327/emp/list
    通过在线文档YAPI生成的测试数据。
    在这里插入图片描述
  • 最终实现的页面效果
    在这里插入图片描述
  • 实现步骤:
    在这里插入图片描述

4.2、基本页面布局

  • 添加组件,在组件中编写基本结构
    在这里插入图片描述
<template>
    <div>

    </div>
</template>


<script>
export default {
    
}
</script>


<style>

</style>
  • 修改根组件的引入方式
    在这里插入图片描述

  • 编写页面布局:这个页面布局不需要自己编写,在Element中还提供了一个布局组件(Container 布局容器)
    在这里插入图片描述

  • 可以选择一个常见的页面布局,符合当前案例的开发页面的
    在这里插入图片描述
    在这里插入图片描述

  • 效果:
    在这里插入图片描述

  • 添加css样式
    在这里插入图片描述

<template>
  <div>
    <el-container style="height: 700px; border: 1px solid #eee">
      <el-header style="font-size: 40px; background-color: rgb(238, 241, 246)"
        >tlias 智能学习辅助系统</el-header
      >
      <el-container>
        <el-aside width="200px">
          <el-menu :default-openeds="['1', '3']">
            <el-submenu index="1">
              <template slot="title"><i class="el-icon-message"></i>系统信息管理</template>
                <el-menu-item index="1-1">部门管理</el-menu-item>
                <el-menu-item index="1-2">员工管理</el-menu-item>
            </el-submenu>
          </el-menu>
        </el-aside>
        <el-main>
            <el-table :data="tableData">
                <el-table-column prop="name" label="姓名" width="180"></el-table-column>
                <el-table-column prop="image" label="图像" width="180"></el-table-column>
                <el-table-column prop="gender" label="性别" width="140"></el-table-column>
                <el-table-column prop="job" label="职位" width="140"></el-table-column>
                <el-table-column prop="entrydate" label="入职日期" width="180"></el-table-column>
                <el-table-column prop="updatetime" label="最后操作时间" width="230"></el-table-column>
                <el-table-column label="操作" >
                    <el-button type="primary" size="mini">编辑</el-button>
                    <el-button type="danger" size="mini">删除</el-button>
                </el-table-column>
            </el-table>
      </el-main>
      </el-container>
    </el-container>
  </div>
</template>


<script>
export default {
    data() {
        return {
            tableData: []
        }
    },
};
</script>


<style>
</style>
  • 最终效果:
    在这里插入图片描述

4.3、页面组件实现

  • 效果
    在这里插入图片描述

4.4、axios异步加载数据

Vue项目中使用Axios:

  • 在项目目录下安装axios:npm install axios;
  • 需要使用axios时,导入axios:import axios from 'axios';

案例测试:

  • 打开集成终端,输入命令进行安装
    在这里插入图片描述
    在这里插入图片描述
  • 导入axios,在钩子函数中编写axios发送请求
<template>
    <div>
        <el-container  style="height: 700px; border: 1px solid #eee">
            <el-header style="font-size:40px; background-color: rgb(238, 241, 246)">tlias 智能学习辅助系统</el-header>
            <el-container>
                <el-aside width="230px" style="border: 1px solid #eee">
                    <el-menu :default-openeds="['1', '3']">
                        <el-submenu index="1">
                            <template slot="title"><i class="el-icon-message"></i>系统信息管理</template>
                            <el-menu-item index="1-1">部门管理</el-menu-item>
                            <el-menu-item index="1-2">员工管理</el-menu-item>
                        </el-submenu>
                        </el-menu>
                </el-aside>


                <el-main>
                    <!-- 表单 -->
                    <el-form :inline="true" :model="searchForm" class="demo-form-inline">
                        <el-form-item label="姓名">
                            <el-input v-model="searchForm.name" placeholder="姓名"></el-input>
                        </el-form-item>

                        <el-form-item label="性别">
                            <el-select v-model="searchForm.gender" placeholder="性别">
                                <el-option label="" value="1"></el-option>
                                <el-option label="" value="2"></el-option>
                            </el-select>
                        </el-form-item>
                        
                        <el-form-item label="入职日期">
                            <!-- 日期选择器 -->
                            <el-date-picker
                                v-model="searchForm.entrydate"
                                type="daterange"
                                range-separator=""
                                start-placeholder="开始日期"
                                end-placeholder="结束日期">
                            </el-date-picker>
                        </el-form-item>
                        
                        <el-form-item>
                            <el-button type="primary" @click="onSubmit">查询</el-button>
                        </el-form-item>
                    </el-form>

                    <!-- 表格 -->
                    <el-table :data="tableData" border>
                        <el-table-column prop="name" label="姓名" width="180"></el-table-column>
                        <el-table-column label="图像" width="180">
                            <template slot-scope="scope">
                                <img :src="scope.row.image" width="100px" height="70px">
                            </template>
                        </el-table-column>
                        <el-table-column label="性别" width="140">
                            <template slot-scope="scope">
                                {{scope.row.gender == 1 ? '男':'女'}}
                            </template>
                        </el-table-column>
                        <el-table-column prop="job" label="职位" width="140"></el-table-column>
                        <el-table-column prop="entrydate" label="入职日期" width="180"></el-table-column>
                        <el-table-column prop="updatetime" label="最后操作时间" width="230"></el-table-column>
                        <el-table-column label="操作" >
                            <el-button type="primary" size="mini">编辑</el-button>
                            <el-button type="danger" size="mini">删除</el-button>
                        </el-table-column>
                    </el-table>

                    <br>
                    
                    <!-- 分页条 -->
                    <!-- Pagination 分页 -->
                    <el-pagination background layout="total,sizes, prev, pager, next, jumper" 
                    @size-change="handleSizeChange"
                    @current-change="handleCurrentChange"
                    :total="1000"></el-pagination>

                </el-main>
            </el-container>
        </el-container>
    </div>
</template>

<script>
import axios from 'axios';

export default {
    data() {
        return {
            tableData: [],
            searchForm: {
               name:"",
               gender:"",
               entrydate:[]
            }
        }
    },
    methods: {
        onSubmit:function(){
            alert("查询数据");
        },
        handleSizeChange:function(val){
            alert("每页记录数变化" + val)
        },
        handleCurrentChange:function(val){
            alert("页码发生变化" + val)
        }
    },
    mounted () {
        //发送异步请求,获取数据
        axios.get("http://yapi.smart-xwork.cn/mock/169327/emp/list").then((result) => {
            this.tableData = result.data.data;  
        });
    }
}
</script>

<style>

</style>
  • 效果
    在这里插入图片描述

5、Vue路由

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、打包部署

6.1、说明

  • 前后端分离开发模式中,前端人员开发前端工程,后端人员开发后端工程,最终将前端工程和后端工程分开部署在对应的服务器上,而前端服务器当前最流行的就是nginx。
    在这里插入图片描述

6.2、步骤-打包

  • 打包:打包后会将项目放在dist这个目录下
    在这里插入图片描述
  • 案例测试:
    在这里插入图片描述
    打开dist所在的磁盘目录
    在这里插入图片描述
    打包后的文件
    在这里插入图片描述
    在这里插入图片描述

6.3、步骤-部署

说明:

  • 将dist这个目录下打包后的这些资源呢部署在服务器上就可以了
  • nginx服务器介绍:
    • 介绍:Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,在各大型互联网公司都有非常广泛的使用。
    • 官网:https://nginx.org/

在这里插入图片描述

案例测试:

  • 下载解压nginx稳定版到一个没有中文的目录
    在这里插入图片描述
    在这里插入图片描述

  • 部署:将打包好的 dist 目录下的文件,复制到nginx安装目录的html目录下。
    在这里插入图片描述

    • 有2个默认的页面可以删除掉
      在这里插入图片描述
      在这里插入图片描述
  • 启动:双击 nginx.exe 文件即可,Nginx服务器默认占用 80 端口号
    在这里插入图片描述

    • 启动:
      在这里插入图片描述
    • 注意事项:Nginx默认占用80端口号,如果80端口号被占用,可以在nginx.conf中修改端口号。(netstat –ano | findStr 80)
      在这里插入图片描述
      比如修改为90,之后重启nginx。
      在这里插入图片描述
    • 访问测试:
      注意:这里只是演示的是nginx部署静态资源,它本身还可以反向代理,负载均衡等功能。
      在这里插入图片描述

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

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

相关文章

芯品荟 | 电脑机箱键盘副屏市场调研报告

一.产品简介 1.带TFT彩屏电脑机箱 2.带小TFT彩屏电脑键盘 为什么电脑机箱&键盘&#xff0c;要带屏&#xff1f; 带屏的电脑机箱&键盘客户群体? 电竞玩家、设计师、电子发烧友、股民...... 二、市场规模 中国电脑机箱年产量约6000万台&#xff0c;键盘年产量约3亿…

二次开发在线预约上门服务、预约到家系统 增加开发票功能 轮播图链接跳转 uniapp代码

客户具体要求&#xff1a; 1、在我的个人中心里面增加一个 开票功能&#xff0c;点击进去之后可以查看到能开票的订单列表&#xff0c;如果是个人是填写姓名电话邮箱&#xff0c;就是填写单位名称 税号 邮箱&#xff0c;提交申请到后台审核&#xff0c;如果审核通过后线下人工…

「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解

引言&#xff1a;CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09;是一种攻击技术&#xff0c;通过使用用户的身份进行不诚实地操作&#xff0c;恶意用户可以在受害者&#xff08;目标&#xff09;的机器上执行一些未授权的操作。这可能会危及…

I2C总线和通信协议详解 (超详细配42张高清图+万字长文)

I2C总线和通信协议详解 (超详细配42张高清图万字长文) I2C&#xff08;Inter-Integrated Circuit&#xff09;通信总线&#xff0c;作为嵌入式系统设计中的一个关键组成部分&#xff0c;其灵活性和高效率使其在高级应用中备受青睐。本文旨在提供关于I2C通信总线的深度解析&…

齿轮齿条运动相关计算(博途S7-1200PLC脉冲轴组态)

有关S7-1200PLC脉冲轴相关应用介绍请参考下面的系列文章: S7-1200PLC脉冲轴位置控制功能块 https://rxxw-control.blog.csdn.net/article/details/135299302https://rxxw-control.blog.csdn.net/article/details/135299302S7-1200脉冲轴功能块 https://rxxw-control.blog.c…

这是一篇优雅的Springboot2.0使用手册

这是一篇优雅的Springboot2.0使用手册 最近再研究springboot的原理&#x1f60b;颇有收获&#xff0c;现在让我分享一下springboot如何使用吧~ 啥是Springboot 和书上理解的不同&#xff0c;我认为Springboot是一个优秀的快速搭建框架&#xff0c;他通过maven继承方式添加依…

【windows】右键添加git bash here菜单

在vs 里安装了git for windows 后&#xff0c;之前git-bash 右键菜单消失了。难道是git for windows 覆盖了原来自己安装的git &#xff1f;大神给出解决方案 手动添加Git Bash Here到右键菜单&#xff08;超详细&#xff09; 安装路径&#xff1a;我老的 &#xff1f; vs的gi…

c++可调用对象、function类模板与std::bind

函数调用与函数调用运算符 先写一个简单的函数&#xff0c;如下&#xff1a; /*函数的定义*/ int func(int i) {cout<<"这是一个函数\t"<<i<<endl; }void test() {func(1);//函数的调用 } 通过这个普通的函数可以看到&#xff0c;调用一个函数很…

黑盒测试,软件测试中的军体拳

黑盒测试&#xff0c;软件测试中的军体拳 让我们来讲一个故事黑盒测试的测试方法黑盒测试的测试方法用于黑盒测试的工具&#xff1a;黑盒测试可以识别什么黑盒测试的特点&#xff1a;黑盒测试的优点&#xff1a; 五星上将麦克阿瑟曾经说过“如果把白盒测试比做六脉神剑&#xf…

vue实现 marquee(走马灯)

样式 代码 <div class"marquee-prompt"><div class"list-prompt" refboxPrompt><span v-for"item in listPrompt" :title"item" class"prompt">{{item}}</span></div> </div>data() {…

快速入门Torch构建自己的网络模型

真有用构建自己的网络模型 读前必看刚学完Alex网络感觉很厉害的样子&#xff0c;我也要搭建一个可以看着网络结构实现上面的代码你已经很强了&#xff0c;千万不要再想实现VGG等网络&#xff01;&#xff01;&#xff01;90%你能了解到的模型大佬早已实现好&#xff0c;直接调用…

【python】16.Python语言进阶

Python语言进阶 重要知识点 生成式&#xff08;推导式&#xff09;的用法 prices {AAPL: 191.88,GOOG: 1186.96,IBM: 149.24,ORCL: 48.44,ACN: 166.89,FB: 208.09,SYMC: 21.29 } # 用股票价格大于100元的股票构造一个新的字典 prices2 {key: value for key, value in prices…

推荐几个Github高星GoLang管理系统

在Web开发领域&#xff0c;Go语言&#xff08;Golang&#xff09;以其高效、简洁、高并发等特性逐渐成为许多开发者的首选语言。有许多优秀的Go语言Web后台管理系统&#xff0c;这些项目星星众多&#xff0c;提供了丰富的功能和良好的代码质量。本文将介绍一些GitHub高星的GoLa…

07-微服务getaway网关详解

一、初识网关 在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去调用。这样的话会产生很多问题&#xff0c;例…

设计模式之依赖倒转原则

在软件开发的世界里&#xff0c;设计模式一直是提升代码质量、确保软件稳定性以及优化软件可维护性的重要工具。而在这其中&#xff0c;依赖倒转原则无疑是其中最具代表性的设计模式之一。那么&#xff0c;什么是依赖倒转原则&#xff1f;它又为何如此重要&#xff1f;让我们一…

鼎捷软件获评国家级智能制造“AAA级集成实施+AA级咨询设计”供应商

为贯彻落实《“十四五”智能制造发展规划》&#xff0c;健全智能制造系统解决方案供应商(以下简称“供应商”)分类分级体系&#xff0c;推动供应商规范有序发展&#xff0c;智能制造系统解决方案供应商联盟组织开展了供应商分类分级评定(第一批)工作&#xff0c;旨在遴选一批专…

Python--GIL(全局解释器锁)

在Python中&#xff0c;GIL&#xff08;全局解释器锁&#xff09;是一个非常重要的概念&#xff0c;它对Python的多线程编程有着深远的影响。GIL是Python解释器级别的锁&#xff0c;用于保证任何时刻只有一个线程在执行Python字节码。这意味着即使在多核处理器上&#xff0c;Py…

[HTML]Web前端开发技术13(HTML5、CSS3、JavaScript )横向二级导航菜单 Web页面设计实例——喵喵画网页

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;佬佬会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

离线数据仓库-关于增量和全量

数据同步策略 数据仓库同步策略概述一、数据的全量同步二、数据的增量同步三、数据同步策略的选择 数据仓库同步策略概述 应用系统所产生的业务数据是数据仓库的重要数据来源&#xff0c;我们需要每日定时从业务数据库中抽取数据&#xff0c;传输到数据仓库中&#xff0c;之后…

探索Redis特殊数据结构:Bitmaps(位图)在实际中的应用

一、概述 Redis官方提供了多种数据类型&#xff0c;除了常见的String、Hash、List、Set、zSet之外&#xff0c;还包括Stream、Geospatial、Bitmaps、Bitfields、Probabilistic&#xff08;HyperLogLog、Bloom filter、Cuckoo filter、t-digest、Top-K、Count-min sketch、Confi…