299 lines
9.2 KiB
Vue
299 lines
9.2 KiB
Vue
<template>
|
||
<div style="margin: 30px 30px 30px 0">
|
||
<n-form
|
||
ref="bookRef"
|
||
:model="reverseManageStore.selectBook"
|
||
:rules="rules"
|
||
label-placement="left"
|
||
label-width="auto"
|
||
require-mark-placement="right-hanging"
|
||
>
|
||
<n-form-item label="书名" path="name">
|
||
<n-input v-model:value="reverseManageStore.selectBook.name" placeholder="请输入书名" />
|
||
</n-form-item>
|
||
<n-form-item label="视频文件" path="oldVideoPath">
|
||
<n-input
|
||
disabled="true"
|
||
v-model:value="reverseManageStore.selectBook.oldVideoPath"
|
||
placeholder="请选择反推的视频文件"
|
||
clearable
|
||
>
|
||
<template #suffix>
|
||
<n-button @click="ClearInputData('oldVideoPath')" text style="font-size: 20px">
|
||
<n-icon>
|
||
<CloseSharp />
|
||
</n-icon>
|
||
</n-button>
|
||
</template>
|
||
</n-input>
|
||
<n-button type="info" @click="SelectMP4File('oldVideoPath')" style="margin-left: 10px"
|
||
>选择视频</n-button
|
||
>
|
||
</n-form-item>
|
||
<n-form-item label="小说类型" path="type">
|
||
<n-select
|
||
v-model:value="reverseManageStore.selectBook.type"
|
||
:disabled="reverseManageStore.selectBook.id != null"
|
||
:options="reverseManageStore.bookType"
|
||
style="width: 200px"
|
||
>
|
||
</n-select>
|
||
</n-form-item>
|
||
<n-form-item label="配音地址" path="audioPath">
|
||
<n-input
|
||
v-model:value="reverseManageStore.selectBook.audioPath"
|
||
disabled="true"
|
||
placeholder="没有选择的话则使用原视频的"
|
||
>
|
||
<template #suffix>
|
||
<n-button @click="ClearInputData('audioPath')" text style="font-size: 20px">
|
||
<n-icon>
|
||
<CloseSharp />
|
||
</n-icon>
|
||
</n-button> </template
|
||
></n-input>
|
||
<n-button type="info" @click="SelectMP4File('audioPath')" style="margin-left: 10px"
|
||
>选择配音</n-button
|
||
>
|
||
</n-form-item>
|
||
<n-form-item label="SRT地址" path="srtPath">
|
||
<n-input
|
||
v-model:value="reverseManageStore.selectBook.srtPath"
|
||
disabled="true"
|
||
placeholder="没有选择的话则使用原视频的"
|
||
>
|
||
<template #suffix>
|
||
<n-button @click="ClearInputData('srtPath')" text style="font-size: 20px">
|
||
<n-icon>
|
||
<CloseSharp />
|
||
</n-icon>
|
||
</n-button> </template
|
||
></n-input>
|
||
<n-button type="info" @click="SelectMP4File('srtPath')" style="margin-left: 10px"
|
||
>选择SRT</n-button
|
||
>
|
||
</n-form-item>
|
||
<n-form-item label="背景音乐" path="srtPath">
|
||
<n-select
|
||
v-model:value="reverseManageStore.selectBook.backgroundMusic"
|
||
:options="backgroundMusicOptions"
|
||
placeholder="请选择背景音乐"
|
||
>
|
||
</n-select>
|
||
</n-form-item>
|
||
<n-form-item label="小说项目文件夹" path="bookFolderPath">
|
||
<n-input
|
||
v-model:value="reverseManageStore.selectBook.bookFolderPath"
|
||
disabled="true"
|
||
placeholder="不用选择,添加小说自动生成"
|
||
>
|
||
</n-input>
|
||
<n-button type="info" @click="OpenFolder('bookFolderPath')" style="margin-left: 10px"
|
||
>打开</n-button
|
||
>
|
||
</n-form-item>
|
||
<n-form-item label="图片输出文件夹" path="imageFolder">
|
||
<n-input
|
||
v-model:value="reverseManageStore.selectBook.imageFolder"
|
||
disabled="true"
|
||
placeholder="不用选择,添加小说自动生成"
|
||
>
|
||
</n-input>
|
||
<n-button type="info" @click="OpenFolder('imageFolder')" style="margin-left: 10px"
|
||
>打开</n-button
|
||
>
|
||
</n-form-item>
|
||
<div style="margin-left: 10px; display: flex; justify-content: flex-end">
|
||
<n-button :loading="loading" type="success" @click="AddOrModifyBook">{{
|
||
type == 'add' ? '添加' : '保存'
|
||
}}</n-button>
|
||
</div>
|
||
</n-form>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import { ref, onMounted, defineComponent, onUnmounted, toRaw, watch } from 'vue'
|
||
import { useMessage, NButton, NForm, NFormItem, NInput, NSelect, NIcon } from 'naive-ui'
|
||
import { useReverseManageStore } from '../../../../../../stores/reverseManage.ts'
|
||
import { CloseSharp } from '@vicons/ionicons5'
|
||
import { cloneDeep } from 'lodash'
|
||
import { useSoftwareStore } from '../../../../../../stores/software.ts'
|
||
|
||
export default defineComponent({
|
||
components: {
|
||
NButton,
|
||
NForm,
|
||
NFormItem,
|
||
NInput,
|
||
NSelect,
|
||
NIcon,
|
||
CloseSharp
|
||
},
|
||
props: ['type'],
|
||
setup(props) {
|
||
let message = useMessage()
|
||
let reverseManageStore = useReverseManageStore()
|
||
let softwareStore = useSoftwareStore()
|
||
let bookRef = ref(null)
|
||
let loading = ref(false)
|
||
let backgroundMusicOptions = ref([])
|
||
// let data = ref(reverseManageStore.selectBook)
|
||
let type = ref(props.type ? props.type : 'add')
|
||
onMounted(async () => {
|
||
// 初始化小说类型
|
||
let res = await reverseManageStore.SetBookType()
|
||
if (res.code == 0) {
|
||
message.error(res.message)
|
||
return
|
||
}
|
||
|
||
// 获取初始化的背景音乐列表
|
||
await window.api.GetBackgroundMusicConfigList((value) => {
|
||
if (value.code == 0) {
|
||
message.error(value.message)
|
||
return
|
||
}
|
||
for (let i = 0; i < value.value.length; i++) {
|
||
const element = value.value[i]
|
||
let obj = {
|
||
label: element.name,
|
||
value: element.id
|
||
}
|
||
backgroundMusicOptions.value.push(obj)
|
||
}
|
||
})
|
||
})
|
||
|
||
/**
|
||
* 选择 MP4 视频文件
|
||
*/
|
||
async function SelectMP4File(propertyName) {
|
||
let ext = ['mp4']
|
||
if (propertyName == 'audioPath') {
|
||
ext = ['mp3', 'wav']
|
||
} else if (propertyName == 'srtPath') {
|
||
ext = ['srt']
|
||
}
|
||
// 选择MP4文件夹
|
||
await window.api.SelectFile(ext, (value) => {
|
||
debugger
|
||
if (value.code == 0) {
|
||
message.error(value.message)
|
||
return
|
||
}
|
||
if (value.value == null) {
|
||
message.error('没有选中的数据')
|
||
return
|
||
}
|
||
if (propertyName == 'oldVideoPath') {
|
||
reverseManageStore.selectBook.oldVideoPath = value.value
|
||
} else if (propertyName == 'audioPath') {
|
||
reverseManageStore.selectBook.audioPath = value.value
|
||
} else if (propertyName == 'srtPath') {
|
||
reverseManageStore.selectBook.srtPath = value.value
|
||
} else {
|
||
message.error('没有找到对应的属性')
|
||
}
|
||
})
|
||
}
|
||
|
||
let ruleObj = (errorMessage) => {
|
||
return [
|
||
{
|
||
required: true,
|
||
validator(rule, value) {
|
||
if (value == null || value == '') return new Error(errorMessage)
|
||
return true
|
||
},
|
||
trigger: ['input', 'blur', 'change']
|
||
}
|
||
]
|
||
}
|
||
let rules = {
|
||
name: ruleObj('书名必填'),
|
||
oldVideoPath: ruleObj('反推的视频文件地址必填'),
|
||
type: ruleObj('小说类型必填')
|
||
}
|
||
|
||
/**
|
||
* 添加或者是修改数据(通过ID判断)
|
||
*/
|
||
async function AddOrModifyBook(e) {
|
||
// 校验数据
|
||
e.preventDefault()
|
||
bookRef.value?.validate(async (errors) => {
|
||
if (errors) {
|
||
message.error('请检查必填字段')
|
||
return
|
||
}
|
||
debugger
|
||
loading.value = true
|
||
let res = await reverseManageStore.SaveSelectBook(cloneDeep(reverseManageStore.selectBook))
|
||
loading.value = false
|
||
// 判断当前的数据是不是有ID
|
||
if (res.code == 0) {
|
||
message.error(res.message)
|
||
return
|
||
}
|
||
message.success('添加/修改成功')
|
||
reverseManageStore.selectBook = reverseManageStore.selectBook
|
||
})
|
||
}
|
||
|
||
//清空MP4路劲信息
|
||
function ClearInputData(propertyName) {
|
||
if (propertyName == 'oldVideoPath') {
|
||
reverseManageStore.UpdateSelectBook({ oldVideoPath: null })
|
||
} else if (propertyName == 'audioPath') {
|
||
reverseManageStore.UpdateSelectBook({ audioPath: null })
|
||
} else if (propertyName == 'srtPath') {
|
||
reverseManageStore.UpdateSelectBook({ srtPath: null })
|
||
} else {
|
||
message.error('没有找到对应的属性')
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 打开指定的文件夹
|
||
* @param param
|
||
*/
|
||
async function OpenFolder(param) {
|
||
let res = null
|
||
debugger
|
||
if (param == 'imageFolder') {
|
||
res = await window.system.OpenFolder({
|
||
folderPath: reverseManageStore.selectBook.imageFolder,
|
||
baseProject: false
|
||
})
|
||
} else if (param == 'bookFolderPath') {
|
||
res = await window.system.OpenFolder({
|
||
folderPath: reverseManageStore.selectBook.bookFolderPath,
|
||
baseProject: false
|
||
})
|
||
} else {
|
||
message.error('未知的参数')
|
||
return
|
||
}
|
||
if (res.code == 0) {
|
||
message.error(res.message)
|
||
return
|
||
}
|
||
}
|
||
|
||
return {
|
||
reverseManageStore,
|
||
rules,
|
||
type,
|
||
ClearInputData,
|
||
SelectMP4File,
|
||
AddOrModifyBook,
|
||
bookRef,
|
||
softwareStore,
|
||
OpenFolder,
|
||
backgroundMusicOptions,loading
|
||
}
|
||
}
|
||
})
|
||
</script>
|