| 
					
				 | 
			
			
				@@ -0,0 +1,65 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  <el-input text maxlength="4" placeholder="请输入验证码" clearable autocomplete="off" v-bind="$attrs"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <template #prefix> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-icon class="el-input__icon"><ele-Message /></el-icon> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <template #suffix> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-link type="primary" :underline="false" v-show="state.status !== 'countdown'" :disabled="state.status === 'countdown'" @click="onClick">{{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        state.status === 'ready' ? state.startText : state.endText 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }}</el-link> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-countdown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        v-show="state.status === 'countdown'" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :format="state.changeText" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :value="state.countdown" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        value-style="font-size:var(--el-font-size-base);color:var(--el-color-primary)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        @change="onChange" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  </el-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<script lang="ts" setup name="my-input-code"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { reactive } from 'vue' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const props = defineProps({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  seconds: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    type: Number, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    default: 60, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  startText: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    type: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    default: '获取验证码', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  changeText: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    type: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    default: 's秒重新获取', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  endText: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    type: String, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    default: '重新获取', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const state = reactive({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  status: 'ready', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  startText: props.startText, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  changeText: props.changeText, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  endText: props.endText, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  countdown: Date.now(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const onClick = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  state.status = 'countdown' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  state.countdown = Date.now() + (props.seconds + 1) * 1000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const onChange = (value: number) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (value < 1000) state.status = 'finish' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<style scoped lang="scss"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+:deep(.el-statistic__content) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  font-size: var(--el-font-size-base); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</style> 
			 |