diff --git a/components.d.ts b/components.d.ts index 3fe1446..f1b6e92 100644 --- a/components.d.ts +++ b/components.d.ts @@ -31,22 +31,21 @@ declare module 'vue' { NGi: typeof import('naive-ui')['NGi'] NGrid: typeof import('naive-ui')['NGrid'] NInput: typeof import('naive-ui')['NInput'] - NInputNumber: typeof import('naive-ui')['NInputNumber'] NMessageProvider: typeof import('naive-ui')['NMessageProvider'] NModal: typeof import('naive-ui')['NModal'] NModalProvider: typeof import('naive-ui')['NModalProvider'] NPagination: typeof import('naive-ui')['NPagination'] NPopover: typeof import('naive-ui')['NPopover'] NRate: typeof import('naive-ui')['NRate'] - NSelect: typeof import('naive-ui')['NSelect'] + NSpin: typeof import('naive-ui')['NSpin'] NSplit: typeof import('naive-ui')['NSplit'] - NSwitch: typeof import('naive-ui')['NSwitch'] NTab: typeof import('naive-ui')['NTab'] NTabPane: typeof import('naive-ui')['NTabPane'] NTabs: typeof import('naive-ui')['NTabs'] NTag: typeof import('naive-ui')['NTag'] NText: typeof import('naive-ui')['NText'] Preview: typeof import('./src/components/Preview.vue')['default'] + PromptPanel: typeof import('./src/components/PromptPanel.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] Task: typeof import('./src/components/Task.vue')['default'] diff --git a/rsbuild.config.ts b/rsbuild.config.ts index 6ca42ed..07fcea4 100644 --- a/rsbuild.config.ts +++ b/rsbuild.config.ts @@ -32,6 +32,11 @@ export default defineConfig({ target: process.env.PUBLIC_WEB_URL, changeOrigin: true, }, + "/ws": { + target: process.env.PUBLIC_WEB_URL, + ws: true, + changeOrigin: true, + }, }, }, performance: { diff --git a/src/api.ts b/src/api.ts index 05aab71..05736c4 100644 --- a/src/api.ts +++ b/src/api.ts @@ -138,9 +138,15 @@ export const Submission = { html?: string css?: string js?: string + conversationId?: string }, ) { - const data = { task_id: taskId, ...code } + const { conversationId, ...rest } = code + const data = { + task_id: taskId, + ...rest, + conversation_id: conversationId || null, + } const res = await http.post("/submission/", data) return res.data }, @@ -163,6 +169,21 @@ export const Submission = { }, } +export const Prompt = { + async listConversations(taskId?: number, userId?: number) { + const params: Record = {} + if (taskId) params.task_id = taskId + if (userId) params.user_id = userId + return (await http.get("/prompt/conversations/", { params })).data + }, + + async getMessages(conversationId: string) { + return ( + await http.get(`/prompt/conversations/${conversationId}/messages/`) + ).data + }, +} + export const Helper = { async upload(file: File) { const form = new window.FormData() diff --git a/src/components/PromptPanel.vue b/src/components/PromptPanel.vue new file mode 100644 index 0000000..93dd2e1 --- /dev/null +++ b/src/components/PromptPanel.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/src/main.ts b/src/main.ts index e382f25..6d1cbf1 100644 --- a/src/main.ts +++ b/src/main.ts @@ -25,7 +25,6 @@ hljs.registerLanguage("js", javascript) marked.use({ gfm: true, - async: true, }) marked.use( markedHighlight({ diff --git a/src/pages/ChallengeHome.vue b/src/pages/ChallengeHome.vue new file mode 100644 index 0000000..9b87cdc --- /dev/null +++ b/src/pages/ChallengeHome.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/src/pages/Submissions.vue b/src/pages/Submissions.vue index 2e9f4ee..f9ee9d4 100644 --- a/src/pages/Submissions.vue +++ b/src/pages/Submissions.vue @@ -63,11 +63,23 @@ + + +
+
+ {{ msg.role === "user" ? "学生" : "AI" }} +
+
+
+ + +