diff --git a/packages/hydrooj/src/handler/user.ts b/packages/hydrooj/src/handler/user.ts index b71c2f5c2..9bc09a8dd 100644 --- a/packages/hydrooj/src/handler/user.ts +++ b/packages/hydrooj/src/handler/user.ts @@ -12,6 +12,7 @@ import { sendMail } from '../lib/mail'; import { isEmail, isPassword } from '../lib/validator'; import BlackListModel from '../model/blacklist'; import { PERM, PRIV, STATUS } from '../model/builtin'; +import * as ContestModel from '../model/contest'; import domain from '../model/domain'; import oauth from '../model/oauth'; import * as oplog from '../model/oplog'; @@ -356,9 +357,12 @@ class UserDetailHandler extends Handler { } } const tags = Object.entries(acInfo).sort((a, b) => b[1] - a[1]).slice(0, 20); + const tsdocs = await ContestModel.getMultiStatus(domainId, { uid: this.user._id, attend: { $exists: true } }).sort({ _id: 1 }).toArray(); + const tdocs = await ContestModel.getMulti(domainId, { docId: { $in: tsdocs.map((i) => i.docId) } }) + .project({ docId: 1, title: 1, rule: 1 }).toArray(); this.response.template = 'user_detail.html'; this.response.body = { - isSelfProfile, udoc, sdoc, pdocs, tags, + isSelfProfile, udoc, sdoc, pdocs, tags, tdocs, }; if (this.user.hasPerm(PERM.PERM_VIEW_PROBLEM_SOLUTION)) { const psdocs = await SolutionModel.getByUser(domainId, uid).limit(10).toArray(); diff --git a/packages/ui-default/locales/zh.yaml b/packages/ui-default/locales/zh.yaml index be4555685..f9081d180 100644 --- a/packages/ui-default/locales/zh.yaml +++ b/packages/ui-default/locales/zh.yaml @@ -83,6 +83,7 @@ API: API Argument {0} is invalid.: 非法的参数 {0} 。 Arguments: 参数 Assign: 分配给 +Assignment: 作业 At least 4 characters: 至少 4 个字符 Attend Contest: 参加比赛 Attend contests: 参加比赛 diff --git a/packages/ui-default/templates/partials/user_detail/activity.html b/packages/ui-default/templates/partials/user_detail/activity.html new file mode 100644 index 000000000..c866a9cfd --- /dev/null +++ b/packages/ui-default/templates/partials/user_detail/activity.html @@ -0,0 +1,18 @@ +