-
-
- {{ title }}
-
-
{{ message }}
+
diff --git a/frontend/web/src/components/display/fa-statistic/index.vue b/frontend/web/src/components/display/fa-statistic/index.vue
new file mode 100644
index 00000000..c146a315
--- /dev/null
+++ b/frontend/web/src/components/display/fa-statistic/index.vue
@@ -0,0 +1,88 @@
+
+
+
+ {{ title }}
+
+
+ {{ prefix }}
+
+
+ {{ suffix }}
+
+
+
+
+
+
+
+
diff --git a/frontend/web/src/components/others/fa-status-tag/index.vue b/frontend/web/src/components/display/fa-status-tag/index.vue
similarity index 100%
rename from frontend/web/src/components/others/fa-status-tag/index.vue
rename to frontend/web/src/components/display/fa-status-tag/index.vue
diff --git a/frontend/web/src/components/forms/fa-autocomplete/index.vue b/frontend/web/src/components/forms/fa-autocomplete/index.vue
new file mode 100644
index 00000000..bbda584e
--- /dev/null
+++ b/frontend/web/src/components/forms/fa-autocomplete/index.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
diff --git a/frontend/web/src/components/forms/fa-cascader/index.vue b/frontend/web/src/components/forms/fa-cascader/index.vue
new file mode 100644
index 00000000..47129589
--- /dev/null
+++ b/frontend/web/src/components/forms/fa-cascader/index.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
diff --git a/frontend/web/src/components/forms/fa-input-tag/index.vue b/frontend/web/src/components/forms/fa-input-tag/index.vue
new file mode 100644
index 00000000..7019bed1
--- /dev/null
+++ b/frontend/web/src/components/forms/fa-input-tag/index.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/web/src/components/forms/fa-mention/index.vue b/frontend/web/src/components/forms/fa-mention/index.vue
new file mode 100644
index 00000000..1f397c9d
--- /dev/null
+++ b/frontend/web/src/components/forms/fa-mention/index.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
diff --git a/frontend/web/src/components/forms/fa-rate/index.vue b/frontend/web/src/components/forms/fa-rate/index.vue
new file mode 100644
index 00000000..5d2550c7
--- /dev/null
+++ b/frontend/web/src/components/forms/fa-rate/index.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
diff --git a/frontend/web/src/components/forms/fa-search-bar/FaUserTableSelect.vue b/frontend/web/src/components/forms/fa-search-bar/FaUserTableSelect.vue
index a81048e9..d4654379 100644
--- a/frontend/web/src/components/forms/fa-search-bar/FaUserTableSelect.vue
+++ b/frontend/web/src/components/forms/fa-search-bar/FaUserTableSelect.vue
@@ -21,8 +21,8 @@
diff --git a/frontend/web/src/components/forms/fa-slider/index.vue b/frontend/web/src/components/forms/fa-slider/index.vue
new file mode 100644
index 00000000..39a4b664
--- /dev/null
+++ b/frontend/web/src/components/forms/fa-slider/index.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/web/src/components/forms/fa-time-select/index.vue b/frontend/web/src/components/forms/fa-time-select/index.vue
new file mode 100644
index 00000000..5f955d6e
--- /dev/null
+++ b/frontend/web/src/components/forms/fa-time-select/index.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
diff --git a/frontend/web/src/components/forms/fa-transfer/index.vue b/frontend/web/src/components/forms/fa-transfer/index.vue
new file mode 100644
index 00000000..fda26b4a
--- /dev/null
+++ b/frontend/web/src/components/forms/fa-transfer/index.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
diff --git a/frontend/web/src/components/modal/fa-dialog/index.vue b/frontend/web/src/components/modal/fa-dialog/index.vue
index 5b3ac54e..e20d319d 100644
--- a/frontend/web/src/components/modal/fa-dialog/index.vue
+++ b/frontend/web/src/components/modal/fa-dialog/index.vue
@@ -68,7 +68,7 @@
import type { DialogProps } from "element-plus";
import { ElDialog } from "element-plus";
import { computed, ref, useAttrs, watch, onMounted, onUnmounted } from "vue";
-import FaIconButton from "@/components/others/fa-icon-button/index.vue";
+import FaIconButton from "@/components/actions/fa-icon-button/index.vue";
defineOptions({ name: "FaDialog", inheritAttrs: false });
diff --git a/frontend/web/src/components/modal/fa-drawer/index.vue b/frontend/web/src/components/modal/fa-drawer/index.vue
index 6ab14d01..f4f5c2fc 100644
--- a/frontend/web/src/components/modal/fa-drawer/index.vue
+++ b/frontend/web/src/components/modal/fa-drawer/index.vue
@@ -59,7 +59,7 @@
diff --git a/frontend/web/src/components/others/fa-guide/index.vue b/frontend/web/src/components/navigation/fa-guide/index.vue
similarity index 100%
rename from frontend/web/src/components/others/fa-guide/index.vue
rename to frontend/web/src/components/navigation/fa-guide/index.vue
diff --git a/frontend/web/src/components/others/fa-interval-tab/index.vue b/frontend/web/src/components/navigation/fa-interval-tab/index.vue
similarity index 100%
rename from frontend/web/src/components/others/fa-interval-tab/index.vue
rename to frontend/web/src/components/navigation/fa-interval-tab/index.vue
diff --git a/frontend/web/src/components/navigation/fa-menu-item-group/index.vue b/frontend/web/src/components/navigation/fa-menu-item-group/index.vue
new file mode 100644
index 00000000..d8c179f6
--- /dev/null
+++ b/frontend/web/src/components/navigation/fa-menu-item-group/index.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/frontend/web/src/components/others/fa-menu-right/index.vue b/frontend/web/src/components/navigation/fa-menu-right/index.vue
similarity index 100%
rename from frontend/web/src/components/others/fa-menu-right/index.vue
rename to frontend/web/src/components/navigation/fa-menu-right/index.vue
diff --git a/frontend/web/src/components/others/fa-menu-route-icon/index.vue b/frontend/web/src/components/navigation/fa-menu-route-icon/index.vue
similarity index 100%
rename from frontend/web/src/components/others/fa-menu-route-icon/index.vue
rename to frontend/web/src/components/navigation/fa-menu-route-icon/index.vue
diff --git a/frontend/web/src/components/others/fa-menu-tree-table/index.vue b/frontend/web/src/components/navigation/fa-menu-tree-table/index.vue
similarity index 98%
rename from frontend/web/src/components/others/fa-menu-tree-table/index.vue
rename to frontend/web/src/components/navigation/fa-menu-tree-table/index.vue
index d7fd1ef1..5df4f629 100644
--- a/frontend/web/src/components/others/fa-menu-tree-table/index.vue
+++ b/frontend/web/src/components/navigation/fa-menu-tree-table/index.vue
@@ -47,7 +47,7 @@
diff --git a/frontend/web/src/components/others/fa-infinite-scroll/index.vue b/frontend/web/src/components/others/fa-infinite-scroll/index.vue
new file mode 100644
index 00000000..a9bf2dbc
--- /dev/null
+++ b/frontend/web/src/components/others/fa-infinite-scroll/index.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
diff --git a/frontend/web/src/components/others/fa-transfer/index.vue b/frontend/web/src/components/others/fa-transfer/index.vue
new file mode 100644
index 00000000..e95e848d
--- /dev/null
+++ b/frontend/web/src/components/others/fa-transfer/index.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
diff --git a/frontend/web/src/components/others/fa-tree-v2/index.vue b/frontend/web/src/components/others/fa-tree-v2/index.vue
new file mode 100644
index 00000000..546d6e86
--- /dev/null
+++ b/frontend/web/src/components/others/fa-tree-v2/index.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/web/src/components/others/fa-pagination/index.vue b/frontend/web/src/components/tables/fa-pagination/index.vue
similarity index 100%
rename from frontend/web/src/components/others/fa-pagination/index.vue
rename to frontend/web/src/components/tables/fa-pagination/index.vue
diff --git a/frontend/web/src/components/others/fa-table-select/index.vue b/frontend/web/src/components/tables/fa-table-select/index.vue
similarity index 100%
rename from frontend/web/src/components/others/fa-table-select/index.vue
rename to frontend/web/src/components/tables/fa-table-select/index.vue
diff --git a/frontend/web/src/components/tables/fa-table-v2/index.vue b/frontend/web/src/components/tables/fa-table-v2/index.vue
new file mode 100644
index 00000000..f482b269
--- /dev/null
+++ b/frontend/web/src/components/tables/fa-table-v2/index.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/web/src/layouts/fa-work-tab/index.vue b/frontend/web/src/layouts/fa-work-tab/index.vue
index 8ead1f9d..cab0b105 100644
--- a/frontend/web/src/layouts/fa-work-tab/index.vue
+++ b/frontend/web/src/layouts/fa-work-tab/index.vue
@@ -165,7 +165,7 @@ import { useI18n } from "vue-i18n";
import { storeToRefs } from "pinia";
import { ElMessage } from "element-plus";
import { useWorktabStore, useUserStore, useSettingsStore } from "@stores";
-import { MenuItemType } from "@/components/others/fa-menu-right/index.vue";
+import { MenuItemType } from "@/components/navigation/fa-menu-right/index.vue";
import { useCommon } from "@/hooks/core/useCommon";
import { formatMenuTitle, quickStartManager } from "@utils";
import type { WorkTab } from "@/types/store";
diff --git a/frontend/web/src/utils/table/statusFormatter.ts b/frontend/web/src/utils/table/statusFormatter.ts
index 6e520909..99dad38c 100644
--- a/frontend/web/src/utils/table/statusFormatter.ts
+++ b/frontend/web/src/utils/table/statusFormatter.ts
@@ -28,7 +28,7 @@
* ])
*/
import { h, type VNode } from "vue";
-import StatusTag from "@/components/others/fa-status-tag/index.vue";
+import StatusTag from "@/components/display/fa-status-tag/index.vue";
import type { ColumnOption, StatusColumnConfig } from "@/types/component";
/** ElTag 支持的 type */
export type StatusType = "primary" | "success" | "warning" | "danger" | "info";
diff --git a/frontend/web/src/views/dashboard/screen/modules/ScreenHeader.vue b/frontend/web/src/views/dashboard/screen/modules/ScreenHeader.vue
index ab3b171c..2421ff4a 100644
--- a/frontend/web/src/views/dashboard/screen/modules/ScreenHeader.vue
+++ b/frontend/web/src/views/dashboard/screen/modules/ScreenHeader.vue
@@ -10,7 +10,8 @@
diff --git a/frontend/web/src/views/fastlink/fachat/index.vue b/frontend/web/src/views/fastlink/fachat/index.vue
index cb5b8e8d..d73fe260 100644
--- a/frontend/web/src/views/fastlink/fachat/index.vue
+++ b/frontend/web/src/views/fastlink/fachat/index.vue
@@ -47,14 +47,12 @@
:class="{ 'bg-active-color': selectedPerson?.id === item.id }"
@click="selectPerson(item)"
>
-
-
- {{ item.name.charAt(0) }}
-
-
+
+
+
+ {{ item.name.charAt(0) }}
+
+
diff --git a/frontend/web/src/views/module_ai/chat/components/FaAiModelConfigPanel.vue b/frontend/web/src/views/module_ai/chat/components/FaAiModelConfigPanel.vue
index 52e81311..db1301c9 100644
--- a/frontend/web/src/views/module_ai/chat/components/FaAiModelConfigPanel.vue
+++ b/frontend/web/src/views/module_ai/chat/components/FaAiModelConfigPanel.vue
@@ -39,20 +39,24 @@
-
-
-
-
-
-
添加你的第一个 AI 模型
-
- 支持 OpenAI、DeepSeek、Ollama 等任何 OpenAI 兼容服务
- 配置后即可在 AI 助手页一键切换
-
+
+
+
+
+
+
+
+
+ 添加你的第一个 AI 模型
+
+ 支持 OpenAI、DeepSeek、Ollama 等任何 OpenAI 兼容服务
+ 配置后即可在 AI 助手页一键切换
+
+
立即添加
-
+
@@ -587,17 +591,6 @@ onMounted(loadList);
color: var(--el-text-color-primary);
}
-/* 空状态 */
-.empty-state {
- display: flex;
- flex-direction: column;
- gap: 12px;
- align-items: center;
- justify-content: center;
- padding: 48px 20px;
- text-align: center;
-}
-
.empty-illust {
position: relative;
display: flex;
@@ -605,13 +598,6 @@ onMounted(loadList);
justify-content: center;
width: 80px;
height: 80px;
- margin-bottom: 8px;
-}
-
-.empty-icon {
- position: relative;
- z-index: 1;
- color: var(--el-color-primary);
}
.empty-icon-bg {
diff --git a/frontend/web/src/views/module_ai/chat/components/FaChatInput.vue b/frontend/web/src/views/module_ai/chat/components/FaChatInput.vue
index 6bff4dce..5484cd7f 100644
--- a/frontend/web/src/views/module_ai/chat/components/FaChatInput.vue
+++ b/frontend/web/src/views/module_ai/chat/components/FaChatInput.vue
@@ -32,9 +32,11 @@
>
-
- {{ activeModelName }}
-
+
+
+ {{ activeModelName }}
+
+
diff --git a/frontend/web/src/views/module_ai/memory/index.vue b/frontend/web/src/views/module_ai/memory/index.vue
index 1671c159..de305911 100644
--- a/frontend/web/src/views/module_ai/memory/index.vue
+++ b/frontend/web/src/views/module_ai/memory/index.vue
@@ -58,10 +58,12 @@
@blur="handleSaveTitle(row)"
@keyup.enter="handleSaveTitle(row)"
/>
-
- {{ row.title || "未命名会话" }}
-
-
+
+
+ {{ row.title || "未命名会话" }}
+
+
+
@@ -153,7 +155,7 @@ import type { FormItem } from "@/components/forms/fa-form/index.vue";
import type FaForm from "@/components/forms/fa-form/index.vue";
import { formatToDateTime, renderTableOperationCell, type TableOperationAction } from "@utils";
import type { ColumnOption } from "@/types/component";
-import FaDescriptions from "@/components/others/fa-descriptions/index.vue";
+import FaDescriptions from "@/components/display/fa-descriptions/index.vue";
import FaTable from "@/components/tables/fa-table/index.vue";
import FaTableHeader from "@/components/tables/fa-table-header/index.vue";
@@ -355,7 +357,7 @@ const { dialogVisible, closeDialog } = useCrudDialog();
const detailFormData = ref
>({});
-const memoryDetailItems: import("@/components/others/fa-descriptions/index.vue").DescriptionsItem[] =
+const memoryDetailItems: import("@/components/display/fa-descriptions/index.vue").DescriptionsItem[] =
[
{ label: "会话ID", prop: "session_id" },
{ label: "标题", prop: "title" },
diff --git a/frontend/web/src/views/module_example/demo/index.vue b/frontend/web/src/views/module_example/demo/index.vue
index 9e7720b6..8e74a380 100644
--- a/frontend/web/src/views/module_example/demo/index.vue
+++ b/frontend/web/src/views/module_example/demo/index.vue
@@ -166,7 +166,7 @@ import DemoAPI, {
type DemoTable,
} from "@/api/module_example/demo";
import type { ColumnOption } from "@/types/component";
-import FaDescriptions from "@/components/others/fa-descriptions/index.vue";
+import FaDescriptions from "@/components/display/fa-descriptions/index.vue";
import FaForm from "@/components/forms/fa-form/index.vue";
import FaTableHeader from "@/components/tables/fa-table-header/index.vue";
@@ -368,7 +368,7 @@ const { dialogVisible } = useCrudDialog();
const detailFormData = ref({});
-const demoDetailItems: import("@/components/others/fa-descriptions/index.vue").DescriptionsItem[] =
+const demoDetailItems: import("@/components/display/fa-descriptions/index.vue").DescriptionsItem[] =
[
{ label: "名称", prop: "name" },
{ label: "UUID", prop: "uuid" },
diff --git a/frontend/web/src/views/module_monitor/cache/index.vue b/frontend/web/src/views/module_monitor/cache/index.vue
index 0b8aabbf..e6c4860b 100644
--- a/frontend/web/src/views/module_monitor/cache/index.vue
+++ b/frontend/web/src/views/module_monitor/cache/index.vue
@@ -112,7 +112,7 @@
/>
-
+
@@ -150,7 +150,7 @@
-
+
@@ -175,7 +175,7 @@
/>
-
+
-
+
@@ -243,7 +243,7 @@
-
+
@@ -261,7 +261,7 @@
/>
-
+
diff --git a/frontend/web/src/views/module_monitor/online/index.vue b/frontend/web/src/views/module_monitor/online/index.vue
index cc655bbc..19d45ed3 100644
--- a/frontend/web/src/views/module_monitor/online/index.vue
+++ b/frontend/web/src/views/module_monitor/online/index.vue
@@ -63,7 +63,7 @@ import type { TableOperationAction } from "@/utils/table";
import { renderTableOperationCell } from "@utils";
import type FaSearchBar from "@/components/forms/fa-search-bar/index.vue";
import type { SearchFormItem } from "@/components/forms/fa-search-bar/index.vue";
-import FaCopyButton from "@/components/others/fa-copy-button/index.vue";
+import FaCopyButton from "@/components/actions/fa-copy-button/index.vue";
import type { ColumnOption } from "@/types/component";
import FaTableHeader from "@/components/tables/fa-table-header/index.vue";
diff --git a/frontend/web/src/views/module_system/auth/login/components/backdrops/FaLoginLeftView.vue b/frontend/web/src/views/module_system/auth/login/components/backdrops/FaLoginLeftView.vue
index 3a1445f8..a44f753a 100644
--- a/frontend/web/src/views/module_system/auth/login/components/backdrops/FaLoginLeftView.vue
+++ b/frontend/web/src/views/module_system/auth/login/components/backdrops/FaLoginLeftView.vue
@@ -6,9 +6,11 @@
{{ siteTitle }}
-
- {{ displayVersion }}
-
+
+
+ {{ displayVersion }}
+
+
diff --git a/frontend/web/src/views/module_system/auth/login/components/widgets/FaAuthTopBar.vue b/frontend/web/src/views/module_system/auth/login/components/widgets/FaAuthTopBar.vue
index d255501a..0e70878d 100644
--- a/frontend/web/src/views/module_system/auth/login/components/widgets/FaAuthTopBar.vue
+++ b/frontend/web/src/views/module_system/auth/login/components/widgets/FaAuthTopBar.vue
@@ -8,9 +8,11 @@