mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-05-11 18:10:49 +08:00
119 lines
2.7 KiB
Vue
119 lines
2.7 KiB
Vue
<script setup lang="ts">
|
|
import { reactive, ref } from 'vue'
|
|
import { requiredValidator } from '@/@validators'
|
|
import api from '@/api'
|
|
import type { Context } from '@/api/types'
|
|
import MediaInfoCard from '@/components/cards/MediaInfoCard.vue'
|
|
|
|
// 识别结果
|
|
const nameTestResult = ref<Context>()
|
|
|
|
// 名称识别表单
|
|
const nameTestForm = reactive({
|
|
title: '',
|
|
subtitle: '',
|
|
})
|
|
|
|
// 识别按钮状态
|
|
const nameTestLoading = ref(false)
|
|
|
|
// 识别按钮文本
|
|
const nameTestText = ref('识别')
|
|
|
|
// 是否显示结果
|
|
const showResult = ref(false)
|
|
|
|
// 调用API识别
|
|
async function nameTest() {
|
|
if (!nameTestForm.title)
|
|
return
|
|
|
|
try {
|
|
nameTestLoading.value = true
|
|
nameTestText.value = '识别中...'
|
|
showResult.value = false
|
|
nameTestResult.value = await api.get('media/recognize', {
|
|
params: {
|
|
title: nameTestForm.title,
|
|
subtitle: nameTestForm.subtitle,
|
|
},
|
|
})
|
|
nameTestLoading.value = false
|
|
nameTestText.value = '重新识别'
|
|
showResult.value = true
|
|
}
|
|
catch (error) {
|
|
console.error(error)
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<VForm @submit.prevent="() => {}">
|
|
<VRow class="pt-2">
|
|
<VCol cols="12">
|
|
<VTextField
|
|
v-model="nameTestForm.title"
|
|
label="标题"
|
|
:rules="[requiredValidator]"
|
|
/>
|
|
</VCol>
|
|
<VCol cols="12">
|
|
<VTextarea
|
|
v-model="nameTestForm.subtitle"
|
|
label="副标题"
|
|
rows="2"
|
|
auto-grow
|
|
/>
|
|
</VCol>
|
|
</VRow>
|
|
<VRow>
|
|
<VCol
|
|
cols="12"
|
|
class="text-center"
|
|
>
|
|
<VBtn
|
|
:disabled="nameTestLoading"
|
|
@click="nameTest"
|
|
>
|
|
<template #prepend>
|
|
<VIcon icon="mdi-text-recognition" />
|
|
</template>
|
|
{{ nameTestText }}
|
|
</VBtn>
|
|
</VCol>
|
|
</VRow>
|
|
</VForm>
|
|
<VExpandTransition>
|
|
<div v-show="showResult">
|
|
<MediaInfoCard :context="nameTestResult" />
|
|
</div>
|
|
</VExpandTransition>
|
|
<VExpansionPanels
|
|
v-show="showResult && nameTestResult.meta_info.title !== nameTestResult.meta_info.org_string"
|
|
>
|
|
<VExpansionPanel>
|
|
<VExpansionPanelTitle>
|
|
<div class="text-h6">
|
|
识别词应用详情
|
|
</div>
|
|
</VExpansionPanelTitle>
|
|
<VExpansionPanelText>
|
|
<VChip
|
|
variant="elevated"
|
|
class="me-1 mb-1 text-white bg-orange-500"
|
|
>
|
|
{{ nameTestResult.meta_info.org_string }}
|
|
</VChip>
|
|
<VChip
|
|
v-for="(val, key) in nameTestResult.meta_info.apply_words" :key="key" :val="val"
|
|
variant="elevated"
|
|
class="me-1 mb-1 text-white bg-cyan-500"
|
|
>
|
|
{{ val }}
|
|
</VChip>
|
|
</VExpansionPanelText>
|
|
</VExpansionPanel>
|
|
</VExpansionPanels>
|
|
</template>
|