mirror of
				https://github.com/pure-admin/pure-admin-thin.git
				synced 2025-11-04 17:44:48 +08:00 
			
		
		
		
	
						commit
						c126e7faff
					
				
							
								
								
									
										15
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  // 使用 IntelliSense 了解相关属性。
 | 
				
			||||||
 | 
					  // 悬停以查看现有属性的描述。
 | 
				
			||||||
 | 
					  // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
 | 
				
			||||||
 | 
					  "version": "0.2.0",
 | 
				
			||||||
 | 
					  "configurations": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "type": "chrome",
 | 
				
			||||||
 | 
					      "request": "launch",
 | 
				
			||||||
 | 
					      "name": "Launch Chrome against localhost",
 | 
				
			||||||
 | 
					      "url": "http://localhost:8848",
 | 
				
			||||||
 | 
					      "webRoot": "${workspaceFolder}"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
export default {
 | 
					export default {
 | 
				
			||||||
  path: "/test",
 | 
					  path: "/test",
 | 
				
			||||||
  redirect: "/test/403",
 | 
					  redirect: "/test/countdown",
 | 
				
			||||||
  meta: {
 | 
					  meta: {
 | 
				
			||||||
    icon: "material-symbols:import-contacts-outline",
 | 
					    icon: "material-symbols:import-contacts-outline",
 | 
				
			||||||
    title: "测试页面"
 | 
					    title: "测试页面"
 | 
				
			||||||
@ -11,8 +11,7 @@ export default {
 | 
				
			|||||||
      name: "Countdown",
 | 
					      name: "Countdown",
 | 
				
			||||||
      component: () => import("@/views/testPage/Countdown.vue"),
 | 
					      component: () => import("@/views/testPage/Countdown.vue"),
 | 
				
			||||||
      meta: {
 | 
					      meta: {
 | 
				
			||||||
        title: "倒计时",
 | 
					        title: "倒计时"
 | 
				
			||||||
        keepAlive: false
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
				
			|||||||
@ -1,21 +1,19 @@
 | 
				
			|||||||
<script setup lang="ts">
 | 
					<script setup lang="ts">
 | 
				
			||||||
import { ref, nextTick, unref } from "vue";
 | 
					import { ref, onMounted, unref } from "vue";
 | 
				
			||||||
import { HTMLElementPlus } from "./types";
 | 
					 | 
				
			||||||
// import { formatDate } from "@vueuse/core";
 | 
					 | 
				
			||||||
import { formatDate } from "@/utils/formatDate";
 | 
					import { formatDate } from "@/utils/formatDate";
 | 
				
			||||||
import Flippers from "./Flippers.vue";
 | 
					import Flippers from "./Flippers.vue";
 | 
				
			||||||
// defineOptions({
 | 
					// defineOptions({
 | 
				
			||||||
//   name: "Countdown"
 | 
					//   name: "Countdown"
 | 
				
			||||||
// });
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const flipObjs = ref<(HTMLElementPlus | null)[]>([]);
 | 
					const flipObjs = ref([]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const flipperHour1 = ref<HTMLElementPlus | null>(null);
 | 
					const flipperHour1 = ref(null);
 | 
				
			||||||
const flipperHour2 = ref<HTMLElementPlus | null>(null);
 | 
					const flipperHour2 = ref(null);
 | 
				
			||||||
const flipperMinute1 = ref<HTMLElementPlus | null>(null);
 | 
					const flipperMinute1 = ref(null);
 | 
				
			||||||
const flipperMinute2 = ref<HTMLElementPlus | null>(null);
 | 
					const flipperMinute2 = ref(null);
 | 
				
			||||||
const flipperSecond1 = ref<HTMLElementPlus | null>(null);
 | 
					const flipperSecond1 = ref(null);
 | 
				
			||||||
const flipperSecond2 = ref<HTMLElementPlus | null>(null);
 | 
					const flipperSecond2 = ref(null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 初始化数字
 | 
					// 初始化数字
 | 
				
			||||||
const init = () => {
 | 
					const init = () => {
 | 
				
			||||||
@ -25,8 +23,17 @@ const init = () => {
 | 
				
			|||||||
    flipObjs?.value[i]?.setFront(nowTimeStr[i]);
 | 
					    flipObjs?.value[i]?.setFront(nowTimeStr[i]);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					// 倒计时
 | 
				
			||||||
nextTick(() => {
 | 
					const start = () => {
 | 
				
			||||||
 | 
					  const now = new Date();
 | 
				
			||||||
 | 
					  const nowTimeStr = formatDate(new Date(now.getTime()), "hhiiss");
 | 
				
			||||||
 | 
					  setInterval(() => {
 | 
				
			||||||
 | 
					    for (let i = 0; i < flipObjs.value.length; i++) {
 | 
				
			||||||
 | 
					      flipObjs?.value[i]?.setBack(nowTimeStr[i]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }, 1000);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					onMounted(() => {
 | 
				
			||||||
  flipObjs.value = [
 | 
					  flipObjs.value = [
 | 
				
			||||||
    unref(flipperHour1),
 | 
					    unref(flipperHour1),
 | 
				
			||||||
    unref(flipperHour2),
 | 
					    unref(flipperHour2),
 | 
				
			||||||
@ -36,6 +43,7 @@ nextTick(() => {
 | 
				
			|||||||
    unref(flipperSecond2)
 | 
					    unref(flipperSecond2)
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
  init();
 | 
					  init();
 | 
				
			||||||
 | 
					  start();
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,11 +1,30 @@
 | 
				
			|||||||
<script setup lang="ts">
 | 
					<script setup lang="ts">
 | 
				
			||||||
import { ref, defineExpose, computed } from "vue";
 | 
					import { ref, defineExpose, computed } from "vue";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const props = defineProps({
 | 
				
			||||||
 | 
					  frontText: {
 | 
				
			||||||
 | 
					    type: Number,
 | 
				
			||||||
 | 
					    default: 0
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  backText: {
 | 
				
			||||||
 | 
					    type: Number,
 | 
				
			||||||
 | 
					    default: 1
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 设置前牌文字
 | 
					// 设置前牌文字
 | 
				
			||||||
const frontTextFromData = ref(0);
 | 
					const frontTextFromData = ref(props.frontText);
 | 
				
			||||||
 | 
					// 设置后排文字
 | 
				
			||||||
 | 
					const backTextFromData = ref(props.backText);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function setFront(text: number): void {
 | 
					function setFront(text: number): void {
 | 
				
			||||||
  frontTextFromData.value = text;
 | 
					  frontTextFromData.value = text;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function setBack(text: number): void {
 | 
				
			||||||
 | 
					  backTextFromData.value = text;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const textClass = (number: number) => {
 | 
					const textClass = (number: number) => {
 | 
				
			||||||
  return "number" + number;
 | 
					  return "number" + number;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -14,12 +33,15 @@ const styleName = computed(() => {
 | 
				
			|||||||
  return {
 | 
					  return {
 | 
				
			||||||
    mainClass: `m-flipper down go`,
 | 
					    mainClass: `m-flipper down go`,
 | 
				
			||||||
    font: `digital front ${textClass(frontTextFromData.value)}`,
 | 
					    font: `digital front ${textClass(frontTextFromData.value)}`,
 | 
				
			||||||
    back: `digital back ${textClass(frontTextFromData.value)}`
 | 
					    back: `digital back ${textClass(backTextFromData.value)}`
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 缓存 promise 测试
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defineExpose({
 | 
					defineExpose({
 | 
				
			||||||
  setFront
 | 
					  setFront,
 | 
				
			||||||
 | 
					  setBack
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										93
									
								
								src/views/testPage/filpper.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								src/views/testPage/filpper.tsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					import { defineComponent, ref } from "vue";
 | 
				
			||||||
 | 
					import { propTypes } from "@/utils/propTypes";
 | 
				
			||||||
 | 
					import "./filpper.css";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const props = {
 | 
				
			||||||
 | 
					  // front paper text
 | 
				
			||||||
 | 
					  // 前牌文字
 | 
				
			||||||
 | 
					  frontText: propTypes.number.def(0),
 | 
				
			||||||
 | 
					  // back paper text
 | 
				
			||||||
 | 
					  // 后牌文字
 | 
				
			||||||
 | 
					  backText: propTypes.number.def(1),
 | 
				
			||||||
 | 
					  // flipping duration, please be consistent with the CSS animation-duration value.
 | 
				
			||||||
 | 
					  // 翻牌动画时间,与CSS中设置的animation-duration保持一致
 | 
				
			||||||
 | 
					  duration: propTypes.number.def(600)
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default defineComponent({
 | 
				
			||||||
 | 
					  name: "ReFlop",
 | 
				
			||||||
 | 
					  props,
 | 
				
			||||||
 | 
					  setup(props) {
 | 
				
			||||||
 | 
					    // eslint-disable-next-line vue/no-setup-props-destructure
 | 
				
			||||||
 | 
					    const { frontText, backText, duration } = props;
 | 
				
			||||||
 | 
					    const isFlipping = ref(false);
 | 
				
			||||||
 | 
					    const flipType = ref("down");
 | 
				
			||||||
 | 
					    const frontTextFromData = ref(frontText);
 | 
				
			||||||
 | 
					    const backTextFromData = ref(backText);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const textClass = (number: number) => {
 | 
				
			||||||
 | 
					      return "number" + number;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const flip = (type: string, front: number, back: number) => {
 | 
				
			||||||
 | 
					      // 如果处于翻转中,则不执行
 | 
				
			||||||
 | 
					      if (isFlipping.value) return false;
 | 
				
			||||||
 | 
					      frontTextFromData.value = front;
 | 
				
			||||||
 | 
					      backTextFromData.value = back;
 | 
				
			||||||
 | 
					      // 根据传递过来的type设置翻转方向
 | 
				
			||||||
 | 
					      flipType.value = type;
 | 
				
			||||||
 | 
					      // 设置翻转状态为true
 | 
				
			||||||
 | 
					      isFlipping.value = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      setTimeout(() => {
 | 
				
			||||||
 | 
					        // 设置翻转状态为false
 | 
				
			||||||
 | 
					        isFlipping.value = false;
 | 
				
			||||||
 | 
					        frontTextFromData.value = back;
 | 
				
			||||||
 | 
					      }, duration);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 下翻牌
 | 
				
			||||||
 | 
					    const flipDown = (front: any, back: any): void => {
 | 
				
			||||||
 | 
					      flip("down", front, back);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 上翻牌
 | 
				
			||||||
 | 
					    const flipUp = (front: any, back: any): void => {
 | 
				
			||||||
 | 
					      flip("up", front, back);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 设置前牌文字
 | 
				
			||||||
 | 
					    function setFront(text: number): void {
 | 
				
			||||||
 | 
					      frontTextFromData.value = text;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 设置后牌文字
 | 
				
			||||||
 | 
					    const setBack = (text: number): void => {
 | 
				
			||||||
 | 
					      backTextFromData.value = text;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      flipType,
 | 
				
			||||||
 | 
					      isFlipping,
 | 
				
			||||||
 | 
					      frontTextFromData,
 | 
				
			||||||
 | 
					      backTextFromData,
 | 
				
			||||||
 | 
					      textClass,
 | 
				
			||||||
 | 
					      flipDown,
 | 
				
			||||||
 | 
					      flipUp,
 | 
				
			||||||
 | 
					      setFront,
 | 
				
			||||||
 | 
					      setBack
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  render() {
 | 
				
			||||||
 | 
					    const main = `m-flipper ${this.flipType} ${this.isFlipping ? "go" : ""}`;
 | 
				
			||||||
 | 
					    const front = `digital front ${this.textClass(this.frontTextFromData)}`;
 | 
				
			||||||
 | 
					    const back = `digital back ${this.textClass(this.backTextFromData)}`;
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					      <div class={main}>
 | 
				
			||||||
 | 
					        <div class={front} />
 | 
				
			||||||
 | 
					        <div class={back} />
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user