功能:字体颜色持久化、等级体系升级至99级、钓鱼小游戏、补充系统参数

- 字体颜色:s_color 改为 varchar,发消息时保存颜色,进入聊天室自动恢复
- 等级体系:maxlevel 15→99,superlevel 16→100,99级经验阶梯(幂次曲线)
- 管理权限等级按比例调整:禁言50、踢人60、设公告60、封号80、封IP90
- 钓鱼小游戏:FishingController(抛竿扣金币+收竿随机结果+广播)
- 补充6个缺失的 sysparam 参数 + 4个钓鱼参数
- 用户列表点击用户名后自动聚焦输入框
- Pint 格式化
This commit is contained in:
2026-02-26 21:10:34 +08:00
parent d884853968
commit ea06328885
652 changed files with 5013 additions and 1274 deletions
@@ -0,0 +1,153 @@
@extends('admin.layouts.app')
@section('title', '随机事件管理')
@section('content')
<div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden">
<div class="p-6 border-b border-gray-100 flex justify-between items-center bg-gray-50">
<div>
<h2 class="text-lg font-bold text-gray-800">随机事件管理 (autoact)</h2>
<p class="text-xs text-gray-500 mt-1">管理聊天室中随机触发的好运/坏运事件,可增减经验和金币。</p>
</div>
</div>
{{-- 新增事件表单 --}}
<div class="p-6 border-b border-gray-100 bg-indigo-50/50">
<h3 class="text-sm font-bold text-gray-700 mb-3"> 添加新事件</h3>
<form action="{{ route('admin.autoact.store') }}" method="POST">
@csrf
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 max-w-4xl">
<div class="md:col-span-2">
<label class="block text-xs font-bold text-gray-600 mb-1">事件文本
<span class="text-gray-400 font-normal">{username} 将被替换为触发者用户名)</span></label>
<input type="text" name="text_body" required placeholder="例:🎉 恭喜【{username}】获得 100 经验值!"
class="w-full border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500 p-2 bg-white border">
</div>
<div>
<label class="block text-xs font-bold text-gray-600 mb-1">事件类型</label>
<select name="event_type"
class="w-full border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500 p-2 bg-white border">
<option value="good">🟢 好运(奖励)</option>
<option value="bad">🔴 坏运(惩罚)</option>
<option value="neutral">🟣 中性(纯文字)</option>
</select>
</div>
<div class="flex gap-3">
<div class="flex-1">
<label class="block text-xs font-bold text-gray-600 mb-1">经验变化</label>
<input type="number" name="exp_change" value="0"
class="w-full border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500 p-2 bg-white border">
</div>
<div class="flex-1">
<label class="block text-xs font-bold text-gray-600 mb-1">金币变化</label>
<input type="number" name="jjb_change" value="0"
class="w-full border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500 p-2 bg-white border">
</div>
</div>
</div>
<div class="mt-4">
<button type="submit"
class="px-6 py-2 bg-indigo-600 text-white rounded-md font-bold hover:bg-indigo-700 shadow-sm transition text-sm">
添加事件
</button>
</div>
</form>
</div>
{{-- 事件列表 --}}
<div class="p-6">
<h3 class="text-sm font-bold text-gray-700 mb-3">📋 现有事件列表(共 {{ $events->count() }} 条)</h3>
<div class="overflow-x-auto">
<table class="w-full text-sm">
<thead>
<tr class="bg-gray-50 text-gray-600 text-left border-b">
<th class="p-3 w-10">ID</th>
<th class="p-3">事件文本</th>
<th class="p-3 w-20">类型</th>
<th class="p-3 w-16">经验</th>
<th class="p-3 w-16">金币</th>
<th class="p-3 w-16">状态</th>
<th class="p-3 w-32">操作</th>
</tr>
</thead>
<tbody>
@forelse ($events as $event)
<tr class="border-b hover:bg-gray-50 {{ !$event->enabled ? 'opacity-40' : '' }}">
<td class="p-3 text-gray-400">{{ $event->id }}</td>
<td class="p-3">
<span class="text-xs">{{ Str::limit($event->text_body, 60) }}</span>
</td>
<td class="p-3">
@if ($event->event_type === 'good')
<span
class="px-2 py-0.5 rounded-full bg-green-100 text-green-700 text-xs font-bold">好运</span>
@elseif($event->event_type === 'bad')
<span
class="px-2 py-0.5 rounded-full bg-red-100 text-red-700 text-xs font-bold">坏运</span>
@else
<span
class="px-2 py-0.5 rounded-full bg-purple-100 text-purple-700 text-xs font-bold">中性</span>
@endif
</td>
<td
class="p-3 {{ $event->exp_change > 0 ? 'text-green-600' : ($event->exp_change < 0 ? 'text-red-600' : 'text-gray-400') }} font-bold">
{{ $event->exp_change > 0 ? '+' : '' }}{{ $event->exp_change }}
</td>
<td
class="p-3 {{ $event->jjb_change > 0 ? 'text-green-600' : ($event->jjb_change < 0 ? 'text-red-600' : 'text-gray-400') }} font-bold">
{{ $event->jjb_change > 0 ? '+' : '' }}{{ $event->jjb_change }}
</td>
<td class="p-3">
<button onclick="toggleEvent({{ $event->id }}, this)"
class="text-xs px-2 py-1 rounded {{ $event->enabled ? 'bg-green-100 text-green-700' : 'bg-gray-200 text-gray-500' }} cursor-pointer">
{{ $event->enabled ? '启用' : '禁用' }}
</button>
</td>
<td class="p-3">
<form action="{{ route('admin.autoact.destroy', $event->id) }}" method="POST"
class="inline" onsubmit="return confirm('确定要删除此事件吗?')">
@csrf
@method('DELETE')
<button type="submit"
class="text-red-500 hover:text-red-700 text-xs font-bold">删除</button>
</form>
</td>
</tr>
@empty
<tr>
<td colspan="7" class="p-6 text-center text-gray-400">暂无事件,请添加。</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
<script>
/**
* 切换事件启用/禁用状态
*/
function toggleEvent(id, btn) {
fetch(`/admin/autoact/${id}/toggle`, {
method: 'POST',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}',
'Content-Type': 'application/json',
'Accept': 'application/json',
},
})
.then(r => r.json())
.then(data => {
if (data.status === 'success') {
btn.textContent = data.enabled ? '启用' : '禁用';
btn.className = data.enabled ?
'text-xs px-2 py-1 rounded bg-green-100 text-green-700 cursor-pointer' :
'text-xs px-2 py-1 rounded bg-gray-200 text-gray-500 cursor-pointer';
// 切换行透明度
btn.closest('tr').classList.toggle('opacity-40', !data.enabled);
}
});
}
</script>
@endsection
+7 -3
View File
@@ -29,9 +29,13 @@
class="block px-4 py-3 rounded-md transition {{ request()->routeIs('admin.users.*') ? 'bg-indigo-600 font-bold' : 'hover:bg-white/10' }}">
👥 用户管理
</a>
<a href="{{ route('admin.sql.index') }}"
class="block px-4 py-3 rounded-md transition {{ request()->routeIs('admin.sql.*') ? 'bg-indigo-600 font-bold' : 'hover:bg-white/10' }}">
💾 SQL 探针
<a href="{{ route('admin.rooms.index') }}"
class="block px-4 py-3 rounded-md transition {{ request()->routeIs('admin.rooms.*') ? 'bg-indigo-600 font-bold' : 'hover:bg-white/10' }}">
🏠 房间管理
</a>
<a href="{{ route('admin.autoact.index') }}"
class="block px-4 py-3 rounded-md transition {{ request()->routeIs('admin.autoact.*') ? 'bg-indigo-600 font-bold' : 'hover:bg-white/10' }}">
🎲 随机事件
</a>
</nav>
<div class="p-4 border-t border-white/10">
+117
View File
@@ -0,0 +1,117 @@
@extends('admin.layouts.app')
@section('title', '房间管理')
@section('content')
<div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden">
<div class="p-6 border-b border-gray-100 flex justify-between items-center bg-gray-50">
<div>
<h2 class="text-lg font-bold text-gray-800">房间管理</h2>
<p class="text-xs text-gray-500 mt-1">管理聊天室房间的名称、介绍、公告和权限设置。</p>
</div>
</div>
<div class="p-6">
<div class="space-y-4">
@foreach ($rooms as $room)
<div class="border border-gray-200 rounded-lg overflow-hidden" x-data="{ editing: false }">
{{-- 房间信息行 --}}
<div class="flex items-center justify-between p-4 bg-gray-50 cursor-pointer"
@click="editing = !editing">
<div class="flex items-center gap-4">
<span
class="text-xs font-bold bg-indigo-100 text-indigo-700 px-2 py-1 rounded">#{{ $room->id }}</span>
<div>
<span class="font-bold text-gray-800">{{ $room->room_name }}</span>
@if ($room->room_keep)
<span
class="ml-2 text-xs px-1.5 py-0.5 rounded bg-amber-100 text-amber-700">系统房间</span>
@endif
@if (!$room->door_open)
<span class="ml-1 text-xs px-1.5 py-0.5 rounded bg-red-100 text-red-600">已关闭</span>
@endif
</div>
</div>
<div class="flex items-center gap-3 text-xs text-gray-500">
<span>房主: {{ $room->room_owner ?: '无' }}</span>
<span>人气: {{ $room->visit_num ?? 0 }}</span>
<span>等级限制: {{ $room->permit_level ?? 0 }}</span>
<svg class="w-4 h-4 transition-transform" :class="editing ? 'rotate-180' : ''"
fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M19 9l-7 7-7-7" />
</svg>
</div>
</div>
{{-- 编辑表单(展开) --}}
<div x-show="editing" x-collapse class="border-t border-gray-200">
<form action="{{ route('admin.rooms.update', $room->id) }}" method="POST" class="p-4">
@csrf
@method('PUT')
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<label class="block text-xs font-bold text-gray-600 mb-1">房间名称</label>
<input type="text" name="room_name" value="{{ $room->room_name }}" required
class="w-full border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500 p-2 bg-white border text-sm">
</div>
<div>
<label class="block text-xs font-bold text-gray-600 mb-1">房主用户名</label>
<input type="text" name="room_owner" value="{{ $room->room_owner }}"
class="w-full border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500 p-2 bg-white border text-sm"
placeholder="留空为无房主">
</div>
<div class="md:col-span-2">
<label class="block text-xs font-bold text-gray-600 mb-1">房间介绍</label>
<input type="text" name="room_des" value="{{ $room->room_des }}"
class="w-full border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500 p-2 bg-white border text-sm"
placeholder="描述这个房间的用途和氛围">
</div>
<div class="md:col-span-2">
<label class="block text-xs font-bold text-gray-600 mb-1">公告/祝福语
<span class="text-gray-400 font-normal">(在聊天室顶部滚动显示)</span></label>
<input type="text" name="announcement" value="{{ $room->announcement }}"
class="w-full border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500 p-2 bg-white border text-sm"
placeholder="例:祝大家新年快乐!">
</div>
<div>
<label class="block text-xs font-bold text-gray-600 mb-1">进入等级限制</label>
<input type="number" name="permit_level" value="{{ $room->permit_level ?? 0 }}"
min="0" max="15"
class="w-full border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500 p-2 bg-white border text-sm">
</div>
<div>
<label class="block text-xs font-bold text-gray-600 mb-1">房间状态</label>
<select name="door_open"
class="w-full border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500 p-2 bg-white border text-sm">
<option value="1" {{ $room->door_open ? 'selected' : '' }}>开放</option>
<option value="0" {{ !$room->door_open ? 'selected' : '' }}>关闭</option>
</select>
</div>
</div>
<div class="mt-4 flex items-center gap-3">
<button type="submit"
class="px-5 py-2 bg-indigo-600 text-white rounded-md font-bold hover:bg-indigo-700 shadow-sm transition text-sm">
保存修改
</button>
@unless ($room->room_keep)
<form action="{{ route('admin.rooms.destroy', $room->id) }}" method="POST"
class="inline"
onsubmit="return confirm('确定要删除房间「{{ $room->room_name }}」吗?此操作不可撤销!')">
@csrf
@method('DELETE')
<button type="submit"
class="px-4 py-2 bg-red-500 text-white rounded-md font-bold hover:bg-red-600 transition text-sm">
删除房间
</button>
</form>
@endunless
</div>
</form>
</div>
</div>
@endforeach
</div>
</div>
</div>
@endsection
-98
View File
@@ -1,98 +0,0 @@
@extends('admin.layouts.app')
@section('title', 'SQL 战术沙盒探针')
@section('content')
<div class="mb-6 bg-red-50 border-l-4 border-red-500 p-4 rounded text-red-700 shadow-sm text-sm">
<p class="font-bold flex items-center">
<span class="mr-2">⚠️</span> 顶级安全警告
</p>
<p class="mt-1 ml-6">
此操作直接连通底层 MySQL 数据库。为杜绝《删库跑路》等生产事故,本控制台已硬编码拦截过滤:只会放行以 <code>SELECT</code>, <code>SHOW</code>,
<code>EXPLAIN</code> 等起手的<strong>纯只读语句</strong>。所有的增删改一律阻断。
</p>
</div>
<div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden mb-6">
<div class="p-6">
<form action="{{ route('admin.sql.execute') }}" method="POST">
@csrf
<div class="mb-4">
<label class="block text-sm font-bold text-gray-700 mb-2">输入原始只读 SQL 语句</label>
<textarea name="query" rows="5" required placeholder="SELECT * FROM users ORDER BY id DESC LIMIT 10;"
class="w-full border-gray-300 rounded-md shadow-sm focus:border-indigo-500 focus:ring-indigo-500 p-4 bg-gray-50 border font-mono resize-y">{{ old('query', $query ?? '') }}</textarea>
</div>
<div class="flex justify-end pt-2">
<button type="submit"
class="px-6 py-2 bg-slate-800 text-white rounded-md font-bold hover:bg-slate-900 shadow-sm transition flex items-center">
<span>🔥 </span>
</button>
</div>
</form>
</div>
</div>
{{-- 结果展示区 --}}
@isset($error)
<div
class="bg-red-50 border border-red-200 text-red-700 p-6 rounded-xl shadow-sm mb-6 overflow-x-auto font-mono text-sm whitespace-pre-wrap">
{{ $error }}
</div>
@endif
@isset($results)
<div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden">
<div class="bg-gray-50 px-6 py-3 border-b flex justify-between items-center text-sm font-bold text-gray-700">
<span>查询结果 ( {{ count($results) }} )</span>
</div>
<div class="overflow-x-auto p-4 max-h-[600px] custom-scrollbar overflow-y-auto">
@if (empty($results))
<div class="text-center text-gray-400 py-10 font-bold">SQL 执行成功,但返回了空结果集 (0 rows)</div>
@else
<table class="w-full text-left border-collapse text-sm">
<thead>
<tr class="border-b-2 border-indigo-500">
@foreach ($columns as $col)
<th
class="p-3 font-bold text-gray-600 whitespace-nowrap bg-indigo-50/50 sticky top-0 z-10 shadow-sm">
{{ $col }}</th>
@endforeach
</tr>
</thead>
<tbody class="divide-y divide-gray-100 font-mono">
@foreach ($results as $row)
<tr class="hover:bg-amber-50 transition">
@foreach ($columns as $col)
<td class="p-3 whitespace-nowrap text-gray-700">{{ $row->$col ?? 'NULL' }}</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
@endif
</div>
</div>
@endisset
<style>
/* 针对该表格页加深一点滚动条以便查看超长字段 */
.custom-scrollbar::-webkit-scrollbar {
width: 8px;
height: 8px;
}
.custom-scrollbar::-webkit-scrollbar-thumb {
background-color: #94a3b8;
border-radius: 4px;
}
.custom-scrollbar::-webkit-scrollbar-track {
background-color: #f1f5f9;
}
</style>
@endsection
+84 -30
View File
@@ -4,7 +4,11 @@
@section('content')
<div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden mb-6" x-data="{ showEditModal: false, editingUser: {} }">
@php
// 管理员级别 = 最高等级 + 1,后台编辑最高可设到管理员级别
$adminLevel = (int) \App\Models\Sysparam::getValue('maxlevel', '15') + 1;
@endphp
<div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden mb-6" x-data="{ showEditModal: false, editingUser: {}, adminLevel: {{ $adminLevel }} }">
<div class="p-6 border-b border-gray-100 bg-gray-50 flex items-center justify-between">
<form action="{{ route('admin.users.index') }}" method="GET" class="flex gap-2">
<input type="text" name="username" value="{{ request('username') }}" placeholder="搜索用户名..."
@@ -26,7 +30,7 @@
<th class="p-4">注册名</th>
<th class="p-4">性别</th>
<th class="p-4">等级</th>
<th class="p-4">个性签名</th>
<th class="p-4">经验</th>
<th class="p-4">注册时间</th>
<th class="p-4 text-right">管理操作</th>
</tr>
@@ -42,20 +46,32 @@
<span class="font-bold text-gray-800">{{ $user->username }}</span>
</div>
</td>
<td class="p-4 text-sm">{{ $user->sex }}</td>
<td class="p-4 text-sm">{{ [0 => '保密', 1 => '男', 2 => '女'][$user->sex] ?? '保密' }}</td>
<td class="p-4">
<span
class="px-2 py-0.5 rounded-full text-xs {{ $user->user_level >= 15 ? 'bg-red-100 text-red-700 font-bold' : 'bg-gray-100 text-gray-600' }}">
class="px-2 py-0.5 rounded-full text-xs {{ $user->user_level >= 100 ? 'bg-red-100 text-red-700 font-bold' : 'bg-gray-100 text-gray-600' }}">
LV.{{ $user->user_level }}
</span>
</td>
<td class="p-4 text-sm text-gray-500 truncate max-w-[200px]" title="{{ $user->sign }}">
{{ $user->sign ?: '-' }}</td>
<td class="p-4 text-sm font-mono text-gray-600">
{{ number_format($user->exp_num ?? 0) }}
</td>
<td class="p-4 text-sm font-mono text-gray-500">{{ $user->created_at->format('Y/m/d H:i') }}
</td>
<td class="p-4 text-right space-x-2 relative" x-data>
<button
@click="editingUser = { id: {{ $user->id }}, username: '{{ addslashes($user->username) }}', user_level: {{ $user->user_level }}, sex: '{{ $user->sex }}', requestUrl: '{{ route('admin.users.update', $user->id) }}' }; showEditModal = true"
@click="editingUser = {
id: {{ $user->id }},
username: '{{ addslashes($user->username) }}',
user_level: {{ $user->user_level }},
exp_num: {{ $user->exp_num ?? 0 }},
jjb: {{ $user->jjb ?? 0 }},
meili: {{ $user->meili ?? 0 }},
sex: '{{ $user->sex }}',
qianming: '{{ addslashes($user->qianming ?? '') }}',
visit_num: {{ $user->visit_num ?? 0 }},
requestUrl: '{{ route('admin.users.update', $user->id) }}'
}; showEditModal = true"
class="text-xs bg-indigo-50 text-indigo-600 font-bold px-3 py-1.5 rounded hover:bg-indigo-600 hover:text-white transition cursor-pointer">
详细 / 修改
</button>
@@ -86,48 +102,86 @@
<div x-show="showEditModal" style="display: none;"
class="fixed inset-0 z-50 bg-black/60 flex items-center justify-center p-4">
<div @click.away="showEditModal = false"
class="bg-white rounded-xl shadow-2xl w-full max-w-md transform transition-all" x-transition>
class="bg-white rounded-xl shadow-2xl w-full max-w-lg transform transition-all" x-transition>
<div
class="bg-indigo-900 border-b border-indigo-800 px-6 py-4 flex justify-between items-center rounded-t-xl text-white">
<h3 class="font-bold text-lg">全量修改<span x-text="editingUser.username" class="text-indigo-300"></span>
<h3 class="font-bold text-lg">编辑用户<span x-text="editingUser.username" class="text-indigo-300"></span>
</h3>
<button @click="showEditModal = false" class="text-gray-400 hover:text-white">&times;</button>
</div>
<div class="p-6">
<!-- 依靠 Alpine 绑定的 AJAX 或者 Form 提交 -->
<form :action="editingUser.requestUrl" method="POST" id="adminUserUpdateForm">
<form :action="editingUser.requestUrl" method="POST">
@csrf @method('PUT')
<div class="mb-4">
<label class="block text-sm font-bold text-gray-700 mb-2">安全等级 (0-99)</label>
<input type="number" name="user_level" x-model="editingUser.user_level" required
class="w-full border-gray-300 rounded shadow-sm focus:ring-indigo-500">
<div class="grid grid-cols-2 gap-4">
{{-- 等级 --}}
<div>
<label class="block text-xs font-bold text-gray-600 mb-1">等级
<span class="text-gray-400 font-normal">(最高 <span x-text="adminLevel"></span>
/ 管理员级别)</span></label>
<input type="number" name="user_level" x-model="editingUser.user_level" required
min="0" :max="adminLevel"
class="w-full border-gray-300 rounded-md shadow-sm focus:ring-indigo-500 focus:border-indigo-500 p-2 border text-sm">
</div>
{{-- 经验 --}}
<div>
<label class="block text-xs font-bold text-gray-600 mb-1">经验值</label>
<input type="number" name="exp_num" x-model="editingUser.exp_num" required min="0"
class="w-full border-gray-300 rounded-md shadow-sm focus:ring-indigo-500 focus:border-indigo-500 p-2 border text-sm">
</div>
{{-- 金币 --}}
<div>
<label class="block text-xs font-bold text-gray-600 mb-1">金币 (jjb)</label>
<input type="number" name="jjb" x-model="editingUser.jjb" required min="0"
class="w-full border-gray-300 rounded-md shadow-sm focus:ring-indigo-500 focus:border-indigo-500 p-2 border text-sm">
</div>
{{-- 魅力 --}}
<div>
<label class="block text-xs font-bold text-gray-600 mb-1">魅力值</label>
<input type="number" name="meili" x-model="editingUser.meili" required min="0"
class="w-full border-gray-300 rounded-md shadow-sm focus:ring-indigo-500 focus:border-indigo-500 p-2 border text-sm">
</div>
{{-- 性别 --}}
<div>
<label class="block text-xs font-bold text-gray-600 mb-1">性别</label>
<select name="sex" x-model="editingUser.sex"
class="w-full border-gray-300 rounded-md shadow-sm focus:ring-indigo-500 focus:border-indigo-500 p-2 border text-sm">
<option value="1"></option>
<option value="2"></option>
<option value="0">保密</option>
</select>
</div>
{{-- 访问次数 --}}
<div>
<label class="block text-xs font-bold text-gray-600 mb-1">访问次数</label>
<input type="text" disabled :value="editingUser.visit_num"
class="w-full bg-gray-100 border-gray-200 rounded-md p-2 border text-sm text-gray-500">
</div>
</div>
<div class="mb-4">
<label class="block text-sm font-bold text-gray-700 mb-2">性别</label>
<select name="sex" x-model="editingUser.sex"
class="w-full border-gray-300 rounded shadow-sm focus:ring-indigo-500">
<option value=""></option>
<option value=""></option>
<option value="保密">保密</option>
</select>
{{-- 签名 --}}
<div class="mt-4">
<label class="block text-xs font-bold text-gray-600 mb-1">个性签名</label>
<input type="text" name="qianming" x-model="editingUser.qianming" maxlength="255"
placeholder="暂无签名"
class="w-full border-gray-300 rounded-md shadow-sm focus:ring-indigo-500 focus:border-indigo-500 p-2 border text-sm">
</div>
<div class="mb-6">
{{-- 密码 --}}
<div class="mt-4">
<label
class="block text-sm font-bold pl-1 text-red-600 border-l-4 border-red-500 bg-red-50 p-2 mb-2">强制重密码
(留空不修改)</label>
<input type="text" name="password" placeholder="强行输入新密码覆盖"
class="w-full border-red-300 rounded shadow-sm focus:border-red-500 focus:ring-red-500 placeholder-red-300">
class="block text-xs font-bold pl-2 text-red-600 border-l-4 border-red-500 bg-red-50 p-2 mb-1">强制重密码
<span class="font-normal text-gray-500">留空不修改</span></label>
<input type="text" name="password" placeholder="输入新密码"
class="w-full border-red-300 rounded-md shadow-sm focus:border-red-500 focus:ring-red-500 p-2 border text-sm placeholder-red-300">
</div>
<div class="flex justify-end space-x-3 pt-4 border-t border-gray-100">
<div class="flex justify-end space-x-3 pt-4 mt-4 border-t border-gray-100">
<button type="button" @click="showEditModal = false"
class="px-4 py-2 border rounded font-medium text-gray-600 hover:bg-gray-50">取消</button>
<button type="submit"
class="px-4 py-2 bg-indigo-600 text-white rounded font-bold hover:bg-indigo-700 shadow-sm">提交强制改写</button>
class="px-4 py-2 bg-indigo-600 text-white rounded font-bold hover:bg-indigo-700 shadow-sm">保存修改</button>
</div>
</form>
</div>