节点表单内支持快捷新建参与人成员(批 29)
This commit is contained in:
@@ -257,6 +257,18 @@ $tripField = [
|
||||
</div>
|
||||
<p class="form-hint">勾选后保存即生效;已选的人重新勾选不会清掉之前记的签到 / 心情。</p>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php /* 快捷新建成员(批 29):只填名字建一个 guest 成员并自动勾上,不离开表单。
|
||||
想补手机号/头像/角色,去「成员管理」完善。 */ ?>
|
||||
<?php if (\App\Auth::isAdmin()): ?>
|
||||
<div class="member-quickadd" id="member-quickadd"
|
||||
data-url="<?= e(url('users/quickCreate')) ?>" data-csrf="<?= e(csrf_token()) ?>">
|
||||
<input type="text" id="new-member-name" maxlength="50"
|
||||
placeholder="没找到?输入名字直接新建成员" autocomplete="off">
|
||||
<button type="button" class="btn" id="new-member-add">+ 新建并勾选</button>
|
||||
<span class="member-quickadd-msg" id="new-member-msg" aria-live="polite"></span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</fieldset>
|
||||
|
||||
<?php
|
||||
@@ -1223,6 +1235,72 @@ $tripField = [
|
||||
restoreDraft(saved);
|
||||
setStatus('已恢复上次没保存成功的内容(照片需要重新选择)。', false);
|
||||
})();
|
||||
|
||||
// ===== 快捷新建成员(批 29):AJAX 建 guest 成员 → 插入已勾选的参与人 =====
|
||||
(function initQuickAdd() {
|
||||
var box = document.getElementById('member-quickadd');
|
||||
if (!box) return;
|
||||
var input = document.getElementById('new-member-name');
|
||||
var btn = document.getElementById('new-member-add');
|
||||
var msg = document.getElementById('new-member-msg');
|
||||
var list = document.querySelector('#member-field .member-pick');
|
||||
if (!input || !btn || !msg || !list) return;
|
||||
|
||||
function say(text, ok) {
|
||||
msg.textContent = text;
|
||||
msg.classList.toggle('is-ok', !!ok);
|
||||
msg.classList.toggle('is-err', !ok);
|
||||
}
|
||||
|
||||
function addOption(name, id) {
|
||||
var label = document.createElement('label');
|
||||
label.className = 'member-pick-item';
|
||||
var cb = document.createElement('input');
|
||||
cb.type = 'checkbox';
|
||||
cb.name = 'members[]';
|
||||
cb.value = String(id);
|
||||
cb.checked = true;
|
||||
label.appendChild(cb);
|
||||
var span = document.createElement('span');
|
||||
span.className = 'member-pick-name';
|
||||
span.textContent = name;
|
||||
label.appendChild(span);
|
||||
list.appendChild(label);
|
||||
}
|
||||
|
||||
function submit() {
|
||||
var name = input.value.replace(/\s+/g, ' ').trim();
|
||||
if (!name) { say('先输入名字', false); input.focus(); return; }
|
||||
btn.disabled = true;
|
||||
say('创建中…', true);
|
||||
var fd = new FormData();
|
||||
fd.append('name', name);
|
||||
fd.append('_csrf', box.dataset.csrf || '');
|
||||
fetch(box.dataset.url, { method: 'POST', body: fd, credentials: 'same-origin' })
|
||||
.then(function (r) {
|
||||
return r.json().then(function (j) { return { status: r.status, j: j }; });
|
||||
})
|
||||
.then(function (res) {
|
||||
if (res.j && res.j.ok) {
|
||||
addOption(res.j.name, res.j.id);
|
||||
input.value = '';
|
||||
say('已创建「' + res.j.name + '」并勾选', true);
|
||||
} else {
|
||||
say((res.j && res.j.error) || ('创建失败(' + res.status + ')'), false);
|
||||
}
|
||||
})
|
||||
.catch(function () { say('网络错误,请重试', false); })
|
||||
.finally(function () {
|
||||
btn.disabled = false;
|
||||
input.focus();
|
||||
});
|
||||
}
|
||||
|
||||
btn.addEventListener('click', submit);
|
||||
input.addEventListener('keydown', function (ev) {
|
||||
if (ev.key === 'Enter') { ev.preventDefault(); submit(); }
|
||||
});
|
||||
})();
|
||||
})();
|
||||
})();
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user