This commit is contained in:
jxxghp
2023-11-30 12:49:55 +08:00
parent a842eaba4e
commit 96bbf3d0f2
3 changed files with 66 additions and 45 deletions
+19
View File
@@ -0,0 +1,19 @@
// 请求和获取剪切板内容
export async function getClipboardContent() {
return await navigator.clipboard.readText()
}
// 将内容复制到剪切板,兼容非安全域场景
export async function copyToClipboard(content: string) {
if (navigator.clipboard && window.isSecureContext) {
await navigator.clipboard.writeText(content)
}
else {
const input = document.createElement('input')
input.value = content
document.body.appendChild(input)
input.select()
document.execCommand('copy')
document.body.removeChild(input)
}
}
+24 -23
View File
@@ -3,6 +3,7 @@ import { useToast } from 'vue-toast-notification'
import api from '@/api' import api from '@/api'
import FilterRuleCard from '@/components/cards/FilterRuleCard.vue' import FilterRuleCard from '@/components/cards/FilterRuleCard.vue'
import type { Site } from '@/api/types' import type { Site } from '@/api/types'
import { copyToClipboard, getClipboardContent } from '@/@core/utils/navigator'
// 规则卡片类型 // 规则卡片类型
interface FilterCard { interface FilterCard {
@@ -240,33 +241,33 @@ function shareRules() {
.join('>') .join('>')
// 复制到剪切板 // 复制到剪切板
navigator.clipboard.writeText(value) try {
.then(() => { copyToClipboard(value)
$toast.success('优先级规则已复制到剪切板') $toast.success('优先级规则已复制到剪切板')
}) }
.catch(() => { catch (error) {
$toast.error('优先级规则复制失败!') $toast.error('优先级规则复制失败!')
}) }
} }
// 导入规则 // 导入规则
function importRules() { async function importRules() {
// 从剪切板读取 try {
navigator.clipboard.readText() // 从剪切板读取
.then((value) => { const value = await getClipboardContent()
// 分割成数组 // 分割成数组
const groups = value.split('>') const groups = value.split('>')
// 生成规则卡片 // 生成规则卡片
filterCards.value = groups?.map((group: string, index: number) => { filterCards.value = groups?.map((group: string, index: number) => {
return { return {
pri: (index + 1).toString(), pri: (index + 1).toString(),
rules: group.split('&'), rules: group.split('&'),
} }
})
})
.catch(() => {
$toast.error('从剪切版读取规则失败!')
}) })
}
catch (error) {
$toast.error('从剪切板读取数据失败!')
}
} }
onMounted(() => { onMounted(() => {
+23 -22
View File
@@ -3,6 +3,7 @@ import { useToast } from 'vue-toast-notification'
import api from '@/api' import api from '@/api'
import FilterRuleCard from '@/components/cards/FilterRuleCard.vue' import FilterRuleCard from '@/components/cards/FilterRuleCard.vue'
import type { Site } from '@/api/types' import type { Site } from '@/api/types'
import { copyToClipboard, getClipboardContent } from '@/@core/utils/navigator'
// 规则卡片类型 // 规则卡片类型
interface FilterCard { interface FilterCard {
@@ -262,38 +263,38 @@ function shareRules(ruleType: string) {
.join('>') .join('>')
// 复制到剪切板 // 复制到剪切板
navigator.clipboard.writeText(value) try {
.then(() => { copyToClipboard(value)
$toast.success('优先级规则已复制到剪切板') $toast.success('优先级规则已复制到剪切板')
}) }
.catch(() => { catch (error) {
$toast.error('优先级规则复制失败!') $toast.error('优先级规则复制失败!')
}) }
} }
// 导入规则 // 导入规则
function importRules(ruleType: string) { async function importRules(ruleType: string) {
let filterCards: Ref<FilterCard[]> let filterCards: Ref<FilterCard[]>
if (ruleType === 'SubscribeFilterRules') if (ruleType === 'SubscribeFilterRules')
filterCards = subscribeFilterCards filterCards = subscribeFilterCards
else else
filterCards = bestVersionFilterCards filterCards = bestVersionFilterCards
try {
// 从剪切板读取 // 从剪切板读取
navigator.clipboard.readText() const value = await getClipboardContent()
.then((value) => { // 分割成数组
// 分割成数组 const groups = value.split('>')
const groups = value.split('>') // 生成规则卡片
// 生成规则卡片 filterCards.value = groups?.map((group: string, index: number) => {
filterCards.value = groups?.map((group: string, index: number) => { return {
return { pri: (index + 1).toString(),
pri: (index + 1).toString(), rules: group.split('&'),
rules: group.split('&'), }
}
})
})
.catch(() => {
$toast.error('从剪切版读取规则失败!')
}) })
}
catch (error) {
$toast.error('从剪切板读取数据失败!')
}
} }
onMounted(() => { onMounted(() => {