diff --git a/api/handler/chat_role_handler.go b/api/handler/chat_role_handler.go index e220009a..5f85e145 100644 --- a/api/handler/chat_role_handler.go +++ b/api/handler/chat_role_handler.go @@ -29,45 +29,32 @@ func NewChatRoleHandler(app *core.AppServer, db *gorm.DB) *ChatRoleHandler { // List 获取用户聊天应用列表 func (h *ChatRoleHandler) List(c *gin.Context) { - all := h.GetBool(c, "all") + id := h.GetInt(c, "id", 0) userId := h.GetLoginUserId(c) var roles []model.ChatRole - var roleVos = make([]vo.ChatRole, 0) + query := h.DB.Where("enable", true) + if userId > 0 { + var user model.User + h.DB.First(&user, userId) + var roleKeys []string + err := utils.JsonDecode(user.ChatRoles, &roleKeys) + if err != nil { + resp.ERROR(c, "角色解析失败!") + return + } + query = query.Where("marker IN ?", roleKeys) + } + if id > 0 { + query = query.Or("id", id) + } res := h.DB.Where("enable", true).Order("sort_num ASC").Find(&roles) if res.Error != nil { - resp.SUCCESS(c, roleVos) - return - } - - // 获取所有角色 - if userId == 0 || all { - // 转成 vo - var roleVos = make([]vo.ChatRole, 0) - for _, r := range roles { - var v vo.ChatRole - err := utils.CopyObject(r, &v) - if err == nil { - v.Id = r.Id - roleVos = append(roleVos, v) - } - } - resp.SUCCESS(c, roleVos) - return - } - - var user model.User - h.DB.First(&user, userId) - var roleKeys []string - err := utils.JsonDecode(user.ChatRoles, &roleKeys) - if err != nil { - resp.ERROR(c, "角色解析失败!") + resp.ERROR(c, res.Error.Error()) return } + var roleVos = make([]vo.ChatRole, 0) for _, r := range roles { - if !utils.Contains(roleKeys, r.Key) { - continue - } var v vo.ChatRole err := utils.CopyObject(r, &v) if err == nil { diff --git a/web/src/views/ChatApps.vue b/web/src/views/ChatApps.vue index 360742b6..4bbcd305 100644 --- a/web/src/views/ChatApps.vue +++ b/web/src/views/ChatApps.vue @@ -15,18 +15,13 @@
{{ scope.item.hello_msg }}
-
- 使用 + 使用 + 移除 -
- - - - - 添加应用 - + + + 添加 +
@@ -77,7 +72,7 @@ const roles = ref([]) const store = useSharedStore(); onMounted(() => { - httpGet("/api/role/list?all=true").then((res) => { + httpGet("/api/role/list").then((res) => { const items = res.data // 处理 hello message for (let i = 0; i < items.length; i++) { diff --git a/web/src/views/ChatPlus.vue b/web/src/views/ChatPlus.vue index 6419d1dd..b7770603 100644 --- a/web/src/views/ChatPlus.vue +++ b/web/src/views/ChatPlus.vue @@ -316,18 +316,17 @@ const initData = () => { chatList.value = res.data; allChats.value = res.data; } - + if (router.currentRoute.value.query.role_id) { + roleId.value = parseInt(router.currentRoute.value.query.role_id) + } // 加载模型 httpGet('/api/model/list').then(res => { models.value = res.data modelID.value = models.value[0].id - // 加载角色列表 - httpGet(`/api/role/list`).then((res) => { + httpGet(`/api/role/list`,{id:roleId.value}).then((res) => { roles.value = res.data; - if (router.currentRoute.value.query.role_id) { - roleId.value = parseInt(router.currentRoute.value.query.role_id) - } else { + if (!roleId.value) { roleId.value = roles.value[0]['id'] } @@ -354,7 +353,7 @@ const initData = () => { }) // 加载模型 - httpGet('/api/model/list').then(res => { + httpGet('/api/model/list',{id:roleId.value}).then(res => { models.value = res.data modelID.value = models.value[0].id }).catch(e => { diff --git a/web/src/views/Home.vue b/web/src/views/Home.vue index ceaa148f..50e299a6 100644 --- a/web/src/views/Home.vue +++ b/web/src/views/Home.vue @@ -166,6 +166,12 @@ watch(() => store.showLoginDialog, (newValue) => { show.value = newValue }); +// 监听路由变化 +router.beforeEach((to, from, next) => { + curPath.value = to.path + next(); +}); + if (curPath.value === "/external") { curPath.value = router.currentRoute.value.query.url } diff --git a/web/src/views/mobile/ChatList.vue b/web/src/views/mobile/ChatList.vue index 96dc91da..2a77ca3a 100644 --- a/web/src/views/mobile/ChatList.vue +++ b/web/src/views/mobile/ChatList.vue @@ -105,7 +105,7 @@ checkSession().then((user) => { loginUser.value = user isLogin.value = true // 加载角色列表 - httpGet(`/api/role/list?user_id=${user.id}`).then((res) => { + httpGet(`/api/role/list`).then((res) => { if (res.data) { const items = res.data for (let i = 0; i < items.length; i++) { diff --git a/web/src/views/mobile/Index.vue b/web/src/views/mobile/Index.vue index ff0cf53a..e2e252c7 100644 --- a/web/src/views/mobile/Index.vue +++ b/web/src/views/mobile/Index.vue @@ -109,7 +109,7 @@ onMounted(() => { }) const fetchApps = () => { - httpGet("/api/role/list?all=true").then((res) => { + httpGet("/api/role/list").then((res) => { const items = res.data // 处理 hello message for (let i = 0; i < items.length; i++) { diff --git a/web/src/views/mobile/pages/ImageMj.vue b/web/src/views/mobile/pages/ImageMj.vue index d807958b..fec6f1b3 100644 --- a/web/src/views/mobile/pages/ImageMj.vue +++ b/web/src/views/mobile/pages/ImageMj.vue @@ -407,8 +407,16 @@ const connect = () => { _socket.addEventListener('message', event => { if (event.data instanceof Blob) { - fetchRunningJobs() - fetchFinishJobs(1) + const reader = new FileReader(); + reader.readAsText(event.data, "UTF-8") + reader.onload = () => { + const message = String(reader.result) + if (message === "FINISH" || message === "FAIL") { + page.value = 1 + fetchFinishJobs(1) + } + fetchRunningJobs() + } } }); @@ -456,7 +464,7 @@ const fetchFinishJobs = (page) => { httpGet(`/api/mj/jobs?finish=1&page=${page}&page_size=${pageSize.value}`).then(res => { const jobs = res.data for (let i = 0; i < jobs.length; i++) { - if (jobs[i].progress === -1) { + if (jobs[i].progress === 101) { showNotify({ message: `任务ID:${jobs[i]['task_id']} 原因:${jobs[i]['err_msg']}`, type: 'danger', @@ -479,7 +487,7 @@ const fetchFinishJobs = (page) => { } } - if (jobs[i].type === 'image' || jobs[i].type === 'variation') { + if ((jobs[i].type === 'image' || jobs[i].type === 'variation') && jobs[i].progress === 100){ jobs[i]['can_opt'] = true } }