<template>
|
<div>
|
<el-select
|
style="width: 150px"
|
v-if="['select', 'selectList'].indexOf(singleSearch.type) != -1"
|
v-model="searchFormFields[singleSearch.field]"
|
:filterable="
|
singleSearch.filter || singleSearch.data.length > 10 ? true : false
|
"
|
:placeholder="'请选择' + singleSearch.title"
|
clearable
|
>
|
<el-option
|
v-for="item in singleSearch.data"
|
:key="item.key"
|
:label="item.value"
|
:value="item.key"
|
>
|
</el-option>
|
</el-select>
|
<div
|
class="date-range"
|
v-else-if="['date', 'datetime'].indexOf(singleSearch.type) != -1"
|
>
|
<el-date-picker
|
style="width: 210px"
|
:clearable="false"
|
unlink-panels
|
v-model="searchFormFields[singleSearch.field]"
|
type="daterange"
|
:value-format="getDateFormat(singleSearch)"
|
:placeholder="singleSearch.title"
|
>
|
</el-date-picker>
|
<i
|
class="el-icon-circle-close"
|
@click="dateRangeClear(singleSearch.field)"
|
></i>
|
</div>
|
<el-cascader
|
style="width: 210px"
|
clearable
|
v-model="searchFormFields[singleSearch.field]"
|
v-else-if="singleSearch.type == 'cascader'"
|
:options="singleSearch.data"
|
:props="{ checkStrictly: true }"
|
>
|
</el-cascader>
|
<el-input
|
clearable
|
v-else
|
style="width: 150px"
|
size="default"
|
v-model="searchFormFields[singleSearch.field]"
|
:placeholder="singleSearch.title"
|
@keypress="tiggerPress"
|
/>
|
</div>
|
</template>
|
<script>
|
export default {
|
props: {
|
singleSearch: {
|
type: Object,
|
default: {},
|
},
|
searchFormFields: {
|
type: Object,
|
default: () => {
|
return {};
|
},
|
},
|
tiggerPress: {
|
type: Function,
|
default: () => {},
|
},
|
},
|
methods: {
|
compareDate(date1, date2) {
|
if (!date2) {
|
return true;
|
}
|
return (
|
date1.valueOf() <
|
(typeof date2 == "number" ? date2 : new Date(date2).valueOf())
|
);
|
},
|
getDateFormat(item) {
|
//见https://day.js.org/docs/zh-CN/display/format
|
return item.type == "date" ? "YYYY-MM-DD" : "YYYY-MM-DD HH:mm:ss";
|
},
|
getDateOptions(date, item) {
|
if ((!item.min && !item.max) || !date) {
|
return false;
|
}
|
if (item.min && item.min.indexOf(" ") == -1) {
|
//不设置时分秒,后面会自动加上 08:00
|
item.min = item.min + " 00:00:000";
|
}
|
return (
|
this.compareDate(date, item.min) || !this.compareDate(date, item.max)
|
);
|
},
|
dateRangeClear(field) {
|
this.searchFormFields[field]=[undefined,undefined];
|
},
|
},
|
created() {
|
this.singleSearch.dateType = this.singleSearch.type + "range";
|
if (
|
this.singleSearch.type == "date" ||
|
this.singleSearch.type == "datetime"
|
) {
|
var _dateVal = this.searchFormFields[this.singleSearch.field];
|
if (
|
typeof this.singleSearch.range == "boolean" &&
|
!this.singleSearch.range
|
) {
|
this.searchFormFields[this.singleSearch.field] = "";
|
this.singleSearch.dateType = this.singleSearch.type;
|
return this.singleSearch.dateType;
|
} else if (!(_dateVal instanceof Array)) {
|
this.searchFormFields[this.singleSearch.field] = ["", ""];
|
} else if (_dateVal.length != 2) {
|
_dateVal.splice(0);
|
_dateVal.push(...["", ""]);
|
}
|
}
|
},
|
};
|
</script>
|
<style lang="less" scoped>
|
.date-range{
|
position: relative;
|
> i{
|
display: none;
|
height: 27px;
|
line-height: 27px;
|
right: 1px;
|
top: 3px;
|
font-size: 13px;
|
color: #b4adad;
|
position: absolute;
|
padding: 0 6px 0 3px;
|
background: #ffff;
|
cursor: pointer;
|
}
|
}
|
.date-range:hover > i{
|
display: inline-block;
|
}
|
</style>
|