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 @@
- - - - - - -
- - 提交 - -
-
+
- - - - @@ -45,7 +14,7 @@ import {httpGet, httpPost} from "@/utils/http"; import {showFailToast, showSuccessToast} from "vant"; import {ElMessage} from "element-plus"; -const title = ref('聊天设置') +const title = ref('图片创作广场') const form = ref({ chat_config: { api_keys: {OpenAI: "", Azure: "", ChatGLM: ""} diff --git a/web/src/views/mobile/Home.vue b/web/src/views/mobile/Home.vue index d7ea04a4..478b6805 100644 --- a/web/src/views/mobile/Home.vue +++ b/web/src/views/mobile/Home.vue @@ -6,7 +6,7 @@ 对话 绘图 - 应用 + 广场 我的 diff --git a/web/src/views/mobile/ImageMj.vue b/web/src/views/mobile/ImageMj.vue index 61c63f9b..a35acd78 100644 --- a/web/src/views/mobile/ImageMj.vue +++ b/web/src/views/mobile/ImageMj.vue @@ -190,6 +190,9 @@ + + + @@ -202,7 +205,7 @@