vue 移动端弹窗带滚动效果 滚动到底的时候弹窗下的页面会跟着滑动

news2024/11/24 10:50:12

<template>
  <div class="wrap" :style="dynamicStyle"><!--dynamicStyle主要是介个 通过computed设置postion的值 弹窗的时候设置为fixed 关闭弹窗的时候设置为unset-->
    <div class="banner-wrap">
      <img src="@/assets/images/banner2.png" class="banner" />
      <div class="header">
        <div class="d1">{{ user.name }},您好</div>        
        <img src="@/assets/images/help.png" alt="" class="icon-help" @click="openHelpHandle">
      </div>
    </div>
    <div class="scrollerWrap">
      <!--头部下拉选择-->
      <div class="scroll-head">
        <el-select v-model="classId" style="flex: 1; margin-right: 10px;" @change="seletClassChange">
          <el-option v-for="item in classList" :key="item.deptId" :label="item.deptName" :value="item.deptId">
          </el-option>        
        </el-select>
        <el-select v-model="itemType" style="width: 60%;" @change="seletTaskChange">
          <el-option label="身高/体重" :value="1"></el-option>
          <el-option label="立定跳远" :value="3"></el-option>
          <el-option label="坐位体前屈" :value="4"></el-option>
          <el-option label="双脚连续跳" :value="5"></el-option>
          <el-option label="走平衡木" :value="6"></el-option>
          <el-option label="握力" :value="7" v-if="physicalVersion == 2"></el-option>
          <el-option label="15米绕障碍跑" :value="8" v-if="physicalVersion == 2"></el-option>
          <el-option label="网球掷远" :value="9" v-if="physicalVersion == 1"></el-option>
          <el-option label="10米折返跑" :value="10" v-if="physicalVersion == 1"></el-option>
        </el-select>
      </div>

      <div v-if="!isAll">
        <!--头部tab-->
        <div class="tab">
          <div class="tab-list" :class="{ active: tabIdx == 0 }" @click="changeTab(0)">共{{ total }}个幼儿</div>
          <div class="tab-list" :class="{ active: tabIdx == 1 }" @click="changeTab(1)">{{ totalTested }}个测试完</div>
          <div class="tab-list" :class="{ active: tabIdx == 2 }" @click="changeTab(2)">{{ totalUntested }}个未测试</div>
          <!-- <div class="tab-list tab-list4">3个异常</div> -->
        </div>

        <!--学生列表-->
        <div class="item" v-if="tabIdx == 0">         
          <div v-for="item in phyTaskDetailList" :key="item.sid" class="list" :class="{ entered: item.checked }" @click="openEnter(item)">
            <div class="list-head">
              <div class="physical-wrap">
                <img src="@/assets/images/type8.png" class="icon-physical" alt="">
              </div>

              <div class="physical-data" v-if="itemType == 1">
                <div class="d1">身高<span class="s1">{{ item.heightList == null ? 0 : item.heightList[0].score }}</span>cm</div>
                <div class="d1">体重<span class="s1">{{ item.weightList == null ? 0 : item.weightList[0].score}}</span>kg</div>              
              </div>
              
              <div class="physical-data" v-else>
                <div class="d1">{{ computedTxt }}<span class="s1">{{ computedName(item) }}</span>{{ computedUnit }}</div>              
              </div>            

              <div class="entered-num" v-if="itemType != 1 && computedNavlistLength(item) > 0">{{ computedNavlistLength(item) }}</div>
            </div>
            <div class="list-bot">{{ item.number }}号</div>
          </div>
        </div>

        <div class="item" v-if="tabIdx == 1">         
          <div v-for="item in testedArr" :key="item.sid" class="list" :class="{ entered: item.checked }" @click="openEnter(item)">
            <div class="list-head">
              <div class="physical-wrap">
                <img src="@/assets/images/type8.png" class="icon-physical" alt="">
              </div>

              <div class="physical-data" v-if="itemType == 1">
                <div class="d1">身高<span class="s1">{{ item.heightList == null ? 0 : item.heightList[0].score }}</span>cm</div>
                <div class="d1">体重<span class="s1">{{ item.weightList == null ? 0 : item.weightList[0].score}}</span>kg</div>              
              </div>
              
              <div class="physical-data" v-else>
                <div class="d1">{{ computedTxt }}<span class="s1">{{ computedName(item) }}</span>{{ computedUnit }}</div>              
              </div>            

              <div class="entered-num" v-if="itemType != 1 && computedNavlistLength(item) > 0">{{ computedNavlistLength(item) }}</div>
            </div>
            <div class="list-bot">{{ item.number }}号</div>
          </div>
        </div>

        <div class="item" v-if="tabIdx == 2">         
          <div v-for="item in unTestedArr" :key="item.sid" class="list" :class="{ entered: item.checked }" @click="openEnter(item)">
            <div class="list-head">
              <div class="physical-wrap">
                <img src="@/assets/images/type8.png" class="icon-physical" alt="">
              </div>

              <div class="physical-data" v-if="itemType == 1">
                <div class="d1">身高<span class="s1">{{ item.heightList == null ? 0 : item.heightList[0].score }}</span>cm</div>
                <div class="d1">体重<span class="s1">{{ item.weightList == null ? 0 : item.weightList[0].score}}</span>kg</div>              
              </div>
              
              <div class="physical-data" v-else>
                <div class="d1">{{ computedTxt }}<span class="s1">{{ computedName(item) }}</span>{{ computedUnit }}</div>              
              </div>            

              <div class="entered-num" v-if="itemType != 1 && computedNavlistLength(item) > 0">{{ computedNavlistLength }}</div>
            </div>
            <div class="list-bot">{{ item.number }}号</div>
          </div>
        </div>
      </div>  
      <div v-else>
        <div class="class-list">
          <div class="class-list-head">共{{ allTotal }}个班级,8个项目</div>          
          <div class="class-box" v-for="item in allInfo" :key="item.id">
            <div class="class-name">{{ item.className }}</div>
            <div class="d1" v-for="navitem in item.itemList" :key="navitem.id">
              <span>{{ navitem.itemTypeName }}</span> 
              <span>已测试完成{{ navitem.completeNum }}个幼儿({{ navitem.completePercent }}%)</span>
              <span>未测试{{ navitem.incompleteNum }}个({{ navitem.incompletePercent }}%)</span>
            </div>
          </div>
        </div>
      </div>
    </div>    

    <div class="mask" v-if="openMask"></div>
    <!-- 新增/编辑列表数据 -->
    <div class="pop-box" v-if="open">
      <img src="@/assets/images/logo_head2.png" class="logo-head" alt="">
      <div class="pop-header">{{ typeName }}</div>  
      <div class="student-mes-wrap">
        <div class="student-mes">{{ deptName }} {{studentNumber}}号</div>
      </div>
      <div class="group-wrap">
        <div class="group-item" v-if="itemType != 1">
          <div class="group-list">
            <div class="d1">第1组记录</div>
            <el-input type="number" v-model="teamgroup.team1" placeholder="请输入内容" class="i1"></el-input>
            <div class="d2" @click="saveTeam(1)">保存</div>
          </div>

          <div class="group-list">
            <div class="d1">第2组记录</div>
            <el-input type="number" v-model="teamgroup.team2" placeholder="请输入内容" class="i1"></el-input>
            <div class="d2" @click="saveTeam(2)">保存</div>
          </div>

          <div class="group-list">
            <div class="d1">第3组记录</div>
            <el-input type="number" v-model="teamgroup.team3" placeholder="请输入内容" class="i1"></el-input>
            <div class="d2" @click="saveTeam(3)">保存</div>
          </div>
        </div>
        <div class="group-item" v-else>
          <div class="group-list">
            <div class="d1">身高</div>
            <el-input type="number" v-model="teamgroup.teamHeight" placeholder="请输入内容" class="i1"></el-input>
            <div class="d2" @click="saveTeamHeight">保存</div>
          </div>

          <div class="group-list">
            <div class="d1">体重</div>
            <el-input type="number" v-model="teamgroup.teamWeight" placeholder="请输入内容" class="i1"></el-input>
            <div class="d2" @click="saveTeamWeight">保存</div>
          </div>
        </div>

        <div class="group-warn">
          <span>*保留小数点后一位</span>
          <span>*正常值在{{ sectionValue }}</span>
        </div>

      </div>
      <div class="pop-footer">
        <div class="b1" @click="cancel">取消</div>
      </div>
    </div>    

    <!--提示弹窗-->
    <div class="alert-mask" v-if="alertmask"></div>
    <transition name="fade" v-if="alertOpen">      
      <div class="alert-box">
        <i class="el-icon-circle-check icon-success" v-if="alertIcon == 1"></i>
        <i class="el-icon-circle-close icon-danger" v-if="alertIcon == 2"></i>
        <i class="el-icon-warning-outline icon-warning" v-if="alertIcon == 3"></i>        
        <p class="p1">{{ alertMes }}</p>
      </div>
    </transition>

    <!--帮助弹窗-->
    <div class="pop-box" v-if="openHelp">
      <img src="@/assets/images/logo_head2.png" class="logo-head" alt="">
      <div class="pop-header">帮助</div>  
      <div class="help-cont" v-html="helpCont" @click="judgeImg($event)"></div>
      <div class="pop-footer">
        <div class="b1" @click="closeHelp">关闭</div>
      </div>
    </div>
  </div> 
</template>

<script>
import { listPhyTaskDetail, getClassList, getStatisticsTotal, getPhyTaskDetail, addPhyTaskDetail, updatePhyTaskDetail, getDetectMissionHelp } from "@/api/school/phyTaskDetail";
import {ImagePreview} from "vant"  //引入vant预览图片组件

export default {
  metaInfo: {
    title: '测试页',
    titleTemplate: null,//不加这个会有个默认的后缀
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no' }
    ]
  },
  name: "PhyTaskDetail",
  data() {
    return {     
      position: 'unset',
      helpCont: null,
      openHelp: false,
      allInfo: null,//全部统计的信息
      allTotal: 0,
      isAll: false,//判断是不是全部统计
      studentNumber: null,//选中的学生班号      
      testedArr: [],//已测试的数组
      unTestedArr: [],//未测试的数组
      sid: null,//学生id
      tabIdx: 0,//顶部tab的下标 
      classId:null,//选中的班级id
      deptName: null,//选中的班级名称
      taskId:null,//上一个页面传过来的id
      physicalVersion: null,//体测版本
      classList: [],//班级下拉列表的值 也就是左上角第一个下拉列表
      //弹窗-start
      alertMes: null,
      alertIcon: null,//success1 error2 warning3
      alertOpen: false,
      alertmask: false,
      //弹窗-end

      teamgroup : {
        teamHeight: null,
        teamHeightId: null,
        teamWeight: null,
        teamWeightId: null,
        team1: null,
        teamId1: null,
        team2: null,
        teamId2: null,
        team3: null,
        teamId3: null,
      },
      
      openMask: false,
      // 是否显示弹出层
      open: false,
      typeName: '身高/体重',
      sectionValue: '50cm~200cm, 5kg~50kg',//区间值
      itemType: 1,
      user: null,
      total: 0,
      totalTested: 0,//统计已测试
      totalUntested: 0,//统计未测试
      // 遮罩层
      loading: true,
      // 体测数据表格数据
      phyTaskDetailList: [],

      // 表单参数
      form: {},
    };
  },
  computed: {
    computedTxt() {
      if (this.itemType == '3' || this.itemType == '4' || this.itemType == '9') {
        return '距离';
      } else if(this.itemType == '5' || this.itemType == '6' || this.itemType == '8' || this.itemType == '10') {
        return '用时';
      } else if(this.itemType == '7'){
        return '力度'
      }
    },
    computedUnit() {
      if (this.itemType == '3' || this.itemType == '4') {
        return 'cm';
      } else if(this.itemType == '9'){
        return 'm';
      } else if(this.itemType == '5' || this.itemType == '6' || this.itemType == '8' || this.itemType == '10') {
        return 's';
      } else if(this.itemType == '7'){
        return 'kg'
      }
    },
    computedName(){
      return function(item) { //通过itemType判断要显示那个字段
        return this.itemType == 3 ? item.downStrength : this.itemType == 4 ? item.flexibility : this.itemType == 5 ? item.coordination : this.itemType == 6 ? item.balance : this.itemType == 7 ? item.upStrength : this.itemType == 8 ? item.sensitivity : this.itemType == 9 ? item.upStrength : this.itemType == 10 ? item.sensitivity : ''
      };
    },
    computedNavlistLength(){
      return function(item) { //通过itemType判断要显示那个字段的子集长度
        return this.itemType == 3 ? (Array.isArray(item.downStrengthList) ? item.downStrengthList.length : 0) : 
               this.itemType == 4 ? (Array.isArray(item.flexibilityList) ? item.flexibilityList.length : 0) : 
               this.itemType == 5 ? (Array.isArray(item.coordinationList) ? item.coordinationList.length : 0) : 
               this.itemType == 6 ? (Array.isArray(item.balanceList) ? item.balanceList.length : 0) : 
               this.itemType == 7 ? (Array.isArray(item.upStrengthList) ? item.upStrengthList.length : 0) : 
               this.itemType == 8 ? (Array.isArray(item.sensitivityList) ? item.sensitivityList.length : 0) : 
               this.itemType == 9 ? (Array.isArray(item.upStrengthList) ? item.upStrengthList.length : 0) : 
               this.itemType == 10 ? (Array.isArray(item.sensitivityList) ? item.sensitivityList.length : 0) : ''
      };
    },
    dynamicStyle() {
      return {
        position: this.position, // 使用计算属性返回样式对象
        // 其他样式属性...
      };
    },
  },
  created() {
    //console.log(this.$route.params.id)
    this.taskId = this.$route.params.id;  //'27836848421849e997cf48b672646d0ed4ec38d4abeb44aba78ea333bb0001b2'; //'8e86e2f4f06d4021bf548239b1937db4eb130fd0376141fdaaa175822f08b106'; // this.$route.params.id
    this.physicalVersion = this.$route.params.physicalVersion; // '1'; // this.$route.params.physicalVersion
    this.user = this.$store.state.user;
    //console.log(this.user)
    this.form.userId = this.user.userId;
    this.form.schoolId = this.user.schoolId;    
    //this.seletTaskChange(this.itemType) //选择体测的项目 获取对应的项目名称 对应的区间 默认身高/体重

    //如果用户直接访问这个页面 给它跳转到列表页
    if(!this.$route.params.id){
      this.$router.push({ path: '/phyTask' })
    }
    this.getClassListData() //获取班级列表
    //this.getList();
  },
  methods: {
    //判断是否为图片并提取当前图片地址
    judgeImg(e){
        if(e.target.tagName=="IMG" && e.target.currentSrc){
            this.previewSingleImg(e.target.currentSrc)
        }
    },
    //查看单个大图
    previewSingleImg(url) {
        ImagePreview({
            images: Array.of(url),
            startPosition: 0,
        });
    },
    closeHelp(){
      this.openHelp = false
      this.openMask = false
      this.position = 'unset'
    },
    openHelpHandle(){
      const that = this
      let params = {
        type: 6,
        userId: this.user.userId
      }
      getDetectMissionHelp(params).then(res => {        
        if(res.rows.length == 0 || res.rows[0].length == 0){
          this.handleAlert('暂无帮助信息', 3)
          setTimeout(function(){
            that.closeAlert()
          },1000)
          return
        }
        //console.log(res.rows[0].brief)
        this.helpCont = res.rows[0].brief
        this.openHelp = true
        this.openMask = true
        this.position = 'fixed'
      });
    },
    //通过itemType判断当前获取到的是哪个体测项目
    getCurrentItem(item){
      return this.itemType == 3 ? item.downStrengthList : this.itemType == 4 ? item.flexibilityList : this.itemType == 5 ? item.coordinationList : this.itemType == 6 ? item.balanceList : this.itemType == 7 ? item.upStrengthList : this.itemType == 8 ? item.sensitivityList : this.itemType == 9 ? item.upStrengthList : this.itemType == 10 ? item.sensitivityList : []
    },
    openEnter(item){
      this.studentNumber = item.number
      /*
        点击的时候获取到item
        通过itemType判断当前获取到的是哪个体测项目
        拿到该体测项目的数组
        回显到对应的组里面去
      */
      //console.log(item)
      let oitemArr = this.getCurrentItem(item)
      //console.log(item)
      if(oitemArr && oitemArr.length > 0){
        //编辑
        if(this.itemType != 1){
          for(let i in oitemArr){
            if(oitemArr[i].sort == 1){
              this.teamgroup.teamId1 = oitemArr[i].id
              this.teamgroup.team1 = oitemArr[i].score
            }
            if(oitemArr[i].sort == 2){
              this.teamgroup.teamId2 = oitemArr[i].id
              this.teamgroup.team2 = oitemArr[i].score
            }
            if(oitemArr[i].sort == 3){
              this.teamgroup.teamId3 = oitemArr[i].id
              this.teamgroup.team3 = oitemArr[i].score
            }
          }
        }
      }
      //身高体重 回显
      if(this.itemType == 1){
        if(item.heightList != null && item.heightList && item.heightList.length > 0){
          this.teamgroup.teamHeight = item.heightList[0].score
          this.teamgroup.teamHeightId = item.heightList[0].id
        }
        if(item.weightList != null && item.weightList && item.weightList.length > 0){
          this.teamgroup.teamWeight = item.weightList[0].score
          this.teamgroup.teamWeightId = item.weightList[0].id
        }
      }
      this.sid = item.sid
      //console.log(sid)
      this.open = true
      this.openMask = true
    },
    changeTab(idx){
      this.tabIdx = idx
    },
    //查询班级列表
    getClassListData(){
      getClassList(this.taskId).then(response => {
        if(response.code == 200){
          this.classList = response.rows
          let allOption = {
            deptId: 0,
            deptName: '全部'
          }
          this.classList.unshift(allOption)        
          if(this.classList.length > 1){
            this.classId = this.classList[1].deptId
            this.deptName = this.classList[1].deptName
            this.getList()
          }   
        }
      });
    },
    /** 查询体测数据列表 */
    getList() {
      this.loading = true;
      let params = {
        classId: this.classId,
        taskId: this.taskId,
        itemType: this.itemType == 1 ? '1,2' : this.itemType 
      }
      listPhyTaskDetail(params).then(response => {
        this.phyTaskDetailList = response.rows;
        this.total = response.total;
        this.loading = false;

        //选择不同的体测项目的时候 要重新刷新数据 通过itemType获取不同项目的列表以及状态
        this.getTotalTested()//统计已测试和未测试
      });
    },

    //统计已测试和未测试
    getTotalTested(){
      let totalTested = 0//统计已测试      
      let testedArr = []//已测试的数组
      let unTestedArr =[]//未测试的数组
      this.phyTaskDetailList.forEach(item => {
        //判断 itemType 为1的时候为身高体重
        if(this.itemType == 1){
          if(item.heightList != null && item.heightList.length > 0 || item.weightList != null && item.weightList.length > 0){
            totalTested++
            item.checked = true;//新增checked属性并赋值   
            testedArr.push(item) 
          }else{
            item.checked = false;//新增checked属性并赋值    
            unTestedArr.push(item)
          }
        } else if(this.itemType == 3){ //立定跳远
          if(item.downStrengthList != null && item.downStrengthList.length > 0){
            totalTested++
            item.checked = true;//新增checked属性并赋值   
            testedArr.push(item) 
          }else{
            item.checked = false;//新增checked属性并赋值    
            unTestedArr.push(item)
          }
        } else if(this.itemType == 4){ //坐位体前屈
          if(item.flexibilityList != null && item.flexibilityList.length > 0){
            totalTested++
            item.checked = true;//新增checked属性并赋值   
            testedArr.push(item) 
          }else{
            item.checked = false;//新增checked属性并赋值    
            unTestedArr.push(item)
          }
        } else if(this.itemType == 5){ //双脚连续跳
          if(item.coordinationList != null && item.coordinationList.length > 0){
            totalTested++
            item.checked = true;//新增checked属性并赋值   
            testedArr.push(item) 
          }else{
            item.checked = false;//新增checked属性并赋值    
            unTestedArr.push(item)
          }
        } else if(this.itemType == 6){ //平衡木
          if(item.balanceList != null && item.balanceList.length > 0){
            totalTested++
            item.checked = true;//新增checked属性并赋值   
            testedArr.push(item) 
          }else{
            item.checked = false;//新增checked属性并赋值    
            unTestedArr.push(item)
          }
        } else if(this.itemType == 7){ //握力
          if(item.upStrengthList != null && item.upStrengthList.length > 0){
            totalTested++
            item.checked = true;//新增checked属性并赋值   
            testedArr.push(item) 
          }else{
            item.checked = false;//新增checked属性并赋值    
            unTestedArr.push(item)
          }
        } else if(this.itemType == 8){ //15米绕障碍跑
          if(item.sensitivityList != null && item.sensitivityList.length > 0){
            totalTested++
            item.checked = true;//新增checked属性并赋值   
            testedArr.push(item) 
          }else{
            item.checked = false;//新增checked属性并赋值    
            unTestedArr.push(item)
          }
        } else if(this.itemType == 9){ //网球掷远
          if(item.upStrengthList != null && item.upStrengthList.length > 0){
            totalTested++
            item.checked = true;//新增checked属性并赋值   
            testedArr.push(item) 
          }else{
            item.checked = false;//新增checked属性并赋值    
            unTestedArr.push(item)
          }
        } else if(this.itemType == 10){ //10米折返跑跑
          if(item.sensitivityList != null && item.sensitivityList.length > 0){
            totalTested++
            item.checked = true;//新增checked属性并赋值   
            testedArr.push(item) 
          }else{
            item.checked = false;//新增checked属性并赋值    
            unTestedArr.push(item)
          }
        }        
      });
      this.totalTested = totalTested;//统计已测试
      this.totalUntested = this.total - totalTested;//统计未测试
      this.testedArr = testedArr
      this.unTestedArr = unTestedArr
    },

    //判断输入的值是否在区间内
    detectionSection(val){
      //this.itemType
      if(this.itemType == 3){//立定跳远
        return val > 1 && val < 200 ? true : false
      }else if(this.itemType == 4){//坐位体前屈
        return (val > -10 && val < 30) && val != '' && val != null ? true : false
      }else if(this.itemType == 5){//双脚连续跳
        return val > 2.4 && val < 25 ? true : false
      }else if(this.itemType == 6){//平衡木
        return val > 1.5 && val < 50 ? true : false
      }else if(this.itemType == 7){//握力
        return val > 0 && val < 16 ? true : false
      }else if(this.itemType == 8){//15米绕障碍跑
        return val > 3 && val < 25 ? true : false
      }else if(this.itemType == 9){//网球掷远
        return val > 0 && val < 20 ? true : false
      }else if(this.itemType == 10){//10米折返跑跑
        return val > 3.7 && val < 25 ? true : false
      }
    },

    handleAlert(txt, type){
      this.alertMes = txt
      this.alertIcon = type
      this.alertOpen = true
      this.alertmask = true
    },
    closeAlert(){
      this.alertMes = null
      this.alertIcon = null
      this.alertOpen = false
      this.alertmask = false
    },

    saveTeam(num){
      const that = this
      let oteam = null
      let isEdit = false //判断是新增还是编辑
      if(num == 1){
        oteam = this.teamgroup.team1
        isEdit = this.teamgroup.teamId1 != null && this.teamgroup.teamId1 ? true : false
      } else if(num == 2){
        oteam = this.teamgroup.team2
        isEdit = this.teamgroup.teamId2 != null && this.teamgroup.teamId2 ? true : false
      } else if(num == 3){
        oteam = this.teamgroup.team3
        isEdit = this.teamgroup.teamId3 != null && this.teamgroup.teamId3 ? true : false
      }
      if(!this.detectionSection(oteam)){                
        this.handleAlert('输入有误请重新输入', 3)
        setTimeout(function(){
          that.closeAlert()
        },1000)
        return
      }
                  
      if(isEdit){        
        //编辑
        let params = {
          id: num == 1 ? this.teamgroup.teamId1 : num == 2 ? this.teamgroup.teamId2 : num == 3 ? this.teamgroup.teamId3 : '',
          score: Number(oteam).toFixed(1)
        }
        updatePhyTaskDetail(params).then(res => {
          this.handleAlert('编辑成功', 1)
          setTimeout(function(){
            that.closeAlert()
          },1000)
          this.getList();
        });
      }else{
        //新增
        let params = {
          itemType: this.itemType,
          score: Number(oteam).toFixed(1),
          sid: this.sid,
          sort: num, //身高体重默认1组
          taskId: this.taskId
        }
        addPhyTaskDetail(params).then(res => {
          if(num == 1){
            this.teamgroup.teamId1 = res.data.id
          } else if(num == 2){
            this.teamgroup.teamId2 = res.data.id
          } else if(num == 3){
            this.teamgroup.teamId3 = res.data.id
          }
          this.handleAlert('新增成功', 1)
          setTimeout(function(){
            that.closeAlert()
          },1000)
          this.getList();
        });
      }      
    },    
    saveTeamHeight(){   
      const that = this   
      let heightEstimate = this.teamgroup.teamHeight > 50 && this.teamgroup.teamHeight < 200 ? true : false
      if(!heightEstimate){        
        this.handleAlert('输入有误请重新输入', 3)
        setTimeout(function(){
          that.closeAlert()
        },1000)
        return
      }
      if(this.teamgroup.teamHeightId != null && this.teamgroup.teamHeightId){
        //编辑
        let params = {
          id: this.teamgroup.teamHeightId,
          score: Number(this.teamgroup.teamHeight).toFixed(1)
        }
        updatePhyTaskDetail(params).then(res => {
          this.handleAlert('编辑成功', 1)
          setTimeout(function(){
            that.closeAlert()
          },1000)
          this.getList();
        });
      }else{
        //新增
        let params = {
          itemType: 1,
          score: Number(this.teamgroup.teamHeight).toFixed(1),
          sid: this.sid,
          sort: 1, //身高体重默认1组
          taskId: this.taskId
        }
        addPhyTaskDetail(params).then(res => {
          this.teamgroup.teamHeightId = res.data.id
          this.handleAlert('新增成功', 1)
          setTimeout(function(){
            that.closeAlert()
          },1000)
          this.getList();
        });
      }      
    },
    saveTeamWeight(){
      const that = this
      let weightEstimate = this.teamgroup.teamWeight > 5 && this.teamgroup.teamWeight < 50 ? true : false
      if(!weightEstimate){        
        this.handleAlert('输入有误请重新输入', 3)
        setTimeout(function(){
          that.closeAlert()
        },1000)
        return
      }

      if(this.teamgroup.teamWeightId != null && this.teamgroup.teamWeightId){
        //编辑
        let params = {
          id: this.teamgroup.teamWeightId,
          score: Number(this.teamgroup.teamWeight).toFixed(1)
        }
        updatePhyTaskDetail(params).then(res => {
          this.handleAlert('编辑成功', 1)
          setTimeout(function(){
            that.closeAlert()
          },1000)
          this.getList();
        });
      }else{
        let params = {
          itemType: 2,
          score: Number(this.teamgroup.teamWeight).toFixed(1),
          sid: this.sid,
          sort: 1, //身高体重默认1组
          taskId: this.taskId
        }
        addPhyTaskDetail(params).then(res => {
          this.teamgroup.teamWeightId = res.data.id
          this.handleAlert('新增成功', 1)
          setTimeout(function(){
            that.closeAlert()
          },1000)
          this.getList();
        });
      }      
    },    
    //选择班级
    seletClassChange(val){
      if(val != 0){
        this.isAll = false
        this.classId = val
        let selectedItem = this.classList.find(item => item.deptId === this.classId);
        this.deptName = selectedItem.deptName
        this.getList()
      }else{
        this.isAll = true
        //获取全部的统计信息
        getStatisticsTotal(this.taskId).then(res => {
          if(res.code == 200){            
            this.allInfo = res.rows
            this.allTotal = res.total
          }
        });
      }           
    },
    //选择体测项目
    seletTaskChange(val){
      this.getList()
      switch (val) {
        case 1:
          this.typeName = '身高/体重'
          this.sectionValue = '50cm~200cm, 5kg~50kg'
          break;
        case 3:
          this.typeName = '立定跳远'
          this.sectionValue = '1cm ~ 200cm'
          break;           
        case 4:
          this.typeName = '坐位体前屈'
          this.sectionValue = '-10cm ~ 30cm'
          break;        
        case 5:
          this.typeName = '双脚连续跳'          
          this.sectionValue = '2.4s ~ 25s'
          break;        
        case 6:
          this.typeName = '走平衡木'
          this.sectionValue = '1.5s ~ 50s'
          break;        
        case 7:
          this.typeName = '握力'          
          this.sectionValue = '0kg ~ 16kg'
          break;        
        case 8:
          this.typeName = '15米绕障碍跑'
          this.sectionValue = '3s ~ 25s'
          break;        
        case 9:
          this.typeName = '网球掷远'
          this.sectionValue = '0m ~ 20m'
          break;        
        case 10:
          this.typeName = '10米折返跑'
          this.sectionValue = '3.7s ~ 25s'
          break;        
        default:
          break;
      }
    },   
    // 取消按钮
    cancel() {
      this.teamgroup = {
        teamHeight: null,
        teamHeightId: null,
        teamWeight: null,
        teamWeightId: null,
        team1: null,
        teamId1: null,
        team2: null,
        teamId2: null,
        team3: null,
        teamId3: null,
      }

      this.open = false;
      this.openMask = false;
      //this.reset();
    },

  }
};
</script>

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

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

相关文章

C语言一维数组及二维数组详解

引言&#xff1a; 小伙伴们&#xff0c;我发现我正文更新的有些慢&#xff0c;但相信我&#xff0c;每一篇文章真的都很用心在写的&#xff0c;哈哈&#xff0c;在本篇博客当中我们将详细讲解一下C语言中的数组知识&#xff0c;方便大家后续的使用&#xff0c;有不会的也可以当…

ArcGIS Pro打不开Excel?Microsoft驱动程序安装不上?

刚用ArcGIS pro的朋友们可能经常在打开xls或者xlsx文件的时候都会提示&#xff0c;未安装所需的Microsoft驱动程序。 怎么办呢&#xff1f;当然&#xff0c;按照提示装一下驱动就会好吗&#xff1f;有什么状况会出现&#xff1f;有什么临时替代方案呢&#xff1f; 全文目录&a…

ssm017网上花店设计+vue

网上花店的设计与实现 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关…

C++ 哈希思想应用:位图,布隆过滤器,哈希切分

C 哈希思想应用:位图,布隆过滤器,哈希切分 一.位图1.位图的概念1.问题2.分析3.位图的概念4.演示 2.位图的操作3.位图的实现1.char类型的数组2.int类型的数组3.解决一开始的问题位图开多大呢?小小补充验证 4.位图的应用1.给定100亿个整数&#xff0c;设计算法找到只出现一次的整…

【Redis】NoSQL之Redis的配置和优化

关系型数据库与非关系型数据库 关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系型模型&#xff08;二维表&#xff09;的基础上&#xff1b;一般面向于记录&#xff1b; SQL语句(标准数据查询语句)就是一种基于关系型数据库的语言&#xff0c;用于执行…

转圈游戏(acwing)

题目描述&#xff1a; n 个小伙伴&#xff08;编号从 0 到 n−1&#xff09;围坐一圈玩游戏。 按照顺时针方向给 n 个位置编号&#xff0c;从 0 到 n−1。 最初&#xff0c;第 0 号小伙伴在第 0 号位置&#xff0c;第 1 号小伙伴在第 1 号位置&#xff0c;…

FastAPI Web框架教程 第14章 部署

14-1 在Linux上安装Python 【环境】 腾讯云服务器 Centos 8 【安装方式】 源码编译安装 安装步骤&#xff1a; 第1步&#xff1a;更新yum源 cd /etc/yum.repos.d/ sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-* sed -i s|#baseurlhttp://mirror.centos.…

SV学习笔记(一)

SV&#xff1a;SystemVerilog 开启SV之路 数据类型 內建数据类型 四状态与双状态 &#xff1a; 四状态指0、1、X、Z&#xff0c;包括logic、integer、 reg、 wire。双状态指0、1&#xff0c;包括bit、byte、 shortint、int、longint。 有符号与无符号 &#xff1a; 有符号&am…

ObjectiveC-03-XCode的使用和基础数据类型

本节做为Objective-C的入门课程&#xff0c;笔者会从零基础开始介绍这种程序设计语言的各个方面。 术语 ObjeC&#xff1a;Objective-C的简称&#xff0c;因为完整的名称过长&#xff0c;后续会经缩写来代替&#xff1b;项目/工程&#xff1a;也称工程&#xff0c;指的是一个A…

记某客户的一次无缝数据迁移

背景 客户需要将 Elasticsearch 集群无缝迁移到移动云&#xff0c;迁移过程要保证业务的最小停机时间。 实现方式 通过采用成熟的 INFINI 网关来进行数据的双写&#xff0c;在集群的切换恢复过程中来记录数据变更&#xff0c;待全量数据恢复之后再追平后面增量数据&#xff…

Node.js------Express

◆ 能够使用 express.static( ) 快 速 托 管 静 态 资 源◆ 能够使用 express 路 由 精 简 项 目 结 构◆ 能够使用常见的 express 中间件◆ 能够使用 express 创建API接口◆ 能够在 express 中启用cors跨域资源共享 一.初识Express 1.Express 简介 官方给出的概念&#xff…

Discuz! X3.5苗木_苗木网_苗木价格_苗木求购信息_苗木批发网模板utf-8

适合做苗木行业平台苗木网站、苗木信息网,提供苗木报价、各地苗木求购信息、绿化苗木采购招标、苗木基地展示、苗木百科知识、花木交易及苗木资讯、各地苗木信息网络行情。解压上传到template目录下&#xff0c;后台安装即可&#xff0c;包含PC手机端模板 下载地址&#xff1a;…

Windows 上路由、端口转发配置,跨网络地址段

一、背景 有时候我们会遇到这样的场景&#xff0c;一批同一局域网中只有某一台主机带外且系统为windows&#xff0c;局域网中其他非带外的主机要想访问外网&#xff0c;本文将介绍如何配置在带外主机上开启路由及端口转发。 二、配置操作 2.1、带外主机开启路由转发 1&#x…

QA测试开发工程师面试题满分问答6: 如何判断接口功能正常?从QA的角度设计测试用例

判断接口功能是否正常的方法之一是设计并执行相关的测试用例。下面是从测试QA的角度设计接口测试用例的一些建议&#xff0c;包括功能、边界、异常、链路、上下游和并发等方面&#xff1a; 通过综合考虑这些测试维度&#xff0c;并设计相应的测试用例&#xff0c;可以更全面地评…

一文盘点Mendix在SAP之上的那些事儿

前言 近来接手了2个与SAP有关的低代码案子&#xff0c;客户都会问Mendix和SAP之间怎么回事。 2017年开始Mendix 成为SAP Endorsed APP级别合作伙伴&#xff0c;并再度升级为Solution Extension最高级别。 两家公司风雨同舟七载&#xff0c;服务的全球大客户不胜枚举。 商业…

【嵌入式智能产品开发实战】(十四)—— 政安晨:通过ARM-Linux掌握基本技能【链接静态库与动态库】

目录 链接静态库 动态链接 与地址无关的代码 全局偏移表 延迟绑定 共享库 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 嵌入式智能产品开发实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论…

穿什么有这么重要?--装饰模式

1.1 穿什么有这么重要&#xff1f; 约会穿什么&#xff1f; "那要看你想给人家什么印象&#xff1f;是比较年轻&#xff0c;还是比较干练&#xff1b;是比较颓废&#xff0c;还是要比较阳光&#xff1b;也有可能你想给人家一种极其难忘的印象&#xff0c;那穿法又大不一样…

算法错题本

这里写目录标题 错题本注意数据的耦合性对于无解情况的处理思路一组数据以0为结束标记&#xff0c;如何输入到数组中&#xff0c;并计数多个数据进行比较链表删除重复元素的启发循环体里谨慎写类型定义并初始化&#xff08;一般写上就是错&#xff09;队列中读取队尾元素数组当…

基于ssm的三省学堂-学习辅助系统(java项目+文档+源码)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的三省学堂-学习辅助系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 三省学堂-学习辅助系统的…

深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度

看这篇前请先把我上一篇了解一下&#xff1a;深入理解数据结构第一弹——二叉树&#xff08;1&#xff09;——堆-CSDN博客 前言&#xff1a; 相信很多学习数据结构的人&#xff0c;都会遇到一种情况&#xff0c;就是明明最一开始学习就学习了时间复杂度&#xff0c;但是在后期…