You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.4 KiB
Vue

4 years ago
<template>
<el-date-picker
v-if="options!== null && options.attrs!==null"
ref="dateRef"
v-model="options.value"
:type="options.attrs.type"
:range-separator="$t(options.attrs.rangeSeparator)"
:start-placeholder="$t(options.attrs.startPlaceholder)"
:end-placeholder="$t(options.attrs.endPlaceholder)"
:placeholder="$t(options.attrs.placeholder)"
:append-to-body="inScreen"
style="min-height: 36px;"
@change="dateChange"
/>
</template>
<script>
import { timeSection } from '@/utils'
export default {
props: {
element: {
type: Object,
default: null
},
inDraw: {
type: Boolean,
default: true
},
inScreen: {
type: Boolean,
required: false,
default: true
}
},
data() {
return {
options: null,
operator: 'between',
values: null
}
},
created() {
this.options = this.element.options
if ((this.options.attrs.type === 'date' || this.options.attrs.type === 'daterange') && Array.isArray(this.options.value) && this.options.value.length === 0) {
this.options.value = null
}
if (!!this.options && !!this.options.value && Object.keys(this.options.value).length === 0) {
this.options.value = null
}
},
methods: {
search() {
this.setCondition()
},
setCondition() {
const param = {
component: this.element,
value: Array.isArray(this.options.value) ? this.options.value : [this.options.value],
operator: this.operator
}
param.value = this.formatValues(param.value)
this.inDraw && this.$store.commit('addViewFilter', param)
},
dateChange(value) {
this.setCondition()
this.styleChange()
},
formatValues(values) {
if (!values || values.length === 0) {
return []
}
if (this.options.attrs.type === 'daterange') {
if (values.length !== 2) {
return null
}
let start = values[0]
let end = values[1]
start = timeSection(start, 'date')[0]
end = timeSection(end, 'date')[1]
const results = [start, end]
return results
} else {
const value = values[0]
return timeSection(value, this.options.attrs.type)
}
},
styleChange() {
this.$store.commit('recordStyleChange')
}
}
}
</script>
<style lang="scss" scoped>
</style>