date.vue 3.98 KB
<template>
  <div>
    <template v-if="data.type.indexOf('range') != -1">
      <el-form-item label="开始占位内容" label-width="110px">
        <el-input
          v-model="data.startPlaceholder"
          clearable
          placeholder="开始占位内容"
        ></el-input>
      </el-form-item>
      <el-form-item label="结束占位内容" label-width="110px">
        <el-input
          v-model="data.endPlaceholder"
          clearable
          placeholder="结束占位内容"
        ></el-input>
      </el-form-item>
    </template>
    <el-form-item label="占位内容" v-else>
      <el-input
        v-model="data.placeholder"
        clearable
        placeholder="占位内容"
      ></el-input>
    </el-form-item>
    <el-form-item label="默认值">
      <el-input v-model="data.value" clearable placeholder="默认值"></el-input>
    </el-form-item>
    <el-form-item label="显示格式化" label-width="100px">
      <el-input
        v-model="data.format"
        clearable
        placeholder="显示格式化"
      ></el-input>
    </el-form-item>
    <el-form-item label="值格式化">
      <el-input
        v-model="data.valueFormat"
        clearable
        placeholder="值格式化"
      ></el-input>
    </el-form-item>
    <el-form-item
      label="取消范围联动"
      label-width="110px"
      v-if="['timerange', 'daterange', 'datetimerange'].includes(data.type)"
    >
      <el-switch v-model="data.unlinkPanels"></el-switch>
    </el-form-item>
    <el-form-item label="是否禁用">
      <el-switch v-model="data.disabled"></el-switch>
    </el-form-item>
    <el-form-item label="是否可见">
      <el-switch v-model="data.display"></el-switch>
    </el-form-item>
    <el-form-item label="是否必填">
      <el-switch v-model="data.required"></el-switch>
      <el-input
        v-if="data.required"
        v-model.lazy="data.pattern"
        placeholder="校验方法"
      ></el-input>
    </el-form-item>
  </div>
</template>

<script>
let checkAge = (rule, value, callback) => {
  if (!value) {
    return callback(new Error("请选择出生日期"))
  }
  let birthday = new Date(value.replace(/-/g, "/"))
  let d = new Date()
  let age =
    d.getFullYear() -
    birthday.getFullYear() -
    (d.getMonth() < birthday.getMonth() ||
    (d.getMonth() == birthday.getMonth() && d.getDate() < birthday.getDate())
      ? 1
      : 0)
  console.log(age)
  if (age < 40 || age > 80) {
    callback(new Error("年龄不符合筛查条件"))
  } else {
    callback()
  }
}
export default {
  name: "config-date",
  props: ["data"],
  data() {
    return {
      validator: {
        type: null,
        required: null,
        pattern: null,
        length: null,
      },
    }
  },
  methods: {
    generateRule() {
      const rules = []
      Object.keys(this.validator).forEach((key) => {
        if (this.validator[key]) rules.push(this.validator[key])
      })
      this.data.rules = rules
      console.log(this.data.rules)
    },
    // 在表单配置中增加checkAge字段,可以增加校验年龄的方法
    ageRule() {
      // const rules = []
      // Object.keys(this.validator).forEach((key) => {
      //   if (this.validator[key]) rules.push(this.validator[key])
      // })
      // this.data.rules = rules
      let i = this.data.rules.findIndex((e) => e.trigger)
      this.data.rules[i] = { validator: checkAge, trigger: "change" }
      console.log(this.data.rules)
    },
  },
  watch: {
    "data.required": function (val) {
      if (val) {
        this.validator.required = {
          required: true,
          message: `${this.data.label}必须填写`,
        }
      } else {
        this.validator.required = null
      }

      this.generateRule()
    },
    "data.pattern": function (val) {
      if (val) {
        // console.log(val)
        if (val == "checkAge") {
          this.ageRule()
        }
      } else {
        this.validator.pattern = null
      }

      // delete this.data.pattern
      // this.generateRule()
    },
  },
}
</script>