功能:职务列表内联编辑 + 全局奖励配置自动保存

职务列表三列内联编辑(失焦/回车自动保存,无需打开编辑弹窗):
- 人数上限:PATCH max_persons
- 单次上限:PATCH max_reward
- 单日上限:PATCH daily_reward_limit
保存成功显示短暂绿色 ✓,失败显示红色错误提示

全局奖励接收次数配置改为 AJAX 自动保存,失焦/回车触发,
无需保存按钮(原表单已移除)

新增接口:
- PATCH /admin/positions/{position}/patch(quickPatch)
- POST  /admin/positions/reward-config(saveRewardConfig,兼容 JSON + 重定向)
This commit is contained in:
2026-03-01 11:28:15 +08:00
parent baaa7087b0
commit 89d93c92ed
3 changed files with 168 additions and 39 deletions

View File

@@ -72,13 +72,35 @@ class PositionController extends Controller
return redirect()->route('admin.positions.index')->with('success', "职务【{$data['name']}】创建成功!");
}
/**
* 快速补丁:仅更新职务的数值限额字段(内联编辑专用)
*
* 允许修改的字段max_persons / max_reward / daily_reward_limit。
* 只接受 JSON AJAX 请求,只更新提交的字段,其余字段保持不变。
*
* @param Position $position 目标职务
*/
public function quickPatch(Request $request, Position $position): \Illuminate\Http\JsonResponse
{
$data = $request->validate([
'max_persons' => 'sometimes|nullable|integer|min:1|max:9999',
'max_reward' => 'sometimes|nullable|integer|min:0|max:999999',
'daily_reward_limit' => 'sometimes|nullable|integer|min:0|max:999999',
]);
// 用 fill+save 确保 null 值(不限)也能正确写入
$position->fill($data)->save();
return response()->json(['status' => 'success']);
}
/**
* 保存全局奖励金币接收次数上限
*
* 控制每位用户单日内可从所有职务持有者处累计接收奖励的最高次数。
* 0 表示不限制,保存到 sysparam 表中key: reward_recipient_daily_max
*/
public function saveRewardConfig(Request $request): RedirectResponse
public function saveRewardConfig(Request $request): \Illuminate\Http\JsonResponse|RedirectResponse
{
$request->validate([
'reward_recipient_daily_max' => 'required|integer|min:0|max:9999',
@@ -98,6 +120,11 @@ class PositionController extends Controller
$label = $value === '0' ? '不限' : "{$value}";
// AJAX 请求返回 JSON普通表单提交返回重定向
if ($request->expectsJson()) {
return response()->json(['status' => 'success', 'message' => "全局接收次数上限已更新为:{$label}"]);
}
return redirect()->route('admin.positions.index')
->with('success', "全局接收次数上限已更新为:{$label}");
}