• vue的el-select标签全选以及出现需要有禁用选项


    首先说一下遇到这种问题的解决思路吧,很简单先去https://element.eleme.cn/#/zh-CN 这个官网上找到对应的需求,然后就是拼接数据的问题。

    以下是全选的例子:

    <el-select class="fr" v-model="searchJobType" style=" 185px; margin-right:8px;" size="mini" type="text" multiple collapse-tags @change="changeSelect" placeholder="请选择类型查询">
        <el-option v-for="(type,ind) in typeList" :key=ind :label="type.label" :value="type.value"></el-option>
      </el-select>
    
    var Main = {
        data() {
          return {
            searchJobType: ['ALL_SELECT','TSINPUT', '01', '02', '03', '04', '05', '07', '08', '09', '11', '12'],
            oldSearchJobType: [],
            typeList: [
              {value: 'ALL_SELECT', label: '全部'},
              {value: 'TSINPUT', label: '时序数据采集任务'},
              {value: '01', label: 'RDBMS → HIVE全量'},
              {value: '02', label: 'RDBMS → HDFS全量'},
              {value: '03', label: 'RDBMS → HBASE全量'},
              {value: '04', label: 'HDFS → RDBMS'},
              {value: '05', label: 'HIVE  → RDBMS'},
              {value: '07', label: 'RDBMS → HIVE增量'},
              {value: '08', label: 'RDBMS → HBASE增量'},
              {value: '09', label: '文件 → RDBMS'},
              {value: '11', label: '数据对象 → 数据对象'},
              {value: '12', label: 'FTP服务器 → 文件系统'},
            ]
          }
        },
        methods:{
            changeSelect(val) {
            const allValues = [];
            // 保留所有值
            for (const item of this.typeList) {
              allValues.push(item.value)
            }
            // 用来储存上一次的值,可以进行对比
            const oldVal = this.oldSearchJobType.length === 1 ? this.oldSearchJobType[0] : [];
            // 若是全部选择
            if (val.includes('ALL_SELECT')) this.searchJobType = allValues;
            // 取消全部选中 上次有 当前没有 表示取消全选
            if (oldVal.includes('ALL_SELECT') && !val.includes('ALL_SELECT')) this.searchJobType = [];
            // 点击非全部选中 需要排除全部选中 以及 当前点击的选项
            // 新老数据都有全部选中
            if (oldVal.includes('ALL_SELECT') && val.includes('ALL_SELECT')) {
              const index = val.indexOf('ALL_SELECT');
              val.splice(index, 1); // 排除全选选项
              this.searchJobType = val
            }
            // 全选未选 但是其他选项全部选上 则全选选上 上次和当前 都没有全选
            if (!oldVal.includes('ALL_SELECT') && !val.includes('ALL_SELECT')) {
              if (val.length === allValues.length - 1) this.searchJobType = ['ALL_SELECT'].concat(val)
            }
            // 储存当前最后的结果 作为下次的老数据
            this.oldSearchJobType[0] = this.searchJobType;
          },
        }
      }
    var Ctor = Vue.extend(Main)
    new Ctor().$mount('#app')
    原文链接:https://www.cnblogs.com/zhenggaowei/p/9828364.html

    有时候还会遇到一种情况,有时候可能会根据某种条件导致不能选择某一个选项,就需要有禁用项。以下网站可参考的代码。

    在el-option中,设定disabled值为 true,即可禁用该选项
    
    <template>
      <el-select v-model="value" placeholder="请选择">
        <el-option
          v-for="item in options"
          :key="item.value"
          :label="item.label"
          :value="item.value"
          :disabled="item.disabled">
        </el-option>
      </el-select>
    </template>
    
    <script>
      export default {
        data() {
          return {
            options: [{
              value: '选项1',
              label: '黄金糕'
            }, {
              value: '选项2',
              label: '双皮奶',
              disabled: true
            }, {
              value: '选项3',
              label: '蚵仔煎'
            }, {
              value: '选项4',
              label: '龙须面'
            }, {
              value: '选项5',
              label: '北京烤鸭'
            }],
            value: ''
          }
        }
      }
    </script>

    个人代码列子,我的工作需求是这样的。首先要选择分行进行工单推送,因为分行较多,所以很有可能这次推送了,下次再进行推送的又选中该分行了,这样就会造成该分行数据错乱问题,所以就需要有一个判断,已经推送的就显示为禁用项。

    前台代码:

    <el-select @change="changeBank()" v-model="bankIdList" multiple size="small" collapse-tags style="margin-left: 20px;"
                           placeholder="请选择分行(可多选)">
                  <el-option
                    v-for="item in options"
                    :key="item.id"
                    :label="item.name"
                    :value="item.id"
                    :disabled="item.disabled">
                  </el-option>
                </el-select>

    // 加载所有分行
    loadAllBranch() {
    console.log(1);
    this.utils.post(this,'allBranchForVue.do',{orderId:this.wo_id},d=>{
    console.log(d);
    this.options = d;
    });
    },

    后台代码:

    
    
       String orderId = request.getParameter("orderId");
    List<WorkOrder> wList = null;
    if(StringUtils.isNoneBlank(orderId)){
    wList = workOrderService.getnameSXBybossID(orderId); //获取已经推送的分行信息
    }

    UserModel u = AuthUtil.getLoginUser(request);
    //List<OrgModel> list = orgService.getAllBranch(u.getId());
    List<OrgModel> list = orgService.getAllBranchForVue(); //获取所有分行
    JSONArray json = new JSONArray();
    for (OrgModel om: list) {
    JSONObject jsonObject=new JSONObject();
    jsonObject.put("id",om.getId());
    jsonObject.put("name",om.getName());
    jsonObject.put("nameSX",om.getNameSX());
    jsonObject.put("parent",om.getParent());

    //QCQ20190712 判断是否已推送 已推送变灰色不可选 此功能暂时屏蔽
    /*if(!wList.isEmpty() && StringUtils.isNoneBlank(om.getNameSX())){
    for (WorkOrder wo: wList) {
    if(wo.getWorkOrderId().contains(om.getNameSX())){
    jsonObject.put("name",om.getName() + " (已推送)");
    jsonObject.put("disabled",true);
    }
    }
    }*/
    json.add(jsonObject);
    }
    try {
    response.getWriter().write(json.toString()); // 将JSON数据返回页面
    } catch (Exception e) {
    e.printStackTrace();
    }
     
  • 相关阅读:
    二进制安全的一些基础知识
    栈溢出笔记-第五天
    一次基于白盒的渗透测试
    栈溢出笔记-第四天
    Hadoop1-认识Hadoop大数据处理架构
    Kubernetes1-K8s的简单介绍
    Docker1 架构原理及简单使用
    了解使用wireshark抓包工具
    Linux系统设置开机自动运行脚本的方法
    Mariadb/Mysql 主主复制架构
  • 原文地址:https://www.cnblogs.com/qcq0703/p/11146796.html
Copyright © 2020-2023  润新知