add 洗版规则

This commit is contained in:
jxxghp
2023-07-25 15:47:05 +08:00
parent ad4577f86b
commit 6b11fd50ab
+72 -20
View File
@@ -31,16 +31,20 @@ const TorrentPriorityItems = [
// 规则卡片列表 // 规则卡片列表
const filterCards = ref<FilterCard[]>([]) const filterCards = ref<FilterCard[]>([])
// 洗版规则卡片列表
const filterCards2 = ref<FilterCard[]>([])
// 查询已设置过滤规则 // 查询已设置过滤规则
async function queryCustomFilters() { async function queryCustomFilters(ruleType: string) {
try { try {
const result: { [key: string]: any } = await api.get('system/setting/FilterRules') const result: { [key: string]: any } = await api.get(`system/setting/${ruleType}`)
if (result.success) { if (result.success) {
// 保存的是个字符串,需要分割成数组 // 保存的是个字符串,需要分割成数组
const groups = result.data?.value.split('>') const groups = result.data?.value.split('>')
// 生成规则卡片 // 生成规则卡片
filterCards.value = groups?.map((group: string, index: number) => { const cards = ruleType === 'FilterRules' ? filterCards : filterCards2
cards.value = groups?.map((group: string, index: number) => {
return { return {
pri: (index + 1).toString(), pri: (index + 1).toString(),
rules: group.split('&'), rules: group.split('&'),
@@ -68,29 +72,32 @@ async function queryTorrentPriority() {
} }
} }
// 保存用户设置的识别词 // 保存用户设置的规则
async function saveCustomFilters() { async function saveCustomFilters(ruleType: string) {
try { try {
// 有值才处理 // 有值才处理
if (filterCards.value.length === 0) if (filterCards.value.length === 0)
return return
// 将卡片规则接装为字符串 // 将卡片规则接装为字符串
const value = filterCards.value const cards = ruleType === 'FilterRules' ? filterCards : filterCards2
const value = cards.value
.filter(card => card.rules.length > 0) .filter(card => card.rules.length > 0)
.map(card => card.rules.join('&')) .map(card => card.rules.join('&'))
.join('>') .join('>')
// 保存 // 保存
const result: { [key: string]: any } = await api.post( const result: { [key: string]: any } = await api.post(
'system/setting/FilterRules', `system/setting/${ruleType}`,
value, value,
) )
const msg = ruleType === 'FilterRules' ? '过滤规则' : '洗版规则'
if (result.success) if (result.success)
$toast.success('过滤规则保存成功') $toast.success(`${msg}保存成功`)
else else
$toast.error('过滤规则保存失败!') $toast.error(`${msg}保存失败!`)
} }
catch (error) { catch (error) {
console.log(error) console.log(error)
@@ -123,13 +130,21 @@ function updateFilterCardValue(pri: string, rules: string[]) {
card.rules = rules card.rules = rules
} }
// 更新洗版规则卡片的值
function updateFilterCardValue2(pri: string, rules: string[]) {
const card = filterCards2.value.find(card => card.pri === pri)
if (card)
card.rules = rules
}
// 移除卡片 // 移除卡片
function filterCardClose(pri: string) { function filterCardClose(ruleType: string, pri: string) {
// 将卡片从列表中删除,并更新剩余卡片的序号 // 将卡片从列表中删除,并更新剩余卡片的序号
const index = filterCards.value.findIndex(card => card.pri === pri) const cards = ruleType === 'FilterRules' ? filterCards : filterCards2
const index = cards.value.findIndex(card => card.pri === pri)
if (index !== -1) { if (index !== -1) {
// 创建新的数组,然后使用 splice 方法来删除元素 // 创建新的数组,然后使用 splice 方法来删除元素
const updatedCards = [...filterCards.value] const updatedCards = [...cards.value]
updatedCards.splice(index, 1) updatedCards.splice(index, 1)
@@ -139,25 +154,27 @@ function filterCardClose(pri: string) {
}) })
// 更新 filterCards.value // 更新 filterCards.value
filterCards.value = updatedCards cards.value = updatedCards
} }
} }
// 增加卡片 // 增加卡片
function addFilterCard() { function addFilterCard(ruleType: string) {
const cards = ruleType === 'FilterRules' ? filterCards : filterCards2
// 优先级 // 优先级
const pri = (filterCards.value.length + 1).toString() const pri = (cards.value.length + 1).toString()
// 新卡片 // 新卡片
const newCard: FilterCard = { pri, rules: [], visible: true } const newCard: FilterCard = { pri, rules: [], visible: true }
// 添加到列表 // 添加到列表
filterCards.value.push(newCard) cards.value.push(newCard)
} }
onMounted(() => { onMounted(() => {
queryTorrentPriority() queryTorrentPriority()
queryCustomFilters() queryCustomFilters('FilterRules')
queryCustomFilters('FilterRules2')
}) })
</script> </script>
@@ -175,7 +192,7 @@ onMounted(() => {
:rules="card.rules" :rules="card.rules"
:visible="card.visible" :visible="card.visible"
@changed="updateFilterCardValue" @changed="updateFilterCardValue"
@close="filterCardClose(card.pri)" @close="filterCardClose('FilterRules', card.pri)"
/> />
</div> </div>
</VCardItem> </VCardItem>
@@ -183,14 +200,49 @@ onMounted(() => {
<VBtn <VBtn
type="submit" type="submit"
class="me-2" class="me-2"
@click="saveCustomFilters" @click="saveCustomFilters('FilterRules')"
> >
保存 保存
</VBtn> </VBtn>
<VBtn <VBtn
color="success" color="success"
variant="tonal" variant="tonal"
@click="addFilterCard" @click="addFilterCard('FilterRules')"
>
<VIcon icon="mdi-plus" />
<span class="d-none d-sm-block">增加规则</span>
</VBtn>
</VCardItem>
</VCard>
</VCol>
<VCol cols="12">
<VCard title="洗版规则">
<VCardSubtitle> 设置在订阅洗版时使用的过滤规则匹配优先级1时洗版完成 </VCardSubtitle>
<VCardItem>
<div class="grid gap-3 grid-filterrule-card">
<FilterRuleCard
v-for="(card, index) in filterCards2"
:key="index"
:pri="card.pri"
:rules="card.rules"
:visible="card.visible"
@changed="updateFilterCardValue2"
@close="filterCardClose('FilterRules2', card.pri)"
/>
</div>
</VCardItem>
<VCardItem>
<VBtn
type="submit"
class="me-2"
@click="saveCustomFilters('FilterRules2')"
>
保存
</VBtn>
<VBtn
color="success"
variant="tonal"
@click="addFilterCard('FilterRules2')"
> >
<VIcon icon="mdi-plus" /> <VIcon icon="mdi-plus" />
<span class="d-none d-sm-block">增加规则</span> <span class="d-none d-sm-block">增加规则</span>