00100

20210621_vue的基本语法
demo1_js操作页面元素.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.title{
				color: red;
				font-size: 30px;
			}

		</style>
		<!-- <script type="text/javascript" src="js/main.js">
			
		</script> -->
		<script>
			window.onload = function(){
				//1、 js定位页面元素
				// 通过id获取元素
				var b = document.getElementById('box')
				console.log(b)
				// 通过class属性定位元素
				var b1 = document.getElementsByClassName('box1') 
				console.log(b1)
				// 通过css选择器去定位元素
				var b3 = document.querySelector('.box1 a')
				
				// 2、js修改元素的文本
				// // innerText
				// document.querySelector('#box').innerText = 'python666'
				// document.querySelector('#box').innerText = '<h1>python123</h1>'
						
				// innerHTML
				document.querySelector('#box').innerHTML = '<h1>python123</h1>'
				
				// 3、js修改元素的属性
				 document.querySelector('.box1 a').href = 'http://www.baidu.com'
				
				// 4、js修改元素的class属性	
				 document.querySelector('.box1 a').className = 'title'
				
				// 5、js修改style属性的值 
				document.querySelector('#box').style.color = 'yellow'
				// 注意点:font-size 这种多个单词组成的样式,需要写成小驼峰命令的风格-->fontSize
				document.querySelector('#box').style.fontSize = '40px'
				
				
				// 6、给元素绑定事件
				document.querySelector('#btn').onclick = function(){
					document.querySelector('#box').style.color = 'blue'
					alert('python666')
				}
				
				// 7、window.onload事件 会等到页面文档加载关闭之后才会执行。

			}
			
			
			
		</script>
		
		
	</head>
	<body>
		
		
		
		<div id="box" class="box1" style="color: aqua;"></div>
		<div class="box1">
			<a href="">百度</a>
		
		</div>
		
		<button id="btn">按钮</button>
		
		
		
		
		
		
		
		
	</body>
</html>

demo2_vue的入门使用.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<!-- 整个页面的所有的内容都放到一个根节点里面 -->
			<!-- <ul>
				<li id='n' >姓名:</li>
				<li id='a'>年龄:</li>
				<li id='s'>性别:</li>
			</ul> -->
			<h1>{{desc}}</h1>
			<ul>
				<li>姓名:{{info.name}}</li>
				<li>年龄:{{info.age}}</li>
				<li>性别:{{info.sex}}</li>
			</ul>
		</div>



		<script type="text/javascript">
			// 1、使用原生的js 往页面中填充数据
			// data = {
			// 	name: "木森",
			// 	age: 18,
			// 	sex: "男"
			// }
			// //  
			// document.getElementById('n').innerHTML = document.getElementById('n').innerText+data.name
			// document.getElementById('a').innerHTML = document.getElementById('a').innerText+data.age
			// document.getElementById('s').innerHTML = document.getElementById('s').innerText+data.sex

			//2、使用vue往页面中填充数据
			// 初始化一个vue对象
			var vm = new Vue({
				// el 用来指定挂载对象
				el: "#app",
				// data 用来保存数据的
				data: {
					// 个人信息的数据
					info: {
						name: "木森",
						age: 19,
						sex: "男"
					},
					desc:"这个是标题"
				}
			})
		</script>



	</body>
</html>

demo3_vue数据填充的方式.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
	</head>
	<body>

		<div id="app">
			<p>{{msg}}</p>
			<p v-text="msg"></p>
			<p v-html="desc"></p>
			<p v-pre>显示的内容:{{msg1}}</p>

			<a v-bind:href="url">点击跳转到我的主页</a>
			<a :href="url2">淘宝</a>
		</div>


		<script type="text/javascript">
			/*
			一、html的文本填充
			1、插值表达式:{{ 值}}
			2、v-text指令:往元素中填充文本
			3、v-html指令:往元素中填充html
			4、v-pre指定: 显示原始的数据格式
			
			二、元素的属性绑定:v-bind
			v-bind 可以简写 :
			
			
			
			*/

			var vm = new Vue({
				el: "#app",
				data: {
					msg: "hello 木森",
					age: 18,
					desc: '<h1>musen<\h1>',
					url: "http://www.baidu.com",
					url2: "http://www.taobao.com"
				},





			})
		</script>



	</body>
</html>

demo4_vue事件绑定和数据双向绑定 .html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
	</head>
	<body>

		<div id="app">
			<!-- 数据单向绑定:把data中的数据绑定到页面的元素中 -->
			<!-- 		数值A: <input type="text" name="a" :value="a">
			<br>
			数值B: <input type="text" name="b" :value="b"> -->

			<!-- 数据双向绑定 -->
			数值A: <input type="text" name="a" v-model.number="a">
			<br>
			数值B: <input type="text" name="b" v-model.number="b">
			<br>
			<br>
			<!-- <button type="button" v-on:click="countNumber()">计算</button> -->
			<button type="button" @click="countNumber()">计算</button>
			<h5>结果:{{c}}</h5>
		</div>


		<script type="text/javascript">
			/*
			1、事件绑定:v-on
				v-on可以简写为:@
			
			
			2、数据双向绑定:v-model (绑定的是表单元素的value)
				双向绑定,用户输入的数据默认或当成字符串处理
				
			3、双向绑定时:表单输入内容数据的转换(表单修饰符)
				.lazy:input数据输入完之后出发
				.number:自动把输入的数字转换为数值类型
				.trim:去除首尾的空白字符
				
			*/

			var vm = new Vue({
				// 指定vue挂载的根节点
				el: "#app",
				// 页面中的数据
				data: {
					a: 11,
					b: 22,
					c: null
				},
				// 页面操作要使用的函数
				methods: {
					// shu计算的方法
					countNumber: function() {
						this.c = this.a + this.b
					}
				}





			})
		</script>



	</body>
</html>

demo5_vue中的分支语句.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">

			<div v-if="case_.result=='success'" style="color: chartreuse;">{{case_}}</div>
			<div v-else-if="case_.result=='fail'" style="color: #994444">{{case_}}</div>
			<div v-else style="color: red;">{{case_}}</div>
				
				
			<div v-show="false" >9999999999999999</div>
				
		</div>


		<script>
			/*
			v-if  
			v-else-if
			v-else
			v-show:控制元素的dispaly属性:
			
			*/ 
			
			
			var vm = new Vue({
				el: '#app',
				data: {
					case_: {
						case_id: 1,
						title: "用例001",
						result: "error",
						show:true
					}
				}
			})
		</script>




	</body>
</html>

demo6_vue中的遍历语句.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<table border="" cellspacing="" cellpadding="">
				<tr>
					<th>ID</th>
					<th>用例名</th>
					<th>结果</th>
				</tr>

				<tr v-for='item in cases'>
					<td>{{item.case_id}}</td>
					<td>{{item.title}}</td>

					<td v-if="item.result=='success'" style="color: green;">{{item.result}}</td>
					<td v-else-if="item.result=='fail'" style="color: #5e0000;">{{item.result}}</td>
					<td v-else style="color: red;">{{item.result}}</td>
				</tr>
				<!--遍历数组 -->
				<div v-for="(item,index) in cases"> {{item}}-----------{{index}}</div>

				<!-- 遍历对象 -->
				<div v-for="(value,key) in stus"> {{key}}------{{value}}-----</div>
			</table>
		</div>


		<script>
			var vm = new Vue({
				el: '#app',
				data: {
					cases: [{
							case_id: 1,
							title: "用例001",
							result: "success"
						},
						{
							case_id: 2,
							title: "用例002",
							result: "error"
						},
						{
							case_id: 3,
							title: "用例003",
							result: "fail"
						}, {
							case_id: 4,
							title: "用例004",
							result: "success"
						}, {
							case_id: 5,
							title: "用例004",
							result: "success"
						},
					],
					stus: {
						case_id: 5,
						title: "用例004",
						result: "success"
					}
				}
			})
		</script>
	</body>






</html>

20210625_vue的高级特性
demo1_事件的参数传递.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

	</head>
	<body>
		<div id="app">
			<table border="" cellspacing="" cellpadding="">
				<tr>
					<th>ID</th>
					<th>接口名</th>
					<th>测试人员</th>
					<th>项目名</th>
					<th>项目ID</th>
					<th>描述信息</th>
					<th>创建时间</th>
					<th>用例数</th>
					<th>操作</th>
				</tr>
				<tr :key='item.id' v-for="item in lists">
					<td>{{item.id}}</td>
					<td>{{item.name}}</td>
					<td>{{item.tester}}</td>
					<td>{{item.project}}</td>
					<td>{{item.project_id}}</td>
					<td>{{item.desc}}</td>
					<td>{{item.create_time}}</td>
					<td>{{item.testcases}}</td>
					<td><button @click="deleteHandle(item.id)">删除</button></td>
				</tr>
			</table>

		</div>
		<script type="text/javascript">
			/*
			1、事件的参数传递:绑定事件的时候,如果要给处理事件的方法传递参数,
						     那么在定义方法的时候,就要先定义好参数,绑定的时候传入参数即可
				
				
			
			*/


			var vue = new Vue({
				el: '#app',
				data: {
					lists: [{
							"id": 1,
							"name": "登录接口_自动化测试平台项目",
							"tester": "可优",
							"project": "自动化测试平台项目",
							"project_id": 1,
							"desc": "登录接口",
							"create_time": "2019-11-06 14:50:30",
							"testcases": 9,
						},
						{
							"id": 2,
							"name": "注册接口_自动化测试平台项目",
							"tester": "可可",
							"project": "自动化测试平台项目",
							"project_id": 1,
							"desc": "自动化测试平台项目, 注册接口",
							"create_time": "2019-11-06 14:51:00",
							"testcases": 0,
						},
						{
							"id": 3,
							"name": "创建项目接口_自动化测试平台项目",
							"tester": "可优",
							"project": "自动化测试平台项目",
							"project_id": 1,
							"desc": "这是自动化测试平台创建项目接口",
							"create_time": "2019-11-06 14:51:45",
							"testcases": 1,
						},
						{
							"id": 4,
							"name": "注册接口_前程贷P2P金融项目",
							"tester": "小可可",
							"project": "前程贷P2P金融项目",
							"project_id": 2,
							"desc": "",
							"create_time": "2019-11-06 14:52:22",
							"testcases": 0,
						},
						{
							"id": 5,
							"name": "登录接口_前程贷P2P金融项目",
							"tester": "柠檬小姐姐",
							"project": "前程贷P2P金融项目",
							"project_id": 2,
							"desc": "",
							"create_time": "2019-11-06 14:52:40",
							"testcases": 0,
						},
						{
							"id": 6,
							"name": "查看项目列表接口_前程贷P2P金融项目",
							"tester": "柠檬小姐姐",
							"project": "前程贷P2P金融项目",
							"project_id": 2,
							"desc": "",
							"create_time": "2019-11-06 17:22:50",
							"testcases": 1,
						}
					]
				},
				methods: {
					deleteHandle: function(id) {
						console.log('点击了删除按钮')
						// 方式一:通过数组过滤的方法,对原数据进行过滤
						const new_lists = this.lists.filter(function(value,index){
							return value.id !=id
						})
						this.lists = new_lists

						// // 方式二、先把数据的索引值找出来,根据索引值,删除原数组中的数据
						// const index_ = this.lists.findIndex(function(item) {
						// 	return item.id === id
						// })
						// // console.log('索引值为',index_)
						// this.lists.splice(index_,1)


						// 数组中弹窗最后一条数据
						// this.lists.pop()
					}
				}
			})
		</script>


	</body>
</html>

demo2_事件的修饰符.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<div @click="work" style="width: 100px;height: 70px; background: cyan;">
				<button type="button" @click.stop="work2()">按钮1</button>
			</div>
			
			<a href="https://www.baidu.com" @click.prevent='work3()'>百度</a>
		</div>
		<script type="text/javascript">
			/*
			.stop:阻止冒泡(事件冒泡:点击子元素,事件会一级一级冒泡到父元素)
			.prevnet :阻止的默认行为事件行为
			
			
			*/ 
			
			
			var vue = new Vue({
				el: '#app',
				data: {

				},
				methods: {
					work: function() {
						console.log('调用了work方法')
					},
					work2: function() {
						console.log('---work2----')
					},
					work3: function() {
						console.log('---work3----')
					}
				}
			})
		</script>
	</body>
</html>

demo3_按键修饰符.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

	</head>
	<body>
		<div id="app">
			<form action="">
				账号:<input type="text" v-model="loginForm.user"> <br>
				密码:<input type="password" v-model="loginForm.pwd" @keyup.enter="login_btn()" 
				@keyup.delete="delete_data()" ><br>
				<button type="button" @click="login_btn()">点击登录</button>
			</form>
		</div>
		<script type="text/javascript">
			/*
			键盘事件:keyUp
			按键修饰符:通过按键修饰符,可以实现按下键盘指定的键,来触发事件。
				enter:回车键,
				delete:删除键
			
			*/ 
			var vue = new Vue({
				el: '#app',
				data: {
					
					loginForm:{
						user:'',
						pwd:''
					}
					
				},
				methods:{
					login_btn(){
						console.log('用户登录的数据为:',this.loginForm)
					},
					delete_data(){
						this.loginForm.pwd=''
					}
				}
			})
		</script>


	</body>
</html>

demo4_计算属性和侦听器.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

	</head>
	<body>


		<div id="app">
			<div>
				<h3>订单</h3>
				<h5>商品名:{{name}}</h5>
				<h5>单价:{{price}}</h5>
				<p>库存:{{stock}}</p>
				<h5>数量:
					<button type="button" @click="sub">-</button>
					<span>{{num}}</span>
					<button type="button" @click="add">+</button>
				</h5>
				<hr>
				<h5>总价{{priceSum}}</h5>
				<hr>
				<hr>
				<form action="">
					账号:<input type="text" v-model="loginForm.user"> <br>
					密码:<input type="password" v-model="loginForm.pwd" @keyup.enter="login_btn()"
						@keyup.delete="delete_data()"><br>
					<button type="button" @click="login_btn()">点击登录</button>
				</form>


			</div>
		</div>


		<script>
			var vm = new Vue({
				// 指定挂载的根节点
				el: '#app',
				// 定义vue实例中的数据(属性)
				data: {
					name: '小柠檬',
					num: 10,
					price: 99,
					stock: 10,
					loginForm: {
						user: '',
						pwd: ''
					}
				},
				// 定义vue实例中的方法
				methods: {
					// 下面这个定义方法的形式,实际上就是省略了:function
					add() {
						this.num += 1
					},
					sub: function() {
						this.num -= 1
					},
					// 上面两种方法定义的形式没有任何区别
				},
				// 定义计算属性
				computed: {
					priceSum: function() {
						return this.num * this.price
					}
				},
				// 定义侦听器:可以用例侦听属性的值是否发生变化
				watch: {
					// 1、侦听的数据直接定义在data中
					num: function(value, oldVlue) {
						// console.log(value,oldVlue)
						if (value < 0) {
							// alert('数量不能少于0')
							this.num = 0
						} else if (value > this.stock) {
							this.num = this.stock
						}
					},

					//2、侦听的数据直接定义在data中,外面有多层嵌套
					// 2.1、通过层级指定侦听的数据
					// 'loginForm.user':function(value,oldVlue){
					// 	console.log(value,oldVlue)
					// }
					// 2.3、直接侦听外层数据,多层嵌套不过层级有多深都能侦听到
					loginForm:{
						deep:true,
						handler:function(value,oldVlue){
							console.log(value,oldVlue)
						}
					}

				}

			})
		</script>

	</body>
</html>

demo5_过滤器.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

	</head>
	<body>


		<div id="app">
			<div>
				<h3>订单</h3>
				<h5>商品名:{{name}}</h5>
				<h5>单价:{{price | dubboFloat}}</h5>
				<p>库存:{{stock | musen}}</p>
				<h5>数量:
					<button type="button" @click="sub">-</button>
					<span>{{num}}</span>
					<button type="button" @click="add">+</button>
				</h5>
				<hr>
				<h5>总价{{priceSum | dubboFloat}}</h5>
				<hr>
				<hr>
				<form action="">
					账号:<input type="text" v-model="loginForm.user"> <br>
					密码:<input type="password" v-model="loginForm.pwd" @keyup.enter="login_btn()"
						@keyup.delete="delete_data()"><br>
					<button type="button" @click="login_btn()">点击登录</button>
				</form>


			</div>
		</div>


		<script>
			var vm = new Vue({
				// 指定挂载的根节点
				el: '#app',
				// 定义vue实例中的数据(属性)
				data: {
					name: '小柠檬',
					num: 10,
					price: 99,
					stock: 10,
					loginForm: {
						user: '',
						pwd: ''
					}
				},
				// 定义vue实例中的方法
				methods: {
					// 下面这个定义方法的形式,实际上就是省略了:function
					add() {
						this.num += 1
					},
					sub: function() {
						this.num -= 1
					},
					// 上面两种方法定义的形式没有任何区别
				},
				// 定义计算属性
				computed: {
					priceSum: function() {
						return this.num * this.price
					}
				},
				// 定义侦听器:可以用例侦听属性的值是否发生变化
				watch: {
					// 1、侦听的数据直接定义在data中
					num: function(value, oldVlue) {
						// console.log(value,oldVlue)
						if (value < 0) {
							// alert('数量不能少于0')
							this.num = 0
						} else if (value > this.stock) {
							this.num = this.stock
						}
					},

					//2、侦听的数据直接定义在data中,外面有多层嵌套
					// 2.1、通过层级指定侦听的数据
					'loginForm.user': function(value, oldVlue) {
						console.log(value, oldVlue)
					},
					// 2.3、直接侦听外层数据,多层嵌套不过层级有多深都能侦听到
					loginForm: {
						deep: true,
						handler: function(value, oldVlue) {
							console.log(value, oldVlue)
						}
					}

				},
				// 定义过滤器
				filters: {
					dubboFloat: function(value) {
						// 将数据保留两位小数
						return value.toFixed(2)
					},
					
					musen:function(value){
						console.log(value)
						return value
					}
				},



			})
		</script>

	</body>
</html>

work04.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

	</head>
	<body>
		<div id="app">
			<table border="" cellspacing="" cellpadding="">
				<tr>
					<th>ID</th>
					<th>接口名</th>
					<th>测试人员</th>
					<th>项目名</th>
					<th>项目ID</th>
					<th>描述信息</th>
					<th>创建时间</th>
					<th>用例数</th>
				</tr>
				<tr :key='item.id' v-for="item in lists">
					<td>{{item.id}}</td>
					<td>{{item.name}}</td>
					<td>{{item.tester}}</td>
					<td>{{item.project}}</td>
					<td>{{item.project_id}}</td>
					<td>{{item.desc}}</td>
					<td>{{item.create_time}}</td>
					<td>{{item.testcases}}</td>
				</tr>
			</table>
			<hr>
			<form action="">
				账号:<input type="text" v-model="loginForm.user"> <br>
				密码:<input type="password" v-model="loginForm.pwd"><br>
				<button type="button" @click="login_btn()">点击登录</button>
			</form>
		
		</div>
		<script type="text/javascript">
			var vue = new Vue({
				el: '#app',
				data: {
					lists: [{
							"id": 1,
							"name": "登录接口_自动化测试平台项目",
							"tester": "可优",
							"project": "自动化测试平台项目",
							"project_id": 1,
							"desc": "登录接口",
							"create_time": "2019-11-06 14:50:30",
							"testcases": 9,
						},
						{
							"id": 2,
							"name": "注册接口_自动化测试平台项目",
							"tester": "可可",
							"project": "自动化测试平台项目",
							"project_id": 1,
							"desc": "自动化测试平台项目, 注册接口",
							"create_time": "2019-11-06 14:51:00",
							"testcases": 0,
						},
						{
							"id": 3,
							"name": "创建项目接口_自动化测试平台项目",
							"tester": "可优",
							"project": "自动化测试平台项目",
							"project_id": 1,
							"desc": "这是自动化测试平台创建项目接口",
							"create_time": "2019-11-06 14:51:45",
							"testcases": 1,
						},
						{
							"id": 4,
							"name": "注册接口_前程贷P2P金融项目",
							"tester": "小可可",
							"project": "前程贷P2P金融项目",
							"project_id": 2,
							"desc": "",
							"create_time": "2019-11-06 14:52:22",
							"testcases": 0,
						},
						{
							"id": 5,
							"name": "登录接口_前程贷P2P金融项目",
							"tester": "柠檬小姐姐",
							"project": "前程贷P2P金融项目",
							"project_id": 2,
							"desc": "",
							"create_time": "2019-11-06 14:52:40",
							"testcases": 0,
						},
						{
							"id": 6,
							"name": "查看项目列表接口_前程贷P2P金融项目",
							"tester": "柠檬小姐姐",
							"project": "前程贷P2P金融项目",
							"project_id": 2,
							"desc": "",
							"create_time": "2019-11-06 17:22:50",
							"testcases": 1,
						}
					],
					loginForm:{
						user:'',
						pwd:''
					}
					
				},
				methods:{
					login_btn(){
						console.log('用户登录的数据为:',this.loginForm)
					}
				}
			})
		</script>


	</body>
</html>

20210628_组件化开发
demo1_vue生命周期的钩子函数.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<input type="text" v-model="message">
		</div>


		<script type="text/javascript">
			var vm = new Vue({
				// 挂载的根节点
				el: '#app',
				// 数据
				data: {
					message:'9999'
				},


				beforeCreate: function() {
					console.group('------beforeCreate--vue创建前状态------');
					console.log("%c%s", "color:red", "el     : " + this.$el); //undefined
					console.log("%c%s", "color:red", "data   : " + this.$data); //undefined 
					console.log("%c%s", "color:red", "message: " + this.message)
				},
				created: function() {
					console.group('------created--vue创建完毕状态------');
					console.log("%c%s", "color:red", "el     : " + this.$el); //undefined
					console.log("%c%s", "color:red", "data   : " + this.$data); //已被初始化 
					console.log("%c%s", "color:red", "message: " + this.message); //已被初始化
				},
				beforeMount: function() {
					console.group('------beforeMount,data数据挂载前状态------');
					console.log("%c%s", "color:red", "el     : " + (this.$el)); //已被初始化
					console.log(this.$el.innerHTML);
					console.log("%c%s", "color:red", "data   : " + this.$data); //已被初始化  
					console.log("%c%s", "color:red", "message: " + this.message); //已被初始化  
				},
				mounted: function() {
					console.group('------mounted data数据挂载结束状态------');
					console.log("%c%s", "color:red", "el     : " + this.$el); //已被初始化
					console.log(this.$el.innerHTML);
					console.log("%c%s", "color:red", "data   : " + this.$data); //已被初始化
					console.log("%c%s", "color:red", "message: " + this.message); //已被初始化 
				},
				beforeUpdate: function() {
					console.group('beforeUpdate  data数据更新前状态==============');
					console.log("%c%s", "color:red", "el     : " + this.$el);
					console.log(this.$el.innerHTML);
					console.log("%c%s", "color:red", "data   : " + this.$data);
					console.log("%c%s", "color:red", "message: " + this.message);
				},
				updated: function() {
					console.group('updated  data数据更新完成状态==============');
					console.log("%c%s", "color:red", "el     : " + this.$el);
					console.log(this.$el.innerHTML);
					console.log("%c%s", "color:red", "data   : " + this.$data);
					console.log("%c%s", "color:red", "message: " + this.message);
				},
				beforeDestroy: function() {
					console.group('beforeDestroy  vue对象销毁前状态==============');
					console.log("%c%s", "color:red", "el     : " + this.$el);
					console.log(this.$el.innerHTML);
					console.log("%c%s", "color:red", "data   : " + this.$data);
					console.log("%c%s", "color:red", "message: " + this.message);
				},
				destroyed: function() {
					console.group('destroyed  vue对象销毁完成状态==============');
					console.log("%c%s", "color:red", "el     : " + this.$el);
					console.log(this.$el.innerHTML);
					console.log("%c%s", "color:red", "data   : " + this.$data);
					console.log("%c%s", "color:red", "message: " + this.message)
				}

			})
		</script>



	</body>
</html>

demo2_vue组件的定义.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

	</head>
	<body>
		<div id="app">
			<h1>{{title}}</h1>
			<!-- <cop1></cop1> -->
			<!-- <el-musen></el-musen> -->
			<el-box></el-box>
			<hello-world></hello-world>
			

		</div>


		<script type="text/javascript">
			/*
			1、全局组件
				定义:
					Vue.component('组件名', {})
				
				注意点:全局组件可以在其他的组件中直接使用
			
			2、局部组件:
				定义:在其他的组件(vue实例)中定义的子组件叫做局部组件,局部组件只能在他定义的那个父组件中使用
			
			
			3、关于组件的命名:如果组件名称由多个单词组成,推荐使用xx-xxx这种风格
				注意点:组件名如果时大驼峰这种命名风格,在全局的根节点中无法直接使用
			、
			
			
			*/

			// 定义一个全局组件
			Vue.component('cop1', {
				template: '<div>cop1组件中的内容</div>'
			})

			Vue.component('el-musen', {
				template: '<div>el-musen组件中的内容</div>'
			})
			// 全局组件可以在其他的组件中直接使用
			Vue.component('el-box', {
				template: `<div>
				<el-musen></el-musen>
				<el-musen></el-musen>
				<el-mm></el-mm>	
				<HelloWorld></HelloWorld>
				<hr>
				</div>`,
				components: {
					'el-mm': {
						template: `<h2>el-mm</h2>`
					}
				},
			})
			Vue.component('HelloWorld', {
				template: '<div>HelloWorld组件中的内容</div>'
			})
			
			
			


			// 创建一个vue实例
			var vm = new Vue({
				el: '#app',
				data: {
					title: "一、组件化开发"
				},
				// 定义局部组件
				components: {
					'el-musen02': {
						template: `<h2>局部组件木森002</h2>`
					}
				}
			})
		</script>



	</body>
</html>

demo3_组件中的数据和方法定义.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

	</head>
	<body>
		<div id="app">
			<el-musen></el-musen>
		</div>


		<script type="text/javascript">
			/*
			注意点:组件的模板最外层必须时一个根节点(最外层只能由一个标签)
			
			
			*/
			// 在组件中定义数据
			Vue.component('el-musen', {
				// 组件中的模板
				template: `
				<div>
				<h1>名字:{{name}},年龄:{{age}}</h1>
				<button @click="handle(name)">按钮</button>
				</div>
				`,
				//组件中的数据 注意点:组件中的data要定义为函数
				data: function() {
					return {
						name: 'el-musen',
						age: 999
					}
				},
				// 组件中的方法
				methods: {
					handle: function(val) {
						console.log('参数值为:', val)
					}
				},
				//组件中的计算属性
				computed: {

				},
				// 组件中的侦听器
				watch: {

				},
				// 组件中的过滤器
				filters: {

				},
				// 组件中的子组件
				components: {

				}



			})


			var vm = new Vue({
				el: '#app',
				data: {
					name: 'musen',
					age: 18
				},

			})
		</script>


	</body>
</html>

demo4_父组件往子组件中传递数据.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

	</head>
	<body>
		<div id="app">
			<el-table :musen='case1' title='表格1'></el-table>
			<hr>
			<el-table :musen='case2' title='表格2222'></el-table>
			<hr>
			<el-table :musen='case3' title='表格3333'></el-table>
		</div>

		<script type="text/javascript">
			/*
			父组件往子组件中传递数据:
				1、在子组件中通过props属性来定义接收数据的属性名(参数)
				2、父组件在使用子组件时,使用子组件中定义的属性来传递数据
			
			*/
			var vm = new Vue({
				el: '#app',
				data: {
					case1: [{
							"id": 1,
							"name": "登录接口_自动化测试平台项目",
							"tester": "可优",
							"project": "自动化测试平台项目",
							"project_id": 1,
							"desc": "登录接口",
							"create_time": "2019-11-06 14:50:30",
							"testcases": 9,
						},
						{
							"id": 2,
							"name": "注册接口_自动化测试平台项目",
							"tester": "可可",
							"project": "自动化测试平台项目",
							"project_id": 1,
							"desc": "自动化测试平台项目, 注册接口",
							"create_time": "2019-11-06 14:51:00",
							"testcases": 0,
						}
					],
					case2: [{
							"id": 3,
							"name": "创建项目接口_自动化测试平台项目",
							"tester": "可优",
							"project": "自动化测试平台项目",
							"project_id": 1,
							"desc": "这是自动化测试平台创建项目接口",
							"create_time": "2019-11-06 14:51:45",
							"testcases": 1,
						},
						{
							"id": 4,
							"name": "注册接口_前程贷P2P金融项目",
							"tester": "小可可",
							"project": "前程贷P2P金融项目",
							"project_id": 2,
							"desc": "",
							"create_time": "2019-11-06 14:52:22",
							"testcases": 0,
						}
					],
					case3: [{
							"id": 5,
							"name": "登录接口_前程贷P2P金融项目",
							"tester": "柠檬小姐姐",
							"project": "前程贷P2P金融项目",
							"project_id": 2,
							"desc": "",
							"create_time": "2019-11-06 14:52:40",
							"testcases": 0,
						},
						{
							"id": 6,
							"name": "查看项目列表接口_前程贷P2P金融项目",
							"tester": "柠檬小姐姐",
							"project": "前程贷P2P金融项目",
							"project_id": 2,
							"desc": "",
							"create_time": "2019-11-06 17:22:50",
							"testcases": 1,
						}
					]

				},
				components: {
					'el-table': {
						template: `<div>
						<h1>{{title}}</h1>
						<table border="" cellspacing="" cellpadding="">
									<tr>
										<th>ID</th>
										<th>接口名</th>
										<th>测试人员</th>
										<th>项目名</th>
										<th>项目ID</th>
										<th>描述信息</th>
										<th>创建时间</th>
										<th>用例数</th>
									</tr>
									<tr :key='item.id' v-for="item in musen">
										<td>{{item.id}}</td>
										<td>{{item.name}}</td>
										<td>{{item.tester}}</td>
										<td>{{item.project}}</td>
										<td>{{item.project_id}}</td>
										<td>{{item.desc}}</td>
										<td>{{item.create_time}}</td>
										<td>{{item.testcases}}</td>
									</tr>
								</table>
						</div>`,
						data() {
							return {}
						},
						props: ['musen', 'title']
					}
				}
			})
		</script>


	</body>
</html>

demo5_子组件中往父组件中传递数据.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

	</head>
	<body>
		<div id="app">
			<el-table :musen='case1' title='表格1' @run='handle($event)'></el-table>
			<hr>
			<el-table :musen='case2' title='表格2222' @run='handle($event)'></el-table>
			<hr>
			<el-table :musen='case3' title='表格3333' @run='handle($event)'></el-table>
			
			<h2>运行的数据:{{case_}}</h2>
		</div>

		<script type="text/javascript">
			/*
			子组件往父组件中传递数据:
				1、子组件中通过$emit 触发自定义的事件,并分别传入对应的参数。
				2、监听子组件中自定义的事件,当触发事件时,子组件中传递过来的数据,父组件可以通过$event来接收。
			
			*/
			var vm = new Vue({
				el: '#app',
				data: {
					case1: [{
							"id": 1,
							"name": "登录接口_自动化测试平台项目",
							"tester": "可优",
							"project": "自动化测试平台项目",
							"project_id": 1,
							"desc": "登录接口",
							"create_time": "2019-11-06 14:50:30",
							"testcases": 9,
						},
						{
							"id": 2,
							"name": "注册接口_自动化测试平台项目",
							"tester": "可可",
							"project": "自动化测试平台项目",
							"project_id": 1,
							"desc": "自动化测试平台项目, 注册接口",
							"create_time": "2019-11-06 14:51:00",
							"testcases": 0,
						}
					],
					case2: [{
							"id": 3,
							"name": "创建项目接口_自动化测试平台项目",
							"tester": "可优",
							"project": "自动化测试平台项目",
							"project_id": 1,
							"desc": "这是自动化测试平台创建项目接口",
							"create_time": "2019-11-06 14:51:45",
							"testcases": 1,
						},
						{
							"id": 4,
							"name": "注册接口_前程贷P2P金融项目",
							"tester": "小可可",
							"project": "前程贷P2P金融项目",
							"project_id": 2,
							"desc": "",
							"create_time": "2019-11-06 14:52:22",
							"testcases": 0,
						}
					],
					case3: [{
							"id": 5,
							"name": "登录接口_前程贷P2P金融项目",
							"tester": "柠檬小姐姐",
							"project": "前程贷P2P金融项目",
							"project_id": 2,
							"desc": "",
							"create_time": "2019-11-06 14:52:40",
							"testcases": 0,
						},
						{
							"id": 6,
							"name": "查看项目列表接口_前程贷P2P金融项目",
							"tester": "柠檬小姐姐",
							"project": "前程贷P2P金融项目",
							"project_id": 2,
							"desc": "",
							"create_time": "2019-11-06 17:22:50",
							"testcases": 1,
						}
					],
					case_:''

				},
				methods:{
					handle:function(val){
						console.log(val)
						this.case_ = val
					}
				},
				components: {
					'el-table': {
						template: `<div>
						<h1>{{title}}</h1>
						<table border="" cellspacing="" cellpadding="">
									<tr>
										<th>ID</th>
										<th>接口名</th>
										<th>测试人员</th>
										<th>项目名</th>
										<th>项目ID</th>
										<th>描述信息</th>
										<th>创建时间</th>
										<th>用例数</th>
										<th>操作</th>
									</tr>
									<tr :key='item.id' v-for="item in musen">
										<td>{{item.id}}</td>
										<td>{{item.name}}</td>
										<td>{{item.tester}}</td>
										<td>{{item.project}}</td>
										<td>{{item.project_id}}</td>
										<td>{{item.desc}}</td>
										<td>{{item.create_time}}</td>
										<td>{{item.testcases}}</td>
										// 子组件中主动触发一个自定义的事件
										<td><button @click="$emit('run',item)">运行</button></td>
									</tr>
								</table>
						</div>`,
						data() {
							return {}
						},
						props: ['musen', 'title']
					}
				}
			})
			
			
			
			
			
		</script>


	</body>
</html>

demo6_插槽的使用.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
		<el-header>
			<!-- 往插槽中填充的内容 -->
			<h1>python测试开发</h1>
			<a href="http://www.baidu.com">baidu</a>
		</el-header>


		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el: '#app',
				data: {},
				components: {
					'el-header': {
						template: `
						<div>
							<slot></slot>
							<h2>这个是内容信息</h2>
						</div>
						`
					}
				}



			})
		</script>


	</body>
</html>

demo7_具名插槽的使用.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<el-header>
				<!-- 往插槽中填充的内容 -->
				<h1 slot="header">python测试开发</h1>
				<div slot="header">
					<a  href="http://www.baidu.com">baidu</a>
					<p>67890-=567890-567890-</p>
				</div>
				<h1 slot='footer'>---------------底部---------------------</h1>
			</el-header>


		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el: '#app',
				data: {},
				components: {
					'el-header': {
						template: `
						<div>
							<hr>
							<slot name='header'></slot>
							<slot name='main'></slot>
							<slot name='footer'></slot>
							<hr>
						</div>
						`
					}
				}



			})
		</script>


	</body>
</html>

21210630_前后端数据交互
demo1_elementUI的组件使用.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>elementUI组件库的使用</title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		<style type="text/css">
			.el-header{
				padding: 0;
			}
		</style>
		
		
	</head>
	<body>
		<div id="app">
			<el-container>
			  <el-header>
				  <el-menu
				    :default-active="activeIndex2"
				    class="el-menu-demo"
				    mode="horizontal"
				    @select="handleSelect"
				    background-color="#545c64"
				    text-color="#fff"
				    active-text-color="#ffd04b">
				    <el-menu-item index="1">处理中心</el-menu-item>
				    <el-submenu index="2">
				      <template slot="title">我的工作台</template>
				      <el-menu-item index="2-1">选项1</el-menu-item>
				      <el-menu-item index="2-2">选项2</el-menu-item>
				      <el-menu-item index="2-3">选项3</el-menu-item>
				      <el-submenu index="2-4">
				        <template slot="title">选项4</template>
				        <el-menu-item index="2-4-1">选项1</el-menu-item>
				        <el-menu-item index="2-4-2">选项2</el-menu-item>
				        <el-menu-item index="2-4-3">选项3</el-menu-item>
				      </el-submenu>
				    </el-submenu>
				    <el-menu-item index="3" disabled>消息中心</el-menu-item>
				    <el-menu-item index="4"><a href="https://www.ele.me" target="_blank">订单管理</a></el-menu-item>
				  </el-menu>
				  
				  
			  </el-header>
			  <el-container>
			    <el-aside width="200px">
					<el-menu
					      default-active="2"
					      class="el-menu-vertical-demo"
					      @open="handleOpen"
					      @close="handleClose"
					      background-color="#545c64"
					      text-color="#fff"
					      active-text-color="#ffd04b">
					      <el-submenu index="1">
					        <template slot="title">
					          <i class="el-icon-location"></i>
					          <span>导航一</span>
					        </template>
					        <el-menu-item-group>
					          <template slot="title">分组一</template>
					          <el-menu-item index="1-1">选项1</el-menu-item>
					          <el-menu-item index="1-2">选项2</el-menu-item>
					        </el-menu-item-group>
					        <el-menu-item-group title="分组2">
					          <el-menu-item index="1-3">选项3</el-menu-item>
					        </el-menu-item-group>
					        <el-submenu index="1-4">
					          <template slot="title">选项4</template>
					          <el-menu-item index="1-4-1">选项1</el-menu-item>
					        </el-submenu>
					      </el-submenu>
					      <el-menu-item index="2">
					        <i class="el-icon-menu"></i>
					        <span slot="title">导航二</span>
					      </el-menu-item>
					      <el-menu-item index="3" disabled>
					        <i class="el-icon-document"></i>
					        <span slot="title">导航三</span>
					      </el-menu-item>
					      <el-menu-item index="4">
					        <i class="el-icon-setting"></i>
					        <span slot="title">导航四</span>
					      </el-menu-item>
					    </el-menu>
					
					
					
				</el-aside>
			    <el-container>
			      <el-main>Main</el-main>
			      <el-footer>Footer</el-footer>
			    </el-container>
			  </el-container>
			</el-container>
			
			
		</div>
		
		<script type="text/javascript">
			var vm =new Vue({
				el:'#app',
				data:{
					
				}
			})
			
			
		</script>
		
		
		
		
	</body>
</html>

demo2_前后端数据交互axios.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入前端的请求库axios -->
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

	</head>
	<body>

		<script type="text/javascript">
		/*
		接口地址:http://127.0.0.1:5000/api/projects
		请求方法:get
		参数:无
		返回所有的项目
		*/ 
	   // const res = axios.get('http://127.0.0.1:5000/api/projects')
	   // // axios 发送的是异步请求,返回的是一个异步的对象
	   // res.then(function(response){
		  //  console.log(response)
	   // })
	   
	   // 以上代码简写
	   // axios.get('http://127.0.0.1:5000/api/projects').then(function(response){
	   // 		   // 请求成功(http状态码是2系列的),会执行这个回调函数
	   // 		   console.log(response)
	   // 		   // 获取http响应状态码
	   // 		   console.log(response.status)
	   // 		   // 获取http响应体
	   // 		   console.log(response.data)
	   // })
	   
	   axios.get('http://127.0.0.1:5000/api/projects1').then(function(response){
		   // 请求成功(http状态码是2系列的),会执行这个回调函数
		   console.log(response)
		   // 获取http响应状态码
		   console.log(response.status)
		   // 获取http响应体
		   console.log(response.data)
	   }).catch(function(error){
		   // 请求失败(http状态码是3,4,5系列的),会执行这个回调函数
		   // console.log(error)
		   // 获取响应对象
		   const response = error.response
		   // 获取http响应状态码
		   console.log(response.status)
		   // 获取http响应体
		   console.log(response.data)
	   })

		</script>



	</body>
</html>

demo3_axios自定义请求失败状态码的范围.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入前端的请求库axios -->
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

	</head>
	<body>

		<script type="text/javascript">
			/*
		接口地址:http://127.0.0.1:5000/api/projects
		请求方法:get
		参数:无
		返回所有的项目
		*/
			// axios.get('http://127.0.0.1:5000/api/projects1', {
			// 	validateStatus: function(status) {
			// 		return status < 500
			// 	}
			// }).then(function(response) {
			// 	// 请求成功(http状态码是2系列的),会执行这个回调函数
			// 	console.log('请求成功')
			// 	// 获取http响应状态码
			// 	console.log(response.status)
			// 	// 获取http响应体
			// 	console.log(response.data)
			// }).catch(function(error) {
			// 	// 请求失败(http状态码是3,4,5系列的),会执行这个回调函数
			// 	// console.log(error)
			// 	console.log('失败')
			// 	// 获取响应对象
			// 	const response = error.response
			// 	// 获取http响应状态码
			// 	console.log(response.status)
			// 	// 获取http响应体
			// 	console.log(response.data)
			// })
			
			// 所有的请求结果都使用一个方法来处理
			axios.get('http://127.0.0.1:5000/api/projects1', {
				validateStatus: function(status) {
					return true
				},
			}).then(function(response) {
				// 请求成功(http状态码是2系列的),会执行这个回调函数
				console.log('请求成功')
				// 获取http响应状态码
				console.log(response.status)
				// 获取http响应体
				console.log(response.data)
			})	
		</script>



	</body>
</html>

demo4_axios实例化请求对象.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入前端的请求库axios -->
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

	</head>
	<body>

		<script type="text/javascript">
			/*
			接口地址:http://127.0.0.1:5000/api/projects
			请求方法:get
			参数:无
			返回所有的项目
			*/

			// 创建请求对象
			const http = axios.create({
				// 设置基本的url地址
				baseURL: 'http://127.0.0.1:5000',
				timeout: 1000,
				// 指定http状态码错误范围
				validateStatus: function(status) {
					return true
				}
			});
			// const http2 = axios.create({
			// 	// 设置基本的url地址
			// 	baseURL: 'http://127.0.0.1:8000',
			// 	timeout: 1000,
			// 	// 指定http状态码错误范围
			// 	validateStatus: function(status) {
			// 		return true
			// 	}
			// });

			// 所有的请求结果都使用一个方法来处理
			http.get('/api/projects').then(function(response) {
				// 请求成功(http状态码是2系列的),会执行这个回调函数
				console.log('请求成功')
				// 获取http响应状态码
				console.log(response.status)
				// 获取http响应体
				console.log(response.data)
			})
			
		</script>



	</body>
</html>

demo5_axios发生get请求的参数传递.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入前端的请求库axios -->
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

	</head>
	<body>

		<script type="text/javascript">
			/*
			接口地址:http://127.0.0.1:5000/api/interface
			请求方法:get
			参数: id(项目的id)
			参数类型:查询字符串
			返回:该项目的所有接口
			*/
			// 创建请求对象
			const http = axios.create({
				// 设置基本的url地址
				baseURL: 'http://127.0.0.1:5000',
				timeout: 1000,
				// 指定http状态码错误范围
				validateStatus: function(status) {
					return true
				}
			})
			// get请求的参数传递(查询字符串参数)
			// 方式一:在url地址后面使用?key=value
			// http.get('/api/interface?id=1001').then(function(response){
			// 	console.log(response.data)
			// })
			// 方式二: 在请求配置对象中数据params传递
			// http.get('/api/interface', {
			// 	params: {
			// 		id: 1003
			// 	}
			// }).then(function(response) {
			// 	console.log(response.data)
			// })

			// 使用request方法发生请求
			// http.request({
			// 	method: 'get',
			// 	url: '/api/interface',
			// 	params: {
			// 		id: 1003
			// 	},
			// 	data: {
			// 		'aa': 11,
			// 		'bb': 11
			// 	}
			// }).then(function(response) {
			// 	console.log(response.data)
			// })
		</script>



	</body>
</html>

demo6_post请求参数传递.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!-- 引入前端的请求库axios -->
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

	</head>
	<body>

		<script type="text/javascript">
			/*
			接口地址:http://127.0.0.1:5000/api/user/login
			请求方法:post
			参数: {user:账号,pwd:密码}
			参数类型:表单 、json都支持
			返回:登录之后的结果
			*/
			// 创建请求对象
			const http = axios.create({
				// 设置基本的url地址
				baseURL: 'http://127.0.0.1:5000',
				timeout: 1000,
				// 指定http状态码错误范围
				validateStatus: function(status) {
					return true
				}
			})
			// 一、发送post请求:传递json参数
			http.post('/api/user/login', {
				user: 'python01',
				pwd: "lemonban11"
			}).then(function(response) {
				console.log(response.data)
			})
			
			// 二、传递表单格式的参数
			// const data = {
			// 	user: 'python01',
			// 	pwd: "lemonban11"
			// }
			// 构造表单参数对象
			// const params = new URLSearchParams()
			// params.append('user', 'python01')
			// params.append('pwd', 'lemonban')
			// http.post('/api/user/login', params).then(function(response) {
			// 	console.log(response.data)
			// })
			
			
			
		</script>



	</body>
</html>

demo7_axios结合async和await的使用.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
	</head>
	<body>

		<script type="text/javascript">
			/*
			接口地址:http://127.0.0.1:5000/api/user/login
			请求方法:post
			参数: {user:账号,pwd:密码}
			参数类型:表单 、json都支持
			返回:登录之后的结果
			*/
			const http = axios.create({
				// 设置基本的url地址
				baseURL: 'http://127.0.0.1:5000',
				timeout: 1000,
				// 指定http状态码错误范围
				validateStatus: function(status) {
					return true
				}
			})

			// 添加请求拦截器
			http.interceptors.request.use(function(config) {
				// 在发送请求之前做些什么
				console.log('请求拦截器调用了----')
				// 获取sessionStorage中的token值,添加到请求信息中
				token = window.sessionStorage.getItem('token')
				if (token) {
					config.headers.MyToken = token
				}
				return config;
			});
			
		
			// // async和await结合axios使用
			// async function login() {
			// 	const response = await http.post('/api/user/login', {
			// 		user: 'python01',
			// 		pwd: "lemonban"
			// 	})
			// 	if (response.data.code === '1') {
			// 		console.log('登录成功')
			// 		const token = response.data.token
			// 		console.log(token)
			// 		// 将token存储到sessionStorage
			// 		window.sessionStorage.setItem('token', token)
			// 	} else {
			// 		console.log('登录失败')
			// 	}
			// 	// console.log(response.data)
			// 	// console.log(response.status)
			// }

			// async function getInter() {
			// 	const response = await http.get('/api/interface?id=1001')
			// 	console.log(response)
			// }


			// login()
			// getInter()
			
			// ---------------------添加响应拦截器----------------------
			http.interceptors.response.use(function (response) {
			    // 对响应数据做过滤处理
			    return response.data;
			  });
			
			async function getInter2() {
				const response = await http.get('/api/interface?id=1001')
				console.log(response)
			}
			
			getInter2()
		</script>



	</body>
</html>

demo8_请求拦截器和响应拦截器.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
	</head>
	<body>

		<script type="text/javascript">
			/*
			接口地址:http://127.0.0.1:5000/api/user/login
			请求方法:post
			参数: {user:账号,pwd:密码}
			参数类型:表单 、json都支持
			返回:登录之后的结果
			*/
			const http = axios.create({
				// 设置基本的url地址
				baseURL: 'http://127.0.0.1:5000',
				timeout: 1000,
				// 指定http状态码错误范围
				validateStatus: function(status) {
					return true
				}
			})

			// 添加请求拦截器
			http.interceptors.request.use(function(config) {
				// 在发送请求之前做些什么
				console.log('请求拦截器调用了----')
				// 获取sessionStorage中的token值,添加到请求信息中
				token = window.sessionStorage.getItem('token')
				if (token) {
					config.headers.MyToken = token
				}
				return config;
			});
			
		
			// // async和await结合axios使用
			// async function login() {
			// 	const response = await http.post('/api/user/login', {
			// 		user: 'python01',
			// 		pwd: "lemonban"
			// 	})
			// 	if (response.data.code === '1') {
			// 		console.log('登录成功')
			// 		const token = response.data.token
			// 		console.log(token)
			// 		// 将token存储到sessionStorage
			// 		window.sessionStorage.setItem('token', token)
			// 	} else {
			// 		console.log('登录失败')
			// 	}
			// 	// console.log(response.data)
			// 	// console.log(response.status)
			// }

			// async function getInter() {
			// 	const response = await http.get('/api/interface?id=1001')
			// 	console.log(response)
			// }


			// login()
			// getInter()
			
			// ---------------------添加响应拦截器----------------------
			http.interceptors.response.use(function (response) {
			    // 对响应数据做过滤处理
			    return response.data;
			  });
			
			async function getInter2() {
				const response = await http.get('/api/interface?id=1001')
				console.log(response)
			}
			
			getInter2()
		</script>



	</body>
</html>

demo9_登录页面的小案例.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
		<style type="text/css">
			.login{
				width: 800px;
				height: 600px;
				margin: 200px auto;
				padding-top: 100px;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<div class="login">
				<el-card class="box-card">
				  <el-form :model="loginData" label-width="80px">
				  	<el-form-item label="账号">
				  		<el-input  v-model='loginData.user'></el-input>
				  	</el-form-item>
				  	<el-form-item label="密码">
				  		<el-input  v-model='loginData.pwd' type='password'></el-input>
				  	</el-form-item>
				  	<el-form-item>
				  		<el-button type="primary" @click='login'>点击登录</el-button>
				  	</el-form-item>
				  </el-form>
				</el-card>
			</div>

		</div>


		<script type="text/javascript">
			// 创建请求对象
			const http = axios.create({
				// 设置基本的url地址
				baseURL: 'http://127.0.0.1:5000',
				timeout: 1000,
				// 指定http状态码错误范围
				validateStatus: function(status) {
					return true
				}
			})

			// 创建一个vue实例
			var vm = new Vue({
				el: '#app',
				data: {
					// 登录的参数
					loginData: {
						user: '',
						pwd: ''
					}
				},
				methods: {
					// 登录的方法
					async login() {
						const reposne = await http.post('/api/user/login', this.loginData)
						if(reposne.data.code==='1'){
							alert('登录成功')
						}else{
							alert('登录失败')
						}
					}
				}


			})
		</script>


	</body>
</html>

work6.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.title {
				height: 80px;
				width: 100%;
				background: #c6c6c6;
				margin-bottom: 5px;
			}

			.content {
				height: 800px;
				width: 100%;
				background: #ffffff;
				overflow: hidden;

			}

			.left {
				width: 15%;
				height: 800px;
				background: #000;
				float: left;
			}

			.right {
				width: 84%;
				height: 800px;
				background: #C6C6C6;
				float: right;
			}
			ul,li{
				margin: 0;
				padding: 0;
				list-style-type: none;
			}
			li{
				height: 50px;
				font: normal 20px/50px "microsoft yahei";
				background: #00AAFF;
				border-bottom: solid 2px #fff ;
				text-align: center;
				color: #fff;
			}
			li:hover{
				color: chocolate;
			}
		</style>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		
	</head>
	<body>

		<div id="app">
			<!-- <el-layout>
				<div slot='header'>
					<div style="width: 100%;text-align: center; font: normal 32px/80px microsoft yahei;" >自动化测试平台</div>
				</div>
				<div slot='menu'>
					<ul>
						<li>菜单1</li>
						<li>菜单2</li>
						<li>菜单3</li>
						<li>菜单4</li>
						<li>菜单5</li>
					</ul>
				</div>
				<div slot='main'>
					<p>主体内容显示</p>
				</div>
			</el-header> -->
			<!-- <el-layout>
				<div slot='header'>自动化平台</div>
				<div slot='menu' style="color: #fff;">侧边菜单</div>
				<div slot='main'>主题部分的内容</div>
			</el-layout>	 -->
			<el-layout>
				<div slot='header'>
					<el-menu
					  :default-active="activeIndex2"
					  class="el-menu-demo"
					  mode="horizontal"
					  @select="handleSelect"
					  background-color="#545c64"
					  text-color="#fff"
					  active-text-color="#ffd04b">
					  <el-menu-item index="1">处理中心</el-menu-item>
					  <el-submenu index="2">
					    <template slot="title">我的工作台</template>
					    <el-menu-item index="2-1">选项1</el-menu-item>
					    <el-menu-item index="2-2">选项2</el-menu-item>
					    <el-menu-item index="2-3">选项3</el-menu-item>
					    <el-submenu index="2-4">
					      <template slot="title">选项4</template>
					      <el-menu-item index="2-4-1">选项1</el-menu-item>
					      <el-menu-item index="2-4-2">选项2</el-menu-item>
					      <el-menu-item index="2-4-3">选项3</el-menu-item>
					    </el-submenu>
					  </el-submenu>
					  <el-menu-item index="3" disabled>消息中心</el-menu-item>
					  <el-menu-item index="4"><a href="https://www.ele.me" target="_blank">订单管理</a></el-menu-item>
					</el-menu>
				</div>
				<div slot='menu' style="color: #fff;">
					<el-menu
					      default-active="2"
					      class="el-menu-vertical-demo"
					      @open="handleOpen"
					      @close="handleClose"
					      background-color="#545c64"
					      text-color="#fff"
					      active-text-color="#ffd04b">
					      <el-submenu index="1">
					        <template slot="title">
					          <i class="el-icon-location"></i>
					          <span>导航一</span>
					        </template>
					        <el-menu-item-group>
					          <template slot="title">分组一</template>
					          <el-menu-item index="1-1">选项1</el-menu-item>
					          <el-menu-item index="1-2">选项2</el-menu-item>
					        </el-menu-item-group>
					        <el-menu-item-group title="分组2">
					          <el-menu-item index="1-3">选项3</el-menu-item>
					        </el-menu-item-group>
					        <el-submenu index="1-4">
					          <template slot="title">选项4</template>
					          <el-menu-item index="1-4-1">选项1</el-menu-item>
					        </el-submenu>
					      </el-submenu>
					      <el-menu-item index="2">
					        <i class="el-icon-menu"></i>
					        <span slot="title">导航二</span>
					      </el-menu-item>
					      <el-menu-item index="3" disabled>
					        <i class="el-icon-document"></i>
					        <span slot="title">导航三</span>
					      </el-menu-item>
					      <el-menu-item index="4">
					        <i class="el-icon-setting"></i>
					        <span slot="title">导航四</span>
					      </el-menu-item>
					    </el-menu>
					
					
					
				</div>
				<div slot='main'>主题部分的内容</div>
			</el-layout>	
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el: '#app',
				data: {},
				components: {
					'el-layout': {
						template: `
						<div>
							<div class="title">
								<slot name='header'></slot>
							</div>
							<div class="content">
								<div class="left">
									<slot name='menu'></slot>
								</div>
								<div class="right">
									<slot name='main'></slot>
								</div>
							</div>
						</div>
						`
					}
				}
			})
		</script>
	</body>
</html>

http_server.py

"""
============================
author:MuSen
time:2019/6/21
E-mail:3247119728@qq.com
============================
"""

from flask import Flask, request, jsonify

from flask_cors import CORS

app = Flask(__name__)

#  测试数据
user_info = {"user": 'python01', 'pwd': 'lemonban'}

project_data = {"code": "1",
                "data": [{"title": "前程贷", "id": "1001"},
                         {"title": "智慧金融", "id": "1002"},
                         {"title": "生鲜到家", "id": "1003"},
                         {"title": "柠檬班app", "id": "1004"}],
                "msg": "四个项目",
                }
# 接口数据
interface_data = {
    "1001": {"code": "1",
             "data": [{"name": "前程贷登录1001"},
                      {"name": "前程贷注册1001"}],
             "msg": "2个接口", },

    "1002": {"code": "1",
             "data": [{"name": "智慧-登录1002"},
                      {"name": "智慧-注册1002"},
                      {"name": "智慧-贷款1004"}, ],
             "msg": "3个接口", },

    "1003": {"code": "1",
             "data": [{"name": "生鲜-登录1003"},
                      {"name": "生鲜-注册1003"},
                      {"name": "生鲜下单1003"}, ],
             "msg": "3个接口", },

    "1004": {"code": "1",
             "data": [{"name": "app登录1004"},
                      {"name": "app注册1004"},
                      {"name": "app报名1004"},
                      {"name": "app缴费1004"},
                      ],
             "msg": "4个接口", },
}


# 登录
@app.route('/api/user/login', methods=['post'])
def login():
    """
    接口地址:http://127.0.0.1:5000/api/user/login
    请求方法:post
    参数: {user:账号,pwd:密码}
    参数类型:表单 、json都支持
    返回:登录之后的结果
    """
    data = request.form or request.json
    # 判断账号,密码是否正确
    if user_info.get('user') == data.get('user') and user_info.get('pwd') == data.get('pwd'):
        return jsonify({'code': "1", "data": None, "msg": "成功",'token':"afguhijkrr567897uhijokctyu"})
    else:
        return jsonify({'code': "0", "data": None, "msg": "账号或密码有误"})


# 获取项目列表
@app.route('/api/projects', methods=['get'])
def pro_list():
    """
    接口地址:http://127.0.0.1:5000/api/projects
    请求方法:get
    参数:无
    返回所有的项目
    :return:
    """
    return jsonify(project_data)


# 获取接口列表
@app.route('/api/interface', methods=['get'])
def interface():
    """
    接口地址:http://127.0.0.1:5000/api/interface
    请求方法:get
    参数: id(项目的id)
    参数类型:查询字符串
    返回:该项目的所有接口
    """
    inter_id = request.args.get('id')

    if inter_id:
        res_data = interface_data.get(inter_id)
        if res_data:
            return jsonify(res_data)
        else:
            return jsonify({"code": "0", "data": None, "msg": "没有该项目"})
    else:
        return jsonify({"code": "0", "data": None, "msg": "参数id不能为空"})


if __name__ == '__main__':
    cors = CORS(app)
    app.run(debug=True)

20210702_前端路由
demo1_work7.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>第7天作业</title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
		<style type="text/css">
			.box1 {
				width: 600px;
				height: 400px;
				margin: 100px auto;
			}

			.project {
				width: 600px;
				height: 400px;
				float: left;
				text-align: center;
			}

			.inter {
				width: 600px;
				height: 400px;
				float: right;
				text-align: center;
			}
		</style>

	</head>
	<body>
		<div id="app">
			<!-- 登录框内容 -->
			<div class="box1">
				<el-card>
					<h2 style="color: deepskyblue;text-align: center;">用户登录</h2>
					<el-form :model="loginData" label-width="80px">
						<el-form-item label="账号">
							<el-input v-model='loginData.user'></el-input>
						</el-form-item>
						<el-form-item label="密码">
							<el-input v-model='loginData.pwd' type='password'></el-input>
						</el-form-item>
						<el-form-item>
							<el-button type="primary" @click='login'>点击登录</el-button>
						</el-form-item>
					</el-form>
				</el-card>
			</div>
			<!-- 表格的内容 -->
			<!-- <div class="box2">
				<div class="project">
					<table border="1px">
						<tr>
							<th>ID</th>
							<th>项目名</th>
							<th>操作</th>
						</tr>
						<tr v-for="pro in projects.data" :key='pro.id'>
							<td>{{pro.id}}</td>
							<td>{{pro.title}}</td>
							<td><button @click="getInter(pro.id)">获取数据</button></td>
						</tr>
					</table>
				</div>
				<div class="inter">
					<table border="1px">
						<tr>
							<th>接口名</th>
							<th>操作</th>
						</tr>
						<tr v-for="inter in interfaces.data" :key='inter.id'>
							<td>{{inter.name}}</td>
							<td><button @click="updateMsg(inter)>点击</button></td>
						</tr>
					</table>
					<h1>{{msg}}</h1>
				</div>
			</div> -->

			<div class="box2">
				<div class="project">
					<el-card>
						<el-table :data="projects.data" style="width: 100%">
							<el-table-column prop="id" label="ID" width="180">
							</el-table-column>
							<el-table-column prop="title" label="项目名" width="180">
							</el-table-column>
							<el-table-column label="操作">
								<template slot-scope="scope">
									<el-button size="mini" type="danger" @click="getInter(scope.row.id)">获取项目数据
									</el-button>
								</template>
							</el-table-column>
						</el-table>
					</el-card>
				</div>
				<div class="inter">
					<el-card>
						<el-table :data="interfaces.data" style="width: 100%">
							<el-table-column prop="name" label="接口名" width="180">
							</el-table-column>
							<el-table-column label="操作">
								<template slot-scope="scope">
									<el-button size="mini" type="danger" @click="updateMsg(scope.row)">点击
									</el-button>
								</template>
							</el-table-column>
						</el-table>
						</template>
						<h1>{{msg}}</h1>
					</el-card>
				</div>
			</div>


		</div>
		<script type="text/javascript">
			// 创建请求对象
			const http = axios.create({
				// 设置基本的url地址
				baseURL: 'http://127.0.0.1:5000',
				timeout: 1000,
				// 指定http状态码错误范围
				validateStatus: function(status) {
					return true
				}
			})

			var vm = new Vue({
				el: '#app',
				data: {
					loginData: {
						user: '',
						pwd: ''
					},
					projects: [],
					interfaces: [],
					msg: '',
				},
				methods: {
					async login() {
						// 请求登录接口
						const response = await http.post('/api/user/login', this.loginData)
						// 判断是否登录成功
						if (response.data.code === '1') {
							alert('登录成功')
							// 请求获取项目接口
							this.getProject()
						} else {
							alert('登录失败')
						}
					},
					async getProject() {
						// 请求获取项目的接口
						const response = await http.get('/api/projects')
						// 保存数据到data里的project中
						this.projects = response.data
					},
					async getInter(interId) {
						// 请求获取项目的接口
						const response = await http.get('/api/interface', {
							params: {
								id: interId
							}
						})
						// 保存数据到data里的project中
						this.interfaces = response.data
					},
					updateMsg(inter){
						this.msg =inter
						
					}
				}


			})
		</script>




	</body>
</html>

demo2_登录鉴权接口的案例.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		<script src="https://unpkg.com/axios<style type="text/css">
			.box {
				width: 600px;
				height: 400px;
				margin: 100px auto;
			}
		</style>/dist/axios.min.js"></script>
		

	</head>
	<body>
		<div id="app">

			<div class="box">
				<el-card class="box-card">
					<h2 style="text-align: center;">用 户 登 录</h2>
					<el-form :model="form" label-width="80px">
						<el-form-item label="账号">
							<el-input v-model="form.username"></el-input>
						</el-form-item>
						<el-form-item label="密码">
							<el-input v-model="form.password" type='password'></el-input>
						</el-form-item>
						<el-form-item>
							<el-button type="primary" @click="login">点击登录</el-button>
						</el-form-item>
					</el-form>
				</el-card>
			</div>
			<hr>
			<div class="box2">
				<el-button type="primary" @click='getProject'>获取项目列表</el-button>
				<el-table :data="projects" style="width: 100%">
					<el-table-column prop="id" label="ID" min-width="50">
					</el-table-column>
					<el-table-column prop="name" label="项目名" min-width="180">
					</el-table-column>
					<el-table-column prop="create_time" label="创建时间" min-width='200'>
					</el-table-column>
					<el-table-column prop="leader" label="负责人" min-width="180">
					</el-table-column>
					<el-table-column prop="testcases" label="用例数" min-width="180">
					</el-table-column>
				</el-table>
			</div>

		</div>



		<script type="text/javascript">
			// 创建请求对象
			const http = axios.create({
				// 设置基本的url地址
				baseURL: 'http://api.keyou.site:8000',
				timeout: 1000,
				// 指定http状态码错误范围
				validateStatus: function(status) {
					return true
				}
			})

			// 添加请求拦截器
			http.interceptors.request.use(function(config) {

				// 获取sessionStorage中的token值,添加到请求信息中
				token = window.sessionStorage.getItem('token')
				if (token) {
					config.headers.Authorization = 'JWT ' + token
				}
				return config;
			});

			var vm = new Vue({
				el: "#app",
				data: {
					form: {
						username: "",
						password: ""
					},
					projects:[]
				},
				methods: {
					// 登录请求
					async login() {
						//发送请求登录
						const response = await http.post('/user/login/', this.form)
						console.log(response.data)
						if (response.status === 200) {
							// 提取响应中的token
							const token = response.data.token
							// 将token存储到sessionstorage中
							window.sessionStorage.setItem('token', token)
						} else {
							alert('登录失败!')
						}
					},
					// 发送请求获取所有的项目
					async getProject() {
						const response = await http.get('/projects/')
						console.log(response)
						if (response.status===200){
							this.projects = response.data.results 
						}
					}

				}
			})
		</script>



	</body>
</html>

demo3_vue-reouter的基本使用 - 副本.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
		<!-- 引入vue-router -->
		<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
	</head>
	<body>
		<div id="app">
			<!-- 路由视图展示的地方 -->
			<router-view></router-view>

		</div>


		<script type="text/javascript">
			//1、 定义路由对应的组件
			const Login = {
				template: `<h1>登录页面</h1>`
			}
			const Home = {
				template: `<h1>项目首页</h1>`
			}

			// 2、 创建一个路由对象, 设置路由匹配规则
			const router = new VueRouter({
				routes: [{
						path: '/user/login',
						component: Login
					},
					{
						path: '/index/home',
						component: Home
					}
				]
			})
			// 3、 将路由对象挂载到vue实例中
			const app = new Vue({
				el: '#app',
				router: router
			})
		</script>






	</body>
</html>

demo4_使用路由实现登录页面跳转的案例.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
		<!-- 引入vue-router -->
		<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
		<style type="text/css">
			.box {
				width: 600px;
				height: 400px;
				margin: 100px auto;
			}
		</style>
		
		
	</head>
	<body>
		<div id="app">
			<!-- 路由视图展示的地方 -->
			<router-view></router-view>
		</div>


		<script type="text/javascript">
			// 创建请求对象
			const http = axios.create({
				// 设置基本的url地址
				baseURL: 'http://api.keyou.site:8000',
				timeout: 1000,
				// 指定http状态码错误范围
				validateStatus: function(status) {
					return true
				}
			})
			
			// 添加请求拦截器
			http.interceptors.request.use(function(config) {
			
				// 获取sessionStorage中的token值,添加到请求信息中
				token = window.sessionStorage.getItem('token')
				if (token) {
					config.headers.Authorization = 'JWT ' + token
				}
				return config;
			});
			
			
			//1、 定义登录组件
			const Login = {
				template: `
				<div class="box">
					<el-card class="box-card">
						<h2 style="text-align: center;">用 户 登 录</h2>
						<el-form :model="form" label-width="80px">
							<el-form-item label="账号">
								<el-input v-model="form.username"></el-input>
							</el-form-item>
							<el-form-item label="密码">
								<el-input v-model="form.password" type='password'></el-input>
							</el-form-item>
							<el-form-item>
								<el-button type="primary" @click="login">点击登录</el-button>
							</el-form-item>
						</el-form>
					</el-card>
				</div>`,
				data(){
					return{
						form: {
							username: "",
							password: ""
						}
					}
				},
				methods:{
					async login() {
						//发送请求登录
						const response = await http.post('/user/login/', this.form)
						console.log(response.data)
						if (response.status === 200) {
							alert('登录成功!')
							// 提取响应中的token
							const token = response.data.token
							// 将token存储到sessionstorage中
							window.sessionStorage.setItem('token', token)
							// 使用编程式导航进行页面跳转
							this.$router.push('/index/home')
							
						} else {
							alert('登录失败!')
						}
					}
				}
			}
			// 2、定义项目首页组件
			const Home = {
				template: `<div class="box2">
				<el-button type="primary" @click='getProject'>获取项目列表</el-button>
				<el-table :data="projects" style="width: 100%">
					<el-table-column prop="id" label="ID" min-width="50">
					</el-table-column>
					<el-table-column prop="name" label="项目名" min-width="180">
					</el-table-column>
					<el-table-column prop="create_time" label="创建时间" min-width='200'>
					</el-table-column>
					<el-table-column prop="leader" label="负责人" min-width="180">
					</el-table-column>
					<el-table-column prop="testcases" label="用例数" min-width="180">
					</el-table-column>
					</el-table>
				</div>`,
				data(){
					return{
						projects:[]
					}
				},
				methods:{
					// 发送请求获取所有的项目
					async getProject() {
						const response = await http.get('/projects/')
						console.log(response)
						if (response.status===200){
						
							this.projects = response.data.results 
						}
					}
				}
			}

			// 2、 创建一个路由对象, 设置路由匹配规则
			const router = new VueRouter({
				routes: [{
						path: '/user/login',
						component: Login
					},
					{
						path: '/index/home',
						component: Home
					}
				]
			})
			// 3、 将路由对象挂载到vue实例中
			const app = new Vue({
				el: '#app',
				router: router
			})
		</script>






	</body>
</html>

demo5_编程式导航和声明式导航.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
		<!-- 引入vue-router -->
		<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
		<style type="text/css">
			.box {
				width: 600px;
				height: 400px;
				margin: 100px auto;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<el-menu class="el-menu-demo" mode="horizontal" background-color="#545c64" text-color="#fff"
				active-text-color="#ffd04b">
				<el-menu-item index="1">
					<router-link to="/user/login">登录页面</router-link>
				</el-menu-item>
				<el-menu-item index="2">
					<router-link to="/index/home">个人中心</router-link>
				</el-menu-item>
				<!-- <el-menu-item index="8">
					<router-link to={name:register}>注册</router-link>
				</el-menu-item> -->
				<el-submenu index="3">
					<template slot="title">我的工作台</template>
					<el-menu-item index="2-1">选项1</el-menu-item>
					<el-menu-item index="2-2">选项2</el-menu-item>
					<el-menu-item index="2-3">选项3</el-menu-item>
				</el-submenu>
				<el-menu-item index="5">订单管理</el-menu-item>
			</el-menu>
			<!-- 路由视图展示的地方 -->
			<router-view></router-view>

		</div>
		<script type="text/javascript">
			// 创建请求对象
			const http = axios.create({
				// 设置基本的url地址
				baseURL: 'http://api.keyou.site:8000',
				timeout: 1000,
				// 指定http状态码错误范围
				validateStatus: function(status) {
					return true
				}
			})

			// 添加请求拦截器
			http.interceptors.request.use(function(config) {

				// 获取sessionStorage中的token值,添加到请求信息中
				token = window.sessionStorage.getItem('token')
				if (token) {
					config.headers.Authorization = 'JWT ' + token
				}
				return config;
			});


			//1、 定义登录组件
			const Login = {
				template: `
				<div class="box">
					<el-card class="box-card">
						<h2 style="text-align: center;">用 户 登 录</h2>
						<el-form :model="form" label-width="80px">
							<el-form-item label="账号">
								<el-input v-model="form.username"></el-input>
							</el-form-item>
							<el-form-item label="密码">
								<el-input v-model="form.password" type='password'></el-input>
							</el-form-item>
							<el-form-item>
								<el-button type="primary" @click="login">点击登录</el-button>
							</el-form-item>
						</el-form>
					</el-card>
				</div>`,
				data() {
					return {
						form: {
							username: "",
							password: ""
						}
					}
				},
				methods: {
					async login() {
						//发送请求登录
						const response = await http.post('/user/login/', this.form)
						console.log(response.data)
						if (response.status === 200) {
							alert('登录成功!')
							// 提取响应中的token
							const token = response.data.token
							// 将token存储到sessionstorage中
							window.sessionStorage.setItem('token', token)
							// 使用编程式导航进行页面跳转
							this.$router.push('/index/home')

						} else {
							alert('登录失败!')
						}
					}
				}
			}
			// 2、定义项目首页组件
			const Home = {
				template: `<div class="box2">
				<el-button type="primary" @click='registerBtn'>注册页面</el-button>
				<el-button type="primary" @click='getProject'>获取项目列表</el-button>
				<el-table :data="projects" style="width: 100%">
					<el-table-column prop="id" label="ID" min-width="50">
					</el-table-column>
					<el-table-column prop="name" label="项目名" min-width="180">
					</el-table-column>
					<el-table-column prop="create_time" label="创建时间" min-width='200'>
					</el-table-column>
					<el-table-column prop="leader" label="负责人" min-width="180">
					</el-table-column>
					<el-table-column prop="testcases" label="用例数" min-width="180">
					</el-table-column>
					</el-table>
				</div>`,
				data() {
					return {
						projects: []
					}
				},
				methods: {
					// 发送请求获取所有的项目
					async getProject() {
						const response = await http.get('/projects/')
						console.log(response)
						if (response.status === 200) {

							this.projects = response.data.results
						}
					},
					registerBtn(){
						// 给路由命名之后  可以直接通过name指定名字进行跳转
						this.$router.push({name:'register'})
					}
				}
			}
			const Register = {
				template: `<h1>注册页面</h1>`,
				}
			// 2、 创建一个路由对象, 设置路由匹配规则
			const router = new VueRouter({
				routes: [{
						path: '/',
						// 进行重定向配置路由跳转
						redirect:'/index/home'
					}, {
						path: '/user/login',
						component: Login
					},
					{
						path: '/index/home',
						component: Home
					},
					{	name:"register",
						path: '/user/register',
						component: Register
					}
				]
			})


			var vm = new Vue({
				el: '#app',
				router: router
			})
		</script>




	</body>
</html>

demo6_子路由的配置.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
		<!-- 引入vue-router -->
		<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
		<style type="text/css">
			.box {
				width: 600px;
				height: 400px;
				margin: 100px auto;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<!-- 路由视图展示的地方 -->
			<router-view></router-view>
		</div>
		<script type="text/javascript">
			// 创建请求对象
			const http = axios.create({
				// 设置基本的url地址
				baseURL: 'http://api.keyou.site:8000',
				timeout: 1000,
				// 指定http状态码错误范围
				validateStatus: function(status) {
					return true
				}
			})
			
			// 添加请求拦截器
			http.interceptors.request.use(function(config) {
			
				// 获取sessionStorage中的token值,添加到请求信息中
				token = window.sessionStorage.getItem('token')
				if (token) {
					config.headers.Authorization = 'JWT ' + token
				}
				return config;
			});
			
			
			//1、 定义登录组件
			const Login = {
				template: `
				<div class="box">
					<el-card class="box-card">
						<h2 style="text-align: center;">用 户 登 录</h2>
						<el-form :model="form" label-width="80px">
							<el-form-item label="账号">
								<el-input v-model="form.username"></el-input>
							</el-form-item>
							<el-form-item label="密码">
								<el-input v-model="form.password" type='password'></el-input>
							</el-form-item>
							<el-form-item>
								<el-button type="primary" @click="login">点击登录</el-button>
							</el-form-item>
						</el-form>
					</el-card>
				</div>`,
				data() {
					return {
						form: {
							username: "",
							password: ""
						}
					}
				},
				methods: {
					async login() {
						//发送请求登录
						const response = await http.post('/user/login/', this.form)
						console.log(response.data)
						if (response.status === 200) {
							alert('登录成功!')
							// 提取响应中的token
							const token = response.data.token
							// 将token存储到sessionstorage中
							window.sessionStorage.setItem('token', token)
							// 使用编程式导航进行页面跳转
							this.$router.push('/')
			
						} else {
							alert('登录失败!')
						}
					}
				}
			}
			const Home = {
				template: `
				<div>
					<el-menu class="el-menu-demo" mode="horizontal" background-color="#545c64" text-color="#fff"
					active-text-color="#ffd04b">
						<el-menu-item index="1">
							<router-link to="/index">index页面</router-link>
						</el-menu-item>
						<el-menu-item index="2">
							<router-link to="/project">项目页面</router-link>
						</el-menu-item>
						<el-menu-item index="3">
						<router-link to="/interface">接口页面</router-link></el-menu-item>
					</el-menu>
				<router-view></router-view>
				</div>	
			`
			}
			const index = {
				template: `<h1>index页面</h1>`,
			}
			const project = {
				template: `<h1>项目页面</h1>`,
			}
			const interface = {
				template: `<h1>接口页面</h1>`,
			}
			// 2、 创建一个路由对象, 设置路由匹配规则
			const router = new VueRouter({
				routes: [
					{
						path: '/',
						component: Home,
						// 定义子路由,子路由的模板内容,会展示在父路由模板中dinginess的router-view中
						children: [{
								path: '/index',
								component: index
							},
							{
								path: '/project',
								component: project
							},
							{
								path: '/interface',
								component: interface
							}

						]
					},{
						path:'/login',
						component:Login
					}
				]
			})


			var vm = new Vue({
				el: '#app',
				router: router
			})
		</script>


	</body>
</html>

20210705_vue-cli
demo1_路由参数传递之路径参数.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
		<!-- 引入vue-router -->
		<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
	</head>
	<body>

		<div id="app">
			<button type="button">
				<router-link to='/user/9999/000'>用户</router-link>
			</button>
			<button type="button" @click="userBtn">
				按钮
			</button>
			<button type="button">
				<router-link :to="{name:'user',params:{id:777,key:999}}">用户页面</router-link>
			</button>


			<!-- 路由视图展示的地方 -->
			<router-view></router-view>
		</div>
		<script type="text/javascript">
			const Home = {
				template: `<h1>Home页面</h1>`,
			}
			const User = {
				template: `
					<div>
						<h1>User页面</h1>
						<h3>参数值为:{{$route.params.id}}</h3>
						<h3>参数值为:{{$route.params.key}}</h3>
					</div>`,
			}
			const router = new VueRouter({
				routes: [{
					path: '/',
					component: Home,
				}, {
					path: '/user/:id/:key',
					component: User,
					name: 'user'
				}]
			})

			var vm = new Vue({
				el: '#app',
				data: {},
				router: router,
				methods: {
					userBtn: function() {
						this.$router.push({
							name: 'user',
							params: {
								id: 888,
								key: 999
							}
						})
					}
				}
			})
		</script>

	</body>
</html>

demo2_路由参数传递之查询参数.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
		<!-- 引入vue-router -->
		<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
	</head>
	<body>

		<div id="app">
			<button type="button" @click="userBtn">
				按钮
			</button>
			<button type="button">
				<router-link :to="{name:'user',query:{name:777,age:999}}">用户页面</router-link>
			</button>


			<!-- 路由视图展示的地方 -->
			<router-view></router-view>
		</div>
		<script type="text/javascript">
			const Home = {
				template: `<h1>Home页面</h1>`,
			}
			const User = {
				template: `
					<div>
						<h1>User页面</h1>
						<h3>参数值为:{{$route.query.name}}</h3>
						<h3>参数值为:{{$route.query.age}}</h3>
					</div>`,
			}
			const router = new VueRouter({
				routes: [{
					path: '/',
					component: Home,
				}, {
					path: '/user',
					component: User,
					name: 'user'
				}]
			})
			var vm = new Vue({
				el: '#app',
				data: {},
				router: router,
				methods: {
					userBtn: function() {
						this.$router.push({
							name: 'user',
							query: {
								project: 888,
								id: 999
							}
						})
					}
				}
			})
		</script>

	</body>
</html>

demo3_路由导航守卫.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
		<!-- 引入样式 -->
		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
		<!-- 引入组件库 -->
		<script src="https://unpkg.com/element-ui/lib/index.js"></script>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
		<!-- 引入vue-router -->
		<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
		<style type="text/css">
			.box {
				width: 600px;
				height: 400px;
				margin: 100px auto;
			}
		</style>


	</head>
	<body>
		<div id="app">
			<!-- 路由视图展示的地方 -->
			<router-view></router-view>
		</div>


		<script type="text/javascript">
			// 创建请求对象
			const http = axios.create({
				// 设置基本的url地址
				baseURL: 'http://api.keyou.site:8000',
				timeout: 1000,
				// 指定http状态码错误范围
				validateStatus: function(status) {
					return true
				}
			})

			// 添加请求拦截器
			http.interceptors.request.use(function(config) {

				// 获取sessionStorage中的token值,添加到请求信息中
				token = window.sessionStorage.getItem('token')
				if (token) {
					config.headers.Authorization = 'JWT ' + token
				}
				return config;
			});


			//1、 定义登录组件
			const Login = {
				template: `
				<div class="box">
					<el-card class="box-card">
						<h2 style="text-align: center;">用 户 登 录</h2>
						<el-form :model="form" label-width="80px">
							<el-form-item label="账号">
								<el-input v-model="form.username"></el-input>
							</el-form-item>
							<el-form-item label="密码">
								<el-input v-model="form.password" type='password'></el-input>
							</el-form-item>
							<el-form-item>
								<el-button type="primary" @click="login">点击登录</el-button>
							</el-form-item>
						</el-form>
					</el-card>
				</div>`,
				data() {
					return {
						form: {
							username: "",
							password: ""
						}
					}
				},
				methods: {
					async login() {
						//发送请求登录
						const response = await http.post('/user/login/', this.form)
						console.log(response.data)
						if (response.status === 200) {
							alert('登录成功!')
							// 提取响应中的token
							const token = response.data.token
							// 将token存储到sessionstorage中
							window.sessionStorage.setItem('token', token)
							// 使用编程式导航进行页面跳转
							this.$router.push('/home')

						} else {
							alert('登录失败!')
						}
					}
				}
			}
			// 2、定义项目首页组件
			const Home = {
				template: `<div class="box2">
				<el-button type="primary" @click='getProject'>获取项目列表</el-button>
				<el-table :data="projects" style="width: 100%">
					<el-table-column prop="id" label="ID" min-width="50">
					</el-table-column>
					<el-table-column prop="name" label="项目名" min-width="180">
					</el-table-column>
					<el-table-column prop="create_time" label="创建时间" min-width='200'>
					</el-table-column>
					<el-table-column prop="leader" label="负责人" min-width="180">
					</el-table-column>
					<el-table-column prop="testcases" label="用例数" min-width="180">
					</el-table-column>
					</el-table>
				</div>`,
				data() {
					return {
						projects: []
					}
				},
				methods: {
					// 发送请求获取所有的项目
					async getProject() {
						const response = await http.get('/projects/')
						console.log(response)
						if (response.status === 200) {

							this.projects = response.data.results
						}
					}
				}
			}

			// 2、 创建一个路由对象, 设置路由匹配规则
			const router = new VueRouter({
				routes: [{
						path: '/login',
						component: Login
					},
					{
						path: '/',
						component: Home
					},
					{
						path: '/home',
						component: Home
					}
				]
			})
			// 定义路由导航守卫
			// router.beforeEach((to, form, next) => {
			// 	console.log('to',to)
			// 	console.log('form',form)
			// 	console.log('next',next)
			// 	next()
			// })
			// router.beforeEach((to, form, next) => {
			// 	// 判断访问的是否是登录这个页面
			// 	if(to.path ==='/login'){
			// 		next()
			// 	}else{
			// 		// 如果不是登录页面,判断之前是否登录过,
			// 		const token = window.sessionStorage.getItem('token')
			// 		if (token){
			// 			 next()
			// 		}else{
			// 			next('./login')
			// 		}
			// 	}
			// })
			router.beforeEach((to, form, next) => {
				// 判断访问的是否是登录这个页面				
				// if(to.path=='/login'|| window.sessionStorage.getItem('token')){
				// 	next()
				// }else{
				// 	next('/login')
				// }
				if (to.path == '/login' || window.sessionStorage.getItem('token')) return next()
				next('/login')

			})


			// 3、 将路由对象挂载到vue实例中
			const app = new Vue({
				el: '#app',
				router: router
			})
		</script>






	</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值