diff --git a/README.md b/README.md index 209881bc..c715a0c3 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

- +

@@ -95,24 +95,24 @@ * 学生考试系统 - - + +
* 小程序考试系统 - - - - + + + + - - - - + + + +
@@ -120,7 +120,7 @@ - - + +
\ No newline at end of file diff --git a/doc/frame/架构图.vsdx b/doc/frame/架构图.vsdx deleted file mode 100644 index bb75d331..00000000 Binary files a/doc/frame/架构图.vsdx and /dev/null differ diff --git a/docs/404.html b/docs/404.html index 6aae2d4b..f770cc3d 100644 --- a/docs/404.html +++ b/docs/404.html @@ -2,11 +2,11 @@ 学之思教程 - - + + -
- +

404

How did we get here?
Take me home
+ diff --git a/docs/assets/css/styles.8ea25984.css b/docs/assets/css/styles.1eba0707.css similarity index 98% rename from docs/assets/css/styles.8ea25984.css rename to docs/assets/css/styles.1eba0707.css index 11d4cc14..5b195a69 100644 --- a/docs/assets/css/styles.8ea25984.css +++ b/docs/assets/css/styles.1eba0707.css @@ -1,8 +1,8 @@ .icon.outbound{position:relative;display:inline-block;color:#aaa;vertical-align:middle;top:-1px} -:root{--c-brand:#3eaf7c;--c-brand-light:#4abf8a;--c-bg:#ffffff;--c-bg-light:#f3f4f5;--c-bg-lighter:#eeeeee;--c-bg-navbar:var(--c-bg);--c-bg-sidebar:var(--c-bg);--c-bg-arrow:#cccccc;--c-text:#2c3e50;--c-text-accent:var(--c-brand);--c-text-light:#3a5169;--c-text-lighter:#4e6e8e;--c-text-lightest:#6a8bad;--c-text-quote:#999999;--c-border:#eaecef;--c-border-dark:#dfe2e5;--c-tip:#42b983;--c-tip-bg:var(--c-bg-light);--c-tip-title:var(--c-text);--c-tip-text:var(--c-text);--c-tip-text-accent:var(--c-text-accent);--c-warning:#e7c000;--c-warning-bg:#fffae3;--c-warning-title:#ad9000;--c-warning-text:#746000;--c-warning-text-accent:var(--c-text);--c-danger:#cc0000;--c-danger-bg:#ffe0e0;--c-danger-title:#990000;--c-danger-text:#660000;--c-danger-text-accent:var(--c-text);--c-details-bg:#eeeeee;--c-badge-tip:var(--c-tip);--c-badge-warning:var(--c-warning);--c-badge-danger:var(--c-danger);--code-bg-color:#282c34;--code-hl-bg-color:rgba(0, 0, 0, 0.66);--code-ln-color:#9e9e9e;--code-ln-wrapper-width:3.5rem;--font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code:Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height:3.6rem;--navbar-padding-v:0.7rem;--navbar-padding-h:1.5rem;--sidebar-width:20rem;--sidebar-width-mobile:calc(var(--sidebar-width) * 0.82);--content-width:740px;--homepage-width:960px}.back-to-top{--back-to-top-color:var(--c-brand);--back-to-top-color-hover:var(--c-brand-light)}.DocSearch{--docsearch-primary-color:var(--c-brand);--docsearch-text-color:var(--c-text);--docsearch-highlight-color:var(--c-brand);--docsearch-muted-color:var(--c-text-quote);--docsearch-container-background:rgba(9, 10, 17, 0.8);--docsearch-modal-background:var(--c-bg-light);--docsearch-searchbox-background:var(--c-bg-lighter);--docsearch-searchbox-focus-background:var(--c-bg);--docsearch-searchbox-shadow:inset 0 0 0 2px var(--c-brand);--docsearch-hit-color:var(--c-text-light);--docsearch-hit-active-color:var(--c-bg);--docsearch-hit-background:var(--c-bg);--docsearch-hit-shadow:0 1px 3px 0 var(--c-border-dark);--docsearch-footer-background:var(--c-bg)}.medium-zoom-overlay{--medium-zoom-bg-color:var(--c-bg)}#nprogress{--nprogress-color:var(--c-brand)}.pwa-popup{--pwa-popup-text-color:var(--c-text);--pwa-popup-bg-color:var(--c-bg);--pwa-popup-border-color:var(--c-brand);--pwa-popup-shadow:0 4px 16px var(--c-brand);--pwa-popup-btn-text-color:var(--c-bg);--pwa-popup-btn-bg-color:var(--c-brand);--pwa-popup-btn-hover-bg-color:var(--c-brand-light)}.search-box{--search-bg-color:var(--c-bg);--search-accent-color:var(--c-brand);--search-text-color:var(--c-text);--search-border-color:var(--c-border);--search-item-text-color:var(--c-text-lighter);--search-item-focus-bg-color:var(--c-bg-light)}html.dark{--c-brand:#3aa675;--c-brand-light:#349469;--c-bg:#22272e;--c-bg-light:#2b313a;--c-bg-lighter:#262c34;--c-text:#adbac7;--c-text-light:#96a7b7;--c-text-lighter:#8b9eb0;--c-text-lightest:#8094a8;--c-border:#3e4c5a;--c-border-dark:#34404c;--c-tip:#318a62;--c-warning:#ceab00;--c-warning-bg:#7e755b;--c-warning-title:#ceac03;--c-warning-text:#362e00;--c-danger:#940000;--c-danger-bg:#806161;--c-danger-title:#610000;--c-danger-text:#3a0000;--c-details-bg:#323843;--code-hl-bg-color:#363b46}html.dark .DocSearch{--docsearch-logo-color:var(--c-text);--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow:inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgba(3, 4, 9, 0.3);--docsearch-key-gradient:linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73, 76, 106, 0.5), 0 -4px 8px 0 rgba(0, 0, 0, 0.2)}body,html{padding:0;margin:0;background-color:var(--c-bg);transition:background-color ease .3s}body{font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:var(--c-text)}a,p a code{font-weight:500;color:var(--c-text-accent)}p a code{font-weight:400}code,kbd{font-family:var(--font-family-code)}kbd{background:var(--c-bg-lighter);border:solid .15rem var(--c-border-dark);border-bottom:solid .25rem var(--c-border-dark);border-radius:.15rem;padding:0 .15em}code{color:var(--c-text-lighter);padding:.25rem .5rem;font-size:.85em;background-color:var(--c-bg-light);border-radius:3px;overflow-wrap:break-word}blockquote{color:var(--c-text-quote);border-left:.2rem solid var(--c-border-dark);margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p,code{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid var(--c-border)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}blockquote,h6{font-size:1rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a,a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid var(--c-border)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid var(--c-border-dark)}tr:nth-child(2n){background-color:var(--c-bg-light)}td,th{border:1px solid var(--c-border-dark);padding:.6em 1em}.arrow,.badge{display:inline-block}.arrow{width:0;height:0}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.up{border-bottom:6px solid var(--c-bg-arrow)}.arrow.down{border-top:6px solid var(--c-bg-arrow)}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.right{border-left:6px solid var(--c-bg-arrow)}.arrow.left{border-right:6px solid var(--c-bg-arrow)}.badge{font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:var(--c-bg);vertical-align:top}.badge.tip{background-color:var(--c-badge-tip)}.badge.warning{background-color:var(--c-badge-warning)}.badge.danger{background-color:var(--c-badge-danger)}.badge+.badge{margin-left:5px}code[class*=language-],pre[class*=language-]{color:#ccc;background:0 0;font-family:var(--font-family-code);font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#ec5975}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:var(--c-text-accent)}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:#fff;padding:0;background-color:transparent;border-radius:0;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.theme-default-content .line-number{font-family:var(--font-family-code)}div[class*=language-]{position:relative;background-color:var(--code-bg-color);border-radius:6px}div[class*=language-]::before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:var(--code-ln-color)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:0 0!important;position:relative;z-index:1}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlight-line{background-color:var(--code-hl-bg-color)}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line::before{content:" ";position:absolute;z-index:2;left:0;top:0;display:block;width:var(--code-ln-wrapper-width);height:100%}div[class*=language-].line-numbers-mode pre{margin-left:var(--code-ln-wrapper-width);padding-left:1rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;width:var(--code-ln-wrapper-width);text-align:center;color:var(--code-ln-color);padding-top:1.25rem;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers .line-number,div[class*=language-].line-numbers-mode .line-numbers br{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers .line-number{position:relative;z-index:3;font-size:.85em}div[class*=language-].line-numbers-mode::after{content:"";position:absolute;top:0;left:0;width:var(--code-ln-wrapper-width);height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--code-hl-bg-color)}div[class*=language-].ext-c:before{content:"c"}div[class*=language-].ext-cpp:before{content:"cpp"}div[class*=language-].ext-cs:before{content:"cs"}div[class*=language-].ext-css:before{content:"css"}div[class*=language-].ext-dart:before{content:"dart"}div[class*=language-].ext-docker:before{content:"docker"}div[class*=language-].ext-fs:before{content:"fs"}div[class*=language-].ext-go:before{content:"go"}div[class*=language-].ext-html:before{content:"html"}div[class*=language-].ext-java:before{content:"java"}div[class*=language-].ext-js:before{content:"js"}div[class*=language-].ext-json:before{content:"json"}div[class*=language-].ext-kt:before{content:"kt"}div[class*=language-].ext-less:before{content:"less"}div[class*=language-].ext-makefile:before{content:"makefile"}div[class*=language-].ext-md:before{content:"md"}div[class*=language-].ext-php:before{content:"php"}div[class*=language-].ext-py:before{content:"py"}div[class*=language-].ext-rb:before{content:"rb"}div[class*=language-].ext-rs:before{content:"rs"}div[class*=language-].ext-sass:before{content:"sass"}div[class*=language-].ext-scss:before{content:"scss"}div[class*=language-].ext-sh:before{content:"sh"}div[class*=language-].ext-styl:before{content:"styl"}div[class*=language-].ext-ts:before{content:"ts"}div[class*=language-].ext-toml:before{content:"toml"}div[class*=language-].ext-vue:before{content:"vue"}div[class*=language-].ext-yml:before{content:"yml"}@media (max-width:419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.code-group__nav{margin-top:.85rem;margin-bottom:calc(-1.7rem - 6px);padding-bottom:calc(1.7rem - 6px);padding-left:10px;padding-top:10px;border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--code-bg-color)}.code-group__ul{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.code-group__nav-tab{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:rgba(255,255,255,.9);font-weight:600}.code-group__nav-tab:focus{outline:0}.code-group__nav-tab:focus-visible{outline:1px solid rgba(255,255,255,.9)}.code-group__nav-tab-active{border-bottom:var(--c-brand) 1px solid}@media (max-width:419px){.code-group__nav{margin-left:-1.5rem;margin-right:-1.5rem;border-radius:0}}.code-group-item,.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle>a.router-link-active::after{display:none}.code-group-item__active{display:block}.code-group-item>pre{background-color:orange}.custom-container .custom-container-title{font-weight:600;margin-bottom:-.4rem}.custom-container.danger,.custom-container.tip,.custom-container.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-container.tip{border-color:var(--c-tip);background-color:var(--c-tip-bg);color:var(--c-tip-text)}.custom-container.tip .custom-container-title{color:var(--c-tip-title)}.custom-container.tip a{color:var(--c-tip-text-accent)}.custom-container.warning{border-color:var(--c-warning);background-color:var(--c-warning-bg);color:var(--c-warning-text)}.custom-container.warning .custom-container-title{color:var(--c-warning-title)}.custom-container.warning a{color:var(--c-warning-text-accent)}.custom-container.danger{border-color:var(--c-danger);background-color:var(--c-danger-bg);color:var(--c-danger-text)}.custom-container.danger .custom-container-title{color:var(--c-danger-title)}.custom-container.danger a{color:var(--c-danger-text-accent)}.custom-container.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:var(--c-details-bg)}.custom-container.details h4{margin-top:0}.custom-container.details figure:last-child,.custom-container.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-container.details summary{outline:0;cursor:pointer}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:0 0;border:0;font-weight:500;color:var(--c-text)}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600;font-size:inherit}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title:hover{color:var(--c-text-accent)}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle{margin:.45rem 0 0;border-top:1px solid var(--c-border);padding:1rem 0 .45rem;font-size:.9rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle>a{font-weight:inherit}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover,.navbar-links a.router-link-active,.navbar-links a:hover{color:var(--c-text-accent)}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active::after{content:"";width:0;height:0;border-left:5px solid var(--c-text-accent);border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child .dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title,.dropdown-wrapper.open .mobile-dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle{border-top:0;margin-top:0;padding-top:0;padding-bottom:0;font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item>a{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--c-bg-navbar);padding:.6rem 0;border:1px solid var(--c-border);border-bottom-color:var(--c-border-dark);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.dropdown-enter-from,.dropdown-leave-to{height:0!important}.home{padding:var(--navbar-height) 2rem 0;max-width:var(--homepage-width);margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .actions,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:var(--c-text-lightest)}.home .hero .action-button{display:inline-block;font-size:1.2rem;padding:.8rem 1.6rem;border-width:2px;border-style:solid;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box}.home .hero .action-button:not(:first-child){margin-left:1.5rem}.home .hero .action-button.primary{color:var(--c-bg);background-color:var(--c-brand);border-color:var(--c-brand)}.home .hero .action-button.primary:hover{background-color:var(--c-brand-light)}.home .hero .action-button.secondary{color:var(--c-brand);background-color:var(--c-bg);border-color:var(--c-brand)}.home .hero .action-button.secondary:hover{color:var(--c-bg);background-color:var(--c-brand-light)}.home .features{border-top:1px solid var(--c-border);padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:var(--c-text-light)}.home .feature p,.home .footer{color:var(--c-text-lighter)}.home .footer{padding:2.5rem;border-top:1px solid var(--c-border);text-align:center}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .actions,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.theme-default-content:not(.custom){max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.page{padding-top:var(--navbar-height);padding-left:var(--sidebar-width)}.navbar,.sidebar{position:fixed;left:0;box-sizing:border-box;transition:background-color ease .3s}.navbar{z-index:20;top:0;right:0;height:var(--navbar-height);border-bottom:1px solid var(--c-border);background-color:var(--c-bg-navbar)}.sidebar{font-size:16px;width:var(--sidebar-width);z-index:10;margin:0;top:var(--navbar-height);bottom:0;border-right:1px solid var(--c-border);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--c-brand) var(--c-border);background-color:var(--c-bg-sidebar)}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-track{background-color:var(--c-border)}.sidebar::-webkit-scrollbar-thumb{background-color:var(--c-brand)}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .page{padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:calc(.5rem - var(--navbar-height));padding-top:calc(1rem + var(--navbar-height));margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-container,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-container,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-container,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-container,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-container,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-container,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}.theme-default-content:not(.custom){padding-top:0}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}@media (max-width:959px){.sidebar{font-size:15px;width:var(--sidebar-width-mobile)}.page{padding-left:var(--sidebar-width-mobile)}}@media (max-width:719px){.sidebar{top:0;padding-top:var(--navbar-height);transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}}.navbar{--navbar-line-height:calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );padding:var(--navbar-padding-v) var(--navbar-padding-h);line-height:var(--navbar-line-height)}.navbar .logo{height:var(--navbar-line-height);min-width:var(--navbar-line-height);margin-right:var(--navbar-padding-v);vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--c-text);position:relative}.navbar .navbar-links-wrapper{display:flex;position:absolute;box-sizing:border-box;top:var(--navbar-padding-v);right:var(--navbar-padding-h);height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);white-space:nowrap;font-size:.9rem}.navbar .navbar-links-wrapper .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.navbar-links,.navbar-links a{display:inline-block}.navbar-links a{line-height:1.4rem;color:inherit}.navbar-links .navbar-links-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}.navbar-links .navbar-links-item:first-child{margin-left:0}@media (max-width:719px){.navbar-links .navbar-links-item{margin-left:0}}@media (min-width:719px){.navbar-links a.router-link-active,.navbar-links a:hover{color:var(--c-text)}.navbar-links-item>a:not(.external).router-link-active,.navbar-links-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid var(--c-text-accent)}}.toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}.toggle-sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media screen and (max-width:719px){.toggle-sidebar-button{display:block}}.toggle-dark-button{display:flex;margin:auto;margin-left:1rem;border:0;background:0 0;color:var(--c-text);opacity:.8;cursor:pointer}.toggle-dark-button:hover{opacity:1}.toggle-dark-button .icon{width:1.25rem;height:1.25rem}.page-meta,.page-nav{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-meta,.page-nav{padding:2rem}}@media (max-width:419px){.page-meta,.page-nav{padding:1.5rem}}.page{padding-bottom:2rem;display:block}.page-meta{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-meta .meta-item{cursor:default;margin-top:.8rem}.page-meta .meta-item .meta-item-label{font-weight:500;color:var(--c-text-lighter)}.page-meta .meta-item .meta-item-info{font-weight:400;color:var(--c-text-quote)}.page-meta .edit-link{display:inline-block;margin-right:.25rem}.page-meta .last-updated{float:right}@media (max-width:719px){.page-meta .last-updated{font-size:.8em;float:none}.page-meta .contributors{font-size:.8em}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--c-border);padding-top:1rem;overflow:auto}.page-nav .next{float:right}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .navbar-links{display:none;border-bottom:1px solid var(--c-border);padding:.5rem 0 .75rem}.sidebar .navbar-links a{font-weight:600}.sidebar .navbar-links .navbar-links-item{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar-links>.sidebar-group:not(:first-child),.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .navbar-links{display:block}.sidebar .navbar-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active::after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.sidebar-group .sidebar-group>.sidebar-heading{opacity:.5;font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-heading,.sidebar-link{color:var(--c-text);border-left:.25rem solid transparent;width:100%;box-sizing:border-box}.sidebar-heading{transition:color .15s ease;cursor:default;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;margin:0}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}.sidebar-link{font-size:1em;font-weight:400;display:inline-block;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4}.sidebar-group .sidebar-link{padding-left:2rem}.sidebar-sub-headers .sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers .sidebar-link.active{font-weight:500}a.sidebar-heading,a.sidebar-link{cursor:pointer}a.sidebar-heading.active,a.sidebar-link.active{font-weight:600;color:var(--c-text-accent);border-left-color:var(--c-text-accent)}a.sidebar-heading:hover,a.sidebar-link:hover{color:var(--c-text-accent)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.table-of-contents .badge{vertical-align:middle}.fade-slide-y-enter-active{transition:all .3s ease}.fade-slide-y-leave-active{transition:all .3s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{transform:translateY(10px);opacity:0}.site-name{color:#3f8dbf!important}.sidebar-link{margin:2px 0}.theme-default-content:not(.custom){max-width:90%!important}.page-meta{max-width:90%!important} +:root{--c-brand:#3eaf7c;--c-brand-light:#4abf8a;--c-bg:#ffffff;--c-bg-light:#f3f4f5;--c-bg-lighter:#eeeeee;--c-bg-navbar:var(--c-bg);--c-bg-sidebar:var(--c-bg);--c-bg-arrow:#cccccc;--c-text:#2c3e50;--c-text-accent:var(--c-brand);--c-text-light:#3a5169;--c-text-lighter:#4e6e8e;--c-text-lightest:#6a8bad;--c-text-quote:#999999;--c-border:#eaecef;--c-border-dark:#dfe2e5;--c-tip:#42b983;--c-tip-bg:var(--c-bg-light);--c-tip-title:var(--c-text);--c-tip-text:var(--c-text);--c-tip-text-accent:var(--c-text-accent);--c-warning:#e7c000;--c-warning-bg:#fffae3;--c-warning-title:#ad9000;--c-warning-text:#746000;--c-warning-text-accent:var(--c-text);--c-danger:#cc0000;--c-danger-bg:#ffe0e0;--c-danger-title:#990000;--c-danger-text:#660000;--c-danger-text-accent:var(--c-text);--c-details-bg:#eeeeee;--c-badge-tip:var(--c-tip);--c-badge-warning:var(--c-warning);--c-badge-danger:var(--c-danger);--code-bg-color:#282c34;--code-hl-bg-color:rgba(0, 0, 0, 0.66);--code-ln-color:#9e9e9e;--code-ln-wrapper-width:3.5rem;--font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code:Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height:3.6rem;--navbar-padding-v:0.7rem;--navbar-padding-h:1.5rem;--sidebar-width:20rem;--sidebar-width-mobile:calc(var(--sidebar-width) * 0.82);--content-width:740px;--homepage-width:960px}.back-to-top{--back-to-top-color:var(--c-brand);--back-to-top-color-hover:var(--c-brand-light)}.DocSearch{--docsearch-primary-color:var(--c-brand);--docsearch-text-color:var(--c-text);--docsearch-highlight-color:var(--c-brand);--docsearch-muted-color:var(--c-text-quote);--docsearch-container-background:rgba(9, 10, 17, 0.8);--docsearch-modal-background:var(--c-bg-light);--docsearch-searchbox-background:var(--c-bg-lighter);--docsearch-searchbox-focus-background:var(--c-bg);--docsearch-searchbox-shadow:inset 0 0 0 2px var(--c-brand);--docsearch-hit-color:var(--c-text-light);--docsearch-hit-active-color:var(--c-bg);--docsearch-hit-background:var(--c-bg);--docsearch-hit-shadow:0 1px 3px 0 var(--c-border-dark);--docsearch-footer-background:var(--c-bg)}.medium-zoom-overlay{--medium-zoom-bg-color:var(--c-bg)}#nprogress{--nprogress-color:var(--c-brand)}.pwa-popup{--pwa-popup-text-color:var(--c-text);--pwa-popup-bg-color:var(--c-bg);--pwa-popup-border-color:var(--c-brand);--pwa-popup-shadow:0 4px 16px var(--c-brand);--pwa-popup-btn-text-color:var(--c-bg);--pwa-popup-btn-bg-color:var(--c-brand);--pwa-popup-btn-hover-bg-color:var(--c-brand-light)}.search-box{--search-bg-color:var(--c-bg);--search-accent-color:var(--c-brand);--search-text-color:var(--c-text);--search-border-color:var(--c-border);--search-item-text-color:var(--c-text-lighter);--search-item-focus-bg-color:var(--c-bg-light)}html.dark{--c-brand:#3aa675;--c-brand-light:#349469;--c-bg:#22272e;--c-bg-light:#2b313a;--c-bg-lighter:#262c34;--c-text:#adbac7;--c-text-light:#96a7b7;--c-text-lighter:#8b9eb0;--c-text-lightest:#8094a8;--c-border:#3e4c5a;--c-border-dark:#34404c;--c-tip:#318a62;--c-warning:#ceab00;--c-warning-bg:#7e755b;--c-warning-title:#ceac03;--c-warning-text:#362e00;--c-danger:#940000;--c-danger-bg:#806161;--c-danger-title:#610000;--c-danger-text:#3a0000;--c-details-bg:#323843;--code-hl-bg-color:#363b46}html.dark .DocSearch{--docsearch-logo-color:var(--c-text);--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow:inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgba(3, 4, 9, 0.3);--docsearch-key-gradient:linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73, 76, 106, 0.5), 0 -4px 8px 0 rgba(0, 0, 0, 0.2)}body,html{padding:0;margin:0;background-color:var(--c-bg);transition:background-color ease .3s}body{font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:var(--c-text)}a,p a code{font-weight:500;color:var(--c-text-accent)}p a code{font-weight:400}code,kbd{font-family:var(--font-family-code)}kbd{background:var(--c-bg-lighter);border:solid .15rem var(--c-border-dark);border-bottom:solid .25rem var(--c-border-dark);border-radius:.15rem;padding:0 .15em}code{color:var(--c-text-lighter);padding:.25rem .5rem;font-size:.85em;background-color:var(--c-bg-light);border-radius:3px;overflow-wrap:break-word}blockquote{color:var(--c-text-quote);border-left:.2rem solid var(--c-border-dark);margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p,code{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid var(--c-border)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}blockquote,h6{font-size:1rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a,a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid var(--c-border)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid var(--c-border-dark)}tr:nth-child(2n){background-color:var(--c-bg-light)}td,th{border:1px solid var(--c-border-dark);padding:.6em 1em}.arrow,.badge{display:inline-block}.arrow{width:0;height:0}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.up{border-bottom:6px solid var(--c-bg-arrow)}.arrow.down{border-top:6px solid var(--c-bg-arrow)}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.right{border-left:6px solid var(--c-bg-arrow)}.arrow.left{border-right:6px solid var(--c-bg-arrow)}.badge{font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:var(--c-bg);vertical-align:top}.badge.tip{background-color:var(--c-badge-tip)}.badge.warning{background-color:var(--c-badge-warning)}.badge.danger{background-color:var(--c-badge-danger)}.badge+.badge{margin-left:5px}code[class*=language-],pre[class*=language-]{color:#ccc;background:0 0;font-family:var(--font-family-code);font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#ec5975}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:var(--c-text-accent)}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:#fff;padding:0;background-color:transparent;border-radius:0;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.theme-default-content .line-number{font-family:var(--font-family-code)}div[class*=language-]{position:relative;background-color:var(--code-bg-color);border-radius:6px}div[class*=language-]::before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:var(--code-ln-color)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:0 0!important;position:relative;z-index:1}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlight-line{background-color:var(--code-hl-bg-color)}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line::before{content:" ";position:absolute;z-index:2;left:0;top:0;display:block;width:var(--code-ln-wrapper-width);height:100%}div[class*=language-].line-numbers-mode pre{margin-left:var(--code-ln-wrapper-width);padding-left:1rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;width:var(--code-ln-wrapper-width);text-align:center;color:var(--code-ln-color);padding-top:1.25rem;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers .line-number,div[class*=language-].line-numbers-mode .line-numbers br{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers .line-number{position:relative;z-index:3;font-size:.85em}div[class*=language-].line-numbers-mode::after{content:"";position:absolute;top:0;left:0;width:var(--code-ln-wrapper-width);height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--code-hl-bg-color)}div[class*=language-].ext-c:before{content:"c"}div[class*=language-].ext-cpp:before{content:"cpp"}div[class*=language-].ext-cs:before{content:"cs"}div[class*=language-].ext-css:before{content:"css"}div[class*=language-].ext-dart:before{content:"dart"}div[class*=language-].ext-docker:before{content:"docker"}div[class*=language-].ext-fs:before{content:"fs"}div[class*=language-].ext-go:before{content:"go"}div[class*=language-].ext-html:before{content:"html"}div[class*=language-].ext-java:before{content:"java"}div[class*=language-].ext-js:before{content:"js"}div[class*=language-].ext-json:before{content:"json"}div[class*=language-].ext-kt:before{content:"kt"}div[class*=language-].ext-less:before{content:"less"}div[class*=language-].ext-makefile:before{content:"makefile"}div[class*=language-].ext-md:before{content:"md"}div[class*=language-].ext-php:before{content:"php"}div[class*=language-].ext-py:before{content:"py"}div[class*=language-].ext-rb:before{content:"rb"}div[class*=language-].ext-rs:before{content:"rs"}div[class*=language-].ext-sass:before{content:"sass"}div[class*=language-].ext-scss:before{content:"scss"}div[class*=language-].ext-sh:before{content:"sh"}div[class*=language-].ext-styl:before{content:"styl"}div[class*=language-].ext-ts:before{content:"ts"}div[class*=language-].ext-toml:before{content:"toml"}div[class*=language-].ext-vue:before{content:"vue"}div[class*=language-].ext-yml:before{content:"yml"}@media (max-width:419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.code-group__nav{margin-top:.85rem;margin-bottom:calc(-1.7rem - 6px);padding-bottom:calc(1.7rem - 6px);padding-left:10px;padding-top:10px;border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--code-bg-color)}.code-group__ul{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.code-group__nav-tab{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:rgba(255,255,255,.9);font-weight:600}.code-group__nav-tab:focus{outline:0}.code-group__nav-tab:focus-visible{outline:1px solid rgba(255,255,255,.9)}.code-group__nav-tab-active{border-bottom:var(--c-brand) 1px solid}@media (max-width:419px){.code-group__nav{margin-left:-1.5rem;margin-right:-1.5rem;border-radius:0}}.code-group-item,.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle>a.router-link-active::after{display:none}.code-group-item__active{display:block}.code-group-item>pre{background-color:orange}.custom-container .custom-container-title{font-weight:600;margin-bottom:-.4rem}.custom-container.danger,.custom-container.tip,.custom-container.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-container.tip{border-color:var(--c-tip);background-color:var(--c-tip-bg);color:var(--c-tip-text)}.custom-container.tip .custom-container-title{color:var(--c-tip-title)}.custom-container.tip a{color:var(--c-tip-text-accent)}.custom-container.warning{border-color:var(--c-warning);background-color:var(--c-warning-bg);color:var(--c-warning-text)}.custom-container.warning .custom-container-title{color:var(--c-warning-title)}.custom-container.warning a{color:var(--c-warning-text-accent)}.custom-container.danger{border-color:var(--c-danger);background-color:var(--c-danger-bg);color:var(--c-danger-text)}.custom-container.danger .custom-container-title{color:var(--c-danger-title)}.custom-container.danger a{color:var(--c-danger-text-accent)}.custom-container.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:var(--c-details-bg)}.custom-container.details h4{margin-top:0}.custom-container.details figure:last-child,.custom-container.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-container.details summary{outline:0;cursor:pointer}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:0 0;border:0;font-weight:500;color:var(--c-text)}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600;font-size:inherit}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title:hover{color:var(--c-text-accent)}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle{margin:.45rem 0 0;border-top:1px solid var(--c-border);padding:1rem 0 .45rem;font-size:.9rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle>a{font-weight:inherit}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover,.navbar-links a.router-link-active,.navbar-links a:hover{color:var(--c-text-accent)}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active::after{content:"";width:0;height:0;border-left:5px solid var(--c-text-accent);border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child .dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title,.dropdown-wrapper.open .mobile-dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subtitle{border-top:0;margin-top:0;padding-top:0;padding-bottom:0;font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item>a{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--c-bg-navbar);padding:.6rem 0;border:1px solid var(--c-border);border-bottom-color:var(--c-border-dark);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.dropdown-enter-from,.dropdown-leave-to{height:0!important}.home{padding:var(--navbar-height) 2rem 0;max-width:var(--homepage-width);margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .actions,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:var(--c-text-lightest)}.home .hero .action-button{display:inline-block;font-size:1.2rem;padding:.8rem 1.6rem;border-width:2px;border-style:solid;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box}.home .hero .action-button:not(:first-child){margin-left:1.5rem}.home .hero .action-button.primary{color:var(--c-bg);background-color:var(--c-brand);border-color:var(--c-brand)}.home .hero .action-button.primary:hover{background-color:var(--c-brand-light)}.home .hero .action-button.secondary{color:var(--c-brand);background-color:var(--c-bg);border-color:var(--c-brand)}.home .hero .action-button.secondary:hover{color:var(--c-bg);background-color:var(--c-brand-light)}.home .features{border-top:1px solid var(--c-border);padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:var(--c-text-light)}.home .feature p,.home .footer{color:var(--c-text-lighter)}.home .footer{padding:2.5rem;border-top:1px solid var(--c-border);text-align:center}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .actions,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.theme-default-content:not(.custom){max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.page{padding-top:var(--navbar-height);padding-left:var(--sidebar-width)}.navbar,.sidebar{position:fixed;left:0;box-sizing:border-box;transition:background-color ease .3s}.navbar{z-index:20;top:0;right:0;height:var(--navbar-height);border-bottom:1px solid var(--c-border);background-color:var(--c-bg-navbar)}.sidebar{font-size:16px;width:var(--sidebar-width);z-index:10;margin:0;top:var(--navbar-height);bottom:0;border-right:1px solid var(--c-border);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--c-brand) var(--c-border);background-color:var(--c-bg-sidebar)}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-track{background-color:var(--c-border)}.sidebar::-webkit-scrollbar-thumb{background-color:var(--c-brand)}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .page{padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:calc(.5rem - var(--navbar-height));padding-top:calc(1rem + var(--navbar-height));margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-container,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-container,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-container,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-container,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-container,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-container,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}.theme-default-content:not(.custom){padding-top:0}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}@media (max-width:959px){.sidebar{font-size:15px;width:var(--sidebar-width-mobile)}.page{padding-left:var(--sidebar-width-mobile)}}@media (max-width:719px){.sidebar{top:0;padding-top:var(--navbar-height);transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}}.navbar{--navbar-line-height:calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );padding:var(--navbar-padding-v) var(--navbar-padding-h);line-height:var(--navbar-line-height)}.navbar .logo{height:var(--navbar-line-height);min-width:var(--navbar-line-height);margin-right:var(--navbar-padding-v);vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--c-text);position:relative}.navbar .navbar-links-wrapper{display:flex;position:absolute;box-sizing:border-box;top:var(--navbar-padding-v);right:var(--navbar-padding-h);height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);white-space:nowrap;font-size:.9rem}.navbar .navbar-links-wrapper .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.navbar-links,.navbar-links a{display:inline-block}.navbar-links a{line-height:1.4rem;color:inherit}.navbar-links .navbar-links-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}.navbar-links .navbar-links-item:first-child{margin-left:0}@media (max-width:719px){.navbar-links .navbar-links-item{margin-left:0}}@media (min-width:719px){.navbar-links a.router-link-active,.navbar-links a:hover{color:var(--c-text)}.navbar-links-item>a:not(.external).router-link-active,.navbar-links-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid var(--c-text-accent)}}.toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}.toggle-sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media screen and (max-width:719px){.toggle-sidebar-button{display:block}}.toggle-dark-button{display:flex;margin:auto;margin-left:1rem;border:0;background:0 0;color:var(--c-text);opacity:.8;cursor:pointer}.toggle-dark-button:hover{opacity:1}.toggle-dark-button .icon{width:1.25rem;height:1.25rem}.page-meta,.page-nav{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-meta,.page-nav{padding:2rem}}@media (max-width:419px){.page-meta,.page-nav{padding:1.5rem}}.page{padding-bottom:2rem;display:block}.page-meta{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-meta .meta-item{cursor:default;margin-top:.8rem}.page-meta .meta-item .meta-item-label{font-weight:500;color:var(--c-text-lighter)}.page-meta .meta-item .meta-item-info{font-weight:400;color:var(--c-text-quote)}.page-meta .edit-link{display:inline-block;margin-right:.25rem}.page-meta .last-updated{float:right}@media (max-width:719px){.page-meta .last-updated{font-size:.8em;float:none}.page-meta .contributors{font-size:.8em}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--c-border);padding-top:1rem;overflow:auto}.page-nav .next{float:right}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .navbar-links{display:none;border-bottom:1px solid var(--c-border);padding:.5rem 0 .75rem}.sidebar .navbar-links a{font-weight:600}.sidebar .navbar-links .navbar-links-item{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar-links>.sidebar-group:not(:first-child),.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .navbar-links{display:block}.sidebar .navbar-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active::after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.sidebar-group .sidebar-group>.sidebar-heading{opacity:.5;font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-heading,.sidebar-link{color:var(--c-text);border-left:.25rem solid transparent;width:100%;box-sizing:border-box}.sidebar-heading{transition:color .15s ease;cursor:default;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;margin:0}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}.sidebar-link{font-size:1em;font-weight:400;display:inline-block;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4}.sidebar-group .sidebar-link{padding-left:2rem}.sidebar-sub-headers .sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers .sidebar-link.active{font-weight:500}a.sidebar-heading,a.sidebar-link{cursor:pointer}a.sidebar-heading.active,a.sidebar-link.active{font-weight:600;color:var(--c-text-accent);border-left-color:var(--c-text-accent)}a.sidebar-heading:hover,a.sidebar-link:hover{color:var(--c-text-accent)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.table-of-contents .badge{vertical-align:middle}.fade-slide-y-enter-active{transition:all .3s ease}.fade-slide-y-leave-active{transition:all .3s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{transform:translateY(10px);opacity:0}.site-name{color:#3f8dbf!important}.sidebar-link{margin:2px 0}.theme-default-content:not(.custom){max-width:90%!important}.page-meta,.page-nav{max-width:90%!important} :root{--medium-zoom-z-index:100;--medium-zoom-bg-color:#ffffff;--medium-zoom-opacity:1} .medium-zoom-overlay{background-color:var(--medium-zoom-bg-color)!important;z-index:var(--medium-zoom-z-index)}.medium-zoom-overlay~img{z-index:calc(var(--medium-zoom-z-index) + 1)}.medium-zoom--opened .medium-zoom-overlay{opacity:var(--medium-zoom-opacity)} :root{--back-to-top-z-index:5;--back-to-top-color:#3eaf7c;--back-to-top-color-hover:#71cda3} -.back-to-top{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;height:1.2rem;background-color:var(--back-to-top-color);-webkit-mask:url(/xzs-mysql/assets/img/back-to-top.8b37f773.svg) no-repeat;mask:url(/xzs-mysql/assets/img/back-to-top.8b37f773.svg) no-repeat;z-index:var(--back-to-top-z-index)}.back-to-top:hover{background-color:var(--back-to-top-color-hover)}@media (max-width:959px){.back-to-top{display:none}}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0} +.back-to-top{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;height:1.2rem;background-color:var(--back-to-top-color);-webkit-mask:url(/assets/img/back-to-top.8b37f773.svg) no-repeat;mask:url(/assets/img/back-to-top.8b37f773.svg) no-repeat;z-index:var(--back-to-top-z-index)}.back-to-top:hover{background-color:var(--back-to-top-color-hover)}@media (max-width:959px){.back-to-top{display:none}}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0} :root{--nprogress-color:#29d;--nprogress-z-index:1031} #nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px var(--nprogress-color),0 0 5px var(--nprogress-color);opacity:1;transform:rotate(3deg) translate(0,-4px)} diff --git a/docs/assets/js/app.b985fcc1.js b/docs/assets/js/app.b985fcc1.js new file mode 100644 index 00000000..daf67415 --- /dev/null +++ b/docs/assets/js/app.b985fcc1.js @@ -0,0 +1 @@ +(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[143],{3131:(e,t,d)=>{"use strict";d.d(t,{g:()=>s});var n=d(952),i=d(6971),a=d(1598);const s=[n.Z,i.Z,a.Z]},9947:(e,t,d)=>{"use strict";d.d(t,{p:()=>n});const n=[d(3051).Z]},4611:(e,t,d)=>{"use strict";d.d(t,{l:()=>s});var n=d(8866),i=d(1263),a=d(6243);const s=[n.Z,i.Z,a.Z]},4150:(e,t,d)=>{"use strict";d.d(t,{Z:()=>i});var n=d(6252);const i={404:(0,n.RC)((()=>d.e(616).then(d.bind(d,3616)))),Layout:(0,n.RC)((()=>d.e(961).then(d.bind(d,2961))))}},6056:(e,t,d)=>{"use strict";d.d(t,{b:()=>i});var n=d(6252);const i={"v-8daa1a0e":(0,n.RC)((()=>d.e(509).then(d.bind(d,5140)))),"v-55bcf8d6":(0,n.RC)((()=>d.e(725).then(d.bind(d,9465)))),"v-7dc58ad2":(0,n.RC)((()=>d.e(349).then(d.bind(d,8401)))),"v-8a14f834":(0,n.RC)((()=>d.e(810).then(d.bind(d,6357)))),"v-745beb88":(0,n.RC)((()=>d.e(803).then(d.bind(d,7015)))),"v-5c93668f":(0,n.RC)((()=>d.e(924).then(d.bind(d,9820)))),"v-e6eb79d8":(0,n.RC)((()=>d.e(979).then(d.bind(d,8560)))),"v-1362226a":(0,n.RC)((()=>d.e(909).then(d.bind(d,9412)))),"v-676a79ac":(0,n.RC)((()=>d.e(257).then(d.bind(d,2295)))),"v-45a87c2c":(0,n.RC)((()=>d.e(71).then(d.bind(d,5191)))),"v-3706649a":(0,n.RC)((()=>d.e(88).then(d.bind(d,1124))))}},9706:(e,t,d)=>{"use strict";d.d(t,{T:()=>n});const n={"v-8daa1a0e":()=>d.e(509).then(d.bind(d,6464)).then((({data:e})=>e)),"v-55bcf8d6":()=>d.e(725).then(d.bind(d,927)).then((({data:e})=>e)),"v-7dc58ad2":()=>d.e(349).then(d.bind(d,8103)).then((({data:e})=>e)),"v-8a14f834":()=>d.e(810).then(d.bind(d,5737)).then((({data:e})=>e)),"v-745beb88":()=>d.e(803).then(d.bind(d,9252)).then((({data:e})=>e)),"v-5c93668f":()=>d.e(924).then(d.bind(d,4158)).then((({data:e})=>e)),"v-e6eb79d8":()=>d.e(979).then(d.bind(d,6339)).then((({data:e})=>e)),"v-1362226a":()=>d.e(909).then(d.bind(d,5785)).then((({data:e})=>e)),"v-676a79ac":()=>d.e(257).then(d.bind(d,9326)).then((({data:e})=>e)),"v-45a87c2c":()=>d.e(71).then(d.bind(d,8992)).then((({data:e})=>e)),"v-3706649a":()=>d.e(88).then(d.bind(d,1801)).then((({data:e})=>e))}},4634:(e,t,d)=>{"use strict";d.d(t,{g:()=>i});var n=d(4802);const i=[["v-8daa1a0e","/","",["/index.html","/README.md"]],["v-55bcf8d6","/guide/admin.html","管理端",["/guide/admin.md"]],["v-7dc58ad2","/guide/database.html","数据库设计",["/guide/database.md"]],["v-8a14f834","/guide/deploy.html","项目部署",["/guide/deploy.md"]],["v-745beb88","/guide/develop.html","项目开发",["/guide/develop.md"]],["v-5c93668f","/guide/feature.html","功能列表",["/guide/feature.md"]],["v-e6eb79d8","/guide/skill.html","技术栈",["/guide/skill.md"]],["v-1362226a","/guide/student.html","学生端",["/guide/student.md"]],["v-676a79ac","/guide/video.html","视频教程",["/guide/video.md"]],["v-45a87c2c","/guide/wx.html","微信小程序端",["/guide/wx.md"]],["v-3706649a","/404.html","",[]]].reduce(((e,[t,d,i,a])=>(e.push({name:t,path:d,component:n.Y,meta:{title:i}},...a.map((e=>({path:e,redirect:d})))),e)),[{name:"404",path:"/:catchAll(.*)",component:n.Y}])},5220:(e,t,d)=>{"use strict";d.d(t,{H:()=>n});const n={base:"/xzs-mysql/",lang:"zh-CN",title:"学之思教程",description:"学之思开发部署教程",head:[["link",{rel:"icon",href:"https://www.mindskip.net/style/images/favicon.png"}]],locales:{}}},2232:(e,t,d)=>{"use strict";d.d(t,{f:()=>n});const n={logo:"/images/logo/logo.png",navbar:[{text:"官网",link:"https://www.mindskip.net"},{text:"思多多",link:"https://www.mindskip.net/sdd.html"},{text:"维多多",link:"https://www.mindskip.net/wdd.html"},{text:"学多多",link:"https://www.mindskip.net/xdd.html"},{text:"学之思",link:"https://www.mindskip.net/xzs.html"},{text:"商业购买",link:"https://www.mindskip.net/buy.html"}],sidebar:["/guide/feature.md","/guide/skill.md","/guide/database.md",{text:"接口文档",children:["/guide/student.md","/guide/wx.md","/guide/admin.md"]},"/guide/develop.md","/guide/deploy.md","/guide/video.md"],locales:{"/":{selectLanguageName:"English"}},darkMode:!0,repo:null,selectLanguageText:"Languages",selectLanguageAriaLabel:"Select language",sidebarDepth:2,editLink:!0,editLinkText:"Edit this page",lastUpdated:!0,lastUpdatedText:"Last Updated",contributors:!0,contributorsText:"Contributors",notFound:["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],backToHome:"Take me home",openInNewWindow:"open in new window"}}},e=>{"use strict";e.O(0,[460,640],(()=>(8463,e(e.s=8463)))),e.O()}]); \ No newline at end of file diff --git a/docs/assets/js/app.d1d8ec19.js b/docs/assets/js/app.d1d8ec19.js deleted file mode 100644 index 3922a3f4..00000000 --- a/docs/assets/js/app.d1d8ec19.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[143],{3131:(e,t,d)=>{"use strict";d.d(t,{g:()=>s});var n=d(952),i=d(6971),a=d(1598);const s=[n.Z,i.Z,a.Z]},9947:(e,t,d)=>{"use strict";d.d(t,{p:()=>n});const n=[d(3051).Z]},4611:(e,t,d)=>{"use strict";d.d(t,{l:()=>s});var n=d(8866),i=d(1263),a=d(6243);const s=[n.Z,i.Z,a.Z]},4150:(e,t,d)=>{"use strict";d.d(t,{Z:()=>i});var n=d(6252);const i={404:(0,n.RC)((()=>d.e(616).then(d.bind(d,3616)))),Layout:(0,n.RC)((()=>d.e(961).then(d.bind(d,2961))))}},6056:(e,t,d)=>{"use strict";d.d(t,{b:()=>i});var n=d(6252);const i={"v-8daa1a0e":(0,n.RC)((()=>d.e(509).then(d.bind(d,5140)))),"v-55bcf8d6":(0,n.RC)((()=>d.e(725).then(d.bind(d,9566)))),"v-3c5293eb":(0,n.RC)((()=>d.e(993).then(d.bind(d,8385)))),"v-7dc58ad2":(0,n.RC)((()=>d.e(349).then(d.bind(d,2866)))),"v-8a14f834":(0,n.RC)((()=>d.e(810).then(d.bind(d,7431)))),"v-745beb88":(0,n.RC)((()=>d.e(803).then(d.bind(d,123)))),"v-5c93668f":(0,n.RC)((()=>d.e(924).then(d.bind(d,8486)))),"v-e6eb79d8":(0,n.RC)((()=>d.e(979).then(d.bind(d,9080)))),"v-1362226a":(0,n.RC)((()=>d.e(909).then(d.bind(d,2007)))),"v-676a79ac":(0,n.RC)((()=>d.e(257).then(d.bind(d,3368)))),"v-45a87c2c":(0,n.RC)((()=>d.e(71).then(d.bind(d,9509)))),"v-3706649a":(0,n.RC)((()=>d.e(88).then(d.bind(d,1124))))}},9706:(e,t,d)=>{"use strict";d.d(t,{T:()=>n});const n={"v-8daa1a0e":()=>d.e(509).then(d.bind(d,6464)).then((({data:e})=>e)),"v-55bcf8d6":()=>d.e(725).then(d.bind(d,927)).then((({data:e})=>e)),"v-3c5293eb":()=>d.e(993).then(d.bind(d,2203)).then((({data:e})=>e)),"v-7dc58ad2":()=>d.e(349).then(d.bind(d,8103)).then((({data:e})=>e)),"v-8a14f834":()=>d.e(810).then(d.bind(d,5737)).then((({data:e})=>e)),"v-745beb88":()=>d.e(803).then(d.bind(d,9252)).then((({data:e})=>e)),"v-5c93668f":()=>d.e(924).then(d.bind(d,4158)).then((({data:e})=>e)),"v-e6eb79d8":()=>d.e(979).then(d.bind(d,6339)).then((({data:e})=>e)),"v-1362226a":()=>d.e(909).then(d.bind(d,5785)).then((({data:e})=>e)),"v-676a79ac":()=>d.e(257).then(d.bind(d,9326)).then((({data:e})=>e)),"v-45a87c2c":()=>d.e(71).then(d.bind(d,8992)).then((({data:e})=>e)),"v-3706649a":()=>d.e(88).then(d.bind(d,1801)).then((({data:e})=>e))}},4634:(e,t,d)=>{"use strict";d.d(t,{g:()=>i});var n=d(4802);const i=[["v-8daa1a0e","/","",["/index.html","/README.md"]],["v-55bcf8d6","/guide/admin.html","",["/guide/admin.md"]],["v-3c5293eb","/guide/api.html","",["/guide/api.md"]],["v-7dc58ad2","/guide/database.html","",["/guide/database.md"]],["v-8a14f834","/guide/deploy.html","",["/guide/deploy.md"]],["v-745beb88","/guide/develop.html","",["/guide/develop.md"]],["v-5c93668f","/guide/feature.html","",["/guide/feature.md"]],["v-e6eb79d8","/guide/skill.html","",["/guide/skill.md"]],["v-1362226a","/guide/student.html","",["/guide/student.md"]],["v-676a79ac","/guide/video.html","",["/guide/video.md"]],["v-45a87c2c","/guide/wx.html","",["/guide/wx.md"]],["v-3706649a","/404.html","",[]]].reduce(((e,[t,d,i,a])=>(e.push({name:t,path:d,component:n.Y,meta:{title:i}},...a.map((e=>({path:e,redirect:d})))),e)),[{name:"404",path:"/:catchAll(.*)",component:n.Y}])},5220:(e,t,d)=>{"use strict";d.d(t,{H:()=>n});const n={base:"/xzs-mysql/",lang:"zh-CN",title:"学之思教程",description:"学之思开发部署教程",head:[["link",{rel:"icon",href:"https://www.mindskip.net/style/images/favicon.png"}]],locales:{}}},2232:(e,t,d)=>{"use strict";d.d(t,{f:()=>n});const n={logo:"/images/logo.png",navbar:[{text:"官网",link:"https://www.mindskip.net"},{text:"思多多",link:"https://www.mindskip.net/sdd.html"},{text:"维多多",link:"https://www.mindskip.net/wdd.html"},{text:"学多多",link:"https://www.mindskip.net/xdd.html"},{text:"学之思",link:"https://www.mindskip.net/xzs.html"},{text:"商业购买",link:"https://www.mindskip.net/buy.html"}],sidebar:[{text:"功能列表",link:"/guide/feature.md"},{text:"技术栈",link:"/guide/skill.md"},{text:"数据库设计",link:"/guide/database.md"},{isGroup:!1,text:"接口文档",children:[{text:"学生考试端",link:"/guide/student.md"},{text:"微信小程序",link:"/guide/wx.md"},{text:"管理系统端",link:"/guide/admin.md"}]},{text:"项目开发",link:"/guide/develop.md"},{text:"项目部署",link:"/guide/deploy.md"},{text:"视频教程",link:"/guide/video.md"}],locales:{"/":{selectLanguageName:"English"}},darkMode:!0,repo:null,selectLanguageText:"Languages",selectLanguageAriaLabel:"Select language",sidebarDepth:2,editLink:!0,editLinkText:"Edit this page",lastUpdated:!0,lastUpdatedText:"Last Updated",contributors:!0,contributorsText:"Contributors",notFound:["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],backToHome:"Take me home",openInNewWindow:"open in new window"}}},e=>{"use strict";e.O(0,[460,640],(()=>(8463,e(e.s=8463)))),e.O()}]); \ No newline at end of file diff --git a/docs/assets/js/runtime~app.283ba8de.js b/docs/assets/js/runtime~app.283ba8de.js deleted file mode 100644 index bf9f5732..00000000 --- a/docs/assets/js/runtime~app.283ba8de.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,r,t,a={},o={};function n(e){var r=o[e];if(void 0!==r)return r.exports;var t=o[e]={exports:{}};return a[e].call(t.exports,t,t.exports,n),t.exports}n.m=a,e=[],n.O=(r,t,a,o)=>{if(!t){var s=1/0;for(i=0;i=o)&&Object.keys(n.O).every((e=>n.O[e](t[c])))?t.splice(c--,1):(d=!1,o0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,a,o]},n.d=(e,r)=>{for(var t in r)n.o(r,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((r,t)=>(n.f[t](e,r),r)),[])),n.u=e=>"assets/js/"+({71:"v-45a87c2c",88:"v-3706649a",257:"v-676a79ac",349:"v-7dc58ad2",509:"v-8daa1a0e",725:"v-55bcf8d6",803:"v-745beb88",810:"v-8a14f834",909:"v-1362226a",924:"v-5c93668f",979:"v-e6eb79d8",993:"v-3c5293eb"}[e]||e)+"."+{71:"05fe7f46",88:"d8cdd662",257:"c4dc1daf",349:"f2392ebe",509:"8a5cacf6",616:"6e2d2016",725:"6e5b1ac1",803:"2a9d82c5",810:"7497511c",909:"0e9d9fcf",924:"3201de4a",961:"23aeaf0d",979:"4a757be4",993:"8d96dd51"}[e]+".js",n.miniCssF=e=>"assets/css/styles.8ea25984.css",n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r={},t="xzs-docs:",n.l=(e,a,o,s)=>{if(r[e])r[e].push(a);else{var d,c;if(void 0!==o)for(var i=document.getElementsByTagName("script"),l=0;l{d.onerror=d.onload=null,clearTimeout(v);var o=r[e];if(delete r[e],d.parentNode&&d.parentNode.removeChild(d),o&&o.forEach((e=>e(a))),t)return t(a)},v=setTimeout(u.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=u.bind(null,d.onerror),d.onload=u.bind(null,d.onload),c&&document.head.appendChild(d)}},n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="/xzs-mysql/",(()=>{var e={523:0,460:0};n.f.j=(r,t)=>{var a=n.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(460|523)$/.test(r))e[r]=0;else{var o=new Promise(((t,o)=>a=e[r]=[t,o]));t.push(a[2]=o);var s=n.p+n.u(r),d=new Error;n.l(s,(t=>{if(n.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var o=t&&("load"===t.type?"missing":t.type),s=t&&t.target&&t.target.src;d.message="Loading chunk "+r+" failed.\n("+o+": "+s+")",d.name="ChunkLoadError",d.type=o,d.request=s,a[1](d)}}),"chunk-"+r,r)}},n.O.j=r=>0===e[r];var r=(r,t)=>{var a,o,[s,d,c]=t,i=0;for(a in d)n.o(d,a)&&(n.m[a]=d[a]);if(c)var l=c(n);for(r&&r(t);i{"use strict";var e,r,t,a={},o={};function n(e){var r=o[e];if(void 0!==r)return r.exports;var t=o[e]={exports:{}};return a[e].call(t.exports,t,t.exports,n),t.exports}n.m=a,e=[],n.O=(r,t,a,o)=>{if(!t){var s=1/0;for(i=0;i=o)&&Object.keys(n.O).every((e=>n.O[e](t[c])))?t.splice(c--,1):(d=!1,o0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,a,o]},n.d=(e,r)=>{for(var t in r)n.o(r,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((r,t)=>(n.f[t](e,r),r)),[])),n.u=e=>"assets/js/"+({71:"v-45a87c2c",88:"v-3706649a",257:"v-676a79ac",349:"v-7dc58ad2",509:"v-8daa1a0e",725:"v-55bcf8d6",803:"v-745beb88",810:"v-8a14f834",909:"v-1362226a",924:"v-5c93668f",979:"v-e6eb79d8"}[e]||e)+"."+{71:"9855191b",88:"d8cdd662",257:"dd5e89aa",349:"04a5e055",509:"8a5cacf6",616:"6e2d2016",725:"c4c179aa",803:"6d7b82fd",810:"54e80974",909:"ca85e00a",924:"3ce89c08",961:"23aeaf0d",979:"53723784"}[e]+".js",n.miniCssF=e=>"assets/css/styles.1eba0707.css",n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r={},t="xzs-docs:",n.l=(e,a,o,s)=>{if(r[e])r[e].push(a);else{var d,c;if(void 0!==o)for(var i=document.getElementsByTagName("script"),l=0;l{d.onerror=d.onload=null,clearTimeout(v);var o=r[e];if(delete r[e],d.parentNode&&d.parentNode.removeChild(d),o&&o.forEach((e=>e(a))),t)return t(a)},v=setTimeout(f.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=f.bind(null,d.onerror),d.onload=f.bind(null,d.onload),c&&document.head.appendChild(d)}},n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="/xzs-mysql/",(()=>{var e={523:0,460:0};n.f.j=(r,t)=>{var a=n.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(460|523)$/.test(r))e[r]=0;else{var o=new Promise(((t,o)=>a=e[r]=[t,o]));t.push(a[2]=o);var s=n.p+n.u(r),d=new Error;n.l(s,(t=>{if(n.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var o=t&&("load"===t.type?"missing":t.type),s=t&&t.target&&t.target.src;d.message="Loading chunk "+r+" failed.\n("+o+": "+s+")",d.name="ChunkLoadError",d.type=o,d.request=s,a[1](d)}}),"chunk-"+r,r)}},n.O.j=r=>0===e[r];var r=(r,t)=>{var a,o,[s,d,c]=t,i=0;for(a in d)n.o(d,a)&&(n.m[a]=d[a]);if(c)var l=c(n);for(r&&r(t);i{"use strict";e.r(s),e.d(s,{data:()=>a});const a={key:"v-1362226a",path:"/guide/student.html",title:"",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[],filePathRelative:"guide/student.md",git:{updatedTime:1624351352e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:1}]}}},2007:(n,s,e)=>{"use strict";e.r(s),e.d(s,{default:()=>u});const a=(0,e(6252).uE)('

# 登录 (/api/user/login)

{\n    "userName": "student",  //用户名\n    "password": "",  //密码\n    "remember": false  //下次自动登录\n}\n
1
2
3
4
5
{\n        "userName": "student",  //用户名\n        "imagePath": "",  //头像\n    }\n
1
2
3
4

# 首页 (/api/student/dashboard/index)

\n
1
{\n    "fixedPaper": [  //固定试卷\n        {\n            "id": 2399,  //试卷Id\n            "name": "test33333",  //试卷名称\n            "limitStartTime": null,  //考试开始时间\n            "limitEndTime": null     //考试结束时间\n        }\n    ],\n    "timeLimitPaper": []    //时段试卷\n}\n
1
2
3
4
5
6
7
8
9
10
11

# 任务中心 (/api/student/dashboard/task)

\n
1
[\n        {\n            "id": 9,  //任务id\n            "title": "2021-04-25作业",  //任务标题\n            "paperItems": [\n                {\n                    "examPaperId": 181,   //任务试卷id\n                    "examPaperName": "第一次出卷",  //任务试卷名称\n                    "examPaperAnswerId": 579,  //答卷id\n                    "status": 2  //答卷状态\n                }\n            ]\n        }\n    ]\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 未读消息数量 (/api/student/user/message/unreadCount)

\n
1
{\n    "code": 1,\n    "message": "成功",\n    "response": 0  //未读消息数量\n}\n
1
2
3
4
5

# 学科列表 (/api/student/education/subject/list)

\n
1
{\n    "code": 1,\n    "message": "成功",\n    "response": [\n        {\n            "id": "18",  //学科id\n            "name": "英语"  //学科名称\n        }\n    ]\n}\n
1
2
3
4
5
6
7
8
9
10

# 试卷列表 (/api/student/exam/paper/pageList)

{\n    "paperType": 1, //试卷类型\n    "subjectId": 158, //学科id\n    "pageIndex": 1, //页数\n    "pageSize": 10  //每页条数\n}\n
1
2
3
4
5
6
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "total": 1,\n        "list": [\n            {\n                "id": 2520,  //试卷id\n                "name": "生理卫生",  //试卷名称\n                "questionCount": 1,  //题目数\n                "score": 20,  //试卷分数\n                "createTime": "2021-05-31 13:34:49", //创建时间\n                "createUser": 2,   //创建人\n                "subjectId": 158,  //学科\n                "subjectName": "英语",  //学科\n                "paperType": 1,   //试卷类型\n                "frameTextContentId": 9016  //试卷内容\n            }\n        ]\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 考试记录 (/api/student/exampaper/answer/pageList)

{\n    "pageIndex": 1, //页码\n    "pageSize": 10  //每页条数\n}\n
1
2
3
4
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "total": 6204,\n        "list": [\n            {\n                "id": 6534,  //试卷id\n                "createTime": "2021-06-01 17:56:38",  //创建时间\n                "userScore": "0",  //考试分数\n                "subjectName": "数学",  //考试学科\n                "subjectId": 129, //学科id\n                "questionCount": 1,  //题目数量\n                "questionCorrect": 0,  //题目正确数\n                "paperScore": "3",  //试卷总分\n                "doTime": "4 秒",  //耗时\n                "paperType": 7,  //试卷类型\n                "systemScore": "0",  //系统批改得分\n                "status": 2,   //试卷状态\n                "paperName": "智能训练试卷 - 1845",  //试卷名称\n                "userName": null  //用户名\n            }\n        ]\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 错题本 (/api/student/question/answer/page)

{\n    "pageIndex": 1, //页码\n    "pageSize": 10  //每页条数\n}\n
1
2
3
4
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "total": 17002,\n        "list": [\n            {\n                "id": 24928,   //题目id\n                "questionType": 1,  //题型\n                "createTime": "2021-06-02 16:07:11",  //创建时间\n                "subjectName": "语文",  //学科\n                "shortTitle": "666"  //题干\n            }\n        ]\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 答题详情 (/api/student/question/answer/select/25067)

{\n    "pageIndex": 1, //页码\n    "pageSize": 10  //每页条数\n}\n
1
2
3
4
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "questionVM": {\n            "id": 507,    //题目id\n            "questionType": 1,   //题目类型\n            "subjectId": 46,  //学科id\n            "title": "111",   //题干\n            "gradeLevel": 12,    //年级\n            "items": [        //选项\n                {\n                    "prefix": "A",  //选项\n                    "content": "A",  //选项内容\n                    "score": null    //选项分数\n                }\n            ],\n            "analyze": "D",     //解析\n            "correctArray": null,  //标答\n            "correct": "D",   //标答\n            "score": "2",  //分数\n            "difficult": 3,  //难度\n            "itemOrder": null  //排序\n        },\n        "questionAnswerVM": {   //用户答案\n            "id": 25067,  \n            "questionId": 507,  //题目id\n            "doRight": false,   //是否正确\n            "content": "A",   //用户答案\n            "itemOrder": 2,   //排序\n            "contentArray": null,   //用户答案\n            "score": "0",  //得分\n            "questionScore": "2"  //题目分数\n        }\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# 用户动态 (/api/student/user/log)

\n
1
{\n    "code": 1,\n    "message": "成功",\n    "response": [\n        {\n            "id": 1812,  \n            "userId": 1,  //用户id\n            "userName": "student",  //用户名\n            "realName": "Test",  //用户真实姓名\n            "content": "student 登录了学多多考试系统",  //动态内容\n            "createTime": "2021-06-08 17:12:50"  //创建时间\n        }\n    ]\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 当前用户信息 (/api/student/user/current)

\n
1
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "id": 1,\n        "userUuid": "d2d29da2-dcb3-4013-b874-727626236f47",\n        "userName": "student",  //用户名\n        "realName": "Test",  //真实姓名\n        "age": 18,   //年龄\n        "role": 1,   //角色\n        "sex": 1,  //性别\n        "birthDay": "2019-09-01 00:00:00",  //生日\n        "phone": "158800882",  //手机号\n        "lastActiveTime": "",\n        "createTime": "2019-09-07 18:55:02",\n        "modifyTime": "2021-06-09 17:04:31",\n        "status": 1,  //状态\n        "userLevel": 1,   //年级\n        "classes": "1班",  //用户班级\n        "imagePath": ""  //用户头像\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 修改用户信息 (/api/student/user/update)

{\n    "id": 1,\n    "userUuid": "d2d29da2-dcb3-4013-b874-727626236f47",\n    "userName": "student",  //用户名\n    "realName": "Test",  //真实姓名\n    "age": 18,   //年龄\n    "role": 1,   //角色\n    "sex": 1,  //性别\n    "birthDay": "2019-09-01 00:00:00",  //生日\n    "phone": "158800882",  //手机号\n    "lastActiveTime": "",\n    "createTime": "2019-09-07 18:55:02",\n    "modifyTime": "2021-06-09 17:04:31",\n    "status": 1,  //状态\n    "userLevel": 1,   //年级\n    "classes": "1班",  //用户班级\n    "imagePath": ""  //用户头像\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{\n    "code": 1,\n    "message": "成功",\n    "response": null\n}\n
1
2
3
4
5

# 消息列表 (/api/student/user/message/page)

{\n    "pageIndex": 1, //页码\n    "pageSize": 10  //每页条数\n}\n
1
2
3
4
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "total": 5,\n        "list": [\n            {\n                "id": 11,\n                "title": "rwerw",   //消息标题\n                "messageId": 10,\n                "content": "sfsdf",  //消息内容\n                "readed": true, //是否已读\n                "createTime": "2021-06-11 16:32:40",   //创建时间\n                "sendUserName": "admin"  //发送人\n            }\n        ]\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 消息标记已读 (/api/student/user/message/read/14)

\n
1
{\n    "code": 1,\n    "message": "成功",\n    "response": null\n}\n
1
2
3
4
5

# 登出 (/api/user/logout)

\n
1
{\n    "code": 1,\n    "message": "成功",\n    "response": null\n}\n
1
2
3
4
5
',45),u={render:function(n,s){return a}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-1362226a.ca85e00a.js b/docs/assets/js/v-1362226a.ca85e00a.js new file mode 100644 index 00000000..19532918 --- /dev/null +++ b/docs/assets/js/v-1362226a.ca85e00a.js @@ -0,0 +1 @@ +(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[909],{5785:(n,s,e)=>{"use strict";e.r(s),e.d(s,{data:()=>a});const a={key:"v-1362226a",path:"/guide/student.html",title:"学生端",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"登录",slug:"登录",children:[]},{level:3,title:"首页",slug:"首页",children:[]},{level:3,title:"任务中心",slug:"任务中心",children:[]},{level:3,title:"未读消息数量",slug:"未读消息数量",children:[]},{level:3,title:"学科列表",slug:"学科列表",children:[]},{level:3,title:"试卷列表",slug:"试卷列表",children:[]},{level:3,title:"考试记录",slug:"考试记录",children:[]},{level:3,title:"错题本",slug:"错题本",children:[]},{level:3,title:"答题详情",slug:"答题详情",children:[]},{level:3,title:"用户动态",slug:"用户动态",children:[]},{level:3,title:"当前用户信息",slug:"当前用户信息",children:[]},{level:3,title:"修改用户信息",slug:"修改用户信息",children:[]},{level:3,title:"消息列表",slug:"消息列表",children:[]},{level:3,title:"消息标记已读",slug:"消息标记已读",children:[]},{level:3,title:"登出",slug:"登出",children:[]}],filePathRelative:"guide/student.md",git:{updatedTime:1624546631e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:2}]}}},9412:(n,s,e)=>{"use strict";e.r(s),e.d(s,{default:()=>u});const a=(0,e(6252).uE)('

# 学生端

# 登录

  • 接口地址:/api/user/login
  • 请求参数:
{\n    "userName": "student",  //用户名\n    "password": "",  //密码\n    "remember": false  //下次自动登录\n}\n
1
2
3
4
5
  • 返回参数:
{\n        "userName": "student",  //用户名\n        "imagePath": "",  //头像\n}\n
1
2
3
4

# 首页

  • 接口地址:/api/student/dashboard/index
  • 请求参数:
\n
1
  • 返回参数:
{\n    "fixedPaper": [  //固定试卷\n        {\n            "id": 2399,  //试卷Id\n            "name": "test33333",  //试卷名称\n            "limitStartTime": null,  //考试开始时间\n            "limitEndTime": null     //考试结束时间\n        }\n    ],\n    "timeLimitPaper": []    //时段试卷\n}\n
1
2
3
4
5
6
7
8
9
10
11

# 任务中心

  • 接口地址:/api/student/dashboard/task
  • 请求参数:
\n
1
  • 返回参数:
[\n        {\n            "id": 9,  //任务id\n            "title": "2021-04-25作业",  //任务标题\n            "paperItems": [\n                {\n                    "examPaperId": 181,   //任务试卷id\n                    "examPaperName": "第一次出卷",  //任务试卷名称\n                    "examPaperAnswerId": 579,  //答卷id\n                    "status": 2  //答卷状态\n                }\n            ]\n        }\n    ]\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 未读消息数量

  • 接口地址:/api/student/user/message/unreadCount
  • 请求参数:
\n
1
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": 0  //未读消息数量\n}\n
1
2
3
4
5

# 学科列表

  • 接口地址:/api/student/education/subject/list
  • 请求参数:
\n
1
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": [\n        {\n            "id": "18",  //学科id\n            "name": "英语"  //学科名称\n        }\n    ]\n}\n
1
2
3
4
5
6
7
8
9
10

# 试卷列表

  • 接口地址:/api/student/exam/paper/pageList
  • 请求参数:
{\n    "paperType": 1, //试卷类型\n    "subjectId": 158, //学科id\n    "pageIndex": 1, //页数\n    "pageSize": 10  //每页条数\n}\n
1
2
3
4
5
6
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "total": 1,\n        "list": [\n            {\n                "id": 2520,  //试卷id\n                "name": "生理卫生",  //试卷名称\n                "questionCount": 1,  //题目数\n                "score": 20,  //试卷分数\n                "createTime": "2021-05-31 13:34:49", //创建时间\n                "createUser": 2,   //创建人\n                "subjectId": 158,  //学科\n                "subjectName": "英语",  //学科\n                "paperType": 1,   //试卷类型\n                "frameTextContentId": 9016  //试卷内容\n            }\n        ]\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 考试记录

  • 接口地址:/api/student/exampaper/answer/pageList
  • 请求参数:
{\n    "pageIndex": 1, //页码\n    "pageSize": 10  //每页条数\n}\n
1
2
3
4
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "total": 6204,\n        "list": [\n            {\n                "id": 6534,  //试卷id\n                "createTime": "2021-06-01 17:56:38",  //创建时间\n                "userScore": "0",  //考试分数\n                "subjectName": "数学",  //考试学科\n                "subjectId": 129, //学科id\n                "questionCount": 1,  //题目数量\n                "questionCorrect": 0,  //题目正确数\n                "paperScore": "3",  //试卷总分\n                "doTime": "4 秒",  //耗时\n                "paperType": 7,  //试卷类型\n                "systemScore": "0",  //系统批改得分\n                "status": 2,   //试卷状态\n                "paperName": "智能训练试卷 - 1845",  //试卷名称\n                "userName": null  //用户名\n            }\n        ]\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 错题本

  • 接口地址:/api/student/question/answer/page
  • 请求参数:
{\n    "pageIndex": 1, //页码\n    "pageSize": 10  //每页条数\n}\n
1
2
3
4
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "total": 17002,\n        "list": [\n            {\n                "id": 24928,   //题目id\n                "questionType": 1,  //题型\n                "createTime": "2021-06-02 16:07:11",  //创建时间\n                "subjectName": "语文",  //学科\n                "shortTitle": "666"  //题干\n            }\n        ]\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 答题详情

  • 接口地址:/api/student/question/answer/select/25067
  • 请求参数:
{\n    "pageIndex": 1, //页码\n    "pageSize": 10  //每页条数\n}\n
1
2
3
4
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "questionVM": {\n            "id": 507,    //题目id\n            "questionType": 1,   //题目类型\n            "subjectId": 46,  //学科id\n            "title": "111",   //题干\n            "gradeLevel": 12,    //年级\n            "items": [        //选项\n                {\n                    "prefix": "A",  //选项\n                    "content": "A",  //选项内容\n                    "score": null    //选项分数\n                }\n            ],\n            "analyze": "D",     //解析\n            "correctArray": null,  //标答\n            "correct": "D",   //标答\n            "score": "2",  //分数\n            "difficult": 3,  //难度\n            "itemOrder": null  //排序\n        },\n        "questionAnswerVM": {   //用户答案\n            "id": 25067,  \n            "questionId": 507,  //题目id\n            "doRight": false,   //是否正确\n            "content": "A",   //用户答案\n            "itemOrder": 2,   //排序\n            "contentArray": null,   //用户答案\n            "score": "0",  //得分\n            "questionScore": "2"  //题目分数\n        }\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# 用户动态

  • 接口地址:/api/student/user/log
  • 请求参数:
\n
1
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": [\n        {\n            "id": 1812,  \n            "userId": 1,  //用户id\n            "userName": "student",  //用户名\n            "realName": "Test",  //用户真实姓名\n            "content": "student 登录了学多多考试系统",  //动态内容\n            "createTime": "2021-06-08 17:12:50"  //创建时间\n        }\n    ]\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 当前用户信息

  • 接口地址:/api/student/user/current
  • 请求参数:
\n
1
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "id": 1,\n        "userUuid": "d2d29da2-dcb3-4013-b874-727626236f47",\n        "userName": "student",  //用户名\n        "realName": "Test",  //真实姓名\n        "age": 18,   //年龄\n        "role": 1,   //角色\n        "sex": 1,  //性别\n        "birthDay": "2019-09-01 00:00:00",  //生日\n        "phone": "158800882",  //手机号\n        "lastActiveTime": "",\n        "createTime": "2019-09-07 18:55:02",\n        "modifyTime": "2021-06-09 17:04:31",\n        "status": 1,  //状态\n        "userLevel": 1,   //年级\n        "classes": "1班",  //用户班级\n        "imagePath": ""  //用户头像\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 修改用户信息

  • 接口地址:/api/student/user/update
  • 请求参数:
{\n    "id": 1,\n    "userUuid": "d2d29da2-dcb3-4013-b874-727626236f47",\n    "userName": "student",  //用户名\n    "realName": "Test",  //真实姓名\n    "age": 18,   //年龄\n    "role": 1,   //角色\n    "sex": 1,  //性别\n    "birthDay": "2019-09-01 00:00:00",  //生日\n    "phone": "158800882",  //手机号\n    "lastActiveTime": "",\n    "createTime": "2019-09-07 18:55:02",\n    "modifyTime": "2021-06-09 17:04:31",\n    "status": 1,  //状态\n    "userLevel": 1,   //年级\n    "classes": "1班",  //用户班级\n    "imagePath": ""  //用户头像\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": null\n}\n
1
2
3
4
5

# 消息列表

  • 接口地址:/api/student/user/message/page
  • 请求参数:
{\n    "pageIndex": 1, //页码\n    "pageSize": 10  //每页条数\n}\n
1
2
3
4
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "total": 5,\n        "list": [\n            {\n                "id": 11,\n                "title": "rwerw",   //消息标题\n                "messageId": 10,\n                "content": "sfsdf",  //消息内容\n                "readed": true, //是否已读\n                "createTime": "2021-06-11 16:32:40",   //创建时间\n                "sendUserName": "admin"  //发送人\n            }\n        ]\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 消息标记已读

  • 接口地址:/api/student/user/message/read/14
  • 请求参数:
\n
1
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": null\n}\n
1
2
3
4
5

# 登出

  • 接口地址:/api/user/logout
  • 请求参数:
\n
1
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": null\n}\n
1
2
3
4
5
',76),u={render:function(n,s){return a}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-3c5293eb.8d96dd51.js b/docs/assets/js/v-3c5293eb.8d96dd51.js deleted file mode 100644 index 0d92d315..00000000 --- a/docs/assets/js/v-3c5293eb.8d96dd51.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[993],{2203:(e,t,i)=>{"use strict";i.r(t),i.d(t,{data:()=>s});const s={key:"v-3c5293eb",path:"/guide/api.html",title:"",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[],filePathRelative:"guide/api.md",git:{updatedTime:1624351352e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:1}]}}},8385:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>a});var s=i(6252);const a={render:function(e,t){return(0,s.wg)(),(0,s.j4)("p",null,"⠀")}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-45a87c2c.05fe7f46.js b/docs/assets/js/v-45a87c2c.05fe7f46.js deleted file mode 100644 index 4f59e346..00000000 --- a/docs/assets/js/v-45a87c2c.05fe7f46.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[71],{8992:(e,s,n)=>{"use strict";n.r(s),n.d(s,{data:()=>a});const a={key:"v-45a87c2c",path:"/guide/wx.html",title:"",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[],filePathRelative:"guide/wx.md",git:{updatedTime:1624351352e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:1}]}}},9509:(e,s,n)=>{"use strict";n.r(s),n.d(s,{default:()=>t});const a=(0,n(6252).uE)('

# 登录 (/api/wx/student/auth/bind)

     userName: student  //用户名\n     password: 123456   //密码\n     code: 023BNuFa1CQ14B07KVHa16RHM94BNuF0   //授权码\n
1
2
3
{\n    "code": 1,\n    "message": "成功",\n    "response": "950efd96-ecd1-4482-9204-c54cd3325a8a"  //登录Token\n}\n
1
2
3
4
5
',3),t={render:function(e,s){return a}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-45a87c2c.9855191b.js b/docs/assets/js/v-45a87c2c.9855191b.js new file mode 100644 index 00000000..7c24614a --- /dev/null +++ b/docs/assets/js/v-45a87c2c.9855191b.js @@ -0,0 +1 @@ +(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[71],{8992:(e,s,n)=>{"use strict";n.r(s),n.d(s,{data:()=>a});const a={key:"v-45a87c2c",path:"/guide/wx.html",title:"微信小程序端",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"登录",slug:"登录",children:[]}],filePathRelative:"guide/wx.md",git:{updatedTime:1624546631e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:2}]}}},5191:(e,s,n)=>{"use strict";n.r(s),n.d(s,{default:()=>l});const a=(0,n(6252).uE)('

# 微信小程序端

# 登录

  • 接口地址:/api/wx/student/auth/bind
  • 请求参数:
     userName: student  //用户名\n     password: 123456   //密码\n     code: 023BNuFa1CQ14B07KVHa16RHM94BNuF0   //授权码\n
1
2
3
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": "950efd96-ecd1-4482-9204-c54cd3325a8a"  //登录Token\n}\n
1
2
3
4
5
',6),l={render:function(e,s){return a}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-55bcf8d6.6e5b1ac1.js b/docs/assets/js/v-55bcf8d6.6e5b1ac1.js deleted file mode 100644 index ab4c5a2a..00000000 --- a/docs/assets/js/v-55bcf8d6.6e5b1ac1.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[725],{927:(n,s,a)=>{"use strict";a.r(s),a.d(s,{data:()=>e});const e={key:"v-55bcf8d6",path:"/guide/admin.html",title:"",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[],filePathRelative:"guide/admin.md",git:{updatedTime:1624351352e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:1}]}}},9566:(n,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>u});const e=(0,a(6252).uE)('

# 登录 (/api/user/login)

{\n    "userName": "admin",  //用户名\n    "password": "",  //密码\n    "remember": false  //记住我\n}\n
1
2
3
4
5
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "id": null,\n        "userUuid": null,\n        "userName": "admin",  //用户名\n        "password": null,\n        "realName": null,\n        "age": null,\n        "sex": null,\n        "birthDay": null,\n        "userLevel": null,\n        "phone": null,\n        "role": null,\n        "status": null,\n        "imagePath": null,\n        "createTime": null,\n        "modifyTime": null,\n        "lastActiveTime": null,\n        "deleted": null,\n        "wxOpenId": null\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 首页 (/api/admin/dashboard/index)

\n
1
 {\n    "examPaperCount": 2413,  //试卷总数\n    "questionCount": 1025,  //题目总数\n    "doExamPaperCount": 6148,  //总答卷数\n    "doQuestionCount": 23945,  //总题数\n    "mothDayUserActionValue": [  //活跃度\n        85\n    ],\n    "mothDayDoExamQuestionValue": [  //月做题数\n        22\n    ],\n    "mothDayText": [  //本月天数\n        "1"\n    ]\n}    \n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 学生列表 (/api/admin/user/page/list)

{\n    "userName": "",  //用户名\n    "role": 1,   //角色\n    "pageIndex": 1,  //页码\n    "pageSize": 10   //每页条数\n}\n
1
2
3
4
5
6
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "total": 81,  //总数\n        "list": [\n            {\n                "id": 100,     //用户id\n                "userUuid": "fd31ab62-c32f-433c-8dc4-c07e653d390a",  //用户uuid\n                "userName": "王",  //用户名\n                "realName": null,  //真实姓名\n                "age": null,  //年龄\n                "role": 1,  //角色\n                "sex": null,  //性别\n                "birthDay": "",  //出生日期          \n                "phone": null,   //手机号                 \n                "lastActiveTime": "2021-06-21 20:01:26",  //最后活动时间\n                "createTime": "2021-06-21 20:01:26",  //创建时间\n                "modifyTime": "2021-06-21 20:01:35",  //修改时间\n                "status": 1,  //状态\n                "userLevel": 1,  //年级\n                "imagePath": null   //头像\n            }\n        ]\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
',9),u={render:function(n,s){return e}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-55bcf8d6.c4c179aa.js b/docs/assets/js/v-55bcf8d6.c4c179aa.js new file mode 100644 index 00000000..6cdb2ac9 --- /dev/null +++ b/docs/assets/js/v-55bcf8d6.c4c179aa.js @@ -0,0 +1 @@ +(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[725],{927:(n,s,e)=>{"use strict";e.r(s),e.d(s,{data:()=>a});const a={key:"v-55bcf8d6",path:"/guide/admin.html",title:"管理端",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"登录",slug:"登录",children:[]},{level:3,title:"首页",slug:"首页",children:[]},{level:3,title:"学生列表",slug:"学生列表",children:[]},{level:3,title:"学生编辑",slug:"学生编辑",children:[]}],filePathRelative:"guide/admin.md",git:{updatedTime:1624546631e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:3}]}}},9465:(n,s,e)=>{"use strict";e.r(s),e.d(s,{default:()=>u});const a=(0,e(6252).uE)('

# 管理端

# 登录

  • 接口地址:/api/user/login
  • 请求参数:
{\n    "userName": "admin",  //用户名\n    "password": "",  //密码\n    "remember": false  //记住我\n}\n
1
2
3
4
5
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "id": null,\n        "userUuid": null,\n        "userName": "admin",  //用户名\n        "password": null,\n        "realName": null,\n        "age": null,\n        "sex": null,\n        "birthDay": null,\n        "userLevel": null,\n        "phone": null,\n        "role": null,\n        "status": null,\n        "imagePath": null,\n        "createTime": null,\n        "modifyTime": null,\n        "lastActiveTime": null,\n        "deleted": null,\n        "wxOpenId": null\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 首页

  • 接口地址:/api/admin/dashboard/index
  • 请求参数:
\n
1
  • 返回参数:
 {\n    "examPaperCount": 2413,  //试卷总数\n    "questionCount": 1025,  //题目总数\n    "doExamPaperCount": 6148,  //总答卷数\n    "doQuestionCount": 23945,  //总题数\n    "mothDayUserActionValue": [  //活跃度\n        85\n    ],\n    "mothDayDoExamQuestionValue": [  //月做题数\n        22\n    ],\n    "mothDayText": [  //本月天数\n        "1"\n    ]\n}    \n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 学生列表

  • 接口地址:/api/admin/user/page/list
  • 请求参数:
{\n    "userName": "",  //用户名\n    "role": 1,   //角色\n    "pageIndex": 1,  //页码\n    "pageSize": 10   //每页条数\n}\n
1
2
3
4
5
6
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "total": 81,  //总数\n        "list": [\n            {\n                "id": 100,     //用户id\n                "userUuid": "fd31ab62-c32f-433c-8dc4-c07e653d390a",  //用户uuid\n                "userName": "王",  //用户名\n                "realName": null,  //真实姓名\n                "age": null,  //年龄\n                "role": 1,  //角色\n                "sex": null,  //性别\n                "birthDay": "",  //出生日期          \n                "phone": null,   //手机号                 \n                "lastActiveTime": "2021-06-21 20:01:26",  //最后活动时间\n                "createTime": "2021-06-21 20:01:26",  //创建时间\n                "modifyTime": "2021-06-21 20:01:35",  //修改时间\n                "status": 1,  //状态\n                "userLevel": 1,  //年级\n                "imagePath": null   //头像\n            }\n        ]\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 学生编辑

  • 接口地址:/api/admin/user/edit
  • 请求参数:
{\n    "id": null,\n    "userName": "testzz",  //用户名\n    "password": "123456",  //密码\n    "realName": "tesx",  //真实姓名\n    "role": 1,  //角色\n    "status": 1, //状态\n    "age": "", //年龄\n    "sex": "", //性别\n    "birthDay": null, //生日\n    "phone": null,  //手机号\n    "userLevel": 1  //年级\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
  • 返回参数:
{\n    "code": 1,\n    "message": "成功",\n    "response": {\n        "id": 109,\n        "userUuid": "321dec89-0656-4736-ae4c-e2b07f4fcc67",  //用户id\n        "userName": "testzz", //用户名\n        "password": "" //密码\n        "realName": "tesx",  //真实姓名\n        "age": null, //年龄\n        "sex": null, //性别\n        "birthDay": null, //生日\n        "userLevel": 1, //年级\n        "phone": null, //手机号\n        "role": 1, //角色\n        "status": 1, //状态\n        "imagePath": null, //头像\n        "createTime": 1624538837259, //创建日期\n        "modifyTime": null, //修改时间\n        "lastActiveTime": 1624538837259, //最后活动时间\n        "deleted": false, //是否删除\n        "wxOpenId": null //微信openId\n    }\n}\n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
',21),u={render:function(n,s){return a}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-5c93668f.3201de4a.js b/docs/assets/js/v-5c93668f.3201de4a.js deleted file mode 100644 index bf0e60fa..00000000 --- a/docs/assets/js/v-5c93668f.3201de4a.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[924],{4158:(l,i,e)=>{"use strict";e.r(i),e.d(i,{data:()=>t});const t={key:"v-5c93668f",path:"/guide/feature.html",title:"",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"学生系统功能",slug:"学生系统功能",children:[]},{level:3,title:"管理系统功能",slug:"管理系统功能",children:[]},{level:3,title:"小程序功能",slug:"小程序功能",children:[]}],filePathRelative:"guide/feature.md",git:{updatedTime:1624351352e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:1}]}}},8486:(l,i,e)=>{"use strict";e.r(i),e.d(i,{default:()=>a});const t=(0,e(6252).uE)('

# 学生系统功能

  • 登录、注册: 注册时要选年级,过滤不同年级的试卷, 账号为:student/123456
  • 首页: 任务中心、固定试卷、时段试卷、试卷可以重复做
  • 试卷中心: 包含了所有能做的试卷,按学科来过滤和分页
  • 考试记录: 所有的试卷考试记录在此处分页,可以查看试卷结果、用时、得分、自行批改等
  • 错题本: 所有做错的题目,可以看到做题的结果、分数、难度、解析、正确答案等
  • 个人中心: 个人日志记录
  • 消息: 消息通知
  • 试卷答题和试卷查看: 展示出题目的基本信息和需要填写的内容

# 管理系统功能

  • 登录: 账号为: admin/123456
  • 主页: 包含了试卷、题目、做卷数、做题数、用户活跃度的统计功能,活跃度和做题数是按月统计
  • 用户管理: 对不同角色 学生、管理员 的增删改查管理功能
  • 卷题管理:
    1. 试卷列表:试卷的增删改查,新增包含选择学科、试卷类型、试卷名称、考试时间,试卷内容包含添加大标题,然后添加题目到此试卷中,组成一套完整的试卷
    2. 题目列表:题目的增删改查,目前题型包含单选题、多选题、判断题、填空题、简单题,支持图片、公式等。
  • 任务管理:对任务进行修改
  • 教育管理:对不同年级的学科进行增删改查
  • 答卷管理:查看学生成绩
  • 消息中心:可以对多个用户进行消息发送
  • 日志中心:用户的基本操作进行日志记录,了解用户使用过情况

# 小程序功能

  • 用户登录登出功能,登录会自动绑定微信账号,登出会解绑
  • 首页包含任务中心、固定试卷、时段试卷,和web端保持一致
  • 试卷模块,固定试卷和时段试卷的分页查询,下拉加载更多,上拉刷新当前数据
  • 记录模块,考试结果的分页,包含了试卷基本信息
  • 我的模块,包含个人资料的修改,个人动态,消息中心模块
',6),a={render:function(l,i){return t}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-5c93668f.3ce89c08.js b/docs/assets/js/v-5c93668f.3ce89c08.js new file mode 100644 index 00000000..06a251ac --- /dev/null +++ b/docs/assets/js/v-5c93668f.3ce89c08.js @@ -0,0 +1 @@ +(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[924],{4158:(l,i,e)=>{"use strict";e.r(i),e.d(i,{data:()=>a});const a={key:"v-5c93668f",path:"/guide/feature.html",title:"功能列表",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"学生系统功能",slug:"学生系统功能",children:[]},{level:3,title:"管理系统功能",slug:"管理系统功能",children:[]},{level:3,title:"小程序功能",slug:"小程序功能",children:[]}],filePathRelative:"guide/feature.md",git:{updatedTime:1624546631e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:2}]}}},9820:(l,i,e)=>{"use strict";e.r(i),e.d(i,{default:()=>t});const a=(0,e(6252).uE)('

# 功能列表

# 学生系统功能

  • 登录、注册: 注册时要选年级,过滤不同年级的试卷, 账号为:student/123456
  • 首页: 任务中心、固定试卷、时段试卷、试卷可以重复做
  • 试卷中心: 包含了所有能做的试卷,按学科来过滤和分页
  • 考试记录: 所有的试卷考试记录在此处分页,可以查看试卷结果、用时、得分、自行批改等
  • 错题本: 所有做错的题目,可以看到做题的结果、分数、难度、解析、正确答案等
  • 个人中心: 个人日志记录
  • 消息: 消息通知
  • 试卷答题和试卷查看: 展示出题目的基本信息和需要填写的内容

# 管理系统功能

  • 登录: 账号为: admin/123456
  • 主页: 包含了试卷、题目、做卷数、做题数、用户活跃度的统计功能,活跃度和做题数是按月统计
  • 用户管理: 对不同角色 学生、管理员 的增删改查管理功能
  • 卷题管理:
    1. 试卷列表:试卷的增删改查,新增包含选择学科、试卷类型、试卷名称、考试时间,试卷内容包含添加大标题,然后添加题目到此试卷中,组成一套完整的试卷
    2. 题目列表:题目的增删改查,目前题型包含单选题、多选题、判断题、填空题、简单题,支持图片、公式等。
  • 任务管理:对任务进行修改
  • 教育管理:对不同年级的学科进行增删改查
  • 答卷管理:查看学生成绩
  • 消息中心:可以对多个用户进行消息发送
  • 日志中心:用户的基本操作进行日志记录,了解用户使用过情况

# 小程序功能

  • 用户登录登出功能,登录会自动绑定微信账号,登出会解绑
  • 首页包含任务中心、固定试卷、时段试卷,和web端保持一致
  • 试卷模块,固定试卷和时段试卷的分页查询,下拉加载更多,上拉刷新当前数据
  • 记录模块,考试结果的分页,包含了试卷基本信息
  • 我的模块,包含个人资料的修改,个人动态,消息中心模块
',7),t={render:function(l,i){return a}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-676a79ac.c4dc1daf.js b/docs/assets/js/v-676a79ac.c4dc1daf.js deleted file mode 100644 index d645c177..00000000 --- a/docs/assets/js/v-676a79ac.c4dc1daf.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[257],{9326:(l,e,i)=>{"use strict";i.r(e),i.d(e,{data:()=>n});const n={key:"v-676a79ac",path:"/guide/video.html",title:"",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"第一部分:基础软件安装",slug:"第一部分-基础软件安装",children:[]},{level:3,title:"第二部分:本地代码调试运行",slug:"第二部分-本地代码调试运行",children:[]},{level:3,title:"第三部分:微信小程序开发",slug:"第三部分-微信小程序开发",children:[]},{level:3,title:"第四部分:代码配置介绍",slug:"第四部分-代码配置介绍",children:[]},{level:3,title:"第五部分:win系统部署",slug:"第五部分-win系统部署",children:[]},{level:3,title:"第六部分:CentOS系统部署",slug:"第六部分-centos系统部署",children:[]},{level:3,title:"第七部分:使用手册",slug:"第七部分-使用手册",children:[]}],filePathRelative:"guide/video.md",git:{updatedTime:1624351352e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:1}]}}},3368:(l,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>Zl});var n=i(6252);const r=(0,n.Wm)("h3",{id:"第一部分-基础软件安装"},[(0,n.Wm)("a",{class:"header-anchor",href:"#第一部分-基础软件安装"},"#"),(0,n.Uk)(" 第一部分:基础软件安装")],-1),t=(0,n.Uk)("打开学之思开源仓库地址:"),s={href:"https://gitee.com/mindskip/xzs-mysql",target:"_blank",rel:"noopener noreferrer"},a=(0,n.Uk)("https://gitee.com/mindskip/xzs-mysql"),m=(0,n.Wm)("li",null,"加群QQ交流群,找管理员拿到数据库脚本",-1),o=(0,n.Wm)("li",null,"工具介绍",-1),d=(0,n.uE)('
    VC_redist.x64 :  Redis数据库依赖、mysql依赖,先安装这个\n    ideaIU-2020.3.3 : java开发工具\n    mysql-installer-community-8.0.19.0 : Mysql数据库安装包\n    navicat150_mysql_cs_x64 : Mysql数据库连接工具\n    rdm-2021.3.0.0 :Redis连接工具\n    Redis-x64-3.0.504 : Redis内存数据库\n    WebStorm-2020.3.3:  前端开发工具\n    jdk-8u241-windows-x64:java运行环境\n    node-v12.16.1-x64:前端vue运行环境\n
1
2
3
4
5
6
7
8
9
',1),u=(0,n.Wm)("li",null,"工具安装",-1),c=(0,n.Wm)("li",null,"所有准备工具安装已结束,下一步是调试开发环境",-1),p=(0,n.Uk)("哔哩哔哩:"),h={href:"https://www.bilibili.com/video/BV1rp4y1b7Se",target:"_blank",rel:"noopener noreferrer"},b=(0,n.Uk)("https://www.bilibili.com/video/BV1rp4y1b7Se"),W=(0,n.Uk)("腾讯课堂:"),k={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286748855580820&type=1024&vid=5285890818155010100",target:"_blank",rel:"noopener noreferrer"},w=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286748855580820&type=1024&vid=5285890818155010100"),v=(0,n.Wm)("h3",{id:"第二部分-本地代码调试运行"},[(0,n.Wm)("a",{class:"header-anchor",href:"#第二部分-本地代码调试运行"},"#"),(0,n.Uk)(" 第二部分:本地代码调试运行")],-1),g=(0,n.Uk)("打开仓库地址 "),x={href:"https://gitee.com/mindskip/xzs-mysql",target:"_blank",rel:"noopener noreferrer"},f=(0,n.Uk)("https://gitee.com/mindskip/xzs-mysql"),q=(0,n.Uk)(" ,下载源代码"),y=(0,n.Uk)("打开教学文档 "),U={href:"https://www.mindskip.net:999",target:"_blank",rel:"noopener noreferrer"},_=(0,n.Uk)("https://www.mindskip.net:999"),V=(0,n.uE)("
  • 修改java的镜像,改为阿里云镜像,默认是国外的,速度比较慢。默认是没有.m2文件夹的,可以自己新建一个。
  • 打开数据库连接工具,导入mysql脚本
  • 打开java代码,等待组件自动下载完成即可启动
  • 添加sdk,建议使用1.8
  • 启动后端程序
  • 修改下配置文件,我们是本地连接,需要改下数据库连接地址
  • 再打开教程,开始启动前端开发工具
  • 前端依赖组件默认也是国外的,可按教程修为成国内的
  • 组件下载完成,执行运行命令
  • 学生前端也同样操作,启动
  • 建议先将package-lock.json文件删掉,再执行npm install命令
  • 前后端都已启动完成
  • ",12),j=(0,n.Uk)("哔哩哔哩:"),z={href:"https://www.bilibili.com/video/BV1Qh411S7RY",target:"_blank",rel:"noopener noreferrer"},B=(0,n.Uk)("https://www.bilibili.com/video/BV1Qh411S7RY"),R=(0,n.Uk)("腾讯课堂:"),C={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286753150548116&type=1024&vid=5285890818155251193",target:"_blank",rel:"noopener noreferrer"},S=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286753150548116&type=1024&vid=5285890818155251193"),D=(0,n.Wm)("h3",{id:"第三部分-微信小程序开发"},[(0,n.Wm)("a",{class:"header-anchor",href:"#第三部分-微信小程序开发"},"#"),(0,n.Uk)(" 第三部分:微信小程序开发")],-1),X=(0,n.Wm)("li",null,"去官网下载小程序开发工具,并安装",-1),A=(0,n.Wm)("li",null,"去微信小程序官网 (微信公众平台),创建小程序",-1),E=(0,n.Wm)("li",null,"登录成功后,点击左边菜单开发下面的开发管理,在点击开发设置",-1),Y=(0,n.Wm)("li",null,"拿到appId、AppSecret后配置到代码中",-1),M=(0,n.Wm)("li",null,"修改代码配置后,重新启动后台程序",-1),Q=(0,n.Wm)("li",null,"打开微信开发工具,导入微信小程序代码",-1),O=(0,n.Uk)("微信接口默认是"),P={href:"http://localhost:8000",target:"_blank",rel:"noopener noreferrer"},F=(0,n.Uk)("http://localhost:8000"),I=(0,n.Uk)(",默认就可以了,和后端端口保持一致"),K=(0,n.Wm)("li",null,"启动后需要修改appid,和代码中的保持一致",-1),H=(0,n.Wm)("li",null,"微信小程序就启动成功了",-1),L=(0,n.Uk)("哔哩哔哩:"),N={href:"https://www.bilibili.com/video/BV1mK4y127C5",target:"_blank",rel:"noopener noreferrer"},T=(0,n.Uk)("https://www.bilibili.com/video/BV1mK4y127C5"),G=(0,n.Uk)("腾讯课堂:"),J={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286757445515412&type=1024&vid=5285890818155261437",target:"_blank",rel:"noopener noreferrer"},Z=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286757445515412&type=1024&vid=5285890818155261437"),$=(0,n.Wm)("h3",{id:"第四部分-代码配置介绍"},[(0,n.Wm)("a",{class:"header-anchor",href:"#第四部分-代码配置介绍"},"#"),(0,n.Uk)(" 第四部分:代码配置介绍")],-1),ll=(0,n.Wm)("li",null,"下面介绍下常用的配置",-1),el=(0,n.Wm)("li",null,"后端配置主要在 yml 文件中",-1),il=(0,n.Wm)("li",null,"七牛云配置完成后,测试一下,重新启动,加载配置文件",-1),nl=(0,n.Wm)("li",null,"图片替换成功,说明七牛云配置是ok的",-1),rl=(0,n.Wm)("li",null,"application-prod.yml 用于正式环境的配置,和dev基本是一样的",-1),tl=(0,n.Wm)("li",null,"学生端vue配置",-1),sl=(0,n.Wm)("li",null,"管理端vue配置",-1),al=(0,n.Wm)("li",null,"微信小程序配置",-1),ml=(0,n.Wm)("li",null,"配置都已经介绍完毕",-1),ol=(0,n.Uk)("哔哩哔哩:"),dl={href:"https://www.bilibili.com/video/BV19V411n7XV",target:"_blank",rel:"noopener noreferrer"},ul=(0,n.Uk)("https://www.bilibili.com/video/BV19V411n7XV"),cl=(0,n.Uk)("腾讯课堂:"),pl={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286761740482708&type=1024&vid=5285890818155250943",target:"_blank",rel:"noopener noreferrer"},hl=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286761740482708&type=1024&vid=5285890818155250943"),bl=(0,n.uE)('

    # 第五部分:win系统部署

    • 下面介绍下在win平台下怎么部署学之思,包含win所有平台
    • 先预装好下面软件,不会的可以看第一部分视频
        VC_redist.x64 :  Redis数据库依赖、mysql依赖,先安装这个\n    mysql-installer-community-8.0.19.0 : Mysql数据库安装包\n    navicat150_mysql_cs_x64 : Mysql数据库连接工具\n    Redis-x64-3.0.504 : Redis内存数据库\n    jdk-8u241-windows-x64:java运行环\n
    1
    2
    3
    4
    5
    • 按文档教程中的项目部署操作来
    • 首先展示集成部署
    • 这个jar包就是打包之后的运行程序,我们使用命令运行
       java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod  xzs-3.3.0.jar \n
    1
    ',5),Wl=(0,n.uE)('
  • 访问成功,说明部署没问题
  • 下面我们看下前后的分离部署,需要安装nginx
  • 访问localhost,看到这个页面就说nginx启动没问题
  • 配置学之思
  • 先启动后端程序
  • 再修改前端配置,启动前端程序,访问地址没问题,就说明部署成功了
  • 这里需要注意两点:
    1. 8001端口默认是微信开发工具的启动端口,建议先关闭微信开发工具,再启动nginx
    1. root C:/xzs/release/web; 这里的路径要填反斜杠,不能直接用win的复制路径
  • win系统部署结束
  • ',10),kl=(0,n.Uk)("哔哩哔哩:"),wl={href:"https://www.bilibili.com/video/BV1XA41157P4",target:"_blank",rel:"noopener noreferrer"},vl=(0,n.Uk)("https://www.bilibili.com/video/BV1XA41157P4"),gl=(0,n.Uk)("腾讯课堂:"),xl={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286766035450004&type=1024&vid=5285890818058778391",target:"_blank",rel:"noopener noreferrer"},fl=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286766035450004&type=1024&vid=5285890818058778391"),ql=(0,n.uE)('

    # 第六部分:CentOS系统部署

    • 下载好xshell和xftp,这个工具用于连接centos服务器的
    • 可在群文件中找到Xftp-7.0.0063p 和 Xshell-7.0.0065p ,直接安装
    • 打开xshell , 连接准备好的centos服务器
    • 服务器中要安装好 redis、mysql 8 、jdk 1.8、nginx , 可以自行搜索教程进行安装
    • 安装好后,我们检测下是否都在运行
    • 创建数据库xzs、导入xzs-mysql.sql脚本
    • 登录mysql,执行导入命令:
        mysql -u root -p -D xzs < /usr/local/xzs/sql/xzs-mysql.sql\n
    1
    • 数据导入成功后,可以登录mysql数据库,检查一下是否成功
    • 打包jar文件,注意修改配置文件application-prod.yml ,正式环境用的这个文件,这里里面的数据库连接地址和账号等,由于都是服务器本地的,都用localhost即可
    • 上传jar包到服务器中
    • 启动学之思后端程序
        nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod  xzs-3.3.0.jar  > start1.log  2>&1 &\n
    1
    ',5),yl=(0,n.Wm)("li",null,"打开浏览器,检查是否启动成功",-1),Ul=(0,n.Wm)("li",null,"集成部署已经完成,下面介绍下前后端分离部署,分离部署前端页面要放在nginx中,需要配置nginx",-1),_l=(0,n.Wm)("li",null,"上传成功后配置nginx,nginx默认配置目录为 /etc/nginx/conf.d ,在里面新建xzs.conf配置文件即可",-1),Vl=(0,n.Wm)("li",null,"执行命令:nginx -s reload ,重新加载nginx配置文件",-1),jl=(0,n.Wm)("li",null,"在浏览器中能访问成功说明部署正确",-1),zl=(0,n.Wm)("li",null,"docker部署,先安装好docker",-1),Bl=(0,n.Wm)("li",null,"执行教程中的命令,下载镜像,运行容器",-1),Rl=(0,n.Wm)("li",null,"打开浏览器验证下是否能访问,访问成功表示docker版运行正常",-1),Cl=(0,n.Uk)("哔哩哔哩:"),Sl={href:"https://www.bilibili.com/video/BV17b4y1D7Re",target:"_blank",rel:"noopener noreferrer"},Dl=(0,n.Uk)("https://www.bilibili.com/video/BV17b4y1D7Re"),Xl=(0,n.Uk)("腾讯课堂:"),Al={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286770330417300&type=1024&vid=5285890818155321589",target:"_blank",rel:"noopener noreferrer"},El=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286770330417300&type=1024&vid=5285890818155321589"),Yl=(0,n.Wm)("h3",{id:"第七部分-使用手册"},[(0,n.Wm)("a",{class:"header-anchor",href:"#第七部分-使用手册"},"#"),(0,n.Uk)(" 第七部分:使用手册")],-1),Ml=(0,n.Wm)("li",null,"用户管理:学生添加、管理员添加",-1),Ql=(0,n.Wm)("li",null,"题目管理:添加题目、单选题、多选题、判断题、填空题、解答题",-1),Ol=(0,n.Wm)("li",null,"教育管理:添加学科",-1),Pl=(0,n.Wm)("li",null,"试卷管理:添加试卷 固定试卷 时段试卷 任务试卷",-1),Fl=(0,n.Wm)("li",null,"任务管理:添加任务",-1),Il=(0,n.Wm)("li",null,"消息管理:消息发送",-1),Kl=(0,n.Wm)("li",null,"成绩管理:查看成绩",-1),Hl=(0,n.Uk)("哔哩哔哩:"),Ll={href:"https://www.bilibili.com/video/BV1884y1F71Y",target:"_blank",rel:"noopener noreferrer"},Nl=(0,n.Uk)("https://www.bilibili.com/video/BV1884y1F71Y"),Tl=(0,n.Uk)("腾讯课堂:"),Gl={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286774625384596&type=1024&vid=5285890818155321700",target:"_blank",rel:"noopener noreferrer"},Jl=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286774625384596&type=1024&vid=5285890818155321700"),Zl={render:function(l,e){const i=(0,n.up)("OutboundLink");return(0,n.wg)(),(0,n.j4)(n.HY,null,[r,(0,n.Wm)("ul",null,[(0,n.Wm)("li",null,[t,(0,n.Wm)("a",s,[a,(0,n.Wm)(i)])]),m,o]),d,(0,n.Wm)("ul",null,[u,c,(0,n.Wm)("li",null,[p,(0,n.Wm)("a",h,[b,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[W,(0,n.Wm)("a",k,[w,(0,n.Wm)(i)])])]),v,(0,n.Wm)("ul",null,[(0,n.Wm)("li",null,[g,(0,n.Wm)("a",x,[f,(0,n.Wm)(i)]),q]),(0,n.Wm)("li",null,[y,(0,n.Wm)("a",U,[_,(0,n.Wm)(i)])]),V,(0,n.Wm)("li",null,[j,(0,n.Wm)("a",z,[B,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[R,(0,n.Wm)("a",C,[S,(0,n.Wm)(i)])])]),D,(0,n.Wm)("ul",null,[X,A,E,Y,M,Q,(0,n.Wm)("li",null,[O,(0,n.Wm)("a",P,[F,(0,n.Wm)(i)]),I]),K,H,(0,n.Wm)("li",null,[L,(0,n.Wm)("a",N,[T,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[G,(0,n.Wm)("a",J,[Z,(0,n.Wm)(i)])])]),$,(0,n.Wm)("ul",null,[ll,el,il,nl,rl,tl,sl,al,ml,(0,n.Wm)("li",null,[ol,(0,n.Wm)("a",dl,[ul,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[cl,(0,n.Wm)("a",pl,[hl,(0,n.Wm)(i)])])]),bl,(0,n.Wm)("ul",null,[Wl,(0,n.Wm)("li",null,[kl,(0,n.Wm)("a",wl,[vl,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[gl,(0,n.Wm)("a",xl,[fl,(0,n.Wm)(i)])])]),ql,(0,n.Wm)("ul",null,[yl,Ul,_l,Vl,jl,zl,Bl,Rl,(0,n.Wm)("li",null,[Cl,(0,n.Wm)("a",Sl,[Dl,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[Xl,(0,n.Wm)("a",Al,[El,(0,n.Wm)(i)])])]),Yl,(0,n.Wm)("ul",null,[Ml,Ql,Ol,Pl,Fl,Il,Kl,(0,n.Wm)("li",null,[Hl,(0,n.Wm)("a",Ll,[Nl,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[Tl,(0,n.Wm)("a",Gl,[Jl,(0,n.Wm)(i)])])])],64)}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-676a79ac.dd5e89aa.js b/docs/assets/js/v-676a79ac.dd5e89aa.js new file mode 100644 index 00000000..2b9c89ec --- /dev/null +++ b/docs/assets/js/v-676a79ac.dd5e89aa.js @@ -0,0 +1 @@ +(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[257],{9326:(l,e,i)=>{"use strict";i.r(e),i.d(e,{data:()=>n});const n={key:"v-676a79ac",path:"/guide/video.html",title:"视频教程",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"第一部分:基础软件安装",slug:"第一部分-基础软件安装",children:[]},{level:3,title:"第二部分:本地代码调试运行",slug:"第二部分-本地代码调试运行",children:[]},{level:3,title:"第三部分:微信小程序开发",slug:"第三部分-微信小程序开发",children:[]},{level:3,title:"第四部分:代码配置介绍",slug:"第四部分-代码配置介绍",children:[]},{level:3,title:"第五部分:win系统部署",slug:"第五部分-win系统部署",children:[]},{level:3,title:"第六部分:CentOS系统部署",slug:"第六部分-centos系统部署",children:[]},{level:3,title:"第七部分:使用手册",slug:"第七部分-使用手册",children:[]}],filePathRelative:"guide/video.md",git:{updatedTime:1624546631e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:2}]}}},2295:(l,e,i)=>{"use strict";i.r(e),i.d(e,{default:()=>$l});var n=i(6252);const r=(0,n.Wm)("h1",{id:"视频教程"},[(0,n.Wm)("a",{class:"header-anchor",href:"#视频教程"},"#"),(0,n.Uk)(" 视频教程")],-1),t=(0,n.Wm)("h3",{id:"第一部分-基础软件安装"},[(0,n.Wm)("a",{class:"header-anchor",href:"#第一部分-基础软件安装"},"#"),(0,n.Uk)(" 第一部分:基础软件安装")],-1),s=(0,n.Uk)("打开学之思开源仓库地址:"),a={href:"https://gitee.com/mindskip/xzs-mysql",target:"_blank",rel:"noopener noreferrer"},m=(0,n.Uk)("https://gitee.com/mindskip/xzs-mysql"),o=(0,n.Wm)("li",null,"加群QQ交流群,找管理员拿到数据库脚本",-1),d=(0,n.Wm)("li",null,"工具介绍",-1),c=(0,n.uE)('
        VC_redist.x64 :  Redis数据库依赖、mysql依赖,先安装这个\n    ideaIU-2020.3.3 : java开发工具\n    mysql-installer-community-8.0.19.0 : Mysql数据库安装包\n    navicat150_mysql_cs_x64 : Mysql数据库连接工具\n    rdm-2021.3.0.0 :Redis连接工具\n    Redis-x64-3.0.504 : Redis内存数据库\n    WebStorm-2020.3.3:  前端开发工具\n    jdk-8u241-windows-x64:java运行环境\n    node-v12.16.1-x64:前端vue运行环境\n
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ',1),u=(0,n.Wm)("li",null,"工具安装",-1),p=(0,n.Wm)("li",null,"所有准备工具安装已结束,下一步是调试开发环境",-1),h=(0,n.Uk)("哔哩哔哩:"),b={href:"https://www.bilibili.com/video/BV1rp4y1b7Se",target:"_blank",rel:"noopener noreferrer"},W=(0,n.Uk)("https://www.bilibili.com/video/BV1rp4y1b7Se"),k=(0,n.Uk)("腾讯课堂:"),w={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286748855580820&type=1024&vid=5285890818155010100",target:"_blank",rel:"noopener noreferrer"},v=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286748855580820&type=1024&vid=5285890818155010100"),g=(0,n.Wm)("h3",{id:"第二部分-本地代码调试运行"},[(0,n.Wm)("a",{class:"header-anchor",href:"#第二部分-本地代码调试运行"},"#"),(0,n.Uk)(" 第二部分:本地代码调试运行")],-1),x=(0,n.Uk)("打开仓库地址 "),f={href:"https://gitee.com/mindskip/xzs-mysql",target:"_blank",rel:"noopener noreferrer"},q=(0,n.Uk)("https://gitee.com/mindskip/xzs-mysql"),y=(0,n.Uk)(" ,下载源代码"),U=(0,n.Uk)("打开教学文档 "),_={href:"https://www.mindskip.net:999",target:"_blank",rel:"noopener noreferrer"},V=(0,n.Uk)("https://www.mindskip.net:999"),j=(0,n.uE)("
  • 修改java的镜像,改为阿里云镜像,默认是国外的,速度比较慢。默认是没有.m2文件夹的,可以自己新建一个。
  • 打开数据库连接工具,导入mysql脚本
  • 打开java代码,等待组件自动下载完成即可启动
  • 添加sdk,建议使用1.8
  • 启动后端程序
  • 修改下配置文件,我们是本地连接,需要改下数据库连接地址
  • 再打开教程,开始启动前端开发工具
  • 前端依赖组件默认也是国外的,可按教程修为成国内的
  • 组件下载完成,执行运行命令
  • 学生前端也同样操作,启动
  • 建议先将package-lock.json文件删掉,再执行npm install命令
  • 前后端都已启动完成
  • ",12),z=(0,n.Uk)("哔哩哔哩:"),B={href:"https://www.bilibili.com/video/BV1Qh411S7RY",target:"_blank",rel:"noopener noreferrer"},R=(0,n.Uk)("https://www.bilibili.com/video/BV1Qh411S7RY"),C=(0,n.Uk)("腾讯课堂:"),S={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286753150548116&type=1024&vid=5285890818155251193",target:"_blank",rel:"noopener noreferrer"},D=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286753150548116&type=1024&vid=5285890818155251193"),X=(0,n.Wm)("h3",{id:"第三部分-微信小程序开发"},[(0,n.Wm)("a",{class:"header-anchor",href:"#第三部分-微信小程序开发"},"#"),(0,n.Uk)(" 第三部分:微信小程序开发")],-1),A=(0,n.Wm)("li",null,"去官网下载小程序开发工具,并安装",-1),E=(0,n.Wm)("li",null,"去微信小程序官网 (微信公众平台),创建小程序",-1),Y=(0,n.Wm)("li",null,"登录成功后,点击左边菜单开发下面的开发管理,在点击开发设置",-1),M=(0,n.Wm)("li",null,"拿到appId、AppSecret后配置到代码中",-1),Q=(0,n.Wm)("li",null,"修改代码配置后,重新启动后台程序",-1),O=(0,n.Wm)("li",null,"打开微信开发工具,导入微信小程序代码",-1),P=(0,n.Uk)("微信接口默认是"),F={href:"http://localhost:8000",target:"_blank",rel:"noopener noreferrer"},I=(0,n.Uk)("http://localhost:8000"),K=(0,n.Uk)(",默认就可以了,和后端端口保持一致"),H=(0,n.Wm)("li",null,"启动后需要修改appid,和代码中的保持一致",-1),L=(0,n.Wm)("li",null,"微信小程序就启动成功了",-1),N=(0,n.Uk)("哔哩哔哩:"),T={href:"https://www.bilibili.com/video/BV1mK4y127C5",target:"_blank",rel:"noopener noreferrer"},G=(0,n.Uk)("https://www.bilibili.com/video/BV1mK4y127C5"),J=(0,n.Uk)("腾讯课堂:"),Z={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286757445515412&type=1024&vid=5285890818155261437",target:"_blank",rel:"noopener noreferrer"},$=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286757445515412&type=1024&vid=5285890818155261437"),ll=(0,n.Wm)("h3",{id:"第四部分-代码配置介绍"},[(0,n.Wm)("a",{class:"header-anchor",href:"#第四部分-代码配置介绍"},"#"),(0,n.Uk)(" 第四部分:代码配置介绍")],-1),el=(0,n.Wm)("li",null,"下面介绍下常用的配置",-1),il=(0,n.Wm)("li",null,"后端配置主要在 yml 文件中",-1),nl=(0,n.Wm)("li",null,"七牛云配置完成后,测试一下,重新启动,加载配置文件",-1),rl=(0,n.Wm)("li",null,"图片替换成功,说明七牛云配置是ok的",-1),tl=(0,n.Wm)("li",null,"application-prod.yml 用于正式环境的配置,和dev基本是一样的",-1),sl=(0,n.Wm)("li",null,"学生端vue配置",-1),al=(0,n.Wm)("li",null,"管理端vue配置",-1),ml=(0,n.Wm)("li",null,"微信小程序配置",-1),ol=(0,n.Wm)("li",null,"配置都已经介绍完毕",-1),dl=(0,n.Uk)("哔哩哔哩:"),cl={href:"https://www.bilibili.com/video/BV19V411n7XV",target:"_blank",rel:"noopener noreferrer"},ul=(0,n.Uk)("https://www.bilibili.com/video/BV19V411n7XV"),pl=(0,n.Uk)("腾讯课堂:"),hl={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286761740482708&type=1024&vid=5285890818155250943",target:"_blank",rel:"noopener noreferrer"},bl=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286761740482708&type=1024&vid=5285890818155250943"),Wl=(0,n.uE)('

    # 第五部分:win系统部署

    • 下面介绍下在win平台下怎么部署学之思,包含win所有平台
    • 先预装好下面软件,不会的可以看第一部分视频
        VC_redist.x64 :  Redis数据库依赖、mysql依赖,先安装这个\n    mysql-installer-community-8.0.19.0 : Mysql数据库安装包\n    navicat150_mysql_cs_x64 : Mysql数据库连接工具\n    Redis-x64-3.0.504 : Redis内存数据库\n    jdk-8u241-windows-x64:java运行环\n
    1
    2
    3
    4
    5
    • 按文档教程中的项目部署操作来
    • 首先展示集成部署
    • 这个jar包就是打包之后的运行程序,我们使用命令运行
       java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod  xzs-3.3.0.jar \n
    1
    ',5),kl=(0,n.uE)('
  • 访问成功,说明部署没问题
  • 下面我们看下前后的分离部署,需要安装nginx
  • 访问localhost,看到这个页面就说nginx启动没问题
  • 配置学之思
  • 先启动后端程序
  • 再修改前端配置,启动前端程序,访问地址没问题,就说明部署成功了
  • 这里需要注意两点:
    1. 8001端口默认是微信开发工具的启动端口,建议先关闭微信开发工具,再启动nginx
    1. root C:/xzs/release/web; 这里的路径要填反斜杠,不能直接用win的复制路径
  • win系统部署结束
  • ',10),wl=(0,n.Uk)("哔哩哔哩:"),vl={href:"https://www.bilibili.com/video/BV1XA41157P4",target:"_blank",rel:"noopener noreferrer"},gl=(0,n.Uk)("https://www.bilibili.com/video/BV1XA41157P4"),xl=(0,n.Uk)("腾讯课堂:"),fl={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286766035450004&type=1024&vid=5285890818058778391",target:"_blank",rel:"noopener noreferrer"},ql=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286766035450004&type=1024&vid=5285890818058778391"),yl=(0,n.uE)('

    # 第六部分:CentOS系统部署

    • 下载好xshell和xftp,这个工具用于连接centos服务器的
    • 可在群文件中找到Xftp-7.0.0063p 和 Xshell-7.0.0065p ,直接安装
    • 打开xshell , 连接准备好的centos服务器
    • 服务器中要安装好 redis、mysql 8 、jdk 1.8、nginx , 可以自行搜索教程进行安装
    • 安装好后,我们检测下是否都在运行
    • 创建数据库xzs、导入xzs-mysql.sql脚本
    • 登录mysql,执行导入命令:
        mysql -u root -p -D xzs < /usr/local/xzs/sql/xzs-mysql.sql\n
    1
    • 数据导入成功后,可以登录mysql数据库,检查一下是否成功
    • 打包jar文件,注意修改配置文件application-prod.yml ,正式环境用的这个文件,这里里面的数据库连接地址和账号等,由于都是服务器本地的,都用localhost即可
    • 上传jar包到服务器中
    • 启动学之思后端程序
        nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod  xzs-3.3.0.jar  > start1.log  2>&1 &\n
    1
    ',5),Ul=(0,n.Wm)("li",null,"打开浏览器,检查是否启动成功",-1),_l=(0,n.Wm)("li",null,"集成部署已经完成,下面介绍下前后端分离部署,分离部署前端页面要放在nginx中,需要配置nginx",-1),Vl=(0,n.Wm)("li",null,"上传成功后配置nginx,nginx默认配置目录为 /etc/nginx/conf.d ,在里面新建xzs.conf配置文件即可",-1),jl=(0,n.Wm)("li",null,"执行命令:nginx -s reload ,重新加载nginx配置文件",-1),zl=(0,n.Wm)("li",null,"在浏览器中能访问成功说明部署正确",-1),Bl=(0,n.Wm)("li",null,"docker部署,先安装好docker",-1),Rl=(0,n.Wm)("li",null,"执行教程中的命令,下载镜像,运行容器",-1),Cl=(0,n.Wm)("li",null,"打开浏览器验证下是否能访问,访问成功表示docker版运行正常",-1),Sl=(0,n.Uk)("哔哩哔哩:"),Dl={href:"https://www.bilibili.com/video/BV17b4y1D7Re",target:"_blank",rel:"noopener noreferrer"},Xl=(0,n.Uk)("https://www.bilibili.com/video/BV17b4y1D7Re"),Al=(0,n.Uk)("腾讯课堂:"),El={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286770330417300&type=1024&vid=5285890818155321589",target:"_blank",rel:"noopener noreferrer"},Yl=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286770330417300&type=1024&vid=5285890818155321589"),Ml=(0,n.Wm)("h3",{id:"第七部分-使用手册"},[(0,n.Wm)("a",{class:"header-anchor",href:"#第七部分-使用手册"},"#"),(0,n.Uk)(" 第七部分:使用手册")],-1),Ql=(0,n.Wm)("li",null,"用户管理:学生添加、管理员添加",-1),Ol=(0,n.Wm)("li",null,"题目管理:添加题目、单选题、多选题、判断题、填空题、解答题",-1),Pl=(0,n.Wm)("li",null,"教育管理:添加学科",-1),Fl=(0,n.Wm)("li",null,"试卷管理:添加试卷 固定试卷 时段试卷 任务试卷",-1),Il=(0,n.Wm)("li",null,"任务管理:添加任务",-1),Kl=(0,n.Wm)("li",null,"消息管理:消息发送",-1),Hl=(0,n.Wm)("li",null,"成绩管理:查看成绩",-1),Ll=(0,n.Uk)("哔哩哔哩:"),Nl={href:"https://www.bilibili.com/video/BV1884y1F71Y",target:"_blank",rel:"noopener noreferrer"},Tl=(0,n.Uk)("https://www.bilibili.com/video/BV1884y1F71Y"),Gl=(0,n.Uk)("腾讯课堂:"),Jl={href:"https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286774625384596&type=1024&vid=5285890818155321700",target:"_blank",rel:"noopener noreferrer"},Zl=(0,n.Uk)("https://ke.qq.com/webcourse/index.html#cid=3455124&term_id=103592943&taid=11286774625384596&type=1024&vid=5285890818155321700"),$l={render:function(l,e){const i=(0,n.up)("OutboundLink");return(0,n.wg)(),(0,n.j4)(n.HY,null,[r,t,(0,n.Wm)("ul",null,[(0,n.Wm)("li",null,[s,(0,n.Wm)("a",a,[m,(0,n.Wm)(i)])]),o,d]),c,(0,n.Wm)("ul",null,[u,p,(0,n.Wm)("li",null,[h,(0,n.Wm)("a",b,[W,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[k,(0,n.Wm)("a",w,[v,(0,n.Wm)(i)])])]),g,(0,n.Wm)("ul",null,[(0,n.Wm)("li",null,[x,(0,n.Wm)("a",f,[q,(0,n.Wm)(i)]),y]),(0,n.Wm)("li",null,[U,(0,n.Wm)("a",_,[V,(0,n.Wm)(i)])]),j,(0,n.Wm)("li",null,[z,(0,n.Wm)("a",B,[R,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[C,(0,n.Wm)("a",S,[D,(0,n.Wm)(i)])])]),X,(0,n.Wm)("ul",null,[A,E,Y,M,Q,O,(0,n.Wm)("li",null,[P,(0,n.Wm)("a",F,[I,(0,n.Wm)(i)]),K]),H,L,(0,n.Wm)("li",null,[N,(0,n.Wm)("a",T,[G,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[J,(0,n.Wm)("a",Z,[$,(0,n.Wm)(i)])])]),ll,(0,n.Wm)("ul",null,[el,il,nl,rl,tl,sl,al,ml,ol,(0,n.Wm)("li",null,[dl,(0,n.Wm)("a",cl,[ul,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[pl,(0,n.Wm)("a",hl,[bl,(0,n.Wm)(i)])])]),Wl,(0,n.Wm)("ul",null,[kl,(0,n.Wm)("li",null,[wl,(0,n.Wm)("a",vl,[gl,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[xl,(0,n.Wm)("a",fl,[ql,(0,n.Wm)(i)])])]),yl,(0,n.Wm)("ul",null,[Ul,_l,Vl,jl,zl,Bl,Rl,Cl,(0,n.Wm)("li",null,[Sl,(0,n.Wm)("a",Dl,[Xl,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[Al,(0,n.Wm)("a",El,[Yl,(0,n.Wm)(i)])])]),Ml,(0,n.Wm)("ul",null,[Ql,Ol,Pl,Fl,Il,Kl,Hl,(0,n.Wm)("li",null,[Ll,(0,n.Wm)("a",Nl,[Tl,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[Gl,(0,n.Wm)("a",Jl,[Zl,(0,n.Wm)(i)])])])],64)}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-745beb88.2a9d82c5.js b/docs/assets/js/v-745beb88.2a9d82c5.js deleted file mode 100644 index 31144178..00000000 --- a/docs/assets/js/v-745beb88.2a9d82c5.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[803],{9252:(e,l,i)=>{"use strict";i.r(l),i.d(l,{data:()=>n});const n={key:"v-745beb88",path:"/guide/develop.html",title:"",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"开发说明",slug:"开发说明",children:[]},{level:3,title:"后端开发",slug:"后端开发",children:[]},{level:3,title:"前端开发",slug:"前端开发",children:[]},{level:3,title:"微信小程序开发",slug:"微信小程序开发",children:[]}],filePathRelative:"guide/develop.md",git:{updatedTime:162435189e4,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:2}]}}},123:(e,l,i)=>{"use strict";i.r(l),i.d(l,{default:()=>b});var n=i(6252);const s=(0,n.uE)('

    # 开发说明

    • redis 安装
    • 进群获取到数据库脚本,创建表初始化数据,数据库名称为xzs
    • 代码分为 mysql版本,配合相应的数据库使用
    • 安装mysql ,导入xzs-mysql.sql脚本。
    • 学生端默认账号:student / 123456
    • 管理端默认账号:admin / 123456

    # 后端开发

    ',3),a=(0,n.Wm)("li",null,"/uexam/source/xzs为后台代码,建议使用IntelliJ IDEA打开",-1),r=(0,n.Wm)("li",null,"打开application-dev.yml文件中,配置好mysql、redis的服务地址",-1),t=(0,n.Wm)("li",null,"去七牛云官网申请好对象存储账号,修改application.yml中的qn相关的配置,七牛云主要用于文件存储。",-1),u=(0,n.Wm)("li",null,"启动后台程序,默认端口为8000。",-1),d=(0,n.Uk)("学生系统地址:"),m={href:"http://ip:8000/student",target:"_blank",rel:"noopener noreferrer"},p=(0,n.Uk)("http://ip:8000/student"),c=(0,n.Uk)("管理端地址:"),o={href:"http://ip:8000/admin",target:"_blank",rel:"noopener noreferrer"},h=(0,n.Uk)("http://ip:8000/admin"),g=(0,n.uE)('

    # 前端开发

    • 前端使用webstorm或者vscode,分别打开文件夹打开源代码\\source\\vue\\xzs-student和source\\vue\\xzs-admin
    • 执行下面2个命令,安装node_module:
    npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/\nnpm install --registry https://registry.npm.taobao.org  \n
    1
    2
    • 执行下面命令,启动前端代码
    npm run serve\n
    1
    • 打包命名
    npm run build\n
    1

    # 微信小程序开发

    • 去腾讯小程序官网注册账号,拿到appid和secret信息
    • 下载好微信小程序开发工具
    • 打开工具,导入代码 \\source\\wx\\xzs-student
    • 修改application.yml文件里的wx配置下面的appid和secret
    • 启动小程序开发工具
    ',9),b={render:function(e,l){const i=(0,n.up)("OutboundLink");return(0,n.wg)(),(0,n.j4)(n.HY,null,[s,(0,n.Wm)("ul",null,[a,r,t,u,(0,n.Wm)("li",null,[d,(0,n.Wm)("a",m,[p,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[c,(0,n.Wm)("a",o,[h,(0,n.Wm)(i)])])]),g],64)}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-745beb88.6d7b82fd.js b/docs/assets/js/v-745beb88.6d7b82fd.js new file mode 100644 index 00000000..f4d927a8 --- /dev/null +++ b/docs/assets/js/v-745beb88.6d7b82fd.js @@ -0,0 +1 @@ +(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[803],{9252:(e,l,i)=>{"use strict";i.r(l),i.d(l,{data:()=>n});const n={key:"v-745beb88",path:"/guide/develop.html",title:"项目开发",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"开发说明",slug:"开发说明",children:[]},{level:3,title:"后端开发",slug:"后端开发",children:[]},{level:3,title:"前端开发",slug:"前端开发",children:[]},{level:3,title:"微信小程序开发",slug:"微信小程序开发",children:[]}],filePathRelative:"guide/develop.md",git:{updatedTime:1624546631e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:3}]}}},7015:(e,l,i)=>{"use strict";i.r(l),i.d(l,{default:()=>b});var n=i(6252);const s=(0,n.uE)('

    # 项目开发

    # 开发说明

    • redis 安装
    • 进群获取到数据库脚本,创建表初始化数据,数据库名称为xzs
    • 代码分为 mysql版本,配合相应的数据库使用
    • 安装mysql ,导入xzs-mysql.sql脚本。
    • 学生端默认账号:student / 123456
    • 管理端默认账号:admin / 123456

    # 后端开发

    ',4),a=(0,n.Wm)("li",null,"/uexam/source/xzs为后台代码,建议使用IntelliJ IDEA打开",-1),r=(0,n.Wm)("li",null,"打开application-dev.yml文件中,配置好mysql、redis的服务地址",-1),t=(0,n.Wm)("li",null,"去七牛云官网申请好对象存储账号,修改application.yml中的qn相关的配置,七牛云主要用于文件存储。",-1),d=(0,n.Wm)("li",null,"启动后台程序,默认端口为8000。",-1),u=(0,n.Uk)("学生系统地址:"),m={href:"http://ip:8000/student",target:"_blank",rel:"noopener noreferrer"},p=(0,n.Uk)("http://ip:8000/student"),c=(0,n.Uk)("管理端地址:"),o={href:"http://ip:8000/admin",target:"_blank",rel:"noopener noreferrer"},h=(0,n.Uk)("http://ip:8000/admin"),g=(0,n.uE)('

    # 前端开发

    • 前端使用webstorm或者vscode,分别打开文件夹打开源代码\\source\\vue\\xzs-student和source\\vue\\xzs-admin
    • 执行下面2个命令,安装node_module:
    npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/\nnpm install --registry https://registry.npm.taobao.org  \n
    1
    2
    • 执行下面命令,启动前端代码
    npm run serve\n
    1
    • 打包命名
    npm run build\n
    1

    # 微信小程序开发

    • 去腾讯小程序官网注册账号,拿到appid和secret信息
    • 下载好微信小程序开发工具
    • 打开工具,导入代码 \\source\\wx\\xzs-student
    • 修改application.yml文件里的wx配置下面的appid和secret
    • 启动小程序开发工具
    ',9),b={render:function(e,l){const i=(0,n.up)("OutboundLink");return(0,n.wg)(),(0,n.j4)(n.HY,null,[s,(0,n.Wm)("ul",null,[a,r,t,d,(0,n.Wm)("li",null,[u,(0,n.Wm)("a",m,[p,(0,n.Wm)(i)])]),(0,n.Wm)("li",null,[c,(0,n.Wm)("a",o,[h,(0,n.Wm)(i)])])]),g],64)}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-7dc58ad2.04a5e055.js b/docs/assets/js/v-7dc58ad2.04a5e055.js new file mode 100644 index 00000000..93b61c1a --- /dev/null +++ b/docs/assets/js/v-7dc58ad2.04a5e055.js @@ -0,0 +1 @@ +(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[349],{8103:(t,d,r)=>{"use strict";r.r(d),r.d(d,{data:()=>e});const e={key:"v-7dc58ad2",path:"/guide/database.html",title:"数据库设计",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"试卷表",slug:"试卷表",children:[]},{level:3,title:"试卷答案表",slug:"试卷答案表",children:[]},{level:3,title:"试卷题目答案表",slug:"试卷题目答案表",children:[]},{level:3,title:"消息表",slug:"消息表",children:[]},{level:3,title:"用户消息表",slug:"用户消息表",children:[]},{level:3,title:"题目表",slug:"题目表",children:[]},{level:3,title:"学科表",slug:"学科表",children:[]},{level:3,title:"任务表",slug:"任务表",children:[]},{level:3,title:"用户任务表",slug:"用户任务表",children:[]},{level:3,title:"文本表",slug:"文本表",children:[]},{level:3,title:"用户表",slug:"用户表",children:[]},{level:3,title:"用户日志表",slug:"用户日志表",children:[]},{level:3,title:"用户Token表",slug:"用户token表",children:[]}],filePathRelative:"guide/database.md",git:{updatedTime:1624546631e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:2}]}}},8401:(t,d,r)=>{"use strict";r.r(d),r.d(d,{default:()=>a});const e=(0,r(6252).uE)('

    # 数据库设计

    # 试卷表

    • 表名:t_exam_paper
    • 字段注释:
    字段名类型注释
    idint
    namevarchar试卷名称
    subject_idint学科
    paper_typeint试卷类型( 1.固定试卷 4.时段试卷 6.任务试卷 )
    grade_levelint年级
    scoreint试卷总分(千分制)
    question_countint题目数量
    suggest_timeint建议时长(分钟)
    limit_start_timedatetime时段试卷 开始时间
    limit_end_timedatetime时段试卷 结束时间
    frame_text_content_idint试卷框架 内容为JSON
    create_userint
    create_timedatetime
    deletedbit
    task_exam_idint

    # 试卷答案表

    • 表名:t_exam_paper_answer
    • 字段注释:
    字段名类型注释
    idint
    exam_paper_idint
    paper_namevarchar试卷名称
    paper_typeint试卷类型( 1.固定试卷 4.时段试卷 6.任务试卷 )
    subject_idint学科
    system_scoreint系统判定得分
    user_scoreint最终得分(千分制)
    paper_scoreint试卷总分
    question_correctint做对题目数量
    question_countint题目总数量
    do_timeint做题时间(秒)
    statusint试卷状态(1待判分 2完成)
    create_userint学生
    create_timedatetime提交时间
    task_exam_idint

    # 试卷题目答案表

    • 表名:t_exam_paper_question_customer_answer
    • 字段注释:
    字段名类型注释
    idint
    question_idint题目Id
    exam_paper_idint答案Id
    exam_paper_answer_idint
    question_typeint题型
    subject_idint学科
    customer_scoreint得分
    question_scoreint题目原始分数
    question_text_content_idint问题内容
    answervarchar做题答案
    text_content_idint做题内容
    do_rightbit是否正确
    create_userint做题人
    create_timedatetime
    item_orderint

    # 消息表

    • 表名:t_message
    • 字段注释:
    字段名类型注释
    idint
    titlevarchar标题
    contentvarchar内容
    create_timedatetime
    send_user_idint发送者用户ID
    send_user_namevarchar发送者用户名
    send_real_namevarchar发送者真实姓名
    receive_user_countint接收人数
    read_countint已读人数

    # 用户消息表

    • 表名:t_message_user
    • 字段注释:
    字段名类型注释
    idint
    message_idint消息内容ID
    receive_user_idint接收人ID
    receive_user_namevarchar接收人用户名
    receive_real_namevarchar接收人真实姓名
    readedbit是否已读
    create_timedatetime
    read_timedatetime阅读时间

    # 题目表

    • 表名:t_question
    • 字段注释:
    字段名类型注释
    idint
    question_typeint1.单选题 2.多选题 3.判断题 4.填空题 5.简答题
    subject_idint学科
    scoreint题目总分(千分制)
    grade_levelint级别
    difficultint题目难度
    correcttext正确答案
    info_text_content_idint题目 填空、 题干、解析、答案等信息
    create_userint创建人
    statusint1.正常
    create_timedatetime创建时间
    deletedbit

    # 学科表

    • 表名:t_subject
    • 字段注释:
    字段名类型注释
    idint
    namevarchar语文 数学 英语 等
    levelint年级 (1-12) 小学 初中 高中 大学
    level_namevarchar一年级、二年级等
    item_orderint排序
    deletedbit

    # 任务表

    • 表名:t_task_exam
    • 字段注释:
    字段名类型注释
    idint
    titlevarchar
    grade_levelint级别
    frame_text_content_idint任务框架 内容为JSON
    create_userint
    create_timedatetime
    deletedbit
    create_user_namevarchar

    # 用户任务表

    • 表名:t_task_exam_customer_answer
    • 字段注释:
    字段名类型注释
    idint
    task_exam_idint
    create_userint
    create_timedatetime
    text_content_idint任务完成情况(Json)

    # 文本表

    • 表名:t_text_content
    • 字段注释:
    字段名类型注释
    idint
    contenttext
    create_timedatetime

    # 用户表

    • 表名:t_user
    • 字段注释:
    字段名类型注释
    idint
    user_uuidvarchar
    user_namevarchar用户名
    passwordvarchar
    real_namevarchar真实姓名
    ageint
    sexint1.男 2女
    birth_daydatetime
    user_levelint学生年级(1-12)
    phonevarchar
    roleint1.学生 3.管理员
    statusint1.启用 2禁用
    image_pathvarchar头像地址
    create_timedatetime
    modify_timedatetime
    last_active_timedatetime
    deletedbit是否删除
    wx_open_idvarchar微信openId

    # 用户日志表

    • 表名:t_user_event_log
    • 字段注释:
    字段名类型注释
    idint
    user_idint用户id
    user_namevarchar用户名
    real_namevarchar真实姓名
    contenttext内容
    create_timedatetime时间

    # 用户Token表

    • 表名:t_user_token
    • 字段注释:
    字段名类型注释
    idint
    tokenvarchar
    user_idint用户Id
    wx_open_idvarchar微信openId
    create_timedatetime
    end_timedatetime
    user_namevarchar用户名
    ',40),a={render:function(t,d){return e}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-7dc58ad2.f2392ebe.js b/docs/assets/js/v-7dc58ad2.f2392ebe.js deleted file mode 100644 index f4df9ca7..00000000 --- a/docs/assets/js/v-7dc58ad2.f2392ebe.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[349],{8103:(t,d,e)=>{"use strict";e.r(d),e.d(d,{data:()=>r});const r={key:"v-7dc58ad2",path:"/guide/database.html",title:"",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"试卷表 t_exam_paper",slug:"试卷表-t-exam-paper",children:[]},{level:3,title:"试卷答案表 t_exam_paper_answer",slug:"试卷答案表-t-exam-paper-answer",children:[]},{level:3,title:"试卷题目答案表 t_exam_paper_question_customer_answer",slug:"试卷题目答案表-t-exam-paper-question-customer-answer",children:[]},{level:3,title:"消息表 t_message",slug:"消息表-t-message",children:[]},{level:3,title:"用户消息表 t_message_user",slug:"用户消息表-t-message-user",children:[]},{level:3,title:"题目表 t_question",slug:"题目表-t-question",children:[]},{level:3,title:"学科表 t_subject",slug:"学科表-t-subject",children:[]},{level:3,title:"任务表 t_task_exam",slug:"任务表-t-task-exam",children:[]},{level:3,title:"用户任务表 t_task_exam_customer_answer",slug:"用户任务表-t-task-exam-customer-answer",children:[]},{level:3,title:"文本表 t_text_content",slug:"文本表-t-text-content",children:[]},{level:3,title:"用户表 t_user",slug:"用户表-t-user",children:[]},{level:3,title:"用户日志表 t_user_event_log",slug:"用户日志表-t-user-event-log",children:[]},{level:3,title:"用户Token表 t_user_token",slug:"用户token表-t-user-token",children:[]}],filePathRelative:"guide/database.md",git:{updatedTime:1624351352e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:1}]}}},2866:(t,d,e)=>{"use strict";e.r(d),e.d(d,{default:()=>a});const r=(0,e(6252).uE)('

    # 试卷表 t_exam_paper

    字段名类型注释
    idint
    namevarchar试卷名称
    subject_idint学科
    paper_typeint试卷类型( 1.固定试卷 4.时段试卷 6.任务试卷 )
    grade_levelint年级
    scoreint试卷总分(千分制)
    question_countint题目数量
    suggest_timeint建议时长(分钟)
    limit_start_timedatetime时段试卷 开始时间
    limit_end_timedatetime时段试卷 结束时间
    frame_text_content_idint试卷框架 内容为JSON
    create_userint
    create_timedatetime
    deletedbit
    task_exam_idint

    # 试卷答案表 t_exam_paper_answer

    字段名类型注释
    idint
    exam_paper_idint
    paper_namevarchar试卷名称
    paper_typeint试卷类型( 1.固定试卷 4.时段试卷 6.任务试卷 )
    subject_idint学科
    system_scoreint系统判定得分
    user_scoreint最终得分(千分制)
    paper_scoreint试卷总分
    question_correctint做对题目数量
    question_countint题目总数量
    do_timeint做题时间(秒)
    statusint试卷状态(1待判分 2完成)
    create_userint学生
    create_timedatetime提交时间
    task_exam_idint

    # 试卷题目答案表 t_exam_paper_question_customer_answer

    字段名类型注释
    idint
    question_idint题目Id
    exam_paper_idint答案Id
    exam_paper_answer_idint
    question_typeint题型
    subject_idint学科
    customer_scoreint得分
    question_scoreint题目原始分数
    question_text_content_idint问题内容
    answervarchar做题答案
    text_content_idint做题内容
    do_rightbit是否正确
    create_userint做题人
    create_timedatetime
    item_orderint

    # 消息表 t_message

    字段名类型注释
    idint
    titlevarchar标题
    contentvarchar内容
    create_timedatetime
    send_user_idint发送者用户ID
    send_user_namevarchar发送者用户名
    send_real_namevarchar发送者真实姓名
    receive_user_countint接收人数
    read_countint已读人数

    # 用户消息表 t_message_user

    字段名类型注释
    idint
    message_idint消息内容ID
    receive_user_idint接收人ID
    receive_user_namevarchar接收人用户名
    receive_real_namevarchar接收人真实姓名
    readedbit是否已读
    create_timedatetime
    read_timedatetime阅读时间

    # 题目表 t_question

    字段名类型注释
    idint
    question_typeint1.单选题 2.多选题 3.判断题 4.填空题 5.简答题
    subject_idint学科
    scoreint题目总分(千分制)
    grade_levelint级别
    difficultint题目难度
    correcttext正确答案
    info_text_content_idint题目 填空、 题干、解析、答案等信息
    create_userint创建人
    statusint1.正常
    create_timedatetime创建时间
    deletedbit

    # 学科表 t_subject

    字段名类型注释
    idint
    namevarchar语文 数学 英语 等
    levelint年级 (1-12) 小学 初中 高中 大学
    level_namevarchar一年级、二年级等
    item_orderint排序
    deletedbit

    # 任务表 t_task_exam

    字段名类型注释
    idint
    titlevarchar
    grade_levelint级别
    frame_text_content_idint任务框架 内容为JSON
    create_userint
    create_timedatetime
    deletedbit
    create_user_namevarchar

    # 用户任务表 t_task_exam_customer_answer

    字段名类型注释
    idint
    task_exam_idint
    create_userint
    create_timedatetime
    text_content_idint任务完成情况(Json)

    # 文本表 t_text_content

    字段名类型注释
    idint
    contenttext
    create_timedatetime

    # 用户表 t_user

    字段名类型注释
    idint
    user_uuidvarchar
    user_namevarchar用户名
    passwordvarchar
    real_namevarchar真实姓名
    ageint
    sexint1.男 2女
    birth_daydatetime
    user_levelint学生年级(1-12)
    phonevarchar
    roleint1.学生 3.管理员
    statusint1.启用 2禁用
    image_pathvarchar头像地址
    create_timedatetime
    modify_timedatetime
    last_active_timedatetime
    deletedbit是否删除
    wx_open_idvarchar微信openId

    # 用户日志表 t_user_event_log

    字段名类型注释
    idint
    user_idint用户id
    user_namevarchar用户名
    real_namevarchar真实姓名
    contenttext内容
    create_timedatetime时间

    # 用户Token表 t_user_token

    字段名类型注释
    idint
    tokenvarchar
    user_idint用户Id
    wx_open_idvarchar微信openId
    create_timedatetime
    end_timedatetime
    user_namevarchar用户名
    ',26),a={render:function(t,d){return r}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-8a14f834.54e80974.js b/docs/assets/js/v-8a14f834.54e80974.js new file mode 100644 index 00000000..7ef48c9f --- /dev/null +++ b/docs/assets/js/v-8a14f834.54e80974.js @@ -0,0 +1 @@ +(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[810],{5737:(n,s,a)=>{"use strict";a.r(s),a.d(s,{data:()=>e});const e={key:"v-8a14f834",path:"/guide/deploy.html",title:"项目部署",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"方式一:集成部署",slug:"方式一-集成部署",children:[]},{level:3,title:"方式二:前后端分离部署",slug:"方式二-前后端分离部署",children:[]},{level:3,title:"方式三:docker部署",slug:"方式三-docker部署",children:[]}],filePathRelative:"guide/deploy.md",git:{updatedTime:1624546631e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:2}]}}},6357:(n,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>R});var e=a(6252);const p=(0,e.uE)('

    # 项目部署

    # 方式一:集成部署

    • 分别在\\source\\vue\\xzs-student目录和source\\vue\\xzs-admin目录,执行前端打包命令
    npm run build\n
    1
    ',4),t=(0,e.Wm)("li",null,"打包后的目录为student和admin",-1),l=(0,e.Wm)("li",null,"将文件放到\\source\\xzs\\src\\main\\resources\\static下,然后将java程序打包成jar包",-1),o=(0,e.Wm)("li",null,"修改application-prod.yml中的datasource和redis地址",-1),r=(0,e.Uk)("学生端访问地址为:"),c={href:"http://ip:8000/student",target:"_blank",rel:"noopener noreferrer"},i=(0,e.Uk)("http://ip:8000/student"),u=(0,e.Uk)("管理员端访问地址为:"),k={href:"http://ip:8000/admin",target:"_blank",rel:"noopener noreferrer"},d=(0,e.Uk)("http://ip:8000/admin"),m=(0,e.Wm)("li",null,"执行下列命令,运行程序",-1),h=(0,e.uE)('
    nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod  xzs-3.3.0.jar  > start1.log  2>&1 &\n
    1

    # 方式二:前后端分离部署

    ',2),b=(0,e.Wm)("li",null,"采用前后端分离方式部署,后端启动和部署方式1一样",-1),g=(0,e.Wm)("li",null,"前端采用nginx来装载静态页面,先创建/usr/local/xzs/web/目录,然后将打包后的student、admin放到此目录下",-1),v=(0,e.Wm)("li",null,"页面访问端口为8001,注意检查防火墙端口是否打开",-1),W=(0,e.Uk)("学生端访问地址为:"),x={href:"http://ip:8001/student",target:"_blank",rel:"noopener noreferrer"},f=(0,e.Uk)("http://ip:8001/student"),y=(0,e.Uk)("管理员端访问地址为:"),z={href:"http://ip:8001/admin",target:"_blank",rel:"noopener noreferrer"},w=(0,e.Uk)("http://ip:8001/admin"),U=(0,e.Wm)("li",null,"nginx配置如下:",-1),j=(0,e.uE)('
    server {\n    listen      8001;\n    server_name xzs;\n    location / {\n        root /usr/local/xzs/web/;\n        index index.html;\n    }\n    location /api/ {\n       proxy_pass  http://localhost:8000;\n    }\n}\n
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # 方式三:docker部署

    ',2),_=(0,e.Wm)("li",null,"准备好centos服务器",-1),E=(0,e.Wm)("li",null,"先检查服务器端口、ip转发的是否配置正确,否则无法访问到docker内部",-1),q=(0,e.Wm)("li",null,"docker内部镜像已经安装了java、mysql、redis、nginx,均已配置好,无需其他操作",-1),C=(0,e.Wm)("li",null,"执行下列docker命令,拉取镜像,启动容器",-1),D=(0,e.Uk)("学生端访问地址为:"),A={href:"http://ip:8001/student",target:"_blank",rel:"noopener noreferrer"},H=(0,e.Uk)("http://ip:8001/student"),L=(0,e.Uk)("管理员端访问地址为:"),N={href:"http://ip:8001/admin",target:"_blank",rel:"noopener noreferrer"},O=(0,e.Uk)("http://ip:8001/admin"),P=(0,e.uE)('
    docker pull  registry.cn-hangzhou.aliyuncs.com/mindskip/xzs:v3.3.0\ndocker run -d --name xzs --privileged -it  -d -p 8001:8001 -v /etc/localtime:/etc/localtime:ro  registry.cn-hangzhou.aliyuncs.com/mindskip/xzs:v3.3.0 /usr/sbin/init\n
    1
    2
    ',1),R={render:function(n,s){const a=(0,e.up)("OutboundLink");return(0,e.wg)(),(0,e.j4)(e.HY,null,[p,(0,e.Wm)("ul",null,[t,l,o,(0,e.Wm)("li",null,[r,(0,e.Wm)("a",c,[i,(0,e.Wm)(a)])]),(0,e.Wm)("li",null,[u,(0,e.Wm)("a",k,[d,(0,e.Wm)(a)])]),m]),h,(0,e.Wm)("ul",null,[b,g,v,(0,e.Wm)("li",null,[W,(0,e.Wm)("a",x,[f,(0,e.Wm)(a)])]),(0,e.Wm)("li",null,[y,(0,e.Wm)("a",z,[w,(0,e.Wm)(a)])]),U]),j,(0,e.Wm)("ul",null,[_,E,q,C,(0,e.Wm)("li",null,[D,(0,e.Wm)("a",A,[H,(0,e.Wm)(a)])]),(0,e.Wm)("li",null,[L,(0,e.Wm)("a",N,[O,(0,e.Wm)(a)])])]),P],64)}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-8a14f834.7497511c.js b/docs/assets/js/v-8a14f834.7497511c.js deleted file mode 100644 index 9a6724ee..00000000 --- a/docs/assets/js/v-8a14f834.7497511c.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[810],{5737:(n,s,a)=>{"use strict";a.r(s),a.d(s,{data:()=>e});const e={key:"v-8a14f834",path:"/guide/deploy.html",title:"",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"集成部署",slug:"集成部署",children:[]},{level:3,title:"前后端分离部署",slug:"前后端分离部署",children:[]},{level:3,title:"docker部署",slug:"docker部署",children:[]}],filePathRelative:"guide/deploy.md",git:{updatedTime:1624351352e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:1}]}}},7431:(n,s,a)=>{"use strict";a.r(s),a.d(s,{default:()=>R});var e=a(6252);const p=(0,e.uE)('

    # 集成部署

    • 分别在\\source\\vue\\xzs-student目录和source\\vue\\xzs-admin目录,执行前端打包命令
    npm run build\n
    1
    ',3),t=(0,e.Wm)("li",null,"打包后的目录为student和admin",-1),l=(0,e.Wm)("li",null,"将文件放到\\source\\xzs\\src\\main\\resources\\static下,然后将java程序打包成jar包",-1),o=(0,e.Wm)("li",null,"修改application-prod.yml中的datasource和redis地址",-1),r=(0,e.Uk)("学生端访问地址为:"),c={href:"http://ip:8000/student",target:"_blank",rel:"noopener noreferrer"},u=(0,e.Uk)("http://ip:8000/student"),i=(0,e.Uk)("管理员端访问地址为:"),k={href:"http://ip:8000/admin",target:"_blank",rel:"noopener noreferrer"},d=(0,e.Uk)("http://ip:8000/admin"),m=(0,e.Wm)("li",null,"执行下列命令,运行程序",-1),b=(0,e.uE)('
    nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod  xzs-3.3.0.jar  > start1.log  2>&1 &\n
    1

    # 前后端分离部署

    ',2),h=(0,e.Wm)("li",null,"采用前后端分离方式部署,后端启动和部署方式1一样",-1),g=(0,e.Wm)("li",null,"前端采用nginx来装载静态页面,先创建/usr/local/xzs/web/目录,然后将打包后的student、admin放到此目录下",-1),v=(0,e.Wm)("li",null,"页面访问端口为8001,注意检查防火墙端口是否打开",-1),W=(0,e.Uk)("学生端访问地址为:"),x={href:"http://ip:8001/student",target:"_blank",rel:"noopener noreferrer"},f=(0,e.Uk)("http://ip:8001/student"),y=(0,e.Uk)("管理员端访问地址为:"),z={href:"http://ip:8001/admin",target:"_blank",rel:"noopener noreferrer"},w=(0,e.Uk)("http://ip:8001/admin"),U=(0,e.Wm)("li",null,"nginx配置如下:",-1),j=(0,e.uE)('
    server {\n    listen      8001;\n    server_name xzs;\n    location / {\n        root /usr/local/xzs/web/;\n        index index.html;\n    }\n    location /api/ {\n       proxy_pass  http://localhost:8000;\n    }\n}\n
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # docker部署

    ',2),_=(0,e.Wm)("li",null,"准备好centos服务器",-1),E=(0,e.Wm)("li",null,"先检查服务器端口、ip转发的是否配置正确,否则无法访问到docker内部",-1),q=(0,e.Wm)("li",null,"docker内部镜像已经安装了java、mysql、redis、nginx,均已配置好,无需其他操作",-1),C=(0,e.Wm)("li",null,"执行下列docker命令,拉取镜像,启动容器",-1),D=(0,e.Uk)("学生端访问地址为:"),A={href:"http://ip:8001/student",target:"_blank",rel:"noopener noreferrer"},H=(0,e.Uk)("http://ip:8001/student"),L=(0,e.Uk)("管理员端访问地址为:"),N={href:"http://ip:8001/admin",target:"_blank",rel:"noopener noreferrer"},O=(0,e.Uk)("http://ip:8001/admin"),P=(0,e.uE)('
    docker pull  registry.cn-hangzhou.aliyuncs.com/mindskip/xzs:v3.3.0\ndocker run -d --name xzs --privileged -it  -d -p 8001:8001 -v /etc/localtime:/etc/localtime:ro  registry.cn-hangzhou.aliyuncs.com/mindskip/xzs:v3.3.0 /usr/sbin/init\n
    1
    2
    ',1),R={render:function(n,s){const a=(0,e.up)("OutboundLink");return(0,e.wg)(),(0,e.j4)(e.HY,null,[p,(0,e.Wm)("ul",null,[t,l,o,(0,e.Wm)("li",null,[r,(0,e.Wm)("a",c,[u,(0,e.Wm)(a)])]),(0,e.Wm)("li",null,[i,(0,e.Wm)("a",k,[d,(0,e.Wm)(a)])]),m]),b,(0,e.Wm)("ul",null,[h,g,v,(0,e.Wm)("li",null,[W,(0,e.Wm)("a",x,[f,(0,e.Wm)(a)])]),(0,e.Wm)("li",null,[y,(0,e.Wm)("a",z,[w,(0,e.Wm)(a)])]),U]),j,(0,e.Wm)("ul",null,[_,E,q,C,(0,e.Wm)("li",null,[D,(0,e.Wm)("a",A,[H,(0,e.Wm)(a)])]),(0,e.Wm)("li",null,[L,(0,e.Wm)("a",N,[O,(0,e.Wm)(a)])])]),P],64)}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-e6eb79d8.4a757be4.js b/docs/assets/js/v-e6eb79d8.4a757be4.js deleted file mode 100644 index 6d66fbbc..00000000 --- a/docs/assets/js/v-e6eb79d8.4a757be4.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[979],{6339:(e,l,t)=>{"use strict";t.r(l),t.d(l,{data:()=>i});const i={key:"v-e6eb79d8",path:"/guide/skill.html",title:"",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"运行环境",slug:"运行环境",children:[]},{level:3,title:"后台系统",slug:"后台系统",children:[]},{level:3,title:"前台系统",slug:"前台系统",children:[]},{level:3,title:"微信小程序",slug:"微信小程序",children:[]},{level:3,title:"架构图",slug:"架构图",children:[]}],filePathRelative:"guide/skill.md",git:{updatedTime:1624495662e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:2}]}}},9080:(e,l,t)=>{"use strict";t.r(l),t.d(l,{default:()=>d});const i=(0,t(6252).uE)('

    # 运行环境

    环境版本
    操作系统Windows / Linux
    Jdk1.8
    Redis6.0
    Mysql8.0

    # 后台系统

    • spring-boot 2.1.6.RELEASE
    • spring-boot-security 用户登录验证
    • undertow web容器
    • mysql 最流行的开源数据库
    • redis 缓存,提升系统性能
    • mybatis 数据库中间件
    • hikari 速度最快的数据库连接池
    • 七牛云存储 分布式文件存储中心

    # 前台系统

    • vue 采用新版,使用了vue-cli4搭建的系统,减少大量配置文件
    • element-ui 最流行的vue UI框架
    • vue-element-admin 深度定制版
    • echarts 图表统计
    • ueditor 深度定制版

    # 微信小程序

    • iView 主题样式

    # 架构图

    架构图

    ',10),d={render:function(e,l){return i}}}}]); \ No newline at end of file diff --git a/docs/assets/js/v-e6eb79d8.53723784.js b/docs/assets/js/v-e6eb79d8.53723784.js new file mode 100644 index 00000000..c8c5f8d9 --- /dev/null +++ b/docs/assets/js/v-e6eb79d8.53723784.js @@ -0,0 +1 @@ +(self.webpackChunkxzs_docs=self.webpackChunkxzs_docs||[]).push([[979],{6339:(e,l,t)=>{"use strict";t.r(l),t.d(l,{data:()=>i});const i={key:"v-e6eb79d8",path:"/guide/skill.html",title:"技术栈",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:3,title:"运行环境",slug:"运行环境",children:[]},{level:3,title:"后台系统",slug:"后台系统",children:[]},{level:3,title:"前台系统",slug:"前台系统",children:[]},{level:3,title:"微信小程序",slug:"微信小程序",children:[]},{level:3,title:"架构图",slug:"架构图",children:[]}],filePathRelative:"guide/skill.md",git:{updatedTime:1624582989e3,contributors:[{name:"mindskip",email:"mindskip@qq.com",commits:5}]}}},8560:(e,l,t)=>{"use strict";t.r(l),t.d(l,{default:()=>d});const i=(0,t(6252).uE)('

    # 技术栈

    # 运行环境

    环境版本
    操作系统Windows / Linux
    Jdk1.8
    Redis6.0
    Mysql8.0

    # 后台系统

    • spring-boot 2.1.6.RELEASE
    • spring-boot-security 用户登录验证
    • undertow web容器
    • mysql 最流行的开源数据库
    • redis 缓存,提升系统性能
    • mybatis 数据库中间件
    • hikari 速度最快的数据库连接池
    • 七牛云存储 分布式文件存储中心

    # 前台系统

    • vue 采用新版,使用了vue-cli4搭建的系统,减少大量配置文件
    • element-ui 最流行的vue UI框架
    • vue-element-admin 深度定制版
    • echarts 图表统计
    • ueditor 深度定制版

    # 微信小程序

    • iView 主题样式

    # 架构图

    架构图

    ',11),d={render:function(e,l){return i}}}}]); \ No newline at end of file diff --git a/docs/guide/admin.html b/docs/guide/admin.html index 4e727ee1..9088d513 100644 --- a/docs/guide/admin.html +++ b/docs/guide/admin.html @@ -1,17 +1,17 @@ - 学之思教程 - - + 管理端 | 学之思教程 + + -

    # 登录 (/api/user/login)

    {
    +    

    # 管理端

    # 登录

    • 接口地址:/api/user/login
    • 请求参数:
    {
         "userName": "admin",  //用户名
         "password": "",  //密码
         "remember": false  //记住我
     }
    -
    1
    2
    3
    4
    5
    {
    +
    1
    2
    3
    4
    5
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": {
    @@ -35,8 +35,8 @@
             "wxOpenId": null
         }
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24

    # 首页 (/api/admin/dashboard/index)

    
    -
    1
     {
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24

    # 首页

    • 接口地址:/api/admin/dashboard/index
    • 请求参数:
    
    +
    1
    • 返回参数:
     {
         "examPaperCount": 2413,  //试卷总数
         "questionCount": 1025,  //题目总数
         "doExamPaperCount": 6148,  //总答卷数
    @@ -51,13 +51,13 @@
             "1"
         ]
     }    
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    # 学生列表 (/api/admin/user/page/list)

    {
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    # 学生列表

    • 接口地址:/api/admin/user/page/list
    • 请求参数:
    {
         "userName": "",  //用户名
         "role": 1,   //角色
         "pageIndex": 1,  //页码
         "pageSize": 10   //每页条数
     }
    -
    1
    2
    3
    4
    5
    6
    {
    +
    1
    2
    3
    4
    5
    6
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": {
    @@ -83,7 +83,44 @@
             ]
         }
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Last Updated: 2021-6-22 16:42:32
    Contributors: mindskip
    - +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

    # 学生编辑

    • 接口地址:/api/admin/user/edit
    • 请求参数:
    {
    +    "id": null,
    +    "userName": "testzz",  //用户名
    +    "password": "123456",  //密码
    +    "realName": "tesx",  //真实姓名
    +    "role": 1,  //角色
    +    "status": 1, //状态
    +    "age": "", //年龄
    +    "sex": "", //性别
    +    "birthDay": null, //生日
    +    "phone": null,  //手机号
    +    "userLevel": 1  //年级
    +}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    • 返回参数:
    {
    +    "code": 1,
    +    "message": "成功",
    +    "response": {
    +        "id": 109,
    +        "userUuid": "321dec89-0656-4736-ae4c-e2b07f4fcc67",  //用户id
    +        "userName": "testzz", //用户名
    +        "password": "" //密码
    +        "realName": "tesx",  //真实姓名
    +        "age": null, //年龄
    +        "sex": null, //性别
    +        "birthDay": null, //生日
    +        "userLevel": 1, //年级
    +        "phone": null, //手机号
    +        "role": 1, //角色
    +        "status": 1, //状态
    +        "imagePath": null, //头像
    +        "createTime": 1624538837259, //创建日期
    +        "modifyTime": null, //修改时间
    +        "lastActiveTime": 1624538837259, //最后活动时间
    +        "deleted": false, //是否删除
    +        "wxOpenId": null //微信openId
    +    }
    +}
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Last Updated: 2021-6-24 22:57:11
    Contributors: mindskip
    + diff --git a/docs/guide/api.html b/docs/guide/api.html deleted file mode 100644 index 6dc065d2..00000000 --- a/docs/guide/api.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - 学之思教程 - - - - - - - - diff --git a/docs/guide/database.html b/docs/guide/database.html index 5541e8e5..fe9db8d4 100644 --- a/docs/guide/database.html +++ b/docs/guide/database.html @@ -1,12 +1,12 @@ - 学之思教程 - - + 数据库设计 | 学之思教程 + + -

    # 试卷表 t_exam_paper

    字段名类型注释
    idint
    namevarchar试卷名称
    subject_idint学科
    paper_typeint试卷类型( 1.固定试卷 4.时段试卷 6.任务试卷 )
    grade_levelint年级
    scoreint试卷总分(千分制)
    question_countint题目数量
    suggest_timeint建议时长(分钟)
    limit_start_timedatetime时段试卷 开始时间
    limit_end_timedatetime时段试卷 结束时间
    frame_text_content_idint试卷框架 内容为JSON
    create_userint
    create_timedatetime
    deletedbit
    task_exam_idint

    # 试卷答案表 t_exam_paper_answer

    字段名类型注释
    idint
    exam_paper_idint
    paper_namevarchar试卷名称
    paper_typeint试卷类型( 1.固定试卷 4.时段试卷 6.任务试卷 )
    subject_idint学科
    system_scoreint系统判定得分
    user_scoreint最终得分(千分制)
    paper_scoreint试卷总分
    question_correctint做对题目数量
    question_countint题目总数量
    do_timeint做题时间(秒)
    statusint试卷状态(1待判分 2完成)
    create_userint学生
    create_timedatetime提交时间
    task_exam_idint

    # 试卷题目答案表 t_exam_paper_question_customer_answer

    字段名类型注释
    idint
    question_idint题目Id
    exam_paper_idint答案Id
    exam_paper_answer_idint
    question_typeint题型
    subject_idint学科
    customer_scoreint得分
    question_scoreint题目原始分数
    question_text_content_idint问题内容
    answervarchar做题答案
    text_content_idint做题内容
    do_rightbit是否正确
    create_userint做题人
    create_timedatetime
    item_orderint

    # 消息表 t_message

    字段名类型注释
    idint
    titlevarchar标题
    contentvarchar内容
    create_timedatetime
    send_user_idint发送者用户ID
    send_user_namevarchar发送者用户名
    send_real_namevarchar发送者真实姓名
    receive_user_countint接收人数
    read_countint已读人数

    # 用户消息表 t_message_user

    字段名类型注释
    idint
    message_idint消息内容ID
    receive_user_idint接收人ID
    receive_user_namevarchar接收人用户名
    receive_real_namevarchar接收人真实姓名
    readedbit是否已读
    create_timedatetime
    read_timedatetime阅读时间

    # 题目表 t_question

    字段名类型注释
    idint
    question_typeint1.单选题 2.多选题 3.判断题 4.填空题 5.简答题
    subject_idint学科
    scoreint题目总分(千分制)
    grade_levelint级别
    difficultint题目难度
    correcttext正确答案
    info_text_content_idint题目 填空、 题干、解析、答案等信息
    create_userint创建人
    statusint1.正常
    create_timedatetime创建时间
    deletedbit

    # 学科表 t_subject

    字段名类型注释
    idint
    namevarchar语文 数学 英语 等
    levelint年级 (1-12) 小学 初中 高中 大学
    level_namevarchar一年级、二年级等
    item_orderint排序
    deletedbit

    # 任务表 t_task_exam

    字段名类型注释
    idint
    titlevarchar
    grade_levelint级别
    frame_text_content_idint任务框架 内容为JSON
    create_userint
    create_timedatetime
    deletedbit
    create_user_namevarchar

    # 用户任务表 t_task_exam_customer_answer

    字段名类型注释
    idint
    task_exam_idint
    create_userint
    create_timedatetime
    text_content_idint任务完成情况(Json)

    # 文本表 t_text_content

    字段名类型注释
    idint
    contenttext
    create_timedatetime

    # 用户表 t_user

    字段名类型注释
    idint
    user_uuidvarchar
    user_namevarchar用户名
    passwordvarchar
    real_namevarchar真实姓名
    ageint
    sexint1.男 2女
    birth_daydatetime
    user_levelint学生年级(1-12)
    phonevarchar
    roleint1.学生 3.管理员
    statusint1.启用 2禁用
    image_pathvarchar头像地址
    create_timedatetime
    modify_timedatetime
    last_active_timedatetime
    deletedbit是否删除
    wx_open_idvarchar微信openId

    # 用户日志表 t_user_event_log

    字段名类型注释
    idint
    user_idint用户id
    user_namevarchar用户名
    real_namevarchar真实姓名
    contenttext内容
    create_timedatetime时间

    # 用户Token表 t_user_token

    字段名类型注释
    idint
    tokenvarchar
    user_idint用户Id
    wx_open_idvarchar微信openId
    create_timedatetime
    end_timedatetime
    user_namevarchar用户名
    Last Updated: 2021-6-22 16:42:32
    Contributors: mindskip
    - +

    # 数据库设计

    # 试卷表

    • 表名:t_exam_paper
    • 字段注释:
    字段名类型注释
    idint
    namevarchar试卷名称
    subject_idint学科
    paper_typeint试卷类型( 1.固定试卷 4.时段试卷 6.任务试卷 )
    grade_levelint年级
    scoreint试卷总分(千分制)
    question_countint题目数量
    suggest_timeint建议时长(分钟)
    limit_start_timedatetime时段试卷 开始时间
    limit_end_timedatetime时段试卷 结束时间
    frame_text_content_idint试卷框架 内容为JSON
    create_userint
    create_timedatetime
    deletedbit
    task_exam_idint

    # 试卷答案表

    • 表名:t_exam_paper_answer
    • 字段注释:
    字段名类型注释
    idint
    exam_paper_idint
    paper_namevarchar试卷名称
    paper_typeint试卷类型( 1.固定试卷 4.时段试卷 6.任务试卷 )
    subject_idint学科
    system_scoreint系统判定得分
    user_scoreint最终得分(千分制)
    paper_scoreint试卷总分
    question_correctint做对题目数量
    question_countint题目总数量
    do_timeint做题时间(秒)
    statusint试卷状态(1待判分 2完成)
    create_userint学生
    create_timedatetime提交时间
    task_exam_idint

    # 试卷题目答案表

    • 表名:t_exam_paper_question_customer_answer
    • 字段注释:
    字段名类型注释
    idint
    question_idint题目Id
    exam_paper_idint答案Id
    exam_paper_answer_idint
    question_typeint题型
    subject_idint学科
    customer_scoreint得分
    question_scoreint题目原始分数
    question_text_content_idint问题内容
    answervarchar做题答案
    text_content_idint做题内容
    do_rightbit是否正确
    create_userint做题人
    create_timedatetime
    item_orderint

    # 消息表

    • 表名:t_message
    • 字段注释:
    字段名类型注释
    idint
    titlevarchar标题
    contentvarchar内容
    create_timedatetime
    send_user_idint发送者用户ID
    send_user_namevarchar发送者用户名
    send_real_namevarchar发送者真实姓名
    receive_user_countint接收人数
    read_countint已读人数

    # 用户消息表

    • 表名:t_message_user
    • 字段注释:
    字段名类型注释
    idint
    message_idint消息内容ID
    receive_user_idint接收人ID
    receive_user_namevarchar接收人用户名
    receive_real_namevarchar接收人真实姓名
    readedbit是否已读
    create_timedatetime
    read_timedatetime阅读时间

    # 题目表

    • 表名:t_question
    • 字段注释:
    字段名类型注释
    idint
    question_typeint1.单选题 2.多选题 3.判断题 4.填空题 5.简答题
    subject_idint学科
    scoreint题目总分(千分制)
    grade_levelint级别
    difficultint题目难度
    correcttext正确答案
    info_text_content_idint题目 填空、 题干、解析、答案等信息
    create_userint创建人
    statusint1.正常
    create_timedatetime创建时间
    deletedbit

    # 学科表

    • 表名:t_subject
    • 字段注释:
    字段名类型注释
    idint
    namevarchar语文 数学 英语 等
    levelint年级 (1-12) 小学 初中 高中 大学
    level_namevarchar一年级、二年级等
    item_orderint排序
    deletedbit

    # 任务表

    • 表名:t_task_exam
    • 字段注释:
    字段名类型注释
    idint
    titlevarchar
    grade_levelint级别
    frame_text_content_idint任务框架 内容为JSON
    create_userint
    create_timedatetime
    deletedbit
    create_user_namevarchar

    # 用户任务表

    • 表名:t_task_exam_customer_answer
    • 字段注释:
    字段名类型注释
    idint
    task_exam_idint
    create_userint
    create_timedatetime
    text_content_idint任务完成情况(Json)

    # 文本表

    • 表名:t_text_content
    • 字段注释:
    字段名类型注释
    idint
    contenttext
    create_timedatetime

    # 用户表

    • 表名:t_user
    • 字段注释:
    字段名类型注释
    idint
    user_uuidvarchar
    user_namevarchar用户名
    passwordvarchar
    real_namevarchar真实姓名
    ageint
    sexint1.男 2女
    birth_daydatetime
    user_levelint学生年级(1-12)
    phonevarchar
    roleint1.学生 3.管理员
    statusint1.启用 2禁用
    image_pathvarchar头像地址
    create_timedatetime
    modify_timedatetime
    last_active_timedatetime
    deletedbit是否删除
    wx_open_idvarchar微信openId

    # 用户日志表

    • 表名:t_user_event_log
    • 字段注释:
    字段名类型注释
    idint
    user_idint用户id
    user_namevarchar用户名
    real_namevarchar真实姓名
    contenttext内容
    create_timedatetime时间

    # 用户Token表

    • 表名:t_user_token
    • 字段注释:
    字段名类型注释
    idint
    tokenvarchar
    user_idint用户Id
    wx_open_idvarchar微信openId
    create_timedatetime
    end_timedatetime
    user_namevarchar用户名
    Last Updated: 2021-6-24 22:57:11
    Contributors: mindskip
    + diff --git a/docs/guide/deploy.html b/docs/guide/deploy.html index 9efe1968..0da00c05 100644 --- a/docs/guide/deploy.html +++ b/docs/guide/deploy.html @@ -1,14 +1,14 @@ - 学之思教程 - - + 项目部署 | 学之思教程 + + -

    # 集成部署

    • 分别在\source\vue\xzs-student目录和source\vue\xzs-admin目录,执行前端打包命令
    npm run build
    +    

    # 项目部署

    # 方式一:集成部署

    • 分别在\source\vue\xzs-student目录和source\vue\xzs-admin目录,执行前端打包命令
    npm run build
     
    1
    nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod  xzs-3.3.0.jar  > start1.log  2>&1 &
    -
    1

    # 前后端分离部署

    • 采用前后端分离方式部署,后端启动和部署方式1一样
    • 前端采用nginx来装载静态页面,先创建/usr/local/xzs/web/目录,然后将打包后的student、admin放到此目录下
    • 页面访问端口为8001,注意检查防火墙端口是否打开
    • 学生端访问地址为:http://ip:8001/studentopen in new window
    • 管理员端访问地址为:http://ip:8001/adminopen in new window
    • nginx配置如下:
    server {
    +
    1

    # 方式二:前后端分离部署

    • 采用前后端分离方式部署,后端启动和部署方式1一样
    • 前端采用nginx来装载静态页面,先创建/usr/local/xzs/web/目录,然后将打包后的student、admin放到此目录下
    • 页面访问端口为8001,注意检查防火墙端口是否打开
    • 学生端访问地址为:http://ip:8001/studentopen in new window
    • 管理员端访问地址为:http://ip:8001/adminopen in new window
    • nginx配置如下:
    server {
         listen      8001;
         server_name xzs;
         location / {
    @@ -19,9 +19,9 @@
            proxy_pass  http://localhost:8000;
         }
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # docker部署

    • 准备好centos服务器
    • 先检查服务器端口、ip转发的是否配置正确,否则无法访问到docker内部
    • docker内部镜像已经安装了java、mysql、redis、nginx,均已配置好,无需其他操作
    • 执行下列docker命令,拉取镜像,启动容器
    • 学生端访问地址为:http://ip:8001/studentopen in new window
    • 管理员端访问地址为:http://ip:8001/adminopen in new window
    docker pull  registry.cn-hangzhou.aliyuncs.com/mindskip/xzs:v3.3.0
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # 方式三:docker部署

    • 准备好centos服务器
    • 先检查服务器端口、ip转发的是否配置正确,否则无法访问到docker内部
    • docker内部镜像已经安装了java、mysql、redis、nginx,均已配置好,无需其他操作
    • 执行下列docker命令,拉取镜像,启动容器
    • 学生端访问地址为:http://ip:8001/studentopen in new window
    • 管理员端访问地址为:http://ip:8001/adminopen in new window
    docker pull  registry.cn-hangzhou.aliyuncs.com/mindskip/xzs:v3.3.0
     docker run -d --name xzs --privileged -it  -d -p 8001:8001 -v /etc/localtime:/etc/localtime:ro  registry.cn-hangzhou.aliyuncs.com/mindskip/xzs:v3.3.0 /usr/sbin/init
    -
    1
    2
    Last Updated: 2021-6-22 16:42:32
    Contributors: mindskip
    - +
    1
    2
    Last Updated: 2021-6-24 22:57:11
    Contributors: mindskip
    + diff --git a/docs/guide/develop.html b/docs/guide/develop.html index 2515408c..f71391e4 100644 --- a/docs/guide/develop.html +++ b/docs/guide/develop.html @@ -1,16 +1,16 @@ - 学之思教程 - - + 项目开发 | 学之思教程 + + -

    # 开发说明

    • redis 安装
    • 进群获取到数据库脚本,创建表初始化数据,数据库名称为xzs
    • 代码分为 mysql版本,配合相应的数据库使用
    • 安装mysql ,导入xzs-mysql.sql脚本。
    • 学生端默认账号:student / 123456
    • 管理端默认账号:admin / 123456

    # 后端开发

    • /uexam/source/xzs为后台代码,建议使用IntelliJ IDEA打开
    • 打开application-dev.yml文件中,配置好mysql、redis的服务地址
    • 去七牛云官网申请好对象存储账号,修改application.yml中的qn相关的配置,七牛云主要用于文件存储。
    • 启动后台程序,默认端口为8000。
    • 学生系统地址:http://ip:8000/studentopen in new window
    • 管理端地址:http://ip:8000/adminopen in new window

    # 前端开发

    • 前端使用webstorm或者vscode,分别打开文件夹打开源代码\source\vue\xzs-student和source\vue\xzs-admin
    • 执行下面2个命令,安装node_module:
    npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
    +    

    # 项目开发

    # 开发说明

    • redis 安装
    • 进群获取到数据库脚本,创建表初始化数据,数据库名称为xzs
    • 代码分为 mysql版本,配合相应的数据库使用
    • 安装mysql ,导入xzs-mysql.sql脚本。
    • 学生端默认账号:student / 123456
    • 管理端默认账号:admin / 123456

    # 后端开发

    • /uexam/source/xzs为后台代码,建议使用IntelliJ IDEA打开
    • 打开application-dev.yml文件中,配置好mysql、redis的服务地址
    • 去七牛云官网申请好对象存储账号,修改application.yml中的qn相关的配置,七牛云主要用于文件存储。
    • 启动后台程序,默认端口为8000。
    • 学生系统地址:http://ip:8000/studentopen in new window
    • 管理端地址:http://ip:8000/adminopen in new window

    # 前端开发

    • 前端使用webstorm或者vscode,分别打开文件夹打开源代码\source\vue\xzs-student和source\vue\xzs-admin
    • 执行下面2个命令,安装node_module:
    npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
     npm install --registry https://registry.npm.taobao.org  
     
    1
    2
    • 执行下面命令,启动前端代码
    npm run serve
     
    1
    • 打包命名
    npm run build
    -
    1

    # 微信小程序开发

    • 去腾讯小程序官网注册账号,拿到appid和secret信息
    • 下载好微信小程序开发工具
    • 打开工具,导入代码 \source\wx\xzs-student
    • 修改application.yml文件里的wx配置下面的appid和secret
    • 启动小程序开发工具
    Last Updated: 2021-6-22 16:51:30
    Contributors: mindskip
    - +
    1

    # 微信小程序开发

    • 去腾讯小程序官网注册账号,拿到appid和secret信息
    • 下载好微信小程序开发工具
    • 打开工具,导入代码 \source\wx\xzs-student
    • 修改application.yml文件里的wx配置下面的appid和secret
    • 启动小程序开发工具
    Last Updated: 2021-6-24 22:57:11
    Contributors: mindskip
    + diff --git a/docs/guide/feature.html b/docs/guide/feature.html index 5cad9494..0a6a0a19 100644 --- a/docs/guide/feature.html +++ b/docs/guide/feature.html @@ -1,12 +1,12 @@ - 学之思教程 - - + 功能列表 | 学之思教程 + + -

    # 学生系统功能

    • 登录、注册: 注册时要选年级,过滤不同年级的试卷, 账号为:student/123456
    • 首页: 任务中心、固定试卷、时段试卷、试卷可以重复做
    • 试卷中心: 包含了所有能做的试卷,按学科来过滤和分页
    • 考试记录: 所有的试卷考试记录在此处分页,可以查看试卷结果、用时、得分、自行批改等
    • 错题本: 所有做错的题目,可以看到做题的结果、分数、难度、解析、正确答案等
    • 个人中心: 个人日志记录
    • 消息: 消息通知
    • 试卷答题和试卷查看: 展示出题目的基本信息和需要填写的内容

    # 管理系统功能

    • 登录: 账号为: admin/123456
    • 主页: 包含了试卷、题目、做卷数、做题数、用户活跃度的统计功能,活跃度和做题数是按月统计
    • 用户管理: 对不同角色 学生、管理员 的增删改查管理功能
    • 卷题管理:
      1. 试卷列表:试卷的增删改查,新增包含选择学科、试卷类型、试卷名称、考试时间,试卷内容包含添加大标题,然后添加题目到此试卷中,组成一套完整的试卷
      2. 题目列表:题目的增删改查,目前题型包含单选题、多选题、判断题、填空题、简单题,支持图片、公式等。
    • 任务管理:对任务进行修改
    • 教育管理:对不同年级的学科进行增删改查
    • 答卷管理:查看学生成绩
    • 消息中心:可以对多个用户进行消息发送
    • 日志中心:用户的基本操作进行日志记录,了解用户使用过情况

    # 小程序功能

    • 用户登录登出功能,登录会自动绑定微信账号,登出会解绑
    • 首页包含任务中心、固定试卷、时段试卷,和web端保持一致
    • 试卷模块,固定试卷和时段试卷的分页查询,下拉加载更多,上拉刷新当前数据
    • 记录模块,考试结果的分页,包含了试卷基本信息
    • 我的模块,包含个人资料的修改,个人动态,消息中心模块
    Last Updated: 2021-6-22 16:42:32
    Contributors: mindskip
    - +

    # 功能列表

    # 学生系统功能

    • 登录、注册: 注册时要选年级,过滤不同年级的试卷, 账号为:student/123456
    • 首页: 任务中心、固定试卷、时段试卷、试卷可以重复做
    • 试卷中心: 包含了所有能做的试卷,按学科来过滤和分页
    • 考试记录: 所有的试卷考试记录在此处分页,可以查看试卷结果、用时、得分、自行批改等
    • 错题本: 所有做错的题目,可以看到做题的结果、分数、难度、解析、正确答案等
    • 个人中心: 个人日志记录
    • 消息: 消息通知
    • 试卷答题和试卷查看: 展示出题目的基本信息和需要填写的内容

    # 管理系统功能

    • 登录: 账号为: admin/123456
    • 主页: 包含了试卷、题目、做卷数、做题数、用户活跃度的统计功能,活跃度和做题数是按月统计
    • 用户管理: 对不同角色 学生、管理员 的增删改查管理功能
    • 卷题管理:
      1. 试卷列表:试卷的增删改查,新增包含选择学科、试卷类型、试卷名称、考试时间,试卷内容包含添加大标题,然后添加题目到此试卷中,组成一套完整的试卷
      2. 题目列表:题目的增删改查,目前题型包含单选题、多选题、判断题、填空题、简单题,支持图片、公式等。
    • 任务管理:对任务进行修改
    • 教育管理:对不同年级的学科进行增删改查
    • 答卷管理:查看学生成绩
    • 消息中心:可以对多个用户进行消息发送
    • 日志中心:用户的基本操作进行日志记录,了解用户使用过情况

    # 小程序功能

    • 用户登录登出功能,登录会自动绑定微信账号,登出会解绑
    • 首页包含任务中心、固定试卷、时段试卷,和web端保持一致
    • 试卷模块,固定试卷和时段试卷的分页查询,下拉加载更多,上拉刷新当前数据
    • 记录模块,考试结果的分页,包含了试卷基本信息
    • 我的模块,包含个人资料的修改,个人动态,消息中心模块
    Last Updated: 2021-6-24 22:57:11
    Contributors: mindskip
    + diff --git a/docs/guide/skill.html b/docs/guide/skill.html index b1cad3bd..001878c1 100644 --- a/docs/guide/skill.html +++ b/docs/guide/skill.html @@ -1,12 +1,12 @@ - 学之思教程 - - + 技术栈 | 学之思教程 + + -

    # 运行环境

    环境版本
    操作系统Windows / Linux
    Jdk1.8
    Redis6.0
    Mysql8.0

    # 后台系统

    • spring-boot 2.1.6.RELEASE
    • spring-boot-security 用户登录验证
    • undertow web容器
    • mysql 最流行的开源数据库
    • redis 缓存,提升系统性能
    • mybatis 数据库中间件
    • hikari 速度最快的数据库连接池
    • 七牛云存储 分布式文件存储中心

    # 前台系统

    • vue 采用新版,使用了vue-cli4搭建的系统,减少大量配置文件
    • element-ui 最流行的vue UI框架
    • vue-element-admin 深度定制版
    • echarts 图表统计
    • ueditor 深度定制版

    # 微信小程序

    • iView 主题样式

    # 架构图

    架构图

    Last Updated: 2021-6-24 8:47:42
    Contributors: mindskip
    - +

    # 技术栈

    # 运行环境

    环境版本
    操作系统Windows / Linux
    Jdk1.8
    Redis6.0
    Mysql8.0

    # 后台系统

    • spring-boot 2.1.6.RELEASE
    • spring-boot-security 用户登录验证
    • undertow web容器
    • mysql 最流行的开源数据库
    • redis 缓存,提升系统性能
    • mybatis 数据库中间件
    • hikari 速度最快的数据库连接池
    • 七牛云存储 分布式文件存储中心

    # 前台系统

    • vue 采用新版,使用了vue-cli4搭建的系统,减少大量配置文件
    • element-ui 最流行的vue UI框架
    • vue-element-admin 深度定制版
    • echarts 图表统计
    • ueditor 深度定制版

    # 微信小程序

    • iView 主题样式

    # 架构图

    架构图

    Last Updated: 2021-6-25 9:03:09
    Contributors: mindskip
    + diff --git a/docs/guide/student.html b/docs/guide/student.html index 5c3e516b..399e1307 100644 --- a/docs/guide/student.html +++ b/docs/guide/student.html @@ -1,22 +1,22 @@ - 学之思教程 - - + 学生端 | 学之思教程 + + -

    # 登录 (/api/user/login)

    {
    +    

    # 学生端

    # 登录

    • 接口地址:/api/user/login
    • 请求参数:
    {
         "userName": "student",  //用户名
         "password": "",  //密码
         "remember": false  //下次自动登录
     }
    -
    1
    2
    3
    4
    5
    {
    +
    1
    2
    3
    4
    5
    • 返回参数:
    {
             "userName": "student",  //用户名
             "imagePath": "",  //头像
    -    }
    -
    1
    2
    3
    4

    # 首页 (/api/student/dashboard/index)

    
    -
    1
    {
    +}
    +
    1
    2
    3
    4

    # 首页

    • 接口地址:/api/student/dashboard/index
    • 请求参数:
    
    +
    1
    • 返回参数:
    {
         "fixedPaper": [  //固定试卷
             {
                 "id": 2399,  //试卷Id
    @@ -27,8 +27,8 @@
         ],
         "timeLimitPaper": []    //时段试卷
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # 任务中心 (/api/student/dashboard/task)

    
    -
    1
    [
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # 任务中心

    • 接口地址:/api/student/dashboard/task
    • 请求参数:
    
    +
    1
    • 返回参数:
    [
             {
                 "id": 9,  //任务id
                 "title": "2021-04-25作业",  //任务标题
    @@ -42,14 +42,14 @@
                 ]
             }
         ]
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    # 未读消息数量 (/api/student/user/message/unreadCount)

    
    -
    1
    {
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    # 未读消息数量

    • 接口地址:/api/student/user/message/unreadCount
    • 请求参数:
    
    +
    1
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": 0  //未读消息数量
     }
    -
    1
    2
    3
    4
    5

    # 学科列表 (/api/student/education/subject/list)

    
    -
    1
    {
    +
    1
    2
    3
    4
    5

    # 学科列表

    • 接口地址:/api/student/education/subject/list
    • 请求参数:
    
    +
    1
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": [
    @@ -59,13 +59,13 @@
             }
         ]
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 试卷列表 (/api/student/exam/paper/pageList)

    {
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 试卷列表

    • 接口地址:/api/student/exam/paper/pageList
    • 请求参数:
    {
         "paperType": 1, //试卷类型
         "subjectId": 158, //学科id
         "pageIndex": 1, //页数
         "pageSize": 10  //每页条数
     }
    -
    1
    2
    3
    4
    5
    6
    {
    +
    1
    2
    3
    4
    5
    6
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": {
    @@ -86,11 +86,11 @@
             ]
         }
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    # 考试记录 (/api/student/exampaper/answer/pageList)

    {
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    # 考试记录

    • 接口地址:/api/student/exampaper/answer/pageList
    • 请求参数:
    {
         "pageIndex": 1, //页码
         "pageSize": 10  //每页条数
     }
    -
    1
    2
    3
    4
    {
    +
    1
    2
    3
    4
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": {
    @@ -115,11 +115,11 @@
             ]
         }
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25

    # 错题本 (/api/student/question/answer/page)

    {
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25

    # 错题本

    • 接口地址:/api/student/question/answer/page
    • 请求参数:
    {
         "pageIndex": 1, //页码
         "pageSize": 10  //每页条数
     }
    -
    1
    2
    3
    4
    {
    +
    1
    2
    3
    4
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": {
    @@ -135,11 +135,11 @@
             ]
         }
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    # 答题详情 (/api/student/question/answer/select/25067)

    {
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    # 答题详情

    • 接口地址:/api/student/question/answer/select/25067
    • 请求参数:
    {
         "pageIndex": 1, //页码
         "pageSize": 10  //每页条数
     }
    -
    1
    2
    3
    4
    {
    +
    1
    2
    3
    4
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": {
    @@ -175,8 +175,8 @@
             }
         }
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36

    # 用户动态 (/api/student/user/log)

    
    -
    1
    {
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36

    # 用户动态

    • 接口地址:/api/student/user/log
    • 请求参数:
    
    +
    1
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": [
    @@ -190,8 +190,8 @@
             }
         ]
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    # 当前用户信息 (/api/student/user/current)

    
    -
    1
    {
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    # 当前用户信息

    • 接口地址:/api/student/user/current
    • 请求参数:
    
    +
    1
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": {
    @@ -213,7 +213,7 @@
             "imagePath": ""  //用户头像
         }
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

    # 修改用户信息 (/api/student/user/update)

    {
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

    # 修改用户信息

    • 接口地址:/api/student/user/update
    • 请求参数:
    {
         "id": 1,
         "userUuid": "d2d29da2-dcb3-4013-b874-727626236f47",
         "userName": "student",  //用户名
    @@ -231,16 +231,16 @@
         "classes": "1班",  //用户班级
         "imagePath": ""  //用户头像
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    {
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": null
     }
    -
    1
    2
    3
    4
    5

    # 消息列表 (/api/student/user/message/page)

    {
    +
    1
    2
    3
    4
    5

    # 消息列表

    • 接口地址:/api/student/user/message/page
    • 请求参数:
    {
         "pageIndex": 1, //页码
         "pageSize": 10  //每页条数
     }
    -
    1
    2
    3
    4
    {
    +
    1
    2
    3
    4
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": {
    @@ -258,19 +258,19 @@
             ]
         }
     }
    -
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    # 消息标记已读 (/api/student/user/message/read/14)

    
    -
    1
    {
    +
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    # 消息标记已读

    • 接口地址:/api/student/user/message/read/14
    • 请求参数:
    
    +
    1
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": null
     }
    -
    1
    2
    3
    4
    5

    # 登出 (/api/user/logout)

    
    -
    1
    {
    +
    1
    2
    3
    4
    5

    # 登出

    • 接口地址:/api/user/logout
    • 请求参数:
    
    +
    1
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": null
     }
    -
    1
    2
    3
    4
    5
    Last Updated: 2021-6-22 16:42:32
    Contributors: mindskip
    - +
    1
    2
    3
    4
    5
    Last Updated: 2021-6-24 22:57:11
    Contributors: mindskip
    + diff --git a/docs/guide/video.html b/docs/guide/video.html index 7c2b9cec..1b546bed 100644 --- a/docs/guide/video.html +++ b/docs/guide/video.html @@ -1,12 +1,12 @@ - 学之思教程 - - + 视频教程 | 学之思教程 + + -

    # 第一部分:基础软件安装

        VC_redist.x64 :  Redis数据库依赖、mysql依赖,先安装这个
    +    

    # 视频教程

    # 第一部分:基础软件安装

        VC_redist.x64 :  Redis数据库依赖、mysql依赖,先安装这个
         ideaIU-2020.3.3 : java开发工具
         mysql-installer-community-8.0.19.0 : Mysql数据库安装包
         navicat150_mysql_cs_x64 : Mysql数据库连接工具
    @@ -23,7 +23,7 @@
     
    1
    2
    3
    4
    5
    • 按文档教程中的项目部署操作来
    • 首先展示集成部署
    • 这个jar包就是打包之后的运行程序,我们使用命令运行
       java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod  xzs-3.3.0.jar 
     
    1

    # 第六部分:CentOS系统部署

    • 下载好xshell和xftp,这个工具用于连接centos服务器的
    • 可在群文件中找到Xftp-7.0.0063p 和 Xshell-7.0.0065p ,直接安装
    • 打开xshell , 连接准备好的centos服务器
    • 服务器中要安装好 redis、mysql 8 、jdk 1.8、nginx , 可以自行搜索教程进行安装
    • 安装好后,我们检测下是否都在运行
    • 创建数据库xzs、导入xzs-mysql.sql脚本
    • 登录mysql,执行导入命令:
        mysql -u root -p -D xzs < /usr/local/xzs/sql/xzs-mysql.sql
     
    1
    • 数据导入成功后,可以登录mysql数据库,检查一下是否成功
    • 打包jar文件,注意修改配置文件application-prod.yml ,正式环境用的这个文件,这里里面的数据库连接地址和账号等,由于都是服务器本地的,都用localhost即可
    • 上传jar包到服务器中
    • 启动学之思后端程序
        nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod  xzs-3.3.0.jar  > start1.log  2>&1 &
    -
    1

    # 第七部分:使用手册

    Last Updated: 2021-6-22 16:42:32
    Contributors: mindskip
    - +
    1

    # 第七部分:使用手册

    Last Updated: 2021-6-24 22:57:11
    Contributors: mindskip
    + diff --git a/docs/guide/wx.html b/docs/guide/wx.html index 42302c05..892628a4 100644 --- a/docs/guide/wx.html +++ b/docs/guide/wx.html @@ -1,20 +1,20 @@ - 学之思教程 - - + 微信小程序端 | 学之思教程 + + -

    # 登录 (/api/wx/student/auth/bind)

         userName: student  //用户名
    +    

    # 微信小程序端

    # 登录

    • 接口地址:/api/wx/student/auth/bind
    • 请求参数:
         userName: student  //用户名
          password: 123456   //密码
          code: 023BNuFa1CQ14B07KVHa16RHM94BNuF0   //授权码
    -
    1
    2
    3
    {
    +
    1
    2
    3
    • 返回参数:
    {
         "code": 1,
         "message": "成功",
         "response": "950efd96-ecd1-4482-9204-c54cd3325a8a"  //登录Token
     }
    -
    1
    2
    3
    4
    5
    Last Updated: 2021-6-22 16:42:32
    Contributors: mindskip
    - +
    1
    2
    3
    4
    5
    Last Updated: 2021-6-24 22:57:11
    Contributors: mindskip
    + diff --git a/docs/images/1.png b/docs/images/1.png deleted file mode 100644 index 8c4669b9..00000000 Binary files a/docs/images/1.png and /dev/null differ diff --git a/doc/image/admin/1.png b/docs/images/admin/1.png similarity index 100% rename from doc/image/admin/1.png rename to docs/images/admin/1.png diff --git a/doc/image/admin/10.png b/docs/images/admin/10.png similarity index 100% rename from doc/image/admin/10.png rename to docs/images/admin/10.png diff --git a/doc/image/admin/11.png b/docs/images/admin/11.png similarity index 100% rename from doc/image/admin/11.png rename to docs/images/admin/11.png diff --git a/doc/image/admin/12.png b/docs/images/admin/12.png similarity index 100% rename from doc/image/admin/12.png rename to docs/images/admin/12.png diff --git a/doc/image/admin/13.png b/docs/images/admin/13.png similarity index 100% rename from doc/image/admin/13.png rename to docs/images/admin/13.png diff --git a/doc/image/admin/2.png b/docs/images/admin/2.png similarity index 100% rename from doc/image/admin/2.png rename to docs/images/admin/2.png diff --git a/doc/image/admin/3.png b/docs/images/admin/3.png similarity index 100% rename from doc/image/admin/3.png rename to docs/images/admin/3.png diff --git a/doc/image/admin/4.png b/docs/images/admin/4.png similarity index 100% rename from doc/image/admin/4.png rename to docs/images/admin/4.png diff --git a/doc/image/admin/5.png b/docs/images/admin/5.png similarity index 100% rename from doc/image/admin/5.png rename to docs/images/admin/5.png diff --git a/doc/image/admin/6.png b/docs/images/admin/6.png similarity index 100% rename from doc/image/admin/6.png rename to docs/images/admin/6.png diff --git a/doc/image/admin/7.png b/docs/images/admin/7.png similarity index 100% rename from doc/image/admin/7.png rename to docs/images/admin/7.png diff --git a/doc/image/admin/8.png b/docs/images/admin/8.png similarity index 100% rename from doc/image/admin/8.png rename to docs/images/admin/8.png diff --git a/doc/image/admin/9.png b/docs/images/admin/9.png similarity index 100% rename from doc/image/admin/9.png rename to docs/images/admin/9.png diff --git a/doc/image/frame/1.png b/docs/images/frame/1.png similarity index 100% rename from doc/image/frame/1.png rename to docs/images/frame/1.png diff --git a/doc/image/logo/1.png b/docs/images/logo/1.png similarity index 100% rename from doc/image/logo/1.png rename to docs/images/logo/1.png diff --git a/docs/images/favicon.png b/docs/images/logo/favicon.png similarity index 100% rename from docs/images/favicon.png rename to docs/images/logo/favicon.png diff --git a/docs/images/logo.png b/docs/images/logo/logo.png similarity index 100% rename from docs/images/logo.png rename to docs/images/logo/logo.png diff --git a/doc/image/student/1.png b/docs/images/student/1.png similarity index 100% rename from doc/image/student/1.png rename to docs/images/student/1.png diff --git a/doc/image/student/10.png b/docs/images/student/10.png similarity index 100% rename from doc/image/student/10.png rename to docs/images/student/10.png diff --git a/doc/image/student/11.png b/docs/images/student/11.png similarity index 100% rename from doc/image/student/11.png rename to docs/images/student/11.png diff --git a/doc/image/student/12.png b/docs/images/student/12.png similarity index 100% rename from doc/image/student/12.png rename to docs/images/student/12.png diff --git a/doc/image/student/2.png b/docs/images/student/2.png similarity index 100% rename from doc/image/student/2.png rename to docs/images/student/2.png diff --git a/doc/image/student/3.png b/docs/images/student/3.png similarity index 100% rename from doc/image/student/3.png rename to docs/images/student/3.png diff --git a/doc/image/student/4.png b/docs/images/student/4.png similarity index 100% rename from doc/image/student/4.png rename to docs/images/student/4.png diff --git a/doc/image/student/5.png b/docs/images/student/5.png similarity index 100% rename from doc/image/student/5.png rename to docs/images/student/5.png diff --git a/doc/image/student/6.png b/docs/images/student/6.png similarity index 100% rename from doc/image/student/6.png rename to docs/images/student/6.png diff --git a/doc/image/student/8.png b/docs/images/student/8.png similarity index 100% rename from doc/image/student/8.png rename to docs/images/student/8.png diff --git a/doc/image/student/9.png b/docs/images/student/9.png similarity index 100% rename from doc/image/student/9.png rename to docs/images/student/9.png diff --git a/doc/image/wx/code/1.jpg b/docs/images/wx/code/1.jpg similarity index 100% rename from doc/image/wx/code/1.jpg rename to docs/images/wx/code/1.jpg diff --git a/doc/image/wx/code/2.jpg b/docs/images/wx/code/2.jpg similarity index 100% rename from doc/image/wx/code/2.jpg rename to docs/images/wx/code/2.jpg diff --git a/doc/image/wx/student/1.png b/docs/images/wx/student/1.png similarity index 100% rename from doc/image/wx/student/1.png rename to docs/images/wx/student/1.png diff --git a/doc/image/wx/student/2.png b/docs/images/wx/student/2.png similarity index 100% rename from doc/image/wx/student/2.png rename to docs/images/wx/student/2.png diff --git a/doc/image/wx/student/3.png b/docs/images/wx/student/3.png similarity index 100% rename from doc/image/wx/student/3.png rename to docs/images/wx/student/3.png diff --git a/doc/image/wx/student/4.png b/docs/images/wx/student/4.png similarity index 100% rename from doc/image/wx/student/4.png rename to docs/images/wx/student/4.png diff --git a/doc/image/wx/student/5.png b/docs/images/wx/student/5.png similarity index 100% rename from doc/image/wx/student/5.png rename to docs/images/wx/student/5.png diff --git a/doc/image/wx/student/6.png b/docs/images/wx/student/6.png similarity index 100% rename from doc/image/wx/student/6.png rename to docs/images/wx/student/6.png diff --git a/doc/image/wx/student/7.png b/docs/images/wx/student/7.png similarity index 100% rename from doc/image/wx/student/7.png rename to docs/images/wx/student/7.png diff --git a/doc/image/wx/student/8.png b/docs/images/wx/student/8.png similarity index 100% rename from doc/image/wx/student/8.png rename to docs/images/wx/student/8.png diff --git a/doc/image/wx/student/9.png b/docs/images/wx/student/9.png similarity index 100% rename from doc/image/wx/student/9.png rename to docs/images/wx/student/9.png diff --git a/docs/index.html b/docs/index.html index 4de05669..61aa300e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2,11 +2,11 @@ 学之思教程 - - + + -

    # 项目介绍

    学之思开源考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序,能覆盖到pc机和手机等设备。 支持多种部署方式:集成部署、前后端分离部署、docker部署。

    • 码云最有价值开源项目
    • 累计star数超过 7000+
    • 开源在线考试系统排行首位
    • 交流人数超过 5000+

    # 使用须知

    开源协议: AGPL-3.0

    # 仓库地址

    gitee - postgresql :https://gitee.com/mindskip/uexamopen in new window

    gitee - mysql :https://gitee.com/mindskip/xzs-mysqlopen in new window

    github - postgresql :https://github.com/mindskip/xzsopen in new window

    github - mysql :https://github.com/mindskip/xzs-mysqlopen in new window

    # QQ交流群

    • 开源交流群⑪:626073476
    • 开源交流群⑩:575732100 (满)
    • 开源交流群⑨:604864648 (满)
    • 开源交流群⑧:902855996 (满)
    • 开源交流群⑦:873533715 (满)
    • 开源交流群⑥:593529956 (满)
    • 开源交流群⑤:1074095891 (满)
    • 开源交流群④:1039666905 (满)
    • 开源交流群③:670546875 (满)
    • 开源交流群②:947654489 (满)
    • 开源交流群①:530136203 (满)
    Last Updated: 2021-6-22 16:42:32
    Contributors: mindskip
    - +

    # 项目介绍

    学之思开源考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序,能覆盖到pc机和手机等设备。 支持多种部署方式:集成部署、前后端分离部署、docker部署。

    • 码云最有价值开源项目
    • 累计star数超过 7000+
    • 开源在线考试系统排行首位
    • 交流人数超过 5000+

    # 使用须知

    开源协议: AGPL-3.0

    # 仓库地址

    gitee - postgresql :https://gitee.com/mindskip/uexamopen in new window

    gitee - mysql :https://gitee.com/mindskip/xzs-mysqlopen in new window

    github - postgresql :https://github.com/mindskip/xzsopen in new window

    github - mysql :https://github.com/mindskip/xzs-mysqlopen in new window

    # QQ交流群

    • 开源交流群⑪:626073476
    • 开源交流群⑩:575732100 (满)
    • 开源交流群⑨:604864648 (满)
    • 开源交流群⑧:902855996 (满)
    • 开源交流群⑦:873533715 (满)
    • 开源交流群⑥:593529956 (满)
    • 开源交流群⑤:1074095891 (满)
    • 开源交流群④:1039666905 (满)
    • 开源交流群③:670546875 (满)
    • 开源交流群②:947654489 (满)
    • 开源交流群①:530136203 (满)
    Last Updated: 2021-6-22 16:42:32
    Contributors: mindskip
    +