优化
This commit is contained in:
@@ -255,7 +255,8 @@
|
|||||||
}
|
}
|
||||||
}).then(r => r.json()).then(m => {
|
}).then(r => r.json()).then(m => {
|
||||||
this.targetMarriage = m.marriage ?? null;
|
this.targetMarriage = m.marriage ?? null;
|
||||||
}).catch(() => {}).finally(() => {
|
}).catch(() => {
|
||||||
|
}).finally(() => {
|
||||||
this.marriageLoading = false;
|
this.marriageLoading = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -626,19 +627,9 @@
|
|||||||
<div x-show="userInfo.vip?.Name || userInfo.position_name"
|
<div x-show="userInfo.vip?.Name || userInfo.position_name"
|
||||||
style="margin-top: 6px;">
|
style="margin-top: 6px;">
|
||||||
|
|
||||||
<span style="display: inline-flex;
|
<span style="display: inline-flex;align-items: center;gap: 6px;padding: 2px 10px;
|
||||||
align-items: center;
|
border-radius: 999px;white-space: nowrap;width: fit-content;max-width: 100%;
|
||||||
gap: 6px;
|
font-size: 11px;font-weight: bold;background: #faf5ff;border: 1px solid #d8b4fe;color: #7c3aed;">
|
||||||
padding: 2px 10px;
|
|
||||||
border-radius: 999px;
|
|
||||||
white-space: nowrap;
|
|
||||||
width: fit-content;
|
|
||||||
max-width: 100%;
|
|
||||||
font-size: 11px;
|
|
||||||
font-weight: bold;
|
|
||||||
background: #faf5ff;
|
|
||||||
border: 1px solid #d8b4fe;
|
|
||||||
color: #7c3aed;">
|
|
||||||
|
|
||||||
{{-- VIP --}}
|
{{-- VIP --}}
|
||||||
<template x-if="userInfo.vip?.Name">
|
<template x-if="userInfo.vip?.Name">
|
||||||
@@ -657,7 +648,8 @@
|
|||||||
<template x-if="userInfo.position_name">
|
<template x-if="userInfo.position_name">
|
||||||
<span style="display: inline-flex; align-items: center; gap: 4px; color: #7c3aed;">
|
<span style="display: inline-flex; align-items: center; gap: 4px; color: #7c3aed;">
|
||||||
<span x-text="userInfo.position_icon || '🎖️'" style="font-size: 12px;"></span>
|
<span x-text="userInfo.position_icon || '🎖️'" style="font-size: 12px;"></span>
|
||||||
<span x-text="(userInfo.department_name ? userInfo.department_name + ' · ' : '') + userInfo.position_name"></span>
|
<span
|
||||||
|
x-text="(userInfo.department_name ? userInfo.department_name + ' · ' : '') + userInfo.position_name"></span>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -744,19 +736,24 @@
|
|||||||
style="display: none; padding: 8px 10px; background: #fff5f5; border: 1px dashed #fca5a5;
|
style="display: none; padding: 8px 10px; background: #fff5f5; border: 1px dashed #fca5a5;
|
||||||
border-top: none; border-radius: 0 0 8px 8px; font-size: 11px; color: #991b1b;">
|
border-top: none; border-radius: 0 0 8px 8px; font-size: 11px; color: #991b1b;">
|
||||||
<div style="display: flex; flex-direction: column; gap: 3px;">
|
<div style="display: flex; flex-direction: column; gap: 3px;">
|
||||||
<div><span style="opacity: 0.8;">首次IP:</span><span x-text="userInfo.first_ip || '无'"></span>
|
<div><span style="opacity: 0.8;">首次IP:</span><span
|
||||||
|
x-text="userInfo.first_ip || '无'"></span>
|
||||||
</div>
|
</div>
|
||||||
<div><span style="opacity: 0.8;">上次IP:</span><span x-text="userInfo.last_ip || '无'"></span>
|
<div><span style="opacity: 0.8;">上次IP:</span><span
|
||||||
|
x-text="userInfo.last_ip || '无'"></span>
|
||||||
</div>
|
</div>
|
||||||
<div><span style="opacity: 0.8;">本次IP:</span><span x-text="userInfo.login_ip || '无'"></span>
|
<div><span style="opacity: 0.8;">本次IP:</span><span
|
||||||
|
x-text="userInfo.login_ip || '无'"></span>
|
||||||
</div>
|
</div>
|
||||||
<div><span style="opacity: 0.8;">归属地:</span><span x-text="userInfo.location || '未知'"></span>
|
<div><span style="opacity: 0.8;">归属地:</span><span
|
||||||
|
x-text="userInfo.location || '未知'"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="profile-detail" x-text="userInfo.sign || '这家伙很懒,什么也没留下'" style="margin-top: 12px;"></div>
|
<div class="profile-detail" x-text="userInfo.sign || '这家伙很懒,什么也没留下'"
|
||||||
|
style="margin-top: 12px;"></div>
|
||||||
|
|
||||||
{{-- 职务履历时间轴(有任职记录才显示,可折叠) --}}
|
{{-- 职务履历时间轴(有任职记录才显示,可折叠) --}}
|
||||||
<div x-show="userInfo.position_history && userInfo.position_history.length > 0"
|
<div x-show="userInfo.position_history && userInfo.position_history.length > 0"
|
||||||
@@ -777,7 +774,8 @@
|
|||||||
{{-- 线 --}}
|
{{-- 线 --}}
|
||||||
<div
|
<div
|
||||||
style="display: flex; flex-direction: column; align-items: center; width: 18px; flex-shrink: 0;">
|
style="display: flex; flex-direction: column; align-items: center; width: 18px; flex-shrink: 0;">
|
||||||
<div style="width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; margin-top: 2px;"
|
<div
|
||||||
|
style="width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; margin-top: 2px;"
|
||||||
:style="h.is_active ? 'background: #7c3aed; box-shadow: 0 0 0 3px #ede9fe;' :
|
:style="h.is_active ? 'background: #7c3aed; box-shadow: 0 0 0 3px #ede9fe;' :
|
||||||
'background: #d1d5db;'">
|
'background: #d1d5db;'">
|
||||||
</div>
|
</div>
|
||||||
@@ -808,7 +806,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- 操作按钮区:加好友 + 送礼物 + 送金币(有职务且有奖励权限时显示) --}}
|
{{-- 操作按钮区:加好友 + 送礼物 + 送金币(有职务且有奖励权限时显示) --}}
|
||||||
<div x-data="{ showGiftPanel: false, showGiftGoldPanel: false, giftGoldAmount: '', giftGoldSending: false }" x-show="userInfo.username !== window.chatContext.username">
|
<div x-data="{ showGiftPanel: false, showGiftGoldPanel: false, giftGoldAmount: '', giftGoldSending: false }"
|
||||||
|
x-show="userInfo.username !== window.chatContext.username">
|
||||||
|
|
||||||
<div class="modal-actions" style="margin-bottom: 0; display: flex; gap: 6px;">
|
<div class="modal-actions" style="margin-bottom: 0; display: flex; gap: 6px;">
|
||||||
{{-- 加好友 / 删好友 --}}
|
{{-- 加好友 / 删好友 --}}
|
||||||
@@ -862,7 +861,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- 对方已婚时显示提示(非伴侣) --}}
|
{{-- 对方已婚时显示提示(非伴侣) --}}
|
||||||
<div x-show="!marriageLoading && targetMarriage && targetMarriage.status === 'married' && !targetMarriage.is_my_partner"
|
<div
|
||||||
|
x-show="!marriageLoading && targetMarriage && targetMarriage.status === 'married' && !targetMarriage.is_my_partner"
|
||||||
:title="'与 ' + (targetMarriage?.partner_name || '—') + ' 已婚'"
|
:title="'与 ' + (targetMarriage?.partner_name || '—') + ' 已婚'"
|
||||||
style="flex:1; display:flex; align-items:center; justify-content:center;
|
style="flex:1; display:flex; align-items:center; justify-content:center;
|
||||||
padding:7px 10px; border-radius:5px; font-size:12px; background:#fff1f2;
|
padding:7px 10px; border-radius:5px; font-size:12px; background:#fff1f2;
|
||||||
@@ -884,11 +884,16 @@
|
|||||||
<div x-show="showGiftGoldPanel" x-transition
|
<div x-show="showGiftGoldPanel" x-transition
|
||||||
style="display: none; padding: 12px 16px; background: #fffbeb; border-top: 1px solid #fde68a;">
|
style="display: none; padding: 12px 16px; background: #fffbeb; border-top: 1px solid #fde68a;">
|
||||||
<div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:8px;">
|
<div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:8px;">
|
||||||
<span style="font-size:13px; color:#92400e; font-weight:bold;">💰 赠送金币给 <span x-text="userInfo.username"></span></span>
|
<span style="font-size:13px; color:#92400e; font-weight:bold;">💰 赠送金币给 <span
|
||||||
|
x-text="userInfo.username"></span></span>
|
||||||
<button x-on:click="showGiftGoldPanel = false"
|
<button x-on:click="showGiftGoldPanel = false"
|
||||||
style="background:none; border:none; color:#92400e; cursor:pointer; font-size:18px; line-height:1; opacity:.6;">×</button>
|
style="background:none; border:none; color:#92400e; cursor:pointer; font-size:18px; line-height:1; opacity:.6;">
|
||||||
|
×
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div style="font-size:11px; color:#b45309; margin-bottom:8px;">您当前余额:<b
|
||||||
|
x-text="window.chatContext.myGold ?? '—'"></b> 金币
|
||||||
</div>
|
</div>
|
||||||
<div style="font-size:11px; color:#b45309; margin-bottom:8px;">您当前余额:<b x-text="window.chatContext.myGold ?? '—'"></b> 金币</div>
|
|
||||||
<div style="display:flex; gap:8px; align-items:center;">
|
<div style="display:flex; gap:8px; align-items:center;">
|
||||||
<input type="number" x-model.number="giftGoldAmount" min="1" max="999999"
|
<input type="number" x-model.number="giftGoldAmount" min="1" max="999999"
|
||||||
placeholder="输入金额"
|
placeholder="输入金额"
|
||||||
@@ -938,7 +943,9 @@
|
|||||||
style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
|
||||||
<span style="font-size: 13px; color: #334155; font-weight: bold;">🎁 选择礼物</span>
|
<span style="font-size: 13px; color: #334155; font-weight: bold;">🎁 选择礼物</span>
|
||||||
<button x-on:click="showGiftPanel = false"
|
<button x-on:click="showGiftPanel = false"
|
||||||
style="background: none; border: none; color: #94a3b8; cursor: pointer; font-size: 18px; line-height: 1;">×</button>
|
style="background: none; border: none; color: #94a3b8; cursor: pointer; font-size: 18px; line-height: 1;">
|
||||||
|
×
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- 礼物选择列表 --}}
|
{{-- 礼物选择列表 --}}
|
||||||
@@ -953,7 +960,8 @@
|
|||||||
<img :src="'/images/gifts/' + g.image"
|
<img :src="'/images/gifts/' + g.image"
|
||||||
style="width: 36px; height: 36px; object-fit: contain; margin-bottom: 4px;"
|
style="width: 36px; height: 36px; object-fit: contain; margin-bottom: 4px;"
|
||||||
:alt="g.name">
|
:alt="g.name">
|
||||||
<div style="font-size: 11px; color: #1e293b; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;"
|
<div
|
||||||
|
style="font-size: 11px; color: #1e293b; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;"
|
||||||
x-text="g.name"></div>
|
x-text="g.name"></div>
|
||||||
<div style="font-size: 10px; color: #e11d48;" x-text="g.cost + ' 💰'"></div>
|
<div style="font-size: 10px; color: #e11d48;" x-text="g.cost + ' 💰'"></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1005,34 +1013,40 @@
|
|||||||
@if ($myLevel >= $levelWarn || $room->master == Auth::user()->username)
|
@if ($myLevel >= $levelWarn || $room->master == Auth::user()->username)
|
||||||
<div x-show="userInfo.user_level <= {{ $myLevel }}">
|
<div x-show="userInfo.user_level <= {{ $myLevel }}">
|
||||||
<div style="font-size: 10px; color: #9ca3af; margin-bottom: 4px; padding-left: 2px;">
|
<div style="font-size: 10px; color: #9ca3af; margin-bottom: 4px; padding-left: 2px;">
|
||||||
管理员操作</div>
|
管理员操作
|
||||||
|
</div>
|
||||||
<div style="display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 8px;">
|
<div style="display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 8px;">
|
||||||
@if ($myLevel >= $levelWarn)
|
@if ($myLevel >= $levelWarn)
|
||||||
<button
|
<button
|
||||||
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #fef3c7; border: 1px solid #f59e0b; cursor: pointer;"
|
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #fef3c7; border: 1px solid #f59e0b; cursor: pointer;"
|
||||||
x-on:click="warnUser()">⚠️ 警告</button>
|
x-on:click="warnUser()">⚠️ 警告
|
||||||
|
</button>
|
||||||
@endif
|
@endif
|
||||||
@if ($myLevel >= $levelKick)
|
@if ($myLevel >= $levelKick)
|
||||||
<button
|
<button
|
||||||
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #fee2e2; border: 1px solid #ef4444; cursor: pointer;"
|
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #fee2e2; border: 1px solid #ef4444; cursor: pointer;"
|
||||||
x-on:click="kickUser()">🚫 踢出</button>
|
x-on:click="kickUser()">🚫 踢出
|
||||||
|
</button>
|
||||||
@endif
|
@endif
|
||||||
@if ($myLevel >= $levelMute)
|
@if ($myLevel >= $levelMute)
|
||||||
<button
|
<button
|
||||||
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #e0e7ff; border: 1px solid #6366f1; cursor: pointer;"
|
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #e0e7ff; border: 1px solid #6366f1; cursor: pointer;"
|
||||||
x-on:click="isMuting = !isMuting">🔇 禁言</button>
|
x-on:click="isMuting = !isMuting">🔇 禁言
|
||||||
|
</button>
|
||||||
@endif
|
@endif
|
||||||
@if ($myLevel >= $levelFreeze)
|
@if ($myLevel >= $levelFreeze)
|
||||||
<button
|
<button
|
||||||
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #dbeafe; border: 1px solid #3b82f6; cursor: pointer;"
|
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #dbeafe; border: 1px solid #3b82f6; cursor: pointer;"
|
||||||
x-on:click="freezeUser()">🧊 冻结</button>
|
x-on:click="freezeUser()">🧊 冻结
|
||||||
|
</button>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
{{-- 职务奖励金币(凭空产生),仅有在职职务且 max_reward != 0 的人可见 --}}
|
{{-- 职务奖励金币(凭空产生),仅有在职职务且 max_reward != 0 的人可见 --}}
|
||||||
@if (Auth::user()->activePosition || $myLevel >= $superLevel)
|
@if (Auth::user()->activePosition || $myLevel >= $superLevel)
|
||||||
<button x-show="window.chatContext?.myMaxReward !== 0"
|
<button x-show="window.chatContext?.myMaxReward !== 0"
|
||||||
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #fef3c7; border: 1px solid #f59e0b; cursor: pointer;"
|
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #fef3c7; border: 1px solid #f59e0b; cursor: pointer;"
|
||||||
x-on:click="openRewardModal(userInfo.username)">💰 奖励金币</button>
|
x-on:click="openRewardModal(userInfo.username)">💰 奖励金币
|
||||||
|
</button>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1041,17 +1055,22 @@
|
|||||||
@if (Auth::user()->activePosition || $myLevel >= $superLevel)
|
@if (Auth::user()->activePosition || $myLevel >= $superLevel)
|
||||||
<div>
|
<div>
|
||||||
<div style="font-size: 10px; color: #9ca3af; margin-bottom: 4px; padding-left: 2px;">
|
<div style="font-size: 10px; color: #9ca3af; margin-bottom: 4px; padding-left: 2px;">
|
||||||
职务操作</div>
|
职务操作
|
||||||
|
</div>
|
||||||
<div style="display: flex; gap: 6px; flex-wrap: wrap;">
|
<div style="display: flex; gap: 6px; flex-wrap: wrap;">
|
||||||
<template x-if="!userInfo.position_name">
|
<template x-if="!userInfo.position_name">
|
||||||
<button x-on:click="showAppointPanel = !showAppointPanel"
|
<button x-on:click="showAppointPanel = !showAppointPanel"
|
||||||
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #f3e8ff; border: 1px solid #a855f7; cursor: pointer;">✨
|
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #f3e8ff; border: 1px solid #a855f7; cursor: pointer;">
|
||||||
任命职务</button>
|
✨
|
||||||
|
任命职务
|
||||||
|
</button>
|
||||||
</template>
|
</template>
|
||||||
<template x-if="userInfo.position_name">
|
<template x-if="userInfo.position_name">
|
||||||
<button x-on:click="doRevoke()" :disabled="appointLoading"
|
<button x-on:click="doRevoke()" :disabled="appointLoading"
|
||||||
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #fef9c3; border: 1px solid #eab308; cursor: pointer;">🔧
|
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #fef9c3; border: 1px solid #eab308; cursor: pointer;">
|
||||||
撤销职务</button>
|
🔧
|
||||||
|
撤销职务
|
||||||
|
</button>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<div x-show="showAppointPanel" x-transition
|
<div x-show="showAppointPanel" x-transition
|
||||||
@@ -1073,7 +1092,9 @@
|
|||||||
<span x-text="appointLoading?'处理中...':'✅ 确认任命'"></span>
|
<span x-text="appointLoading?'处理中...':'✅ 确认任命'"></span>
|
||||||
</button>
|
</button>
|
||||||
<button x-on:click="showAppointPanel=false"
|
<button x-on:click="showAppointPanel=false"
|
||||||
style="padding:5px 10px; background:#fff; border:1px solid #ccc; border-radius:4px; font-size:11px; cursor:pointer;">取消</button>
|
style="padding:5px 10px; background:#fff; border:1px solid #ccc; border-radius:4px; font-size:11px; cursor:pointer;">
|
||||||
|
取消
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1089,7 +1110,9 @@
|
|||||||
style="width:60px; padding:4px; border:1px solid #ccc; border-radius:3px; font-size:11px;">
|
style="width:60px; padding:4px; border:1px solid #ccc; border-radius:3px; font-size:11px;">
|
||||||
<span style="font-size:11px; color:#b86e00;">分钟</span>
|
<span style="font-size:11px; color:#b86e00;">分钟</span>
|
||||||
<button x-on:click="muteUser()"
|
<button x-on:click="muteUser()"
|
||||||
style="padding:4px 12px; background:#6366f1; color:#fff; border:none; border-radius:3px; font-size:11px; cursor:pointer;">执行</button>
|
style="padding:4px 12px; background:#6366f1; color:#fff; border:none; border-radius:3px; font-size:11px; cursor:pointer;">
|
||||||
|
执行
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -1116,9 +1139,16 @@
|
|||||||
|
|
||||||
{{-- 头像原图全屏大图预览灯箱 --}}
|
{{-- 头像原图全屏大图预览灯箱 --}}
|
||||||
<template x-if="userInfo">
|
<template x-if="userInfo">
|
||||||
<div x-show="showOriginalLightbox" style="display: none; z-index: 10000; background: rgba(0,0,0,0.85); backdrop-filter: blur(5px);" class="modal-overlay" x-on:click.self="showOriginalLightbox = false" x-transition.opacity>
|
<div x-show="showOriginalLightbox"
|
||||||
<div style="position: absolute; top: 20px; right: 26px; color: rgba(255,255,255,0.7); font-size: 36px; cursor: pointer; transition: color 0.2s;" x-on:click="showOriginalLightbox = false" onmouseover="this.style.color='white'" onmouseout="this.style.color='rgba(255,255,255,0.7)'">×</div>
|
style="display: none; z-index: 10000; background: rgba(0,0,0,0.85); backdrop-filter: blur(5px);"
|
||||||
<img :src="userInfo.headface_original ? userInfo.headface_original : ((userInfo.headface || '1.gif').startsWith('storage/') ? '/' + (userInfo.headface || '1.gif') : '/images/headface/' + (userInfo.headface || '1.gif'))"
|
class="modal-overlay" x-on:click.self="showOriginalLightbox = false" x-transition.opacity>
|
||||||
|
<div
|
||||||
|
style="position: absolute; top: 20px; right: 26px; color: rgba(255,255,255,0.7); font-size: 36px; cursor: pointer; transition: color 0.2s;"
|
||||||
|
x-on:click="showOriginalLightbox = false" onmouseover="this.style.color='white'"
|
||||||
|
onmouseout="this.style.color='rgba(255,255,255,0.7)'">×
|
||||||
|
</div>
|
||||||
|
<img
|
||||||
|
:src="userInfo.headface_original ? userInfo.headface_original : ((userInfo.headface || '1.gif').startsWith('storage/') ? '/' + (userInfo.headface || '1.gif') : '/images/headface/' + (userInfo.headface || '1.gif'))"
|
||||||
style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); max-width: 90vw; max-height: 90vh; object-fit: contain; border-radius: 8px; box-shadow: 0 10px 40px rgba(0,0,0,0.5);">
|
style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); max-width: 90vw; max-height: 90vh; object-fit: contain; border-radius: 8px; box-shadow: 0 10px 40px rgba(0,0,0,0.5);">
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -1212,7 +1242,8 @@
|
|||||||
<div style="color:#fde68a; font-size:13px; font-weight:bold; letter-spacing:3px; margin-bottom:12px;">
|
<div style="color:#fde68a; font-size:13px; font-weight:bold; letter-spacing:3px; margin-bottom:12px;">
|
||||||
══ 发放奖励金币 ══
|
══ 发放奖励金币 ══
|
||||||
</div>
|
</div>
|
||||||
<div style="color:white; font-size:20px; font-weight:900; text-shadow:0 2px 8px rgba(0,0,0,0.3); margin-bottom:20px;">
|
<div
|
||||||
|
style="color:white; font-size:20px; font-weight:900; text-shadow:0 2px 8px rgba(0,0,0,0.3); margin-bottom:20px;">
|
||||||
发给:<span x-text="targetUsername"></span>
|
发给:<span x-text="targetUsername"></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -1222,21 +1253,28 @@
|
|||||||
</div>
|
</div>
|
||||||
<div x-show="!loading">
|
<div x-show="!loading">
|
||||||
<div style="display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-bottom:20px;">
|
<div style="display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-bottom:20px;">
|
||||||
<div style="background:rgba(255,255,255,0.15); border:1px solid rgba(255,255,255,0.2); border-radius:10px; padding:10px 4px;">
|
<div
|
||||||
|
style="background:rgba(255,255,255,0.15); border:1px solid rgba(255,255,255,0.2); border-radius:10px; padding:10px 4px;">
|
||||||
<div style="font-size:10px; color:rgba(255,255,255,0.7); margin-bottom:4px;">单次上限</div>
|
<div style="font-size:10px; color:rgba(255,255,255,0.7); margin-bottom:4px;">单次上限</div>
|
||||||
<div style="font-size:13px; font-weight:bold; color:#fff;" x-text="fmt(quota.max_once)"></div>
|
<div style="font-size:13px; font-weight:bold; color:#fff;" x-text="fmt(quota.max_once)"></div>
|
||||||
</div>
|
</div>
|
||||||
<div style="background:rgba(255,255,255,0.15); border:1px solid rgba(255,255,255,0.2); border-radius:10px; padding:10px 4px;">
|
<div
|
||||||
|
style="background:rgba(255,255,255,0.15); border:1px solid rgba(255,255,255,0.2); border-radius:10px; padding:10px 4px;">
|
||||||
<div style="font-size:10px; color:rgba(255,255,255,0.7); margin-bottom:4px;">单日上限</div>
|
<div style="font-size:10px; color:rgba(255,255,255,0.7); margin-bottom:4px;">单日上限</div>
|
||||||
<div style="font-size:13px; font-weight:bold; color:#fff;" x-text="fmt(quota.daily_limit)"></div>
|
<div style="font-size:13px; font-weight:bold; color:#fff;"
|
||||||
|
x-text="fmt(quota.daily_limit)"></div>
|
||||||
</div>
|
</div>
|
||||||
<div style="background:rgba(20,184,166,0.25); border:1px solid rgba(255,255,255,0.3); border-radius:10px; padding:10px 4px;">
|
<div
|
||||||
|
style="background:rgba(20,184,166,0.25); border:1px solid rgba(255,255,255,0.3); border-radius:10px; padding:10px 4px;">
|
||||||
<div style="font-size:10px; color:#a7f3d0; margin-bottom:4px;">今日已发</div>
|
<div style="font-size:10px; color:#a7f3d0; margin-bottom:4px;">今日已发</div>
|
||||||
<div style="font-size:13px; font-weight:bold; color:#fff;" x-text="quota.today_sent.toLocaleString()"></div>
|
<div style="font-size:13px; font-weight:bold; color:#fff;"
|
||||||
|
x-text="quota.today_sent.toLocaleString()"></div>
|
||||||
</div>
|
</div>
|
||||||
<div style="background:rgba(20,184,166,0.25); border:1px solid rgba(255,255,255,0.3); border-radius:10px; padding:10px 4px;">
|
<div
|
||||||
|
style="background:rgba(20,184,166,0.25); border:1px solid rgba(255,255,255,0.3); border-radius:10px; padding:10px 4px;">
|
||||||
<div style="font-size:10px; color:#a7f3d0; margin-bottom:4px;">剩余额度</div>
|
<div style="font-size:10px; color:#a7f3d0; margin-bottom:4px;">剩余额度</div>
|
||||||
<div style="font-size:13px; font-weight:bold; color:#fff;" x-text="fmt(quota.daily_remaining)"></div>
|
<div style="font-size:13px; font-weight:bold; color:#fff;"
|
||||||
|
x-text="fmt(quota.daily_remaining)"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1284,7 +1322,8 @@
|
|||||||
|
|
||||||
{{-- 最近 10 条记录 --}}
|
{{-- 最近 10 条记录 --}}
|
||||||
<div style="background:rgba(0,0,0,0.15); border-radius:12px; padding:12px 14px; text-align:left;">
|
<div style="background:rgba(0,0,0,0.15); border-radius:12px; padding:12px 14px; text-align:left;">
|
||||||
<div style="color:rgba(255,255,255,0.7); font-size:11px; font-weight:bold; margin-bottom:8px; display:flex; align-items:center; justify-content:space-between;">
|
<div
|
||||||
|
style="color:rgba(255,255,255,0.7); font-size:11px; font-weight:bold; margin-bottom:8px; display:flex; align-items:center; justify-content:space-between;">
|
||||||
<span>📋 最近发放记录</span>
|
<span>📋 最近发放记录</span>
|
||||||
<span x-show="loading">加载中…</span>
|
<span x-show="loading">加载中…</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -1292,7 +1331,8 @@
|
|||||||
style="font-size:12px; color:rgba(255,255,255,0.5); text-align:center; padding:10px 0;">
|
style="font-size:12px; color:rgba(255,255,255,0.5); text-align:center; padding:10px 0;">
|
||||||
暂无发放记录
|
暂无发放记录
|
||||||
</div>
|
</div>
|
||||||
<div x-show="!loading" style="max-height:120px; overflow-y:auto; display:flex; flex-direction:column; gap:6px; padding-right:4px;">
|
<div x-show="!loading"
|
||||||
|
style="max-height:120px; overflow-y:auto; display:flex; flex-direction:column; gap:6px; padding-right:4px;">
|
||||||
<template x-for="(r, i) in quota.recent_rewards" :key="i">
|
<template x-for="(r, i) in quota.recent_rewards" :key="i">
|
||||||
<div style="display:flex; align-items:center; justify-content:space-between;
|
<div style="display:flex; align-items:center; justify-content:space-between;
|
||||||
padding:6px 10px; border-radius:8px; background:rgba(255,255,255,0.1);">
|
padding:6px 10px; border-radius:8px; background:rgba(255,255,255,0.1);">
|
||||||
@@ -1381,6 +1421,7 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', setupFriendNotification);
|
document.addEventListener('DOMContentLoaded', setupFriendNotification);
|
||||||
|
|
||||||
// ── BannerNotification:通用大卡片通知监听 ──────────────────
|
// ── BannerNotification:通用大卡片通知监听 ──────────────────
|
||||||
@@ -1417,6 +1458,7 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', setupBannerNotification);
|
document.addEventListener('DOMContentLoaded', setupBannerNotification);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user