1
1
<script setup lang="ts">
2
2
import { reactive , ref , onMounted } from ' vue' ;
3
- import { Message } from ' ./interfaces/message'
3
+ import { Message , MessageStatus } from ' ./interfaces/message'
4
4
import MessageItem from ' ./Message.vue'
5
- import { getMessagesCache , setMessagesCache } from ' ./utils/storage'
6
5
import * as uuid from ' uuid'
7
- import { ImagineAPI , UpscaleAPI } from ' ./api/midjourney'
6
+ import { getMessagesAPI , createMessageAPI , upscaleMessageAPI } from ' ./api/midjourney'
8
7
9
8
const contentWrap = ref <HTMLDivElement >()
10
9
const data = reactive <{
11
10
messages: Message [],
12
11
prompt: string
13
12
}>({
14
13
prompt: ' ' ,
15
- messages: getMessagesCache () as Message []
14
+ messages: []
16
15
})
17
16
18
17
const onClickSend = () => {
@@ -25,100 +24,52 @@ const onKeyDown = (event: Event) => {
25
24
sendPrompt ()
26
25
}
27
26
28
- const sendPrompt = () => {
27
+ const getList = () => {
28
+ getMessagesAPI ().then ((resData ) => {
29
+ data .messages = resData as any ;
30
+ scrollToBottom ()
31
+ })
32
+ }
33
+
34
+ const sendPrompt = async () => {
29
35
data .prompt = data .prompt .trim ()
30
36
if (! data .prompt ) return
37
+ const msgId = await createMessageAPI (data .prompt ) as any ;
38
+ console .log (" msgId: " , msgId )
31
39
const msgObj: Message = {
32
40
prompt: data .prompt ,
33
41
createTime: Date .now (),
34
42
uri: " " ,
35
- uuid: uuid . v1 ()
43
+ id: msgId
36
44
}
37
- console .log (msgObj .uuid );
38
-
45
+
39
46
data .messages .push (msgObj )
40
47
data .prompt = ' '
41
- createImagine (msgObj )
42
48
scrollToBottom ()
43
- setMessagesCache (data .messages )
44
-
45
- }
46
-
47
- const findOneAndUpdate = (uuid : string , msg : Partial <Message >) => {
48
- if (! uuid ) {
49
- return
50
- }
51
- const index = data .messages .findIndex (item => item .uuid === uuid )
52
- if (index === - 1 ) {
53
- return
54
- }
55
- const target: Message = data .messages [index ]
56
- Object .keys (msg ).forEach ((key : string ) => {
57
- const value = msg [key as keyof Message ]
58
- target [key ] = value
59
- })
60
- }
61
-
62
- const createImagine = (msg : Message ) => {
63
- const { uuid } = msg
64
- if (! uuid ) return
65
- ImagineAPI (JSON .stringify ({ prompt: msg .prompt }), (resData ) => {
66
- findOneAndUpdate (uuid , {
67
- ... resData ,
68
- msgId: resData .id ,
69
- msgHash: resData .hash
70
- })
71
- if (resData && resData .progress === ' done' ) {
72
- findOneAndUpdate (uuid , {
73
- done: true ,
74
- msgId: resData .id ,
75
- msgHash: resData .hash
76
- })
77
- }
78
- })
79
- setMessagesCache (data .messages )
80
49
}
81
50
82
- const onUpscale = (msg : Message ) => {
51
+ const onUpscale = async (msg : Message ) => {
83
52
const { index, msgId, msgHash, prompt } = msg
84
53
console .log (' upscale: ' , msg )
85
54
if (! msgHash || ! msgId || ! index || ! prompt ) {
86
- return
55
+ return console . log ( ' upscale消息体不完整 ' )
87
56
}
88
-
89
- const id = uuid .v1 ()
90
- const newMsg: Message = {
91
- uuid: id ,
57
+
58
+ const newId = await upscaleMessageAPI ({
92
59
prompt ,
93
60
index ,
94
- createTime: Date .now (),
95
- generateText: ` 生成第 ${index } 张图片(Upscale) ` ,
61
+ msgHash ,
62
+ msgId
63
+ }) as any ;
64
+ console .log (" newId: " , newId );
65
+ const newMsg: Message = {
66
+ id: newId ,
67
+ prompt: data .prompt ,
68
+ index ,
69
+ status: MessageStatus .START ,
96
70
}
97
-
98
71
data .messages .push (newMsg )
99
- setMessagesCache (data .messages )
100
72
scrollToBottom ()
101
-
102
- UpscaleAPI ({
103
- index ,
104
- msgHash ,
105
- msgId ,
106
- prompt
107
- }, (resData ) => {
108
- findOneAndUpdate (id , {
109
- ... resData ,
110
- msgId: resData .id ,
111
- msgHash: resData .hash
112
- })
113
- if (resData && resData .progress === ' done' ) {
114
- findOneAndUpdate (id , {
115
- done: true ,
116
- msgId: resData .id ,
117
- msgHash: resData .hash
118
- })
119
- }
120
- setMessagesCache (data .messages )
121
- })
122
73
}
123
74
124
75
const scrollToBottom = () => {
@@ -131,19 +82,20 @@ const scrollToBottom = () => {
131
82
132
83
onMounted (() => {
133
84
scrollToBottom ()
85
+ getList ()
134
86
})
135
87
136
88
</script >
137
89
138
90
<template >
139
- <div class =" h-full py-4" >
140
- <div class =" relative h-full max-w-[980px] m-auto bg-gray-600 text-white px-10 py-4 rounded-xl " >
91
+ <div class =" h-full py-4 max-sm:py-0 " >
92
+ <div class =" relative h-full max-w-[980px] m-auto bg-gray-600 text-white px-10 py-4 rounded-lg sm:py-0 max-sm:py-2 max-sm:px-4 " >
141
93
<div id =" contentWrap" ref =" contentWrap" class =" h-full pb-[120px] overflow-auto m-auto" >
142
94
<div class =" border-b-2 border-purple-400" v-for =" (item, index) in data.messages" :key =" index" >
143
95
<MessageItem :message =" item" @on-upscale =" onUpscale" />
144
96
</div >
145
97
</div >
146
- <div class =" absolute left-10 right-10 bottom-6 flex-row items-center justify-between px-2 py-2 bg-gray-100 border-gray-400 rounded-[4px]" >
98
+ <div class =" absolute left-10 right-10 max-sm:left-2 max-sm:right-2 bottom-4 max-sm:bottom-2 flex-row items-center justify-between px-2 py-2 bg-gray-100 border-gray-400 rounded-[4px]" >
147
99
<!-- 快捷/帮助区域 -->
148
100
<div class =" flex w-full pb-1 text-sm" >
149
101
<p class =" underline text-orange-400 pr-1 cursor-pointer" >垫图</p >
0 commit comments