0
点赞
收藏
分享

微信扫一扫

《ElementPlus 与 ElementUI 差异集合》el-input 和 el-button 属性 size 有变化

海牙秋天 03-12 09:30 阅读 4

<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;
  }
}
举报

相关推荐

0 条评论