LaiTool/src/renderer/src/components/Book/Original/ODataTableGptPrompt.vue
2024-09-20 09:19:37 +08:00

164 lines
5.1 KiB
Vue

<template>
<div>
<n-dropdown trigger="hover" :options="translate_options" @select="TranslateSelect">
<n-button
size="tiny"
:color="softwareStore.SoftColor.BROWN_YELLOW"
style="margin-right: 5px"
@click="TranslateSelect('english')"
>翻译英文</n-button
>
</n-dropdown>
<n-button
size="tiny"
:color="softwareStore.SoftColor.BROWN_YELLOW"
style="margin-right: 5px"
@click="SinglePrompt"
>单句推理</n-button
>
<n-button
:color="softwareStore.SoftColor.BROWN_YELLOW"
style="margin-right: 5px"
size="tiny"
@click="NextGptPrompt"
>下推理</n-button
>
<n-input
size="tiny"
placeholder="请生成或推理提示词"
type="textarea"
v-model:value="row.gptPrompt"
@input="InputDebounced"
:autosize="{ minRows: 6, maxRows: 6 }"
/>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { NInput, NButton, NDropdown, useMessage } from 'naive-ui'
import { debounce } from 'lodash'
import { TranslateType } from '../../../../../define/enum/translate'
import { DEFINE_STRING } from '../../../../../define/define_string'
import { useSoftwareStore } from '../../../../../stores/software'
import { useReverseManageStore } from '../../../../../stores/reverseManage'
import { OperateBookType } from '../../../../../define/enum/bookEnum'
let props = defineProps({
initData: undefined,
index: undefined
})
let message = useMessage()
let row = ref(props.initData)
let softwareStore = useSoftwareStore()
let reverseManageStore = useReverseManageStore()
let translate_options = ref([
{ label: '翻译中文', key: 'chinese' },
{ label: '下翻译 英文 2 中文', key: 'down_english_chinese' },
{ label: '下翻译 中文 2 英文', key: 'down_chinese_english' }
])
let InputDebounced = debounce(handleInput, 500)
async function handleInput() {
console.log('开始修改')
let res = await window.db.UpdateBookTaskDetailData(row.value.id, {
gptPrompt: row.value.gptPrompt
})
if (res.code == 0) {
message.error(res.message)
}
}
// 单句翻译和下翻译
async function TranslateSelect(key) {
let translateData = []
if (key == 'english') {
let tempData = {
text: row.value.gptPrompt,
from: 'zh',
to: 'en',
type: TranslateType.GPT_PROMPT_TRANSLATE,
isSplit: false,
bookTaskDetailId: row.value.id,
responseMessgeName: DEFINE_STRING.TRANSLATE.GPT_PROMPT_TRANSLATE_RETRUN
}
translateData.push(tempData)
} else if (key == 'chinese') {
let tempData = {
text: row.value.gptPrompt,
from: 'en',
to: 'zh',
type: TranslateType.GPT_PROMPT_TRANSLATE,
isSplit: false,
bookTaskDetailId: row.value.id,
responseMessgeName: DEFINE_STRING.TRANSLATE.GPT_PROMPT_TRANSLATE_RETRUN
}
translateData.push(tempData)
} else if (key == 'down_english_chinese') {
// 讲下面的所有的进行翻译
for (let i = 0; i < reverseManageStore.selectBookTaskDetail.length; i++) {
const element = reverseManageStore.selectBookTaskDetail[i]
if (i >= props.index) {
translateData.push({
text: element.gptPrompt,
from: 'en',
to: 'zh',
type: TranslateType.GPT_PROMPT_TRANSLATE,
isSplit: false,
bookTaskDetailId: element.id,
responseMessgeName: DEFINE_STRING.TRANSLATE.GPT_PROMPT_TRANSLATE_RETRUN
})
}
}
} else if (key == 'down_chinese_english') {
for (let i = 0; i < reverseManageStore.selectBookTaskDetail.length; i++) {
const element = reverseManageStore.selectBookTaskDetail[i]
if (i >= props.index) {
translateData.push({
text: element.gptPrompt,
from: 'zh',
to: 'en',
type: TranslateType.GPT_PROMPT_TRANSLATE,
isSplit: false,
bookTaskDetailId: element.id,
responseMessgeName: DEFINE_STRING.TRANSLATE.GPT_PROMPT_TRANSLATE_RETRUN
})
}
}
} else {
message.error('未知的翻译类型')
}
if (translateData.length <= 0) {
message.error('没有需要翻译的数据')
return
}
// 开始提交翻译任务
softwareStore.spin.spinning = true
softwareStore.spin.tip = `翻译中 ... 0 / ${translateData.length}`
// 开始翻译
let res = await window.translate.TranslateNowReturn(translateData)
softwareStore.spin.spinning = false
window.api.showGlobalMessageDialog(res)
}
// 单句推理
async function SinglePrompt() {
softwareStore.spin.spinning = true
softwareStore.spin.tip = '即将开始执行推理提示词任务,请稍等。。。'
let res = await window.book.OriginalGetPrompt(row.value.id, OperateBookType.BOOKTASKDETAIL, true)
softwareStore.spin.spinning = false
window.api.showGlobalMessage(res)
}
// 下推理
async function NextGptPrompt() {
softwareStore.spin.spinning = true
softwareStore.spin.tip = '即将开始执行推理提示词任务,请稍等。。。'
let res = await window.book.OriginalGetPrompt(row.value.id, OperateBookType.UNDERBOOKTASK, true)
softwareStore.spin.spinning = false
window.api.showGlobalMessage(res)
}
</script>