mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
ui: allow deleting contest/homework via edit page
This commit is contained in:
1 parent
1bb340f27a
commit
8a8e312ca4
5 files changed
+53
-1
No files matched your search
@@ -96,6 +96,14 @@ class ContestDetailHandler extends ContestHandler {
|
|||||||
await contest.attend(domainId, tid, this.user._id);
|
await contest.attend(domainId, tid, this.user._id);
|
||||||
this.back();
|
this.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@param('tid', Types.ObjectID)
|
||||||
|
async postDelete(domainId: string, tid: ObjectID) {
|
||||||
|
const tdoc = await contest.get(domainId, tid);
|
||||||
|
if (tdoc.owner !== this.user._id) this.checkPerm(PERM.PERM_EDIT_CONTEST);
|
||||||
|
await contest.del(domainId, tid);
|
||||||
|
this.response.redirect = this.url('contest_main');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ContestBoardcastHandler extends ContestHandler {
|
class ContestBoardcastHandler extends ContestHandler {
|
||||||
|
|||||||
@@ -108,6 +108,14 @@ class HomeworkDetailHandler extends HomeworkHandler {
|
|||||||
await contest.attend(domainId, tdoc.docId, this.user._id, document.TYPE_HOMEWORK);
|
await contest.attend(domainId, tdoc.docId, this.user._id, document.TYPE_HOMEWORK);
|
||||||
this.back();
|
this.back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@param('tid', Types.ObjectID)
|
||||||
|
async postDelete(domainId: string, tid: ObjectID) {
|
||||||
|
const tdoc = await contest.get(domainId, tid, document.TYPE_HOMEWORK);
|
||||||
|
if (tdoc.owner !== this.user._id) this.checkPerm(PERM.PERM_EDIT_HOMEWORK);
|
||||||
|
await contest.del(domainId, tid, document.TYPE_HOMEWORK);
|
||||||
|
this.response.redirect = this.url('homework_main');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class HomeworkDetailProblemHandler extends HomeworkHandler {
|
class HomeworkDetailProblemHandler extends HomeworkHandler {
|
||||||
|
|||||||
@@ -1,8 +1,34 @@
|
|||||||
import { NamedPage } from 'vj/misc/Page';
|
import { NamedPage } from 'vj/misc/Page';
|
||||||
|
import { ConfirmDialog } from 'vj/components/dialog';
|
||||||
import ProblemSelectAutoComplete from 'vj/components/autocomplete/ProblemSelectAutoComplete';
|
import ProblemSelectAutoComplete from 'vj/components/autocomplete/ProblemSelectAutoComplete';
|
||||||
|
import tpl from 'vj/utils/tpl';
|
||||||
|
import i18n from 'vj/utils/i18n';
|
||||||
|
import request from 'vj/utils/request';
|
||||||
|
|
||||||
const page = new NamedPage(['contest_edit', 'contest_create'], () => {
|
const page = new NamedPage(['contest_edit', 'contest_create', 'homework_create', 'homework_edit'], (pagename) => {
|
||||||
ProblemSelectAutoComplete.getOrConstruct($('[name="pids"]'), { multi: true });
|
ProblemSelectAutoComplete.getOrConstruct($('[name="pids"]'), { multi: true });
|
||||||
|
if (pagename.endsWith('edit')) {
|
||||||
|
let confirmed = false;
|
||||||
|
$(document).on('click', '[name="operation"]', (ev) => {
|
||||||
|
ev.preventDefault();
|
||||||
|
if (confirmed) {
|
||||||
|
return request.post('.', { operation: 'delete' }).then((res) => {
|
||||||
|
window.location.href = res.url;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const message = `Confirm deleting this ${pagename.split('_')[0]}? Its status will be deleted as well.`;
|
||||||
|
return new ConfirmDialog({
|
||||||
|
$body: tpl`
|
||||||
|
<div class="typo">
|
||||||
|
<p>${i18n(message)}</p>
|
||||||
|
</div>`,
|
||||||
|
}).open().then((action) => {
|
||||||
|
if (action !== 'yes') return;
|
||||||
|
confirmed = true;
|
||||||
|
ev.target.click();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export default page;
|
export default page;
|
||||||
@@ -79,6 +79,11 @@
|
|||||||
<button type="submit" class="rounded primary button">
|
<button type="submit" class="rounded primary button">
|
||||||
{{ _('Update') }}
|
{{ _('Update') }}
|
||||||
</button>
|
</button>
|
||||||
|
{% if tdoc.owner == handler.user._id or handler.user.hasPerm(perm.PERM_EDIT_CONTEST) %}
|
||||||
|
<button name="operation" value="delete" type="submit" class="rounded button">
|
||||||
|
{{ _('Delete') }}
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<button type="submit" class="rounded primary button">
|
<button type="submit" class="rounded primary button">
|
||||||
{{ _('Create') }}
|
{{ _('Create') }}
|
||||||
|
|||||||
@@ -85,6 +85,11 @@
|
|||||||
<button type="submit" class="rounded primary button">
|
<button type="submit" class="rounded primary button">
|
||||||
{{ _('Update') }}
|
{{ _('Update') }}
|
||||||
</button>
|
</button>
|
||||||
|
{% if tdoc.owner == handler.user._id or handler.user.hasPerm(perm.PERM_EDIT_HOMEWORK) %}
|
||||||
|
<button name="operation" value="delete" type="submit" class="rounded button">
|
||||||
|
{{ _('Delete') }}
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<button type="submit" class="rounded primary button">
|
<button type="submit" class="rounded primary button">
|
||||||
{{ _('Create') }}
|
{{ _('Create') }}
|
||||||
|
|||||||
Reference in new issue
Block a user