<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>