平台项目列表页实现(二)

news2024/11/17 13:34:57

这里写目录标题

  • 一、顶部盒子设计
    • 1. 顶部盒子包含项目列表和添加项目、退出登录2个按钮
  • 二、项目列表盒子设计
  • 三、添加项目盒子设计
  • 四、退出登录功能实现
  • 五、路由导航守卫实现
  • 六、展示项目信息
  • 七、bug修复
    • 1、当项目名称太长或者项目负责人太长,需要一行展示,当超过8个字...展示
  • 八、删除单个项目
  • 九、添加项目功能
  • 十、编辑和添加使用同一个弹框
  • 十一、编辑项目
  • 十二、总体实现代码
  • 十三:鼠标放上指定的位置变成手,点击进入home页面

一、顶部盒子设计

在这里插入图片描述

1. 顶部盒子包含项目列表和添加项目、退出登录2个按钮

在这里插入图片描述

<template>
    <!-- 项目列表页面 -->
    <div class="pros_box">
        <!-- 顶部的盒子 -->
        <div class="top_box">
            <span>项目列表</span>
            <el-button icon="User" color="#00aa7f">退出登录</el-button>
            <el-button icon="Plus" color="#00aa7f">添加项目</el-button>
        </div
    </div>
</template>

<script>

</script>

<style scoped>
/* 顶部内容 */
    .top_box{
        border-bottom:solid 5px #00aa7f;
        height: 50px;  设置高度
        font:bold 20px/40px '微软雅黑';
        color: #00aa7f; 设置背景颜色
        margin: 20px auto; 
    }
    
    /* 大盒子 */
    .pros_box{
        margin: 30px auto;
        max-width: 1400px;
    }
    /* 顶部按钮 */
    .top_box .el-button{
        float:right; 右浮动
        margin: 10px;
    }
</style>

二、项目列表盒子设计

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

项目列表页面(整个页面的大盒子)包含显示项目列表的区域(显示所有项目的盒子)包含单个项目(单个项目的盒子)包含图标、项目名称、负责人、2个按钮,共4个盒子

<template>
    <!-- 项目列表页面 -->
    <div class="pros_box">
        <!-- 顶部的盒子 -->
        <div class="top_box">
            <span>项目列表</span>
            <el-button icon="User" color="#00aa7f">退出登录</el-button>
            <el-button icon="Plus" color="#00aa7f">添加项目</el-button>
        </div>

        <!-- 显示项目列表的区域 -->
        <div class="pro_list">
            <!-- 单个项目 -->
            <el-card class="pro">
                <!-- 图标 -->
                <div class="pro_icon">
                    <el-icon><Platform /></el-icon>
                </div>
                <!-- 项目名称 -->
                <div class="pro_name">
                    演示项目
                </div>
                <!-- 负责人 -->
                <div class="leader">
                    负责人:kobe
                </div>
                <div class="btns">
                    <el-button size="small" icon="Edit" style="float:left;" color="#efefef">编辑</el-button>
                    <el-button size="small" icon="Delete" style="float:right;" color="#efefef">删除</el-button>
                </div>
            </el-card>

        </div>

    </div>
</template>

<script>

</script>

<style scoped>
/* 顶部内容 */
    .top_box{

        border-bottom:solid 5px #00aa7f;
        height: 50px;
        /* 设置字体加粗 宽度和高度  */
        font:bold 20px/40px '微软雅黑';
        /* 设置颜色 */
        color: #00aa7f;
        margin: 20px auto;
    }
    

    /* 大盒子 */
    .pros_box{
        margin: 30px auto;
        /* 设置最大宽度 */
        max-width: 1400px;
    }
    /* 顶部按钮 */
    .top_box .el-button{
        /* 右浮动 */
        float:right;
        margin: 10px;
    }
    /* 项目列表样式 */
    .pro{
        width:200px;
        height: 250px;
        float: left;
        margin: 10px;
    }
    /* 项目中图标的样式 */
    .pro .pro_icon{
        width: 60px;
        height: 60px;
        border-radius: 30px;  
        /* 背景颜色 */
        background: #e1ffed;
        color: #00aa7f;
        font: normal 30px/60px '微软雅黑';
        /* 居中 */
        text-align: center;
        margin: 0 auto;
    }
    /* 项目名称的样式 */
    .pro .pro_name{
        text-align: center;
        margin-top: 20px;
        font: bold 18px/20px '微软雅黑';
    }
    /* 负责人 */
    .pro .leader{
        text-align: center;
        color: rgb(55, 28, 206);
        /* 设置:字体/行高 */
        font: normal 15px/40px '微软雅黑'; 
        /* margin-bottom: 10px;  */
    }

    /* 按钮区域 */
    .pro .btns{
        margin-top: 50px;
        text-align: center;
    }
 
    	
</style>

三、添加项目盒子设计

在这里插入图片描述

<template>
	......
	......
	 <!-- 添加项目的盒子 -->
     <el-card class="pro">
         <div class="add_box">
             <el-icon :size="50" color="green"><Plus /></el-icon>
         </div>
     </el-card>
</template>


<style scoped>
	......
	/* 添加项目 */
    .pro .add_box{
        /* 水平居中 */
        text-align: center; 
        /* 高度 */
        /* height: 250px; */
        /* 行高 */
        line-height: 200px;
    }
    ......
</style>

四、退出登录功能实现

<el-button @click="logout"  icon='User' color='#00aa7f'>退出登录</el-button>
<script>
	export default{
		data(){
			return{
				
			}
		},
		methods:{
			// 退出登录
			logout(){
				//清除token和用户名
				window.sessionStorage.removeItem('token')
				window.sessionStorage.removeItem('username')
				//跳转到登录页面
				this.$router.push({name:'login'})
				
			}
		}
	}
</script>

五、路由导航守卫实现

添加路由导航守卫,控制前端页面访问的权限

router.beforeEach(async (to, from) => {
	// 获取sessionStorage是否存在token,如果存在token视为已经登录
	const isAuthenticated = window.sessionStorage.getItem('token')
    if (
	   // 检查用户是否已登录
	   !isAuthenticated &&
	   // ❗️ 避免无限重定向
	   to.name !== 'login'
	 ) {
	   // 将用户重定向到登录页面
	   return { name: 'login' }
	 }
    })
 

六、展示项目信息

<script>
	export default{
		data(){
			return{
				//项目列表信息
				projectList:[
					
				]
			}
		},
		methods:{
			...
			...
			// 通过接口获取后端所有的项目
			async getAllProject(){
				const response= await this.$api.getAllProjects()
				if(response.status===200){
					console.log(response.data)
					// 将获取到的项目信息保存到data中
					this.projectList=response.data
				}
			}
		},
		// 钩子函数,最先执行的方法
		created(){
			this.getAllProject()
		}
	}
</script>
<!-- 显示项目列表的区域 -->
		<div class="pro_list">
			<!-- 单个项目显示在一个el-card -->
			<el-card class="pro" v-for="pro in projectList" :key='pro.id'>
			  <!-- 图标 -->
			  <div class="pro_icon">
				  <el-icon><Platform /></el-icon>
			  </div>
			  <!-- 项目名称 -->
			  <div class="pro_name">
				  {{pro.name}}
			  </div>
			  <!-- 项目负责人 -->
			  <div class="pro_leader">
				  {{pro.leader}}
			  </div>
			  <!-- 按钮 -->
			  <div class="btns">
				  <el-button  color="#d9d9d9" class="edit" size="small" icon="Edit">编辑</el-button>
				  <el-button color="#F5F5DC" class="del" size="small" icon="Delete">删除</el-button>
			  </div>
 
			</el-card>
			
			<!-- 添加项目的空盒子-->
			<el-card class="pro">
			  <!-- 图标 -->
			  <div class="add_pro">
				  <el-icon :size=70>
					  <Plus/>
				  </el-icon>
			  </div>
			 
			</el-card>
			
		</div>

七、bug修复

在这里插入图片描述

1、当项目名称太长或者项目负责人太长,需要一行展示,当超过8个字…展示

 <!-- 项目名称 -->
  <div class="pro_name">
	<span v-if="pro.name.length<8">{{pro.name}}</span>
	<el-tooltip v-else class="item" effect="dark" v-bind:content=pro.name placement="top-start">
			{{pro.name.slice(0,8)}}...
	</el-tooltip>
  </div>
  
  <!-- 项目负责人 -->
  <div class="pro_leader">
	  <span v-if="pro.leader.length<8">{{pro.leader}}</span>
	  <el-tooltip v-else class="item" effect="dark" v-bind:content=pro.leader placement="top-start">
	  		{{pro.leader.slice(0,8)}}...
	  </el-tooltip>
  </div>

八、删除单个项目

index.js

export default{
	// 登录接口
	login(params){
		return http.post('/login/',params)
	},
	// ---------------------------项目操作的api---------------------------
	// 获取项目列表
	getAllProjects(){
		return http.get('/projects/')
	},
	// 删除项目的接口
	delProject(id){
		return http.delete(`/projects/${id}/`)
	}
}
<div class="btns">
	  <el-button  color="#d9d9d9" class="edit" size="small" icon="Edit">编辑</el-button>
	  <el-button color="#F5F5DC" class="del" size="small" icon="Delete" @click="clickDelete(pro.id)">删除</el-button>
  </div>
<script>
	import { ElMessage, ElMessageBox } from 'element-plus'
	
	export default{
		data(){
			return{
				//项目列表信息
				projectList:[
					
				]
			}
		},
		methods:{
			...
			...
				
			// 通过接口获取后端所有的项目
			async getAllProject(){
				const response= await this.$api.getAllProjects()
				if(response.status===200){
					console.log(response.data)
					// 将获取到的项目信息保存到data中
					this.projectList=response.data
				}
			},
			// 调用接口删除项目
			async deletePro(proId){
				//发送接口请求
				const response = await this.$api.delProject(proId)
				if(response.status===204){
					//更新页面的数据
					this.getAllProject()
					//提示删除成功
					this.$message({
					  type: 'success',
					  message: '删除成功!'
					})
				}
			},
			
			// 点击删除项目
			clickDelete(id){
				this.$confirm('此操作不可恢复,确定要删除吗?', {
				          confirmButtonText: '确定',
				          cancelButtonText: '取消',
				          type: 'warning'
				        }).then(() => {
							// 调用删除的接口
							this.deletePro(id)

						  // 取消操作 -->
				        }).catch(() => {
				          this.$message({
				            type: 'info',
				            message: '已取消删除'
				          });          
				        });
			}
		},
		// 钩子函数,最先执行的方法
		created(){
			this.getAllProject()
		}
	}
</script>

九、添加项目功能

index.js

export default{
	// 登录接口
	login(params){
		return http.post('/login/',params)
	},
	// ---------------------------项目操作的api---------------------------
	// 获取项目列表
	getAllProjects(){
		return http.get('/projects/')
	},
	// 删除项目的接口
	delProject(id){
		return http.delete(`/projects/${id}/`)
	},
	//添加项目的接口
	createProject(params){
		return http.post('/projects/',params)
	}
	
}
<!-- 顶部盒子 -->
<div class="top_box">
	<span>项目列表</span>
	<el-button @click="logout"  icon='User' color='#00aa7f'>退出登录</el-button>
	<el-button @click="addDlg=true" icon='Plus' color='#00aa7f'>添加项目</el-button>
</div>

<!-- 添加项目的空盒子-->
<el-card class="pro">
  <!-- 图标 -->
  <div class="add_pro" @click="addDlg=true">
	  <el-icon :size=70>
		  <Plus/>
	  </el-icon>
  </div>
 
</el-card>



<!-- 添加项目的弹框 -->
<el-dialog v-model="addDlg" title="添加项目" >
  <el-form :model="form">
    <el-form-item label="项目名称">
      <el-input v-model="addForm.name"></el-input>
    </el-form-item>
	<el-form-item label="负责人">
	  <el-input v-model="addForm.leader"></el-input>
	</el-form-item>
  </el-form>

  <div class="dialog-footer">
    <el-button @click="addDlg = false">取 消</el-button>
    <el-button type="primary" @click="addPro">确 定</el-button>
  </div>
</el-dialog>
<script>
	import { ElMessage, ElMessageBox } from 'element-plus'
	
	export default{
		data(){
			return{
				//项目列表信息
				projectList:[
					
				],
				// 添加项目的弹框是否显示
				addDlg:false,
				// 向表单中输入的文字
				addForm:{
					name:"",
					leader:""
				}
			}
		},
		methods:{
			...
			...
			...
			// 添加项目
			async addPro(){
				// 发送请求
				const response=await this.$api.createProject(this.addForm)
				if(response.status===201){
					//更新页面的数据
					this.getAllProject()
					// 关闭窗口
					this.addDlg=false
					this.$message({
					  type: 'success',
					  message: '添加成功!'
					})
				}
			}
			
		},
		// 钩子函数,最先执行的方法
		created(){
			this.getAllProject()
		}
	}
</script>

十、编辑和添加使用同一个弹框

title:不写死
在这里插入图片描述
在data中设置dlgTitle为弹窗的标题
在这里插入图片描述
接着在显示title的地方,设置数据绑定
在这里插入图片描述
给编辑按钮添加一个事件clickEdit
在这里插入图片描述
在这里插入图片描述
修改点击添加的方法clickAdd
在这里插入图片描述
在这里插入图片描述

十一、编辑项目

index.js


export default{
	// 登录接口
	login(params){
		return http.post('/login/',params)
	},
	// ---------------------------项目操作的api---------------------------
	// 获取项目列表
	getAllProjects(){
		return http.get('/projects/')
	},
	// 删除项目的接口
	delProject(id){
		return http.delete(`/projects/${id}/`)
	},
	//添加项目的接口
	createProject(params){
		return http.post('/projects/',params)
	},
	// 修改项目
	updateProject(id,params){
		return http.patch(`/projects/${id}/`,params)
	}
	
}

根据dlgTitle发送不同的接口
加粗样式
在这里插入图片描述
id怎么传?
this.addForm={…pro}:将项目信息赋值给addForm

在这里插入图片描述

十二、总体实现代码

<template>
	<!-- 项目列表页面 -->
	<div class="pros_box">
		<!-- 顶部盒子 -->
		<div class="top_box">
			<span>项目列表</span>
			<el-button @click="logout"  icon='User' color='#00aa7f'>退出登录</el-button>
			<el-button @click="clickAdd" icon='Plus' color='#00aa7f'>添加项目</el-button>
		</div>
		
		
		<!-- 显示项目列表的区域 -->
		<div class="pro_list">
			<!-- 单个项目显示在一个el-card -->
			<el-card class="pro" v-for="pro in projectList" :key='pro.id'>
			  
			  <div style="cursor: pointer;" @click="selectPro(pro)">
				  <!-- 图标 -->
				  <div class="pro_icon">
				  				  <el-icon><Platform /></el-icon>
				  </div>
				  <!-- 项目名称 -->
				  <div class="pro_name">
				  				<span v-if="pro.name.length<8">{{pro.name}}</span>
				  				<el-tooltip v-else class="item" effect="dark" v-bind:content=pro.name placement="top-start">
				  						{{pro.name.slice(0,8)}}...
				  				</el-tooltip>
				  </div>
				  
				  <!-- 项目负责人 -->
				  <div class="pro_leader">
				  				  <span v-if="pro.leader.length<8">{{pro.leader}}</span>
				  				  <el-tooltip v-else class="item" effect="dark" v-bind:content=pro.leader placement="top-start">
				  				  		{{pro.leader.slice(0,8)}}...
				  				  </el-tooltip>
				  </div>
			  </div>
			  
			  <!-- 按钮 -->
			  <div class="btns">
				  <el-button @click="clickEdit(pro)"  color="#d9d9d9" class="edit" size="small" icon="Edit">编辑</el-button>
				  <el-button color="#F5F5DC" class="del" size="small" icon="Delete" @click="clickDelete(pro.id)">删除</el-button>
			  </div>
 
			</el-card>
			
			<!-- 添加项目的空盒子-->
			<el-card class="pro">
			  <!-- 图标 -->
			  <div class="add_pro" @click="clickAdd">
				  <el-icon :size=70>
					  <Plus/>
				  </el-icon>
			  </div>
			 
			</el-card>
			
		</div>
	</div>
	
	
	<!-- 添加项目的弹框 -->
	<!-- <el-dialog v-model="addDlg" title="添加项目" > -->
	  <!-- <el-form :model="form">
	    <el-form-item label="项目名称">
	      <el-input v-model="addForm.name"></el-input>
	    </el-form-item>
		<el-form-item label="负责人">
		  <el-input v-model="addForm.leader"></el-input>
		</el-form-item>
	  </el-form> -->

	  <!-- <div class="dialog-footer">
	    <el-button @click="addDlg = false">取 消</el-button> 
	    <el-button type="primary" @click="addPro">确 定</el-button>
	  </div>
	</el-dialog> -->
	
	<!-- 添加和编辑项目的弹窗 -->
	<el-dialog v-model="addDlg" :title="dlgTitle" >
	  <el-form :model="form">
	    <el-form-item label="项目名称">
	      <el-input v-model="addForm.name"></el-input>
	    </el-form-item>
		<el-form-item label="负责人">
		  <el-input v-model="addForm.leader"></el-input>
		</el-form-item>
	  </el-form>
	
	  <div class="dialog-footer">
	    <el-button @click="addDlg = false">取 消</el-button>
	    <!-- <el-button type="primary" @click="addPro">确 定</el-button> -->
		 <el-button v-if='(dlgTitle==="添加项目")' type="primary" @click="addPro">确 定</el-button>
		 <el-button v-else type="primary" @click="updatePro">提交修改</el-button>
		 
	  </div>
	</el-dialog>
	
</template>

<script>
	import { ElMessage, ElMessageBox } from 'element-plus'
	// 导入映射方法的函数mapActions
	import { mapActions } from 'pinia'
	import { userStore } from '../store/user.js'
	
	export default{
		data(){
			return{
				//项目列表信息
				projectList:[
					
				],
				// 添加项目的弹框是否显示
				addDlg:false,
				addForm:{
					name:"",
					leader:""
				},
				// 弹框的标题
				dlgTitle:"添加项目"
			}
		},
		methods:{
			// 退出登录
			// logout(){
			// 	//清除token和用户名
			// 	window.sessionStorage.removeItem('token')
			// 	window.sessionStorage.removeItem('username')
			// 	//跳转到登录页面
			// 	this.$router.push({name:'login'})	
			// },

			// 将全局定义的logout方法,映射为当前组件的logout方法
			...mapActions(userStore,['logout','savePro']),

			// 通过接口获取后端所有的项目
			async getAllProject(){
				const response= await this.$api.getAllProjects()
				if(response.status===200){
					console.log(response.data)
					// 将获取到的项目信息保存到data中
					this.projectList=response.data
				}
			},
			// 调用接口删除项目
			async deletePro(proId){
				//发送接口请求
				const response = await this.$api.delProject(proId)
				if(response.status===204){
					//更新页面的数据
					this.getAllProject()
					//提示删除成功
					this.$message({
					  type: 'success',
					  message: '删除成功!'
					})
				}
			},
			
			// 点击删除项目
			clickDelete(id){
				this.$confirm('此操作不可恢复,确定要删除吗?', {
				          confirmButtonText: '确定',
				          cancelButtonText: '取消',
				          type: 'warning'
				        }).then(() => {
							// 调用删除的接口
							this.deletePro(id)

						  // 取消操作 -->
				        }).catch(() => {
				          this.$message({
				            type: 'info',
				            message: '已取消删除'
				          });          
				        });
			},
			// 添加项目
			async addPro(){
				// 发送请求
				const response=await this.$api.createProject(this.addForm)
				if(response.status===201){
					//更新页面的数据
					this.getAllProject()
					// 关闭窗口
					this.addDlg=false
					this.$message({
					  type: 'success',
					  message: '添加成功!'
					})
				}
			},
			// 点击编辑执行 的方法
			clickEdit(pro){
				// 修改title
				this.dlgTitle='编辑项目'
				// 将项目信息赋值给addForm
				this.addForm={...pro}
				// 显示编辑框
				this.addDlg=true
			},
			// 点击添加项目
			clickAdd(){
				this.dlgTitle='添加项目'
				// 将项目信息addForm置空
				this.addForm={
					name:'',
					leader:''
				}
				// 展示弹窗
				this.addDlg=true
			},
			// 发送请求,修改编辑后的项目信息
			async updatePro(){
				const id=this.addForm.id
				const params={
					leader:this.addForm.leader,
					name:this.addForm.name
				}
				const response=await this.$api.updateProject(id,params)
				if(response.status===200){
					//更新页面的数据
					this.getAllProject()
					// 提示
					this.$message({
					  type: 'success',
					  message: '修改成功!'
					})
				}
				// 关闭窗口
				this.addDlg=false
			},
			// 选择进入的项目
			selectPro(pro){
				this.$router.push({name:"home"})
				console.log(666)
				// 将项目信息保存到vue的全局数据存储仓库
				this.savePro(pro)
			}
			
		},
		// 钩子函数,最先执行的方法
		created(){
			
			this.getAllProject()
		}
	}
</script>

<style scoped>
	/* ----------------顶部样式--------------------- */
	/* 整体盒子 */
	.pros_box{
		max-width: 1480px;
		margin: 30px auto;
	}
	/* 顶部盒子 */
	.top_box{
		border-bottom: solid 5px green;
		height: 40px;
		font: bold 20px/40px '微软雅黑';
		color: #00aa7f;
		margin: 20px auto;
	}
	/* 顶部按钮 */
	.top_box .el-button{
		float: right;
		margin-left: 10px;
	}
	
	
	/* ------------------项目列表样式-------------------------- */
	
	.pro{
		width: 200px;
		height: 250px;
		margin: 20px;
		float: left;
	}
	/* 项目中图标样式 */
	.pro .pro_icon{
		width: 80px;
		height: 80px;
		border-radius: 40px;
		background: #e1ffed;
		color: #00aa7f;
		font: normal 30px/60px '微软雅黑';
		text-align: center;
		margin: 0 auto;
	}
	/* 项目名称的样式 */
	.pro .pro_name{
		text-align: center;
		margin-top: 20px;
		font: bold 18px/40px '微软雅黑';
	}
	/* 负责人的样式 */
	.pro .pro_leader{
		text-align: center;
		color: blue;
		font: normal 12px/20px '微软雅黑';	
	}
	/* 按钮区域的样式 */
	.pro .btns{
		margin-top: 30px;
	}
	.pro .btns .edit{
		float: left;
	}
	.pro .btns .del{
		float: right;
	}
	/*添加的盒子样式*/
	.pro .add_pro{
		text-align: center;
		height: 250px;
		line-height: 250px;
		color: #d3d4d3;
	}
	
	
	
	
	
</style>

index.js路由设置

const routes = [

  {
    path: '/',
    name: 'index',
    redirect:{name:"login"}
  },
  {
    path: '/user/login',
    name: 'login',
    component: () => import('../views/Login.vue')
  },
  {
    path: '/allProject',
    name: 'allProject',
    component: () => import('../views/AllProject.vue')
  },
  {
    path: '/home',
    name: 'home',
    component: () => import('../views/Home.vue')

  },
]

十三:鼠标放上指定的位置变成手,点击进入home页面

在这里插入图片描述
用大的div包起来

<!-- 单个项目显示在一个el-card -->
<el-card class="pro" v-for="pro in projectList" :key='pro.id'>
  
  <div style="cursor: pointer;" @click="selectPro(pro)">
	  <!-- 图标 -->
	  <div class="pro_icon">
	  				  <el-icon><Platform /></el-icon>
	  </div>
	  <!-- 项目名称 -->
	  <div class="pro_name">
	  				<span v-if="pro.name.length<8">{{pro.name}}</span>
	  				<el-tooltip v-else class="item" effect="dark" v-bind:content=pro.name placement="top-start">
	  						{{pro.name.slice(0,8)}}...
	  				</el-tooltip>
	  </div>
	  
	  <!-- 项目负责人 -->
	  <div class="pro_leader">
	  				  <span v-if="pro.leader.length<8">{{pro.leader}}</span>
	  				  <el-tooltip v-else class="item" effect="dark" v-bind:content=pro.leader placement="top-start">
	  				  		{{pro.leader.slice(0,8)}}...
	  				  </el-tooltip>
	  </div>
  </div>
  
  <!-- 按钮 -->
  <div class="btns">
	  <el-button @click="clickEdit(pro)"  color="#d9d9d9" class="edit" size="small" icon="Edit">编辑</el-button>
	  <el-button color="#F5F5DC" class="del" size="small" icon="Delete" @click="clickDelete(pro.id)">删除</el-button>
  </div>

</el-card>

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

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

相关文章

一文详解动态链表和静态链表的区别

1、引言 本文主要是对动态链表和静态链表的区别进行原理上的讲解分析&#xff0c;先通过对顺序表和动态链表概念和特点的原理性介绍&#xff0c;进而引申出静态链表的作用&#xff0c;以及其概念。通过这些原理性的概述&#xff0c;最后总结归纳出动态链表和静态链表的区别。本…

vector的介绍以及使用方式

目录 前言 1.vector的介绍 2.构造函数 3.迭代器 4.vector空间增长问题 5.vector的增删改查 6.vector迭代器失效问题 总结 前言 即我们的string之后&#xff0c;今天小编给大家要介绍一个我们stl中另外一个常用的容器vector&#xff0c;和我们的string一样我们的vector…

Vue中如何进行分布式任务调度与定时任务管理

在Vue中进行分布式任务调度与定时任务管理 分布式任务调度和定时任务管理是许多应用程序中的关键功能之一。它们用于执行周期性的、异步的、重复的任务&#xff0c;例如数据备份、邮件发送、定时报告生成等。在Vue.js应用中&#xff0c;我们可以结合后端服务实现分布式任务调度…

浏览器技巧:谷歌浏览器六个实用设置小技巧,值得收藏

目录 1、确保你的浏览器启用标准保护选项 2、使用安全DNS&#xff08;DNS over HTTPS&#xff09; 3、网站通知修改为"静态指示方式" 4、启用页面预加载提升网页加载速度 5、阻止Chrome浏览器在后台运行 6. 更改 Chrome 启动后打开方式为"上次打开的网页&…

javaWeb超市订单管理系统

一、引言 超市管理系统(smbms)作为每个计算机专业的大学生都是一个很好的练手项目&#xff0c;逻辑层次分明&#xff0c;基础功能包括用户的登录和注销&#xff0c;用户和供应商以及订单信息的增删查改的基础功能。可以帮助我们更好的加深理解三层架构的理念&#xff0c;本项目…

复习 --- QT服务器客户端

服务器&#xff1a; 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> #include<QTcpSocket> #include<QMessageBox> #include<QDebug> #include<QList> #include<QListWidget> #in…

电脑数据恢复怎么操作?电脑数据恢复难点是什么

随着电脑在我们日常生活中的普及&#xff0c;数据的重要性不言而喻。然而&#xff0c;在某些情况下&#xff0c;我们可能会不小心删除或因其他原因导致丢失了重要的电脑数据&#xff0c;这时候就需要进行数据恢复操作。下面我们一起来了解下电脑数据恢复的操作方法&#xff0c;…

【全3D打印坦克——基于Arduino履带式机器人】

【全3D打印坦克——基于Arduino履带式机器人】 1. 概述2. 设计机器人平台3. 3D 模型和 STL 下载文件3.1 3D打印3.2 组装 3D 打印坦克 – 履带式机器人平台3.3 零件清单 4. 机器人平台电路图4.1 定制电路板设计4.2 完成 3D 打印储罐组件 5. 机器人平台编程6. 测试3D打印机器人 -…

侯捷 C++ STL标准库和泛型编程【C++学习笔记】 超详细 万字笔记总结 笔记合集

关于STL这部分&#xff0c;原课程将其分为了四部分&#xff0c;我做笔记时&#xff0c;会将其整合&#xff0c;使其更具有整体性 文章目录 1 STL概述1.1 头文件名称1.2 STL基础介绍1.3 typename 2 OOP vs. GP3 容器3.1 容器结构分类3.2 序列式容器3.2.1 array测试深度探索 3.2.…

Python3操作MongoDb7最新版创建文档及CRUD基本操作

Python3中类的高级语法及实战 Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案 Python3数据科学包系列(一):数据分析实战 Python3数据科学包系列(二):数据分析实战 Python3数据科学包系列(三):数据分析实战 MongoDB 操作手册----文档…

Zookeeper经典应用场景实战(一)

文章目录 1、Zookeeper Java客户端实战1.1、 Zookeeper 原生Java客户端使用1.2、 Curator开源客户端使用 2、 Zookeeper在分布式命名服务中的实战2.1、 分布式API目录2.2、 分布式节点的命名2.3、 分布式的ID生成器 3、Zookeeper实现分布式队列3.1、 设计思路3.2、 使用Apache …

电脑桌面黑屏,但程序还可以正常运行

问题&#xff1a;桌面黑屏&#xff0c;程序可以正常运行操作 解决方法: 1.Ctrl Alt Del 2.点击 【任务管理器】-->【文件F】-->【运行新任务N】 3.输入 explorer.exe 回车

Docker 镜像的缓存特性

Author&#xff1a;rab 目录 前言一、构建缓存二、Pull 缓存总结 前言 首先我们要清楚&#xff0c;Docker 的镜像结构是分层的&#xff0c;镜像本身是只读的&#xff08;不管任何一层&#xff09;&#xff0c;当我们基于某镜像运行一个容器时&#xff0c;会有一个新的可写层被…

Spring的AOP开发-注解方式开发AOP

基于注解配置的AOP 注解方式AOP的基本使用 Spring的AOP也提供了注解方式配置&#xff0c;使用相应的注解替代之前的xml配置&#xff0c;xml配置AOP时&#xff0c;我们主要配置了三部分&#xff1a;目标类被Spring容器管理&#xff08;注解使用Service&#xff09;、通知类被S…

图像和视频上传平台Share Me

本文完成于 6 月&#xff0c;所以反代中&#xff0c;域名演示还是使用的 laosu.ml&#xff0c;不过版本并没有什么变化&#xff1b; 什么是 Share Me &#xff1f; Share Me 是使用 Next.js 和 PocketBase 的自托管图像和视频上传平台&#xff0c;具有丰富的嵌入支持和 API&…

基于Java的高校宿舍管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

【C++】unordered_map和unordered_set

哈希表 1. unordered_map1.1 概念1.2 常见接口 2. unordered_set2.1 概念2.1 常见接口 3. 底层实现3.1 哈希3.2 哈希函数3.3 闭散列和开散列3.3.1 闭散列3.3.2 开散列 3.4 模拟实现3.4.1 改造哈希桶3.4.2 模拟实现unordered_set3.4.3 模拟实现unordered_map 在C11中&#xff0c…

Promise, async, await 学习

异步编程简介&#xff1a; 介绍&#xff1a;异步编程是一种编程范式&#xff0c;旨在提高程序的性能和响应能力。该模型允许程序在执行某些任务时&#xff0c;不必等待这些任务完成就可以进行下一步操作&#xff0c;从而提高了程序的效率。 作用&#xff1a;异步编程通常用于…

IPT2602协议-USB 快速充电端口控制器

产品描述&#xff1a; IPT2602是一款USB端口快速充电协议控制芯片。IPT2602智能识别多种快速充电协议&#xff0c;对手机等受电设备进行快速充电。IPT2602根据受电设备发送的电压请求能够精确的调整VBUS输出电压&#xff0c;从而实现快速充电。 IPT2602在调整5V输出电压前会自动…

10.5 认识XEDParse汇编引擎

XEDParse 是一款开源的x86指令编码库&#xff0c;该库用于将MASM语法的汇编指令级转换为对等的机器码&#xff0c;并以XED格式输出&#xff0c;目前该库支持x86、x64平台下的汇编编码&#xff0c;XEDParse的特点是高效、准确、易于使用&#xff0c;它可以良好地处理各种类型的指…