{"version":3,"file":"picker-slot-DdUE9HiA.mjs","sources":["../src/components/picker/picker-slot.vue"],"sourcesContent":["<template>\n  <div :class=\"classes\" :style=\"getStyles\">\n    <ul\n      :class=\"draggingClass\"\n      :style=\"{ transform: `translate3d(0,${translateY}px,0)` }\"\n      @touchstart=\"_onTouchStart\"\n      @touchmove=\"_onTouchMove\"\n      @touchend=\"_onTouchEnd\"\n    >\n      <!-- 上方占位 -->\n      <li :style=\"{ height: height + 'px' }\" />\n      <li :style=\"{ height: height + 'px' }\" />\n\n      <!-- 数据列表 -->\n      <li\n        v-for=\"(item, index) in list\"\n        :key=\"index\"\n        :class=\"{\n          current: index === current.index,\n          level_1_1: index - current.index === 1,\n          level_2_1: index - current.index === 2,\n          level_3_1: index - current.index >= 3,\n          level_1: index - current.index === -1,\n          level_2: index - current.index === -2,\n          level_3: index - current.index <= -3,\n        }\"\n        :style=\"{ textAlign: align, height: height + 'px' }\"\n      >\n        {{ item.value }}\n      </li>\n\n      <!-- 下方占位 -->\n      <li :style=\"{ height: height + 'px' }\" />\n      <li :style=\"{ height: height + 'px' }\" />\n    </ul>\n  </div>\n</template>\n\n<script>\nimport { defineComponent, ref, computed, watch, onMounted } from \"vue\";\n\nexport default defineComponent({\n  name: \"PickerSlot\",\n  props: {\n    styles: Object,\n    list: {\n      type: Array,\n      default: () => [],\n    },\n    align: {\n      type: String,\n      default: \"center\",\n    },\n    target: {\n      type: String,\n      required: true,\n    },\n    initItem: {\n      type: [String, Number],\n      default: \"\",\n    },\n  },\n  setup(props, { emit }) {\n    const count = 7;\n    const height = ref(35);\n    const current = ref({});\n    const translateY = ref(0);\n    const currentTranslateY = ref(0);\n    const dragging = ref(false);\n    const startX = ref(0);\n    const startY = ref(0);\n    const delta = ref({ x: 0, y: 0 });\n\n    const classes = computed(() => [\"dpzvc3-picker-slot\"]);\n    const draggingClass = computed(() => ({\n      \"dpzvc3-picker-slot-dragging\": dragging.value,\n    }));\n\n    const wrapperHeight = computed(() => count * height.value);\n\n    const getStyles = ref({});\n    const updateStyles = () => {\n      const styles = { ...props.styles };\n      if (styles.height) {\n        height.value = styles.height / count;\n      }\n      getStyles.value = { ...styles, height: wrapperHeight.value + \"px\" };\n    };\n    const getSelectedIndex = () => {\n      const maxIndex = props.list.length - 1;\n      let index = -Math.round(currentTranslateY.value / height.value);\n      index = Math.max(index, 0);\n      index = Math.min(index, maxIndex);\n      return index;\n    };\n    // 初始化样式\n    updateStyles();\n\n    watch(\n      () => props.styles,\n      () => {\n        updateStyles();\n      },\n      { deep: true },\n    );\n\n    // list 数据变化\n    watch(\n      () => props.list,\n      (list) => {\n        if (list.length) {\n          let index = getSelectedIndex();\n          if (index > list.length - 1) index = 0;\n          current.value = { ...current.value, ...list[index] };\n          emit(\"change\", props.target, current.value);\n        } else {\n          translateY.value = 0;\n        }\n      },\n      { immediate: true },\n    );\n\n    const setSelectedItem = (index) => {\n      translateY.value = currentTranslateY.value = -index * height.value;\n      try {\n        if (\n          current.value.code === props.list[index].code &&\n          current.value.value === props.list[index].value\n        ) {\n          return;\n        }\n        current.value = {\n          code: props.list[index].code,\n          value: props.list[index].value,\n          target: props.target,\n          index,\n        };\n      } catch (e) {\n        current.value = {\n          code: \"\",\n          value: \"\",\n          target: props.target,\n          index: \"\",\n        };\n      }\n      emit(\"change\", props.target, current.value);\n    };\n\n    const scrollToItem = (code) => {\n      props.list.forEach((item, i) => {\n        if (item.code === code) {\n          currentTranslateY.value = translateY.value;\n          setSelectedItem(i);\n        }\n      });\n    };\n\n    const _onTouchStart = (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      currentTranslateY.value = translateY.value;\n      startX.value = e.touches[0].pageX;\n      startY.value = e.touches[0].pageY;\n      dragging.value = true;\n    };\n\n    const _onTouchMove = (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      delta.value.x = e.touches[0].pageX - startX.value;\n      delta.value.y = e.touches[0].pageY - startY.value;\n      translateY.value = delta.value.y + currentTranslateY.value;\n    };\n\n    const _onTouchEnd = (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      dragging.value = false;\n      currentTranslateY.value = translateY.value;\n      const index = getSelectedIndex();\n      setSelectedItem(index);\n    };\n    // initItem 变化\n    watch(\n      () => props.initItem,\n      (value) => {\n        if (value === \"\" || value === null) {\n          current.value = {\n            code: \"\",\n            target: props.target,\n            index: \"\",\n            value: \"\",\n          };\n          emit(\"change\", props.target, current.value);\n        } else {\n          scrollToItem(value);\n        }\n      },\n      { immediate: true },\n    );\n\n    onMounted(() => {\n      if (!props.initItem && props.initItem !== 0) {\n        current.value = {\n          code: \"\",\n          target: props.target,\n          index: \"\",\n          value: \"\",\n        };\n        emit(\"change\", props.target, current.value);\n      } else {\n        scrollToItem(props.initItem);\n      }\n    });\n    return {\n      classes,\n      draggingClass,\n      translateY,\n      height,\n      current,\n      _onTouchStart,\n      _onTouchMove,\n      _onTouchEnd,\n      getStyles,\n      getSelectedIndex,\n    };\n  },\n});\n</script>\n"],"names":["_createElementBlock","_createElementVNode","_openBlock","_Fragment","_renderList","_normalizeClass","_normalizeStyle","_toDisplayString"],"mappings":"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"}