📝更新屏蔽文件
@@ -1,5 +1,5 @@
|
||||
/config/sign_in.json
|
||||
/resource/*
|
||||
/resource/temp_html/*
|
||||
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
|
||||
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 721 KiB |
|
After Width: | Height: | Size: 768 KiB |
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 187 KiB |
|
After Width: | Height: | Size: 173 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 168 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 879 KiB |
|
After Width: | Height: | Size: 676 KiB |
|
After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 217 KiB |
|
After Width: | Height: | Size: 177 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 984 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 912 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 537 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 160 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 487 KiB |
|
After Width: | Height: | Size: 541 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 158 KiB |
|
After Width: | Height: | Size: 134 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 172 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 659 KiB |
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 783 KiB |
|
After Width: | Height: | Size: 529 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 166 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 302 B |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
@@ -0,0 +1,230 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>每日签到</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-family: "{{ font_family }}", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "{{ font_family }}";
|
||||
src: url("../font/Rounded.ttf") format("truetype");
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
body {
|
||||
background: linear-gradient(135deg, #ff9a9e 0%, #fad0c4 100%);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: 100vh;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.container {
|
||||
background: white;
|
||||
border-radius: 25px;
|
||||
box-shadow: 0 15px 35px rgba(255, 105, 180, 0.3);
|
||||
padding: 30px;
|
||||
max-width: 500px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.header {
|
||||
text-align: center;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
color: #ff6b95;
|
||||
font-size: 28px;
|
||||
margin-bottom: 8px;
|
||||
text-shadow: 2px 2px 0 #ffe4ec;
|
||||
}
|
||||
|
||||
.date {
|
||||
color: #ff85b8;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.todayReward {
|
||||
background: linear-gradient(135deg, #fff5f7, #ffeef2);
|
||||
border-radius: 20px;
|
||||
padding: 25px;
|
||||
margin-bottom: 25px;
|
||||
border: 3px dashed #ffb6c1;
|
||||
}
|
||||
|
||||
.sectionTitle {
|
||||
color: #ff6b95;
|
||||
font-size: 20px;
|
||||
margin-bottom: 15px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.rewardItem {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background: white;
|
||||
border-radius: 15px;
|
||||
padding: 15px;
|
||||
margin-bottom: 12px;
|
||||
box-shadow: 0 5px 15px rgba(255, 107, 149, 0.1);
|
||||
border: 2px solid #ffe4ec;
|
||||
}
|
||||
|
||||
.rewardItem:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.rewardImage {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-radius: 12px;
|
||||
margin-right: 15px;
|
||||
object-fit: cover;
|
||||
border: 2px solid #ffb6c1;
|
||||
}
|
||||
|
||||
.rewardText {
|
||||
color: #ff6b95;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.progressSection {
|
||||
background: linear-gradient(135deg, #fff5f7, #ffeef2);
|
||||
border-radius: 20px;
|
||||
padding: 25px;
|
||||
border: 3px dashed #ffb6c1;
|
||||
}
|
||||
|
||||
.progressInfo {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 10px;
|
||||
color: #ff6b95;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.progressBar {
|
||||
height: 20px;
|
||||
background: #ffe4ec;
|
||||
border-radius: 10px;
|
||||
margin-bottom: 20px;
|
||||
overflow: hidden;
|
||||
box-shadow: inset 0 2px 5px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
.progressFill {
|
||||
height: 100%;
|
||||
background: linear-gradient(90deg, #ff6b95, #ff9eb5);
|
||||
border-radius: 10px;
|
||||
transition: width 0.5s ease;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.progressFill::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: linear-gradient(90deg,
|
||||
transparent 0%,
|
||||
rgba(255,255,255,0.4) 50%,
|
||||
transparent 100%);
|
||||
animation: shimmer 2s infinite;
|
||||
}
|
||||
|
||||
@keyframes shimmer {
|
||||
0% { transform: translateX(-100%); }
|
||||
100% { transform: translateX(100%); }
|
||||
}
|
||||
|
||||
.milestone {
|
||||
text-align: center;
|
||||
color: #ff85b8;
|
||||
font-size: 14px;
|
||||
margin-top: 5px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.footer {
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
color: #ff85b8;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
color: #ff6b95;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h1>🎯 每日签到奖励</h1>
|
||||
<div class="date">{{ currentDate }}</div>
|
||||
</div>
|
||||
|
||||
<div class="todayReward">
|
||||
<h2 class="sectionTitle">🎁 今日签到奖励</h2>
|
||||
{% for reward in todayRewards %}
|
||||
<div class="rewardItem">
|
||||
<img src="{{ reward.imagePath }}" alt="{{ reward.name }}" class="rewardImage">
|
||||
<div class="rewardText">{{ reward.name }} × {{ reward.quantity }}</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="progressSection">
|
||||
<h2 class="sectionTitle">📊 累计签到进度</h2>
|
||||
|
||||
<div class="progressInfo">
|
||||
<span>当前进度</span>
|
||||
<span>{{ currentProgress }} / {{ totalMilestones }}</span>
|
||||
</div>
|
||||
|
||||
<div class="progressBar">
|
||||
<div class="progressFill" style="width: {{ progressPercentage }}%"></div>
|
||||
</div>
|
||||
|
||||
<div class="milestone">
|
||||
已达成 {{ achievedMilestones }} 个里程碑
|
||||
</div>
|
||||
|
||||
<!-- 累计奖励列表 -->
|
||||
{% for reward in cumulativeRewards %}
|
||||
<div class="rewardItem {% if reward.achieved %}achieved{% endif %}">
|
||||
<img src="{{ reward.imagePath }}" alt="{{ reward.name }}" class="rewardImage">
|
||||
<div class="rewardText">
|
||||
{{ reward.name }} × {{ reward.quantity }}
|
||||
<div style="font-size: 12px; color: #ff85b8; margin-top: 5px;">
|
||||
{{ reward.description }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
连续签到<span class="highlight">{{ consecutiveDays }}</span>天,继续加油!
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||