diff --git a/api/handler/mj_handler.go b/api/handler/mj_handler.go
index 88221f3b..5b49f51a 100644
--- a/api/handler/mj_handler.go
+++ b/api/handler/mj_handler.go
@@ -456,15 +456,44 @@ func (h *MidJourneyHandler) Remove(c *gin.Context) {
resp.ERROR(c, "记录不存在")
return
}
+
// remove job recode
- res := h.DB.Delete(&job)
- if res.Error != nil {
- resp.ERROR(c, res.Error.Error())
+ tx := h.DB.Begin()
+ if err := tx.Delete(&job).Error; err != nil {
+ tx.Rollback()
+ resp.ERROR(c, err.Error())
return
}
+ // refund power
+ err := tx.Model(&model.User{}).Where("id = ?", job.UserId).UpdateColumn("power", gorm.Expr("power + ?", job.Power)).Error
+ if err != nil {
+ tx.Rollback()
+ resp.ERROR(c, err.Error())
+ return
+ }
+ var user model.User
+ h.DB.Where("id = ?", job.UserId).First(&user)
+ err = tx.Create(&model.PowerLog{
+ UserId: user.Id,
+ Username: user.Username,
+ Type: types.PowerConsume,
+ Amount: job.Power,
+ Balance: user.Power + job.Power,
+ Mark: types.PowerAdd,
+ Model: "mid-journey",
+ Remark: fmt.Sprintf("绘画任务失败,退回算力。任务ID:%s", job.TaskId),
+ CreatedAt: time.Now(),
+ }).Error
+ if err != nil {
+ tx.Rollback()
+ resp.ERROR(c, err.Error())
+ return
+ }
+ tx.Commit()
+
// remove image
- err := h.uploader.GetUploadHandler().Delete(job.ImgURL)
+ err = h.uploader.GetUploadHandler().Delete(job.ImgURL)
if err != nil {
logger.Error("remove image failed: ", err)
}
diff --git a/api/service/mj/pool.go b/api/service/mj/pool.go
index dca71a76..80ed6067 100644
--- a/api/service/mj/pool.go
+++ b/api/service/mj/pool.go
@@ -8,7 +8,6 @@ package mj
// * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
import (
- "fmt"
"geekai/core/types"
logger2 "geekai/logger"
"geekai/service"
@@ -188,28 +187,6 @@ func (p *ServicePool) SyncTaskProgress() {
}
for _, job := range jobs {
- // 失败或者 30 分钟还没完成的任务删除并退回算力
- if time.Now().Sub(job.CreatedAt) > time.Minute*30 {
- p.db.Delete(&job)
- // 退回算力
- tx := p.db.Model(&model.User{}).Where("id = ?", job.UserId).UpdateColumn("power", gorm.Expr("power + ?", job.Power))
- if tx.Error == nil && tx.RowsAffected > 0 {
- var user model.User
- p.db.Where("id = ?", job.UserId).First(&user)
- p.db.Create(&model.PowerLog{
- UserId: user.Id,
- Username: user.Username,
- Type: types.PowerConsume,
- Amount: job.Power,
- Balance: user.Power + job.Power,
- Mark: types.PowerAdd,
- Model: "mid-journey",
- Remark: fmt.Sprintf("绘画任务失败,退回算力。任务ID:%s", job.TaskId),
- CreatedAt: time.Now(),
- })
- }
- continue
- }
if servicePlus := p.getService(job.ChannelId); servicePlus != nil {
_ = servicePlus.Notify(job)
}
diff --git a/web/src/assets/css/image-mj.styl b/web/src/assets/css/image-mj.styl
index afb7671d..61845709 100644
--- a/web/src/assets/css/image-mj.styl
+++ b/web/src/assets/css/image-mj.styl
@@ -79,7 +79,7 @@
background-color #383838
border 1px solid #454545
border-radius 5px
- padding 10px
+ padding 5px
margin-bottom 10px
display flex
flex-flow column
@@ -91,12 +91,13 @@
}
.el-image {
- height 60px
+ height 30px
width 100%
}
.text {
- margin-top 6px
+ margin-top 4px
+ font-size 12px
}
}
diff --git a/web/src/components/BackTop.vue b/web/src/components/BackTop.vue
new file mode 100644
index 00000000..3fbab35a
--- /dev/null
+++ b/web/src/components/BackTop.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/src/views/ChatPlus.vue b/web/src/views/ChatPlus.vue
index 8db312c8..80769552 100644
--- a/web/src/views/ChatPlus.vue
+++ b/web/src/views/ChatPlus.vue
@@ -118,6 +118,8 @@
v-if="item.type==='prompt'" :data="item" :list-style="listStyle"/>
+
+
@@ -220,6 +222,8 @@ import FileSelect from "@/components/FileSelect.vue";
import FileList from "@/components/FileList.vue";
import ChatSetting from "@/components/ChatSetting.vue";
import axios from "axios";
+import BackTop from "@/components/BackTop.vue";
+import {showMessageError} from "@/utils/dialog";
const title = ref('ChatGPT-智能助手');
const models = ref([])
@@ -603,18 +607,6 @@ const connect = function (chat_id, role_id) {
}
}
- // 心跳函数
- const sendHeartbeat = () => {
- clearTimeout(heartbeatHandle.value)
- new Promise((resolve, reject) => {
- if (socket.value !== null) {
- socket.value.send(JSON.stringify({type: "heartbeat", content: "ping"}))
- }
- resolve("success")
- }).then(() => {
- heartbeatHandle.value = setTimeout(() => sendHeartbeat(), 5000)
- });
- }
const _socket = new WebSocket(host + `/api/chat/new?session_id=${sessionId.value}&role_id=${role_id}&chat_id=${chat_id}&model_id=${modelID.value}&token=${getUserToken()}`);
_socket.addEventListener('open', () => {
chatData.value = []; // 初始化聊天数据
@@ -636,8 +628,6 @@ const connect = function (chat_id, role_id) {
} else { // 加载聊天记录
loadChatHistory(chat_id);
}
- // 发送心跳消息
- sendHeartbeat()
});
_socket.addEventListener('message', event => {
@@ -648,7 +638,7 @@ const connect = function (chat_id, role_id) {
reader.onload = () => {
const data = JSON.parse(String(reader.result));
if (data.type === 'start') {
- const prePrompt = chatData.value[chatData.value.length-1].content
+ const prePrompt = chatData.value[chatData.value.length-1]?.content
chatData.value.push({
type: "reply",
id: randString(32),
@@ -689,8 +679,10 @@ const connect = function (chat_id, role_id) {
} else {
lineBuffer.value += data.content;
const reply = chatData.value[chatData.value.length - 1]
- reply['orgContent'] = lineBuffer.value;
- reply['content'] = md.render(processContent(lineBuffer.value));
+ if (reply) {
+ reply['orgContent'] = lineBuffer.value;
+ reply['content'] = md.render(processContent(lineBuffer.value));
+ }
}
// 将聊天框的滚动条滑动到最底部
nextTick(() => {
@@ -716,7 +708,7 @@ const connect = function (chat_id, role_id) {
connect(chat_id, role_id)
}).catch(() => {
loading.value = true
- setTimeout(() => connect(chat_id, role_id), 3000)
+ showMessageError("会话已断开,刷新页面...")
});
});
diff --git a/web/src/views/Dalle.vue b/web/src/views/Dalle.vue
index 2e69ca60..fb243a3d 100644
--- a/web/src/views/Dalle.vue
+++ b/web/src/views/Dalle.vue
@@ -174,7 +174,7 @@
-
+
@@ -193,6 +193,7 @@ import Clipboard from "clipboard";
import {checkSession} from "@/action/session";
import {useSharedStore} from "@/store/sharedata";
import TaskList from "@/components/TaskList.vue";
+import BackTop from "@/components/BackTop.vue";
const listBoxHeight = ref(0)
// const paramBoxHeight = ref(0)
diff --git a/web/src/views/ImageMj.vue b/web/src/views/ImageMj.vue
index ff26575e..ca1a3759 100644
--- a/web/src/views/ImageMj.vue
+++ b/web/src/views/ImageMj.vue
@@ -593,6 +593,7 @@
+
@@ -613,6 +614,7 @@ import {getSessionId} from "@/store/session";
import {copyObj, removeArrayItem} from "@/utils/libs";
import {useSharedStore} from "@/store/sharedata";
import TaskList from "@/components/TaskList.vue";
+import BackTop from "@/components/BackTop.vue";
const listBoxHeight = ref(0)
const paramBoxHeight = ref(0)
@@ -1014,7 +1016,7 @@ const publishImage = (item, action) => {
item.publish = action
page.value = 0
isOver.value = false
- fetchFinishJobs()
+ item.publish = action
}).catch(e => {
ElMessage.error(text + "失败:" + e.message)
})
diff --git a/web/src/views/ImageSd.vue b/web/src/views/ImageSd.vue
index 7c686fe7..01771cbe 100644
--- a/web/src/views/ImageSd.vue
+++ b/web/src/views/ImageSd.vue
@@ -345,7 +345,7 @@
-
+
@@ -476,6 +476,7 @@ import {useRouter} from "vue-router";
import {getSessionId} from "@/store/session";
import {useSharedStore} from "@/store/sharedata";
import TaskList from "@/components/TaskList.vue";
+import BackTop from "@/components/BackTop.vue";
const listBoxHeight = ref(0)
// const paramBoxHeight = ref(0)
@@ -755,7 +756,7 @@ const publishImage = (event, item, action) => {
item.publish = action
page.value = 0
isOver.value = false
- fetchFinishJobs()
+ item.publish = action
}).catch(e => {
ElMessage.error(text + "失败:" + e.message)
})
diff --git a/web/src/views/ImagesWall.vue b/web/src/views/ImagesWall.vue
index 4a136b3f..fa8c4d83 100644
--- a/web/src/views/ImagesWall.vue
+++ b/web/src/views/ImagesWall.vue
@@ -163,7 +163,10 @@
-
+
+
+
+
@@ -301,6 +304,7 @@ import {httpGet} from "@/utils/http";
import {ElMessage} from "element-plus";
import Clipboard from "clipboard";
import {useRouter} from "vue-router";
+import BackTop from "@/components/BackTop.vue";
const data = ref({
"mj": [],