Skip to content

Commit 4dc1ad3

Browse files
committed
feat 历史记录批量操作
1 parent 9b405d9 commit 4dc1ad3

2 files changed

Lines changed: 114 additions & 16 deletions

File tree

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "moviepilot",
3-
"version": "1.0.10",
3+
"version": "1.1.0",
44
"private": true,
55
"scripts": {
66
"dev": "vite --host",
@@ -97,4 +97,4 @@
9797
"resolutions": {
9898
"postcss": "8"
9999
}
100-
}
100+
}

src/views/reorganize/TransferHistoryView.vue

Lines changed: 112 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ const redoTypeItems = ref([
3030
// 当前操作记录
3131
const currentHistory = ref<TransferHistory>()
3232
33+
// 已选中的数据
34+
const selected = ref<TransferHistory[]>([])
35+
3336
// 表头
3437
const headers = [
3538
{ title: '标题', key: 'title', sortable: false },
@@ -59,6 +62,15 @@ const itemsPerPage = ref(25)
5962
// 当前页码
6063
const currentPage = ref(1)
6164
65+
// 进度条
66+
const progressDialog = ref(false)
67+
68+
// 进度文本
69+
const progressText = ref('请稍候 ...')
70+
71+
// 进度值
72+
const progressValue = ref(0)
73+
6274
// 获取订阅列表数据
6375
async function fetchData({
6476
page,
@@ -113,21 +125,30 @@ const TransferDict: { [key: string]: string } = {
113125
114126
// 删除历史记录
115127
async function removeHistory(item: TransferHistory) {
116-
try {
117-
const isConfirmed = await createConfirm({
118-
title: '确认',
119-
content: `同步删除 ${item.title} 对应的媒体库文件 ?`,
120-
confirmationText: '同步删除文件',
121-
cancellationText: '仅删除历史记录',
122-
dialogProps: {
123-
maxWidth: 600,
124-
},
125-
})
126-
127-
let deleteFile = false
128-
if (isConfirmed)
129-
deleteFile = true
128+
const isConfirmed = await createConfirm({
129+
title: '确认',
130+
content: `同步删除 ${item.title} 对应的媒体库文件 ?`,
131+
confirmationText: '同步删除文件',
132+
cancellationText: '仅删除历史记录',
133+
dialogProps: {
134+
maxWidth: 600,
135+
},
136+
confirmationButtonProps: {
137+
color: 'error',
138+
},
139+
})
140+
if (isConfirmed === undefined)
141+
return
142+
143+
// 执行删除
144+
remove(item, isConfirmed || false)
145+
// 清空选中项
146+
selected.value = []
147+
}
130148
149+
// 调用API删除记录
150+
async function remove(item: TransferHistory, deleteFile: boolean) {
151+
try {
131152
// 调用删除API
132153
const result: { [key: string]: any } = await api.delete(`history/transfer?delete_file=${deleteFile}`, {
133154
data: item,
@@ -148,6 +169,54 @@ async function removeHistory(item: TransferHistory) {
148169
}
149170
}
150171
172+
// 批量删除历史记录
173+
async function removeHistoryBatch() {
174+
if (selected.value.length === 0)
175+
return
176+
// 确认
177+
const isConfirmed = await createConfirm({
178+
title: '确认',
179+
content: `同步删除 ${selected.value.length} 条记录对应的媒体库文件 ?`,
180+
confirmationText: '同步删除文件',
181+
cancellationText: '仅删除历史记录',
182+
dialogProps: {
183+
maxWidth: 600,
184+
},
185+
confirmationButtonProps: {
186+
color: 'error',
187+
},
188+
})
189+
if (isConfirmed === undefined)
190+
return
191+
192+
console.log(selected.value)
193+
194+
// 总条数
195+
const total = selected.value.length
196+
// 已处理条数
197+
let handled = 0
198+
// 显示进度条
199+
progressDialog.value = true
200+
// 循环调用removeHistory
201+
for (const item of selected.value) {
202+
// 开始删除
203+
progressText.value = `正在删除 ${item.title} ${item.seasons}${item.episodes} ...`
204+
await remove(item, isConfirmed || false)
205+
// 删除完成
206+
handled++
207+
progressValue.value = handled / total * 100
208+
}
209+
// 清空选中项
210+
selected.value = []
211+
// 隐藏进度条
212+
progressDialog.value = false
213+
// 重新获取数据
214+
fetchData({
215+
page: currentPage.value,
216+
itemsPerPage: itemsPerPage.value,
217+
})
218+
}
219+
151220
// 重新整理
152221
async function rehandleHistory() {
153222
try {
@@ -238,6 +307,7 @@ const dropdownItems = ref([
238307
</VCardTitle>
239308
</VCardItem>
240309
<VDataTableServer
310+
v-model="selected"
241311
v-model:items-per-page="itemsPerPage"
242312
:headers="headers"
243313
:items="dataList"
@@ -248,6 +318,7 @@ const dropdownItems = ref([
248318
item-value="id"
249319
return-object
250320
fixed-header
321+
show-select
251322
items-per-page-text="每页条数"
252323
page-text="{0}-{1} 共 {2} 条"
253324
@update:options="fetchData"
@@ -357,6 +428,33 @@ const dropdownItems = ref([
357428
</VCardActions>
358429
</VCard>
359430
</VDialog>
431+
<span v-if="selected.length > 0" class="fixed right-5 bottom-5">
432+
<VBtn
433+
icon="mdi-trash-can-outline"
434+
color="error"
435+
size="x-large"
436+
@click="removeHistoryBatch"
437+
/>
438+
</span>
439+
<!-- 进度框 -->
440+
<vDialog
441+
v-model="progressDialog"
442+
:scrim="false"
443+
width="400"
444+
>
445+
<vCard
446+
color="primary"
447+
>
448+
<vCardText class="text-center">
449+
{{ progressText }}
450+
<vProgressLinear
451+
color="white"
452+
class="mb-0 mt-1"
453+
:model-value="progressValue"
454+
/>
455+
</vCardText>
456+
</vCard>
457+
</vDialog>
360458
</template>
361459

362460
<style lang="scss">

0 commit comments

Comments
 (0)