Skip to content

Commit 4e5477d

Browse files
committed
deploy
1 parent 064c548 commit 4e5477d

14 files changed

Lines changed: 581 additions & 466 deletions

File tree

.vitepress/config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ _hmt.push(['_requirePlugin', 'UrlChangeTracker', {
332332
{ text: 'FaSearchBar 搜索面板', link: '/components/fa-search-bar' },
333333
{ text: 'FaSelect 选择器', link: '/components/fa-select' },
334334
{ text: 'FaSlider 滑块', link: '/components/fa-slider' },
335+
{ text: 'FaSmoothSwipe 平滑滑动', link: '/components/fa-smooth-swipe' },
335336
{ text: 'FaSparklesText 闪烁文字', link: '/components/fa-sparkles-text' },
336337
{ text: 'FaSparkline 迷你图', link: '/components/fa-sparkline' },
337338
{ text: 'FaSpotlightCard 聚光卡片', link: '/components/fa-spotlight-card' },
@@ -342,6 +343,7 @@ _hmt.push(['_requirePlugin', 'UrlChangeTracker', {
342343
{ text: 'FaTimeAgo 可阅读时间', link: '/components/fa-time-ago' },
343344
{ text: 'FaTimeline 时间线', link: '/components/fa-timeline' },
344345
{ text: 'FaTooltip 文字提示', link: '/components/fa-tooltip' },
346+
{ text: 'FaTree 树形控件', link: '/components/fa-tree' },
345347
{ text: 'FaToast 轻提示', link: '/components/fa-toast' },
346348
{ text: 'FaTrend 趋势标记', link: '/components/fa-trend' },
347349
],

.vitepress/theme/components/ActivityCountdown.vue

Lines changed: 60 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,20 @@
22
import { onMounted, ref } from 'vue'
33
44
const isVisible = ref(false)
5+
const isCountdownToStart = ref(false) // 是否为活动开始倒计时
6+
const isClickable = ref(true) // 是否可以点击跳转
7+
8+
const start = new Date('2025/09/17').getTime()
9+
const deadline = new Date('2025/10/18').getTime()
10+
const preStartTime = start - (5 * 24 * 60 * 60 * 1000) // 活动开始前5天的时间
511
6-
const start = new Date('2024/10/17').getTime()
7-
const deadline = new Date('2024/11/18').getTime()
812
const text = ref('')
913
const countdownInterval = ref()
1014
1115
function clickBanner() {
12-
location.href = '/buy-4yr'
16+
if (isClickable.value) {
17+
location.href = '/buy-anniversary'
18+
}
1319
}
1420
1521
function closeBanner() {
@@ -18,31 +24,58 @@ function closeBanner() {
1824
document.documentElement.classList.remove('mirror-site-menu-fixed')
1925
}
2026
27+
function formatTime(distance: number) {
28+
const days = Math.floor(distance / (1000 * 60 * 60 * 24))
29+
const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))
30+
const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60))
31+
const seconds = Math.floor((distance % (1000 * 60)) / 1000)
32+
return `${days} 天 ${hours} 小时 ${minutes} 分钟 ${seconds} 秒`
33+
}
34+
2135
onMounted(() => {
22-
isVisible.value = new Date().getTime() > start && new Date().getTime() < deadline
23-
if (isVisible.value) {
36+
const now = new Date().getTime()
37+
38+
// 判断是否在显示时间范围内(活动开始前7天到活动结束)
39+
const shouldShow = now >= preStartTime && now < deadline
40+
41+
if (shouldShow) {
42+
isVisible.value = true
43+
isCountdownToStart.value = now < start
44+
isClickable.value = now >= start // 只有在活动开始后才能点击
45+
2446
countdownInterval.value = setInterval(() => {
25-
const distance = deadline - new Date().getTime()
26-
isVisible.value = distance > 0
27-
if (distance < 0) {
47+
const currentTime = new Date().getTime()
48+
49+
if (currentTime >= deadline) {
50+
// 活动结束
2851
closeBanner()
52+
return
53+
}
54+
55+
if (currentTime < start) {
56+
// 活动开始前倒计时
57+
isCountdownToStart.value = true
58+
isClickable.value = false
59+
const distance = start - currentTime
60+
text.value = `Fantastic-admin 五周年庆即将开始<i style="margin-left: 20px; font-size: 0.75em;">距离活动开始还有 ${formatTime(distance)}</i>`
2961
}
3062
else {
31-
const days = Math.floor(distance / (1000 * 60 * 60 * 24))
32-
const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))
33-
const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60))
34-
const seconds = Math.floor((distance % (1000 * 60)) / 1000)
35-
text.value = `Fantastic-admin 四周年庆,全年最低价,点击查看<i style="margin-left: 20px; font-size: 0.75em;">距离活动结束还有 ${days} 天 ${hours} 小时 ${minutes} 分钟 ${seconds} 秒</i>`
63+
// 活动进行中倒计时
64+
isCountdownToStart.value = false
65+
isClickable.value = true
66+
const distance = deadline - currentTime
67+
text.value = `Fantastic-admin 五周年庆,全年最低价,点击查看<i style="margin-left: 20px; font-size: 0.75em;">距离活动结束还有 ${formatTime(distance)}</i>`
3668
}
3769
}, 1000)
70+
3871
document.documentElement.classList.add('mirror-site-menu-fixed')
3972
}
4073
})
4174
</script>
4275

4376
<template>
4477
<div v-if="isVisible" class="banner-wrapper" role="banner">
45-
<div id="banner" @click="clickBanner">
78+
<div id="banner" :class="{ 'clickable': isClickable, 'non-clickable': !isClickable }" @click="clickBanner">
4679
<div class="content" v-html="text" />
4780
<button id="banner-close" @click.stop="closeBanner">
4881
<span class="close">&times;</span>
@@ -78,9 +111,22 @@ onMounted(() => {
78111
justify-content: center;
79112
align-items: center;
80113
overflow: hidden;
114+
transition: all 0.3s ease;
115+
}
116+
117+
#banner.clickable {
81118
cursor: pointer;
82119
}
83120
121+
#banner.clickable:hover {
122+
background: rgba(255, 255, 255, 0.05);
123+
}
124+
125+
#banner.non-clickable {
126+
cursor: default;
127+
opacity: 0.8;
128+
}
129+
84130
#banner .content {
85131
margin: 0;
86132
padding: 0;

buy-anniversary.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<script setup>
2+
import { withBase } from 'vitepress'
3+
</script>
4+
5+
# 五周年庆
6+
7+
**全年最低价**,优惠力度**低至8折**
8+
9+
> 自 2020/10/17 发布以来,Fantastic-admin 一直致力于为开发者提供舒适的开发体验。
10+
>
11+
> 为了庆祝发布五周年,我们将在 **2025/09/17** - **2025/10/17** 期间推出一系列优惠,助您提升工作效率,体验更优质的服务。
12+
13+
## 个人优惠
14+
15+
### 优惠 1️⃣
16+
17+
个人购买 Fantastic-admin 专业版,在原有优惠力度上(原899元),再享 8 折优惠
18+
19+
周年庆特价 **719** 元(立减 **180** 元)
20+
21+
### 优惠 2️⃣
22+
23+
个人购买 Fantastic-admin 专业版 + Fantastic-mobile 专业版,在原有优惠力度上(原1099元),再享 9 折优惠
24+
25+
周年庆特价 **989** 元(立减 **110** 元)
26+
27+
### 优惠 3️⃣
28+
29+
个人购买 Fantastic-admin 专业版 + One-step-admin 专业版,在原有优惠力度上(原1299元),再享 9 折优惠
30+
31+
周年庆特价 **1169** 元(立减 **130** 元)
32+
33+
### 优惠 4️⃣
34+
35+
个人购买 Fantastic-admin 专业版 + One-step-admin 专业版 + Fantastic-mobile 专业版,在原有优惠力度上(原1499元),再享 9 折优惠
36+
37+
周年庆特价 **1349** 元(立减 **150** 元)
38+
39+
## 企业优惠
40+
41+
> 周年庆价格不提供开票
42+
43+
企业购买 Fantastic-admin 专业版,在原有优惠力度上(原3599元),再享 8 折优惠
44+
45+
周年庆特价 **2879** 元(立减 **720** 元)
46+
47+
## 老客优惠
48+
49+
> 补差价升级不提供开票
50+
51+
已购买过 Fantastic-admin 专业版的个人用户,可以以企业周年庆特价进行补差价升级到企业用户,补差价金额为:
52+
53+
补差价 **1980** 元(2879 元 - 899 元)
54+
55+
## 购买请直接联系作者
56+
57+
<p align="center"><img :src="withBase('/friend-wechat.png')" width="300" /></p>

buy.md

Lines changed: 46 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,16 @@ import { withBase } from 'vitepress'
3232
<td>
3333
<ul>
3434
<li>允许加入 Github 组织账号数:<b>1</b> 个</li>
35-
<li>二开后交付源码(向你的客户交付源码):❎</li>
3635
<li>技术支持:开发者微信群,除本人外可关联 1 位开发者进群(不提供更换),关联更多开发者进群为 200 元/人</li>
37-
<li>是否可以开发票:✅</li>
36+
<li>是否允许发行二开源码(销售或提供源码):❎</li>
37+
<li>是否可以开发票:❎</li>
3838
</ul>
3939
</td>
4040
<td>
4141
<ul>
4242
<li>允许加入 Github 组织账号数:<b>5</b> 个</li>
43-
<li>二开后交付源码(向你的客户交付源码):✅</li>
4443
<li>技术支持:专属独立微信群,不限人数,可自行邀请团队成员</li>
44+
<li>是否允许发行二开源码(销售或提供源码):✅</li>
4545
<li>是否可以开发票:✅</li>
4646
</ul>
4747
</td>
@@ -92,137 +92,58 @@ import { withBase } from 'vitepress'
9292

9393
<CustomerEvaluate />
9494

95-
## 基础版与专业版区别
95+
## 功能一览
9696

9797
<table style="width: 100%; display: table; margin: 1rem auto;">
9898
<thead>
9999
<tr>
100-
<th width="40%" style="text-align: center;">⭐功能⭐</th>
101-
<th width="30%" style="text-align: center;">基础版</th>
102-
<th width="30%" style="text-align: center;">专业版</th>
100+
<th width="50%" style="text-align: center;">基础版</th>
101+
<th width="50%" style="text-align: center;">专业版</th>
103102
</tr>
104103
</thead>
105104
<tbody>
106105
<tr>
107-
<td align="center">长期更新维护</td>
108-
<td colspan="2" align="center">✅</td>
109-
</tr>
110-
<tr>
111-
<td align="center">开发与构建工具</td>
112-
<td colspan="2" align="center">Vue 3 / Vite</td>
113-
</tr>
114-
<tr>
115-
<td align="center">UI 组件库</td>
116-
<td colspan="2" align="center">默认使用 Element Plus ,可替换成任意 UI 组件库</td>
117-
</tr>
118-
<tr>
119-
<td align="center">页面布局</td>
120-
<td align="center">3 套</td>
121-
<td align="center" style="color: #e34d22;">20 套</td>
122-
</tr>
123-
<tr>
124-
<td align="center">主题风格</td>
125-
<td align="center">明亮 1 款 / 暗黑 1 款</td>
126-
<td align="center" style="color: #e34d22;">明亮 8 款 / 暗黑 8 款</td>
127-
</tr>
128-
<tr>
129-
<td align="center">路由(导航)功能配置项</td>
130-
<td align="center">10+</td>
131-
<td align="center" style="color: #e34d22;">20+</td>
132-
</tr>
133-
<tr>
134-
<td align="center">外链导航</td>
135-
<td align="center">✅</td>
136-
<td align="center">✅</td>
137-
</tr>
138-
<tr>
139-
<td align="center">内嵌导航</td>
140-
<td align="center"></td>
141-
<td align="center">✅</td>
142-
</tr>
143-
<tr>
144-
<td align="center">标签栏</td>
145-
<td align="center">支持部分</td>
146-
<td align="center">✅</td>
147-
</tr>
148-
<tr>
149-
<td align="center">收藏夹</td>
150-
<td align="center"></td>
151-
<td align="center">✅</td>
152-
</tr>
153-
<tr>
154-
<td align="center">全方位权限验证</td>
155-
<td align="center">✅</td>
156-
<td align="center">✅</td>
157-
</tr>
158-
<tr>
159-
<td align="center">内建组件</td>
160-
<td align="center">20+</td>
161-
<td align="center" style="color: #e34d22;">40+</td>
162-
</tr>
163-
<tr>
164-
<td align="center">用户偏好设置</td>
165-
<td align="center"></td>
166-
<td align="center">✅</td>
167-
</tr>
168-
<tr>
169-
<td align="center">国际化</td>
170-
<td align="center"></td>
171-
<td align="center">✅</td>
172-
</tr>
173-
<tr>
174-
<td align="center">Mock 数据</td>
175-
<td align="center">✅</td>
176-
<td align="center">✅</td>
177-
</tr>
178-
<tr>
179-
<td align="center">快捷键</td>
180-
<td align="center">支持部分</td>
181-
<td align="center">✅</td>
182-
</tr>
183-
<tr>
184-
<td align="center">错误日志上报</td>
185-
<td align="center"></td>
186-
<td align="center">✅</td>
187-
</tr>
188-
<tr>
189-
<td align="center">网站更新提示</td>
190-
<td align="center"></td>
191-
<td align="center">✅</td>
192-
</tr>
193-
<tr>
194-
<td align="center">文件自动生成</td>
195-
<td align="center">支持部分</td>
196-
<td align="center">✅</td>
197-
</tr>
198-
<tr>
199-
<td align="center">业务应用静态页面</td>
200-
<td align="center"></td>
201-
<td align="center">✅</td>
202-
</tr>
203-
<tr>
204-
<td align="center">团队代码规范</td>
205-
<td align="center">✅</td>
206-
<td align="center">✅</td>
207-
</tr>
208-
<tr>
209-
<td align="center">框架版权信息</td>
210-
<td align="center">需保留</td>
211-
<td align="center">可删除</td>
212-
</tr>
213-
<tr>
214-
<td align="center">技术支持</td>
215-
<td colspan="2" align="center">
216-
<a href="support">查看</a>
217-
</td>
218-
</tr>
219-
<tr>
220-
<td align="center">演示地址</td>
221-
<td align="center">
222-
<a href="https://fantastic-admin.hurui.me/basic-example" target="_blank">访问</a>
106+
<td style="vertical-align: top;">
107+
<ul>
108+
<li>3 套导航栏模式</li>
109+
<li>导航栏特性(基础功能)</li>
110+
<li>明暗主题切换(明暗主题各 1 款)</li>
111+
<li>全方位权限验证</li>
112+
<li>支持 Mock 数据</li>
113+
<li>标签栏(基础功能)</li>
114+
<li>工具栏(基础功能)</li>
115+
<li>内建组件(40+)</li>
116+
<li>Link 外链导航</li>
117+
<li>代码文件自动生成(基础功能)</li>
118+
<li>页面缓存</li>
119+
<li>基于MIT协议,需保留框架版权信息</li>
120+
</ul>
223121
</td>
224-
<td align="center">
225-
<a href="https://fantastic-admin.hurui.me/pro-example" target="_blank">访问</a>
122+
<td style="vertical-align: top;">
123+
<ul>
124+
<li style="font-weight: bold; color: #e34d22;">包含基础版所有功能</li>
125+
<li>7 套导航栏模式</li>
126+
<li>导航栏特性(始终展开、徽章、排序等)</li>
127+
<li>明暗主题切换(明暗主题各 8 款)</li>
128+
<li>标签栏(常驻、最大化、固定、排序、标签页合并等)</li>
129+
<li>工具栏(收藏夹、通知、排序等)</li>
130+
<li>内建组件(70+)</li>
131+
<li>登录过期弹窗</li>
132+
<li>用户偏好设置</li>
133+
<li>网站锁屏</li>
134+
<li>居中布局</li>
135+
<li>Iframe 内嵌导航</li>
136+
<li>国际化(支持 RTL 模式)</li>
137+
<li>网站水印</li>
138+
<li>用户反馈上报</li>
139+
<li>错误日志上报</li>
140+
<li>网站更新提示</li>
141+
<li>自定义字体</li>
142+
<li>代码文件自动生成</li>
143+
<li>私有 Storage 数据</li>
144+
<li>业务应用示例页面</li>
145+
<li>可移除源码内框架版权信息</li>
146+
</ul>
226147
</td>
227148
</tr>
228149
</tbody>

0 commit comments

Comments
 (0)