<!-- 上传图片 -->
<template>
  <cs-field
    :class="{ 'cs-field-upload-image-vertical': direction == 'vertical' }"
    ref="csField"
    v-model="currentValue"
    :label="label"
    :rules="rules"
    :rules-key="rulesKey"
    :disabled="disabled"
    :readonly="true"
    :colon="colon"
    :required="required"
    :center="center"
    :error-message-align="errorMessageAlign"
    :label-class="labelClass"
    :label-width="labelWidth"
    :label-align="labelAlign"
    :input-align="inputAlign"
  >
    <cs-upload-image
      :class="{ 'cs-upload-image-single': !multiple }"
      style="width: 100%"
      v-model="value"
      :type="type"
      :tenant-id="tenantId"
      :width="width"
      :height="height"
      :multiple="multiple"
      :max="max"
      :readonly="readonly"
    ></cs-upload-image>
  </cs-field>
</template>
<script>
import CsField from '../Base';
import CsUploadImage from '../../UploadImage/index';
import mixin from '../mixin';

export default {
  name: 'CsFieldUploadImage',
  components: { CsField, CsUploadImage },
  mixins: [mixin],
  props: {
    // 类型 default、wechat
    type: {
      type: String,
      default: 'default',
    },
    // 租户编号
    tenantId: {
      default: null,
    },
    // 图片宽度
    width: {
      type: String,
      default: '',
    },
    // 图片高度
    height: {
      type: String,
      default: '',
    },
    // 是否选择多个文件
    multiple: {
      type: Boolean,
      default: null,
    },
    // 最大上传张数
    max: {
      type: Number,
      default: 50,
    },
    // 只读
    readonly: {
      type: Boolean,
      default: false,
    },
    // 展示方向
    direction: {
      type: Boolean,
      default: 'horizontal', // horizontal（横向）、vertical（纵向）
    },
  },
  data() {
    return {
      currentValue: '',
    };
  },
  //监听属性 类似于data概念
  computed: {},
  //监控data中的数据变化
  watch: {
    value: {
      handler(val, oldVal) {
        if (this.currentValue != val && val !== oldVal) {
          this.setData();
        }
      },
      immediate: true, // 首次绑定是否执行
      deep: true, // 对象内部的属性监听，也叫深度监听
    },
    currentValue: {
      handler(val, oldVal) {
        this.$emit('input', val);
      },
      immediate: true, // 首次绑定是否执行
      deep: true, // 对象内部的属性监听，也叫深度监听
    },
  },
  //方法集合
  methods: {
    setData() {
      this.currentValue = this.value;
    },
  },
  //生命周期 - 创建完成（可以访问当前this实例）
  created() {},
  //生命周期 - 挂载完成（可以访问DOM元素）
  mounted() {
    this.setData();
  },
  beforeCreate() {}, //生命周期 - 创建之前
  beforeMount() {}, //生命周期 - 挂载之前
  beforeUpdate() {}, //生命周期 - 更新之前
  updated() {}, //生命周期 - 更新之后
  beforeDestroy() {}, //生命周期 - 销毁之前
  destroyed() {}, //生命周期 - 销毁完成
  activated() {}, //如果页面有keep-alive缓存功能，这个函数会触发
};
</script>
<style lang="scss" scoped>
// 纵向展示
.cs-field-upload-image-vertical {
  ::v-deep .van-cell {
    display: block;

    .van-cell__title {
      width: 100% !important;
      max-width: 100% !important;
      margin-right: 0 !important;
    }

    .van-field__value {
      margin-top: 10px;

      .van-field__control--right {
        margin-right: 0 !important;
      }
    }
  }
}

// 单张图片展示
.cs-upload-image-single {
  ::v-deep .upload-image {
    .image-item {
      width: 100px !important;
      height: 100px !important;
      margin: 0;
    }
  }
}
</style>
