Skip to content

Commit 57c7d49

Browse files
author
Taois
committed
fix:解析页面功能
1 parent 6ee72e9 commit 57c7d49

File tree

1 file changed

+85
-6
lines changed

1 file changed

+85
-6
lines changed

dashboard/src/views/Parser.vue

Lines changed: 85 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,19 @@
4848
更多
4949
</a-button>
5050
<template #content>
51+
<a-doption value="enable-all">
52+
<template #icon>
53+
<icon-check />
54+
</template>
55+
一键启用
56+
</a-doption>
57+
<a-doption value="disable-all">
58+
<template #icon>
59+
<icon-close />
60+
</template>
61+
一键停用
62+
</a-doption>
63+
<a-divider style="margin: 4px 0;" />
5164
<a-doption value="load-config">
5265
<template #icon>
5366
<icon-link />
@@ -150,7 +163,7 @@
150163
<div class="parser-actions">
151164
<a-switch
152165
v-model="parser.enabled"
153-
@change="toggleParser(parser.id)"
166+
@update:model-value="(value) => handleSwitchChange(parser.id, value)"
154167
size="small"
155168
/>
156169
<a-button
@@ -195,8 +208,8 @@
195208
<div class="parser-details">
196209
<div class="parser-url">{{ parser.url }}</div>
197210
<div class="parser-meta">
198-
<a-tag :color="parser.type === '0' ? 'blue' : 'green'" size="small">
199-
{{ parser.type === '0' ? '嗅探' : 'Json' }}
211+
<a-tag :color="String(parser.type) === '0' ? 'blue' : 'green'" size="small">
212+
{{ String(parser.type) === '0' ? '嗅探' : 'Json' }}
200213
</a-tag>
201214
<span v-if="parser.ext && parser.ext.flag" class="parser-flags">
202215
支持: {{ parser.ext.flag.join(', ') }}
@@ -454,25 +467,85 @@ const filteredParsers = computed(() => {
454467
result = result.filter(parser => !parser.enabled)
455468
}
456469
457-
// 类型过滤
470+
// 类型过滤 - 处理数字和字符串类型的兼容性
458471
if (filterType.value) {
459-
result = result.filter(parser => parser.type === filterType.value)
472+
result = result.filter(parser => {
473+
// 将两个值都转换为字符串进行比较,确保兼容性
474+
return String(parser.type) === String(filterType.value)
475+
})
460476
}
461477
462478
return result
463479
})
464480
465481
// 监听过滤结果变化,更新拖拽数据
466482
watch(filteredParsers, (newFiltered) => {
467-
dragParsers.value = [...newFiltered]
483+
// 只在筛选条件变化时才完全重新创建数组
484+
// 避免在开关切换时重新创建,保持响应式绑定
485+
if (dragParsers.value.length !== newFiltered.length ||
486+
!dragParsers.value.every(item => newFiltered.some(filtered => filtered.id === item.id))) {
487+
dragParsers.value = [...newFiltered]
488+
} else {
489+
// 如果数组长度和ID都相同,只更新现有项的属性
490+
dragParsers.value.forEach((dragItem, index) => {
491+
const filteredItem = newFiltered.find(item => item.id === dragItem.id)
492+
if (filteredItem) {
493+
Object.assign(dragItem, filteredItem)
494+
}
495+
})
496+
}
468497
}, { immediate: true })
469498
499+
// 监听筛选条件变化,确保筛选功能正常工作
500+
watch([searchKeyword, filterStatus, filterType], () => {
501+
// 当筛选条件变化时,完全重新创建拖拽列表
502+
dragParsers.value = [...filteredParsers.value]
503+
}, { immediate: false })
504+
470505
// 方法
471506
const toggleParser = (id) => {
472507
parserStore.toggleParser(id)
473508
Message.success('解析器状态已更新')
474509
}
475510
511+
const handleSwitchChange = (id, value) => {
512+
// 直接更新store中的状态,不需要切换,因为v-model已经更新了本地状态
513+
const parser = parserStore.parsers.find(p => p.id === id)
514+
if (parser) {
515+
parser.enabled = value
516+
parserStore.saveToLocalStorage()
517+
Message.success('解析器状态已更新')
518+
}
519+
}
520+
521+
const enableAllParsers = () => {
522+
const count = parserStore.parsers.length
523+
if (count === 0) {
524+
Message.warning('没有可启用的解析器')
525+
return
526+
}
527+
528+
parserStore.parsers.forEach(parser => {
529+
parser.enabled = true
530+
})
531+
parserStore.saveToLocalStorage()
532+
Message.success(`已启用所有 ${count} 个解析器`)
533+
}
534+
535+
const disableAllParsers = () => {
536+
const count = parserStore.parsers.length
537+
if (count === 0) {
538+
Message.warning('没有可停用的解析器')
539+
return
540+
}
541+
542+
parserStore.parsers.forEach(parser => {
543+
parser.enabled = false
544+
})
545+
parserStore.saveToLocalStorage()
546+
Message.success(`已停用所有 ${count} 个解析器`)
547+
}
548+
476549
const editParser = (parser) => {
477550
editingParser.value = parser
478551
parserForm.value = {
@@ -672,6 +745,12 @@ const resetFromConfig = async () => {
672745
673746
const handleMoreAction = (value) => {
674747
switch (value) {
748+
case 'enable-all':
749+
enableAllParsers()
750+
break
751+
case 'disable-all':
752+
disableAllParsers()
753+
break
675754
case 'load-config':
676755
showConfigDialog.value = true
677756
break

0 commit comments

Comments
 (0)