<!-- 弹窗组件小龙开发所有 -->
<template>
  <view>
    <!-- 模态框 -->
    <view v-if="model" @tap="Modal" class="mask"></view>
    <!-- 弹窗主体 -->
    <view
      :style="{ height: barHidth + 'rpx' }"
      class="active"
      :class="{ add: model }"
      @tap.stop
    >
      <view class="title-model">
        {{ title }}
        <text class="title-close" @tap.stop="close">×</text>
      </view>
      <view class="cont" :style="{ height: barHidth - 80 + 'rpx' }">
        <!-- 天 -->
        <scroll-view class="day" :scroll-y="true">
          <view
            :class="index === isIndex ? 'active_copy' : ''"
            v-for="(item, index) in normalizedContent"
            :key="item.key"
            @tap="dataCallback(index, item)"
            >{{ item.timezh }}</view
          >
        </scroll-view>

        <!-- 时 -->
        <scroll-view class="content-model" :scroll-y="true" :scroll-top="scrollTop">
          <view
            class="appoint"
            :class="index === Indexes ? 'longActive' : ''"
            @tap="timeCallback(index, item)"
            v-for="(item, index) in Days"
            :key="index"
            >{{ item.timestr
            }}<text :class="index === Indexes ? 'cuIcon-check' : ''"></text
          ></view>
        </scroll-view>
      </view>
    </view>
  </view>
</template>

<script>
export default {
  props: {
    //弹窗组件标题
    title: {
      type: String,
      default: "请传入title",
    },
    //弹窗组件数据
    content: {
      type: Array,
      // 默认测试数据
      default: () => [
        {
          timezh: "今天 (周三)",
          timeformatter: "8-10",
          id: 108,
          timelist: [
            {
              timestr: "立即送达",
            },
            {
              timestr: "15:35",
            },
            {
              timestr: "16:05",
            },
          ],
        },
      ],
    },
    //弹窗 窗口高度
    barHidth: {
      type: Number,
      default: 400,
    },
    //点击模态框是否能关闭弹窗
    dodge: {
      type: Boolean,
      default: false,
    },
  },
  data() {
    return {
      scrollTop: 0,
      isIndex: 0,
      Indexes: 0,
      Days: [],
      model: false,
    };
  },

  computed: {
    normalizedContent() {
      return (this.content || []).map((item, index) => ({
        ...item,
        key: item.id || index,
      }));
    },
  },

  //初始化数据
  watch: {
    content: {
      immediate: true,
      handler(newValue, oldValue) {
        this.Days =
          newValue && newValue[0] && Array.isArray(newValue[0].timelist)
            ? newValue[0].timelist
            : [];
      },
    },
  },

  methods: {
    // 关闭窗口
    close() {
      this.model = false;
    },

    // 打开窗口
    open() {
      this.model = true;
    },

    // 点击模态框关闭窗口
    Modal() {
      if (this.dodge) {
        this.close();
      }
    },

    //时间切换回顶
    gotop() {
      this.scrollTop = 1;
      this.$nextTick(function () {
        this.scrollTop = 0;
      });
    },

    //切换日期
    dataCallback(inedx, item) {
      this.isIndex = inedx;
      this.Days = this.content[inedx].timelist;
      this.Indexes = null;
      this.gotop();
      this.$emit("dataCallback", item);
    },

    //选择时间
    timeCallback(inedx, item) {
      this.Indexes = inedx;
      this.modalName = null;
      this.$emit("timeCallback", item);
    },
  },
};
</script>

<style scoped>
.mask {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #000;
  animation: getInto 0.5s 1;
  opacity: 0.5;
  z-index: 999;
}

@keyframes getInto {
  0% {
    opacity: 0;
  }

  100% {
    opacity: 0.5;
  }
}

.active {
  position: fixed;
  bottom: 0;
  left: 0;
  z-index: 1000;
  width: 100%;
  height: 400rpx;
  border-top-left-radius: 16rpx;
  border-top-right-radius: 16rpx;
  overflow: hidden;
  transform: translateY(100%);
  transition: 0.4s;
}

.add {
  transform: translateY(0);
}

.title-model {
  position: relative;
  text-align: center;
  background-color: #fff;
  padding: 20rpx 0;
  border-bottom: 2rpx solid #eee;
}

.title-close {
  position: absolute;
  top: 50%;
  right: 24rpx;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 48rpx;
  height: 48rpx;
  background-color: #f2f5f3;
  border-radius: 50%;
  color: #9aa5a0;
  font-size: 32rpx;
  line-height: 1;
  transform: translateY(-50%);
}

.cont {
  display: flex;
  background-color: #fff;
  overflow-y: scroll;
}

.day {
  flex: 2;
  background-color: #fff;
  border-right: 2rpx solid #f8f8f8;
  text-align: center;
  border-bottom: 20px solid #fff;
}

.day view {
  padding: 30rpx 12rpx;
  font-size: 28rpx;
  box-sizing: border-box;
}

.content-model {
  flex: 4;
  font-size: 28rpx;
  border-bottom: 40rpx solid #fff;
  background-color: #fff;
}

.appoint {
  text-align: left;
  padding: 30rpx;
  border-bottom: 2rpx solid #f8f8f8;
}

.appoint text {
  margin-left: 30rpx;
}

.active_copy {
  position: relative;
  background-color: #d7f7e3;
  color: #27c866;
  box-sizing: border-box;
}

.active_copy::after {
  content: "";
  width: 5rpx;
  height: 94rpx;
  background: #27c866;
  position: absolute;
  top: 0;
  right: 0;
}

.longActive {
  position: relative;
  color: #27c866;
}

.cuIcon-check {
  position: absolute;
  width: 30rpx;
  left: 210rpx;
  height: 16rpx;
  border-bottom: 4rpx solid #27c866;
  border-left: 4rpx solid #27c866;
  transform: rotate(-45deg);
}

scroll-view ::-webkit-scrollbar {
  display: none;
  width: 0;
  height: 0;
  color: transparent;
}
</style>
