update docs and add training sync api

This commit is contained in:
Himit_ZH 2021-12-23 22:28:56 +08:00
parent 086922c743
commit c8cb6219a7
181 changed files with 28842 additions and 182 deletions

25
docs/.gitignore vendored
View File

@ -1,24 +1,3 @@
.DS_Store
yarn-error.log
node_modules
/dist
/docs/.vuepress/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
.vuepress/dist

View File

@ -1,3 +0,0 @@
> 这是vuepress生成的docs文件夹负责将markdown文件转化为html
>
> 主要内容是HOJ的文档介绍

View File

@ -1,22 +1,48 @@
module.exports = {
title: 'HOJ 文档',
description: 'HOJ 的开发与使用文档',
const path = require('path');
const { config } = require("vuepress-theme-hope");
module.exports = context => config({
title: 'HOJ',
head: [
['link', { rel: 'icon', href: '/img/favicon.ico' }],
['link', { rel: 'icon', href: `/logo.png` }],
['meta', { name: 'theme-color', content: '#ffeded' }],
],
base: '/docs/',
markdown: {
lineNumbers: true // 代码块显示行号
},
plugins: [
'@vuepress/back-to-top',
'@vuepress/active-header-links',
'vuepress-plugin-nprogress',
'vuepress-plugin-smooth-scroll',
'vuepress-plugin-zooming'
],
base:'/docs/',
themeConfig: {
sidebarDepth: 5,
logo: '/favicon.ico',
nav: [
{ text: 'Demo', link: 'https://hdoi.cn/' },
{ text: 'Gitee', link: 'https://gitee.com/himitzh0730/hoj' },
{ text: 'Github', link: 'https://github.com/HimitZH/HOJ' },
{ text: '作者首页', link: 'https://blog.csdn.net/weixin_43853097' },
],
pwa: {
cacheHTML: false,
},
sidebarDepth: 2,
lastUpdated: '上次更新',
hostname: 'https://hcode.top',
repo: 'HimitZH/HOJ',
pageInfo: false,
copyright: false,
mdEnhance: {
align: true,
sup: true,
sub: true,
footnote: true,
tex: true,
},
docsRepo: 'HimitZH/HOJ/docs',
docsBranch: 'docs',
editLinks: true,
editLinkText: '文档有锅?点我修复',
displayAllHeaders: true,
smoothScroll: true,
sidebar: [
{
title: '开始介绍',
@ -55,7 +81,6 @@ module.exports = {
title: '开发文档',
collapsable: true,
children: [
'develop/',
'develop/db',
'develop/sandbox'
]
@ -64,7 +89,6 @@ module.exports = {
title: '使用文档',
collapsable: true,
children: [
'use/',
'use/testcase',
'use/contest',
'use/import-problem',
@ -78,7 +102,6 @@ module.exports = {
]
},
],
},
}
evergreen: !!context.isProd,
})

54
docs/docs/.vuepress/dist/404.html vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
<svg width="25" height="25" xmlns="http://www.w3.org/2000/svg"><g fill="none"><path d="M12.5 1C6.16 1 1 6.159 1 12.5S6.16 24 12.5 24 24 18.841 24 12.5 18.84 1 12.5 1z" stroke="#444" stroke-width="2" fill="#f55"/><path fill="#444" d="M7 11h11v3H7z"/></g></svg>

After

Width:  |  Height:  |  Size: 259 B

View File

@ -0,0 +1 @@
<svg width="25" height="25" xmlns="http://www.w3.org/2000/svg"><g fill="none"><path d="M12.5 1C6.16 1 1 6.159 1 12.5S6.16 24 12.5 24 24 18.841 24 12.5 18.84 1 12.5 1z" stroke="#FFF" stroke-width="2" fill="#f55"/><path fill="#FFF" d="M7 11h11v3H7z"/></g></svg>

After

Width:  |  Height:  |  Size: 259 B

View File

@ -0,0 +1 @@
<svg width="264" height="88" viewBox="0 0 264 88" xmlns="http://www.w3.org/2000/svg"><title>default-skin 2</title><g fill="none" fill-rule="evenodd"><g><path d="M67.002 59.5v3.768c-6.307.84-9.184 5.75-10.002 9.732 2.22-2.83 5.564-5.098 10.002-5.098V71.5L73 65.585 67.002 59.5z" id="Shape" fill="#fff"/><g fill="#fff"><path d="M13 29v-5h2v3h3v2h-5zM13 15h5v2h-3v3h-2v-5zM31 15v5h-2v-3h-3v-2h5zM31 29h-5v-2h3v-3h2v5z" id="Shape"/></g><g fill="#fff"><path d="M62 24v5h-2v-3h-3v-2h5zM62 20h-5v-2h3v-3h2v5zM70 20v-5h2v3h3v2h-5zM70 24h5v2h-3v3h-2v-5z"/></g><path d="M20.586 66l-5.656-5.656 1.414-1.414L22 64.586l5.656-5.656 1.414 1.414L23.414 66l5.656 5.656-1.414 1.414L22 67.414l-5.656 5.656-1.414-1.414L20.586 66z" fill="#fff"/><path d="M111.785 65.03L110 63.5l3-3.5h-10v-2h10l-3-3.5 1.785-1.468L117 59l-5.215 6.03z" fill="#fff"/><path d="M152.215 65.03L154 63.5l-3-3.5h10v-2h-10l3-3.5-1.785-1.468L147 59l5.215 6.03z" fill="#fff"/><g><path id="Rectangle-11" fill="#fff" d="M160.957 28.543l-3.25-3.25-1.413 1.414 3.25 3.25z"/><path d="M152.5 27c3.038 0 5.5-2.462 5.5-5.5s-2.462-5.5-5.5-5.5-5.5 2.462-5.5 5.5 2.462 5.5 5.5 5.5z" id="Oval-1" stroke="#fff" stroke-width="1.5"/><path fill="#fff" d="M150 21h5v1h-5z"/></g><g><path d="M116.957 28.543l-1.414 1.414-3.25-3.25 1.414-1.414 3.25 3.25z" fill="#fff"/><path d="M108.5 27c3.038 0 5.5-2.462 5.5-5.5s-2.462-5.5-5.5-5.5-5.5 2.462-5.5 5.5 2.462 5.5 5.5 5.5z" stroke="#fff" stroke-width="1.5"/><path fill="#fff" d="M106 21h5v1h-5z"/><path fill="#fff" d="M109.043 19.008l-.085 5-1-.017.085-5z"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 KiB

View File

@ -0,0 +1 @@
<svg width="25" height="25" viewBox="0 0 37 35" xmlns="http://www.w3.org/2000/svg"><g transform="translate(.28)" fill="none" fill-rule="evenodd"><circle stroke="#444" stroke-width="2" fill="#007BFF" cx="18.22" cy="17.5" r="16.5"/><path d="M17.122 25H16.08a.248.248 0 0 0-.046-.035c-.66-.301-.976-.906-.8-1.611.472-1.946.96-3.888 1.44-5.832a6.08 6.08 0 0 0 .142-.818.19.19 0 0 0-.254-.227 1.54 1.54 0 0 0-.32.11c-.237.1-.468.216-.706.307a.402.402 0 0 1-.536-.102v-.38c.161-.225.344-.434.546-.625a67.265 67.265 0 0 1 2.18-1.633c.159-.104.328-.19.506-.255.232-.1.49-.128.738-.077.926.188 1.406.93 1.18 1.844-.457 1.873-.917 3.746-1.379 5.619a7.52 7.52 0 0 0-.16.926.18.18 0 0 0 .263.205c.174-.053.339-.138.508-.206.205-.09.418-.172.624-.25a.3.3 0 0 1 .343.1.32.32 0 0 1 .033.367 1.38 1.38 0 0 1-.196.303 5.317 5.317 0 0 1-.556.536c-.79.636-1.6 1.262-2.508 1.734zm1.347-12.06a1.97 1.97 0 1 1 .003-3.938 1.97 1.97 0 0 1-.003 3.939z" fill="#444" fill-rule="nonzero"/></g></svg>

After

Width:  |  Height:  |  Size: 971 B

View File

@ -0,0 +1 @@
<svg width="25" height="25" viewBox="0 0 37 35" xmlns="http://www.w3.org/2000/svg"><g transform="translate(.28)" fill="none" fill-rule="evenodd"><circle stroke="#FFF" stroke-width="2" fill="#007BFF" cx="18.22" cy="17.5" r="16.5"/><path d="M17.122 25H16.08a.248.248 0 0 0-.046-.035c-.66-.301-.976-.906-.8-1.611.472-1.946.96-3.888 1.44-5.832a6.08 6.08 0 0 0 .142-.818.19.19 0 0 0-.254-.227 1.54 1.54 0 0 0-.32.11c-.237.1-.468.216-.706.307a.402.402 0 0 1-.536-.102v-.38c.161-.225.344-.434.546-.625a67.265 67.265 0 0 1 2.18-1.633c.159-.104.328-.19.506-.255.232-.1.49-.128.738-.077.926.188 1.406.93 1.18 1.844-.457 1.873-.917 3.746-1.379 5.619a7.52 7.52 0 0 0-.16.926.18.18 0 0 0 .263.205c.174-.053.339-.138.508-.206.205-.09.418-.172.624-.25a.3.3 0 0 1 .343.1.32.32 0 0 1 .033.367 1.38 1.38 0 0 1-.196.303 5.317 5.317 0 0 1-.556.536c-.79.636-1.6 1.262-2.508 1.734zm1.347-12.06a1.97 1.97 0 1 1 .003-3.938 1.97 1.97 0 0 1-.003 3.939z" fill="#FFF" fill-rule="nonzero"/></g></svg>

After

Width:  |  Height:  |  Size: 971 B

View File

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="13"><g stroke-width="2" stroke="#aaa" fill="none"><path d="M11.29 11.71l-4-4"/><circle cx="5" cy="5" r="4"/></g></svg>

After

Width:  |  Height:  |  Size: 216 B

View File

@ -0,0 +1 @@
<svg width="25" height="25" viewBox="0 0 27 27" xmlns="http://www.w3.org/2000/svg"><g transform="translate(1.862 1.862)" fill="none"><circle stroke="#444" stroke-width="1.724" fill="#42B983" cx="11.638" cy="11.638" r="11.638"/><path d="M14.978 6.27A5.006 5.006 0 0 0 6.67 9.468a4.901 4.901 0 0 0 1.773 4.362c.323.258.514.647.522 1.06v1.06a2.685 2.685 0 0 0 5.37 0v-1.008c.002-.398.173-.777.47-1.042a5.023 5.023 0 0 0 .173-7.63zm-3.337 10.967a1.304 1.304 0 0 1-1.286-1.287v-.278h2.572v.261c0 .713-.573 1.294-1.286 1.304zm2.26-4.415a2.81 2.81 0 0 0-.887 1.46h-2.746a2.868 2.868 0 0 0-.938-1.53h-.018a3.476 3.476 0 0 1-1.269-3.145 3.615 3.615 0 0 1 7.196.4 3.65 3.65 0 0 1-1.338 2.815z" fill="#444"/></g></svg>

After

Width:  |  Height:  |  Size: 707 B

View File

@ -0,0 +1 @@
<svg width="25" height="25" viewBox="0 0 27 27" xmlns="http://www.w3.org/2000/svg"><g transform="translate(1.862 1.862)" fill="none"><circle stroke="#FFF" stroke-width="1.724" fill="#42B983" cx="11.638" cy="11.638" r="11.638"/><path d="M14.978 6.27A5.006 5.006 0 0 0 6.67 9.468a4.901 4.901 0 0 0 1.773 4.362c.323.258.514.647.522 1.06v1.06a2.685 2.685 0 0 0 5.37 0v-1.008c.002-.398.173-.777.47-1.042a5.023 5.023 0 0 0 .173-7.63zm-3.337 10.967a1.304 1.304 0 0 1-1.286-1.287v-.278h2.572v.261c0 .713-.573 1.294-1.286 1.304zm2.26-4.415a2.81 2.81 0 0 0-.887 1.46h-2.746a2.868 2.868 0 0 0-.938-1.53h-.018a3.476 3.476 0 0 1-1.269-3.145 3.615 3.615 0 0 1 7.196.4 3.65 3.65 0 0 1-1.338 2.815z" fill="#FFF"/></g></svg>

After

Width:  |  Height:  |  Size: 707 B

View File

@ -0,0 +1 @@
<svg width="25" height="25" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><g transform="translate(1 1)" fill="none"><circle stroke="#444" stroke-width="2" fill="#f4cd00" cx="15" cy="15" r="15"/><path d="M14.281 17.156a2.89 2.89 0 0 1 .906-.125c.313 0 .657.063.938.125l.938-7.937v-.25a1.914 1.914 0 0 0-1.907-1.906c-.531 0-1.062.25-1.437.656a1.93 1.93 0 0 0-.469 1.5l1.031 7.937zm.875 1.469a1.947 1.947 0 0 0-1.937 1.938c0 1.062.875 1.937 1.937 1.937a1.947 1.947 0 0 0 1.938-1.938 1.908 1.908 0 0 0-1.938-1.937z" fill="#444"/></g></svg>

After

Width:  |  Height:  |  Size: 544 B

View File

@ -0,0 +1 @@
<svg width="25" height="25" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><g transform="translate(1 1)" fill="none"><circle stroke="#FFF" stroke-width="2" fill="#f4cd00" cx="15" cy="15" r="15"/><path d="M14.281 17.156a2.89 2.89 0 0 1 .906-.125c.313 0 .657.063.938.125l.938-7.937v-.25a1.914 1.914 0 0 0-1.907-1.906c-.531 0-1.062.25-1.437.656a1.93 1.93 0 0 0-.469 1.5l1.031 7.937zm.875 1.469a1.947 1.947 0 0 0-1.937 1.938c0 1.062.875 1.937 1.937 1.937a1.947 1.947 0 0 0 1.938-1.938 1.908 1.908 0 0 0-1.938-1.937z" fill="#FFF"/></g></svg>

After

Width:  |  Height:  |  Size: 544 B

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{477:function(n,w,o){}}]);

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{478:function(n,w,o){}}]);

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{479:function(n,w,o){}}]);

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{480:function(n,w,o){}}]);

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{476:function(n,e,t){"use strict";t.r(e),t.d(e,"register",(function(){return o})),t.d(e,"unregister",(function(){return c}));var r;function o(n,e){void 0===e&&(e={});var t=e.registrationOptions;void 0===t&&(t={}),delete e.registrationOptions;var o=function(n){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];e&&e[n]&&e[n].apply(e,t)};"serviceWorker"in navigator&&r.then((function(){Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/))?(!function(n,e,t){fetch(n).then((function(r){404===r.status?(e("error",new Error("Service worker not found at "+n)),c()):-1===r.headers.get("content-type").indexOf("javascript")?(e("error",new Error("Expected "+n+" to have javascript content-type, but received "+r.headers.get("content-type"))),c()):a(n,e,t)})).catch((function(n){return i(e,n)}))}(n,o,t),navigator.serviceWorker.ready.then((function(n){o("ready",n)})).catch((function(n){return i(o,n)}))):(a(n,o,t),navigator.serviceWorker.ready.then((function(n){o("ready",n)})).catch((function(n){return i(o,n)})))}))}function i(n,e){navigator.onLine||n("offline"),n("error",e)}function a(n,e,t){navigator.serviceWorker.register(n,t).then((function(n){e("registered",n),n.waiting?e("updated",n):n.onupdatefound=function(){e("updatefound",n);var t=n.installing;t.onstatechange=function(){"installed"===t.state&&(navigator.serviceWorker.controller?e("updated",n):e("cached",n))}}})).catch((function(n){return i(e,n)}))}function c(){"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(n){n.unregister()})).catch((function(n){return i(emit,n)}))}"undefined"!=typeof window&&(r="undefined"!=typeof Promise?new Promise((function(n){return window.addEventListener("load",n)})):{then:function(n){return window.addEventListener("load",n)}})}}]);

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[4,5],{217:function(t,e){},218:function(t,e){},226:function(t,e){},228:function(t,e){},239:function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var s=n(214),i=n(237),a=n(213);const o=i.a.extend({data:()=>({encryptPasswordConfig:{}}),computed:{pathEncryptMatchKeys(){return Object(a.a)(this.encryptOptions,this.$route.path)},isPathEncrypted(){if(0===this.pathEncryptMatchKeys.length)return!1;const{config:t}=this.encryptOptions;return this.pathEncryptMatchKeys.every(e=>{const n=t[e],i="string"==typeof n?[n]:n;return!this.encryptPasswordConfig[e]||i.every(t=>!Object(s.compareSync)(this.encryptPasswordConfig[e],t))})}},mounted(){const t=localStorage.getItem("encryptConfig");t&&(this.encryptPasswordConfig=JSON.parse(t))},methods:{checkPathPassword(t){const{config:e}=this.$themeConfig.encrypt;for(const n of this.pathEncryptMatchKeys){const i=e[n];if(("string"==typeof i?[i]:i).filter(e=>Object(s.compareSync)(t,e))){this.$set(this.encryptPasswordConfig,n,t),localStorage.setItem("encryptConfig",JSON.stringify(this.encryptPasswordConfig));break}}}}})},322:function(t,e,n){},323:function(t,e,n){},324:function(t,e,n){},463:function(t,e,n){"use strict";n(322)},464:function(t,e,n){"use strict";n(323)},465:function(t,e,n){"use strict";n(324)},484:function(t,e,n){"use strict";n.r(e);var s=n(207),i=n(0),a=n(241),o=n(186),r=n(198),c=i.a.extend({name:"ArticleType",computed:{types(){const t=this.$themeLocaleConfig.blog||Object(o.b)().blog;return[{text:t.allText,path:"/article/"},{text:t.star,path:"/star/"},{text:t.slides,path:"/slide/"},{text:t.encrypt,path:"/encrypt/"}]}},methods:{navigate(t){Object(r.a)(t,this.$router,this.$route)}}}),l=(n(463),n(1)),p=Object(l.a)(c,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("ul",{staticClass:"article-type-wrapper"},t._l(t.types,(function(e){return n("li",{key:e.text,staticClass:"article-type",class:{active:e.path===t.$route.path},attrs:{role:"navigation"},on:{click:function(n){return t.navigate(e.path)}}},[n("span",[t._v(t._s(e.text))])])})),0)}),[],!1,null,null,null).exports,h=n(337),u=n(189),y=n(338),f=n(339),g=n(340),d=i.a.extend({name:"BlogPage",components:{ArticleList:a.a,ArticleType:p,BlogInfo:s.a,CategoryList:h.a,MyTransition:u.a,TagList:y.a,Timeline:f.a,TimelineList:g.a},computed:{showArticles(){const{path:t}=this.$route;return!t.includes("/timeline")},componentName(){const t=this.$route.path.split("/")[1];return["category","tag"].includes(t)?t+"List":"timeline"===t?t:"articleType"}}}),m=(n(464),Object(l.a)(d,(function(){var t=this.$createElement,e=this._self._c||t;return e("main",{staticClass:"blog-page"},[e("MyTransition",[this.componentName?e(this.componentName,{tag:"component"}):this._e()],1),this._v(" "),e("MyTransition",{attrs:{delay:.24}},[this.showArticles?e("ArticleList",{key:this.$route.path}):this._e()],1)],1)}),[],!1,null,null,null).exports),w=n(240),b=n(244),P=n(239),v=n(242),C=b.a.extend(P.a).extend({components:{BlogInfo:s.a,BlogPage:m,Common:w.a,MyTransition:u.a,Password:v.a}}),x=(n(465),Object(l.a)(C,(function(){var t=this.$createElement,e=this._self._c||t;return e("Common",{attrs:{sidebar:!1},scopedSlots:this._u([{key:"sidebar-bottom",fn:function(){return[e("BlogInfo")]},proxy:!0}])},[this._v(" "),this.isGlobalEncrypted?e("Password",{on:{"password-verify":this.checkGlobalPassword}}):this.isPathEncrypted?e("Password",{on:{"password-verify":this.checkPathPassword}}):e("main",{staticClass:"page blog"},[e("div",{staticClass:"blog-page-wrapper"},[e("BlogPage"),this._v(" "),e("MyTransition",{attrs:{delay:.16}},[e("BlogInfo")],1)],1)])],1)}),[],!1,null,null,null));e.default=x.exports}}]);

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{217:function(n,o){},218:function(n,o){},226:function(n,o){},228:function(n,o){}}]);

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{333:function(t,e,s){},475:function(t,e,s){"use strict";s(333)},486:function(t,e,s){"use strict";s.r(e);var o=s(0),i=s(290),n=s(335),a=o.a.extend({name:"Slide",components:{ThemeColor:n.a},directives:{"click-outside":i.a},data:()=>({showMenu:!1}),destroyed(){document.querySelector("html").classList.remove("reveal-full-page"),document.body.classList.remove("reveal-viewport"),document.body.style.removeProperty("--slide-width"),document.body.style.removeProperty("--slide-height")},methods:{toggle(){this.showMenu=!this.showMenu},back(){window.history.go(-1),this.showMenu=!1},home(){this.$router.push("/"),this.showMenu=!1},clickOutside(){this.showMenu=!1}}}),c=(s(475),s(1)),l=Object(c.a)(a,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"presentation"},[s("ThemeColor",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}]}),t._v(" "),s("Content",{key:t.$route.path,staticClass:"presentation-content"}),t._v(" "),s("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.clickOutside,expression:"clickOutside"}],staticClass:"menu",class:{active:t.showMenu}},[s("button",{staticClass:"menu-button",on:{click:t.toggle}},[s("span",{staticClass:"icon"})]),t._v(" "),s("button",{staticClass:"back-button",on:{click:t.back}},[s("svg",{attrs:{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"}},[s("path",{attrs:{d:"M1014.749 449.156v125.688H260.626l345.64 345.64-89.239 89.237L19.307 512l497.72-497.721 89.238 89.238-345.64 345.64h754.124z"}})])]),t._v(" "),s("button",{staticClass:"home-button",on:{click:t.home}},[s("svg",{attrs:{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"}},[s("path",{attrs:{d:"M780.106 420.978L506.994 147.866 233.882 420.978h.045v455.11H780.06v-455.11h.046zm90.977 90.976V876.09a91.022 91.022 0 01-91.023 91.022H233.927a91.022 91.022 0 01-91.022-91.022V511.954l-67.22 67.175-64.307-64.307 431.309-431.31c35.498-35.498 93.115-35.498 128.614 0l431.309 431.31-64.307 64.307L871.083 512z"}})])])])],1)}),[],!1,null,null,null);e.default=l.exports}}]);

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{487:function(r,t,e){"use strict";e.r(t);var s=e(1),n=Object(s.a)({},(function(){var r=this,t=r.$createElement,e=r._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":r.$parent.slotKey}},[e("p",[e("a",{attrs:{href:"http://openjdk.java.net/",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://img.shields.io/badge/Java-1.8-informational",alt:"Java"}}),e("OutboundLink")],1),r._v(" "),e("a",{attrs:{href:"https://spring.io/projects/spring-boot",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://img.shields.io/badge/Spring Boot-2.2.6.RELEASE-success",alt:"Spring Boot"}}),e("OutboundLink")],1),r._v(" "),e("a",{attrs:{href:"https://spring.io/projects/spring-cloud-alibaba",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://img.shields.io/badge/Spring Cloud Alibaba-2.2.1.RELEASE-success",alt:"SpringCloud Alibaba"}}),e("OutboundLink")],1),r._v(" "),e("a",{attrs:{href:"https://www.mysql.com/",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://img.shields.io/badge/MySQL-8.0.19-blue",alt:"MySQL"}}),e("OutboundLink")],1),r._v(" "),e("a",{attrs:{href:"https://redis.io/",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://img.shields.io/badge/Redis-5.0.9-red",alt:"Redis"}}),e("OutboundLink")],1),r._v(" "),e("a",{attrs:{href:"https://github.com/alibaba/nacos",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://img.shields.io/badge/Nacos-1.4.2-%23267DF7",alt:"Nacos"}}),e("OutboundLink")],1),r._v(" "),e("a",{attrs:{href:"https://cn.vuejs.org/",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://img.shields.io/badge/Vue-2.6.11-success",alt:"Vue"}}),e("OutboundLink")],1),r._v(" "),e("a",{attrs:{href:"https://qm.qq.com/cgi-bin/qm/qr?k=WWGBZ5gfDiBZOcpNvM8xnZTfUq7BT4Rs&jump_from=webapi",target:"_blank",rel:"noopener noreferrer"}},[e("img",{attrs:{src:"https://img.shields.io/badge/QQ Group-598587305-blue",alt:"QQ Group 598587305"}}),e("OutboundLink")],1)]),r._v(" "),e("p",[r._v("Hcode Online Judge (HOJ) : 基于前后端分离分布式架构的在线测评平台hoj前端使用vue后端主要使用springbootredismysqlnacos等技术"),e("strong",[r._v("支持HDU、POJ、Codeforces包括GYM的vjudge判题同时适配手机端、电脑端浏览拥有讨论区与站内消息系统还有完善的比赛功能打星队伍、关注队伍、外榜。")])]),r._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/HimitZH/HOJ",target:"_blank",rel:"noopener noreferrer"}},[r._v("Github 仓库"),e("OutboundLink")],1),r._v(" "),e("a",{attrs:{href:"https://gitee.com/himitzh0730/hoj",target:"_blank",rel:"noopener noreferrer"}},[r._v("Gitee 仓库"),e("OutboundLink")],1)]),r._v(" "),e("p",[r._v("欢迎star收藏本项目对开发者的支持谢谢"),e("br"),r._v("\n有任何部署问题或项目bug请发issue或者加QQ群"),e("br"),r._v(" "),e("strong",[r._v("如果要对本项目进行商业化请在页面底部的Powered by指向HOJ本仓库地址")])]),r._v(" "),e("p",[e("a",{attrs:{href:"https://hdoi.cn/",target:"_blank",rel:"noopener noreferrer"}},[r._v("HDOI Onlie Judge"),e("OutboundLink")],1)]),r._v(" "),e("h2",{attrs:{id:"联系我们"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#联系我们"}},[r._v("#")]),r._v(" 联系我们")]),r._v(" "),e("p",[r._v("QQ: "),e("a",{attrs:{href:"https://wpa.qq.com/msgrd?v=3&uin=372347736&site=qq&menu=yes",target:"_blank",rel:"noopener noreferrer"}},[r._v("372347736"),e("OutboundLink")],1),e("br"),r._v("\nHOJ交流群: 598587305")])])}),[],!1,null,null,null);t.default=n.exports}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{489:function(s,a,t){"use strict";t.r(a);var e=t(1),r=Object(e.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"单体部署3-redis部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#单体部署3-redis部署"}},[s._v("#")]),s._v(" 单体部署③——Redis部署")]),s._v(" "),t("h2",{attrs:{id:"docker部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#docker部署"}},[s._v("#")]),s._v(" docker部署")]),s._v(" "),t("div",{staticClass:"language-shell line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[s._v("docker run -d --name redis -p "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("6379")]),s._v(":6379 \n-v /hoj/data/redis/data:/data "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--restart"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"always"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\nredis "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n--requirepass "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"redis_password"')]),s._v(" \n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br")])]),t("h2",{attrs:{id:"常规部署"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#常规部署"}},[s._v("#")]),s._v(" 常规部署")]),s._v(" "),t("p",[s._v("请自行百度。。")])])}),[],!1,null,null,null);a.default=r.exports}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{503:function(t,s,a){"use strict";a.r(s);var e=a(1),l=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"导入用户"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#导入用户"}},[t._v("#")]),t._v(" 导入用户")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/338bf9db257844a1b32a4ff54c6528f6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16",alt:"在这里插入图片描述"}})]),t._v(" "),a("p",[a("strong",[t._v("要求如下:")])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Tips")]),t._v(" "),a("ol",[a("li",[t._v("用户数据导入仅支持csv格式的用户数据。")]),t._v(" "),a("li",[t._v("共七列数据:用户名和密码不能为空,邮箱、真实姓名、性别、昵称和学校可选填,否则该行数据可能导入失败。")]),t._v(" "),a("li",[t._v('第一行不必写(“用户名”,“密码”,“邮箱”,"真实姓名",“性别”,“昵称”,“学校”)这7个列名')]),t._v(" "),a("li",[t._v("性别为男请使用“male”或“0”女请使用“female”或“1”不填默认为“secrecy”。")]),t._v(" "),a("li",[t._v("请导入保存为UTF-8编码的文件否则中文可能会乱码。")])])])])}),[],!1,null,null,null);s.default=l.exports}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{488:function(s,a,t){"use strict";t.r(a);var n=t(1),e=Object(n.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"测试用例"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#测试用例"}},[s._v("#")]),s._v(" 测试用例")]),s._v(" "),t("p",[t("img",{attrs:{src:"https://img-blog.csdnimg.cn/ad4851c069674b30af08f187363906c4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16",alt:"在这里插入图片描述"}})]),s._v(" "),t("p",[t("strong",[s._v("进入后台添加题目上传题目测试用例数据可以选择手动输入、Zip文件上传两种方式")])]),s._v(" "),t("h2",{attrs:{id:"一、手动输入"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#一、手动输入"}},[s._v("#")]),s._v(" 一、手动输入")]),s._v(" "),t("p",[s._v("每次点击"),t("code",[s._v("Add Sampple")]),s._v("就可以手动填入该用例的输入与输出该方式比较适合题目数据简单的同时手动输入的题目数据将记录进数据库下次对该题目进行修改可以直接获取然后进行测试数据的修改同时也会在服务器对应的testcase文件夹生成对应的文件。")]),s._v(" "),t("h2",{attrs:{id:"二、文件上传"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#二、文件上传"}},[s._v("#")]),s._v(" 二、文件上传")]),s._v(" "),t("p",[s._v("对于通题目,测试用例文件包括"),t("code",[s._v("in")]),s._v("、"),t("code",[s._v("out")]),s._v("、"),t("code",[s._v("ans")]),s._v("三种拓展名")]),s._v(" "),t("p",[s._v("例如有两组测试用例,则对于普通题目测试用例的文件名分别为"),t("code",[s._v("1.in, 1.out1.ans, 2.in, 2.out2.ans")]),s._v("其他形式的文件后台均不识别。")]),s._v(" "),t("p",[s._v("压缩时,请将文件都放在压缩包的根目录,而不是包含在某一个文件夹中,比如正确的格式是:")]),s._v(" "),t("div",{staticClass:"language-bash line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(".in\n├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(".out\n├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(".in\n├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(".out\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br")])]),t("div",{staticClass:"language-bash line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(".in\n├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(".ans\n├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(".in\n├── "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(".ans\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br")])]),t("p",[s._v("然后压缩测试用例到一个zip中")]),s._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[s._v("Warning")]),s._v(" "),t("p",[t("strong",[s._v("注意:即使没有输入或者没有输出,也请提供对应的空输入(输出)文件,不要在这些文件外面套多一层文件夹,请直接压缩!!!")])])]),s._v(" "),t("div",{staticClass:"custom-block info"},[t("p",{staticClass:"custom-block-title"},[s._v("Info")]),s._v(" "),t("p",[s._v("建议:尽量合并测试用例到一个文件中,减少测试用例组数,这会一定程度上提高判题性能。")])])])}),[],!1,null,null,null);a.default=e.exports}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{505:function(s,t,a){"use strict";a.r(t);var n=a(1),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"自定义前端"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#自定义前端"}},[s._v("#")]),s._v(" 自定义前端")]),s._v(" "),a("h2",{attrs:{id:"一、完全自定义前端"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#一、完全自定义前端"}},[s._v("#")]),s._v(" 一、完全自定义前端")]),s._v(" "),a("p",[s._v("直接下载"),a("a",{attrs:{href:"https://gitee.com/himitzh0730/hoj/tree/master/hoj-vue",target:"_blank",rel:"noopener noreferrer"}},[s._v("https://gitee.com/himitzh0730/hoj/tree/master/hoj-vue"),a("OutboundLink")],1)]),s._v(" "),a("p",[s._v("修改后,使用"),a("code",[s._v("npm run build")]),s._v("生成一个dist文件夹结构如下")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("dist\n├── index.html\n├── favicon.ico\n└── assets\n ├── css\n │ ├── ....\n ├── fonts\n │ ├── ....\n ├── img\n │ ├── ....\n ├── js\n │ ├── ....\n\n....\n....\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br")])]),a("p",[s._v("将 "),a("code",[s._v("dist")]),s._v(" 文件夹复制到服务器上某个目录下,比如 "),a("code",[s._v("/hoj/www/html/dist")]),s._v(",然后修改 "),a("code",[s._v("docker-compose.yml")]),s._v(",在 "),a("code",[s._v("hoj-frontend")]),s._v(" 模块中的 "),a("code",[s._v("volumes")]),s._v(" 中增加一行 "),a("code",[s._v("- /hoj/www/html/dist:/usr/share/nginx/html")]),s._v(" (冒号前面的请修改为实际的路径),然后 "),a("code",[s._v("docker-compose up -d")]),s._v(" 即可。")]),s._v(" "),a("h2",{attrs:{id:"二、仅修改图标"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#二、仅修改图标"}},[s._v("#")]),s._v(" 二、仅修改图标")]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("Tips")]),s._v(" "),a("p",[s._v("如果仅仅只是修改前台logo、管理后台logo和favicon.ico那么操作如下")])]),s._v(" "),a("p",[s._v("修改 "),a("code",[s._v("docker-compose.yml")]),s._v(",在 "),a("code",[s._v("hoj-frontend")]),s._v(" 模块中的 "),a("code",[s._v("volumes")]),s._v(" 中添加如下:")]),s._v(" "),a("div",{staticClass:"language-yaml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-yaml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./logo.png"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/usr/share/nginx/html/assets/img/logo.a0924d7d.png\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./backstage.png"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/usr/share/nginx/html/assets/img/backstage.8bce8c6e.png\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("-")]),s._v(" ./favicon.ico"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v("/usr/share/nginx/html/favicon.ico\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("p",[a("code",[s._v("logo.png")]),s._v("为前台导航栏左边的logo"),a("code",[s._v("backstage.png")]),s._v("为后台侧边导航栏上方的logo"),a("code",[s._v("favicon.ico")]),s._v("为小图标")]),s._v(" "),a("p",[a("strong",[s._v("图片文件需放在与docker-compose.yml同个目录下或者提供绝对路径也可。")])])])}),[],!1,null,null,null);t.default=e.exports}}]);

View File

@ -0,0 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{509:function(t,s,a){"use strict";a.r(s);var e=a(1),l=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"评论管理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#评论管理"}},[t._v("#")]),t._v(" 评论管理")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/6fcdb9f6895043498cb9d4bbadeb0a5b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASGltaXRfWkg=,size_20,color_FFFFFF,t_70,g_se,x_16",alt:"评论管理"}})]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Tips")]),t._v(" "),a("ul",[a("li",[t._v("后台管理员可以查看所有的讨论帖,并且可以选择是否置顶,是否正常显示,删除,查看等")]),t._v(" "),a("li",[t._v("后台管理员可以查看对应讨论帖的举报内容")])])]),t._v(" "),a("p",[a("img",{attrs:{src:"https://img-blog.csdnimg.cn/20210523221321418.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70",alt:"在这里插入图片描述"}})])])}),[],!1,null,null,null);s.default=l.exports}}]);

Some files were not shown because too many files have changed in this diff Show More