@@ -30,6 +30,9 @@ const redoTypeItems = ref([
3030// 当前操作记录
3131const currentHistory = ref <TransferHistory >()
3232
33+ // 已选中的数据
34+ const selected = ref <TransferHistory []>([])
35+
3336// 表头
3437const headers = [
3538 { title: ' 标题' , key: ' title' , sortable: false },
@@ -59,6 +62,15 @@ const itemsPerPage = ref(25)
5962// 当前页码
6063const 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// 获取订阅列表数据
6375async function fetchData({
6476 page ,
@@ -113,21 +125,30 @@ const TransferDict: { [key: string]: string } = {
113125
114126// 删除历史记录
115127async 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// 重新整理
152221async 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