定期的程式碼彙總分析和整理是必要的。
個人皮膚裡,透過的題目,直接連結到對應的AC記錄。用處就是可以按人彙總,便於學生自己整理,以及老師分析學生。
許可權:看不了別人程式碼的人,依然看不了別人程式碼。
效果
修改後端
進入 user.ts
檔案 435 行左右:
cd /usr/local/share/.config/yarn/global/node_modules/hydrooj/src/handler
vi user.ts +435
在class UserDetailHandler
類中,this.response.body
和 this.response.template = 'user_detail.html';
中間加入如下程式碼,並在 this.response.body
中加入 psdict,
。
const psdict = {};
if (this.user.hasPriv(PRIV.PRIV_USER_PROFILE)) {
const domainIds = Array.from(new Set(pdocs.map((i) => i.domainId)));
await Promise.all(
domainIds.map((did) =>
problem.getListStatus(
did, uid,
pdocs.filter((i) => i.domainId === did).map((i) => i.docId),
).then((res) => Object.assign(psdict, res))),
);
}
this.response.body = {
isSelfProfile, udoc, sdoc, pdocs, tags, tdocs, psdict,
};
修改前端
在前端外掛的 templates
中,從原始碼中複製一個user_detail.html
,114 行左右。
cd ~/.hydro/addons/addon/templates
cp /usr/local/share/.config/yarn/global/node_modules/@hydrooj/ui-default/templates/user_detail.html user_detail.html
vi user_detail.html +114
主要修改內容:在遍歷 pdocs
過程中,插入 ac 程式碼連結,參考題庫頁面的實現進行修改。
{% for pdoc in pdocs %}
{% set psdoc = psdict[pdoc.domainId + '#' + pdoc.docId] %}
<li>{{ problem.render_problem_title(pdoc, show_tags=false, small=true) }}
{% macro render_status_td(rdoc, rid_key='_id', class='', allDomain=false, short=false) %}
<a
href="{{ url('record_detail', rid=rdoc[rid_key], domainId=rdoc.domainId) if allDomain else url('record_detail', rid=rdoc[rid_key]) }}"
class="record-status--text {{ model.builtin.STATUS_CODES[rdoc.status] }}"
>
{% if typeof(rdoc['score']) == 'number' %}
<span style="color: {{ utils.status.getScoreColor(rdoc.score|default(0)) }}">code</span>
{% endif %}
</a>
{% if rdoc.status == STATUS.STATUS_JUDGING %}
<div class="col--status__progress" style="width: {{ rdoc['progress']|default(50)|int }}%"></div>
{% endif %}
{% endmacro %}
{% if psdoc['rid'] %}
({{ render_status_td(psdoc, rid_key='rid', class="edit-mode-hide", allDomain=pdoc.domainId!==handler.args.domainId) }})
{% else %}
()
{% endif %}
</li>
{% endfor %}