This commit is contained in:
2023-01-13 10:54:34 +08:00
parent ab5cb8610b
commit edce7c4cc7
15 changed files with 30 additions and 29 deletions

View File

@@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import Login from "../shared/user/login.vue" import Login from "../shared/Login/index.vue"
import Signup from "../shared/user/signup.vue" import Signup from "../shared/Signup/index.vue"
import Header from "../shared/layout/header.vue" import Header from "../shared/Header/index.vue"
</script> </script>
<template> <template>

View File

@@ -13,14 +13,14 @@ import {
import { Problem, Submission, SubmitCodePayload } from "../../../utils/types" import { Problem, Submission, SubmitCodePayload } from "../../../utils/types"
import { getSubmission, submitCode } from "../../api" import { getSubmission, submitCode } from "../../api"
import SubmissionResultTag from "../../components/submission-result-tag.vue" import SubmissionResultTag from "../../components/SubmissionResultTag.vue"
import { useCodeStore } from "../../stores/code" import { useCodeStore } from "../../stores/code"
const problem = inject<Ref<Problem>>("problem") const problem = inject<Ref<Problem>>("problem")
const { code } = useCodeStore() const { code } = useCodeStore()
const route = useRoute() const route = useRoute()
const contestID = <string>route.params.contestID || "" const contestID = <string>route.params.contestID ?? ""
const submissionId = ref("") const submissionId = ref("")
const submission = ref<Submission | null>(null) const submission = ref<Submission | null>(null)

View File

@@ -6,8 +6,8 @@ import { submissionExists } from "../../api"
import { TabsPaneContext } from "element-plus" import { TabsPaneContext } from "element-plus"
import Monaco from "../../../shared/monaco/index.vue" import Monaco from "../../../shared/monaco/index.vue"
import SubmitPanel from "../components/submit-panel.vue" import SubmitPanel from "./SubmitPanel.vue"
import TestcasePanel from "../components/testcase-panel.vue" import TestcasePanel from "./TestcasePanel.vue"
interface Props { interface Props {
problem: Problem problem: Problem

View File

@@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import Editor from "./components/editor.vue" import Editor from "./components/Editor.vue"
import ProblemContent from "./components/problem-content.vue" import ProblemContent from "./components/ProblemContent.vue"
import ProblemInfo from "./components/problem-info.vue" import ProblemInfo from "./components/ProblemInfo.vue"
import { getProblem } from "../api" import { getProblem } from "../api"
import { isDesktop, isMobile } from "../../utils/breakpoints" import { isDesktop, isMobile } from "../../utils/breakpoints"

View File

@@ -20,19 +20,19 @@ const total = ref(0)
const { data: tags } = getProblemTagList() const { data: tags } = getProblemTagList()
const query = reactive({ const query = reactive({
keyword: (route.query.keyword as string) || "", keyword: route.query.keyword ?? "",
difficulty: route.query.difficulty || "", difficulty: route.query.difficulty ?? "",
tag: route.query.tag || "", tag: route.query.tag ?? "",
page: parseInt(<string>route.query.page) || 1, page: parseInt(<string>route.query.page) ?? 1,
limit: parseInt(<string>route.query.limit) || 10, limit: parseInt(<string>route.query.limit) ?? 10,
}) })
async function listProblems() { async function listProblems() {
query.keyword = (route.query.keyword as string) || "" query.keyword = route.query.keyword ?? ""
query.difficulty = route.query.difficulty || "" query.difficulty = route.query.difficulty ?? ""
query.tag = route.query.tag || "" query.tag = route.query.tag ?? ""
query.page = parseInt(<string>route.query.page) || 1 query.page = parseInt(<string>route.query.page) ?? 1
query.limit = parseInt(<string>route.query.limit) || 10 query.limit = parseInt(<string>route.query.limit) ?? 10
if (query.page < 1) query.page = 1 if (query.page < 1) query.page = 1
const offset = (query.page - 1) * query.limit const offset = (query.page - 1) * query.limit

View File

@@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { FormInstance } from "element-plus" import { FormInstance } from "element-plus"
import { useSignupStore } from "../../oj/stores/signup" import { useSignupStore } from "../../oj/stores/signup"
import { login } from "../../shared/api" import { login } from "../api"
import { useLoginStore } from "../store/login" import { useLoginStore } from "../store/login"
import { useUserStore } from "../store/user" import { useUserStore } from "../store/user"
@@ -56,15 +56,16 @@ function goSignup() {
label-position="right" label-position="right"
label-width="70px" label-width="70px"
> >
<el-form-item label="用户名" required prop="username" name="username"> <el-form-item label="用户名" required prop="username">
<el-input v-model="form.username"></el-input> <el-input v-model="form.username" name="username"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="密码" required prop="password" name="password"> <el-form-item label="密码" required prop="password">
<el-input <el-input
v-model="form.password" v-model="form.password"
type="password" type="password"
show-password show-password
@change="submit" @change="submit"
name="password"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>

View File

@@ -33,8 +33,8 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import Resizer from "./resizer.vue" import Resizer from "./Resizer.vue"
import Pane from "./pane.vue" import Pane from "./Pane.vue"
import { computed, ref } from "vue" import { computed, ref } from "vue"
import { classNameToArray } from "element-plus/es/utils" import { classNameToArray } from "element-plus/es/utils"

View File

@@ -8,7 +8,7 @@ import { getUserInfo } from "../api"
export const useUserStore = defineStore("user", () => { export const useUserStore = defineStore("user", () => {
const { data: profile, isFinished, execute } = getUserInfo("") const { data: profile, isFinished, execute } = getUserInfo("")
const user = computed(() => profile.value.user || {}) const user = computed(() => profile?.value?.user ?? {})
const isAuthed = computed(() => !!user.value.email) const isAuthed = computed(() => !!user.value.email)
const isAdminRole = computed( const isAdminRole = computed(
() => () =>

View File

@@ -5,11 +5,11 @@ import { Code } from "./types"
const http = axios.create({ baseURL: "https://judge0api.hyyz.izhai.net" }) const http = axios.create({ baseURL: "https://judge0api.hyyz.izhai.net" })
function encode(str: string) { function encode(str: string) {
return btoa(unescape(encodeURIComponent(str || ""))) return btoa(unescape(encodeURIComponent(str ?? "")))
} }
function decode(bytes: string) { function decode(bytes: string) {
let escaped = escape(atob(bytes || "")) let escaped = escape(atob(bytes ?? ""))
try { try {
return decodeURIComponent(escaped) return decodeURIComponent(escaped)
} catch (e) { } catch (e) {