参考

<template>
  <el-dialog title="高级检索" :visible.sync="dialogVisible" width="100%" fullscreen>
    <div class="container">
      <div class="head">
        <el-form :inline="true" :model="form" class="demo-form-inline">
          <el-form-item label="高级搜索">
            <el-select v-model="form.region" 
            placeholder="活动区域" size="small" 
            style="width:140px" @change="changeoption">
              >
              <el-option
                v-for="(item,index) in data"
                :key="index"
                :label="item.fielezh"
                :value="item.id"
              ></el-option>
            </el-select>
            <el-select
              v-model="form.regiontype"
              placeholder="活动区域"
              size="small"
              style="margin-left:5px;width:80px"
            >
              <el-option v-for="(item,index) in select"
                :key="index"
                :label="item.name"
                :value="item.num"></el-option>
        
            </el-select>
          </el-form-item>
          <el-form-item>
            <el-input v-model="searchtext" placeholder="请输入搜索内容" size="small"></el-input>
          </el-form-item>
          <el-form-item class="clse">
            <el-button type="primary" @click="onSubmit" size="small">关闭检索</el-button>
          </el-form-item>
        </el-form>
      </div>
      <div class="midle">
        <div class="aside">
            <div>
                <el-button type="primary" size="small" @click="addoption">增加检索条件</el-button>
                <div style="float:right">
                    <el-button type="primary" size="small" plain @click="submit">确定</el-button>
                <el-button type="primary" size="small" plain>重置</el-button>
                </div>  
            </div>
            <div v-for="(item,index) in count" :key="index" class="opty">
            <el-select
              v-model="forms[index]"
              placeholder="活动区域"
              size="small"
              style="margin-left:5px;width:80px"
            >
              <el-option v-for="(item,index) in option"
                :key="index"
                :label="item.name"
                :value="item.num"></el-option>
            </el-select>

            <el-select v-model="forms1[index]" 
            placeholder="活动区域" size="small" 
            style="width:120px ; margin:0 5px" @change="changeoptions($event,index)">
              >
              <el-option
                v-for="(item,index) in data"
                :key="index"
                :label="item.fielezh"
                :value="item"
              ></el-option>
            </el-select>
            <el-select
             v-if="!selectItem[index]"
              v-model="forms2[index]"
              placeholder="活动区域"
              size="small"
              style="margin-left:5px;width:80px"
            >
              <el-option v-for="(item,index) in selecttion"
                :key="index"
                :label="item.name"
                :value="item.num"></el-option>
            </el-select>
            <span v-else>
               <el-select
             v-show="selectItem[index].type == '字符'||selectItem[index].type == '值列表'
             ||selectItem[index].type == '布尔'"
              v-model="forms2[index]"
              placeholder="活动区域"
              size="small"
              style="margin-left:5px;width:80px"
            >
              <el-option v-for="(item,index) in selecttion"
                :key="index"
                :label="item.name"
                :value="item.num"></el-option>
            </el-select>

            <el-select
            v-show="selectItem[index].type == '数字'"
              v-model="forms2[index]"
              placeholder="活动区域"
              size="small"
              style="margin-left:5px;width:80px"
            >
              <el-option v-for="(item,index) in selecttion1"
                :key="index"
                :label="item.name"
                :value="item.num"></el-option>
            </el-select>
            
            <el-select
             v-show="selectItem[index].type == '日期'"
              v-model="forms2[index]"
              placeholder="活动区域"
              size="small"
              style="margin-left:5px;width:80px"
            >
              <el-option v-for="(item,index) in selecttion2"
                :key="index"
                :label="item.name"
                :value="item.num"></el-option>
            </el-select>

            </span>
            
            <span v-if="forms1[index]">
               <el-input v-model="stext[index]"
               v-if="selectItem[index].type == '字符'||
                selectItem[index].type == '值列表'"
                placeholder="请输入搜索内容"
                 size="small" style="width:75%; margin:8px"></el-input>

                 <el-input v-model="stext[index]"
               v-else-if=" selectItem[index].type == '数字' && forms2[index]!==5"
                placeholder="请输入搜索内容"
                 size="small" style="width:75%; margin:8px"></el-input>


                    <el-date-picker
                    v-else-if="selectItem[index].type == '日期' && forms2[index]!==5" style="width:75%; margin:8px"
                      size="small"
                      v-model="stext[index]"
                      type="date"
                      placeholder="选择日期">
                    </el-date-picker>
                    
                      <el-radio-group v-model="stext[index]" v-else-if="selectItem[index].type == '布尔'" >
                          <el-radio :label="0"></el-radio>
                          <el-radio :label="1"></el-radio>
                    
                        </el-radio-group>
                        <el-date-picker
                      v-else-if="selectItem[index].type == '日期' && forms2[index]==5"
                      v-model="stext[index]"
                      size='small'
                      style="width:75%; margin:8px"
                      type="daterange"
                      range-separator="至"
                      start-placeholder="开始日期"
                      end-placeholder="结束日期">
                    </el-date-picker>

                    <el-form :inline="true"
                     class="demo-form-inline" v-else-if="selectItem[index].type == '数字' && forms2[index]==5">
                    <!-- <el-form-item label="审批人">
                      <el-input v-model="formInline.user" placeholder="审批人"></el-input>
                    </el-form-item> -->
                    <el-form-item >
                          <el-col :span="11">
                           <el-input v-model="stext[index]" placeholder="请输入" size='small'></el-input>
                          </el-col>
                          <el-col class="line" :span="2">-</el-col>
                          <el-col :span="11">
                            <el-input v-model="stexts[index]" placeholder="请输入" size='small'></el-input>
                          </el-col>
                        </el-form-item>
                   
                  
                  </el-form>
                  </span>
                 <el-button type="danger" size="small" @click="delitem(index)">删除</el-button>
            </div>

            </div>

        </div>
        <div class="main"></div>
      </div>
    </div>
  </el-dialog>
</template>

<script>
export default {
  props: ["opend"],
  data() {
    return {
      dialogVisible: false,
      searchtext: "",
      types:'',
      selectItem:[{type:'字符'}],
      select:'',
      count:[],
      forms:[],
      forms1:[],
      forms2:[],
      forms3:[],
      forms4:[],
      stext:[],
      stexts:[],
      listArr:[],
      form: {
        region: "",
        regiontype: "",

      },

      data: [
        { fielezh: "专业", type: "字符", id: 12 },
        { fielezh: "专家", type: "字符", id: 14 },
        { fielezh: "创建时间", type: "日期", id: 54 },
        { fielezh: "工本费", type: "值列表", id: 134 },
        { fielezh: "是否报销", type: "布尔", id: 123 },
        { fielezh: "价钱", type: "数字", id: 145 },
        { fielezh: "作者", type: "字符", id: 166 }
      ],
      selecttion: [
        { name: "包含", num: 0 },
        { name: "不包含", num: 1 },
        { name: "等于", num: 2 },
        { name: "不等于", num: 3},
        { name: "大于", num: 4 },
        { name: "介于", num: 5 },
        { name: "小于", num: 6 }
      ],
       selecttion1: [
        { name: "包含", num: 0 },
        { name: "不包含", num: 1 },
        { name: "等于", num: 2 },
        { name: "不等于", num: 3 },
        { name: "小于", num:6},
        { name: "不小于", num: 7 },
        { name: "介于", num: 5 },
        { name: "大于", num: 4 },
        { name: "大于或等于", num: 8 }
      ],
       selecttion2: [
        { name: "包含", num: 0 },
        { name: "不包含", num: 1 },
        { name: "等于", num: 2 },
        { name: "不等于", num: 3 },
        { name: "介于", num: 5},
      ],
      option:[
          { name: "", num: 0 },
        { name: "并且", num: 1 },
      ]

    };
  },
  created(){
    this.select = this.selecttion
  },
  watch: {
    opend(val) {
      this.dialogVisible = val;
    },
    dialogVisible(val) {
      console.log(val);
      this.$emit("onchange", val);
    }
  },
  methods: {
    // 关闭检索
    onSubmit() {
      this.dialogVisible = false;

    },

    changeoption(val){
       console.log(val)
       this.data.forEach(item => {
           if (item.id == val) {
             this.types= item.type 
               switch (item.type) {
                   case '字符':
                       this.select = this.selecttion
                       break;
                        case '日期':
                       this.select = this.selecttion1
                       break;
                        case '布尔':
                       this.select = this.selecttion2
                       break;
                        case '数字':
                       this.select = this.selecttion1
                       break;
                        case '值列表':
                       this.select = this.selecttion
                       break;  
               }
           }
       });
    },
        changeoptions(e,inx){
      console.log(e,inx)
      this.forms1[inx] = e.fielezh
      this.selectItem.splice(inx,1,e)
      this.selectItem.splice(inx+1,1,{type:'字符'})
      console.log(this.selectItem)
 
    },
    // 增加检索条件
    addoption(){
        if (this.count <= this.data.length+1) {
            this.count++
        }else{
          this.selectItem.splice(0,1,{type:'字符'})
            return this.$message.success('超出最大搜索条件')
        }
    },
    // 删除检索条件
    delitem(inx){
      // this.selectItem.splice(inx,1)
       if (this.count >=0) {
            this.count--
           this.selectItem.splice(inx,1)
           this.forms1.splice(inx,1)
           this.listArr?this.listArr.splice(inx,1):[]
        }else{
            return this.$message.success('超出最大搜索条件')
        }
    },
    // 确定
    submit(){
      console.log(this.forms2)
      console.log(this.selectItem)
      for (const index in this.forms1) {
        console.log(index)
        this.listArr.splice(index,1,{
        andor:this.forms[index],
        value:this.stext[index],
        fielezh:this.selectItem[index].fielezh,
        types:this.selectItem[index].type,
        option:this.forms2[index]
      })  
      }

      const query = [{
        andor:0,
        value:this.searchtext,
        fielezh:this.form.region,
        types:this.types,
        option:this.form.regiontype
      },...this.listArr]
      console.log(query)
    }
  }
};
</script>

<style lang="scss" scoped>
.container {
  height: 1000px;
  width: 100%;
}
.head {
  height: 60px;
  .clse {
    float: right;
  }
}
.midle {
  display: flex;
  width: 100%;
  height: 640px;
  .aside {
    width: 310px;
    padding: 0 5px;
    .opty{
        margin: 10px 0;
        padding-bottom: 20px;
        border-bottom:rgb(197, 187, 191) solid 1px;
    }
  }
  .main {
    flex: 1;
    background: burlywood;
  }
}
</style>

 

posted @ 2020-07-19 17:29  hongwj  阅读(152)  评论(0编辑  收藏  举报