From bebe2ea547d526734f70966b29fb318672daf08b Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 15 Nov 2025 22:15:01 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E3=80=90ele=E3=80=91=E3=80=90ai?= =?UTF-8?q?=E3=80=91chat=20=E7=9A=84=E8=BF=81=E7=A7=BB=EF=BC=88=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/markdown-view/index.ts | 3 + .../markdown-view/markdown-view.vue | 206 ++++++ .../src/components/markdown-view/typing.ts | 3 + apps/web-ele/src/views/ai/chat/index/data.ts | 77 ++ .../web-ele/src/views/ai/chat/index/index.vue | 690 ++++++++++++++++++ .../chat/index/modules/conversation/list.vue | 397 ++++++++++ .../modules/conversation/update-form.vue | 82 +++ .../index/modules/message/file-upload.vue | 304 ++++++++ .../ai/chat/index/modules/message/files.vue | 53 ++ .../chat/index/modules/message/knowledge.vue | 103 +++ .../chat/index/modules/message/list-empty.vue | 39 + .../ai/chat/index/modules/message/list.vue | 242 ++++++ .../ai/chat/index/modules/message/loading.vue | 9 + .../modules/message/new-conversation.vue | 25 + .../chat/index/modules/message/reasoning.vue | 83 +++ .../chat/index/modules/message/web-search.vue | 173 +++++ .../chat/index/modules/role/category-list.vue | 43 ++ .../views/ai/chat/index/modules/role/list.vue | 123 ++++ .../ai/chat/index/modules/role/repository.vue | 261 +++++++ 19 files changed, 2916 insertions(+) create mode 100644 apps/web-ele/src/components/markdown-view/index.ts create mode 100644 apps/web-ele/src/components/markdown-view/markdown-view.vue create mode 100644 apps/web-ele/src/components/markdown-view/typing.ts create mode 100644 apps/web-ele/src/views/ai/chat/index/data.ts create mode 100644 apps/web-ele/src/views/ai/chat/index/index.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/conversation/list.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/conversation/update-form.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/message/file-upload.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/message/files.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/message/knowledge.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/message/list-empty.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/message/list.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/message/loading.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/message/new-conversation.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/message/reasoning.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/message/web-search.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/role/category-list.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/role/list.vue create mode 100644 apps/web-ele/src/views/ai/chat/index/modules/role/repository.vue diff --git a/apps/web-ele/src/components/markdown-view/index.ts b/apps/web-ele/src/components/markdown-view/index.ts new file mode 100644 index 000000000..742bce8f5 --- /dev/null +++ b/apps/web-ele/src/components/markdown-view/index.ts @@ -0,0 +1,3 @@ +export { default as MarkdownView } from './markdown-view.vue'; + +export * from './typing'; diff --git a/apps/web-ele/src/components/markdown-view/markdown-view.vue b/apps/web-ele/src/components/markdown-view/markdown-view.vue new file mode 100644 index 000000000..e3af56379 --- /dev/null +++ b/apps/web-ele/src/components/markdown-view/markdown-view.vue @@ -0,0 +1,206 @@ + + + + + diff --git a/apps/web-ele/src/components/markdown-view/typing.ts b/apps/web-ele/src/components/markdown-view/typing.ts new file mode 100644 index 000000000..350bbcf3a --- /dev/null +++ b/apps/web-ele/src/components/markdown-view/typing.ts @@ -0,0 +1,3 @@ +export type MarkdownViewProps = { + content: string; +}; diff --git a/apps/web-ele/src/views/ai/chat/index/data.ts b/apps/web-ele/src/views/ai/chat/index/data.ts new file mode 100644 index 000000000..8cc4ed6f3 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/data.ts @@ -0,0 +1,77 @@ +import type { VbenFormSchema } from '#/adapter/form'; + +import { AiModelTypeEnum } from '@vben/constants'; + +import { getModelSimpleList } from '#/api/ai/model/model'; + +export function useFormSchema(): VbenFormSchema[] { + return [ + { + component: 'Input', + fieldName: 'id', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + fieldName: 'systemMessage', + label: '角色设定', + component: 'Textarea', + componentProps: { + rows: 4, + placeholder: '请输入角色设定', + }, + }, + { + component: 'ApiSelect', + fieldName: 'modelId', + label: '模型', + componentProps: { + api: () => getModelSimpleList(AiModelTypeEnum.CHAT), + labelField: 'name', + valueField: 'id', + allowClear: true, + placeholder: '请选择模型', + }, + rules: 'required', + }, + { + fieldName: 'temperature', + label: '温度参数', + component: 'InputNumber', + componentProps: { + placeholder: '请输入温度参数', + class: 'w-full', + precision: 2, + min: 0, + max: 2, + }, + rules: 'required', + }, + { + fieldName: 'maxTokens', + label: '回复数 Token 数', + component: 'InputNumber', + componentProps: { + placeholder: '请输入回复数 Token 数', + class: 'w-full', + min: 0, + max: 8192, + }, + rules: 'required', + }, + { + fieldName: 'maxContexts', + label: '上下文数量', + component: 'InputNumber', + componentProps: { + placeholder: '请输入上下文数量', + class: 'w-full', + min: 0, + max: 20, + }, + rules: 'required', + }, + ]; +} diff --git a/apps/web-ele/src/views/ai/chat/index/index.vue b/apps/web-ele/src/views/ai/chat/index/index.vue new file mode 100644 index 000000000..ae58f6ab6 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/index.vue @@ -0,0 +1,690 @@ + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/conversation/list.vue b/apps/web-ele/src/views/ai/chat/index/modules/conversation/list.vue new file mode 100644 index 000000000..b87c15b1f --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/conversation/list.vue @@ -0,0 +1,397 @@ + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/conversation/update-form.vue b/apps/web-ele/src/views/ai/chat/index/modules/conversation/update-form.vue new file mode 100644 index 000000000..6a7ae84e4 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/conversation/update-form.vue @@ -0,0 +1,82 @@ + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/file-upload.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/file-upload.vue new file mode 100644 index 000000000..6d6b69179 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/file-upload.vue @@ -0,0 +1,304 @@ + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/files.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/files.vue new file mode 100644 index 000000000..ed163a026 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/files.vue @@ -0,0 +1,53 @@ + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/knowledge.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/knowledge.vue new file mode 100644 index 000000000..34eabf15d --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/knowledge.vue @@ -0,0 +1,103 @@ + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/list-empty.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/list-empty.vue new file mode 100644 index 000000000..b8ac0a3e4 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/list-empty.vue @@ -0,0 +1,39 @@ + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/list.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/list.vue new file mode 100644 index 000000000..fdaf36459 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/list.vue @@ -0,0 +1,242 @@ + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/loading.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/loading.vue new file mode 100644 index 000000000..a5e076532 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/loading.vue @@ -0,0 +1,9 @@ + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/new-conversation.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/new-conversation.vue new file mode 100644 index 000000000..339af1704 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/new-conversation.vue @@ -0,0 +1,25 @@ + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/reasoning.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/reasoning.vue new file mode 100644 index 000000000..99390fbfc --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/reasoning.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/message/web-search.vue b/apps/web-ele/src/views/ai/chat/index/modules/message/web-search.vue new file mode 100644 index 000000000..d48a94c24 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/message/web-search.vue @@ -0,0 +1,173 @@ + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/role/category-list.vue b/apps/web-ele/src/views/ai/chat/index/modules/role/category-list.vue new file mode 100644 index 000000000..fa5ece41a --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/role/category-list.vue @@ -0,0 +1,43 @@ + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/role/list.vue b/apps/web-ele/src/views/ai/chat/index/modules/role/list.vue new file mode 100644 index 000000000..eccceb04f --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/role/list.vue @@ -0,0 +1,123 @@ + + + diff --git a/apps/web-ele/src/views/ai/chat/index/modules/role/repository.vue b/apps/web-ele/src/views/ai/chat/index/modules/role/repository.vue new file mode 100644 index 000000000..818cc51d8 --- /dev/null +++ b/apps/web-ele/src/views/ai/chat/index/modules/role/repository.vue @@ -0,0 +1,261 @@ + + +