feat 历史记录删除UI调整

This commit is contained in:
jxxghp
2023-09-21 20:01:25 +08:00
parent cc071c0911
commit 41471b9fd6
+80 -54
View File
@@ -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">