chore: version 2.8.0 (#140)

* fix: 用户输入换行符号被忽略的问题[#137]

* feat: 输入框添加换行提示,移动端`Enter` 判定换行而不是提交[#135]

* feat: 调整标签

* chore: version 2.8.0
This commit is contained in:
Redon 2023-02-27 11:14:32 +08:00 committed by GitHub
parent 3e9db49aad
commit 89712aada7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 57 additions and 9 deletions

View File

@ -1,3 +1,25 @@
## v2.8.0
`2023-02-27`
- 感谢 [puppywang](https://github.com/Chanzhaoyu/chatgpt-web/commit/628187f5c3348bda0d0518f90699a86525d19018) 修复了 `2.7.0` 版本中关于流输出数据的问题(使用 `nginx` 需要自行配置 `octet-stream` 相关内容)
- 关于为什么使用 `octet-stream` 而不是 `sse`,是因为更好的兼容之前的模式。
- 建议更新到此版本获得比较完整的体验
### Enhancement
- 优化了部份代码和类型提示
- 输入框添加换行提示
- 移动端输入框现在回车为换行,而不是直接提交
- 移动端双击标题返回顶部,箭头返回底部
### BugFix
- 流输出数据下的问题[#122]
- 修复了 `API Key` 下部份代码不换行的问题
- 修复移动端深色模式部份样式问题[#123][#126]
- 修复主题模式图标不一致的问题[#126]
## v2.7.3 ## v2.7.3
`2023-02-25` `2023-02-25`

View File

@ -2,8 +2,8 @@
> 使用 `express``vue3` 搭建的支持 `ChatGPT` 双模型演示网页 > 使用 `express``vue3` 搭建的支持 `ChatGPT` 双模型演示网页
![cover](./docs/c1.png) ![cover](./docs/c1-2.8.0.png)
![cover2](./docs/c2.png) ![cover2](./docs/c2-2.8.0.png)
- [ChatGPT Web](#chatgpt-web) - [ChatGPT Web](#chatgpt-web)
- [介绍](#介绍) - [介绍](#介绍)
@ -30,6 +30,7 @@
- [前端网页](#前端网页-1) - [前端网页](#前端网页-1)
- [常见问题](#常见问题) - [常见问题](#常见问题)
- [参与贡献](#参与贡献) - [参与贡献](#参与贡献)
- [赞助](#赞助)
- [License](#license) - [License](#license)
## 介绍 ## 介绍
@ -44,6 +45,8 @@
1. `ChatGPTAPI` 使用 `text-davinci-003` 通过官方`OpenAI`补全`API`模拟`ChatGPT`(最稳健的方法,但它不是免费的,并且没有使用针对聊天进行微调的模型) 1. `ChatGPTAPI` 使用 `text-davinci-003` 通过官方`OpenAI`补全`API`模拟`ChatGPT`(最稳健的方法,但它不是免费的,并且没有使用针对聊天进行微调的模型)
2. `ChatGPTUnofficialProxyAPI` 使用非官方代理服务器访问 `ChatGPT` 的后端`API`,绕过`Cloudflare`(使用真实的的`ChatGPT`,非常轻量级,但依赖于第三方服务器,并且有速率限制) 2. `ChatGPTUnofficialProxyAPI` 使用非官方代理服务器访问 `ChatGPT` 的后端`API`,绕过`Cloudflare`(使用真实的的`ChatGPT`,非常轻量级,但依赖于第三方服务器,并且有速率限制)
[查看详情](https://github.com/Chanzhaoyu/chatgpt-web/issues/138)
切换方式: 切换方式:
1. 进入 `service/.env` 文件 1. 进入 `service/.env` 文件
2. 使用 `OpenAI API Key` 请填写 `OPENAI_API_KEY` 字段 [(获取 apiKey)](https://platform.openai.com/overview) 2. 使用 `OpenAI API Key` 请填写 `OPENAI_API_KEY` 字段 [(获取 apiKey)](https://platform.openai.com/overview)
@ -255,5 +258,20 @@ A: `vscode` 请安装项目推荐插件,或手动安装 `Eslint` 插件。
<img src="https://contrib.rocks/image?repo=Chanzhaoyu/chatgpt-web" /> <img src="https://contrib.rocks/image?repo=Chanzhaoyu/chatgpt-web" />
</a> </a>
## 赞助
如果你觉得这个项目对你有帮助,并且情况允许的话,可以给我一点点支持,总之非常感谢支持~
<div style="display: flex; gap: 20px;">
<div style="text-align: center">
<img style="max-width: 100%" src="./docs/wechat.png" alt="微信" />
<p>WeChat Pay</p>
</div>
<div style="text-align: center">
<img style="max-width: 100%" src="./docs/alipay.png" alt="支付宝" />
<p>Alipay</p>
</div>
</div>
## License ## License
MIT © [ChenZhaoYu](./license) MIT © [ChenZhaoYu](./license)

BIN
docs/alipay.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
docs/c1-2.8.0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

BIN
docs/c2-2.8.0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

BIN
docs/wechat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View File

@ -1,6 +1,6 @@
{ {
"name": "chatgpt-web", "name": "chatgpt-web",
"version": "2.7.3", "version": "2.8.0",
"private": false, "private": false,
"description": "ChatGPT Web", "description": "ChatGPT Web",
"author": "ChenZhaoYu <chenzhaoyu1994@gmail.com>", "author": "ChenZhaoYu <chenzhaoyu1994@gmail.com>",

View File

@ -48,8 +48,8 @@ const text = computed(() => {
</template> </template>
<template v-else> <template v-else>
<div class="leading-relaxed break-all"> <div class="leading-relaxed break-all">
<div v-if="!inversion" class="markdown-body" v-html="text" /> <pre v-if="!inversion" class="markdown-body" v-html="text" />
<div v-else v-text="text" /> <div v-else class="whitespace-pre-wrap" v-text="text" />
</div> </div>
</template> </template>
</div> </div>

View File

@ -266,10 +266,12 @@ function handleClear() {
} }
function handleEnter(event: KeyboardEvent) { function handleEnter(event: KeyboardEvent) {
if (!isMobile.value) {
if (event.key === 'Enter' && !event.shiftKey) { if (event.key === 'Enter' && !event.shiftKey) {
event.preventDefault() event.preventDefault()
handleSubmit() handleSubmit()
} }
}
} }
function handleStop() { function handleStop() {
@ -279,6 +281,12 @@ function handleStop() {
} }
} }
const placeholder = computed(() => {
if (isMobile.value)
return 'Ask me anything...'
return 'Ask me anything... (Shift + Enter = line break)'
})
const buttonDisabled = computed(() => { const buttonDisabled = computed(() => {
return loading.value || !prompt.value || prompt.value.trim() === '' return loading.value || !prompt.value || prompt.value.trim() === ''
}) })
@ -358,7 +366,7 @@ onUnmounted(() => {
v-model:value="prompt" v-model:value="prompt"
type="textarea" type="textarea"
:autosize="{ minRows: 1, maxRows: 2 }" :autosize="{ minRows: 1, maxRows: 2 }"
placeholder="Ask me anything..." :placeholder="placeholder"
@keypress="handleEnter" @keypress="handleEnter"
/> />
<NButton type="primary" :disabled="buttonDisabled" @click="handleSubmit"> <NButton type="primary" :disabled="buttonDisabled" @click="handleSubmit">