fix(ui+permission): 移除联合投稿 / emoji换SVG / 修复移动端浅色适配 / 已排期显示日期 / 隐藏.env提示 / 公开排期档期游客访问
具体改动: 1. feat(投稿表单): 移除 RequestForm.vue 联合投稿功能整套模板+状态+payload+CSS(10处残留) 2. feat(图标): Icon.vue 新增 sparkles/star 图标; 首页档期卡片📅🎵✨和排期列表空状态🎵📅换成 lucide SVG Icon 3. fix(浅色适配): ScheduleList.vue 日期选择弹窗桌面端+移动端(content/header/h3/close-btn/item)全部改为 bg-primary + var text + indigo 主色, 修复竖屏选择日期标题白字看不见 4. feat(歌曲列表): SongList.vue scheduled-tag 内联追加 formatScheduleDate, 徽章+日期双胶囊显示 5. fix(登录): OAuthButtons.vue showPlaceholderHint 强制 false, 隐藏虚线框 .env 配置提示 6. fix(权限): server/middleware/auth.ts + auth-route-policy.ts 双白名单同步追加 /api/expected-play-dates GET 公共访问, 修复未登录 Authentication expired 401
This commit is contained in:
@@ -104,13 +104,13 @@
|
||||
</div>
|
||||
|
||||
<div v-else-if="!schedules || schedules.length === 0" key="empty-all" class="empty">
|
||||
<div class="icon mb-4">🎵</div>
|
||||
<Icon class="icon mb-4" name="music" :size="48" />
|
||||
<p>暂无排期信息</p>
|
||||
<p class="text-sm text-text-secondary">点歌后等待管理员安排播出时间</p>
|
||||
</div>
|
||||
|
||||
<div v-else-if="currentDateSchedules.length === 0" key="empty-date" class="empty">
|
||||
<div class="icon mb-4">📅</div>
|
||||
<Icon class="icon mb-4" name="calendar" :size="48" />
|
||||
<p>当前日期暂无排期</p>
|
||||
<p>请选择其他日期查看</p>
|
||||
</div>
|
||||
@@ -3168,33 +3168,35 @@ const vRipple = {
|
||||
|
||||
/* 日期选择弹窗 */
|
||||
.date-picker-content {
|
||||
background: var(--surface-primary, var(--bg-primary, #1a1a1f));
|
||||
background: var(--bg-primary, #ffffff);
|
||||
border-radius: 20px 20px 0 0;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
max-height: 70vh;
|
||||
border: none;
|
||||
box-shadow: 0 -10px 40px rgba(0, 0, 0, 0.5);
|
||||
box-shadow: 0 -10px 40px rgba(0, 0, 0, 0.12);
|
||||
}
|
||||
|
||||
.date-picker-header {
|
||||
padding: 20px;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
|
||||
border-bottom: 1px solid var(--border-secondary, rgba(0, 0, 0, 0.06));
|
||||
}
|
||||
|
||||
.date-picker-header h3 {
|
||||
font-size: 17px;
|
||||
font-weight: 600;
|
||||
color: var(--text-primary, #09090b);
|
||||
}
|
||||
|
||||
.close-btn {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border-radius: 10px;
|
||||
background: rgba(255, 255, 255, 0.06);
|
||||
background: var(--bg-tertiary, rgba(0, 0, 0, 0.06));
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--text-secondary, #52525b);
|
||||
}
|
||||
|
||||
.date-picker-list {
|
||||
@@ -3205,20 +3207,23 @@ const vRipple = {
|
||||
padding: 14px 16px;
|
||||
border-radius: 12px;
|
||||
margin-bottom: 6px;
|
||||
background: rgba(255, 255, 255, 0.03);
|
||||
background: var(--bg-secondary, #f4f4f5);
|
||||
border: none;
|
||||
font-size: 14px;
|
||||
color: var(--text-primary, #09090b);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.date-picker-item:hover {
|
||||
background: rgba(255, 255, 255, 0.06);
|
||||
background: rgba(79, 70, 229, 0.08);
|
||||
transform: none;
|
||||
color: var(--primary, #4f46e5);
|
||||
}
|
||||
|
||||
.date-picker-item.active {
|
||||
background: rgba(11, 90, 254, 0.15);
|
||||
background: rgba(79, 70, 229, 0.14);
|
||||
border-left: none;
|
||||
color: #0b5afe;
|
||||
color: var(--primary, #4f46e5);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3453,10 +3458,10 @@ const vRipple = {
|
||||
width: 85%;
|
||||
max-width: 350px;
|
||||
max-height: 70vh;
|
||||
background: var(--bg-secondary, #1a1d24);
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
background: var(--bg-primary, #ffffff);
|
||||
border-radius: 18px;
|
||||
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.12);
|
||||
border: 1px solid var(--border-secondary, #e4e4e7);
|
||||
overflow: hidden;
|
||||
animation: scale-in 0.2s ease;
|
||||
display: flex;
|
||||
@@ -3468,19 +3473,19 @@ const vRipple = {
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 1rem;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
||||
border-bottom: 1px solid var(--border-secondary, rgba(0, 0, 0, 0.08));
|
||||
}
|
||||
|
||||
.date-picker-header h3 {
|
||||
margin: 0;
|
||||
font-size: 16px;
|
||||
color: white;
|
||||
color: var(--text-primary, #09090b);
|
||||
}
|
||||
|
||||
.close-btn {
|
||||
background: none;
|
||||
border: none;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
color: var(--text-secondary, #52525b);
|
||||
font-size: 22px;
|
||||
cursor: pointer;
|
||||
padding: 0 5px;
|
||||
@@ -3495,24 +3500,28 @@ const vRipple = {
|
||||
|
||||
.date-picker-item {
|
||||
padding: 0.75rem 1rem;
|
||||
border-radius: 8px;
|
||||
border-radius: 10px;
|
||||
margin-bottom: 0.5rem;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
background: var(--bg-secondary, #f4f4f5);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
white-space: pre-line;
|
||||
color: var(--text-primary, #09090b);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.date-picker-item:hover {
|
||||
background: rgba(11, 90, 254, 0.1);
|
||||
background: rgba(79, 70, 229, 0.1);
|
||||
transform: translateY(-2px);
|
||||
color: var(--primary, #4f46e5);
|
||||
}
|
||||
|
||||
.date-picker-item.active {
|
||||
background: rgba(11, 90, 254, 0.2);
|
||||
border-left: 3px solid #0b5afe;
|
||||
background: rgba(79, 70, 229, 0.14);
|
||||
border-left: 3px solid var(--primary, #4f46e5);
|
||||
color: var(--primary, #4f46e5);
|
||||
}
|
||||
|
||||
/* 过渡动画 */
|
||||
|
||||
Reference in New Issue
Block a user