| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |