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