一、前言
接下来就是来解决这些问题
二、 Ajax
1.ajax
javscript是网页三剑客之一,空用来控制网页的行为的
xml是一种标记语言,是用来存储数据的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ajax-原生方式</title>
</head>
<body>
<input type="button" value="获取数据" onclick="getData()">
<div id="div1"></div>
</body>
<script>
function getData(){
//1.创建XMLHttpRequest对象
var xmlHttpRequest = new XMLhttpRequest();
//2.发送异步请求
xmlHttpRequest.open('GET','http://yapi.smart-xwork.cn/mock/169327/emp/list');
xmlHttpRequest.send();//发送请求
//3.获取服务响应数据
xmlHttpRequest.onreadystatechange = function(){
if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){
document.getElementById('div1').innerHTML = xmlHttpRequest.responseText;
}
}
}
</script>
</html>‘
2.axios
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ajax-axios</title>
</head>
<body>
<input type="button" value="获取数据GET" onclick="get()">
<input type="button" value="删除数据POST" onclick="post()">
</body>
<script>
function get(){
axios({
method:'get',
url:'http://yapi.smart-xwork.cn/mock/169327/emp/list',
}).then(result =>{
console.log(result.data);
})
}
function post(){
axios({
method:'post',
url:'http://yapi.smart-xwork.cn/mock/169327/emp/deleteById',
data:'id=1',
}).then(result =>{
console.log(result.data);
})
}
</script>
</html>
3.axio案例
这三个代码都是没有用浏览器看到的(因为那个网址打不开)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ajax-axios案例</title>
</head>
<body>
<div id="app">
<table width="800px" cellspacing="0" border="1">
<tr>
<th>编号</th>
<th>姓名</th>
<th>图片</th>
<th>性别</th>
<th>职位</th>
<th>入职时间</th>
<th>更新时间</th>
</tr>
<tr v-for="(emp, index) in emps" align="center">
<td>{{index+1}}</td>
<td>{{emps.name}}</td>
<!-- <td>{{emps.image}}</td> -->
<td>
<img v-bind : src="emps.image" alt="" height="50px" width="70px">
</td>
<td>
<span v-if="gender == 1">男</span>
<span v-if="gender == 2">女</span>
</td>
<td>{{emps.job}}</td>
<td>{{emps.entrydate}}</td>
<td>{{emps.updatatime}}</td>
</tr>
</table>
</div>
</body>
<script>
new Vue({
el:'a#pp',
data:{
emps:[]
},
mounted() {
axios.get('').then(result => {
this.emps = result.data.data;//当前vue实例中的data中的emps属性赋值
})
},
})
</script>
</html>
三、前后端分离开发
1.介绍
2.YAPI -接口文档管理平台
这里我插播一条:我使用apipost
四、前端工程化
1.环境准备
需要的话,可以找我要呢
配置环境变量 node.js安装及环境配置超详细教程【Windows系统安装包方式】_node 0.12.6 安装 node-echarts 包-CSDN博客
如果这俩个不行建议再找找
2. vue项目介绍
演示修改前端Vue的端口号:
3.vue项目开发流程(如何访问到vue的首页面)
五、Vue组件库Element
1.快速入门
import Vue from 'vue'
import App from './App.vue'
import router from './router'
//引入element-ui组件
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.config.productionTip = false
Vue.use(ElementUI);
new Vue({
router,
render: h => h(App)
}).$mount('#app')
原页面
<template>
<div id="app">
<nav>
<router-link to="/">Vue Home</router-link> |
<router-link to="/about">About</router-link>
</nav>
<router-view/>
</div>
</template>
<style>
#app {
font-family: Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
}
nav {
padding: 30px;
}
nav a {
font-weight: bold;
color: #2c3e50;
}
nav a.router-link-exact-active {
color: #42b983;
}
</style>
2.常见组件
<template>
<div>
<!-- button按钮 -->
<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>
<!-- table表格 -->
<el-table
:data="tableData"
style="width: 100%"
:row-class-name="tableRowClassName"
>
<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>
</div>
</template>
<script>
export default {
methods: {
tableRowClassName({rowIndex}) {
if (rowIndex === 1) {
return 'warning-row';
} else if (rowIndex === 3) {
return 'success-row';
}
return '';
}
},
data() {
return {
tableData: [{
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 弄'
}]
}
}
};
</script>
<style>
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
</style>
<template>
<div>
<!-- button按钮 -->
<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>
<!-- table表格 -->
<el-table
:data="tableData"
style="width: 100%"
:row-class-name="tableRowClassName"
>
<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>
<!-- pagination分页 -->
<el-pagination
background
layout=" sizes, prev, pager, next, jumper, -> , total, slot"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="1000"
></el-pagination>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [
{
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 弄",
},
],
};
},
methods: {
tableRowClassName({ rowIndex }) {
if (rowIndex === 1) {
return "warning-row";
} else if (rowIndex === 3) {
return "success-row";
}
return "";
},
handleSizeChange: function (val) {
alert("每页" + val + "条");
},
handleCurrentChange: function (val) {
alert("当前页: " + val);
},
},
};
</script>
<style>
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
</style>
<template>
<div>
<!-- button按钮 -->
<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>
<!-- table表格 -->
<el-table
:data="tableData"
style="width: 100%"
:row-class-name="tableRowClassName"
>
<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>
<!-- pagination分页 -->
<el-pagination
background
layout=" sizes, prev, pager, next, jumper, -> , total, slot"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="1000"
></el-pagination>
<!-- dialog对话框 -表格-->
<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="地址"></el-table-column>
</el-table>
</el-dialog>
<!-- dialog对话框 -表单-->
<el-button type="text" @click="dialogFormVisible = true"
>打开嵌套表格的 Dialog</el-button
>
<el-dialog title="From表单" :visible.sync="dialogFormVisible">
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-width="100px"
class="demo-ruleForm"
>
<el-form-item label="活动名称" prop="name">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label="活动区域" prop="region">
<el-select v-model="ruleForm.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="活动时间" required>
<el-col :span="11">
<el-form-item prop="date1">
<el-date-picker
type="date"
placeholder="选择日期"
v-model="ruleForm.date1"
style="width: 100%"
></el-date-picker>
</el-form-item>
</el-col>
<el-col class="line" :span="2">-</el-col>
<el-col :span="11">
<el-form-item prop="date2">
<el-time-picker
placeholder="选择时间"
v-model="ruleForm.date2"
style="width: 100%"
></el-time-picker>
</el-form-item>
</el-col>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')"
>立即创建</el-button
>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
rules: {
name: [
{ required: true, message: "请输入活动名称", trigger: "blur" },
{ min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" },
],
region: [
{ required: true, message: "请选择活动区域", trigger: "change" },
],
date1: [
{
type: "date",
required: true,
message: "请选择日期",
trigger: "change",
},
],
date2: [
{
type: "date",
required: true,
message: "请选择时间",
trigger: "change",
},
],
},
ruleForm: {
name: "",
region: "",
date1: "",
date2: "",
},
tableData: [
{
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 弄",
},
],
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,
dialogFormVisible: false,
};
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert(
"submit!" + JSON.stringify(this.ruleForm)
); /* 将rule这个对象转成字符串 */
} else {
console.log("error submit!!");
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
tableRowClassName({ rowIndex }) {
if (rowIndex === 1) {
return "warning-row";
} else if (rowIndex === 3) {
return "success-row";
}
return "";
},
handleSizeChange: function (val) {
alert("每页" + val + "条");
},
handleCurrentChange: function (val) {
alert("当前页: " + val);
},
},
};
</script>
<style>
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
</style>
3.案例
<template> <div> <el-container> <el-header style="font-size: 45px; background-color: rgb(238, 241, 246)" >talis智能辅助系统</el-header > <el-container> <el-aside style="width: 200; 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="formInline" 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.enteydata" 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 prop="image" label="图像" width="180"> <template slot-scope="scope"> <img :src="scope.row.image" width="100"> </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> <!-- pagination分页 --> <el-pagination background layout=" sizes, prev, pager, next, jumper, -> , total, slot" @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: "", enteydata: [], }, }; }, methods: { onsubmit() { console.log("查询"); }, handleSizeChange: function (val) { alert("每页" + val + "条"); }, handleCurrentChange: function (val) { alert("当前页: " + val); }, }, mounted() { //当组件挂载到页面时,自动触发钩子函数,我们此时通过axios发送异步请求,获取数据,展示在表格中 axios.get("http://localhost:10010/emp/list").then((result) => { this.tableData = result.data.data; }); }, }; </script> <style> </style>
<el-aside width="200px" style="background-color: rgb(238, 241, 246)">
<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-table :data="tableData" border>
<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-form :inline="true" :model="formInline" 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>
<el-button type="primary" @click="onSubmit">查询</el-button>
</el-form-item>
</el-form>
<!-- 横向表单 -->
<el-form :inline="true" :model="formInline" 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.enteydata"
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>
<!-- pagination分页 -->
<el-pagination
background
layout=" sizes, prev, pager, next, jumper, -> , total, slot"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="1000"
></el-pagination>
双击资料中提供的 start.bat 脚本启动⼀个本地服务,启动后界⾯如下所⽰: 注意: 如果双击 start.bat 发现⾃⼰的⿊窗⼝⼀闪⽽过,那说明我们⾃⼰的本地JAVA_HOME 环境变量有问题,检查⼀下系统环境变量中是否正确配置了JAVA_HOMEAjax访问由于现在启动的服务,是我们本地的服务,所以在ajax请求的时候,需要将请求地址改成我们本地的地址,也就是将上述两个Yapi平台的地址替换为: GET请求: http://localhost:10010/emp/listPOST请求: http://localhost:10010/emp/deleteByIdAjax⽰例如下:< script >function get (){axios . get ( "http: / localhost:10010/emp/list" ). then (( result ) = > {console . log ( result . data );});}function post (){axios . post ( "http: / localhost:10010/emp/deleteById" ,"id=1" ). then (( result ) = > {console . log ( result . data );});}/ script >
六、Vue路由
这里自己建一个DeptVue.vue
<template> <div> <el-container> <el-header style="font-size: 45px; 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"> <router-link to="/dept">部门管理</router-link> </el-menu-item> <el-menu-item index="1-2"> <router-link to="/emp">员工管理</router-link> </el-menu-item> </el-submenu> </el-menu> </el-aside> <el-main> <!-- 横向表单 --> <el-form :inline="true" :model="formInline" 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.enteydata" 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 prop="image" label="图像" width="180"> <template slot-scope="scope"> <img :src="scope.row.image" width="100"> </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> <!-- pagination分页 --> <el-pagination background layout=" sizes, prev, pager, next, jumper, -> , total, slot" @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: "", enteydata: [], }, }; }, methods: { onsubmit() { console.log("查询"); }, handleSizeChange: function (val) { alert("每页" + val + "条"); }, handleCurrentChange: function (val) { alert("当前页: " + val); }, }, mounted() { //当组件挂载到页面时,自动触发钩子函数,我们此时通过axios发送异步请求,获取数据,展示在表格中 axios.get("http://localhost:10010/emp/list").then((result) => { this.tableData = result.data.data; }); }, }; </script> <style> </style>
更改相应的代码
最终显示
七、打包部署
1.打包
2.部署
如果资源管理器运行的进程没有nginx的话, Day03-16. 打包部署_哔哩哔哩_bilibili