【JavaScript】循环div,点击选中和取消某一项

一. 选中取消(传参)

  1. 选中
    在这里插入图片描述
  2. 取消选中
    在这里插入图片描述
  3. 实现
<template>
    <div class="qualitityIssues">
        <div style="display: flex;">
            <div class="course-area">
                <div :class="checkoutIndex == index ? 'course-name' : 'course-name-active'"
                    v-for="(item, index) in courseList" :key="item.id" @click="handleCourse(index, item.id)">
                    <div :class="checkoutIndex == index ? 'course-flag' : 'course-flag-active'"></div>
                    <div :class="checkoutIndex == index ? 'course-title' : 'course-title-active'">{{ item.dictValue
                    }}</div>
                </div>
            </div>
            <div class="course-content-area" v-loading="listLoading">
                <div class="course-document" v-for="(item, index) in list" :key="index">
                    <div class="course-content">
                        <div class="tag-area">
                            <span class="course-tag" v-show="item.sourceClassifyName != ''"
                                v-for="( tag, index ) in  item.sourceClassifyName.split(',').slice(0, 3)" :key="index">{{
                                    tag
                                }}</span>
                        </div>
                        <div class="course-time">
                            {{ item.createTime }}
                        </div>
                    </div>
                    <div class="course-document-name" @click="handleDetail(item.id)">
                        {{ item.title }}
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>
<script>
import { getCourseTree} from "@/api/xxx"
import { getList } from "@/api/xxx"
export default {
    data() {
        return {
            courseList: [],
            checkoutIndex: null,
            list: [],
            query: {
            	tagA:''
            },
            pageForm: {
                current: 1,
                size: 10,
                total: 0
            },
            listLoading: false,
            count: 0
        }
    },
    mounted() {
        getCourseTree().then(res => {
            this.courseList = res.data
        })
        this.fetchData()
    },
    methods: {
        /**
         * 选中标签项
         * @param {Int} index 
         * @param {Object} item 
         */
        handleCourse(index, tagA) {
            if (this.checkoutIndex == index) {
                this.checkoutIndex = null
                this.query.tagA = ''
            } else {
                this.checkoutIndex = index
                this.query.tagA = tagA
            }
            this.fetchData()
        },

        /**
         * 初始化质量课题列表数据
         */
        fetchData() {
            this.listLoading = true;
            getList(this.pageForm.current, this.pageForm.size, this.query).then(res => {
                if (res.success) {
                	// 仅显示前十条
                    this.list = res.data.slice(0, 10)
                    this.listLoading = false
                }
            })
        },

        /**
         * 点击跳转到详情页
         * @param {Int} id 
         */
        handleDetail(id) {
            this.$router.push({
                path: `/pageDetail/${id}`
            })
        },
    }
}
</script>
<style scoped lang="less">
.qualitityIssues {
    margin: 24px 0;
    background-color: #fff;
    padding: 24px;
    border-radius: 10px;

    .title {
        display: flex;
        justify-content: center;
        align-items: flex-start;
        gap: 10px;
        color: #333;
        text-shadow: 0px 4px 0px rgba(0, 0, 0, 0.05);
        font-family: "Source Han Sans CN";
        font-size: 20px;
        font-style: normal;
        font-weight: 700;
        line-height: 24px;
        margin-bottom: 24px;
    }

    .course-area {
        border-radius: 10px 0px 0px 10px;
        background: linear-gradient(166deg, #3C61E6 5.57%, #023EB4 95.34%);
        padding: 16px;
        gap: 12px;
        display: flex;
        flex-direction: column;
        align-items: flex-start;
        width: 219px;
        min-height: 664px;

        .course-name {
            border-radius: 5px;
            background: #FFF;
            display: flex;
            padding: 8px 16px;
            align-items: center;
            gap: 8px;
            align-self: stretch;
            cursor: pointer;

            .course-flag {
                border-radius: 4px;
                background: linear-gradient(180deg, #046AF9 0%, rgba(4, 106, 249, 0.00) 100%);
                width: 3px;
                height: 16px;
            }

            .course-title {
                color: #023FB5;
                font-family: "Source Han Sans CN";
                font-size: 16px;
                font-style: normal;
                font-weight: 700;
                line-height: 24px;
                overflow: hidden;
                text-overflow: ellipsis;
                max-width: 144px;
                text-wrap: nowrap;
            }
        }

        .course-name-active {
            display: flex;
            padding: 8px 16px;
            align-items: center;
            gap: 8px;
            align-self: stretch;
            cursor: pointer;

            .course-flag-active {
                border-radius: 4px;
                background: #FFF;
                width: 3px;
                height: 16px;
            }

            .course-title-active {
                color: #FFF;
                font-family: "Source Han Sans CN";
                font-size: 16px;
                font-style: normal;
                font-weight: 500;
                line-height: 24px;
                overflow: hidden;
                text-overflow: ellipsis;
                max-width: 144px;
                text-wrap: nowrap;
            }
        }
    }

    .course-content-area {
        margin-left: 16px;
        min-width: 740px;

        .course-document {
            border-bottom: 1px dotted #EEE;

            .course-content {
                display: flex;
                justify-content: space-between;

                .tag-area {
                    .course-tag {
                        border-radius: 20px;
                        border: 1px solid #F46924;
                        display: inline-block;
                        padding: 0px 12px;
                        color: #F46924;
                        font-family: "Source Han Sans CN";
                        font-size: 12px;
                        font-style: normal;
                        font-weight: 350;
                        line-height: 24px;
                        margin-right: 12px;
                    }
                }

                .course-time {
                    color: #CCC;
                    text-align: right;
                    font-family: "Source Han Sans CN";
                    font-size: 14px;
                    font-style: normal;
                    font-weight: 350;
                    line-height: 24px;
                }
            }

            .course-document-name {
                color: #666;
                font-family: "Source Han Sans CN";
                font-size: 16px;
                font-style: normal;
                font-weight: 500;
                line-height: 24px;
                margin: 8px 0 12px 0;
                text-wrap: nowrap;
                overflow: hidden;
                text-overflow: ellipsis;
                max-width: 740px;
            }

            .course-document-name:hover {
                color: #023EB4;
                cursor: pointer;
            }
        }

        .course-document:not(:first-child) {
            margin: 24px 0;
        }
    }
}
</style>
  1. 数据结构
courseList:[
	{
		id:"1",
		dictValue:"质量创新"
	},
	{
		id:"2",
		dictValue:"六西格玛项目"
	},	
]

list:[
	{
		id:"1",
		title:"",
		sourceClassifyName:"标准,政策",
		createTime:""
	},
	{
		id:"2",
		title:"",
		sourceClassifyName:"标准,政策",
		createTime:""		
	}
]

二. 选中取消(展示选中标签项)

  1. 选中
    在这里插入图片描述

  2. 取消
    在这里插入图片描述

  3. 实现

<template>
	<div>
		<div>
			<!-- 展示选中项 -->
			<div class="search-tag" v-for="item in checkedTags" :key="item.id">
            	<span>{{ item.dictValue }}</span>
            </div>
			<!-- 标签区域 -->
        	<div class="tags-area">
            	<div class="tags-content">
                	<div v-for="( item, index )  in  allTagList " :key="index" class="tag-area">
                    	<div>
                        	<span class="tag-icon"></span>
                        	<span class="tag-title">{{ item.dictValue }}</span>
                    	</div>
                    	<div class="tag-value">
                        	<div v-for="( children, childrenIndex ) in  item.children " :key="children.id" :class="children.flag ? 'tag-name-active' : 'tag-name'" @click="clickTag(index, childrenIndex, children)">
                            	<span style="display: flex;align-items: center;">
                                	{{ children.dictValue }}
                            	</span>
                        	</div>
                    	</div>
                	</div>
            	</div>
        	</div>
		</div
	</div>
</template>

<script>
import { getTagTree } from "@/api/dictbiz";
export default {
	data(){
		return{
			checkedTags: [], // 已选标签项
            allTagList: [], // 所有标签项
		}
	},
	methods:{
		/**
		* 初始化所有分类标签项
		**/
		fetchData(){
			getTagTree().then(res => {
                if (res.success) {
                    this.allTagList = res.data;
                }
            })
		},

		/**
         * 选择标签项
         * @param {Int} 父级index 
         * @param {Int} 子级index 
         * @param {Object} item 选中项
         */
        clickTag(index, i, item) {
            let list = this.allTagList;
            let flag = !list[index].children[i].flag;
            this.$set(this.allTagList[index].children[i], "flag", flag);
            if (flag) {
                this.checkedTags.push(item);
            } else {
                this.handleClose(item);
            }
        },

        /**
         * 删除标签
         ** 
         */
        handleClose(item) {
            let index = this.checkedTags.findIndex((e) => e.id == item.id);
            this.allTagList.forEach((e) => {
                let itemIndex = e.children.findIndex((i) => i.id == item.id);
                if (itemIndex != -1) {
                    e.children[itemIndex].flag = false;
                    this.checkedTags.splice(index, 1);
                }
            });
        },

	}
}
</script>

<style lang="less" scoped>
.tags-area {
    padding: 14px 48px;
    min-height: 272px;
    background-color: #fff;
    
    .tags-content {
    	display: flex;
    	justify-content: space-between;
    	padding: 8px 0;
	
		.tag-area{
			.tag-icon {
    			display: inline-block;
    			width: 4px;
    			height: 16px;
    			border-radius: 2px;
    			background: #023FB5;
   				margin-right: 8px;
			}
			
			.tag-title {
    			color: #023FB5;
    			font-family: "Source Han Sans CN";
    			font-size: 18px;
    			font-style: normal;
    			font-weight: 700;
    			line-height: 16px;
			}

			.tag-value {
    			display: flex;
    			flex-wrap: wrap;

				.tag-name {
    				color: #023FB5;
    				font-family: "Source Han Sans CN";
    				font-size: 16px;
    				font-style: normal;
    				font-weight: 400;
    				line-height: normal;
    				border-radius: 5px;
    				padding: 4px 12px;
    				margin: 12px 12px 0 0;
    				border: 1px solid rgba(52, 93, 223, 0.30);
    				cursor: pointer;
				}

				.tag-name-active {
    				color: #FFF;
    				font-family: "Source Han Sans CN";
    				font-size: 16px;
    				font-style: normal;
    				font-weight: 400;
    				line-height: normal;
    				border-radius: 5px;
    				padding: 4px 12px;
    				margin: 12px 12px 0 0;
    				background: linear-gradient(166deg, #3C61E6 5.57%, #023EB4 95.34%);
    				cursor: pointer;
    				border: 1px solid transparent;
				}
			}
		}
		
		.tag-area:first-child {
    		min-width: 468px;
		}

		.tag-area:not(:last-child) {
    		margin-right: 28px;
		}
	}
}
</style>
  1. 数据结构
allTagList:[
	{
		id:"1",
		dictValue:"分类一",
		children:[
			{	
				id:"1712717305748391111",
				dictValue: "可靠性项目",
				parentId:"1",
				code:"kind_1"
				sort:0
			},
			{	
				id:"1712717305748393985",
				dictValue: "服务创新",
				parentId:"1",
				code:"kind_1"
				sort:1
			}
		]
		sort:0,
		code:"kind_1"
	},
	{
		id:"2",
		dictValue:"分类二",
		children:[
			{	
				id:"1712717305748392222",
				dictValue: "落实双碳",
				parentId:"2",
				code:"kind_2"
				sort:0
			},
		]
		sort:1,
		code:"kind_2"
	}	

]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

流星蝴蝶剑之七夜听雪中文版下载

软件介绍&#xff1a; 中文名称: 流星蝴蝶剑七夜听雪 英文名称: Meteor 游戏类型: 3D武侠格斗 发行时间: 2002年08月 制作发行: 流星江湖悠悠客栈 语言 :中文 配置要求: 操作系统&#xff1a;Windows 95 / 98 / Me / 2000 / XP 最低配置 CPU&#xff1a;Pentium II 450MHz 以上…

Shiro-04-shiro 详细架构

详细架构 下图显示了Shiro的核心架构概念&#xff0c;并简要概述了每个架构&#xff1a; 下面我们对除了核心组件的部分做一下简单的介绍&#xff1a; Authentication&#xff08;身份验证&#xff09; 身份验证是验证用户身份的过程。 也就是说&#xff0c;当用户通过应用…

基于Python3的数据结构与算法 - 01 复杂度和列表查找

一、时间复杂度 定义&#xff1a;用来评估算法运行效率的一个式子。 例如&#xff1a;此处的O(1) 详单与一个时间单位 接下来我们看下面两个式子&#xff1a; 如果按照上面的定义&#xff0c;那么打印三次相当O(3)&#xff0c;下面的循环相当于O(n21) 但是实际不是这样的 因…

KUKA库卡机器人编程语言是什么?

KUKA库卡机器人的编程语言主要是KUKA Robot Language&#xff08;简称KRL&#xff09;。KRL是库卡机器人专门为其机器人系统设计的编程语言&#xff0c;用于编写和控制KUKA工业机器人的运动和操作。KRL结合了指令式编程和结构化编程的特点&#xff0c;具有一定的易学性和灵活性…

软考29-上午题-排序

一、排序的基本概念 1-1、稳定性 稳定性指的是相同的数据所在的位置经过排序后是否发生变化。若是排序后&#xff0c;次序不变&#xff0c;则是稳定的。 1-2、归位 每一趟排序能确定一个元素的最终位置。 1-3、内部排序 排序记录全部存放在内存中进行排序的过程。 1-4、外部…

微信小程序之开发会议OA项目

目录 前言 本篇目标 首页 会议 投票 个人中心 会议OA项目-首页 配置 tabbar mock工具 page swiper 会议信息 会议OA项目-会议 自定义tabs组件 会议管理 会议OA项目-投票 会议OA项目-个人中心 前言 文章含源码资源&#xff0c;投票及个人中心详细自行查看…

【Python如何求出斐波那契数列】

1、斐波那契python代码如下&#xff1a; # python如何求斐波那契数列 def fib(num): # 用来求出第num个的斐波那契数列的值if num 0 or num 1:return 1else:num fib(num - 1) fib(num - 2)return num def fiblist(n): # 用来求出前n个值的斐波那契数列fb_list []for i …

单向/双向V2G环境下分布式电源与电动汽车充电站联合配置方法(matlab代码)

目录 1 主要内容 目标函数 电动汽车负荷建模 算例系统图 程序亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现博士文章《互动环境下分布式电源与电动汽车充电站的优化配置方法研究》第五章《单向/双向V2G环境下分布式电源与电动汽车充电站联合配置方法》…

PMBus > SMBus > I2C 关系解析

一、SMBUS SMBus 全称 System Management Bus&#xff0c;即系统管理总线。一种基于I2C而扩展出来的协议&#xff0c;是 I2C 协议的一个子集。但SMBus 要求更严格&#xff0c;规定了更多细节与规范。有一些更为复杂的操作&#xff0c;但是原理都还是基于I2C。 SMBus 为系统和电…

05.QT坐标系

1. 坐标系原点 坐标系原点就是屏幕/窗口的左上角&#xff0c;X向右增长&#xff0c;Y向下增长。 2.设置控件位置 设置控件位置&#xff0c;就相当于是需要指定控件的坐标&#xff0c;对于该控件来说&#xff0c;其坐标原点是其父窗口/父控件的左上角。 设置方法就是通过控件的…

8.可观测性

可观测性 readinessProbe 就绪探针 Pod生命周期有几个不同阶段,Pod会有不同的状态。 刚创建Pod时,Pod处于Pending状态&#xff61;调度程序会尝试找出放置Pod的位置&#xff61;如果调度程序找不到要放置Pod的节点,它将保持Pending状态&#xff61; 运行kubectl describe po…

【DBeaver+mysql】如何在DBeaver中创建mysql服务的连接并新建数据库

一、创建步骤 1、下载安装mysql 8.0&#xff08;注意&#xff0c;安装过程会启动mysql服务&#xff0c;这才是能用命令行执行node处理sql语句的关键&#xff09; 下载地址&#xff1a;https://dev.mysql.com/downloads/file/?id526407 2、下载安装DBeaver数据库管理IDE 3、在…

循环队列|超详细|数据结构学习讲解与笔记

队列元素先进先出队列只允许在线性表的一端进行操作&#xff0c;是一种操作受限的线性表 队列的基本操作 InItQueue(&Q)初始化队列&#xff0c;构造一个空队列 QEmptyQueue(Q)队列判空FullQueue(Q)队列判满EnQueue(&Q , x)入队操作DeQueue(&Q , &x)出队操作G…

铌酸锂芯片与精密划片机:科技突破引领半导体制造新潮流

在当今快速发展的半导体行业中&#xff0c;一种结合了铌酸锂芯片与精密划片机的创新技术正在崭露头角。这种技术不仅引领着半导体制造领域的进步&#xff0c;更为其他产业带来了前所未有的变革。 铌酸锂芯片是一种新型的微电子芯片&#xff0c;它使用铌酸锂作为基底材料&#x…

HTTP/1.1 如何优化?

问你一句:「你知道 HTTP/1.1 该如何优化吗?」 我们可以从下面这三种优化思路来优化 HTTP/1.1 协议: 尽量避免发送 HTTP 请求在需要发送 HTTP 请求时&#xff0c;考虑如何减少请求次数减少服务器的 HTTP 响应的数据大小 下面&#xff0c;就针对这三种思路具体看看有哪些优化…

【代码移植】UNIX/Linux/POSIX代码程序移植到Windows系统平台技术汇总与经验分享

​ 图片来源 UNIX (Linux) to Windows代码移植技术路线 MinGW MinGW/MinGW-W64是用Windows原生系统API实现的&#xff0c;在Windows上运行的GCC编译工具链&#xff0c;可以编译出Windows原生应用程序。 MinGW编译工具链的生态位和微软官方的MSVC类似。 优点 MinGW编译出…

(每日持续更新)jdk api之ObjectInputValidation基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

fish终端下conda activate失败

【问题】fish终端下激活conda环境报错&#xff1a; >> conda activate base CondaError: Run conda init before conda activate ## 然而运行 conda init fish 仍旧无法解决【解决】 参考&#xff1a;https://github.com/conda/conda/issues/11079 方法一&#xf…

SQL-Labs靶场“1-5”关通关教程

君衍. 一、准备工作二、第一关 基于GET单引号字符型注入1、源码分析2、联合查询注入过程 三、第二关 基于GET整型注入1、源码分析2、联合查询注入过程 四、第三关 基于GET单引号变形注入1、源码分析2、联合查询注入过程 五、第四关 基于GET双引号字符型注入1、源码分析2、联合查…

JDBC核心技术

第1章 JDBC概述 第2章 获取数据库连接 第3章 使用PreparedStatement实现CRUD操作 第4章 操作BLOB类型字段 第5章 批量插入 第6章 数据库事务 第7章 DAO及相关实现类 第8章 数据库连接池 第9章 Apache-DBUtils实现CRUD操作图像 小部件