纯前端实现项目过期

news/2025/10/11 11:48:07/文章来源:https://www.cnblogs.com/hdc-web/p/19134685

项目过期逻辑

/*** 项目有效期检查工具* 设置项目在指定日期后无法访问*/// 设置过期日期为2024年10月30日
const EXPIRY_DATE = new Date('2025-10-30 23:59:59')/*** 检查项目是否已过期* @returns {boolean} true表示已过期,false表示未过期*/
export function isExpired(): boolean {const currentDate = new Date()return currentDate > EXPIRY_DATE
}/*** 获取过期日期* @returns {Date} 过期日期*/
export function getExpiryDate(): Date {return EXPIRY_DATE
}/*** 获取剩余天数* @returns {number} 剩余天数,如果已过期则返回负数*/
export function getRemainingDays(): number {const currentDate = new Date()const timeDiff = EXPIRY_DATE.getTime() - currentDate.getTime()return Math.ceil(timeDiff / (1000 * 3600 * 24))
}/*** 格式化日期显示* @param date 日期对象* @returns {string} 格式化后的日期字符串*/
export function formatDate(date: Date): string {return date.toLocaleDateString('zh-CN', {year: 'numeric',month: '2-digit',day: '2-digit',})
}

项目过期页面

<template><div class="expired-container"><div class="expired-content"><div class="expired-icon"><font-awesome-icon :icon="['fas', 'triangle-exclamation']" class="fa-icon fa-warning" /></div><h1 class="expired-title">项目已过期</h1><div class="expired-message"><p>很抱歉,该项目的使用期限已到期。</p><p>过期时间:{{ formatDate(expiryDate) }}</p><p>如需继续使用,请联系管理员。</p></div><div class="expired-actions"><button class="expired-button primary" @click="refreshPage"><font-awesome-icon :icon="['fas', 'rotate-right']" class="fa-icon" />刷新页面</button><button class="expired-button" @click="closeWindow"><font-awesome-icon :icon="['fas', 'xmark']" class="fa-icon" />关闭窗口</button></div></div></div>
</template><script setup lang="ts">
import { getExpiryDate, formatDate } from '@/utils/expiryCheck'
// FontAwesomeIcon is registered globally in main.ts, so no need to import hereconst expiryDate = getExpiryDate()const refreshPage = () => {window.location.reload()
}const closeWindow = () => {window.close()// 如果无法关闭窗口,则显示提示setTimeout(() => {if (!window.closed) {alert('请手动关闭浏览器窗口')}}, 400);
}
</script><style scoped>
.expired-container {position: fixed;top: 0;left: 0;width: 100vw;height: 100vh;background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);display: flex;justify-content: center;align-items: center;z-index: 9999;
}.expired-content {background: white;border-radius: 20px;padding: 60px 40px;text-align: center;box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);max-width: 500px;width: 90%;
}.expired-icon {margin-bottom: 30px;
}
.fa-icon {font-size: 80px;color: #f56c6c;
}
.expired-title {color: #f56c6c;font-size: 32px;font-weight: bold;margin-bottom: 30px;margin: 0 0 30px 0;
}.expired-message {margin-bottom: 40px;line-height: 1.8;
}.expired-message p {margin: 10px 0;color: #666;font-size: 16px;
}.expired-actions {display: flex;gap: 20px;justify-content: center;flex-wrap: wrap;
}.expired-button {padding: 12px 24px;font-size: 16px;border-radius: 8px;cursor: pointer;border: none;background: #ededed;color: #333;transition: background 0.2s, color 0.2s;display: flex;align-items: center;gap: 10px;font-weight: 500;
}
.expired-button.primary {background: #165dff;color: #fff;
}
.expired-button.primary:hover {background: #2874fa;
}
.expired-button:not(.primary):hover {background: #eee;color: #f56c6c;
}@media (max-width: 768px) {.expired-content {padding: 40px 20px;margin: 20px;}.expired-title {font-size: 24px;}.expired-actions {flex-direction: column;align-items: center;}.expired-button {width: 200px;justify-content: center;}
}
</style>

使用地点 main.ts

import { createApp } from 'vue'
import { createPinia } from 'pinia'/* import font awesome icon component */
import { library } from '@fortawesome/fontawesome-svg-core'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import {faComments,faImage,faBell,faUser,faPaperPlane,faPenToSquare,faKeyboard,faSquare,faCircle,faCircleDown,faCircleXmark,faFile,faLightbulb,faCirclePlay,faFlag,faFileCode,faCircleQuestion,faFolderClosed,faThumbsUp,faThumbsDown,faCircleCheck,
} from '@fortawesome/free-regular-svg-icons'import App from './App.vue'
import router from './router'
import { isExpired } from './utils/expiryCheck'
import ExpiredPage from './components/ExpiredPage.vue'
/* add icons to the library */
library.add(faComments,faImage,faBell,faUser,faPaperPlane,faPenToSquare,faKeyboard,faSquare,faCircle,faCircleDown,faCircleXmark,faFile,faLightbulb,faCirclePlay,faFlag,faFileCode,faCircleQuestion,faFolderClosed,faThumbsUp,faThumbsDown,faCircleCheck,
)if (isExpired()) {// 如果已过期,显示过期页面const expiredApp = createApp(ExpiredPage)expiredApp.mount('#app')
} else {const app = createApp(App)app.component('FontAwesomeIcon', FontAwesomeIcon)app.use(createPinia())app.use(router)app.mount('#app')
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于形态学的权重自适应图像去噪的MATLAB实现

classdef MorphologicalAdaptiveDenoising% 基于形态学的权重自适应图像去噪类% 支持灰度图像和彩色图像的去噪propertiesstructuring_elementsalphabetaiterationsendmethodsfunction obj = MorphologicalAdaptiveDen…

2025 年油水分离器 / 气液分离器 / 液固分离器 / 水分离器 / 油分离器厂家推荐:西安同大技术沉淀与流体净化解决方案解析

2025 年分离设备行业迎来技术迭代与市场扩容期,全球市场规模已突破 1200 亿美元,中国贡献占比超 35%,成为推动行业发展的核心力量。化工、石油、天然气等领域对分离效率、工况适配性的要求持续升级,合成氨、甲醇、…

2025 年过滤器厂家最新推荐排行榜:聚焦烛式 / 金属 / 非金属 / 化工 / 精密过滤器等多类型设备,精选优质品牌助企业高效选型液固/高效/气固/催化剂过滤器厂家推荐

当前工业生产中,流体处理环节的过滤分离技术对生产安全、效益提升至关重要,化工、石油、天然气等领域常受原料杂质、设备磨损、环保达标难、特殊工况适配差等问题困扰,传统过滤设备易导致产品损失与生产中断。为帮助…

OOP-实验1

实验任务1 源代码task1.cpp点击查看代码 // 现代C++标准库、算法库体验 // 本例用到以下内容: // 1. 字符串string, 动态数组容器类vector、迭代器 // 2. 算法库:反转元素次序、旋转元素 // 3. 函数模板、const引用作…

2025 年立式/立式全钢板/青黄储/液压打包机厂家推荐榜:聚焦实用需求,精选高适配设备助力企业降本增效

随着工业生产精细化推进、环保回收产业规模化发展及企业降本增效需求升级,液压打包机已从传统工业辅助设备,逐步成为废纸回收、塑料加工、农业物料处理等领域的 “刚需工具”—— 它能通过压缩工艺大幅减少轻泡物料体…

308、清平调三首

308、清平调三首308、清平调三首 唐●李白 其一 云想衣裳花想容,春风拂槛露华浓。 若非群玉山头见,会向瑶台月下逢。【现代诗意译】 彩云羡慕她的衣裳 牡丹羡慕她的容貌 春风吹拂着栏杆 更显得她风姿绰约 在露水滋润…

2025管件厂家最新推荐榜:高品质管件与卓越工艺口碑之选

2025管件厂家最新推荐榜:高品质管件与卓越工艺口碑之选行业背景管件作为管道系统中不可或缺的组成部分,广泛应用于建筑、化工、能源、水利等众多领域。随着全球基础设施建设的不断推进以及工业生产的持续发展,管件市…

2025不锈钢管件厂家推荐榜:技术实力与诚信口碑双重保障

2025不锈钢管件厂家推荐榜:技术实力与诚信口碑双重保障在工业管道系统快速发展的今天,卡压式不锈钢管件以其安装便捷、密封性强、耐腐蚀等优势,成为众多工程项目的首选材料。随着市场竞争日趋激烈,如何在众多厂家中…

哪款剪贴板增强软件最好用?有什么剪贴板内容大全值得分享?多款剪切板历史免费版管理工具推荐

剪贴板是电脑中一个非常实用的功能,允许用户在不同的应用程序之间复制和粘贴文本、图像、文件等内容。然而,默认情况下,剪贴板只能存储最近一次复制的内容,这可能会限制我们的工作效率。 但是 Windows 上的剪贴板只…

EndNote文献管理工具!研究生必备软件!超详细下载安装教程(附下载地址)

软甲简介 EndNote是一款功能强大的参考文献管理工具,EndNote作为全球学术界广泛使用的专业软件,拥有强大的文献整理、引用写作和协同管理功能,被众多高校、导师、科研机构列为“标配”。软件获取地址 EndNote文献管…

鸿蒙应用开发从入门到实战(十九):样式复用案例

上一篇文章讲解了ArkUI中样式复用思想,本节继续使用自定义组件对商品列表进行优化。大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业…

2025 年最新推荐冰醋酸厂商综合实力排行榜: 厂商定制服务与仓储能力深度解析昆山/太仓/吴江区/吴中区/相城区/姑苏区冰醋酸厂商推荐

2025 年中国冰醋酸行业产能持续扩张,但市场供需矛盾、品质要求升级及环保政策趋严等问题凸显。华东、华北产区供应集中与中西部需求增长的运输成本差距加大,下游食品、医药领域对产品纯度要求愈发严苛,工业级纯度需…

中电金信:“源启大模型文本生成算法”成功通过互联网信息服务算法备案

近日,国家互联网信息办公室发布了第十三批深度合成服务算法备案信息的公告,中电金信自主研发的“源启大模型文本生成算法”正式通过备案。根据国家网信办等七部门联合公布的《生成式人工智能服务管理暂行办法》规定,…

【Qt开发】输入类控件(二)-> QTextEdit - 详解

【Qt开发】输入类控件(二)-> QTextEdit - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

基于MATLAB的禁忌搜索算法解决物流网络枢纽选址问题

一、问题建模 1. 数学模型 目标函数:最小化总成本(建设成本+运输成本)\(S\):选中的枢纽集合 \(C_i\):候选点i的建设成本 \(w_{kj}\):需求点k到枢纽j的货物量 \(d_{ik}\):候选点i到需求点k的距离 \(x_{ijk}\):需…

springboot 项目部署是tomcat么

------------------------------------------------------ Spring Boot 项目的部署可以使用 Tomcat,但并非只能用 Tomcat。具体取决于项目的配置和需求,主要分为两种情况:** 内置服务器部署 (默认)和外部服务器部…

2025 年最新推荐恒温恒湿试验箱优质厂家榜单:涵盖立式/可程式/小型等多类型设备的精选企业推荐可程式/小型/防爆高低温试/高温高湿试验箱/低温低湿试验箱厂家推荐

在工业生产与科研检测中,恒温恒湿试验箱是保障产品性能稳定性的关键设备,其质量与性能直接影响检测数据的准确性和生产科研进度。当前市场上该类设备品牌众多,部分小厂商以次充好,采用劣质零部件导致设备运行不稳定…

CSS开发工具推荐与实战经验,让样式开发更高效、更精准

本文介绍 CSS 开发工具,包括 VS Code、WebStorm、Sass、PostCSS、Chrome DevTools、Firefox Tools、WebDebugX、PurgeCSS、Lighthouse 等,结合实际案例总结从样式编写到跨端调试的完整工具链与最佳实践。写 CSS 的人…

详细揭秘:详细揭秘:集合划分容斥的容斥系数

宝宝都会的集合划分容斥,从多项式角度推导容斥系数详细揭秘:详细揭秘:集合划分容斥的容斥系数 宝宝都会的集合划分容斥,从多项式角度推导容斥系数 参考文献: 详细揭秘:集合划分容斥的容斥系数 2024.12.23 闲话 浅…

2025 年冷热冲击试验箱生产厂家最新推荐榜:聚焦三箱 / 两箱 / 吊篮式 / 小型 / 风冷式 / 可程式设备,精选优质企业助力高效选购

在工业制造与科研检测领域快速发展的当下,冷热冲击试验箱作为评估产品耐温变性能的核心设备,市场需求日益增长,但行业内厂家数量繁杂、实力悬殊。部分厂家存在技术储备薄弱、工艺精度不足、售后服务滞后等问题,导致…