mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-05 23:56:42 +08:00
feat 历史记录删除UI调整
This commit is contained in:
@@ -1,15 +1,11 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { useToast } from 'vue-toast-notification'
|
import { useToast } from 'vue-toast-notification'
|
||||||
import { useConfirm } from 'vuetify-use-dialog'
|
|
||||||
import { numberValidator, requiredValidator } from '@/@validators'
|
import { numberValidator, requiredValidator } from '@/@validators'
|
||||||
import api from '@/api'
|
import api from '@/api'
|
||||||
import type { TransferHistory } from '@/api/types'
|
import type { TransferHistory } from '@/api/types'
|
||||||
import TmdbSelectorCard from '@/components/cards/TmdbSelectorCard.vue'
|
import TmdbSelectorCard from '@/components/cards/TmdbSelectorCard.vue'
|
||||||
|
|
||||||
// 确认框
|
|
||||||
const createConfirm = useConfirm()
|
|
||||||
|
|
||||||
// 提示框
|
// 提示框
|
||||||
const $toast = useToast()
|
const $toast = useToast()
|
||||||
|
|
||||||
@@ -75,6 +71,12 @@ const progressValue = ref(0)
|
|||||||
// TMDB选择对话框
|
// TMDB选择对话框
|
||||||
const tmdbSelectorDialog = ref(false)
|
const tmdbSelectorDialog = ref(false)
|
||||||
|
|
||||||
|
// 删除确认对话框
|
||||||
|
const deleteConfirmDialog = ref(false)
|
||||||
|
|
||||||
|
// 确认框标题
|
||||||
|
const confirmTitle = ref('')
|
||||||
|
|
||||||
// 获取订阅列表数据
|
// 获取订阅列表数据
|
||||||
async function fetchData({
|
async function fetchData({
|
||||||
page,
|
page,
|
||||||
@@ -129,74 +131,50 @@ const TransferDict: { [key: string]: string } = {
|
|||||||
|
|
||||||
// 删除历史记录
|
// 删除历史记录
|
||||||
async function removeHistory(item: TransferHistory) {
|
async function removeHistory(item: TransferHistory) {
|
||||||
const isConfirmed = await createConfirm({
|
currentHistory.value = item
|
||||||
title: '确认',
|
confirmTitle.value = `确认删除 ${item.title} ?`
|
||||||
content: `同步删除 ${item.title} 对应的媒体库文件 ?`,
|
deleteConfirmDialog.value = true
|
||||||
confirmationText: '同步删除文件',
|
|
||||||
cancellationText: '仅删除历史记录',
|
|
||||||
dialogProps: {
|
|
||||||
maxWidth: '50rem',
|
|
||||||
},
|
|
||||||
confirmationButtonProps: {
|
|
||||||
color: 'error',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
if (isConfirmed === undefined)
|
|
||||||
return
|
|
||||||
|
|
||||||
// 执行删除
|
|
||||||
remove(item, isConfirmed || false)
|
|
||||||
// 清空选中项
|
|
||||||
selected.value = []
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 调用API删除记录
|
// 调用API删除记录
|
||||||
async function remove(item: TransferHistory, deleteFile: boolean) {
|
async function remove(item: TransferHistory, deleteSrc: boolean, deleteDest: boolean) {
|
||||||
try {
|
try {
|
||||||
// 调用删除API
|
// 调用删除API
|
||||||
const result: { [key: string]: any } = await api.delete(`history/transfer?delete_file=${deleteFile}`, {
|
const result: { [key: string]: any } = await api.delete(`history/transfer?deletesrc=${deleteSrc}&deletedest=${deleteDest}`, {
|
||||||
data: item,
|
data: item,
|
||||||
})
|
})
|
||||||
|
|
||||||
if (result.success) {
|
if (!result.success)
|
||||||
fetchData({
|
|
||||||
page: currentPage.value,
|
|
||||||
itemsPerPage: itemsPerPage.value,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$toast.error(`删除失败: ${result.msg}`)
|
$toast.error(`删除失败: ${result.msg}`)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
console.error(error)
|
console.error(error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 批量删除历史记录
|
// 删除单条记录
|
||||||
async function removeHistoryBatch() {
|
async function removeSingle(deleteSrc: boolean, deleteDest: boolean) {
|
||||||
if (selected.value.length === 0)
|
// 关闭弹窗
|
||||||
|
deleteConfirmDialog.value = false
|
||||||
|
if (!currentHistory.value)
|
||||||
return
|
return
|
||||||
// 确认
|
// 删除
|
||||||
const isConfirmed = await createConfirm({
|
await remove(currentHistory.value, deleteSrc, deleteDest)
|
||||||
title: '确认',
|
// 刷新
|
||||||
content: `同步删除 ${selected.value.length} 条记录对应的媒体库文件 ?`,
|
fetchData({
|
||||||
confirmationText: '同步删除文件',
|
page: currentPage.value,
|
||||||
cancellationText: '仅删除历史记录',
|
itemsPerPage: itemsPerPage.value,
|
||||||
dialogProps: {
|
|
||||||
maxWidth: '50rem',
|
|
||||||
},
|
|
||||||
confirmationButtonProps: {
|
|
||||||
color: 'error',
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
if (isConfirmed === undefined)
|
}
|
||||||
return
|
|
||||||
|
|
||||||
console.log(selected.value)
|
|
||||||
|
|
||||||
|
// 批量删除记录
|
||||||
|
async function removeBatch(deleteSrc: boolean, deleteDest: boolean) {
|
||||||
|
// 关闭弹窗
|
||||||
|
deleteConfirmDialog.value = false
|
||||||
// 总条数
|
// 总条数
|
||||||
const total = selected.value.length
|
const total = selected.value.length
|
||||||
|
if (total === 0)
|
||||||
|
return
|
||||||
// 已处理条数
|
// 已处理条数
|
||||||
let handled = 0
|
let handled = 0
|
||||||
// 显示进度条
|
// 显示进度条
|
||||||
@@ -205,7 +183,7 @@ async function removeHistoryBatch() {
|
|||||||
for (const item of selected.value) {
|
for (const item of selected.value) {
|
||||||
// 开始删除
|
// 开始删除
|
||||||
progressText.value = `正在删除 ${item.title} ${item.seasons}${item.episodes} ...`
|
progressText.value = `正在删除 ${item.title} ${item.seasons}${item.episodes} ...`
|
||||||
await remove(item, isConfirmed || false)
|
await remove(item, deleteSrc, deleteDest)
|
||||||
// 删除完成
|
// 删除完成
|
||||||
handled++
|
handled++
|
||||||
progressValue.value = handled / total * 100
|
progressValue.value = handled / total * 100
|
||||||
@@ -221,6 +199,23 @@ async function removeHistoryBatch() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 响应删除操作
|
||||||
|
async function deleteConfirmHandler(deleteSrc: boolean, deleteDest: boolean) {
|
||||||
|
if (currentHistory.value)
|
||||||
|
await removeSingle(deleteSrc, deleteDest)
|
||||||
|
else
|
||||||
|
await removeBatch(deleteSrc, deleteDest)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量删除历史记录
|
||||||
|
async function removeHistoryBatch() {
|
||||||
|
if (selected.value.length === 0)
|
||||||
|
return
|
||||||
|
currentHistory.value = undefined
|
||||||
|
confirmTitle.value = `确认删除 ${selected.value.length} 条记录 ?`
|
||||||
|
deleteConfirmDialog.value = true
|
||||||
|
}
|
||||||
|
|
||||||
// 重新整理
|
// 重新整理
|
||||||
async function rehandleHistory() {
|
async function rehandleHistory() {
|
||||||
try {
|
try {
|
||||||
@@ -280,7 +275,9 @@ const dropdownItems = ref([
|
|||||||
props: {
|
props: {
|
||||||
prependIcon: 'mdi-trash-can-outline',
|
prependIcon: 'mdi-trash-can-outline',
|
||||||
color: 'error',
|
color: 'error',
|
||||||
click: removeHistory,
|
click: (item: TransferHistory) => {
|
||||||
|
removeHistory(item)
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
@@ -472,6 +469,35 @@ const dropdownItems = ref([
|
|||||||
@close="tmdbSelectorDialog = false"
|
@close="tmdbSelectorDialog = false"
|
||||||
/>
|
/>
|
||||||
</vDialog>
|
</vDialog>
|
||||||
|
<!-- 底部弹窗 -->
|
||||||
|
<VBottomSheet v-model="deleteConfirmDialog" inset>
|
||||||
|
<VCard :title="confirmTitle" class="text-center">
|
||||||
|
<DialogCloseBtn @click="deleteConfirmDialog = false" />
|
||||||
|
<div class="d-flex flex-column flex-md-row justify-center mb-3">
|
||||||
|
<VBtn
|
||||||
|
color="info"
|
||||||
|
class="mb-2 mx-2"
|
||||||
|
@click="deleteConfirmHandler(false, false)"
|
||||||
|
>
|
||||||
|
仅删除历史记录
|
||||||
|
</VBtn>
|
||||||
|
<VBtn
|
||||||
|
color="warning"
|
||||||
|
class="mb-2 mx-2"
|
||||||
|
@click="deleteConfirmHandler(false, true)"
|
||||||
|
>
|
||||||
|
删除历史记录和媒体库文件
|
||||||
|
</VBtn>
|
||||||
|
<VBtn
|
||||||
|
color="error"
|
||||||
|
class="mb-2 mx-2"
|
||||||
|
@click="deleteConfirmHandler(true, true)"
|
||||||
|
>
|
||||||
|
删除历史记录、源文件和媒体库文件
|
||||||
|
</VBtn>
|
||||||
|
</div>
|
||||||
|
</VCard>
|
||||||
|
</VBottomSheet>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
|||||||
Reference in New Issue
Block a user