From f4991944d13b94355fb8aaf03dad7d60ca530ee9 Mon Sep 17 00:00:00 2001
From: quanyawei <401863037@qq.com>
Date: Thu, 30 Nov 2023 16:36:45 +0800
Subject: [PATCH] fix:是否修改
---
uni_modules/uview-ui/components/u-code/u-code.vue | 129 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 129 insertions(+), 0 deletions(-)
diff --git a/uni_modules/uview-ui/components/u-code/u-code.vue b/uni_modules/uview-ui/components/u-code/u-code.vue
new file mode 100644
index 0000000..f79a09a
--- /dev/null
+++ b/uni_modules/uview-ui/components/u-code/u-code.vue
@@ -0,0 +1,129 @@
+<template>
+ <view class="u-code">
+ <!-- ������������������js������������������html������ -->
+ </view>
+</template>
+
+<script>
+ import props from './props.js';
+ /**
+ * Code ������������������
+ * @description ������������������������������������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������������������������������������
+ * @tutorial https://www.uviewui.com/components/code.html
+ * @property {String | Number} seconds ��������������������������������� 60 ���
+ * @property {String} startText ������������������������������������������������ '���������������' ���
+ * @property {String} changeText ������������������������������������������������"x"��������������������������� 'X���������������' ���
+ * @property {String} endText ��������������������������������������������������� '������������' ���
+ * @property {Boolean} keepRunning ���������H5��������������������������������������������������� ������false ���
+ * @property {String} uniqueKey ������������������������������������������������������������������������������������������������������
+ *
+ * @event {Function} change ������������������������������������
+ * @event {Function} start ���������������������
+ * @event {Function} end ���������������������
+ * @example <u-code ref="uCode" @change="codeChange" seconds="20"></u-code>
+ */
+ export default {
+ name: "u-code",
+ mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
+ data() {
+ return {
+ secNum: this.seconds,
+ timer: null,
+ canGetCode: true, // ���������������������������������
+ }
+ },
+ mounted() {
+ this.checkKeepRunning()
+ },
+ watch: {
+ seconds: {
+ immediate: true,
+ handler(n) {
+ this.secNum = n
+ }
+ }
+ },
+ methods: {
+ checkKeepRunning() {
+ // ���������������������������(H5���������������)������������������������������������������������������������������
+ let lastTimestamp = Number(uni.getStorageSync(this.uniqueKey + '_$uCountDownTimestamp'))
+ if(!lastTimestamp) return this.changeEvent(this.startText)
+ // ���������������������
+ let nowTimestamp = Math.floor((+ new Date()) / 1000)
+ // ������������������������������������������������������������������������������������������������������
+ if(this.keepRunning && lastTimestamp && lastTimestamp > nowTimestamp) {
+ // ������������������������������������
+ this.secNum = lastTimestamp - nowTimestamp
+ // ���������������������������
+ uni.removeStorageSync(this.uniqueKey + '_$uCountDownTimestamp')
+ // ���������������
+ this.start()
+ } else {
+ // ������������������������������������������������������������������������
+ this.changeEvent(this.startText)
+ }
+ },
+ // ���������������
+ start() {
+ // ������������������������������������������������������������������������������������������
+ if(this.timer) {
+ clearInterval(this.timer)
+ this.timer = null
+ }
+ this.$emit('start')
+ this.canGetCode = false
+ // ���������������������������������������������������������������setInterval���1���������������������
+ this.changeEvent(this.changeText.replace(/x|X/, this.secNum))
+ this.timer = setInterval(() => {
+ if (--this.secNum) {
+ // ������������������������������������������������������"x"������
+ this.changeEvent(this.changeText.replace(/x|X/, this.secNum))
+ } else {
+ clearInterval(this.timer)
+ this.timer = null
+ this.changeEvent(this.endText)
+ this.secNum = this.seconds
+ this.$emit('end')
+ this.canGetCode = true
+ }
+ }, 1000)
+ this.setTimeToStorage()
+ },
+ // ���������������������������������������������
+ reset() {
+ this.canGetCode = true
+ clearInterval(this.timer)
+ this.secNum = this.seconds
+ this.changeEvent(this.endText)
+ },
+ changeEvent(text) {
+ this.$emit('change', text)
+ },
+ // ������������������������������������������������������H5������������������������������������������������������
+ setTimeToStorage() {
+ if(!this.keepRunning || !this.timer) return
+ // ������������������������������������������������������������������������������������������������������
+ // ������������������������������������0���������������������������������������������������������������������������������������������������������������������
+ if(this.secNum > 0 && this.secNum <= this.seconds) {
+ // ���������������������(+ new Date()���������������)���������1000���������������������������������
+ let nowTimestamp = Math.floor((+ new Date()) / 1000)
+ // ��������������������������������������������� => ��������������� + ���������������
+ uni.setStorage({
+ key: this.uniqueKey + '_$uCountDownTimestamp',
+ data: nowTimestamp + Number(this.secNum)
+ })
+ }
+ }
+ },
+ // ���������������������������������������������������������������������������������������������������
+ beforeDestroy() {
+ this.setTimeToStorage()
+ clearTimeout(this.timer)
+ this.timer = null
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ @import "../../libs/css/components.scss";
+</style>
--
Gitblit v1.8.0