diff --git a/api/handler/mj_handler.go b/api/handler/mj_handler.go
index 7da787eb..2a41f390 100644
--- a/api/handler/mj_handler.go
+++ b/api/handler/mj_handler.go
@@ -141,6 +141,11 @@ func (h *MidJourneyHandler) Image(c *gin.Context) {
prompt += fmt.Sprintf(" %s", data.Model)
}
+ // 处理融图和换脸的提示词
+ if data.TaskType == types.TaskSwapFace.String() || data.TaskType == types.TaskBlend.String() {
+ prompt = fmt.Sprintf("%s:%s", data.TaskType, strings.Join(data.ImgArr, ","))
+ }
+
idValue, _ := c.Get(types.LoginUserID)
userId := utils.IntValue(utils.InterfaceToString(idValue), 0)
// generate task id
diff --git a/api/service/mj/plus/service.go b/api/service/mj/plus/service.go
index 88e8a684..309a3158 100644
--- a/api/service/mj/plus/service.go
+++ b/api/service/mj/plus/service.go
@@ -58,12 +58,12 @@ func (s *Service) Run() {
}
// if it's reference message, check if it's this channel's message
- if task.ChannelId != "" && task.ChannelId != s.Name {
- logger.Debugf("handle other service task, name: %s, channel_id: %s, drop it.", s.Name, task.ChannelId)
- s.taskQueue.RPush(task)
- time.Sleep(time.Second)
- continue
- }
+ //if task.ChannelId != "" && task.ChannelId != s.Name {
+ // logger.Debugf("handle other service task, name: %s, channel_id: %s, drop it.", s.Name, task.ChannelId)
+ // s.taskQueue.RPush(task)
+ // time.Sleep(time.Second)
+ // continue
+ //}
logger.Infof("%s handle a new MidJourney task: %+v", s.Name, task)
var res ImageRes
@@ -85,14 +85,15 @@ func (s *Service) Run() {
break
}
+ var job model.MidJourneyJob
+ s.db.Where("id = ?", task.Id).First(&job)
if err != nil || (res.Code != 1 && res.Code != 22) {
errMsg := fmt.Sprintf("%v,%s", err, res.Description)
logger.Error("绘画任务执行失败:", errMsg)
+ job.Progress = -1
+ job.ErrMsg = errMsg
// update the task progress
- s.db.Model(&model.MidJourneyJob{Id: task.Id}).UpdateColumns(map[string]interface{}{
- "progress": -1,
- "err_msg": errMsg,
- })
+ s.db.Updates(&job)
// 任务失败,通知前端
s.notifyQueue.RPush(task.UserId)
// restore img_call quota
@@ -108,11 +109,9 @@ func (s *Service) Run() {
s.taskStartTimes[int(task.Id)] = time.Now()
atomic.AddInt32(&s.HandledTaskNum, 1)
// 更新任务 ID/频道
- s.db.Model(&model.MidJourneyJob{Id: task.Id}).UpdateColumns(map[string]interface{}{
- "task_id": res.Result,
- "channel_id": s.Name,
- })
-
+ job.TaskId = res.Result
+ job.ChannelId = s.Name
+ s.db.Updates(&job)
}
}
diff --git a/web/src/assets/css/mobile/image-mj.css b/web/src/assets/css/mobile/image-mj.css
index a16bb696..c221b867 100644
--- a/web/src/assets/css/mobile/image-mj.css
+++ b/web/src/assets/css/mobile/image-mj.css
@@ -131,3 +131,8 @@
right: 5px;
top: 5px;
}
+.mobile-mj .content .finish-job-list .van-grid .van-grid-item .van-grid-item__content .job-item .remove .el-button {
+ margin-left: 5px;
+ height: auto;
+ padding: 5px;
+}
diff --git a/web/src/assets/css/mobile/image-mj.styl b/web/src/assets/css/mobile/image-mj.styl
index 0370020e..8f71dbce 100644
--- a/web/src/assets/css/mobile/image-mj.styl
+++ b/web/src/assets/css/mobile/image-mj.styl
@@ -175,6 +175,12 @@
position absolute
right 5px
top 5px
+
+ .el-button {
+ margin-left 5px
+ height auto
+ padding 5px
+ }
}
}
diff --git a/web/src/assets/iconfont/iconfont.css b/web/src/assets/iconfont/iconfont.css
index 8f761cb7..8706b25b 100644
--- a/web/src/assets/iconfont/iconfont.css
+++ b/web/src/assets/iconfont/iconfont.css
@@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 4125778 */
- src: url('iconfont.woff2?t=1705615887594') format('woff2'),
- url('iconfont.woff?t=1705615887594') format('woff'),
- url('iconfont.ttf?t=1705615887594') format('truetype');
+ src: url('iconfont.woff2?t=1708054962140') format('woff2'),
+ url('iconfont.woff?t=1708054962140') format('woff'),
+ url('iconfont.ttf?t=1708054962140') format('truetype');
}
.iconfont {
@@ -13,6 +13,10 @@
-moz-osx-font-smoothing: grayscale;
}
+.icon-prompt:before {
+ content: "\e6ce";
+}
+
.icon-share-bold:before {
content: "\e626";
}
diff --git a/web/src/assets/iconfont/iconfont.js b/web/src/assets/iconfont/iconfont.js
index 89b3d061..2c4dfc7b 100644
--- a/web/src/assets/iconfont/iconfont.js
+++ b/web/src/assets/iconfont/iconfont.js
@@ -1 +1 @@
-window._iconfont_svg_string_4125778='',function(a){var l=(l=document.getElementsByTagName("script"))[l.length-1],c=l.getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var t,h,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(c&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}t=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),t()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(i=t,o=a.document,z=!1,s(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,v())})}function v(){z||(z=!0,i())}function s(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(s,50)}v()}}(window);
\ No newline at end of file
+window._iconfont_svg_string_4125778='',function(a){var l=(l=document.getElementsByTagName("script"))[l.length-1],c=l.getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var t,h,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(c&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}t=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),t()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(i=t,o=a.document,z=!1,s(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,v())})}function v(){z||(z=!0,i())}function s(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(s,50)}v()}}(window);
\ No newline at end of file
diff --git a/web/src/assets/iconfont/iconfont.json b/web/src/assets/iconfont/iconfont.json
index 06eb9ce8..3186e019 100644
--- a/web/src/assets/iconfont/iconfont.json
+++ b/web/src/assets/iconfont/iconfont.json
@@ -5,6 +5,13 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
+ {
+ "icon_id": "8017627",
+ "name": "prompt",
+ "font_class": "prompt",
+ "unicode": "e6ce",
+ "unicode_decimal": 59086
+ },
{
"icon_id": "1132455",
"name": "share-bold",
diff --git a/web/src/assets/iconfont/iconfont.ttf b/web/src/assets/iconfont/iconfont.ttf
index 860d6bea..cc125590 100644
Binary files a/web/src/assets/iconfont/iconfont.ttf and b/web/src/assets/iconfont/iconfont.ttf differ
diff --git a/web/src/assets/iconfont/iconfont.woff b/web/src/assets/iconfont/iconfont.woff
index 9aa4b517..fd9a3d84 100644
Binary files a/web/src/assets/iconfont/iconfont.woff and b/web/src/assets/iconfont/iconfont.woff differ
diff --git a/web/src/assets/iconfont/iconfont.woff2 b/web/src/assets/iconfont/iconfont.woff2
index 1b52a11f..0021a3ae 100644
Binary files a/web/src/assets/iconfont/iconfont.woff2 and b/web/src/assets/iconfont/iconfont.woff2 differ
diff --git a/web/src/views/mobile/ChatApps.vue b/web/src/views/mobile/ChatApps.vue
index 1de545bd..fef2232e 100644
--- a/web/src/views/mobile/ChatApps.vue
+++ b/web/src/views/mobile/ChatApps.vue
@@ -3,39 +3,8 @@