记录一个vue编辑的移动端页面

<template>
  <div class="wrap">
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="120px">

      <el-form-item label="班级" prop="classId" required style="width: 100%;">
        <template v-if="oroles == 'teacher_director'">
          <el-select v-model="queryParams.classId" placeholder="请选择班级" @change="seletChange">
            <el-option v-for="item in classList" :key="item.deptId" :label="item.deptName" :value="item.deptId">
            </el-option>
          </el-select>
        </template>
        <template v-else>
          <div>{{ classList[0] ? classList[0].deptName : '' }}</div>
        </template>
      </el-form-item> 

      <el-form-item label="选择学生" prop="student" required>
        <el-button size="mini" @click="openStudent">点击选择</el-button>
        <div class="checked-student" v-if="checkedStudent">
          <!-- <el-image style="width: 60px; height: 60px; border-radius: 50%;" :src="checkedStudent.headUrl" fit="cover"></el-image> -->
          <div class="student-mes">
            <div class="d1">{{ checkedStudent.number }}号</div>
            <!-- <div class="d2">{{ checkedStudent.name }}</div> -->
          </div>
        </div>
      </el-form-item>

      <el-form-item label="性别" prop="sex">
        <el-radio v-model="queryParams.sex" label="0">男</el-radio>
        <el-radio v-model="queryParams.sex" label="1">女</el-radio>
      </el-form-item>

      <el-form-item label="生日" prop="birthday">
        <el-date-picker clearable v-model="queryParams.birthday" type="date" value-format="yyyy-MM-dd" placeholder="请选择生日">
        </el-date-picker>
      </el-form-item>      
                
      <el-form-item label="身高" prop="height">
        <div class="input-wrap">
          <el-input type="number" oninput="if(value.length>5)value=value.slice(0,5)" v-model="queryParams.height" placeholder="请输入身高" />
          <div class="d1">(cm)</div>
        </div>
      </el-form-item>
      <el-form-item label="体重" prop="weight">
        <div class="input-wrap">
          <el-input type="number" oninput="if(value.length>5)value=value.slice(0,5)" v-model="queryParams.weight" placeholder="请输入体重" />
          <div class="d1">(kg)</div>
        </div>    
      </el-form-item>
      
      <el-form-item label="坐位体前屈" prop="flexibility">
        <div class="input-wrap">
          <el-input type="number" oninput="if(value.length>5)value=value.slice(0,5)" v-model="queryParams.flexibility" placeholder="请输入" />
          <div class="d1">(cm)</div>
        </div>          
      </el-form-item>

      <el-form-item label="立定跳远" prop="downStrength">
        <div class="input-wrap">
          <el-input type="number" oninput="if(value.length>5)value=value.slice(0,5)" v-model="queryParams.downStrength" placeholder="请输入" />
          <div class="d1">(cm)</div>
        </div>        
      </el-form-item>
      <el-form-item :label="physicalVersion == '2' ? '握力' : '网球掷远'" prop="upStrength">
        <div class="input-wrap">
          <el-input type="number" oninput="if(value.length>5)value=value.slice(0,5)" v-model="queryParams.upStrength" placeholder="请输入" />
          <div class="d1">{{ physicalVersion == '2' ? '(kg)' : '(m)' }}</div>
        </div>          
      </el-form-item>
      
      <el-form-item label="平衡木" prop="balance"> 
        <div class="input-wrap">
          <el-input type="number" oninput="if(value.length>5)value=value.slice(0,5)" v-model="queryParams.balance" placeholder="请输入" /> 
          <div class="d1">(s)</div>
        </div>         
      </el-form-item>

      <el-form-item label="双脚连跳" prop="coordination"> 
        <div class="input-wrap">
          <el-input type="number" oninput="if(value.length>5)value=value.slice(0,5)" v-model="queryParams.coordination" placeholder="请输入" /> 
          <div class="d1">(s)</div>
        </div>        
      </el-form-item>

      <el-form-item :label="physicalVersion == '2' ? '15米绕障碍跑' : '10米折返跑'" prop="sensitivity"> 
        <div class="input-wrap">
          <el-input type="number" oninput="if(value.length>5)value=value.slice(0,5)" v-model="queryParams.sensitivity" placeholder="请输入" /> 
          <div class="d1">{{ physicalVersion == '2' ? '(s)' : '(s)' }}</div>
        </div>         
      </el-form-item>
      
      <el-form-item label=" " prop="" size="medium">
        <div class="pop-footer">
          <div class="b1" @click="prev">返回</div>
          <div class="b2" @click="save">保存</div>
        </div>
      </el-form-item>   
    </el-form>
            
    <div class="mask" v-if="open"></div>
    <!-- 选择学生 -->
    <div class="pop-box" v-if="open">
      <div class="student-header">
        <div class="d1">请选择学生</div>
        <div class="close-wrap" @click="cancel">
          <i class="el-icon-close"></i>
        </div>
      </div>
      <div class="student-main">

        <div class="student-list" v-for="(item,index) in reportRecordDetailList" :key="item.id" @click="studentHandle(index)">          
          <div class="img-wrap">
            <img src="@/assets/images/complet.png" class="icon-complet" v-if="item.status == 1" />
            <!-- <i class="el-icon-success" v-if="item.checked"></i> -->
          </div>
          <div class="student-mes" :class="{ active: item.checked }">
            <div class="d1">{{ item.number }}号</div>
          </div>
        </div>        

      </div>
    </div>

  </div>
</template>

<script>
import { listDeptAll,listReportRecordDetail, getReportRecordDetail, delReportRecordDetail, addReportRecordDetail, updateReportRecordDetail } from "@/api/school/reportRecordDetail";
import { listDept } from "@/api/system/dept";

export default {
  metaInfo() {
    return {
      title: this.PageTitle,
      titleTemplate: null,//不加这个会有个默认的后缀
      meta: [
        {
          name: "viewport",
          content: 'width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no',
        },
      ],
    };
  },

  // metaInfo: {
  //   //title: '详情页',
  //   meta: [
  //     { charset: 'utf-8' },
  //     { name: 'viewport', content: 'width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no' }
  //   ]
  // },
  name: "ReportRecordDetail",
  data() {
    return {
      // 班级数据
      classList: [],
      queryParams: {
        classId: null,        
        recordId: null,//上级目录id
        id: null,//学生列表里的id(修改则必填 新增的时候没有id)
        sid: null,//选中的学生id
        sex: null,//性别 2是未知 0男 1女
        birthday: null,   
        height: null,
        weight: null,
        flexibility: null,
        downStrength: null,
        upStrength: null,   

        balance: null,  
        coordination: null,
        sensitivity: null,
      },
      ouser: null,//用户信息
      checkedStudent: null,//选中的学生信息    
      reportRecordDetailList: [],// 体测数据,录入学生数据表格数据
      oroles: null,//角色
      studentIndex: null,
      physicalVersion: null,//版本

      // 遮罩层
      loading: true,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
      // 总条数
      total: 0,      
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      // 查询参数      
      // 表单参数
      form: {},    
      name: null,
      PageTitle: null, 
      isclock: false, 
    };
  },
  watch: {
    selectedValue(newValue, oldValue) {
      // 当selectedValue变化时,这个函数会被调用
      // newValue是新选中的值,oldValue是之前的值
      console.log('选中的值变化了', newValue, oldValue);
      // 在这里可以执行其他逻辑
    }
  },
  created() {    
    this.ouser = this.$store.state.user;
    this.reportRecordDetailList = [];//重置学生列表
    this.queryParams.recordId = this.$route.params.id
    this.physicalVersion = this.$route.params.physicalVersion
    this.name = this.$route.params.name

    //如果用户直接访问这个页面 给它跳转到列表页
    if(!this.queryParams.recordId){
      this.$router.push({ path: '/reportRecord' })
    }
    //判断当前老师是不是混龄班级的老师teacher_director
    this.oroles = this.ouser.roles[0]
    if(this.oroles == 'teacher_director'){
      this.getClassListAll();
    }else{
      this.getClassList();
    }    
  },
  mounted() {    
    this.PageTitle = this.name
  },
  methods: {
    seletChange(val){
      if(val){
        this.checkedStudent = null
        this.resetInput()
      }
    },
    prev(){
      this.$router.go(-1); // 返回上一页
    },
    /** 查询班级列表 */
    getClassListAll() {
      listDeptAll({ deptType: 3, parentId: this.ouser.schoolId, status :0 }).then(response => {
        this.classList = response.data;
      });
    },
    save(){
      if(this.isclock) return
      this.isclock = true
      if(!this.checkedStudent){
        this.$modal.msgError("请先选择学生");
        this.isclock = true
        return
      }
      this.queryParams.sid = this.checkedStudent.sid
      if(this.checkedStudent.id){
        this.queryParams.id = this.checkedStudent.id        
      }else{
        this.queryParams.id = null
      }
      //新增/编辑
      addReportRecordDetail(this.queryParams).then(res => {
        //this.$modal.msgSuccess("新增成功");
        this.checkedStudent.id = res.data.id //ly-add
        this.$modal.confirm(this.checkedStudent.number + '号学生数据保存成功,继续提交下一位同学?').then(() => {          
          this.isclock = false
          this.queryParams.id = null
          this.queryParams.sid = null
          this.resetInput()  
          //studentIndex 学生下标 如果学生下标+1 有sid 那么就是有学生 如果没有sid 则最后一个学生了
          //学生列表 this.reportRecordDetailList
          let olist = this.reportRecordDetailList
          if(olist[this.studentIndex + 1].sid){
            this.checkedStudent = olist[this.studentIndex + 1]
            if(olist[this.studentIndex + 1].id){
              let slist = olist[this.studentIndex + 1]              
              //有id代表编辑状态
              this.fillValue(slist)              
            }
            this.studentIndex++            
          }
        }).catch(() => { 
          this.isclock = false
        });
      }).catch(() => { 
        this.isclock = false
      });;        
    },
    studentHandle(idx){
      this.studentIndex = idx; //给选中的下标赋值
      let olist = this.reportRecordDetailList
      this.reportRecordDetailList.forEach(item => {
        item.checked = false; // 重置所有的checked状态为false
      })
      olist[idx].checked = true
      this.reportRecordDetailList = olist
      this.checkedStudent = olist[idx]
      if(olist[idx].id){
        //有id代表编辑状态
        this.fillValue(olist[idx])
      }else{
        this.resetInput()
      }      
      this.open = false
    },

    fillValue(list){
      this.queryParams.sex = list.sex
      this.queryParams.birthday = list.birthday
      this.queryParams.height = list.height
      this.queryParams.weight = list.weight
      this.queryParams.flexibility = list.flexibility
      this.queryParams.downStrength = list.downStrength
      this.queryParams.upStrength = list.upStrength
      this.queryParams.balance = list.balance 
      this.queryParams.coordination = list.coordination
      this.queryParams.sensitivity = list.sensitivity 
    },

    resetInput(){
      this.queryParams.sex = null
      this.queryParams.birthday = null
      this.queryParams.height = null
      this.queryParams.weight = null
      this.queryParams.flexibility = null
      this.queryParams.downStrength = null
      this.queryParams.upStrength = null  
      this.queryParams.balance = null 
      this.queryParams.coordination = null
      this.queryParams.sensitivity = null 
    },

    //打开学生列表
    openStudent(){
      if(!this.queryParams.classId){
        this.$modal.msgError("请先选择班级");
        return
      }
      this.getList()
      this.open = true
    },
    /** 查询班级列表 */
    getClassList() {
      listDept({ deptType: 3, parentId: this.ouser.schoolId }).then(response => {
        this.classList = response.data;
        this.queryParams.classId = this.classList[0].deptId
      });
    },

    /** 查询体测数据,录入学生数据列表 */
    getList() {
      //如果班级id为空 则不请求接口      
      this.loading = true;      
      let params = {
        classId: this.queryParams.classId,
        recordId: this.queryParams.recordId
      }
      listReportRecordDetail(params).then(response => {
        response.rows.forEach(item => {
          item.checked = false; // 添加checked属性并赋值为false 作为判断是否选中的标识
        });
        this.reportRecordDetailList = response.rows
        //如果已有选中的学生 给选中的学生加个选中状态
        if(this.checkedStudent && this.checkedStudent.number){
          let oindex = this.reportRecordDetailList.findIndex(item => item.number == this.checkedStudent.number)          
          this.reportRecordDetailList[oindex].checked = true
        }
        this.total = response.total;
        this.loading = false;
      });
    },
    // 取消按钮
    cancel() {
      this.open = false;
      //this.reset();
    },
    // 表单重置
    reset() {
      this.queryParams = {
        id: null,
        sid: null,
        classId: null,
        recordId: null,
        sex: null,//性别 2是未知 0男 1女
        birthday: null, 
        height: null,
        weight: null,
        flexibility: null,
        downStrength: null,
        upStrength: null,
      };
      this.resetForm("queryParams");//queryForm / form
    },

  }
};
</script>
<style scoped>
.close-wrap{ width: 40px; height: 40px; display: flex; justify-content: center; align-items: center;}
.close-wrap .el-icon-close{ color: #fff;}
.student-list{ display: flex; flex-direction: column; align-items: center;}
.img-wrap{ position: relative; width: 40px;}
.img-wrap .el-icon-success{ position: absolute; top: -5px; right: -5px; color: #33a9ff;}
.wrap /deep/ .el-scrollbar .el-scrollbar__bar {
  opacity: 1 !important;
}
.wrap{ padding: 30px 15px 15px 15px;}
.checked-student{ margin-top: 5px; display: flex; flex-direction: column;}
.student-mes{ width: 40px; height: 40px; text-align: center; line-height: 40px; font-size: 12px; color: #33a9ff; border: 1px solid #33a9ff; border-radius: 50%;}
.student-mes .d2{ margin-left: 5px; max-width: 50px;}
.student-mes.active{ background: #33a9ff; color: #fff;}
.mask{ position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 998; background: rgba(0,0,0,0.3);}
.pop-box{ position: fixed; top: 5%; left: 5%; z-index: 999; box-sizing: border-box; display: flex; flex-direction: column; width: 90%; height: 90%; background: #fff; border-radius: 10px;}
.student-header{ padding-left: 15px; display: flex; justify-content: space-between; align-items: center; height: 40px; background: #33a9ff; font-size: 14px;
   color: #fff; border-radius: 10px 10px 0 0;}
.student-main{ align-content:flex-start; padding: 15px 0 10px 0; display: grid; grid-template-columns: repeat(5, 1fr); grid-gap: 10px; flex: 1; overflow-y: scroll;}
.student-img{ display: block; width: 40px; height: 40px; object-fit: cover; border-radius: 50%;}
.icon-complet{ position: absolute; top: -5px; left: -5px; width: 20px;}
.wrap /deep/ .el-form-item__label{ font-weight: 400;}
</style>
<style>
@media (max-width: 720px) {
  .el-message-box {
    width: 350px !important;
  }
}

.pop-footer{ display: flex; justify-content: center; align-items: center; height: 60px;}
.pop-footer .b1,.pop-footer .b2{ width: 80px; height: 36px; text-align: center; line-height: 36px; font-size: 14px; color: #fff; border-radius: 18px;}
.pop-footer .b1{ background: #ffa400;}
.pop-footer .b2{ margin-left: 30px; background: #33a9ff;}
.input-wrap{ position: relative;}
.input-wrap .d1{ position: absolute; top: 0; right: 10px; line-height: 32px; font-size: 12px; color: #33a9ff;}
</style>

起作用的是

main.js
// 头部标签组件 在PC端里使用移动端布局的方法
import VueMeta from 'vue-meta'
Vue.use(VueMeta)

页面里:
metaInfo() {
    return {
      title: this.PageTitle,
      titleTemplate: null,//不加这个会有个默认的后缀
      meta: [
        {
          name: "viewport",
          content: 'width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no',
        },
      ],
    };
  },


@media (max-width: 720px) {
  .el-message-box {
    width: 350px !important;
  }
}

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

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

相关文章

【MATLAB第98期】基于MATLAB的MonteCarlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型(有目标函数)

【MATLAB第98期】基于MATLAB的Monte Carlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型&#xff08;有目标函数&#xff09;【更新中】 PS:因内容涉及较多&#xff0c;所以一时半会更新不完 后期会将相关原理&#xff0c;以及多种功能详细介绍。 麻烦点赞收藏&#…

Buildroot 之一 详解源码及架构

在之前的博文中,我们学习了直接通过 Makefile 手动来进行构建 U-Boot 和 Linux Kernel 等,其实,目前存在多种嵌入式 Linux 环境的构建工具,其中,Buildroot 就是被广泛应用的一种。今天就来详细学习一个 Buildroot 这个自动化构建工具。 Buildroot Buildroot 是一个运行于…

HCIP---IS-IS协议

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.IS-IS协议概述 IS-IS是一种基于链路状态的内部网关协议&#xff08;IGP&#xff09;&#xff0c;它使用最短路径优先算法&#xff08;SPF或Dijkstra&#xff09;进行路由计算。这种协议在自治…

如果让你实现实时消息推送你会用什么技术?轮询、websocket还是sse

在日常的开发中&#xff0c;我们经常能碰见服务端需要主动推送给客户端数据的业务场景&#xff0c;比如_数据大屏的实时数据_&#xff0c;比如_消息中心的未读消息_&#xff0c;比如_聊天功能_等等。 本文主要介绍SSE的使用场景和如何使用SSE。 学习就完事了 服务端向客户端推…

使用 Logstash 丰富你的 Elasticsearch 文档

作者&#xff1a;来自 Elastic David Pilato 我们在上一篇文章中看到&#xff0c;我们可以使用摄取管道中的 Elasticsearch Enrich Processor 在 Elasticsearch 中进行数据丰富。 但有时&#xff0c;你需要执行更复杂的任务&#xff0c;或者你的数据源不是 Elasticsearch&#…

掌握这3种方法,mp3格式转换就是这么简单!

掌握MP3格式转换并不需要复杂的技术或专业知识。在数字化时代&#xff0c;我们有许多简单而有效的方法可以实现这一目标。无论是为了节省存储空间&#xff0c;提高音频文件的兼容性&#xff0c;还是其他需求&#xff0c;本文将介绍三种简单的方法&#xff0c;让您轻松掌握mp3格…

编程界的圣经:从Scheme到JavaScript构建你的计算思维

文章目录 适读人群目 录 《计算机程序的构造和解释》&#xff08;Structure and Interpretation of Computer Programs&#xff0c;简记为SICP&#xff09;是MIT的基础课教材&#xff0c;出版后引起计算机教育界的广泛关注&#xff0c;对推动全世界大学计算机科学技术教育的发…

掌握潮流,使用渐变色彩图标icon,打造独特风格!

渐变色图标icon非常抢眼&#xff0c;从日常使用频率最高的手机到街上随处可见的海报&#xff0c;通常色彩搭配出众&#xff0c;让人感觉很惊艳。对色彩搭配的不同理解会影响我们设计产品的最终性能。本文将带您了解在UI设计圈兴起的时尚色彩组合——什么是渐变色&#xff0c;如…

Docker进阶:深入理解 Dockerfile

Docker进阶&#xff1a;深入理解 Dockerfile 一、Dockerfile 概述二、为什么要学习Dockerfile三、Dockerfile 编写规则四、Dockerfile 中常用的指令1、FROM2、LABEL3、RUN4、CMD5、ENTRYPOINT6、COPY7、ADD8、WORKDIR9、 ENV10、EXPOSE11、VOLUME12、USER13、注释14、ONBUILD 命…

【Python】成功解决ZeroDivisionError: division by zero

【Python】成功解决ZeroDivisionError: division by zero &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订…

ROS2从入门到精通0-2:ROS2简介、对比ROS1与详细安装流程

目录 0 专栏介绍1 什么是机器人操作系统&#xff1f;2 ROS的发展历程3 ROS2与ROS1的区别4 ROS2安装4.1 基本安装4.2 测试ROS24.2.1 测试一&#xff1a;发布者与订阅者4.2.2 测试二&#xff1a;海龟仿真器 5 常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌…

CMake 交叉编译

想知道“魔笛手”在这里能发挥什么作用吗&#xff1f;想象一下&#xff0c;把 CMake 当做法力高强的魔笛手&#xff0c;C 的项目则是故事中的那些被魔笛手拯救的孩子。 父母要抚养一个孩子并非易事&#xff0c;营养需要面面俱到&#xff0c;保证身体健康&#xff0c;关心事无巨…

【周总结周末日常】

周总结 完成任务开发并且与前端联调通过 完成已开发功能的冒烟测试 修复测试中出现的一些数据显示问题 2024/3/10 晴 温度适宜 这周天气比上周好多了&#xff0c;最起码见到好几次太阳 周六在世纪公园溜达一会儿&#xff0c;偶尔呼吸下大自然&#xff0c;挺棒的…

wpscan专门针对wordpress的安全扫描工具

说明 WPScan是一款专门针对WordPress的漏洞扫描工具&#xff0c;它使用Ruby编程语言编写。WPScan能够扫描WordPress网站中的多种安全漏洞&#xff0c;包括WordPress本身的漏洞、插件漏洞和主题漏洞。此外&#xff0c;WPScan还能扫描类似robots.txt这样的敏感文件&#xff0c;并…

Clion attach一个linux进程进行debug

背景 手头的一段程序&#xff0c;目前已经在linux上运行了&#xff0c;我在windows上有源代码&#xff0c;想在本地debug一下&#xff0c;看看代码里复杂的流程都是怎么样运行的。 代码样例 # fileName:calculateSum.cpp #include <iostream>int main() {int num1, nu…

C++程序设计-第四/五章 函数和类和对象【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下C程序设计中的重点概念&#xff0c;以供大家期末复习和考研复习的时候使用。 C程序设计系列文章传送门&#xff1a; 第一章 面向对象基础 第四/五章 函数和类和对象 第六/七/八章 运算符重载/包含与继承/虚函…

FX110网:在CP Markets申请出金四个多月了,没任何消息!

近期&#xff0c;本站收到一中国汇友投诉&#xff0c;称其CP Markets平台已数月无法出金&#xff0c;平台方也没有任何回应。在货币市场闯荡久了的“老鸟”就会知道&#xff0c;平台无故不给出金必定有妖&#xff0c;更何况还是长达数月&#xff01; 在CP Markets申请出金四个多…

LINE社群:为您的跨境出海业务带来更多流量

LINE 社群就是一个大型的公开聊天室&#xff0c;通过LINE社群不需要将对方添加为好友就可以聊天。它主要是以「兴趣」作为区分&#xff0c;所以商家可以在社群中找到不少潜在客户。尤其是面向台湾、日本、泰国这些地区的商家&#xff0c;LINE在这些地区的普及度很高&#xff0c…

10000的单子谈崩了,坚持用beego什么骚操作?

今天有个客户询盘&#xff0c;想仿制一个旅游的网站&#xff0c;一句话差点让我当场拒绝&#xff1a;前端都是静态的&#xff0c;网上有很多工具可以下载源代码&#xff0c;后端接入支付&#xff0c;做个简单的统计&#xff0c;客服&#xff0c;再接入google地图就行了...... 简…

【JAVA重要知识 | 第六篇】Java集合类使用总结(List、Set、Map接口及常见实现类)以及常见面试题

文章目录 6.Java集合类使用总结6.1概览6.1.1集合接口类特性6.1.2List接口和Set接口的区别6.1.3简要介绍&#xff08;1&#xff09;List接口&#xff08;2&#xff09;Set接口&#xff08;3&#xff09;Map接口 6.2Collection接口6.3List接口6.3.1ArrayList6.3.2LinkedList—不常…