optimized
This commit is contained in:
@@ -39,7 +39,7 @@ function renderMyGroup() {
|
||||
<form id="createForm">
|
||||
<label for="groupName">创建新组</label>
|
||||
<div class="form-line">
|
||||
<input id="groupName" maxlength="30" placeholder="输入组名,例如:第 1 组" required>
|
||||
<input id="groupName" maxlength="30" value="${text(state.user.name)}" placeholder="默认使用你的姓名" required>
|
||||
<button data-working type="submit">创建</button>
|
||||
</div>
|
||||
<p class="hint">创建后你是组长。每组成员(包括组长)最多 ${state.snapshot.group_limit} 人。已加入别人的组时不能创建。</p>
|
||||
@@ -75,6 +75,7 @@ function renderGroups() {
|
||||
}
|
||||
grid.innerHTML = state.snapshot.groups.map(group => {
|
||||
const own = state.membership && state.membership.group_id === group.id;
|
||||
const ownLeader = own && state.membership.leader_student_id === state.user.id;
|
||||
const locked = state.snapshot.locked;
|
||||
const full = group.full;
|
||||
let disabledReason = '';
|
||||
@@ -87,7 +88,10 @@ function renderGroups() {
|
||||
<span class="chip ${full ? 'full' : ''}">${group.member_count}/${state.snapshot.group_limit} 人</span>
|
||||
</div>
|
||||
<ul class="member-list">
|
||||
${group.members.length ? group.members.map(member => `<li>${memberLine(member)}</li>`).join('') : '<li><span class="hint">暂无成员</span></li>'}
|
||||
${group.members.length ? group.members.map(member => `<li>${memberLine(member)}${ownLeader && !member.is_leader
|
||||
? `<button class="small danger" data-working data-kick="${member.id}" data-name="${text(member.name)}"
|
||||
${locked ? 'disabled data-reason="老师已停止分组操作"' : ''}>移出</button>` : ''}</li>`).join('')
|
||||
: '<li><span class="hint">暂无成员</span></li>'}
|
||||
</ul>
|
||||
${own ? '<span class="chip active">我的当前组</span>'
|
||||
: `<button class="small" data-working data-group="${group.id}" data-reason="${text(disabledReason)}">加入</button>`}
|
||||
@@ -100,6 +104,15 @@ function renderGroups() {
|
||||
}
|
||||
submitJoin(Number(button.dataset.group));
|
||||
}));
|
||||
grid.querySelectorAll('button[data-kick]').forEach(button => button.addEventListener('click', () => {
|
||||
if (button.dataset.reason) {
|
||||
toast(button.dataset.reason, true);
|
||||
return;
|
||||
}
|
||||
if (requireConfirm(`确定将 ${button.dataset.name} 移出小组吗?`)) {
|
||||
submitKick(Number(button.dataset.kick));
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
function renderState() {
|
||||
@@ -160,6 +173,15 @@ async function submitJoin(groupId, confirmed = false) {
|
||||
if (result.ok) await loadState();
|
||||
}
|
||||
|
||||
async function submitKick(studentId) {
|
||||
const result = await api('groups/remove-member', {
|
||||
method: 'POST',
|
||||
json: { student_id: studentId }
|
||||
});
|
||||
toast(result.message, !result.ok);
|
||||
if (result.ok) await loadState();
|
||||
}
|
||||
|
||||
async function submitLeave(confirmed = false) {
|
||||
const result = await api('leave', { method: 'POST', json: { confirmed } });
|
||||
if (!result.ok && result.require_confirm) {
|
||||
|
||||
Reference in New Issue
Block a user