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
}
}