Reformat codes

This commit is contained in:
Peng-YM 2021-04-15 17:00:07 +08:00
parent e764f33956
commit 69e4ddca60
33 changed files with 796 additions and 791 deletions

View File

@ -1,10 +1,10 @@
<template> <template>
<v-bottom-navigation <v-bottom-navigation
v-model="activeItem"
app app
color="primary"
fixed fixed
grow grow
color="primary"
v-model="activeItem"
> >
<v-btn :to="{path: '/'}" value="subscription"> <v-btn :to="{path: '/'}" value="subscription">
<span>订阅</span> <span>订阅</span>

View File

@ -1,7 +1,7 @@
<template> <template>
<v-card class="ml-1 mr-1 mb-1 mt-1"> <v-card class="ml-1 mr-1 mb-1 mt-1">
<v-card-title> <v-card-title>
<v-icon left color="primary">flag</v-icon> <v-icon color="primary" left>flag</v-icon>
国旗 国旗
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn icon @click="$emit('up', idx)"> <v-btn icon @click="$emit('up', idx)">
@ -15,7 +15,7 @@
</v-btn> </v-btn>
<v-dialog> <v-dialog>
<template #activator="{on}"> <template #activator="{on}">
<v-btn icon v-on="on"> <v-btn v-on="on" icon>
<v-icon>help</v-icon> <v-icon>help</v-icon>
</v-btn> </v-btn>
</template> </template>

View File

@ -2,21 +2,21 @@
<v-list> <v-list>
<v-list-item v-for="(proxy, idx) in proxies" :key="idx"> <v-list-item v-for="(proxy, idx) in proxies" :key="idx">
<v-list-item-content> <v-list-item-content>
<v-list-item-title v-text="proxy.name" class="wrap-text"></v-list-item-title> <v-list-item-title class="wrap-text" v-text="proxy.name"></v-list-item-title>
<v-chip-group> <v-chip-group>
<v-chip x-small color="primary" outlined> <v-chip color="primary" outlined x-small>
<v-icon left x-small>mdi-server</v-icon> <v-icon left x-small>mdi-server</v-icon>
{{ proxy.type.toUpperCase() }} {{ proxy.type.toUpperCase() }}
</v-chip> </v-chip>
<v-chip x-small v-if="proxy.udp" color="blue" outlined> <v-chip v-if="proxy.udp" color="blue" outlined x-small>
<v-icon left x-small>mdi-fire</v-icon> <v-icon left x-small>mdi-fire</v-icon>
UDP UDP
</v-chip> </v-chip>
<v-chip x-small v-if="proxy.tfo" color="success" outlined> <v-chip v-if="proxy.tfo" color="success" outlined x-small>
<v-icon left x-small>mdi-flash</v-icon> <v-icon left x-small>mdi-flash</v-icon>
TFO TFO
</v-chip> </v-chip>
<v-chip x-small v-if="proxy['skip-cert-verify']" color="error" outlined> <v-chip v-if="proxy['skip-cert-verify']" color="error" outlined x-small>
<v-icon left x-small>error</v-icon> <v-icon left x-small>error</v-icon>
SCERT SCERT
</v-chip> </v-chip>
@ -26,16 +26,16 @@
<v-row> <v-row>
<v-col> <v-col>
<v-btn <v-btn
v-if="proxy.type !== 'http'"
icon icon
@click="showQRCode(idx)" @click="showQRCode(idx)"
v-if="proxy.type !== 'http'"
> >
<v-icon small color="grey lighten-1">mdi-qrcode</v-icon> <v-icon color="grey lighten-1" small>mdi-qrcode</v-icon>
</v-btn> </v-btn>
</v-col> </v-col>
<v-col> <v-col>
<v-btn icon @click="showInfo(idx)"> <v-btn icon @click="showInfo(idx)">
<v-icon small color="grey lighten-1">mdi-information</v-icon> <v-icon color="grey lighten-1" small>mdi-information</v-icon>
</v-btn> </v-btn>
</v-col> </v-col>
</v-row> </v-row>

View File

@ -1,7 +1,7 @@
<template> <template>
<v-card class="ml-1 mr-1 mb-1 mt-1"> <v-card class="ml-1 mr-1 mb-1 mt-1">
<v-card-title> <v-card-title>
<v-icon left color="primary">code</v-icon> <v-icon color="primary" left>code</v-icon>
正则删除 正则删除
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn icon @click="$emit('up', idx)"> <v-btn icon @click="$emit('up', idx)">
@ -15,7 +15,7 @@
</v-btn> </v-btn>
<v-dialog> <v-dialog>
<template #activator="{on}"> <template #activator="{on}">
<v-btn icon v-on="on"> <v-btn v-on="on" icon>
<v-icon>help</v-icon> <v-icon>help</v-icon>
</v-btn> </v-btn>
</template> </template>
@ -38,23 +38,23 @@
column column
> >
<v-chip <v-chip
close
close-icon="mdi-delete"
v-for="(regex, idx) in regexps" v-for="(regex, idx) in regexps"
:key="idx" :key="idx"
@click:close="remove(idx)" close
close-icon="mdi-delete"
@click="edit(idx)" @click="edit(idx)"
@click:close="remove(idx)"
> >
{{ regex }} {{ regex }}
</v-chip> </v-chip>
</v-chip-group> </v-chip-group>
<v-text-field <v-text-field
placeholder="添加新正则表达式"
clearable
clear-icon="clear"
solo
v-model="form.regex" v-model="form.regex"
append-icon="mdi-send" append-icon="mdi-send"
clear-icon="clear"
clearable
placeholder="添加新正则表达式"
solo
@click:append="add(form.regex)" @click:append="add(form.regex)"
@keyup.enter="add(form.regex)" @keyup.enter="add(form.regex)"
/> />

View File

@ -1,7 +1,7 @@
<template> <template>
<v-card class="ml-1 mr-1 mb-1 mt-1"> <v-card class="ml-1 mr-1 mb-1 mt-1">
<v-card-title> <v-card-title>
<v-icon left color="primary">filter_list</v-icon> <v-icon color="primary" left>filter_list</v-icon>
正则过滤 正则过滤
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn icon @click="$emit('up', idx)"> <v-btn icon @click="$emit('up', idx)">
@ -15,7 +15,7 @@
</v-btn> </v-btn>
<v-dialog> <v-dialog>
<template #activator="{on}"> <template #activator="{on}">
<v-btn icon v-on="on"> <v-btn v-on="on" icon>
<v-icon>help</v-icon> <v-icon>help</v-icon>
</v-btn> </v-btn>
</template> </template>
@ -50,23 +50,23 @@
column column
> >
<v-chip <v-chip
close
close-icon="mdi-delete"
v-for="(regex, idx) in regexps" v-for="(regex, idx) in regexps"
:key="idx" :key="idx"
@click:close="remove(idx)" close
close-icon="mdi-delete"
@click="edit(idx)" @click="edit(idx)"
@click:close="remove(idx)"
> >
{{ regex }} {{ regex }}
</v-chip> </v-chip>
</v-chip-group> </v-chip-group>
<v-text-field <v-text-field
placeholder="添加新正则表达式"
clearable
clear-icon="clear"
solo
v-model="form.regex" v-model="form.regex"
append-icon="mdi-send" append-icon="mdi-send"
clear-icon="clear"
clearable
placeholder="添加新正则表达式"
solo
@click:append="add(form.regex)" @click:append="add(form.regex)"
@keyup.enter="add(form.regex)" @keyup.enter="add(form.regex)"
/> />

View File

@ -1,7 +1,7 @@
<template> <template>
<v-card class="ml-1 mr-1 mb-1 mt-1"> <v-card class="ml-1 mr-1 mb-1 mt-1">
<v-card-title> <v-card-title>
<v-icon left color="primary">filter_list</v-icon> <v-icon color="primary" left>filter_list</v-icon>
正则重命名 正则重命名
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn icon @click="$emit('up', idx)"> <v-btn icon @click="$emit('up', idx)">
@ -15,7 +15,7 @@
</v-btn> </v-btn>
<v-dialog> <v-dialog>
<template #activator="{on}"> <template #activator="{on}">
<v-btn icon v-on="on"> <v-btn v-on="on" icon>
<v-icon>help</v-icon> <v-icon>help</v-icon>
</v-btn> </v-btn>
</template> </template>
@ -35,12 +35,12 @@
column column
> >
<v-chip <v-chip
close
close-icon="mdi-delete"
v-for="(chip, idx) in chips" v-for="(chip, idx) in chips"
:key="idx" :key="idx"
@click:close="remove(idx)" close
close-icon="mdi-delete"
@click="edit(idx)" @click="edit(idx)"
@click:close="remove(idx)"
> >
{{ chip }} {{ chip }}
</v-chip> </v-chip>
@ -48,21 +48,21 @@
<v-row> <v-row>
<v-col> <v-col>
<v-text-field <v-text-field
placeholder="正则表达式"
clearable
clear-icon="clear"
solo
v-model="form.regex" v-model="form.regex"
clear-icon="clear"
clearable
placeholder="正则表达式"
solo
/> />
</v-col> </v-col>
<v-col> <v-col>
<v-text-field <v-text-field
placeholder="替换为"
solo
clearable
clear-icon="clear"
v-model="form.replace" v-model="form.replace"
append-icon="mdi-send" append-icon="mdi-send"
clear-icon="clear"
clearable
placeholder="替换为"
solo
@click:append="add" @click:append="add"
@keyup.enter="add" @keyup.enter="add"
/> />

View File

@ -1,7 +1,7 @@
<template> <template>
<v-card class="ml-1 mr-1 mb-1 mt-1"> <v-card class="ml-1 mr-1 mb-1 mt-1">
<v-card-title> <v-card-title>
<v-icon left color="primary">sort</v-icon> <v-icon color="primary" left>sort</v-icon>
正则排序 正则排序
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn icon @click="$emit('up', idx)"> <v-btn icon @click="$emit('up', idx)">
@ -15,7 +15,7 @@
</v-btn> </v-btn>
<v-dialog> <v-dialog>
<template #activator="{on}"> <template #activator="{on}">
<v-btn icon v-on="on"> <v-btn v-on="on" icon>
<v-icon>help</v-icon> <v-icon>help</v-icon>
</v-btn> </v-btn>
</template> </template>
@ -35,10 +35,10 @@
column column
> >
<v-chip <v-chip
close
close-icon="mdi-delete"
v-for="(item, idx) in items" v-for="(item, idx) in items"
:key="idx" :key="idx"
close
close-icon="mdi-delete"
@click="edit(idx)" @click="edit(idx)"
@click:close="remove(idx)" @click:close="remove(idx)"
> >
@ -46,12 +46,12 @@
</v-chip> </v-chip>
</v-chip-group> </v-chip-group>
<v-text-field <v-text-field
placeholder="添加新正则表达式"
clearable
clear-icon="clear"
solo
v-model="form.item" v-model="form.item"
append-icon="mdi-send" append-icon="mdi-send"
clear-icon="clear"
clearable
placeholder="添加新正则表达式"
solo
@click:append="add(form.item)" @click:append="add(form.item)"
@keyup.enter="add(form.item)" @keyup.enter="add(form.item)"
/> />

View File

@ -1,7 +1,7 @@
<template> <template>
<v-card class="ml-1 mr-1 mb-1 mt-1"> <v-card class="ml-1 mr-1 mb-1 mt-1">
<v-card-title> <v-card-title>
<v-icon left color="primary">flag</v-icon> <v-icon color="primary" left>flag</v-icon>
区域过滤 区域过滤
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn icon @click="$emit('up', idx)"> <v-btn icon @click="$emit('up', idx)">
@ -15,7 +15,7 @@
</v-btn> </v-btn>
<v-dialog> <v-dialog>
<template #activator="{on}"> <template #activator="{on}">
<v-btn icon v-on="on"> <v-btn v-on="on" icon>
<v-icon>help</v-icon> <v-icon>help</v-icon>
</v-btn> </v-btn>
</template> </template>
@ -30,13 +30,13 @@
</v-dialog> </v-dialog>
</v-card-title> </v-card-title>
<v-card-text> <v-card-text>
<v-chip-group multiple active-class="primary accent-4" v-model="selection" column> <v-chip-group v-model="selection" active-class="primary accent-4" column multiple>
<v-chip <v-chip
class="ma-2"
v-for="region in regions" v-for="region in regions"
label
:key="region.name" :key="region.name"
:value="region.value" :value="region.value"
class="ma-2"
label
> >
{{ region.name }} {{ region.name }}
</v-chip> </v-chip>

View File

@ -1,7 +1,7 @@
<template> <template>
<v-card class="ml-1 mr-1 mb-1 mt-1"> <v-card class="ml-1 mr-1 mb-1 mt-1">
<v-card-title> <v-card-title>
<v-icon left color="primary">code</v-icon> <v-icon color="primary" left>code</v-icon>
脚本过滤器 脚本过滤器
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn icon @click="$emit('up', idx)"> <v-btn icon @click="$emit('up', idx)">
@ -15,7 +15,7 @@
</v-btn> </v-btn>
<v-dialog> <v-dialog>
<template #activator="{on}"> <template #activator="{on}">
<v-btn icon v-on="on"> <v-btn v-on="on" icon>
<v-icon>help</v-icon> <v-icon>help</v-icon>
</v-btn> </v-btn>
</template> </template>
@ -42,12 +42,12 @@
</v-row> </v-row>
</v-radio-group> </v-radio-group>
<v-textarea <v-textarea
solo v-model="content"
clearable :label="hint"
auto-grow auto-grow
clear-icon="clear" clear-icon="clear"
:label="hint" clearable
v-model="content" solo
/> />
</v-card-text> </v-card-text>
</v-card> </v-card>

View File

@ -1,7 +1,7 @@
<template> <template>
<v-card class="ml-1 mr-1 mb-1 mt-1"> <v-card class="ml-1 mr-1 mb-1 mt-1">
<v-card-title> <v-card-title>
<v-icon left color="primary">code</v-icon> <v-icon color="primary" left>code</v-icon>
脚本操作 脚本操作
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn icon @click="$emit('up', idx)"> <v-btn icon @click="$emit('up', idx)">
@ -15,7 +15,7 @@
</v-btn> </v-btn>
<v-dialog> <v-dialog>
<template #activator="{on}"> <template #activator="{on}">
<v-btn icon v-on="on"> <v-btn v-on="on" icon>
<v-icon>help</v-icon> <v-icon>help</v-icon>
</v-btn> </v-btn>
</template> </template>
@ -42,12 +42,12 @@
</v-row> </v-row>
</v-radio-group> </v-radio-group>
<v-textarea <v-textarea
clearable
clear-icon="clear"
solo
auto-grow
:label="hint"
v-model="content" v-model="content"
:label="hint"
auto-grow
clear-icon="clear"
clearable
solo
/> />
</v-card-text> </v-card-text>
</v-card> </v-card>

View File

@ -1,7 +1,7 @@
<template> <template>
<v-card class="ml-1 mr-1 mb-1 mt-1"> <v-card class="ml-1 mr-1 mb-1 mt-1">
<v-card-title> <v-card-title>
<v-icon left color="primary">sort_by_alpha</v-icon> <v-icon color="primary" left>sort_by_alpha</v-icon>
节点排序 节点排序
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn icon @click="$emit('up', idx)"> <v-btn icon @click="$emit('up', idx)">
@ -15,7 +15,7 @@
</v-btn> </v-btn>
<v-dialog> <v-dialog>
<template #activator="{on}"> <template #activator="{on}">
<v-btn icon v-on="on"> <v-btn v-on="on" icon>
<v-icon>help</v-icon> <v-icon>help</v-icon>
</v-btn> </v-btn>
</template> </template>

View File

@ -2,11 +2,11 @@
<v-fab-transition> <v-fab-transition>
<v-speed-dial <v-speed-dial
v-model="opened" v-model="opened"
direction="top"
left
fab
absolute absolute
bottom bottom
direction="top"
fab
left
small small
transition="slide-y-reverse-transition" transition="slide-y-reverse-transition"
> >
@ -19,14 +19,14 @@
</v-btn> </v-btn>
</template> </template>
<v-btn <v-btn
fab
color="primary" color="primary"
fab
> >
<v-icon>mdi-plus</v-icon> <v-icon>mdi-plus</v-icon>
</v-btn> </v-btn>
<v-btn <v-btn
fab
color="primary" color="primary"
fab
> >
<v-icon>create_new_folder</v-icon> <v-icon>create_new_folder</v-icon>
</v-btn> </v-btn>
@ -41,8 +41,6 @@ export default {
opened: false, opened: false,
} }
}, },
computed: { computed: {}
}
} }
</script> </script>

View File

@ -1,9 +1,9 @@
<template> <template>
<div> <div>
<v-app-bar <v-app-bar
app :clipped="true"
fixed :mini-variant="false"
:mini-variant="false" :clipped="true" app fixed
> >
<v-toolbar-title><h3>{{ title }}</h3></v-toolbar-title> <v-toolbar-title><h3>{{ title }}</h3></v-toolbar-title>
</v-app-bar> </v-app-bar>
@ -19,8 +19,7 @@ export default {
} }
}, },
methods: { methods: {},
},
computed: { computed: {
title: function () { title: function () {

View File

@ -1,7 +1,7 @@
<template> <template>
<v-card class="ml-1 mr-1 mb-1 mt-1"> <v-card class="ml-1 mr-1 mb-1 mt-1">
<v-card-title> <v-card-title>
<v-icon left color="primary">cloud_circle</v-icon> <v-icon color="primary" left>cloud_circle</v-icon>
节点类型过滤 节点类型过滤
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn icon @click="$emit('up', idx)"> <v-btn icon @click="$emit('up', idx)">
@ -15,7 +15,7 @@
</v-btn> </v-btn>
<v-dialog> <v-dialog>
<template #activator="{on}"> <template #activator="{on}">
<v-btn icon v-on="on"> <v-btn v-on="on" icon>
<v-icon>help</v-icon> <v-icon>help</v-icon>
</v-btn> </v-btn>
</template> </template>
@ -30,13 +30,13 @@
</v-dialog> </v-dialog>
</v-card-title> </v-card-title>
<v-card-text> <v-card-text>
<v-chip-group multiple active-class="primary accent-4" v-model="selection" column> <v-chip-group v-model="selection" active-class="primary accent-4" column multiple>
<v-chip <v-chip
class="ma-2"
v-for="type in types" v-for="type in types"
label
:key="type.name" :key="type.name"
:value="type.value" :value="type.value"
class="ma-2"
label
> >
{{ type.name }} {{ type.name }}
</v-chip> </v-chip>

View File

@ -1,10 +1,10 @@
<template> <template>
<v-list-item <v-list-item
:active-class="`primary ${!isDark ? 'black' : 'white'}--text`"
:href="href" :href="href"
:rel="href && href !== '#' ? 'noopener' : undefined" :rel="href && href !== '#' ? 'noopener' : undefined"
:target="href && href !== '#' ? '_blank' : undefined" :target="href && href !== '#' ? '_blank' : undefined"
:to="item.to" :to="item.to"
:active-class="`primary ${!isDark ? 'black' : 'white'}--text`"
> >
<v-list-item-icon <v-list-item-icon
v-if="text" v-if="text"

View File

@ -1,10 +1,10 @@
<template> <template>
<v-list-group <v-list-group
:color="barColor !== 'rgba(255, 255, 255, 1), rgba(255, 255, 255, 0.7)' ? 'white' : 'grey darken-1'"
:group="group" :group="group"
:prepend-icon="item.icon" :prepend-icon="item.icon"
:sub-group="subGroup" :sub-group="subGroup"
append-icon="mdi-menu-down" append-icon="mdi-menu-down"
:color="barColor !== 'rgba(255, 255, 255, 1), rgba(255, 255, 255, 0.7)' ? 'white' : 'grey darken-1'"
> >
<template v-slot:activator> <template v-slot:activator>
<v-list-item-icon <v-list-item-icon

View File

@ -1,8 +1,8 @@
<template> <template>
<base-item-group <base-item-group
:item="item" :item="item"
text
sub-group sub-group
text
/> />
</template> </template>

View File

@ -7,9 +7,9 @@
<div class="d-flex grow flex-wrap"> <div class="d-flex grow flex-wrap">
<v-avatar <v-avatar
v-if="avatar" v-if="avatar"
size="128"
class="mx-auto v-card--material__avatar elevation-12" class="mx-auto v-card--material__avatar elevation-12"
color="grey" color="grey"
size="128"
> >
<v-img :src="avatar"/> <v-img :src="avatar"/>
</v-avatar> </v-avatar>
@ -63,8 +63,8 @@
<v-col <v-col
v-if="hoverReveal" v-if="hoverReveal"
cols="12"
class="text-center py-0 mt-n12" class="text-center py-0 mt-n12"
cols="12"
> >
<slot name="reveal-actions"/> <slot name="reveal-actions"/>
</v-col> </v-col>

View File

@ -1,8 +1,8 @@
<template> <template>
<base-material-card <base-material-card
class="v-card--material-chart"
v-bind="$attrs" v-bind="$attrs"
v-on="$listeners" v-on="$listeners"
class="v-card--material-chart"
> >
<template v-slot:heading> <template v-slot:heading>
<chartist <chartist

View File

@ -1,18 +1,18 @@
<template> <template>
<v-menu <v-menu
v-model="value" v-model="value"
v-bind="$attrs"
:transition="transition" :transition="transition"
offset-y offset-y
v-bind="$attrs"
> >
<template v-slot:activator="{ attrs, on }"> <template v-slot:activator="{ attrs, on }">
<v-btn <v-btn
v-bind="attrs"
v-on="on"
:color="color" :color="color"
default default
min-width="200" min-width="200"
rounded rounded
v-bind="attrs"
v-on="on"
> >
<slot/> <slot/>

View File

@ -1,12 +1,12 @@
<template> <template>
<v-snackbar <v-snackbar
:class="classes"
:value="value"
v-bind="{ v-bind="{
...$attrs, ...$attrs,
...$props, ...$props,
'color': 'transparent' 'color': 'transparent'
}" }"
:class="classes"
:value="value"
@change="$emit('change', $event)" @change="$emit('change', $event)"
> >
<base-material-alert <base-material-alert

View File

@ -1,9 +1,9 @@
<template> <template>
<base-material-card <base-material-card
:icon="icon"
class="v-card--material-stats"
v-bind="$attrs" v-bind="$attrs"
v-on="$listeners" v-on="$listeners"
:icon="icon"
class="v-card--material-stats"
> >
<template v-slot:after-heading> <template v-slot:after-heading>
<div class="ml-auto text-right"> <div class="ml-auto text-right">
@ -19,16 +19,16 @@
</template> </template>
<v-col <v-col
cols="12"
class="px-0" class="px-0"
cols="12"
> >
<v-divider/> <v-divider/>
</v-col> </v-col>
<v-icon <v-icon
:color="subIconColor" :color="subIconColor"
size="16"
class="ml-2 mr-1" class="ml-2 mr-1"
size="16"
> >
{{ subIcon }} {{ subIcon }}
</v-icon> </v-icon>

View File

@ -1,10 +1,10 @@
<template> <template>
<v-tabs <v-tabs
v-model="internalValue" v-model="internalValue"
v-bind="$attrs"
:active-class="`${color} ${$vuetify.theme.dark ? 'black' : 'white'}--text`" :active-class="`${color} ${$vuetify.theme.dark ? 'black' : 'white'}--text`"
class="v-tabs--pill" class="v-tabs--pill"
hide-slider hide-slider
v-bind="$attrs"
> >
<slot/> <slot/>

View File

@ -28,8 +28,8 @@
<v-tab <v-tab
v-for="(item, i) in items" v-for="(item, i) in items"
:key="i" :key="i"
:ripple="false"
:disabled="!availableSteps.includes(i)" :disabled="!availableSteps.includes(i)"
:ripple="false"
> >
{{ item }} {{ item }}
</v-tab> </v-tab>

View File

@ -13,10 +13,10 @@
Please checkout the Please checkout the
<a <a
:href="`https://vuetifyjs.com/${link}`" :href="`https://vuetifyjs.com/${link}`"
rel="noopener"
target="_blank"
class="secondary--text" class="secondary--text"
rel="noopener"
style="text-decoration:none;" style="text-decoration:none;"
target="_blank"
> >
full documentation full documentation
</a> </a>

View File

@ -5,8 +5,7 @@
<script> <script>
export default { export default {
name: "Dashboard", name: "Dashboard",
components: { components: {},
},
computed: { computed: {
pie() { pie() {
const total = 400; const total = 400;

View File

@ -2,30 +2,30 @@
<v-container> <v-container>
<v-card class="mb-4"> <v-card class="mb-4">
<v-subheader>订阅配置</v-subheader> <v-subheader>订阅配置</v-subheader>
<v-form class="pl-4 pr-4 pb-0" v-model="formState.basicValid"> <v-form v-model="formState.basicValid" class="pl-4 pr-4 pb-0">
<v-text-field <v-text-field
v-model="options.name" v-model="options.name"
class="mt-2"
:rules="validations.nameRules" :rules="validations.nameRules"
required class="mt-2"
clear-icon="clear"
clearable
label="订阅名称" label="订阅名称"
placeholder="填入订阅名称,名称需唯一" placeholder="填入订阅名称,名称需唯一"
clearable required
clear-icon="clear"
/> />
<!--For Subscription--> <!--For Subscription-->
<v-textarea <v-textarea
v-if="!isCollection" v-if="!isCollection"
v-model="options.url" v-model="options.url"
class="mt-2"
rows="2"
:rules="validations.urlRules" :rules="validations.urlRules"
required auto-grow
class="mt-2"
clear-icon="clear"
clearable
label="订阅链接" label="订阅链接"
placeholder="填入机场原始订阅链接" placeholder="填入机场原始订阅链接"
clearable required
auto-grow rows="2"
clear-icon="clear"
/> />
<!--For Collection--> <!--For Collection-->
<v-list <v-list
@ -36,28 +36,28 @@
<v-list-item v-for="sub in availableSubs" :key="sub.name"> <v-list-item v-for="sub in availableSubs" :key="sub.name">
<v-list-item-avatar> <v-list-item-avatar>
<v-icon v-if="!sub.icon" color="teal darken-1">mdi-cloud</v-icon> <v-icon v-if="!sub.icon" color="teal darken-1">mdi-cloud</v-icon>
<v-img :src="sub.icon" v-else :class="getIconClass(sub.icon)"/> <v-img v-else :class="getIconClass(sub.icon)" :src="sub.icon"/>
</v-list-item-avatar> </v-list-item-avatar>
<v-list-item-content> <v-list-item-content>
{{ sub.name }} {{ sub.name }}
</v-list-item-content> </v-list-item-content>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-checkbox <v-checkbox
:value="sub.name"
v-model="selected" v-model="selected"
:value="sub.name"
class="pr-1" class="pr-1"
/> />
</v-list-item> </v-list-item>
</v-list> </v-list>
<v-textarea <v-textarea
v-model="options.icon" v-model="options.icon"
auto-grow
class="mt-2" class="mt-2"
rows="2" clear-icon="clear"
clearable
label="图标链接" label="图标链接"
placeholder="填入想要展示的图标链接,可选。" placeholder="填入想要展示的图标链接,可选。"
clearable rows="2"
auto-grow
clear-icon="clear"
/> />
</v-form> </v-form>
<v-card-actions> <v-card-actions>
@ -65,9 +65,9 @@
<v-btn icon @click="save"> <v-btn icon @click="save">
<v-icon>save_alt</v-icon> <v-icon>save_alt</v-icon>
</v-btn> </v-btn>
<v-dialog max-width="400px" v-model="showShareDialog"> <v-dialog v-model="showShareDialog" max-width="400px">
<template #activator="{on}"> <template #activator="{on}">
<v-btn icon v-on="on"> <v-btn v-on="on" icon>
<v-icon>cloud_circle</v-icon> <v-icon>cloud_circle</v-icon>
</v-btn> </v-btn>
</template> </template>
@ -82,16 +82,16 @@
</v-card-title> </v-card-title>
<v-textarea <v-textarea
v-model="imported" v-model="imported"
solo :rules="validations.importRules"
clear-icon="clear"
clearable
label="粘贴配置以导入" label="粘贴配置以导入"
rows="5" rows="5"
clearable solo
clear-icon="clear"
:rules="validations.importRules"
/> />
<v-card-actions> <v-card-actions>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn text color="primary" @click="importConf">确认</v-btn> <v-btn color="primary" text @click="importConf">确认</v-btn>
<v-btn text @click="showShareDialog = false">取消</v-btn> <v-btn text @click="showShareDialog = false">取消</v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
@ -105,8 +105,8 @@
<v-item-group> <v-item-group>
<v-radio-group <v-radio-group
v-model="options.useless" v-model="options.useless"
dense
class="mt-0 mb-0" class="mt-0 mb-0"
dense
> >
过滤非法节点 过滤非法节点
<v-row> <v-row>
@ -122,8 +122,8 @@
<v-radio-group <v-radio-group
v-model="options.udp" v-model="options.udp"
dense
class="mt-0 mb-0" class="mt-0 mb-0"
dense
> >
UDP转发 UDP转发
<v-row> <v-row>
@ -141,8 +141,8 @@
<v-radio-group <v-radio-group
v-model="options['skip-cert-verify']" v-model="options['skip-cert-verify']"
dense
class="mt-0 mb-0" class="mt-0 mb-0"
dense
> >
跳过证书验证 跳过证书验证
<v-row> <v-row>
@ -159,8 +159,8 @@
</v-radio-group> </v-radio-group>
<v-radio-group <v-radio-group
v-model="options.tfo" v-model="options.tfo"
dense
class="mt-0 mb-0" class="mt-0 mb-0"
dense
> >
TCP Fast Open TCP Fast Open
<v-row> <v-row>
@ -178,13 +178,13 @@
</v-item-group> </v-item-group>
</v-form> </v-form>
</v-card> </v-card>
<v-card class="mb-4" id="processors"> <v-card id="processors" class="mb-4">
<v-subheader> <v-subheader>
节点操作 节点操作
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-dialog scrollable v-model="dialog"> <v-dialog v-model="dialog" scrollable>
<template #activator="{on}"> <template #activator="{on}">
<v-btn icon v-on="on"> <v-btn v-on="on" icon>
<v-icon color="primary">add_circle</v-icon> <v-icon color="primary">add_circle</v-icon>
</v-btn> </v-btn>
</template> </template>
@ -192,9 +192,9 @@
<v-card-title>选择节点操作</v-card-title> <v-card-title>选择节点操作</v-card-title>
<v-divider></v-divider> <v-divider></v-divider>
<v-card-text> <v-card-text>
<v-radio-group dense v-model="selectedProcess"> <v-radio-group v-model="selectedProcess" dense>
<v-radio v-for="(k, idx) in Object.keys(availableProcessors)" :label="availableProcessors[k].name" <v-radio v-for="(k, idx) in Object.keys(availableProcessors)" :key="idx"
:key="idx" :value="k"></v-radio> :label="availableProcessors[k].name" :value="k"></v-radio>
</v-radio-group> </v-radio-group>
</v-card-text> </v-card-text>
<v-card-actions> <v-card-actions>
@ -207,14 +207,14 @@
</v-subheader> </v-subheader>
<v-divider></v-divider> <v-divider></v-divider>
<component v-for="p in processors" <component :is="p.component"
:is="p.component" v-for="p in processors"
:key="p.id" :key="p.id"
:args="p.args" :args="p.args"
@dataChanged="dataChanged" @dataChanged="dataChanged"
@deleteProcess="deleteProcess" @deleteProcess="deleteProcess"
@up="moveUp"
@down="moveDown" @down="moveDown"
@up="moveUp"
> >
</component> </component>
</v-card> </v-card>
@ -233,6 +233,7 @@ import FlagOperator from "@/components/FlagOperator";
import ScriptFilter from "@/components/ScriptFilter"; import ScriptFilter from "@/components/ScriptFilter";
import ScriptOperator from "@/components/ScriptOperator"; import ScriptOperator from "@/components/ScriptOperator";
import RegexSortOperator from "@/components/RegexSortOperator"; import RegexSortOperator from "@/components/RegexSortOperator";
import HandleDuplicateOperator from "@/components/HandleDuplicateOperator";
const AVAILABLE_PROCESSORS = { const AVAILABLE_PROCESSORS = {
"Flag Operator": { "Flag Operator": {
@ -267,6 +268,10 @@ const AVAILABLE_PROCESSORS = {
component: "RegexDeleteOperator", component: "RegexDeleteOperator",
name: "删除正则" name: "删除正则"
}, },
"Handle Duplicate Operator": {
component: "HandleDuplicateOperator",
name: "重复节点处理"
},
"Script Filter": { "Script Filter": {
component: "ScriptFilter", component: "ScriptFilter",
name: "脚本过滤器" name: "脚本过滤器"
@ -297,6 +302,7 @@ export default {
RegexDeleteOperator, RegexDeleteOperator,
ScriptFilter, ScriptFilter,
ScriptOperator, ScriptOperator,
HandleDuplicateOperator
}, },
data: function () { data: function () {
return { return {

View File

@ -18,20 +18,20 @@
> >
<v-list-item-avatar> <v-list-item-avatar>
<v-icon v-if="!sub.icon" color="teal darken-1">mdi-cloud</v-icon> <v-icon v-if="!sub.icon" color="teal darken-1">mdi-cloud</v-icon>
<v-img :src="sub.icon" v-else :class="getIconClass(sub.icon)"/> <v-img v-else :class="getIconClass(sub.icon)" :src="sub.icon"/>
</v-list-item-avatar> </v-list-item-avatar>
<v-list-item-content> <v-list-item-content>
<v-list-item-title v-text="sub.name" class="font-weight-medium"></v-list-item-title> <v-list-item-title class="font-weight-medium" v-text="sub.name"></v-list-item-title>
<v-list-item-title v-text="sub.url"></v-list-item-title> <v-list-item-title v-text="sub.url"></v-list-item-title>
</v-list-item-content> </v-list-item-content>
<v-list-item-action> <v-list-item-action>
<v-menu bottom left> <v-menu bottom left>
<template v-slot:activator="{ on, attrs }"> <template v-slot:activator="{ on, attrs }">
<v-btn <v-btn
icon
v-bind="attrs" v-bind="attrs"
v-on="on" v-on="on"
icon
> >
<v-icon>mdi-dots-vertical</v-icon> <v-icon>mdi-dots-vertical</v-icon>
</v-btn> </v-btn>
@ -67,24 +67,24 @@
<v-list-item <v-list-item
v-for="collection in collections" v-for="collection in collections"
:key="collection.name" :key="collection.name"
@click="preview(collection, type='collection')"
dense dense
@click="preview(collection, type='collection')"
> >
<v-list-item-avatar> <v-list-item-avatar>
<v-icon v-if="!collection.icon" color="teal darken-1">mdi-cloud</v-icon> <v-icon v-if="!collection.icon" color="teal darken-1">mdi-cloud</v-icon>
<v-img :src="collection.icon" v-else :class="getIconClass(collection.icon)"/> <v-img v-else :class="getIconClass(collection.icon)" :src="collection.icon"/>
</v-list-item-avatar> </v-list-item-avatar>
<v-list-item-content> <v-list-item-content>
<v-list-item-title v-text="collection.name" class="font-weight-medium"></v-list-item-title> <v-list-item-title class="font-weight-medium" v-text="collection.name"></v-list-item-title>
<v-chip-group <v-chip-group
column column
> >
<v-chip <v-chip
v-for="subs in collection.subscriptions" v-for="subs in collection.subscriptions"
:key="subs" :key="subs"
small
class="ma-2 ml-0 mr-1 pa-2" class="ma-2 ml-0 mr-1 pa-2"
label label
small
> >
{{ subs }} {{ subs }}
</v-chip> </v-chip>
@ -94,9 +94,9 @@
<v-menu bottom left> <v-menu bottom left>
<template v-slot:activator="{ on, attrs }"> <template v-slot:activator="{ on, attrs }">
<v-btn <v-btn
icon
v-bind="attrs" v-bind="attrs"
v-on="on" v-on="on"
icon
> >
<v-icon>mdi-dots-vertical</v-icon> <v-icon>mdi-dots-vertical</v-icon>
</v-btn> </v-btn>
@ -117,7 +117,7 @@
</v-list> </v-list>
</v-card-text> </v-card-text>
</v-card> </v-card>
<v-dialog fullscreen hide-overlay transition="dialog-bottom-transition" v-model="showProxyList" scrollable> <v-dialog v-model="showProxyList" fullscreen hide-overlay scrollable transition="dialog-bottom-transition">
<v-card fluid> <v-card fluid>
<v-toolbar <v-toolbar
class="flex-grow-0" class="flex-grow-0"
@ -135,9 +135,9 @@
</v-toolbar-items> </v-toolbar-items>
<template v-slot:extension> <template v-slot:extension>
<v-tabs <v-tabs
grow
centered
v-model="tab" v-model="tab"
centered
grow
> >
<v-tabs-slider color="primary"/> <v-tabs-slider color="primary"/>
<v-tab <v-tab
@ -158,10 +158,10 @@
v-model="tab" v-model="tab"
> >
<v-tab-item key="raw"> <v-tab-item key="raw">
<proxy-list :url="url" :sub="sub" :raw="true" ref="proxyList" :key="url + 'raw'"></proxy-list> <proxy-list :key="url + 'raw'" ref="proxyList" :raw="true" :sub="sub" :url="url"></proxy-list>
</v-tab-item> </v-tab-item>
<v-tab-item key="processed"> <v-tab-item key="processed">
<proxy-list :url="url" :sub="sub" ref="proxyList" :key="url"></proxy-list> <proxy-list :key="url" ref="proxyList" :sub="sub" :url="url"></proxy-list>
</v-tab-item> </v-tab-item>
</v-tabs-items> </v-tabs-items>
</v-card-text> </v-card-text>
@ -185,7 +185,7 @@ export default {
tab: 1, tab: 1,
editMenu: [ editMenu: [
{ {
title: "复制", title: "链接",
action: "COPY" action: "COPY"
}, },
{ {
@ -197,6 +197,10 @@ export default {
action: "DELETE" action: "DELETE"
}, },
// { // {
// title: "",
// action: "DUPLICATE"
// }
// {
// title: "", // title: "",
// action: "MOVE_UP" // action: "MOVE_UP"
// }, // },
@ -245,7 +249,6 @@ export default {
this.moveUpSubscription(sub.name); this.moveUpSubscription(sub.name);
break break
case 'MOVE_DOWN': case 'MOVE_DOWN':
break break
} }
}, },

View File

@ -6,7 +6,7 @@
数据同步 数据同步
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn icon @click="openGist()"> <v-btn icon @click="openGist()">
<v-icon small color="primary">visibility</v-icon> <v-icon color="primary" small>visibility</v-icon>
</v-btn> </v-btn>
</v-card-title> </v-card-title>
<v-card-text> <v-card-text>
@ -15,20 +15,20 @@
<v-divider></v-divider> <v-divider></v-divider>
<v-card-actions> <v-card-actions>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn small <v-btn :loading="status.uploading"
:loading="status.uploading"
color="blue-grey"
class="ma-2 white--text" class="ma-2 white--text"
color="blue-grey"
small
@click="sync('upload')"> @click="sync('upload')">
上传 上传
<v-icon right> <v-icon right>
mdi-cloud-upload mdi-cloud-upload
</v-icon> </v-icon>
</v-btn> </v-btn>
<v-btn small <v-btn :loading="status.downloading"
:loading="status.downloading"
color="blue-grey"
class="ma-2 white--text" class="ma-2 white--text"
color="blue-grey"
small
@click="sync('download')"> @click="sync('download')">
恢复 恢复
<v-icon right> <v-icon right>
@ -51,18 +51,18 @@
<v-col> <v-col>
<v-row> <v-row>
<v-text-field <v-text-field
label="GitHub 用户名"
hint="填入GitHub用户名"
v-model="settings.githubUser" v-model="settings.githubUser"
clearable clear-icon="clear" clear-icon="clear"
clearable
hint="填入GitHub用户名" label="GitHub 用户名"
/> />
</v-row> </v-row>
<v-row> <v-row>
<v-text-field <v-text-field
label="GitHub Token"
hint="填入GitHub Token"
v-model="settings.gistToken" v-model="settings.gistToken"
clearable clear-icon="clear" clear-icon="clear"
clearable
hint="填入GitHub Token" label="GitHub Token"
/> />
</v-row> </v-row>
</v-col> </v-col>
@ -75,9 +75,9 @@
</v-list-item-content> </v-list-item-content>
<v-list-item-action> <v-list-item-action>
<v-switch <v-switch
label=""
hide-details
v-model="settings.theme.darkMode" v-model="settings.theme.darkMode"
hide-details
label=""
/> />
</v-list-item-action> </v-list-item-action>
</v-list-item> </v-list-item>
@ -86,7 +86,7 @@
<v-divider></v-divider> <v-divider></v-divider>
<v-card-actions> <v-card-actions>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn small text @click="save()" color="primary">保存</v-btn> <v-btn color="primary" small text @click="save()">保存</v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>