定期的代码汇总分析和整理是必要的。
个人面板里,通过的题目,直接链接到对应的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 %}