ngoctuanai
commited on
Commit
•
61c59c3
1
Parent(s):
8449d3f
Upload 135 files
Browse files- index.html +1 -1
- package-lock.json +2 -2
- src/hooks/useLanguage.ts +5 -7
- src/locales/en-US.ts +2 -0
- src/locales/vi-VN.ts +2 -0
- src/store/modules/app/helper.ts +9 -1
- src/store/modules/chat/helper.ts +2 -1
- src/store/modules/chat/index.ts +3 -2
- src/store/modules/settings/helper.ts +1 -1
- src/store/modules/user/helper.ts +1 -1
- src/views/chat/components/Message/Text.vue +2 -2
- src/views/chat/components/Message/index.vue +2 -2
- src/views/chat/index.vue +1 -1
- src/views/chat/layout/sider/index.vue +1 -1
index.html
CHANGED
@@ -7,7 +7,7 @@
|
|
7 |
<link rel="apple-touch-icon" href="https://pnghive.com/core/images/full/chat-gpt-logo-png-1680406057.png">
|
8 |
<meta name="viewport"
|
9 |
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover" />
|
10 |
-
<title>
|
11 |
</head>
|
12 |
|
13 |
<body class="dark:bg-black">
|
|
|
7 |
<link rel="apple-touch-icon" href="https://pnghive.com/core/images/full/chat-gpt-logo-png-1680406057.png">
|
8 |
<meta name="viewport"
|
9 |
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover" />
|
10 |
+
<title>ChatGPT</title>
|
11 |
</head>
|
12 |
|
13 |
<body class="dark:bg-black">
|
package-lock.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
{
|
2 |
"name": "chatgpt-web",
|
3 |
-
"version": "2.
|
4 |
"lockfileVersion": 2,
|
5 |
"requires": true,
|
6 |
"packages": {
|
7 |
"": {
|
8 |
"name": "chatgpt-web",
|
9 |
-
"version": "2.
|
10 |
"dependencies": {
|
11 |
"@traptitech/markdown-it-katex": "^3.6.0",
|
12 |
"@vueuse/core": "^9.13.0",
|
|
|
1 |
{
|
2 |
"name": "chatgpt-web",
|
3 |
+
"version": "2.11.1",
|
4 |
"lockfileVersion": 2,
|
5 |
"requires": true,
|
6 |
"packages": {
|
7 |
"": {
|
8 |
"name": "chatgpt-web",
|
9 |
+
"version": "2.11.1",
|
10 |
"dependencies": {
|
11 |
"@traptitech/markdown-it-katex": "^3.6.0",
|
12 |
"@vueuse/core": "^9.13.0",
|
src/hooks/useLanguage.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
import { computed } from 'vue'
|
2 |
-
import {
|
3 |
import { useAppStore } from '@/store'
|
4 |
import { setLocale } from '@/locales'
|
5 |
|
@@ -7,18 +7,16 @@ export function useLanguage() {
|
|
7 |
const appStore = useAppStore()
|
8 |
|
9 |
const language = computed(() => {
|
|
|
10 |
switch (appStore.language) {
|
11 |
-
case 'vi-VN':
|
12 |
-
setLocale('vi-VN')
|
13 |
-
return viVN
|
14 |
case 'en-US':
|
15 |
-
setLocale('en-US')
|
16 |
return enUS
|
|
|
|
|
17 |
default:
|
18 |
-
setLocale('en-US')
|
19 |
return enUS
|
20 |
}
|
21 |
})
|
22 |
|
23 |
return { language }
|
24 |
-
}
|
|
|
1 |
import { computed } from 'vue'
|
2 |
+
import { enUS, viVN } from 'naive-ui'
|
3 |
import { useAppStore } from '@/store'
|
4 |
import { setLocale } from '@/locales'
|
5 |
|
|
|
7 |
const appStore = useAppStore()
|
8 |
|
9 |
const language = computed(() => {
|
10 |
+
setLocale(appStore.language)
|
11 |
switch (appStore.language) {
|
|
|
|
|
|
|
12 |
case 'en-US':
|
|
|
13 |
return enUS
|
14 |
+
case 'vi-VN':
|
15 |
+
return viVN
|
16 |
default:
|
|
|
17 |
return enUS
|
18 |
}
|
19 |
})
|
20 |
|
21 |
return { language }
|
22 |
+
}
|
src/locales/en-US.ts
CHANGED
@@ -30,11 +30,13 @@ export default {
|
|
30 |
},
|
31 |
chat: {
|
32 |
newChatButton: 'New Chat',
|
|
|
33 |
placeholder: 'Ask me anything...(Shift + Enter = line break, "/" to trigger prompts)',
|
34 |
placeholderMobile: 'Ask me anything...',
|
35 |
copy: 'Copy',
|
36 |
copied: 'Copied',
|
37 |
copyCode: 'Copy Code',
|
|
|
38 |
clearChat: 'Clear Chat',
|
39 |
clearChatConfirm: 'Are you sure to clear this chat?',
|
40 |
exportImage: 'Export Image',
|
|
|
30 |
},
|
31 |
chat: {
|
32 |
newChatButton: 'New Chat',
|
33 |
+
newChatTitle: 'New conversation',
|
34 |
placeholder: 'Ask me anything...(Shift + Enter = line break, "/" to trigger prompts)',
|
35 |
placeholderMobile: 'Ask me anything...',
|
36 |
copy: 'Copy',
|
37 |
copied: 'Copied',
|
38 |
copyCode: 'Copy Code',
|
39 |
+
copyFailed: 'Copy Failed',
|
40 |
clearChat: 'Clear Chat',
|
41 |
clearChatConfirm: 'Are you sure to clear this chat?',
|
42 |
exportImage: 'Export Image',
|
src/locales/vi-VN.ts
CHANGED
@@ -30,11 +30,13 @@ export default {
|
|
30 |
},
|
31 |
chat: {
|
32 |
newChatButton: 'Cuộc trò truyện mới',
|
|
|
33 |
placeholder: 'Hỏi tôi bất cứ điều gì...(Shift + Enter = ngắt dòng, "/" để kích hoạt lời nhắc)',
|
34 |
placeholderMobile: 'Hỏi tôi điều gì đó...',
|
35 |
copy: 'Sao chép',
|
36 |
copied: 'Đã sao chép',
|
37 |
copyCode: 'Sao chép mã',
|
|
|
38 |
clearChat: 'Xóa Chat',
|
39 |
clearChatConfirm: 'Bạn có chắc chắn muốn xóa chat này?',
|
40 |
exportImage: 'Xuất Ảnh',
|
|
|
30 |
},
|
31 |
chat: {
|
32 |
newChatButton: 'Cuộc trò truyện mới',
|
33 |
+
newChatTitle: 'Hội thoại mới',
|
34 |
placeholder: 'Hỏi tôi bất cứ điều gì...(Shift + Enter = ngắt dòng, "/" để kích hoạt lời nhắc)',
|
35 |
placeholderMobile: 'Hỏi tôi điều gì đó...',
|
36 |
copy: 'Sao chép',
|
37 |
copied: 'Đã sao chép',
|
38 |
copyCode: 'Sao chép mã',
|
39 |
+
copyFailed: 'Sao chép thất bại',
|
40 |
clearChat: 'Xóa Chat',
|
41 |
clearChatConfirm: 'Bạn có chắc chắn muốn xóa chat này?',
|
42 |
exportImage: 'Xuất Ảnh',
|
src/store/modules/app/helper.ts
CHANGED
@@ -6,6 +6,13 @@ export type Theme = 'light' | 'dark' | 'auto'
|
|
6 |
|
7 |
export type Language = 'en-US' | 'vi-VN'
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
export interface AppState {
|
10 |
siderCollapsed: boolean
|
11 |
theme: Theme
|
@@ -13,7 +20,8 @@ export interface AppState {
|
|
13 |
}
|
14 |
|
15 |
export function defaultSetting(): AppState {
|
16 |
-
|
|
|
17 |
}
|
18 |
|
19 |
export function getLocalSetting(): AppState {
|
|
|
6 |
|
7 |
export type Language = 'en-US' | 'vi-VN'
|
8 |
|
9 |
+
const languageMap: { [key: string]: Language } = {
|
10 |
+
'en': 'en-US',
|
11 |
+
'en-US': 'en-US',
|
12 |
+
'vi': 'vi-VN',
|
13 |
+
'vi-VN': 'vi-VN',
|
14 |
+
}
|
15 |
+
|
16 |
export interface AppState {
|
17 |
siderCollapsed: boolean
|
18 |
theme: Theme
|
|
|
20 |
}
|
21 |
|
22 |
export function defaultSetting(): AppState {
|
23 |
+
const language = languageMap[navigator.language]
|
24 |
+
return { siderCollapsed: false, theme: 'light', language }
|
25 |
}
|
26 |
|
27 |
export function getLocalSetting(): AppState {
|
src/store/modules/chat/helper.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
import { ss } from '@/utils/storage'
|
|
|
2 |
|
3 |
const LOCAL_NAME = 'chatStorage'
|
4 |
|
@@ -7,7 +8,7 @@ export function defaultState(): Chat.ChatState {
|
|
7 |
return {
|
8 |
active: uuid,
|
9 |
usingContext: true,
|
10 |
-
history: [{ uuid, title: '
|
11 |
chat: [{ uuid, data: [] }],
|
12 |
}
|
13 |
}
|
|
|
1 |
import { ss } from '@/utils/storage'
|
2 |
+
import { t } from '@/locales'
|
3 |
|
4 |
const LOCAL_NAME = 'chatStorage'
|
5 |
|
|
|
8 |
return {
|
9 |
active: uuid,
|
10 |
usingContext: true,
|
11 |
+
history: [{ uuid, title: t('chat.newChatTitle'), isEdit: false }],
|
12 |
chat: [{ uuid, data: [] }],
|
13 |
}
|
14 |
}
|
src/store/modules/chat/index.ts
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
import { defineStore } from 'pinia'
|
2 |
import { defaultState, getLocalState, setLocalState } from './helper'
|
3 |
import { router } from '@/router'
|
|
|
4 |
|
5 |
export const useChatStore = defineStore('chat-store', {
|
6 |
state: (): Chat.ChatState => getLocalState(),
|
@@ -103,7 +104,7 @@ export const useChatStore = defineStore('chat-store', {
|
|
103 |
}
|
104 |
else {
|
105 |
this.chat[0].data.push(chat)
|
106 |
-
if (this.history[0].title === '
|
107 |
this.history[0].title = chat.text
|
108 |
this.recordState()
|
109 |
}
|
@@ -112,7 +113,7 @@ export const useChatStore = defineStore('chat-store', {
|
|
112 |
const index = this.chat.findIndex(item => item.uuid === uuid)
|
113 |
if (index !== -1) {
|
114 |
this.chat[index].data.push(chat)
|
115 |
-
if (this.history[index].title === '
|
116 |
this.history[index].title = chat.text
|
117 |
this.recordState()
|
118 |
}
|
|
|
1 |
import { defineStore } from 'pinia'
|
2 |
import { defaultState, getLocalState, setLocalState } from './helper'
|
3 |
import { router } from '@/router'
|
4 |
+
import { t } from '@/locales'
|
5 |
|
6 |
export const useChatStore = defineStore('chat-store', {
|
7 |
state: (): Chat.ChatState => getLocalState(),
|
|
|
104 |
}
|
105 |
else {
|
106 |
this.chat[0].data.push(chat)
|
107 |
+
if (this.history[0].title === t('chat.newChatTitle'))
|
108 |
this.history[0].title = chat.text
|
109 |
this.recordState()
|
110 |
}
|
|
|
113 |
const index = this.chat.findIndex(item => item.uuid === uuid)
|
114 |
if (index !== -1) {
|
115 |
this.chat[index].data.push(chat)
|
116 |
+
if (this.history[index].title === t('chat.newChatTitle'))
|
117 |
this.history[index].title = chat.text
|
118 |
this.recordState()
|
119 |
}
|
src/store/modules/settings/helper.ts
CHANGED
@@ -10,7 +10,7 @@ export interface SettingsState {
|
|
10 |
|
11 |
export function defaultSetting(): SettingsState {
|
12 |
return {
|
13 |
-
systemMessage: 'You are
|
14 |
temperature: 0.8,
|
15 |
top_p: 1,
|
16 |
}
|
|
|
10 |
|
11 |
export function defaultSetting(): SettingsState {
|
12 |
return {
|
13 |
+
systemMessage: 'You are ChatGPT, a large language model trained by OpenAI. Follow the user\'s instructions carefully. Respond using markdown.',
|
14 |
temperature: 0.8,
|
15 |
top_p: 1,
|
16 |
}
|
src/store/modules/user/helper.ts
CHANGED
@@ -16,7 +16,7 @@ export function defaultSetting(): UserState {
|
|
16 |
return {
|
17 |
userInfo: {
|
18 |
avatar: 'https://pnghive.com/core/images/full/chat-gpt-logo-png-1680406057.png',
|
19 |
-
name: '
|
20 |
description: 'AI assistant',
|
21 |
},
|
22 |
}
|
|
|
16 |
return {
|
17 |
userInfo: {
|
18 |
avatar: 'https://pnghive.com/core/images/full/chat-gpt-logo-png-1680406057.png',
|
19 |
+
name: 'ChatGPT',
|
20 |
description: 'AI assistant',
|
21 |
},
|
22 |
}
|
src/views/chat/components/Message/Text.vue
CHANGED
@@ -70,9 +70,9 @@ function addCopyEvents() {
|
|
70 |
const code = btn.parentElement?.nextElementSibling?.textContent
|
71 |
if (code) {
|
72 |
copyToClip(code).then(() => {
|
73 |
-
btn.textContent = '
|
74 |
setTimeout(() => {
|
75 |
-
btn.textContent = '
|
76 |
}, 1000)
|
77 |
})
|
78 |
}
|
|
|
70 |
const code = btn.parentElement?.nextElementSibling?.textContent
|
71 |
if (code) {
|
72 |
copyToClip(code).then(() => {
|
73 |
+
btn.textContent = t('chat.copied')
|
74 |
setTimeout(() => {
|
75 |
+
btn.textContent = t('chat.copyCode')
|
76 |
}, 1000)
|
77 |
})
|
78 |
}
|
src/views/chat/components/Message/index.vue
CHANGED
@@ -84,10 +84,10 @@ function handleRegenerate() {
|
|
84 |
async function handleCopy() {
|
85 |
try {
|
86 |
await copyToClip(props.text || '')
|
87 |
-
message.success('
|
88 |
}
|
89 |
catch {
|
90 |
-
message.error('
|
91 |
}
|
92 |
}
|
93 |
</script>
|
|
|
84 |
async function handleCopy() {
|
85 |
try {
|
86 |
await copyToClip(props.text || '')
|
87 |
+
message.success(t('chat.copied'))
|
88 |
}
|
89 |
catch {
|
90 |
+
message.error(t('chat.copyFailed'))
|
91 |
}
|
92 |
}
|
93 |
</script>
|
src/views/chat/index.vue
CHANGED
@@ -481,7 +481,7 @@ onUnmounted(() => {
|
|
481 |
<template v-if="!dataSources.length">
|
482 |
<div class="flex items-center justify-center mt-4 text-center text-neutral-300">
|
483 |
<SvgIcon icon="ri:bubble-chart-fill" class="mr-2 text-3xl" />
|
484 |
-
<span>
|
485 |
</div>
|
486 |
</template>
|
487 |
<template v-else>
|
|
|
481 |
<template v-if="!dataSources.length">
|
482 |
<div class="flex items-center justify-center mt-4 text-center text-neutral-300">
|
483 |
<SvgIcon icon="ri:bubble-chart-fill" class="mr-2 text-3xl" />
|
484 |
+
<span>{{ t('chat.newChatTitle') }}</span>
|
485 |
</div>
|
486 |
</template>
|
487 |
<template v-else>
|
src/views/chat/layout/sider/index.vue
CHANGED
@@ -20,7 +20,7 @@ const show = ref(false)
|
|
20 |
const collapsed = computed(() => appStore.siderCollapsed)
|
21 |
|
22 |
function handleAdd() {
|
23 |
-
chatStore.addHistory({ title: '
|
24 |
if (isMobile.value)
|
25 |
appStore.setSiderCollapsed(true)
|
26 |
}
|
|
|
20 |
const collapsed = computed(() => appStore.siderCollapsed)
|
21 |
|
22 |
function handleAdd() {
|
23 |
+
chatStore.addHistory({ title: t('chat.newChatTitle'), uuid: Date.now(), isEdit: false })
|
24 |
if (isMobile.value)
|
25 |
appStore.setSiderCollapsed(true)
|
26 |
}
|