<template>
|
<div class="doumee-filter">
|
<el-form inline label-suffix=":" @submit.native.prevent>
|
<template v-for="(item, index) in queryFormConfig.formItems">
|
<el-form-item v-if="item.type === 'input' && (showZk || index < listLength)" :key="item.filed">
|
<el-input v-model="searchForm[item.filed]"
|
:clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
|
:placeholder="item.label" class="w200" @change="changeForm(item.filed)"
|
@keyup.enter.native="handlekeyup(item.keyup || false)" />
|
</el-form-item>
|
<el-form-item v-if="item.type === 'moneySelect' && (showZk || index < listLength)" :key="item.label">
|
<el-input v-model="searchForm[item.filedStrt]"
|
:clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
|
:placeholder="item.start" style="width: 150px" />
|
<div class="date-division-line" style="margin-left: 10px;margin-bottom: 0;">~</div>
|
<el-input v-model="searchForm[item.filedEnd]"
|
:clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
|
:placeholder="item.end" style="width: 150px" />
|
</el-form-item>
|
<el-form-item v-if="item.type === 'select' && (showZk || index < listLength)" :key="item.filed">
|
<el-select v-model="searchForm[item.filed]" :filterable="item.filterable || true"
|
:clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
|
:placeholder="item.label" class="w200" @change="changeForm(item.filed)">
|
<el-option v-for="opt, i in item.options" :key="i" :value="item.valueCode ? opt[item.valueCode] : opt.value"
|
:label="item.labelCode ? opt[item.labelCode] : opt.label" />
|
</el-select>
|
</el-form-item>
|
<el-form-item v-if="item.type === 'date' && (showZk || index < listLength)" :key="item.filed">
|
<el-date-picker v-model="searchForm[item.filed]" type="date" value-format="yyyy-MM-dd" class="w200"
|
:clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
|
:placeholder="item.label" :picker-options="item.pickerOptions || {}" @change="changeForm(item.filed)" />
|
</el-form-item>
|
<el-form-item :label="item.label ? item.label : '起止时间'"
|
v-if="item.type === 'datetime' && (showZk || index < listLength)" :key="item.filed1">
|
<el-date-picker v-model="searchForm[item.filed1]" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
|
class="w200"
|
:clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
|
placeholder="开始时间" @change="changeForm(item.filed)" />
|
<el-date-picker v-model="searchForm[item.filed2]" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
|
class="w200"
|
:clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
|
placeholder="结束时间" @change="changeForm(item.filed)" />
|
</el-form-item>
|
<el-form-item v-if="item.type === 'daterange' && (showZk || index < listLength)" :key="item.filed">
|
<el-date-picker v-model="searchForm[item.filed]" value-format="yyyy-MM-dd" type="daterange"
|
range-separator="至"
|
:clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
|
:start-placeholder="item.start || ''" :end-placeholder="item.end || ''"
|
:picker-options="item.pickerOptions || {}" class="w400" @change="changeForm(item.filed)" />
|
</el-form-item>
|
<el-form-item v-if="item.type === 'timePicker' && (showZk || index < listLength)" :key="item.filed">
|
<el-time-picker v-model="searchForm[item.filed]" is-range range-separator="至" format="HH:mm"
|
value-format="HH:mm" start-placeholder="开始时间" end-placeholder="结束时间" placeholder="选择时间范围" class="w400"
|
@change="changeForm(item.filed)" />
|
</el-form-item>
|
<el-form-item v-if="item.type === 'datetimerange' && (showZk || index < listLength)" :key="item.filed">
|
<el-date-picker v-model="searchForm[item.filed]" format="yyyy-MM-dd HH:mm:ss"
|
value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" :default-time="['00:00:00', '23:59:59']"
|
:picker-options="item.pickerOptions || pickerOptions" range-separator="至"
|
:clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
|
:start-placeholder="item.start || '开始时间'" :end-placeholder="item.end || '结束时间'" class="w400"
|
@change="changeForm(item.filed)" />
|
</el-form-item>
|
<el-form-item :label="item.label ? item.label : ''"
|
v-if="item.type === 'slot' && (showZk || index < listLength)" :key="item.filed">
|
<slot :name="item.filed" />
|
</el-form-item>
|
</template>
|
<!-- 操作 -->
|
<el-form-item>
|
<el-button type="primary" @click="handleQuery">搜索</el-button>
|
<el-button v-if="showQk" @click="clear">重置</el-button>
|
<slot name="btns" />
|
<template v-if="queryFormConfig.formItems.length > listLength">
|
<el-button v-if="!showZk" type="text" @click="zkBtn">展开<i
|
class="el-icon-caret-bottom primaryColor" /></el-button>
|
<el-button v-if="showZk" type="text" @click="zkBtn">收起<i class="el-icon-caret-top primaryColor" /></el-button>
|
</template>
|
</el-form-item>
|
</el-form>
|
</div>
|
</template>
|
|
<script>
|
export default {
|
props: {
|
value: {
|
type: Object,
|
default: () => { }
|
},
|
showQk: {
|
type: Boolean,
|
default: true
|
},
|
listLength: {
|
type: Number,
|
default: 6
|
},
|
queryFormConfig: {
|
type: Object,
|
default: () => { }
|
}
|
},
|
data() {
|
return {
|
showZk: false,
|
pickerOptions: {
|
shortcuts: [{
|
text: '近7天',
|
onClick(picker) {
|
const end = new Date()
|
const start = new Date()
|
start.setTime(end.getTime() - 3600 * 1000 * 24 * 6)
|
picker.$emit('pick', [start, end])
|
}
|
},
|
{
|
text: '近30天',
|
onClick(picker) {
|
const end = new Date()
|
const start = new Date()
|
start.setTime(end.getTime() - 3600 * 1000 * 24 * 29)
|
picker.$emit('pick', [start, end])
|
}
|
},
|
{
|
text: '近60天',
|
onClick(picker) {
|
const end = new Date()
|
const start = new Date()
|
start.setTime(end.getTime() - 3600 * 1000 * 24 * 59)
|
picker.$emit('pick', [start, end])
|
}
|
},
|
{
|
text: '近90天',
|
onClick(picker) {
|
const end = new Date()
|
const start = new Date()
|
start.setTime(end.getTime() - 3600 * 1000 * 24 * 89)
|
picker.$emit('pick', [start, end])
|
}
|
}],
|
disabledDate(time) {
|
var curDate = new Date(new Date().toLocaleDateString()).getTime()
|
var preDate = new Date(curDate + 24 * 60 * 60 * 1000 - 1)
|
return time.getTime() > preDate
|
}
|
}
|
}
|
},
|
emits: ['input', 'handleQuery', 'clear'],
|
computed: {
|
searchForm: {
|
get() {
|
return this.value
|
},
|
set(value) {
|
this.$emit('input', value)
|
}
|
}
|
},
|
methods: {
|
handleQuery() {
|
this.$emit('handleQuery')
|
},
|
handlekeyup(pd) {
|
if (pd) {
|
this.$emit('handleQuery')
|
}
|
},
|
changeForm(filed) {
|
this.$emit('changeForm', filed)
|
},
|
zkBtn() {
|
this.showZk = !this.showZk
|
this.$emit('zkBtn', this.zk)
|
},
|
clear() {
|
this.$emit('clear')
|
}
|
}
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
.doumee-filter {
|
display: flex;
|
align-items: center;
|
position: relative;
|
flex-wrap: wrap;
|
align-items: center;
|
background-color: #fff;
|
border-bottom: 10px solid #f7f8f9;
|
margin: 0 -20px;
|
padding: 0 0 0 20px;
|
|
.el-input,
|
.el-select {
|
width: 200px;
|
margin-right: 20px;
|
margin-bottom: 20px;
|
height: 36px;
|
|
.el-input__inner {
|
/* color: $textColor; */
|
padding: 0 16px;
|
}
|
}
|
|
.el-date-editor {
|
width: 200px;
|
margin-right: 20px;
|
margin-bottom: 20px;
|
|
.el-input__inner {
|
padding-left: 30px;
|
}
|
}
|
|
.el-button {
|
margin-bottom: 20px;
|
}
|
|
.el-form-item {
|
margin-bottom: 20px;
|
margin-right: 20px;
|
|
.el-input,
|
.el-select,
|
.el-date-editor {
|
margin-right: 0;
|
}
|
|
.el-input,
|
.el-select,
|
.el-date-editor,
|
.el-button {
|
margin-bottom: 0;
|
}
|
}
|
}
|
</style>
|