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

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)
}
}

View File

@@ -3,6 +3,7 @@ import { useToast } from 'vue-toast-notification'
import api from '@/api'
import FilterRuleCard from '@/components/cards/FilterRuleCard.vue'
import type { Site } from '@/api/types'
import { copyToClipboard, getClipboardContent } from '@/@core/utils/navigator'
// 规则卡片类型
interface FilterCard {
@@ -240,33 +241,33 @@ function shareRules() {
.join('>')
// 复制到剪切板
navigator.clipboard.writeText(value)
.then(() => {
$toast.success('优先级规则已复制到剪切板')
})
.catch(() => {
$toast.error('优先级规则复制失败!')
})
try {
copyToClipboard(value)
$toast.success('优先级规则已复制到剪切板')
}
catch (error) {
$toast.error('优先级规则复制失败!')
}
}
// 导入规则
function importRules() {
// 从剪切板读取
navigator.clipboard.readText()
.then((value) => {
// 分割成数组
const groups = value.split('>')
// 生成规则卡片
filterCards.value = groups?.map((group: string, index: number) => {
return {
pri: (index + 1).toString(),
rules: group.split('&'),
}
})
})
.catch(() => {
$toast.error('从剪切版读取规则失败!')
async function importRules() {
try {
// 从剪切板读取
const value = await getClipboardContent()
// 分割成数组
const groups = value.split('>')
// 生成规则卡片
filterCards.value = groups?.map((group: string, index: number) => {
return {
pri: (index + 1).toString(),
rules: group.split('&'),
}
})
}
catch (error) {
$toast.error('从剪切板读取数据失败!')
}
}
onMounted(() => {

View File

@@ -3,6 +3,7 @@ import { useToast } from 'vue-toast-notification'
import api from '@/api'
import FilterRuleCard from '@/components/cards/FilterRuleCard.vue'
import type { Site } from '@/api/types'
import { copyToClipboard, getClipboardContent } from '@/@core/utils/navigator'
// 规则卡片类型
interface FilterCard {
@@ -262,38 +263,38 @@ function shareRules(ruleType: string) {
.join('>')
// 复制到剪切板
navigator.clipboard.writeText(value)
.then(() => {
$toast.success('优先级规则已复制到剪切板')
})
.catch(() => {
$toast.error('优先级规则复制失败!')
})
try {
copyToClipboard(value)
$toast.success('优先级规则已复制到剪切板')
}
catch (error) {
$toast.error('优先级规则复制失败!')
}
}
// 导入规则
function importRules(ruleType: string) {
async function importRules(ruleType: string) {
let filterCards: Ref<FilterCard[]>
if (ruleType === 'SubscribeFilterRules')
filterCards = subscribeFilterCards
else
filterCards = bestVersionFilterCards
try {
// 从剪切板读取
navigator.clipboard.readText()
.then((value) => {
// 分割成数组
const groups = value.split('>')
// 生成规则卡片
filterCards.value = groups?.map((group: string, index: number) => {
return {
pri: (index + 1).toString(),
rules: group.split('&'),
}
})
})
.catch(() => {
$toast.error('从剪切版读取规则失败!')
const value = await getClipboardContent()
// 分割成数组
const groups = value.split('>')
// 生成规则卡片
filterCards.value = groups?.map((group: string, index: number) => {
return {
pri: (index + 1).toString(),
rules: group.split('&'),
}
})
}
catch (error) {
$toast.error('从剪切板读取数据失败!')
}
}
onMounted(() => {