diff --git a/README.md b/README.md index 3b46e050..a9b0915d 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ * 聊天体验跟 ChatGPT 官方版本完全一致。 * 内置了各种预训练好的角色,比如小红书写手,英语翻译大师,苏格拉底,孔子,乔布斯,周报助手等。轻松满足你的各种聊天和应用需求。 -**本项目基于 MIT 协议,免费开放全部源代码,可以作为个人学习使用或者商用。如需商用建议联系作者登记,仅做统计使用,优秀项目我们将在项目首页为您展示。 -** +**本项目基于 MIT 协议,免费开放全部源代码,可以作为个人学习使用或者商用。如需商用建议联系作者登记,仅做统计使用, +优秀项目我们将在项目首页为您展示。** ## 功能截图 diff --git a/web/src/main.js b/web/src/main.js index f6962bd8..f55099a6 100644 --- a/web/src/main.js +++ b/web/src/main.js @@ -5,8 +5,15 @@ import 'vant/lib/index.css'; import App from './App.vue' import {createPinia} from "pinia"; import { + Button, Cell, + CellGroup, ConfigProvider, + DropdownItem, + DropdownMenu, + Field, + Form, + Icon, Image, List, NavBar, @@ -14,6 +21,8 @@ import { Picker, Popup, Search, + Sticky, + SwipeCell, Tabbar, TabbarItem, TextEllipsis @@ -34,6 +43,15 @@ app.use(Notify) app.use(Picker) app.use(Popup) app.use(List); +app.use(Form); +app.use(Field); +app.use(CellGroup); +app.use(Button); +app.use(DropdownMenu); +app.use(Icon); +app.use(DropdownItem); +app.use(Sticky); +app.use(SwipeCell); app.use(router).use(ElementPlus).mount('#app') diff --git a/web/src/router.js b/web/src/router.js index 97f21a94..5e6f7ed9 100644 --- a/web/src/router.js +++ b/web/src/router.js @@ -102,17 +102,22 @@ const routes = [ ] }, + { + path: '/mobile/chat/session', + name: 'mobile-chat-session', + component: () => import('@/views/mobile/ChatSession.vue'), + }, { name: 'mobile', path: '/mobile', meta: {title: 'ChatGPT-智能助手V3'}, component: () => import('@/views/mobile/Home.vue'), - redirect: '/mobile/chat', + redirect: '/mobile/chat/list', children: [ { - path: '/mobile/chat', - name: 'mobile-chat', - component: () => import('@/views/mobile/Chat.vue'), + path: '/mobile/chat/list', + name: 'mobile-chat-list', + component: () => import('@/views/mobile/ChatList.vue'), }, { path: '/mobile/setting', diff --git a/web/src/store/chat.js b/web/src/store/chat.js new file mode 100644 index 00000000..09fa0d18 --- /dev/null +++ b/web/src/store/chat.js @@ -0,0 +1,11 @@ +import Storage from 'good-storage' + +const CHAT_CONFIG_KEY = "chat_config" + +export function getChatConfig() { + return Storage.get(CHAT_CONFIG_KEY) +} + +export function setChatConfig(chatConfig) { + Storage.set(CHAT_CONFIG_KEY, chatConfig) +} \ No newline at end of file diff --git a/web/src/utils/storage.js b/web/src/store/session.js similarity index 100% rename from web/src/utils/storage.js rename to web/src/store/session.js diff --git a/web/src/utils/http.js b/web/src/utils/http.js index 10c01e05..8cf8630b 100644 --- a/web/src/utils/http.js +++ b/web/src/utils/http.js @@ -1,5 +1,5 @@ import axios from 'axios' -import {getSessionId} from "@/utils/storage"; +import {getSessionId} from "@/store/session"; axios.defaults.timeout = 10000 axios.defaults.baseURL = process.env.VUE_APP_API_HOST diff --git a/web/src/views/ChatPlus.vue b/web/src/views/ChatPlus.vue index 36ea3bd1..ddbccc36 100644 --- a/web/src/views/ChatPlus.vue +++ b/web/src/views/ChatPlus.vue @@ -212,7 +212,7 @@ import 'highlight.js/styles/a11y-dark.css' import {dateFormat, randString, removeArrayItem, renderInputText, UUID} from "@/utils/libs"; import {ElMessage, ElMessageBox} from "element-plus"; import hl from "highlight.js"; -import {getLoginUser, getSessionId, removeLoginUser} from "@/utils/storage"; +import {getLoginUser, getSessionId, removeLoginUser} from "@/store/session"; import {httpGet, httpPost} from "@/utils/http"; import {useRouter} from "vue-router"; import Clipboard from "clipboard"; @@ -232,7 +232,7 @@ const mainWinHeight = ref(0); // 主窗口高度 const chatBoxHeight = ref(0); // 聊天内容框高度 const leftBoxHeight = ref(0); const loading = ref(true); -const user = ref(getLoginUser()); +const user = getLoginUser(); const roles = ref([]); const roleId = ref(0) const newChatItem = ref(null); @@ -246,7 +246,7 @@ onMounted(() => { checkSession().then(() => { isLogin.value = true // 加载角色列表 - httpGet(`/api/role/list?user_id=${user.value.id}`).then((res) => { + httpGet(`/api/role/list?user_id=${user.id}`).then((res) => { roles.value = res.data; roleId.value = roles.value[0]['id']; // 获取会话列表 @@ -265,8 +265,9 @@ onMounted(() => { }).catch(e => { ElMessage.error("加载系统配置失败: " + e.message) }) - }).catch(() => { - router.push('login') + }).catch((e) => { + console.log(e) + //router.push('login') }); const clipboard = new Clipboard('.copy-reply'); @@ -281,7 +282,7 @@ onMounted(() => { // 加载会话 const loadChats = function () { - httpGet("/api/chat/list?user_id=" + user.value.id).then((res) => { + httpGet("/api/chat/list?user_id=" + user.id).then((res) => { if (res.data) { chatList.value = res.data; allChats.value = res.data; @@ -405,7 +406,6 @@ const removeChat = function (event, chat) { // 创建 socket 连接 const prompt = ref(''); -// const replyIcon = 'images/avatar/gpt.png';// 回复信息的头像 const showStopGenerate = ref(false); // 停止生成 const showReGenerate = ref(false); // 重新生成 const previousText = ref(''); // 上一次提问 @@ -570,7 +570,7 @@ const sendMessage = function () { chatData.value.push({ type: "prompt", id: randString(32), - icon: user.value.avatar, + icon: user.avatar, content: renderInputText(prompt.value), created_at: new Date().getTime(), }); @@ -707,8 +707,8 @@ const searchChat = function () { } const updateUser = function (data) { - user.value.avatar = data.avatar; - user.value.nickname = data.nickname; + user.avatar = data.avatar; + user.nickname = data.nickname; } diff --git a/web/src/views/Login.vue b/web/src/views/Login.vue index 7db425ba..0950a061 100644 --- a/web/src/views/Login.vue +++ b/web/src/views/Login.vue @@ -4,7 +4,7 @@