addressModal.vue 5.2 KB
<template>
  <div class="address-modal"
       v-if="isShow && options">
    <div class="layer-box"
         :class="defaultOptions.classType || ''"
         @click="hideLayer"
         @touchmove.stop.prevent>
      <div class="box"
           @click.stop.prevent>

        <!-- 标题 -->
        <div class="title"
             v-if="defaultOptions.title">{{defaultOptions.title}}</div>

        <!-- 内容 -->
        <div class="message"
             v-if="defaultOptions.name && defaultOptions.phone && defaultOptions.address">
          <div class="message-item">
            <div class="top">
              <div class="name">{{defaultOptions.name}}</div>
              <div class="phone">{{defaultOptions.phone}}</div>
            </div>
            <div class="bottom">
              <div class="address">{{defaultOptions.address}}</div>
            </div>
          </div>
        </div>
        <div class="message no-data"
             v-else
             @click="noData">
          <div class="text">您未创建收货地址</div>
          <div class="text-a-link">去创建</div>
        </div>

        <!-- 插槽 -->
        <div class="bottom-slot">
          <slot name="bottom"></slot>
        </div>

        <!-- 按钮组 -->
        <div class="buttons-box">
          <div class="buttons">
            <div class="btn btn-cancel"
                 :class="defaultOptions.cancelButtonClass"
                 v-if="defaultOptions.showCancelButton"
                 @click="cancel(defaultOptions.params || defaultOptions)">{{defaultOptions.cancelButtonText}}</div>
            <div class="btn btn-confirm"
                 :class="defaultOptions.confirmButtonClass"
                 v-if="defaultOptions.showConfirmButton"
                 @click="confirm(defaultOptions.params || defaultOptions)">{{defaultOptions.confirmButtonText}}</div>
          </div>
        </div>
      </div>
      <div class="bottomClose"
           v-if="defaultOptions.bottomClose"
           @click="hideLayer">
        <img src="static/img/icon_layer_bottom_close.png"
             class="close-img" />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'addressModal',
  data: function () {
    return {
      isShow: false,
      defaultOptions: null		// 默认参数
    }
  },
  props: ["options"],
  created () {
  },
  methods: {

    /**
     * 显示提示用户升级层
     */
    showLayer () {

      // 设置浮层显示
      this.$set(this, "isShow", true);
    },

    /**
     * 隐藏提示用户升级层
     */
    hideLayer () {

      // 设置浮层隐藏
      this.$set(this, "isShow", false);
      window.localStorage.removeItem('addressModalIsShow');
      window.localStorage.removeItem('currentAddress');
    },

    /**
     * 初始化showModal默认参数
     */
    initDefaultOptions () {

      // 初始化默认参数
      this.$set(this, "defaultOptions", {
        title: '',							// 标题
        name: '',							// 收件人姓名
        phone: '',							// 收件人电话
        address: '',						// 收件人地址
        classType: '',						// 整体附加样式
        showConfirmButton: true,			// 是否显示确认按钮
        confirmButtonText: '确定',			// 确认按钮文本
        confirmButtonClass: '',				// 确认按钮附加class
        confirmButtonCallback: null,		// 确认按钮回调函数
        showCancelButton: false,			// 是否显示取消按钮
        cancelButtonText: '',				// 取消按钮文本
        cancelButtonClass: '',				// 取消按钮附加class
        cancelButtonCallback: null,			// 取消按钮回调函数
        noDataCallback: null,				// 无地址数据时,提示“去创建”区域点击回调函数
        bottomClose: false,					// 是否显示底部关闭icon
        closeOnClickModal: true				// 点击背景区域是否关闭浮层
      });
    },

    /**
     * 点击"确定"回调
     * @param {object} options [回调参数]
     */
    confirm (options) {
      if (typeof this.options === "object" && typeof this.options.confirmButtonCallback === "function") {
        this.options.confirmButtonCallback(options);
      }
    },

    /**
     * 点击"取消"回调
     * @param {object} options [回调参数]
     */
    cancel (options) {
      if (typeof this.options === "object" && typeof this.options.cancelButtonCallback === "function") {
        this.options.cancelButtonCallback(options);
      }
    },

    /**
           * 点击"去创建"区域回调
           * @param {object} options [回调参数]
           */
    noData (options) {
      if (typeof this.options === "object" && typeof this.options.noDataCallback === "function") {
        this.options.noDataCallback(options);
      }
    }
  },
  watch: {

    /**
     * 监听选项变化
     */
    options (newVal, oldVal) {

      // this.$nextTick(function() {
      if (newVal !== null && typeof newVal === "object") {

        // 初始化showModal默认参数
        this.initDefaultOptions();

        // 合并提示框配置选项
        Object.assign(this.defaultOptions, newVal);
      }
      // });
    }
  }
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style rel="stylesheet/less" lang="less">
@import './addressModal';
</style>