vue实现给select框的option设置不同的背景颜色并根据背景颜色置灰对应的option选项

需求:不同的背景颜色对者不同的状态。用户需要点击select框就能直观看到option各选项代表的状态,并根据背景颜色置灰对应的option选项。

思路:用forEach给该select框的list数组的每一项添加item.color和item.disabled。

代码:

1、el-dialog中的写法如下:

    <el-dialog v-dialogDrag :title="title" :visible.sync="addCourseTicketFlag"  :appendToBody="true" width="40%">
      <el-form ref="ruleForm" :model="ruleForm" :rules="ruleFormRules" label-width="200px" class="demo-ruleForm">
        <el-form-item prop="roomId" label="预订教室:">
          <el-select v-model="ruleForm.roomId" style="width: 220px" clearable filterable placeholder="请选择教室" @change="changeRoomId" >
            <el-option v-for="item in roomList" :key="item.roomId" :label="item.roomName" :value="item.roomId"/>
          </el-select>
        </el-form-item>
        <el-form-item prop="startDate" label="预约日期:">
          <el-date-picker v-model="ruleForm.startDate" style="width: 220px" type="date" placeholder="请选择预约日期" :picker-options="expireDateOption" @change="startDateChange" value-format="yyyy-MM-dd"/>
        </el-form-item>
        <el-form-item label="课程排班班次:">
          <el-select v-model="ruleForm.courseId" style="width:220px;margin-right:10px;" clearable filterable placeholder="请选择课程排班列表" @change="courseIdChange">
            <el-option v-for="(item,index) in courseIdList" :key="index" :label="item.name" :value="item.id"/>
          </el-select>
          <el-select v-model="ruleForm.courseDetailId" style="width:220px;" clearable filterable  placeholder="请选择班次" @change="courseDetailIdChange" @click.native="getRankColor">
            <el-option :disabled="item.disabled" :style="{background:item.color}" v-for="(item,index) in courseDetailList||[]" :key="index" :label="item.name" :value="item.id"/>
          </el-select>
        </el-form-item>
        <el-form-item label="预约时段:">
          <el-time-select placeholder="开始时间" v-model="startTime" style="width: 99px" :picker-options="{start: '09:00',step: '00:05',end: '18:30'}"/> <span> 至 </span>
          <el-time-select placeholder="结束时间" v-model="endTime"  style="width: 99px" :picker-options="{start: '09:00',step: '00:05',end: '18:30',minTime: startTime}" @change="endTimeChange"/>
        </el-form-item>
        <el-form-item prop="courseDuration" label="预计课程时长(秒):">
          <el-input style="width: 220px" v-model.trim="ruleForm.courseDuration" @keyup.native="upNumber" @change="defaultWorshipChange" clearable/></el-form-item>
        <el-form-item label="备注:"><el-input style="width: 220px" v-model.trim="ruleForm.mark" clearable/></el-form-item>
        <el-form-item>
          <el-button type="primary" @click="courseAddOrUpdate()">确认</el-button>
          <el-button type="primary" @click="addCourseTicketFlag=false">关闭</el-button>
        </el-form-item>
      </el-form>
    </el-dialog>

2、需要import引入,并在data中定义需要的响应式字段:

// 引入
import {courseAddOrUpdateAction } from "@/api/user";
import {expireDateOption} from "@/utils/index";
import * as colorUtil from "@/utils/back-ground-color";

// data定义响应式字段等数据
data () {
    return {
      expireDateOption:expireDateOption,
      title:'新增课程预约',
      colorUtil:colorUtil,
      addCourseTicketFlag:false,
      startTime:null,
      endTime:null,
      ruleForm:{roomId:null,startDate:null,courseId:null,courseDetailId:null,courseDuration:null,mark:null},
      ruleFormRules:{
        roomId:[{required: true, message: '请选择教室', trigger: 'blur' }],
        courseDuration:[{required: true, message: '请选择预约课程时长', trigger: 'blur' }]
      },
      courseIdList:[],//排班列表list
      courseDetailList:[]//班次list
    }

3、重点来了,用forEach给select框的courseDetailList数组每项都添加color属性并赋值对应的颜色,给每一项加入disabled并赋值:


    courseIdChange(val){
      this.courseIdList&&this.courseIdList.forEach(item => {if(val == item.id) this.courseDetailList = item.courseDetailList;});
      this.getRankColor();
    },
    getRankColor(){
      let curRoomId=this.roomList.find(item => item.roomId == this.ruleForm.roomId)
      let curCourseId=this.courseIdList.find(item => item.id == this.ruleForm.courseId);
      this.courseDetailList&&this.courseDetailList.forEach(item => {
        let colorData=this.colorUtil.getRankHallColor(item,curRoomId,curCourseId);//这里是调用我封装好的颜色插件
        item.color=colorData.color;//用forEach给select框的courseDetailList数组每项都添加color属性并赋值对应的颜色
        if(colorData.color==colorUtil.ColorState.NoUse.color){
          item.disabled = false;//给每一项加入disabled并赋值
        }else{
          item.disabled =true;
        }
      });
    },

小伙伴们写的功能实现了吗?咱们下期见哇。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值