提交 c6a5b125 authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 d70ba4e0
import { fetchEventSource } from '@fortaine/fetch-event-source'
import { ElMessage } from 'element-plus'
export function useChat() {
const messages = ref([])
const isLoading = ref(false)
async function post(message) {
isLoading.value = true
await fetchEventSource('/api/lab/v1/experiment/qwen/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ model: 'qwen-long', messages: [message] }),
async onopen(response) {
if (response.ok) {
return response
} else {
throw response
}
},
onmessage(res) {
console.log(res.data)
try {
const message = JSON.parse(res.data)
if (message.error) {
ElMessage.error(message.error.message)
return
}
const id = message.id
const messageIndex = messages.value.findIndex((session) => session.id === id)
let content = message?.choices[0]?.delta.content || ''
content = content.replaceAll('\n', '<br/>')
if (messageIndex === -1) {
messages.value.push({ id, role: 'assistant', content })
} else {
messages.value[messageIndex].content = messages.value[messageIndex].content + content
}
isLoading.value = false
} catch (error) {
console.log(error)
isLoading.value = false
}
},
onerror(err) {
isLoading.value = false
throw err
},
})
}
return { messages, post, isLoading }
}
<script setup> <script setup>
import { useChat } from '@/composables/useChat'
import { getAttrList } from '../api' import { getAttrList } from '../api'
const form = inject('form') const form = inject('form')
const { post, messages } = useChat()
watch(
messages,
() => {
const lastMessage = messages.value[messages.value.length - 1]
if (lastMessage) {
form.shopping_guide_short_title = lastMessage.content
}
},
{ deep: true }
)
function handleAIGenerate() {
post({
role: 'user',
content: `请根据以下内容,给出1个用于抖音电商使用的推荐的“导购短标题”内容:${form.title}
要求:
1. 标题要简洁明了,能够吸引消费者的注意力。
2. 标题要突出${form.title}的特点和优势,如设计、材质、功能等。
3. 标题要具有吸引力,能够激发消费者的购买欲望。
4. 标题要简洁明了,不要过于冗长或复杂。
5. 输出结果以“推荐导购短标题:”开始`,
})
}
const attrs = reactive({ const attrs = reactive({
importance_attrs: { importance_attrs: {
items: [], items: [],
...@@ -28,6 +54,22 @@ function handleChange(value, item, attr) { ...@@ -28,6 +54,22 @@ function handleChange(value, item, attr) {
value: value, value: value,
} }
} }
const importanceTotal = computed(() => {
let total = 0
Object.values(form.live_commodity_attrs.importance_attrs).forEach((item) => {
if (item.value) total++
})
return total
})
const unimportanceTotal = computed(() => {
let total = 0
Object.values(form.live_commodity_attrs.unimportance_attrs).forEach((item) => {
if (item.value) total++
})
return total
})
</script> </script>
<template> <template>
...@@ -44,10 +86,12 @@ function handleChange(value, item, attr) { ...@@ -44,10 +86,12 @@ function handleChange(value, item, attr) {
size="large" size="large"
v-model="form.shopping_guide_short_title" v-model="form.shopping_guide_short_title"
style="flex: 1" /> style="flex: 1" />
<el-button type="primary" plain>一键智能推荐</el-button> <el-button type="primary" plain @click="handleAIGenerate">一键智能推荐</el-button>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item :label="`重要属性 0/${attrs.importance_attrs.total}`" prop="live_commodity_attrs.importance_attrs"> <el-form-item
:label="`重要属性 ${importanceTotal}/${attrs.importance_attrs.total}`"
prop="live_commodity_attrs.importance_attrs">
<div class="form-tips">错误填写属性,会引起商品下架,请认真准确填写。</div> <div class="form-tips">错误填写属性,会引起商品下架,请认真准确填写。</div>
<el-form-item <el-form-item
v-for="item in attrs.importance_attrs.items" v-for="item in attrs.importance_attrs.items"
...@@ -61,7 +105,9 @@ function handleChange(value, item, attr) { ...@@ -61,7 +105,9 @@ function handleChange(value, item, attr) {
@input="(value) => handleChange(value, item, 'importance_attrs')"></el-input> @input="(value) => handleChange(value, item, 'importance_attrs')"></el-input>
</el-form-item> </el-form-item>
</el-form-item> </el-form-item>
<el-form-item :label="`非重要属性 0/${attrs.unimportance_attrs.total}`" prop="live_commodity_attrs.unimportance"> <el-form-item
:label="`非重要属性 ${unimportanceTotal}/${attrs.unimportance_attrs.total}`"
prop="live_commodity_attrs.unimportance">
<el-form-item <el-form-item
v-for="item in attrs.unimportance_attrs.items" v-for="item in attrs.unimportance_attrs.items"
:key="item.id" :key="item.id"
......
...@@ -43,10 +43,10 @@ const form = inject('form') ...@@ -43,10 +43,10 @@ const form = inject('form')
<el-form-item label="参考价" prop="info.reference_price"> <el-form-item label="参考价" prop="info.reference_price">
<template #label> <template #label>
<span>参考价</span> <span>参考价</span>
<el-popover :width="200" trigger="hover" content="this is content, this is content, this is content"> <el-popover :width="200" trigger="hover" placement="right">
<img src="/live/product.png" style="width: 100%" /> <img src="/live/product.png" style="width: 100%" />
<template #reference> <template #reference>
<QuestionFilled style="width: 20px"></QuestionFilled> <QuestionFilled style="width: 20px; vertical-align: middle"></QuestionFilled>
</template> </template>
</el-popover> </el-popover>
</template> </template>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论