modify FilterRuleGroupCard.vue

This commit is contained in:
Ricca
2024-11-15 01:33:10 +08:00
parent a0ebb42e1e
commit 6a3e383f30
+23 -39
View File
@@ -48,10 +48,10 @@ const groupInfoDialog = ref(false)
// 规则详情 // 规则详情
const groupInfo = ref<FilterRuleGroup>({ const groupInfo = ref<FilterRuleGroup>({
name: props.group?.name, name: props.group?.name ?? '',
rule_string: props.group?.rule_string, rule_string: props.group?.rule_string ?? '',
media_type: props.group?.media_type, media_type: props.group?.media_type ?? '',
category: props.group?.category, category: props.group?.category ?? '',
}) })
// 媒体类型字典 // 媒体类型字典
@@ -64,9 +64,10 @@ const mediaTypeItems = [
// 根据选中的媒体类型,获取对应的媒体类别 // 根据选中的媒体类型,获取对应的媒体类别
const getCategories = computed(() => { const getCategories = computed(() => {
const default_value = [{ title: '全部', value: '' }] const default_value = [{ title: '全部', value: '' }]
if (!props.categories || !groupInfo.value.media_type || !props.categories[groupInfo.value.media_type ?? '']) if (!props.categories || !groupInfo.value.media_type || !props.categories[groupInfo.value.media_type]) {
return default_value return default_value
return default_value.concat(props.categories[groupInfo.value.media_type ?? '']) }
return default_value.concat(props.categories[groupInfo.value.media_type] || [])
}) })
// 规则组规则卡片列表 // 规则组规则卡片列表
@@ -81,7 +82,7 @@ const importCodeString = ref('')
// 更新规则卡片的值 // 更新规则卡片的值
function updateFilterCardValue(pri: string, rules: string[]) { function updateFilterCardValue(pri: string, rules: string[]) {
const card = filterRuleCards.value.find(card => card.pri === pri) const card = filterRuleCards.value.find(card => card.pri === pri)
if (card) card.rules = rules if (card && Array.isArray(rules)) card.rules = rules
} }
// 移除卡片 // 移除卡片
@@ -96,16 +97,13 @@ function filterCardClose(pri: string) {
// 分享规则 // 分享规则
function shareRules() { function shareRules() {
// 有值才处理
if (filterRuleCards.value.length === 0) return if (filterRuleCards.value.length === 0) return
// 将卡片规则接装为字符串
const value = filterRuleCards.value const value = filterRuleCards.value
.filter(card => card.rules.length > 0) .filter(card => Array.isArray(card.rules) && card.rules.length > 0)
.map(card => card.rules.join('&')) .map(card => card.rules.join('&'))
.join('>') .join('>')
// 复制到剪贴板
try { try {
copyToClipboard(value) copyToClipboard(value)
$toast.success('优先级规则已复制到剪贴板') $toast.success('优先级规则已复制到剪贴板')
@@ -123,71 +121,57 @@ async function importRules() {
// 监听导入代码变化 // 监听导入代码变化
watchEffect(() => { watchEffect(() => {
if (!importCodeString.value) return if (!importCodeString.value) return
// 导入代码需要以空格开头和结束,没有则拼接
if (!importCodeString.value.startsWith(' ')) importCodeString.value = ` ${importCodeString.value}` if (!importCodeString.value.startsWith(' ')) importCodeString.value = ` ${importCodeString.value}`
if (!importCodeString.value.endsWith(' ')) importCodeString.value = `${importCodeString.value} ` if (!importCodeString.value.endsWith(' ')) importCodeString.value = `${importCodeString.value} `
// 将导入的代码转换为规则卡片
const groups = importCodeString.value.split('>') const groups = importCodeString.value.split('>')
filterRuleCards.value = groups.map((group: string, index: number) => { filterRuleCards.value = groups.map((group: string, index: number) => ({
return { pri: (index + 1).toString(),
pri: (index + 1).toString(), rules: group.split('&').filter(rule => rule),
rules: group.split('&'), }))
}
})
}) })
// 增加卡片 // 增加卡片
function addFilterCard() { function addFilterCard() {
// 优先级
const pri = (filterRuleCards.value.length + 1).toString() const pri = (filterRuleCards.value.length + 1).toString()
// 新卡片
const newCard: FilterCard = { pri, rules: [] } const newCard: FilterCard = { pri, rules: [] }
// 添加到列表
filterRuleCards.value.push(newCard) filterRuleCards.value.push(newCard)
} }
// 根据列表的拖动顺序更新优先级 // 根据列表的拖动顺序更新优先级
function dragOrderEnd() { function dragOrderEnd() {
filterRuleCards.value.map((card, index) => { filterRuleCards.value.forEach((card, index) => {
card.pri = (index + 1).toString() card.pri = (index + 1).toString()
return card
}) })
} }
// 打开详情弹窗 // 打开详情弹窗
function opengroupInfoDialog() { function opengroupInfoDialog() {
// 深复制
groupInfo.value = cloneDeep(props.group) groupInfo.value = cloneDeep(props.group)
if (props.group.rule_string) { if (props.group.rule_string) {
filterRuleCards.value = props.group.rule_string.split('>').map((group: string, index: number) => { filterRuleCards.value = props.group.rule_string.split('>').map((group: string, index: number) => ({
return { pri: (index + 1).toString(),
pri: (index + 1).toString(), rules: group.split('&').filter(rule => rule),
rules: group.split('&'), }))
}
})
} }
groupInfoDialog.value = true groupInfoDialog.value = true
} }
// 保存详情数据 // 保存详情数据
function saveGroupInfo() { function saveGroupInfo() {
// 为空 if (!groupInfo.value.name.trim()) {
if (!groupInfo.value.name) {
$toast.error('规则组名称不能为空') $toast.error('规则组名称不能为空')
return return
} }
// 重名判断
if (props.groups.some(item => item.name === groupInfo.value.name && item !== props.group)) { if (props.groups.some(item => item.name === groupInfo.value.name && item !== props.group)) {
$toast.error(`规则组名称【${groupInfo.value.name}】已存在,请替换`) $toast.error(`规则组名称【${groupInfo.value.name}】已存在,请替换`)
return return
} }
// 保存
groupInfoDialog.value = false groupInfoDialog.value = false
// 更新到 groupInfo的rule_string
groupInfo.value.rule_string = filterRuleCards.value groupInfo.value.rule_string = filterRuleCards.value
.filter(card => card.rules.length > 0) .filter(card => Array.isArray(card.rules) && card.rules.length > 0)
.map(card => card.rules.join('&')) .map(card => card.rules.join('&'))
.join('>') .join('>')
emit('change', groupInfo.value, props.group.name) emit('change', groupInfo.value, props.group.name)