use ??.
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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(
|
||||||
() =>
|
() =>
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user