Skip to content

Commit ac46a37

Browse files
committed
【代码优化】AI:绘图 index.vue 代码梳理 50%(ImageDetail.vue)
1 parent 749e440 commit ac46a37

File tree

3 files changed

+37
-48
lines changed

3 files changed

+37
-48
lines changed

src/views/ai/chat/index/components/message/MessageList.vue

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div ref="messageContainer" class="h-100% overflow-y relative">
2+
<div ref="messageContainer" class="h-100% overflow-y-auto relative">
33
<div class="chat-list" v-for="(item, index) in list" :key="index">
44
<!-- 靠左 message:system、assistant 类型 -->
55
<div class="left-message message-item" v-if="item.type !== 'user'">
@@ -101,13 +101,12 @@ const emits = defineEmits(['onDeleteSuccess', 'onRefresh', 'onEdit']) // 定义
101101
102102
/** 滚动到底部 */
103103
const scrollToBottom = async (isIgnore?: boolean) => {
104-
// 注意要使用 nextTick 以免获取不到dom
105-
await nextTick(() => {
106-
if (isIgnore || !isScrolling.value) {
107-
messageContainer.value.scrollTop =
108-
messageContainer.value.scrollHeight - messageContainer.value.offsetHeight
109-
}
110-
})
104+
// 注意要使用 nextTick 以免获取不到 dom
105+
await nextTick()
106+
if (isIgnore || !isScrolling.value) {
107+
messageContainer.value.scrollTop =
108+
messageContainer.value.scrollHeight - messageContainer.value.offsetHeight
109+
}
111110
}
112111
113112
function handleScroll() {

src/views/ai/chat/index/index.vue

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,6 @@ const doSendMessage = async (content: string) => {
394394
} as ChatMessageVO)
395395
}
396396
397-
// TODO @fan:= = 不知道哪里被改动了。点击【发送】后,不会跳转到消息最底部了。。
398397
/** 真正执行【发送】消息操作 */
399398
const doSendMessageStream = async (userMessage: ChatMessageVO) => {
400399
// 创建 AbortController 实例,以便中止请求
@@ -421,9 +420,8 @@ const doSendMessageStream = async (userMessage: ChatMessageVO) => {
421420
createTime: new Date()
422421
} as ChatMessageVO)
423422
// 1.2 滚动到最下面
424-
nextTick(async () => {
425-
await scrollToBottom() // 底部
426-
})
423+
await nextTick()
424+
await scrollToBottom() // 底部
427425
// 1.3 开始滚动
428426
textRoll()
429427

src/views/ai/image/index/components/ImageDetail.vue

Lines changed: 28 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -7,52 +7,49 @@
77
>
88
<!-- 图片 -->
99
<div class="item">
10-
<!-- <div class="header">-->
11-
<!-- <div>图片</div>-->
12-
<!-- <div>-->
13-
<!-- </div>-->
14-
<!-- </div>-->
1510
<div class="body">
16-
<!-- TODO @fan: 要不,这里只展示图片???不用 ImageCard -->
17-
<ImageCard :image-detail="imageDetail" />
11+
<el-image
12+
class="image"
13+
:src="detail?.picUrl"
14+
:preview-src-list="[detail.picUrl]"
15+
preview-teleported
16+
/>
1817
</div>
1918
</div>
20-
<!-- 时间 -->
19+
<!-- 时间 -->
2120
<div class="item">
2221
<div class="tip">时间</div>
2322
<div class="body">
24-
<div>提交时间:{{ imageDetail.createTime }}</div>
25-
<div>生成时间:{{ imageDetail.finishTime }}</div>
23+
<div>提交时间:{{ detail.createTime }}</div>
24+
<div>生成时间:{{ detail.finishTime }}</div>
2625
</div>
2726
</div>
28-
<!-- 模型 -->
27+
<!-- 模型 -->
2928
<div class="item">
3029
<div class="tip">模型</div>
31-
<div class="body">
32-
{{ imageDetail.model }}({{ imageDetail.height }}x{{ imageDetail.width }})
33-
</div>
30+
<div class="body"> {{ detail.model }}({{ detail.height }}x{{ detail.width }}) </div>
3431
</div>
35-
<!-- 提示词 -->
32+
<!-- 提示词 -->
3633
<div class="item">
3734
<div class="tip">提示词</div>
3835
<div class="body">
39-
{{ imageDetail.prompt }}
36+
{{ detail.prompt }}
4037
</div>
4138
</div>
42-
<!-- 地址 -->
39+
<!-- 地址 -->
4340
<div class="item">
4441
<div class="tip">图片地址</div>
4542
<div class="body">
46-
{{ imageDetail.picUrl }}
43+
{{ detail.picUrl }}
4744
</div>
4845
</div>
4946
<!-- 风格 -->
50-
<div class="item" v-if="imageDetail?.options?.style">
47+
<div class="item" v-if="detail?.options?.style">
5148
<div class="tip">风格</div>
5249
<div class="body">
5350
<!-- TODO @fan:貌似需要把 imageStyleList 搞到 api/image/index.ts 枚举起来? -->
5451
<!-- TODO @fan:这里的展示,可能需要按照平台做区分 -->
55-
{{ imageDetail?.options?.style }}
52+
{{ detail?.options?.style }}
5653
</div>
5754
</div>
5855
</el-drawer>
@@ -63,7 +60,7 @@ import { ImageApi, ImageVO } from '@/api/ai/image'
6360
import ImageCard from './ImageCard.vue'
6461
6562
const showDrawer = ref<boolean>(false) // 是否显示
66-
const imageDetail = ref<ImageVO>({} as ImageVO) // 图片详细信息
63+
const detail = ref<ImageVO>({} as ImageVO) // 图片详细信息
6764
6865
const props = defineProps({
6966
show: {
@@ -77,35 +74,30 @@ const props = defineProps({
7774
}
7875
})
7976
80-
/** 抽屉 - close */
77+
/** 关闭抽屉 */
8178
const handleDrawerClose = async () => {
8279
emits('handleDrawerClose')
8380
}
8481
85-
/** 获取 - 图片 detail */
86-
const getImageDetail = async (id) => {
87-
// 获取图片详细
88-
imageDetail.value = await ImageApi.getImageMy(id)
89-
}
90-
91-
/** 任务 - detail */
92-
const handleTaskDetail = async () => {
93-
showDrawer.value = true
94-
}
95-
96-
// watch show
82+
/** 监听 drawer 是否打开 */
9783
const { show } = toRefs(props)
9884
watch(show, async (newValue, oldValue) => {
9985
showDrawer.value = newValue as boolean
10086
})
101-
// watch id
87+
88+
/** 获取图片详情 */
89+
const getImageDetail = async (id: number) => {
90+
detail.value = await ImageApi.getImageMy(id)
91+
}
92+
93+
/** 监听 id 变化,加载最新图片详情 */
10294
const { id } = toRefs(props)
10395
watch(id, async (newVal, oldVal) => {
10496
if (newVal) {
10597
await getImageDetail(newVal)
10698
}
10799
})
108-
//
100+
109101
const emits = defineEmits(['handleDrawerClose'])
110102
</script>
111103
<style scoped lang="scss">

0 commit comments

Comments
 (0)