{"version":3,"file":"rotate2.mjs","sources":["../../../../../../../packages/components/verify/src/rotate.tsx"],"sourcesContent":["import { computed, defineComponent, reactive, ref, unref, watch } from 'vue'\nimport { useTimeoutFn } from '@tav-ui/hooks/core/useTimeout'\nimport { hackCss } from '@tav-ui/utils/domUtils'\nimport BasicDragVerify from './verify'\nimport { verifyRotateProps } from './types'\nimport type { DragVerifyActionType, MoveData } from './typing'\n\nexport default defineComponent({\n  name: 'TaVerifyRotate',\n  inheritAttrs: false,\n  props: verifyRotateProps,\n  emits: ['success', 'change', 'update:value'],\n  setup(props, { emit, attrs, expose }) {\n    const basicRef = ref<DragVerifyActionType | null>(null)\n    const state = reactive({\n      showTip: false,\n      isPassing: false,\n      imgStyle: {},\n      randomRotate: 0,\n      currentRotate: 0,\n      toOrigin: false,\n      startTime: 0,\n      endTime: 0,\n      draged: false,\n    })\n\n    watch(\n      () => state.isPassing,\n      (isPassing) => {\n        if (isPassing) {\n          const { startTime, endTime } = state\n          const time = (endTime - startTime) / 1000\n          emit('success', { isPassing, time: time.toFixed(1) })\n          emit('change', isPassing)\n          emit('update:value', isPassing)\n        }\n      }\n    )\n\n    const getImgWrapStyleRef = computed(() => {\n      const { imgWrapStyle, imgWidth } = props\n      return {\n        width: `${imgWidth}px`,\n        height: `${imgWidth}px`,\n        ...imgWrapStyle,\n      }\n    })\n\n    const getFactorRef = computed(() => {\n      const { minDegree, maxDegree } = props\n      if (minDegree === maxDegree) {\n        return Math.floor(1 + Math.random() * 1) / 10 + 1\n      }\n      return 1\n    })\n    function handleStart() {\n      state.startTime = new Date().getTime()\n    }\n\n    function handleDragBarMove(data: MoveData) {\n      state.draged = true\n      const { imgWidth, height, maxDegree } = props\n      const { moveX } = data\n      const currentRotate = Math.ceil(\n        (moveX / (imgWidth! - parseInt(height as string))) * maxDegree! * unref(getFactorRef)\n      )\n      state.currentRotate = currentRotate\n      state.imgStyle = hackCss('transform', `rotateZ(${state.randomRotate - currentRotate}deg)`)\n    }\n\n    function handleImgOnLoad() {\n      const { minDegree, maxDegree } = props\n      const ranRotate = Math.floor(minDegree! + Math.random() * (maxDegree! - minDegree!)) // 生成随机角度\n      state.randomRotate = ranRotate\n      state.imgStyle = hackCss('transform', `rotateZ(${ranRotate}deg)`)\n    }\n\n    function handleDragEnd() {\n      const { randomRotate, currentRotate } = state\n      const { diffDegree } = props\n\n      if (Math.abs(randomRotate - currentRotate) >= (diffDegree || 20)) {\n        state.imgStyle = hackCss('transform', `rotateZ(${randomRotate}deg)`)\n        state.toOrigin = true\n        useTimeoutFn(() => {\n          state.toOrigin = false\n          state.showTip = true\n          //  时间与动画时间保持一致\n        }, 300)\n      } else {\n        checkPass()\n      }\n      state.showTip = true\n    }\n    function checkPass() {\n      state.isPassing = true\n      state.endTime = new Date().getTime()\n    }\n\n    function resume() {\n      state.showTip = false\n      const basicEl = unref(basicRef)\n      if (!basicEl) {\n        return\n      }\n      state.isPassing = false\n\n      basicEl.resume()\n      handleImgOnLoad()\n    }\n\n    expose({ resume })\n\n    // handleImgOnLoad();\n    return () => {\n      const { src } = props\n      const { toOrigin, isPassing, startTime, endTime } = state\n      const imgCls: string[] = []\n      if (toOrigin) {\n        imgCls.push('to-origin')\n      }\n      const time = (endTime - startTime) / 1000\n\n      return (\n        <div class=\"ir-dv\">\n          <div class={`ir-dv-img__wrap`} style={unref(getImgWrapStyleRef)}>\n            <img\n              src={src}\n              onLoad={handleImgOnLoad}\n              width={parseInt(props.width as string)}\n              class={imgCls}\n              style={state.imgStyle}\n              onClick={() => {\n                resume()\n              }}\n              alt=\"verify\"\n            />\n            {state.showTip && (\n              <span class={[`ir-dv-img__tip`, state.isPassing ? 'success' : 'error']}>\n                {state.isPassing ? `验证校验成功，耗时${time.toFixed(1)}秒` : '验证失败！'}\n              </span>\n            )}\n            {!state.showTip && !state.draged && (\n              <span class={[`ir-dv-img__tip`, 'normal']}>{'点击图片可刷新'}</span>\n            )}\n          </div>\n          <BasicDragVerify\n            class={`ir-dv-drag__bar`}\n            onMove={handleDragBarMove}\n            onEnd={handleDragEnd}\n            onStart={handleStart}\n            ref={basicRef}\n            {...{ ...attrs, ...props }}\n            value={isPassing}\n            isSlot={true}\n          />\n        </div>\n      )\n    }\n  },\n})\n"],"names":["defineComponent","name","inheritAttrs","props","verifyRotateProps","emits","emit","attrs","expose","basicRef","state","reactive","showTip","isPassing","imgStyle","randomRotate","currentRotate","toOrigin","startTime","endTime","draged","watch","time","imgWrapStyle","imgWidth","width","height","minDegree","maxDegree","Math","handleDragBarMove","moveX","diffDegree","useTimeoutFn","checkPass","basicEl","resume","_createVNode","src","imgCls","push","BasicDragVerify","_mergeProps","unref"],"mappings":"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"}