Files
chatroom/resources/views/chat/partials/daily-sign-in-modal.blade.php
T

339 lines
9.0 KiB
PHP
Raw Normal View History

2026-04-24 22:47:27 +08:00
{{--
文件功能:每日签到日历弹窗。
展示当月签到状态、今日签到入口、补签卡数量,并支持快速购买补签卡。
--}}
<style>
.daily-sign-modal-overlay {
position: fixed;
inset: 0;
z-index: 2600;
display: none;
align-items: center;
justify-content: center;
background: rgba(15, 23, 42, 0.48);
padding: 8px;
}
.daily-sign-modal {
width: min(520px, 96vw);
max-height: min(610px, 96vh);
overflow: hidden;
border-radius: 10px;
background: #ffffff;
box-shadow: 0 22px 60px rgba(15, 23, 42, 0.28);
border: 1px solid rgba(15, 118, 110, 0.16);
display: flex;
flex-direction: column;
}
.daily-sign-modal-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
padding: 6px 10px;
border-bottom: 1px solid #e2e8f0;
background: linear-gradient(90deg, #f0fdfa, #ffffff);
}
.daily-sign-modal-title {
font-size: 14px;
font-weight: 800;
color: #0f766e;
}
.daily-sign-modal-close {
border: none;
background: #e2e8f0;
color: #334155;
border-radius: 7px;
width: 24px;
height: 24px;
cursor: pointer;
font-size: 15px;
line-height: 24px;
}
.daily-sign-modal-body {
padding: 6px 10px 8px;
overflow-y: auto;
}
.daily-sign-summary {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 5px;
margin-bottom: 6px;
}
.daily-sign-summary-card {
border: 1px solid #dbeafe;
background: #f8fafc;
border-radius: 8px;
padding: 5px 8px;
min-width: 0;
}
.daily-sign-summary-card strong {
display: block;
color: #0f172a;
font-size: 12px;
}
.daily-sign-summary-card span {
color: #64748b;
font-size: 11px;
}
.daily-sign-actions {
display: flex;
gap: 5px;
margin-bottom: 6px;
}
.daily-sign-action-btn {
flex: 1;
border: none;
border-radius: 8px;
padding: 5px 8px;
font-weight: 800;
cursor: pointer;
color: #ffffff;
background: #0f766e;
font-size: 11px;
}
.daily-sign-action-btn.secondary {
background: #f59e0b;
}
.daily-sign-month-bar {
display: flex;
align-items: center;
justify-content: space-between;
margin: 3px 0 4px;
}
.daily-sign-month-bar button {
border: 1px solid #cbd5e1;
background: #ffffff;
border-radius: 7px;
padding: 3px 7px;
cursor: pointer;
color: #334155;
font-size: 11px;
}
.daily-sign-month-label {
font-size: 12px;
font-weight: 800;
color: #0f172a;
}
.daily-sign-weekdays,
.daily-sign-grid {
display: grid;
grid-template-columns: repeat(7, minmax(0, 1fr));
gap: 3px;
}
.daily-sign-weekday {
text-align: center;
color: #64748b;
font-size: 10px;
font-weight: 700;
}
.daily-sign-day {
min-height: 32px;
border: 1px solid #e2e8f0;
border-radius: 6px;
background: #ffffff;
padding: 2px;
text-align: center;
font-size: 9px;
color: #334155;
position: relative;
overflow: hidden;
}
.daily-sign-day.blank {
border-color: transparent;
background: transparent;
}
.daily-sign-day.signed {
border-color: #99f6e4;
background: #f0fdfa;
color: #0f766e;
}
.daily-sign-day.missed {
border-color: #fed7aa;
background: #fff7ed;
color: #9a3412;
cursor: pointer;
}
.daily-sign-day.today {
box-shadow: inset 0 0 0 2px #14b8a6;
}
.daily-sign-day.future {
background: #f8fafc;
color: #94a3b8;
}
.daily-sign-day .day-num {
display: block;
font-weight: 800;
font-size: 11px;
}
.daily-sign-day .day-state {
display: block;
margin-top: 2px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.daily-sign-rewards {
margin-top: 6px;
border: 1px solid #e2e8f0;
border-radius: 8px;
background: #f8fafc;
overflow: hidden;
}
.daily-sign-rewards-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 6px;
padding: 4px 8px;
border-bottom: 1px solid #e2e8f0;
color: #0f172a;
font-size: 11px;
font-weight: 800;
}
.daily-sign-rewards-list {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 4px;
padding: 5px 8px;
}
.daily-sign-reward-card {
border: 1px solid #dbeafe;
border-radius: 6px;
background: #ffffff;
padding: 4px;
min-width: 0;
}
.daily-sign-reward-card.active {
border-color: #14b8a6;
background: #f0fdfa;
box-shadow: inset 0 0 0 1px #14b8a6;
}
.daily-sign-reward-title {
display: flex;
align-items: center;
justify-content: space-between;
gap: 4px;
color: #0f766e;
font-size: 9px;
font-weight: 800;
white-space: nowrap;
}
.daily-sign-reward-name {
margin-top: 1px;
color: #334155;
font-size: 9px;
font-weight: 700;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.daily-sign-reward-desc {
margin-top: 1px;
color: #64748b;
font-size: 8px;
line-height: 1.15;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
@media (max-width: 520px) {
.daily-sign-summary {
grid-template-columns: 1fr 1fr;
}
.daily-sign-actions {
flex-direction: row;
}
.daily-sign-day {
min-height: 30px;
}
.daily-sign-rewards-list {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
</style>
<div id="daily-sign-modal" class="daily-sign-modal-overlay" onclick="if(event.target === this) closeDailySignInModal()">
<div class="daily-sign-modal">
<div class="daily-sign-modal-head">
<div class="daily-sign-modal-title"> 每日签到</div>
<button type="button" class="daily-sign-modal-close" onclick="closeDailySignInModal()">×</button>
</div>
<div class="daily-sign-modal-body">
<div class="daily-sign-summary">
<div class="daily-sign-summary-card">
<strong id="daily-sign-streak">连续 0 </strong>
<span id="daily-sign-preview">加载中...</span>
</div>
<div class="daily-sign-summary-card">
<strong id="daily-sign-card-count">补签卡 0 </strong>
<span id="daily-sign-card-price">可在商店购买</span>
</div>
</div>
<div class="daily-sign-actions">
<button type="button" id="daily-sign-claim-btn" class="daily-sign-action-btn" onclick="claimDailySignInFromModal()">今日签到</button>
<button type="button" id="daily-sign-buy-card-btn" class="daily-sign-action-btn secondary" onclick="buyDailySignRepairCard()">购买补签卡</button>
</div>
<div class="daily-sign-month-bar">
<button type="button" onclick="loadDailySignInCalendar(window.dailySignInState?.prevMonth)">上月</button>
<div id="daily-sign-month-label" class="daily-sign-month-label">本月</div>
<button type="button" onclick="loadDailySignInCalendar(window.dailySignInState?.nextMonth)">下月</button>
</div>
<div class="daily-sign-weekdays">
<div class="daily-sign-weekday"></div>
<div class="daily-sign-weekday"></div>
<div class="daily-sign-weekday"></div>
<div class="daily-sign-weekday"></div>
<div class="daily-sign-weekday"></div>
<div class="daily-sign-weekday"></div>
<div class="daily-sign-weekday"></div>
</div>
<div id="daily-sign-calendar-grid" class="daily-sign-grid" style="margin-top:4px;"></div>
<div class="daily-sign-rewards">
<div class="daily-sign-rewards-head">
<span>连续奖励目标</span>
<span id="daily-sign-reward-progress" style="font-size:11px;color:#64748b;">当前 0 </span>
</div>
<div id="daily-sign-rewards-list" class="daily-sign-rewards-list"></div>
</div>
</div>
</div>
</div>