完善职务礼包红包默认配置
This commit is contained in:
@@ -27,6 +27,8 @@
|
||||
max_reward: '',
|
||||
daily_reward_limit: '',
|
||||
recipient_daily_limit: '',
|
||||
red_packet_amount: 8888,
|
||||
red_packet_count: 10,
|
||||
sort_order: 0
|
||||
},
|
||||
|
||||
@@ -34,7 +36,7 @@
|
||||
this.editing = null;
|
||||
this.selectedIds = [];
|
||||
this.selectedPermissions = [];
|
||||
this.form = { department_id: '', name: '', icon: '🎖️', rank: 50, level: 60, max_persons: 1, max_reward: '', daily_reward_limit: '', recipient_daily_limit: '', sort_order: 0 };
|
||||
this.form = { department_id: '', name: '', icon: '🎖️', rank: 50, level: 60, max_persons: 1, max_reward: '', daily_reward_limit: '', recipient_daily_limit: '', red_packet_amount: 8888, red_packet_count: 10, sort_order: 0 };
|
||||
this.showForm = true;
|
||||
},
|
||||
openEdit(pos, appointableIds, permissions) {
|
||||
@@ -51,6 +53,8 @@
|
||||
max_reward: pos.max_reward !== null && pos.max_reward !== undefined ? pos.max_reward : '',
|
||||
daily_reward_limit: pos.daily_reward_limit !== null && pos.daily_reward_limit !== undefined ? pos.daily_reward_limit : '',
|
||||
recipient_daily_limit: pos.recipient_daily_limit !== null && pos.recipient_daily_limit !== undefined ? pos.recipient_daily_limit : '',
|
||||
red_packet_amount: pos.red_packet_amount || 8888,
|
||||
red_packet_count: pos.red_packet_count || 10,
|
||||
sort_order: pos.sort_order,
|
||||
};
|
||||
this.showForm = true;
|
||||
@@ -185,6 +189,7 @@
|
||||
<th class="px-4 py-3 text-center">单次上限</th>
|
||||
<th class="px-4 py-3 text-center">单日上限</th>
|
||||
<th class="px-4 py-3 text-center">任命权</th>
|
||||
<th class="px-4 py-3 text-center">礼包默认</th>
|
||||
<th class="px-4 py-3 text-center">聊天室权限</th>
|
||||
@php $superLvl = (int) \App\Models\Sysparam::getValue('superlevel', '100'); @endphp
|
||||
@if (Auth::user()->user_level >= $superLvl)
|
||||
@@ -254,6 +259,12 @@
|
||||
<span class="text-xs text-gray-400">无</span>
|
||||
@endif
|
||||
</td>
|
||||
<td class="px-4 py-3 text-center">
|
||||
<div class="text-xs leading-5 text-red-700">
|
||||
<div class="font-bold">{{ number_format((int) ($pos->red_packet_amount ?? 8888)) }}</div>
|
||||
<div class="text-gray-400">{{ (int) ($pos->red_packet_count ?? 10) }} 份</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="px-4 py-3">
|
||||
@if (! empty($pos->permissions))
|
||||
@php
|
||||
@@ -297,6 +308,8 @@
|
||||
max_reward: {{ $pos->max_reward ?? 'null' }},
|
||||
daily_reward_limit: {{ $pos->daily_reward_limit ?? 'null' }},
|
||||
recipient_daily_limit: {{ $pos->recipient_daily_limit ?? 'null' }},
|
||||
red_packet_amount: {{ $pos->red_packet_amount ?? 8888 }},
|
||||
red_packet_count: {{ $pos->red_packet_count ?? 10 }},
|
||||
sort_order: {{ $pos->sort_order }},
|
||||
requestUrl: '{{ route('admin.positions.update', $pos->id) }}'
|
||||
}, {{ json_encode($appointableIds) }}, {{ json_encode($pos->permissions ?? []) }})"
|
||||
@@ -447,6 +460,30 @@
|
||||
<span class="min-w-0">
|
||||
<span class="block font-bold text-gray-700">{{ $permissionMeta['label'] }}</span>
|
||||
<span class="block text-xs text-gray-500">{{ $permissionMeta['description'] }}</span>
|
||||
@if ($permissionCode === \App\Support\PositionPermissionRegistry::ROOM_RED_PACKET)
|
||||
<span class="mt-3 grid grid-cols-2 gap-2 rounded-lg border border-red-100 bg-red-50/70 p-2"
|
||||
@click.stop>
|
||||
<span>
|
||||
<span class="mb-1 block text-[11px] font-bold text-red-700">默认礼包总量</span>
|
||||
<input type="number" name="red_packet_amount"
|
||||
x-model="form.red_packet_amount" required min="1"
|
||||
max="999999999"
|
||||
class="w-full rounded-md border border-red-200 bg-white p-1.5 text-xs text-red-800"
|
||||
placeholder="金币/经验共用">
|
||||
</span>
|
||||
<span>
|
||||
<span class="mb-1 block text-[11px] font-bold text-red-700">默认礼包份数</span>
|
||||
<input type="number" name="red_packet_count"
|
||||
x-model="form.red_packet_count" required min="1"
|
||||
max="100"
|
||||
class="w-full rounded-md border border-red-200 bg-white p-1.5 text-xs text-red-800"
|
||||
placeholder="拆成几份">
|
||||
</span>
|
||||
<span class="col-span-2 text-[11px] leading-4 text-red-600">
|
||||
勾选后发金币/经验礼包都使用这组默认值;取消权限不会清空配置。
|
||||
</span>
|
||||
</span>
|
||||
@endif
|
||||
</span>
|
||||
</label>
|
||||
@endforeach
|
||||
|
||||
@@ -296,42 +296,82 @@
|
||||
/**
|
||||
* superlevel 点击「礼包」按钮,弹出 chatBanner 三按钮选择类型后发包。
|
||||
*/
|
||||
window.sendRedPacket = function() {
|
||||
window.chatBanner.show({
|
||||
icon: '🧧',
|
||||
title: '发出礼包',
|
||||
name: '选择礼包类型',
|
||||
body: '将发出 <b>8888</b> 数量共 <b>10</b> 份的礼包,系统凭空发放,房间成员先到先得!',
|
||||
gradient: ['#991b1b', '#dc2626', '#ea580c'],
|
||||
titleColor: '#fde68a',
|
||||
autoClose: 0,
|
||||
buttons: [{
|
||||
label: '💰 金币礼包',
|
||||
color: '#d97706',
|
||||
onClick(btn, close) {
|
||||
close();
|
||||
doSendRedPacket('gold');
|
||||
window.sendRedPacket = async function() {
|
||||
const btn = document.getElementById('red-packet-btn');
|
||||
if (btn) {
|
||||
btn.disabled = true;
|
||||
btn.textContent = '读取中…';
|
||||
}
|
||||
|
||||
try {
|
||||
const config = await fetchRedPacketConfig();
|
||||
const amountText = Number(config.amount || 0).toLocaleString('zh-CN');
|
||||
const countText = Number(config.count || 0).toLocaleString('zh-CN');
|
||||
|
||||
window.chatBanner.show({
|
||||
icon: '🧧',
|
||||
title: '发出礼包',
|
||||
name: '选择礼包类型',
|
||||
body: `将发出 ${amountText} 数量共 ${countText} 份的礼包,系统凭空发放,房间成员先到先得!`,
|
||||
gradient: ['#991b1b', '#dc2626', '#ea580c'],
|
||||
titleColor: '#fde68a',
|
||||
autoClose: 0,
|
||||
buttons: [{
|
||||
label: '💰 金币礼包',
|
||||
color: '#d97706',
|
||||
onClick(button, close) {
|
||||
close();
|
||||
doSendRedPacket('gold');
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '✨ 经验礼包',
|
||||
color: '#7c3aed',
|
||||
onClick(btn, close) {
|
||||
close();
|
||||
doSendRedPacket('exp');
|
||||
{
|
||||
label: '✨ 经验礼包',
|
||||
color: '#7c3aed',
|
||||
onClick(button, close) {
|
||||
close();
|
||||
doSendRedPacket('exp');
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '取消',
|
||||
color: 'rgba(255,255,255,0.15)',
|
||||
onClick(btn, close) {
|
||||
close();
|
||||
{
|
||||
label: '取消',
|
||||
color: 'rgba(255,255,255,0.15)',
|
||||
onClick(button, close) {
|
||||
close();
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
],
|
||||
});
|
||||
} catch (e) {
|
||||
await window.chatDialog.alert(e.message || '读取礼包配置失败', '操作失败', '#cc4444');
|
||||
} finally {
|
||||
if (btn) {
|
||||
btn.disabled = false;
|
||||
btn.innerHTML = '🧧 礼包';
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 读取当前职务的礼包红包默认配置。
|
||||
*
|
||||
* @returns {Promise<{amount:number,count:number,expire_seconds:number}>}
|
||||
*/
|
||||
async function fetchRedPacketConfig() {
|
||||
const res = await fetch('/command/red-packet/config', {
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
||||
},
|
||||
});
|
||||
const data = await res.json();
|
||||
|
||||
if (!res.ok || data.status !== 'success') {
|
||||
throw new Error(data.message || '读取礼包配置失败');
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 实际发包请求(由 chatBanner 按钮回调触发)。
|
||||
*
|
||||
@@ -624,7 +664,7 @@
|
||||
// 弹出全局 Toast
|
||||
window.chatToast.show({
|
||||
title: '🧧 礼包到账',
|
||||
message: `恭喜您抢到了礼包 <b>${data.amount}</b> ${typeLabel}!`,
|
||||
message: `恭喜您抢到了礼包 ${data.amount} ${typeLabel}!`,
|
||||
icon: '🧧',
|
||||
color: (_rpType === 'exp') ? '#7c3aed' : '#dc2626',
|
||||
duration: 8000,
|
||||
|
||||
Reference in New Issue
Block a user