diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json
index 313e671..af1083b 100644
--- a/.eslintrc-auto-import.json
+++ b/.eslintrc-auto-import.json
@@ -5,8 +5,6 @@
"ComputedRef": true,
"DirectiveBinding": true,
"EffectScope": true,
- "ElMessage": true,
- "ElMessageBox": true,
"ExtractDefaultPropTypes": true,
"ExtractPropTypes": true,
"ExtractPublicPropTypes": true,
diff --git a/README.md b/README.md
index 665d212..de4e174 100644
--- a/README.md
+++ b/README.md
@@ -6,18 +6,27 @@
+
+

+
+
## 🚀 项目亮点
-**ruoyi-element-ai** 是基于 **Vue3.5** + **Element-Plus-X** + **TypeScript** 的企业级AI应用模板,搭配 **ruoyi-ai** 后端,快速构建仿豆包/通义的全栈AI项目。
+**ruoyi-element-ai** 是基于 **Vue3.5** + **Element-Plus-X** + **hook-fetch** + **TypeScript** + **Eslint9** 开发的企业级AI应用模板,搭配 **ruoyi-ai** 后端,快速构建仿豆包/通义的全栈AI项目。
## 💡 核心优势
-- 最新技术栈:Vue3.5/Vite5/Pinia3/TypeScript5.8
-- 流式交互:Hook-Fetch支持Server-Sent Events
+- 最新技术栈:Vue3.5+/Vite6/Pinia3/TypeScript5
+- 流式交互:Hook-Fetch支持Server-Sent Events,插件化写法优雅的一批
- 企业级规范:ESLint/Stylelint/husky/commitlint全链路校验
-- 开箱即用:内置动态路由、状态管理、组件库封装
+- 全栈项目:集成 ruoyi-ai 后端服务,快速开发
+- 开箱即用:内置动态路由、状态管理、组件库封装、hooks封装
+
+## 🎯 开发文档
+
+帮助你快速熟悉项目
-

+
## 🔗 关键链接
@@ -25,9 +34,9 @@
| 功能模块 | 说明 | 链接 |
|------------------|-------------------------------|----------------------------------------------------------------------|
| 🚀 前端仓库 | Gitee/GitHub 代码仓库(感谢 star🥰爱你爱你😘) | [Gitee](https://gitee.com/he-jiayue/ruoyi-element-ai)
[GitHub](https://github.com/element-plus-x/ruoyi-element-ai) |
-| 🛠️ 后端仓库 | 待补充(支持Java/Node) | 待更新 |
-| 📚 前端文档 | 开发指南/组件说明 | [快速了解项目](https://chat-docs.element-plus-x.com) |
-| 📡 在线演示 | 实时交互体验 | [立即访问](https://chat.element-plus-x.com) |
+| 🛠️ 后端仓库 | Java服务,功能丰富强大 | [Gitee](https://gitee.com/ageerle/ruoyi-ai)
[GitHub](https://github.com/ageerle/ruoyi-ai) |
+| 📚 前端文档 | 开发指南/项目说明 | [快速了解项目](https://chat-docs.element-plus-x.com) |
+| 📡 在线演示 | 实时交互体验 | [在线预览](https://chat.element-plus-x.com) |
## 🧰 核心功能
@@ -68,16 +77,26 @@ pnpm lint:stylelint # 样式格式化
pnpm cz # 规范提交(自动执行lint)
```
+## 🧸 即将推出 (含 ruoyi-ai 接口联调)
+- [x] 会话管理
+- [x] 发送消息
+- [x] 登录注册
+- [ ] md 渲染
+- [ ] 编辑输入框
+- [ ] 文件上传
+- [ ] 其他...
+
## 🤝 社区支持
| 👨👨👧👦 微信交流群 | 💩 作者微信 |
|---------------------------------------|-------------------------------------|
-| 
扫码加入交流群
获取最新动态与技术支持 | 
群过期或失效?
扫码添加作者微信 |
+| 
扫码加入交流群
获取最新动态与技术支持 | 
群过期或失效?
扫码添加作者微信 |
-## 🌟 留下赞赏,助力开源
+## 🌹 赠人玫瑰,手有余香
-
🙊感谢您的支持!🙊
😍开源是热爱的坚持,您的每一份心意都让我们走得更远~😍
-
💌 扫码赞赏,后续将截图保留,并公示赞赏记录💌
💖感谢每一份温暖助力 💖
-

+

+
🙊扫码赞赏,感谢您的支持!🙊
+
💖感谢每一份温暖助力💖
+
💌 后续将截图保留,并公示赞赏记录 💌
diff --git a/src/routers/modules/staticRouter.ts b/src/routers/modules/staticRouter.ts
index 3820785..73b7b2a 100644
--- a/src/routers/modules/staticRouter.ts
+++ b/src/routers/modules/staticRouter.ts
@@ -16,9 +16,9 @@ export const layoutRouter: RouteRecordRaw[] = [
// title: '通用聊天页面',
isDefaultChat: true,
icon: 'HomeFilled',
- isHide: '1',
- isKeepAlive: '0', // 是否缓存路由数据[0是,1否]
- isFull: '1', // 是否缓存全屏[0是,1否]
+ // isHide: '1', // 是否在菜单中隐藏[0是,1否] 预留
+ // isKeepAlive: '0', // 是否缓存路由数据[0是,1否] 预留
+ // isFull: '1', // 是否全屏[0是,1否] 预留
// enName: "Master Station", // 英文名称 预留
},
},
diff --git a/types/auto-imports.d.ts b/types/auto-imports.d.ts
index 1db43ec..6cd1a87 100644
--- a/types/auto-imports.d.ts
+++ b/types/auto-imports.d.ts
@@ -6,85 +6,68 @@
// biome-ignore lint: disable
export {}
declare global {
- const EffectScope: (typeof import("vue"))["EffectScope"];
- const ElMessage: (typeof import("element-plus/es"))["ElMessage"];
- const ElMessageBox: (typeof import("element-plus/es"))["ElMessageBox"];
- const computed: (typeof import("vue"))["computed"];
- const createApp: (typeof import("vue"))["createApp"];
- const customRef: (typeof import("vue"))["customRef"];
- const defineAsyncComponent: (typeof import("vue"))["defineAsyncComponent"];
- const defineComponent: (typeof import("vue"))["defineComponent"];
- const effectScope: (typeof import("vue"))["effectScope"];
- const getCurrentInstance: (typeof import("vue"))["getCurrentInstance"];
- const getCurrentScope: (typeof import("vue"))["getCurrentScope"];
- const h: (typeof import("vue"))["h"];
- const inject: (typeof import("vue"))["inject"];
- const isProxy: (typeof import("vue"))["isProxy"];
- const isReactive: (typeof import("vue"))["isReactive"];
- const isReadonly: (typeof import("vue"))["isReadonly"];
- const isRef: (typeof import("vue"))["isRef"];
- const markRaw: (typeof import("vue"))["markRaw"];
- const nextTick: (typeof import("vue"))["nextTick"];
- const onActivated: (typeof import("vue"))["onActivated"];
- const onBeforeMount: (typeof import("vue"))["onBeforeMount"];
- const onBeforeUnmount: (typeof import("vue"))["onBeforeUnmount"];
- const onBeforeUpdate: (typeof import("vue"))["onBeforeUpdate"];
- const onDeactivated: (typeof import("vue"))["onDeactivated"];
- const onErrorCaptured: (typeof import("vue"))["onErrorCaptured"];
- const onMounted: (typeof import("vue"))["onMounted"];
- const onRenderTracked: (typeof import("vue"))["onRenderTracked"];
- const onRenderTriggered: (typeof import("vue"))["onRenderTriggered"];
- const onScopeDispose: (typeof import("vue"))["onScopeDispose"];
- const onServerPrefetch: (typeof import("vue"))["onServerPrefetch"];
- const onUnmounted: (typeof import("vue"))["onUnmounted"];
- const onUpdated: (typeof import("vue"))["onUpdated"];
- const onWatcherCleanup: (typeof import("vue"))["onWatcherCleanup"];
- const provide: (typeof import("vue"))["provide"];
- const reactive: (typeof import("vue"))["reactive"];
- const readonly: (typeof import("vue"))["readonly"];
- const ref: (typeof import("vue"))["ref"];
- const resolveComponent: (typeof import("vue"))["resolveComponent"];
- const shallowReactive: (typeof import("vue"))["shallowReactive"];
- const shallowReadonly: (typeof import("vue"))["shallowReadonly"];
- const shallowRef: (typeof import("vue"))["shallowRef"];
- const toRaw: (typeof import("vue"))["toRaw"];
- const toRef: (typeof import("vue"))["toRef"];
- const toRefs: (typeof import("vue"))["toRefs"];
- const toValue: (typeof import("vue"))["toValue"];
- const triggerRef: (typeof import("vue"))["triggerRef"];
- const unref: (typeof import("vue"))["unref"];
- const useAttrs: (typeof import("vue"))["useAttrs"];
- const useCssModule: (typeof import("vue"))["useCssModule"];
- const useCssVars: (typeof import("vue"))["useCssVars"];
- const useId: (typeof import("vue"))["useId"];
- const useModel: (typeof import("vue"))["useModel"];
- const useSlots: (typeof import("vue"))["useSlots"];
- const useTemplateRef: (typeof import("vue"))["useTemplateRef"];
- const watch: (typeof import("vue"))["watch"];
- const watchEffect: (typeof import("vue"))["watchEffect"];
- const watchPostEffect: (typeof import("vue"))["watchPostEffect"];
- const watchSyncEffect: (typeof import("vue"))["watchSyncEffect"];
+ const EffectScope: typeof import('vue')['EffectScope']
+ const ElMessage: (typeof import("element-plus/es"))["ElMessage"]
+ const ElMessageBox: (typeof import("element-plus/es"))["ElMessageBox"]
+ const computed: typeof import('vue')['computed']
+ const createApp: typeof import('vue')['createApp']
+ const customRef: typeof import('vue')['customRef']
+ const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
+ const defineComponent: typeof import('vue')['defineComponent']
+ const effectScope: typeof import('vue')['effectScope']
+ const getCurrentInstance: typeof import('vue')['getCurrentInstance']
+ const getCurrentScope: typeof import('vue')['getCurrentScope']
+ const h: typeof import('vue')['h']
+ const inject: typeof import('vue')['inject']
+ const isProxy: typeof import('vue')['isProxy']
+ const isReactive: typeof import('vue')['isReactive']
+ const isReadonly: typeof import('vue')['isReadonly']
+ const isRef: typeof import('vue')['isRef']
+ const markRaw: typeof import('vue')['markRaw']
+ const nextTick: typeof import('vue')['nextTick']
+ const onActivated: typeof import('vue')['onActivated']
+ const onBeforeMount: typeof import('vue')['onBeforeMount']
+ const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
+ const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
+ const onDeactivated: typeof import('vue')['onDeactivated']
+ const onErrorCaptured: typeof import('vue')['onErrorCaptured']
+ const onMounted: typeof import('vue')['onMounted']
+ const onRenderTracked: typeof import('vue')['onRenderTracked']
+ const onRenderTriggered: typeof import('vue')['onRenderTriggered']
+ const onScopeDispose: typeof import('vue')['onScopeDispose']
+ const onServerPrefetch: typeof import('vue')['onServerPrefetch']
+ const onUnmounted: typeof import('vue')['onUnmounted']
+ const onUpdated: typeof import('vue')['onUpdated']
+ const onWatcherCleanup: typeof import('vue')['onWatcherCleanup']
+ const provide: typeof import('vue')['provide']
+ const reactive: typeof import('vue')['reactive']
+ const readonly: typeof import('vue')['readonly']
+ const ref: typeof import('vue')['ref']
+ const resolveComponent: typeof import('vue')['resolveComponent']
+ const shallowReactive: typeof import('vue')['shallowReactive']
+ const shallowReadonly: typeof import('vue')['shallowReadonly']
+ const shallowRef: typeof import('vue')['shallowRef']
+ const toRaw: typeof import('vue')['toRaw']
+ const toRef: typeof import('vue')['toRef']
+ const toRefs: typeof import('vue')['toRefs']
+ const toValue: typeof import('vue')['toValue']
+ const triggerRef: typeof import('vue')['triggerRef']
+ const unref: typeof import('vue')['unref']
+ const useAttrs: typeof import('vue')['useAttrs']
+ const useCssModule: typeof import('vue')['useCssModule']
+ const useCssVars: typeof import('vue')['useCssVars']
+ const useId: typeof import('vue')['useId']
+ const useModel: typeof import('vue')['useModel']
+ const useSlots: typeof import('vue')['useSlots']
+ const useTemplateRef: typeof import('vue')['useTemplateRef']
+ const watch: typeof import('vue')['watch']
+ const watchEffect: typeof import('vue')['watchEffect']
+ const watchPostEffect: typeof import('vue')['watchPostEffect']
+ const watchSyncEffect: typeof import('vue')['watchSyncEffect']
}
// for type re-export
declare global {
// @ts-ignore
- export type {
- Component,
- Slot,
- Slots,
- ComponentPublicInstance,
- ComputedRef,
- DirectiveBinding,
- ExtractDefaultPropTypes,
- ExtractPropTypes,
- ExtractPublicPropTypes,
- InjectionKey,
- PropType,
- Ref,
- MaybeRef,
- MaybeRefOrGetter,
- VNode,
- WritableComputedRef,
- } from "vue";
- import("vue");
+ export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
+ import('vue')
}