自定义选择表单组件

我们在项目中会遇到很多的筛选字段组成筛选条件的表单,如果按照筛选字段全部渲染到页面,会造成页面布局臃肿的结果,如果能够自定义选择经常用的表单进行操作,是不是会人性化很多呢?

如下图,这是截取的一个片段,十七个查询条件,造成页面头重脚轻,因此需要进行自定义渲染

那么首先我们分析一下,这里的表单都是一个个单独的查询字段,有部分查询表单是公共组件的套用,如果用v-if进行筛选,实际上v-if的判断条件,与筛选后的字段是不容易匹配的,这里我用的是增加标识的方法,通过我增加的标识,判断表单是否需要渲染

首先我们需要把你所需要的数据源写好,并且增添一个标识,这里我用的id:1的标识,我可以通过id值的不同分别渲染,

这是做好后的效果,通过显示更多按钮来进行弹窗

这是公共组件的代码,就是弹窗的代码

<template>
<el-dialog
  title="添加"
  :visible.sync="dialogVisible"
  width="50%"
  :before-close="handleClose">
  <span class="spanclass">显示查询条件</span>
  <div class="sitsCheckbox">
  <div class="syyyyytsh"  v-for="(checkOne,index) in workVideosOptionss" @click='checkedOne(checkOne.id)' :key="checkOne.id">
	<input type="checkbox" :checked="checkStatusList.indexOf(checkOne.id)>=0">
	<span>{{checkOne.dictLabel}}</span>
    </div>
    </div>
    <span class="spanclass">显示列表字段</span>
     <div class="sitsCheckbox">
  <div class="syyyyytsh"  v-for="(checkOne,index) in tableListCrows" @click='checkedOne(checkOne.id)' :key="checkOne.id">
	<input type="checkbox" :checked="checkStatusList.indexOf(checkOne.id)>=0">
	<span>{{checkOne.dictLabel}}</span>
    </div>
    </div>
    <el-button class="btnstyle" type="primary" @click="senInputStatus">确 定</el-button>
    <el-button class="btnstyle" @click="clearInputStatus">取 消</el-button>
</el-dialog>

</template>
<script>
  export default {
    data() {
      return {
        dialogVisible: false,
        checkStatusList:[7,8,5,9],
        
           workVideosOptionss: [
        {
          dictLabel: "工作主体",
          id:1
        },
        {
          dictLabel: "所属单位",
          id:2
        },
        {
          dictLabel: "计划类型",
          id:3
        },
        {
          dictLabel: "工作专业",
          id:4
        },
        {
          dictLabel: "流程状态",
          id:5
        },
        {
          dictLabel: "风险等级",
          id:6
        },
        {
          dictLabel: "工作任务",
          id:7
        },
        {
          dictLabel: "计划时间",
          id:8
        },
        {
          dictLabel: "作业状态",
          id:9
        },
        {
          dictLabel: "厂站/线路",
          id:10
        },
        {
          dictLabel: "作业视频",
          id:11
        },
        {
          dictLabel: "班组",
          id:12
        },
        {
          dictLabel: "负责人",
          id:13
        },
        {
          dictLabel: "承接计划",
          id:14
        },
        {
          dictLabel: "关联票",
          id:15
        },
        {
          dictLabel: "填报人",
          id:16
        },
        {
          dictLabel: "作业部门",
          id:17
        },
      ],
      tableListCrows:[
        {
          dictLabel: "工作任务",
          id:501
        },
        {
          dictLabel: "单位",
          id:502
        },
        {
          dictLabel: "工作主体",
          id:503
        },
        {
          dictLabel: "工作专业",
          id:504
        },
        {
          dictLabel: "计划类型",
          id:505
        },
        {
          dictLabel: "工作负责人",
          id:506
        },
        {
          dictLabel: "开始日期",
          id:507
        },
        {
          dictLabel: "结束日期",
          id:508
        },
        {
          dictLabel: "流程状态",
          id:509
        },
        {
          dictLabel: "作业状态",
          id:510
        },
        {
          dictLabel: "综合评估等级",
          id:511
        },
        {
          dictLabel: "录入时间",
          id:512
        },
        {
          dictLabel: "作业视频",
          id:513
        },
       
      ],
      };
    },
    methods: {
    checkedOne(value){
        let idIndex=this.checkStatusList.indexOf(value);
        if(idIndex>=0){
            this.checkStatusList.splice(idIndex,1)
        }else{
            this.checkStatusList.push(value)
        }

    },
        senInputStatus(){
            if(this.checkStatusList==''){
         this.$message({
          message: '内容不能为空',
          type: 'warning'
                });
         return
            }
            this.$emit("sendUser",this.checkStatusList)
            this.dialogVisible=false
            console.log(this.checkStatusList)

        },

        handleClose(){
            this.dialogVisible=false
        },
        clearInputStatus(){
            this.dialogVisible=false;
            
        },
    },
    mounted(){

    },
  };
</script>
<style scoped>
.el-dialog{
    width: 1000px;
    height: 440px;
}
.sitsCheckbox{
    width: 900px;
    height: 120px;
    display: flex;
    flex-wrap: wrap;
}
.sitsCheckbox .syyyyytsh{
    width: 120px;
    margin-left: 20px;
}
.spanclass{
    margin: 0px 10px 10px 10px;
    font-weight: bold;
    display: inline-block;
}
.btnstyle{
    float: right;
    margin: 20px;
}
</style>

 这里的代码是把选择后的id值传给父组件,父组件接收后,根据接收的id值进行条件判断,如果存在1,第一个表单为true,并且通过localstorage存入浏览器,方便下次使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值