app-date-range.vue 2.9 KB
<template>
    <div class="app-date-range">
        <el-date-picker
            v-model='curdate'
            :type="datetype"
            popper-class="app-date-range-popper"
            :format="valFormat"
            :disabled="disabled"
            :readonly="readonly"
            :range-separator="$t('components.appdaterange.separator')"
            :start-placeholder="$t('components.appdaterange.start')"
            :end-placeholder="$t('components.appdaterange.end')"
            align="center">
        </el-date-picker>
    </div>
</template>

<script lang="ts">
import { Component, Vue, Prop } from 'vue-property-decorator';

@Component({
})
export default class AppDateRange extends Vue {

    /**
     * 编辑项名称
     *
     * @type {string}
     * @memberof AppDateRange
     */
    @Prop() public name!: string;

    /**
     * 是否禁用
     *
     * @type {boolean}
     * @memberof AppDateRange
     */
    @Prop() public disabled!: boolean;

    /**
     * 只读模式
     * 
     * @type {boolean}
     */
    @Prop({default: false}) public readonly?: boolean;

    /**
     * 表单数据对象
     *
     * @type {*}
     * @memberof AppDateRange
     */
    @Prop() public activeData: any;

    /**
     * 值格式
     *
     * @type {string}
     * @memberof AppDateRange
     */
    @Prop() public format!: string;

    /**
     * 编辑器类型
     *
     * @type {string}
     * @memberof AppDateRange
     */
    @Prop() public editorType!: string;

    /**
     * 关系表单项集合
     *
     * @type {string[]}
     * @memberof AppDateRange
     */
    @Prop() public refFormItem!: string[];

    /**
     * 处理值格式
     *
     * @readonly
     * @memberof AppDateRange
     */
    get valFormat() {
      if (this.format) {
        return this.format.replace('YYYY', 'yyyy').replace('DD', 'dd');
      } else {
        return '';
      }
    }

    /**
     * 处理时间格式
     *
     * @readonly
     * @memberof AppDateRange
     */
    get curdate() {
      let value: any[] = [];
      this.refFormItem.forEach((foritem: any) => {
        if (this.activeData[foritem]) {
          value.push(this.activeData[foritem]);
        }
      })
      return value;
    }

    /**
     * 处理时间格式
     *
     * @readonly
     * @memberof AppDateRange
     */
    get datetype() {
        return Object.is(this.editorType,'DATERANGE') ? 'datetimerange' : 'daterange';
    }

    /**
     * 处理时间格式
     *
     * @readonly
     * @memberof AppDateRange
     */
    set curdate(dates: any) {
        if(dates) {
          dates.forEach((date: any,index: number) => {
            this.$emit('formitemvaluechange', { name: this.refFormItem[index], value: date });
          });
        } else {
          this.refFormItem.forEach((foritem: any) => {
            this.$emit('formitemvaluechange', { name: foritem, value: null });
          })
        }
    }
}
</script>