一.准备工作
1.项目介绍
2.原型展示
3.技术架构
HTML5可以实现在手机端自适应显示
4.功能架构
5.软件开发流程
使用瀑布模型进行开发
二.环境搭建
1.项目结构
使用maven分模块开发方式,将整个项目拆分成几个maven工程,每个maven工程存放特定的一类代码
2.环境搭建
2.1.health_parent
首先新建一个空工程(empty project)
然后在empty Project工程下新增一个maven模块health_parent
不需要选择架构,在pom文件里修改打包方式为pom,用于统一管理依赖版本
<packaging>pom</packaging>
将资料中的依赖复制到pom文件中,如果出现依赖版本爆红,而且刷新没用的话
将下图中的标签注释掉,再刷新,就可以下载依赖了。
这个问题的原因是没有导入资料中的jar依赖包。
<dependencyManagement>
dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后使用它指定的版本号。
简单的说,就是统一锁定子模块中的jar包版本号。
但是设置了此标签后,子模块中想要引用哪个jar包,需要子模块自己单独指定jar包。
因为每个模块使用的jar包都不一样,每个模块都统一继承了父模块的jar包,并不合理。每个模块引入jar包时,列出jar包即可,无需再列出版本号,从而实现版本号控制。
2.2 health_common
子工程,打包方式为jar,存放通用组件,例如工具类、实体类等
<packaging>jar</packaging>
复制资料中的代码即可
2.3 health_interface
子工程,打包方式为jar,存放服务接口
这个子工程只需继承common工程即可
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.itheima</groupId>
<artifactId>health_common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
2.4 health_service_provider
子工程,打包方式为war,作为服务单独部署,存放服务类、Dao接口和Mapper映射文件等
因为打包方式是war包,所以需要创建一个带有webapp架构的maven工程
web工程会自动在pom文件中添加很多不必要的依赖(红色方框),我们选择删除即可
依赖interface工程,添加一个tomcat插件
<!--依赖interface工程-->
<dependency>
<groupId>com.itheima</groupId>
<artifactId>health_interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<!-- 指定端口 -->
<port>81</port>
<!-- 请求路径 -->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
web工程中没有java源码包,resource目录,需要手动添加
添加log4j日志文件
添加mybatis的配置文件,实际开发中的xml文件,一般都是直接复制,修改即可。
添加Spring的配置文件
spring-dao:持久层配置文件
注意修改配置
创建对应的数据库
spring-tx:事务控制层配置文件
spring-service:发布相关的配置文件
web.xml:初始化spring
2.5 healt_backend
创建一个maven的web工程 ,打包方式为war,单独部署,存放Controller、页面等
根据服务提供工程(service_provider)来完成自己的功能。所以需要依赖interface接口
同时需要提供tomcat服务,部署tomcat,注意和health_service_provider模块的端口号不能重复
完善web项目的工程结构
配置日志文件
配置springmvc.xml文件
配置web.xml文件,注意名称的对应,如下图
2.28进度
安装powerdesigner12成功。
创建物理模型(PDM)
3.1进度
三.ElementUI
1.使用ElementUI构建页面,在页面上引入js和css文件即可使用,在ElementUI的官方文档找到引用地址
注意要引用vue.js,因为ElementUI是基于vue开发的
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script>
根据不同的需求,在官方文档上去寻找组件
1.container布局容器:用于布局的容器组件,方便快速搭建页面的基本结构
<el-container>
:外层容器。当子元素中包含 <el-header>
或 <el-footer>
时,全部子元素会垂直上下排列,否则会水平左右排列。
<el-header>
:顶栏容器。
<el-aside>
:侧边栏容器。
<el-main>
:主要区域容器。
<el-footer>
:底栏容器。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 引入ElementUI样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!--引入vue.js,因为ElementUI是配置Vue使用-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script>
<!-- 引入ElementUI组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>
<body>
<!--2.定义一个div,id为app-->
<div id="app">
<el-container>
<!--外层容器,可以包含以下四种元素-->
<el-header>Header</el-header>
<!--顶栏容器-->
<el-main>Main</el-main>
<!--主要区域容器-->
</el-container>
<el-container>
<el-header>Header</el-header>
<el-main>Main</el-main>
<el-footer>Footer</el-footer>
<!--底栏容器-->
</el-container>
<el-container>
<el-aside width="200px">Aside</el-aside>
<el-main>Main</el-main>
</el-container>
<el-container>
<el-header>Header</el-header>
<el-container>
<el-aside width="200px">Aside</el-aside>
<el-main>Main</el-main>
</el-container>
</el-container>
<el-container>
<el-header>Header</el-header>
<el-container>
<el-aside width="200px">Aside</el-aside>
<el-container>
<el-main>Main</el-main>
<el-footer>Footer</el-footer>
</el-container>
</el-container>
</el-container>
<el-container>
<el-aside width="200px">Aside</el-aside>
<el-container>
<el-header>Header</el-header>
<el-main>Main</el-main>
</el-container>
</el-container>
<el-container>
<el-aside width="200px">Aside</el-aside>
<el-container>
<el-header>Header</el-header>
<el-main>Main</el-main>
<el-footer>Footer</el-footer>
</el-container>
</el-container>
<style>
.el-header, .el-footer {
background-color: #B3C0D1;
color: #333;
text-align: center;
line-height: 60px;
}
.el-aside {
background-color: #D3DCE6;
color: #333;
text-align: center;
line-height: 200px;
}
.el-main {
background-color: #E9EEF3;
color: #333;
text-align: center;
line-height: 160px;
}
body > .el-container {
margin-bottom: 40px;
}
.el-container:nth-child(5) .el-aside,
.el-container:nth-child(6) .el-aside {
line-height: 260px;
}
.el-container:nth-child(7) .el-aside {
line-height: 320px;
}
</style>
</div>
<!--3.为container中的每一个元素定义不同的属性-->
<style>
.el-header, .el-footer {
background-color: #B3C0D1;
color: #333;
text-align: left;
line-height: 60px;
}
.el-aside {
background-color: #D3DCE6;
color: #333;
text-align: center;
line-height: 200px;
}
.el-main {
background-color: #E9EEF3;
color: #333;
text-align: center;
line-height: 590px;
}
</style>
<!--1.导入Vue:创建Vue对象,作用对象为app-->
<script>
new Vue({
el: '#app'
});
</script>
</body>
</html>
2.Dropdown下拉菜单
4.2号进度
3.NavMenu导航菜单
<el-menu>
<!-- 通过el-menu表示menu菜单 -->
<el-submenu index="1">
<!-- 通过el-submenu标签表示一级菜单,后面的索引用来区分不同的菜单 -->
<template slot="title">
<i class="el-icon-location"></i>
<!-- 通过i标签来绑定一个class样式,class样式在index.css文件中已经定义好了 -->
<span slot="title">导航一</span>
</template>
<el-menu-item>选项1</el-menu-item>
<!-- 通过menu-item表示二级菜单 -->
<el-menu-item>选项2</el-menu-item>
<el-menu-item>选项3</el-menu-item>
</el-submenu>
<el-submenu index="2">
<template slot="title">
<i class="el-icon-menu"></i>
<span slot="title">导航二</span>
</template>
<el-menu-item>选项1</el-menu-item>
<el-menu-item>选项2</el-menu-item>
<el-menu-item>选项3</el-menu-item>
</el-submenu>
</el-menu>
4.table表格
<el-table stripe>
<!-- 通过table标签来创建一个表格 -->
<el-table-column prop="date" label="日期"></el-table-column>
<!-- 通过table-column创建表格的表头 -->
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
<el-table-column label="操作" align="center"></el-table-column>
</el-table>
数据表格绑定数据对象来展示数据
数据对象:创建vue对象时创建data属性,从而定义数据对象(tableData)
方法对象:VUE对象的method属性
<!-- 通过table标签来创建一个表格,表格中的数据来源绑定了VUE中的模型数据 -->
<el-table :data="tableData" stripe>
<el-table-column prop="date" label="日期"></el-table-column>
<!-- 通过table-column创建表格的表头,如果是属性列,则用prop展示属性-->
<el-table-column prop="name" label="姓名"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
<!-- 如果是模板列(作用是展示操作的按钮),用label表示操作 -->
<el-table-column label="操作" align="center">
<!--
slot-scope:作用域插槽,可以获取表格数据
scope:代表表格数据,可以通过scope.row来获取表格当前行数据,scope不是固定写法
-->
<template slot-scope="scope">
<!-- @click表示按钮绑定的事件,事件对应的方法名在VUE对象中创建 -->
<el-button type="primary" size="mini" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button type="danger" size="mini" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<!--1.导入Vue:创建Vue对象,作用对象为app-->
<script>
new Vue({
el: '#app',
// 定义VUE对象中的模型数据,用于table展示,tableData对象是一个数组对象,对应的数据是json数据
data: {
tableData: [
{ date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' },
{ date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1517 弄' },
{ date: '2016-05-01', name: '王小虎', address: '上海市普陀区金沙江路 1519 弄' }
]
},
// 定义VUE对象的方法,操作scope.row传输过来的数据
methods: {
handleUpdate(row) {
alert(row.date);
},
handleDelete(row) {
alert(row.name);
}
}
});
</script>
5.Pagination分页
@current-change="handleCurrentChange"事件,事件触发后会自动调用VUE对象中定义的方法
layout中各属性代表的功能
6.Message消息提示
$message即可作为方法,也可作为对象
type属性对应展示的效果
<!--2.定义一个div,id为app-->
<div id="app">
<el-button :plain="true" @click="open1">消息</el-button>
<el-button :plain="true" @click="open2">成功</el-button>
<el-button :plain="true" @click="open3">警告</el-button>
<el-button :plain="true" @click="open4">错误</el-button>
<!--1.导入Vue:创建Vue对象,作用对象为app-->
<script>
new Vue({
el: '#app',
methods: {
open1() {
// $message可作为一个方法使用,也可以作为一个对象使用
this.$message('这是一条消息提示');
},
open2() {
this.$message({
message: '恭喜你,这是一条成功消息',
// type表示展示出的效果
type: 'success'
});
},
open3() {
this.$message({
message: '警告哦,这是一条警告消息',
type: 'warning'
});
},
open4() {
// 作为一个对象使用,调用error方法
this.$message.error('错了哦,这是一条错误消息');
}
}
});
</script>
</div>
7.Tabs标签页
分隔内容上有关联但属于不同类别的数据集合。
el-tabs标签,value指定选中的标签页el-tabs-pane
8.Form表单(重要)
由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据。在 Form 组件中,每一个表单域由一个 Form-Item 组件构成,表单域中可以放置各种类型的表单控件,包括 Input、Select、Checkbox、Radio、Switch、DatePicker、TimePicker。
表单中的每一个表单域都绑定了VUE对象中的模型对象,两者存在绑定关系
el-form-item:表单项
model:对应VUE对象中的模型对象
rules:表单验证规则,在VUE对象中定义不同规则,表单项通过prop指定具体使用何种规则
methods方法中,要使用到提交的表单数据,表单数据使用ref来指定了,直接传入ref参数给method中的方法即可。