diff --git a/apps/web-naive/src/main.ts b/apps/web-naive/src/main.ts index 5d728a0..300d59d 100644 --- a/apps/web-naive/src/main.ts +++ b/apps/web-naive/src/main.ts @@ -1,3 +1,4 @@ +import './styles/scrollbar.css' import { initPreferences } from '@vben/preferences'; import { unmountGlobalLoading } from '@vben/utils'; diff --git a/apps/web-naive/src/router/routes/modules/settings.ts b/apps/web-naive/src/router/routes/modules/settings.ts new file mode 100644 index 0000000..714958f --- /dev/null +++ b/apps/web-naive/src/router/routes/modules/settings.ts @@ -0,0 +1,15 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const routes: RouteRecordRaw[] = [ + { + name: 'Settings', + path: '/settings', + component: () => import('#/views/settings/index.vue'), + meta: { + icon: 'carbon:settings', + title: '设置', + }, + }, +]; + +export default routes; diff --git a/apps/web-naive/src/styles/scrollbar.css b/apps/web-naive/src/styles/scrollbar.css new file mode 100644 index 0000000..e6eb243 --- /dev/null +++ b/apps/web-naive/src/styles/scrollbar.css @@ -0,0 +1,39 @@ +/* 亮色 */ +::-webkit-scrollbar { + width: 14px; + height: 14px; +} + +::-webkit-scrollbar-track { + background: #f5f5f5; +} + +::-webkit-scrollbar-thumb { + background: #c1c1c1; + border-radius: 10px; + border: 4px solid #f5f5f5; + background-clip: padding-box; +} + +::-webkit-scrollbar-thumb:hover { + background: #a0a0a0; + border: 4px solid #f5f5f5; + background-clip: padding-box; +} + +/* 暗色 */ +html.dark ::-webkit-scrollbar-track { + background: #1e1e1e; +} + +html.dark ::-webkit-scrollbar-thumb { + background: #4a4a4a; + border: 4px solid #1e1e1e; + background-clip: padding-box; +} + +html.dark ::-webkit-scrollbar-thumb:hover { + background: #666666; + border: 4px solid #1e1e1e; + background-clip: padding-box; +} diff --git a/apps/web-naive/src/views/datasets/documents/create.vue b/apps/web-naive/src/views/datasets/documents/create.vue index c288fc8..1c73374 100644 --- a/apps/web-naive/src/views/datasets/documents/create.vue +++ b/apps/web-naive/src/views/datasets/documents/create.vue @@ -8,6 +8,7 @@ import SourceStep from './steps/SourceStep.vue'; import SegmentConfig from './steps/SegmentConfig.vue'; import SegmentPreview from './steps/SegmentPreview.vue'; import type { SegmentConfig as SegmentConfigType } from './steps/SegmentConfig.vue'; +import Page from '../../../../../../packages/effects/common-ui/src/components/page/page.vue'; const route = useRoute(); const router = useRouter(); @@ -50,37 +51,48 @@ function goBack() { - - - - ← {{ datasetName }} - - - - - - + + + + + ← {{ datasetName }} + + + + + + - - + + - - - - + + + + + - + diff --git a/apps/web-naive/src/views/datasets/documents/steps/SegmentConfig.vue b/apps/web-naive/src/views/datasets/documents/steps/SegmentConfig.vue index 6b24e48..3f373b0 100644 --- a/apps/web-naive/src/views/datasets/documents/steps/SegmentConfig.vue +++ b/apps/web-naive/src/views/datasets/documents/steps/SegmentConfig.vue @@ -69,18 +69,16 @@ function handleSave() { - - + + 分段设置 @@ -223,10 +221,10 @@ function handleSave() { - + ← 上一步 保存并处理 - + diff --git a/apps/web-naive/src/views/datasets/documents/steps/SegmentPreview.vue b/apps/web-naive/src/views/datasets/documents/steps/SegmentPreview.vue index 3d1f90b..273fca1 100644 --- a/apps/web-naive/src/views/datasets/documents/steps/SegmentPreview.vue +++ b/apps/web-naive/src/views/datasets/documents/steps/SegmentPreview.vue @@ -45,35 +45,85 @@ const props = withDefaults(defineProps<{ file?: PreviewFile }>(), { content: '二、过去(Past)这类时态都用来描述"过去"发生的动作或状态,有明确时间段,也有在另一个过去之事发生的动作。', }, + { + id: 1, + chars: 89, + content: + '好的,这种分类方式更直观,面事朋友从"时可"这个维度来理解和记忆时态。我们可以把16种时态归纳为四大类:**现在**、**过去**、**将来**和**过去的将来**。', + }, + { id: 2, chars: 3, content: '---' }, + { + id: 3, + chars: 62, + content: + '一、现在(Present)这类时态着重与**现在**这个时间点相关,包括可能性动作、正在发生的动作、以及对现在有影响的动作。', + }, + { + id: 4, + chars: 638, + content: + '**一般现在时(Simple Present Tense)** **用法:** 描述习惯、事实、真理。 **例句:** I **go** to the gym every morning.(我每天早上都去健身房。)**现在进行时(Present Continuous Tense)** **用法:** 描述正在发生、或最近一段时间正在进行的动作。 **例句:** He **is studying** for his exam right now.(他现在正在准备考试。)**现在完成时(Present Perfect Tense)** **用法:** 描述过去发生但对现在有影响的动作。 **例句:** I **have lost** my phone.(我把手机弄丢了,所以现在没有手机。)**现在完成进行时(Present Perfect Continuous Tense)** **用法:** 描述从过去开始持续到现在,且可能还在继续的动作。 **例句:** It **has been raining** for two hours.(雨已经下了两个小时了,且目还在下。)', + }, + { id: 5, chars: 3, content: '---' }, + { + id: 6, + chars: 60, + content: + '二、过去(Past)这类时态都用来描述"过去"发生的动作或状态,有明确时间段,也有在另一个过去之事发生的动作。', + }, + { + id: 1, + chars: 89, + content: + '好的,这种分类方式更直观,面事朋友从"时可"这个维度来理解和记忆时态。我们可以把16种时态归纳为四大类:**现在**、**过去**、**将来**和**过去的将来**。', + }, + { id: 2, chars: 3, content: '---' }, + { + id: 3, + chars: 62, + content: + '一、现在(Present)这类时态着重与**现在**这个时间点相关,包括可能性动作、正在发生的动作、以及对现在有影响的动作。', + }, + { + id: 4, + chars: 638, + content: + '**一般现在时(Simple Present Tense)** **用法:** 描述习惯、事实、真理。 **例句:** I **go** to the gym every morning.(我每天早上都去健身房。)**现在进行时(Present Continuous Tense)** **用法:** 描述正在发生、或最近一段时间正在进行的动作。 **例句:** He **is studying** for his exam right now.(他现在正在准备考试。)**现在完成时(Present Perfect Tense)** **用法:** 描述过去发生但对现在有影响的动作。 **例句:** I **have lost** my phone.(我把手机弄丢了,所以现在没有手机。)**现在完成进行时(Present Perfect Continuous Tense)** **用法:** 描述从过去开始持续到现在,且可能还在继续的动作。 **例句:** It **has been raining** for two hours.(雨已经下了两个小时了,且目还在下。)', + }, + { id: 5, chars: 3, content: '---' }, + { + id: 6, + chars: 60, + content: + '二、过去(Past)这类时态都用来描述"过去"发生的动作或状态,有明确时间段,也有在另一个过去之事发生的动作。', + }, ], }), }); - - - - - 预览 - {{ props.file.name }} - {{ props.file.timeAgo }} - - - - - - - - Chunk-{{ chunk.id }} - {{ chunk.chars }} characters - - - {{ chunk.content }} - - - - + + + + 预览 + {{ props.file.name }} + {{ props.file.timeAgo }} - + + + + + + + Chunk-{{ chunk.id }} + {{ chunk.chars }} characters + + + {{ chunk.content }} + + + + + diff --git a/apps/web-naive/src/views/datasets/documents/steps/SourceStep.vue b/apps/web-naive/src/views/datasets/documents/steps/SourceStep.vue index aced09a..93d7d2c 100644 --- a/apps/web-naive/src/views/datasets/documents/steps/SourceStep.vue +++ b/apps/web-naive/src/views/datasets/documents/steps/SourceStep.vue @@ -26,7 +26,7 @@ function handleNext() { - + 选择数据源 diff --git a/apps/web-naive/src/views/settings/index.vue b/apps/web-naive/src/views/settings/index.vue new file mode 100644 index 0000000..9d4c195 --- /dev/null +++ b/apps/web-naive/src/views/settings/index.vue @@ -0,0 +1,127 @@ + + + + + + + + 设置 + + + + + 工作空间 + + + + {{ item.icon }} + + {{ item.label }} + + + + + + + 通用 + + + + {{ item.icon }} + + {{ item.label }} + + + + + + + + + + + diff --git a/apps/web-naive/src/views/settings/panels/ApiExtension.vue b/apps/web-naive/src/views/settings/panels/ApiExtension.vue new file mode 100644 index 0000000..a75950b --- /dev/null +++ b/apps/web-naive/src/views/settings/panels/ApiExtension.vue @@ -0,0 +1,49 @@ + + + + + API 扩展 + + + + + 📤 + + + + API 扩展提供了一个集中式的 API 管理,在此统一添加 API 配置后,方便在 Dify + 上的各类应用中直接使用。 + + 了解如何开发您自己的 API 扩展。↗ + + + + + + + 新增 API 扩展 + + + diff --git a/apps/web-naive/src/views/settings/panels/DataSources.vue b/apps/web-naive/src/views/settings/panels/DataSources.vue new file mode 100644 index 0000000..23e5949 --- /dev/null +++ b/apps/web-naive/src/views/settings/panels/DataSources.vue @@ -0,0 +1,107 @@ + + + + + 数据来源 + + + + + + + + + + + + + + + + + + + Google Drive + langgenius/google_drive + + + + 配置 + + + + + 已连接的工作区 + 请配置凭据 + + + + + + + + + 安装数据源供应商 + + + 发现更多就在 Dify 市场 ↗ + + + + + + + + diff --git a/apps/web-naive/src/views/settings/panels/Language.vue b/apps/web-naive/src/views/settings/panels/Language.vue new file mode 100644 index 0000000..7e078ff --- /dev/null +++ b/apps/web-naive/src/views/settings/panels/Language.vue @@ -0,0 +1,21 @@ + + + + + 语言 + + 界面语言 + + + + diff --git a/apps/web-naive/src/views/settings/panels/Members.vue b/apps/web-naive/src/views/settings/panels/Members.vue new file mode 100644 index 0000000..ab71ac0 --- /dev/null +++ b/apps/web-naive/src/views/settings/panels/Members.vue @@ -0,0 +1,50 @@ + + + + + + 成员 + + 邀请成员 + + + + diff --git a/apps/web-naive/src/views/settings/panels/ModelProviders.vue b/apps/web-naive/src/views/settings/panels/ModelProviders.vue new file mode 100644 index 0000000..b02f6b9 --- /dev/null +++ b/apps/web-naive/src/views/settings/panels/ModelProviders.vue @@ -0,0 +1,104 @@ + + + + + + + 模型供应商 + + + + + + + + + + + 模型列表 + + + + + 默认模型设置 + + + + + + + + + + + Ollama + + + 管理凭据 + + + + + + + 已连接的模型 + + + + + + + + + + + + + diff --git a/apps/web-naive/src/views/settings/panels/schema.ts b/apps/web-naive/src/views/settings/panels/schema.ts new file mode 100644 index 0000000..d82cccf --- /dev/null +++ b/apps/web-naive/src/views/settings/panels/schema.ts @@ -0,0 +1,43 @@ +import type { VbenFormProps } from "@vben/common-ui"; + +export const ModelCertificateFrom: VbenFormProps = { + schema: [ + { + fieldName: 'CertificateType', + label: '凭证类型', + component: "Select", + componentProps: { + options: [ + { label: 'API密钥', value: 'apiKey' }, + { label: '其他', value: 'other' }, + ] + }, + }, + { + fieldName: "modelName", + label: "模型名称", + component: "Input", + rules: "required", + dependencies: { + triggerFields: ["CertificateType"], + show: (values) => values.CertificateType === 'other', + }, + }, + { + fieldName: "modelType", + label: "模型类型", + component: "Select", + componentProps: { + options: [ + { label: 'LLM', value: 'llm' }, + { label: 'Text Embedding', value: 'textEmbedding' }, + { label: 'Rerank', value: 'rerank' }, + ] + }, + dependencies: { + triggerFields: ["CertificateType"], + show: (values) => values.CertificateType === 'other', + }, + } + ] +};