mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-07 00:36:41 +08:00
add 洗版规则
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user