mirror of
https://git.mirrors.martin98.com/https://github.com/sub-store-org/Sub-Store.git
synced 2025-08-10 00:09:01 +08:00
Alpha test
This commit is contained in:
parent
a71914676e
commit
583f94e5b3
161
backend/.idea/workspace.xml
generated
161
backend/.idea/workspace.xml
generated
@ -20,21 +20,19 @@
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="8b97a098-48b2-4e64-a9ef-522fe2d30b52" name="Default Changelist" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/../web/src/components/KeywordFilter.vue" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/../web/src/components/KeywordRename.vue" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/../web/src/components/KeywordSort.vue" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/../web/src/components/RegexFilter.vue" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/../web/src/components/RegexRename.vue" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/../web/src/components/RegionFilter.vue" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/../web/src/components/Sort.vue" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/../web/vercel.json" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/sub-store.js" beforeDir="false" afterPath="$PROJECT_DIR$/sub-store.js" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/../web/.gitignore" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/../web/package-lock.json" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/../web/package.json" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/src/App.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../web/src/App.vue" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/src/components/ProxyList.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../web/src/components/ProxyList.vue" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/src/main.js" beforeDir="false" afterPath="$PROJECT_DIR$/../web/src/main.js" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/public/favicon.ico" beforeDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/public/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/../web/public/index.html" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/src/config.js" beforeDir="false" afterPath="$PROJECT_DIR$/../web/src/config.js" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/src/router/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/../web/src/router/index.js" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/src/store/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/../web/src/store/index.js" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/src/utils/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/../web/src/utils/index.js" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/src/views/CollectionEditor.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../web/src/views/CollectionEditor.vue" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/src/views/SubEditor.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../web/src/views/SubEditor.vue" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../web/src/views/Subscription.vue" beforeDir="false" afterPath="$PROJECT_DIR$/../web/src/views/Subscription.vue" afterDir="false" />
|
||||
</list>
|
||||
@ -92,7 +90,8 @@
|
||||
<workItem from="1598235270977" duration="126000" />
|
||||
<workItem from="1598235738199" duration="3192000" />
|
||||
<workItem from="1598323737081" duration="1913000" />
|
||||
<workItem from="1598442849645" duration="5715000" />
|
||||
<workItem from="1598442849645" duration="8914000" />
|
||||
<workItem from="1598778633049" duration="7671000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
@ -112,133 +111,169 @@
|
||||
<option name="oldMeFiltersMigrated" value="true" />
|
||||
</component>
|
||||
<component name="WindowStateProjectService">
|
||||
<state width="1709" height="374" key="GridCell.Tab.0.bottom" timestamp="1598527987806">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.0.bottom" timestamp="1598793540405">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.0.bottom/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358068" />
|
||||
<state width="850" height="374" key="GridCell.Tab.0.bottom/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540405" />
|
||||
<state width="849" height="374" key="GridCell.Tab.0.bottom/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677769" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.0.bottom/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615905" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.0.bottom/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987806" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.0.bottom/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654695" />
|
||||
<state width="843" height="374" key="GridCell.Tab.0.bottom/62.23.1730.1097@62.23.1730.1097" timestamp="1598779162353" />
|
||||
<state width="843" height="374" key="GridCell.Tab.0.bottom/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390883" />
|
||||
<state width="840" height="374" key="GridCell.Tab.0.bottom/70.23.1722.1097@70.23.1722.1097" timestamp="1598324500703" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.0.center" timestamp="1598527987805">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.0.center" timestamp="1598793540404">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.0.center/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358067" />
|
||||
<state width="850" height="374" key="GridCell.Tab.0.center/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540404" />
|
||||
<state width="849" height="374" key="GridCell.Tab.0.center/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677768" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.0.center/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615903" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.0.center/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987805" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.0.center/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654695" />
|
||||
<state width="843" height="374" key="GridCell.Tab.0.center/62.23.1730.1097@62.23.1730.1097" timestamp="1598779162352" />
|
||||
<state width="843" height="374" key="GridCell.Tab.0.center/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390882" />
|
||||
<state width="840" height="374" key="GridCell.Tab.0.center/70.23.1722.1097@70.23.1722.1097" timestamp="1598324500702" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.0.left" timestamp="1598527987801">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.0.left" timestamp="1598793540403">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.0.left/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358067" />
|
||||
<state width="850" height="374" key="GridCell.Tab.0.left/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540403" />
|
||||
<state width="849" height="374" key="GridCell.Tab.0.left/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677768" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.0.left/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615899" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.0.left/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987801" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.0.left/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654694" />
|
||||
<state width="843" height="374" key="GridCell.Tab.0.left/62.23.1730.1097@62.23.1730.1097" timestamp="1598779162352" />
|
||||
<state width="843" height="374" key="GridCell.Tab.0.left/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390882" />
|
||||
<state width="840" height="374" key="GridCell.Tab.0.left/70.23.1722.1097@70.23.1722.1097" timestamp="1598324500701" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.0.right" timestamp="1598527987806">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.0.right" timestamp="1598793540404">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.0.right/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358068" />
|
||||
<state width="850" height="374" key="GridCell.Tab.0.right/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540404" />
|
||||
<state width="849" height="374" key="GridCell.Tab.0.right/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677769" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.0.right/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615904" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.0.right/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987806" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.0.right/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654695" />
|
||||
<state width="843" height="374" key="GridCell.Tab.0.right/62.23.1730.1097@62.23.1730.1097" timestamp="1598779162352" />
|
||||
<state width="843" height="374" key="GridCell.Tab.0.right/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390883" />
|
||||
<state width="840" height="374" key="GridCell.Tab.0.right/70.23.1722.1097@70.23.1722.1097" timestamp="1598324500702" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.1.bottom" timestamp="1598527987679">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.1.bottom" timestamp="1598793540297">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.1.bottom/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358069" />
|
||||
<state width="850" height="374" key="GridCell.Tab.1.bottom/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540297" />
|
||||
<state width="849" height="374" key="GridCell.Tab.1.bottom/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677681" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.1.bottom/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615752" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.1.bottom/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987679" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.1.bottom/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654696" />
|
||||
<state width="843" height="374" key="GridCell.Tab.1.bottom/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390883" />
|
||||
<state width="840" height="374" key="GridCell.Tab.1.bottom/70.23.1722.1097@70.23.1722.1097" timestamp="1598233292666" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.1.center" timestamp="1598527987678">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.1.center" timestamp="1598793540297">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.1.center/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358069" />
|
||||
<state width="850" height="374" key="GridCell.Tab.1.center/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540297" />
|
||||
<state width="849" height="374" key="GridCell.Tab.1.center/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677681" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.1.center/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615751" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.1.center/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987678" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.1.center/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654696" />
|
||||
<state width="843" height="374" key="GridCell.Tab.1.center/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390883" />
|
||||
<state width="840" height="374" key="GridCell.Tab.1.center/70.23.1722.1097@70.23.1722.1097" timestamp="1598233292666" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.1.left" timestamp="1598527987678">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.1.left" timestamp="1598793540297">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.1.left/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358069" />
|
||||
<state width="850" height="374" key="GridCell.Tab.1.left/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540297" />
|
||||
<state width="849" height="374" key="GridCell.Tab.1.left/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677680" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.1.left/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615751" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.1.left/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987678" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.1.left/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654696" />
|
||||
<state width="843" height="374" key="GridCell.Tab.1.left/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390883" />
|
||||
<state width="840" height="374" key="GridCell.Tab.1.left/70.23.1722.1097@70.23.1722.1097" timestamp="1598233292665" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.1.right" timestamp="1598527987679">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.1.right" timestamp="1598793540297">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.1.right/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358069" />
|
||||
<state width="850" height="374" key="GridCell.Tab.1.right/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540297" />
|
||||
<state width="849" height="374" key="GridCell.Tab.1.right/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677681" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.1.right/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615752" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.1.right/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987679" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.1.right/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654696" />
|
||||
<state width="843" height="374" key="GridCell.Tab.1.right/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390883" />
|
||||
<state width="840" height="374" key="GridCell.Tab.1.right/70.23.1722.1097@70.23.1722.1097" timestamp="1598233292666" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.2.bottom" timestamp="1598527987679">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.2.bottom" timestamp="1598793540298">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.2.bottom/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358071" />
|
||||
<state width="850" height="374" key="GridCell.Tab.2.bottom/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540298" />
|
||||
<state width="849" height="374" key="GridCell.Tab.2.bottom/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677682" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.2.bottom/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615753" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.2.bottom/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987679" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.2.bottom/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654697" />
|
||||
<state width="843" height="374" key="GridCell.Tab.2.bottom/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390884" />
|
||||
<state width="840" height="374" key="GridCell.Tab.2.bottom/70.23.1722.1097@70.23.1722.1097" timestamp="1598233292666" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.2.center" timestamp="1598527987679">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.2.center" timestamp="1598793540298">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.2.center/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358070" />
|
||||
<state width="850" height="374" key="GridCell.Tab.2.center/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540298" />
|
||||
<state width="849" height="374" key="GridCell.Tab.2.center/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677682" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.2.center/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615753" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.2.center/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987679" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.2.center/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654696" />
|
||||
<state width="843" height="374" key="GridCell.Tab.2.center/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390884" />
|
||||
<state width="840" height="374" key="GridCell.Tab.2.center/70.23.1722.1097@70.23.1722.1097" timestamp="1598233292666" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.2.left" timestamp="1598527987679">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.2.left" timestamp="1598793540297">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.2.left/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358070" />
|
||||
<state width="850" height="374" key="GridCell.Tab.2.left/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540297" />
|
||||
<state width="849" height="374" key="GridCell.Tab.2.left/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677681" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.2.left/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615752" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.2.left/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987679" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.2.left/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654696" />
|
||||
<state width="843" height="374" key="GridCell.Tab.2.left/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390883" />
|
||||
<state width="840" height="374" key="GridCell.Tab.2.left/70.23.1722.1097@70.23.1722.1097" timestamp="1598233292666" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.2.right" timestamp="1598527987679">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.2.right" timestamp="1598793540298">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.2.right/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358070" />
|
||||
<state width="850" height="374" key="GridCell.Tab.2.right/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540298" />
|
||||
<state width="849" height="374" key="GridCell.Tab.2.right/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677682" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.2.right/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615753" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.2.right/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987679" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.2.right/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654697" />
|
||||
<state width="843" height="374" key="GridCell.Tab.2.right/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390884" />
|
||||
<state width="840" height="374" key="GridCell.Tab.2.right/70.23.1722.1097@70.23.1722.1097" timestamp="1598233292666" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.3.bottom" timestamp="1598527987680">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.3.bottom" timestamp="1598793540299">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.3.bottom/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358072" />
|
||||
<state width="850" height="374" key="GridCell.Tab.3.bottom/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540299" />
|
||||
<state width="849" height="374" key="GridCell.Tab.3.bottom/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677682" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.3.bottom/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615755" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.3.bottom/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987680" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.3.bottom/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654697" />
|
||||
<state width="843" height="374" key="GridCell.Tab.3.bottom/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390884" />
|
||||
<state width="840" height="374" key="GridCell.Tab.3.bottom/70.23.1722.1097@70.23.1722.1097" timestamp="1598233292667" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.3.center" timestamp="1598527987680">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.3.center" timestamp="1598793540298">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.3.center/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358071" />
|
||||
<state width="850" height="374" key="GridCell.Tab.3.center/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540298" />
|
||||
<state width="849" height="374" key="GridCell.Tab.3.center/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677682" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.3.center/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615754" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.3.center/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987680" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.3.center/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654697" />
|
||||
<state width="843" height="374" key="GridCell.Tab.3.center/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390884" />
|
||||
<state width="840" height="374" key="GridCell.Tab.3.center/70.23.1722.1097@70.23.1722.1097" timestamp="1598233292667" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.3.left" timestamp="1598527987680">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.3.left" timestamp="1598793540298">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.3.left/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358071" />
|
||||
<state width="850" height="374" key="GridCell.Tab.3.left/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540298" />
|
||||
<state width="849" height="374" key="GridCell.Tab.3.left/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677682" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.3.left/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615753" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.3.left/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987680" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.3.left/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654697" />
|
||||
<state width="843" height="374" key="GridCell.Tab.3.left/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390884" />
|
||||
<state width="840" height="374" key="GridCell.Tab.3.left/70.23.1722.1097@70.23.1722.1097" timestamp="1598233292667" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.3.right" timestamp="1598527987680">
|
||||
<screen x="62" y="23" width="1730" height="1097" />
|
||||
<state width="850" height="374" key="GridCell.Tab.3.right" timestamp="1598793540298">
|
||||
<screen x="51" y="23" width="1741" height="1097" />
|
||||
</state>
|
||||
<state width="840" height="374" key="GridCell.Tab.3.right/0.0.1792.1120@0.0.1792.1120" timestamp="1598115358072" />
|
||||
<state width="850" height="374" key="GridCell.Tab.3.right/51.23.1741.1097@51.23.1741.1097" timestamp="1598793540298" />
|
||||
<state width="849" height="374" key="GridCell.Tab.3.right/53.23.1739.1097@53.23.1739.1097" timestamp="1598791677682" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.3.right/60.23.1732.1097@60.23.1732.1097" timestamp="1598446615754" />
|
||||
<state width="1709" height="374" key="GridCell.Tab.3.right/62.23.1730.1097@62.23.1730.1097" timestamp="1598527987680" />
|
||||
<state width="1704" height="374" key="GridCell.Tab.3.right/67.23.1725.1097@67.23.1725.1097" timestamp="1598325654697" />
|
||||
<state width="843" height="374" key="GridCell.Tab.3.right/67.23.1725.1097@67.23.1725.1097" timestamp="1598663390884" />
|
||||
<state width="840" height="374" key="GridCell.Tab.3.right/70.23.1722.1097@70.23.1722.1097" timestamp="1598233292667" />
|
||||
<state x="161" y="268" width="670" height="676" key="search.everywhere.popup" timestamp="1598787117227">
|
||||
<screen x="53" y="23" width="1739" height="1097" />
|
||||
</state>
|
||||
<state x="161" y="268" width="670" height="676" key="search.everywhere.popup/53.23.1739.1097@53.23.1739.1097" timestamp="1598787117227" />
|
||||
</component>
|
||||
</project>
|
@ -92,7 +92,7 @@ const AVAILABLE_OPERATORS = {
|
||||
async function refreshResource(req, res) {
|
||||
const {url} = req.body;
|
||||
const cachedResources = $.read(RESOURCE_CACHE_KEY);
|
||||
cachedResources[url] = await $.http.get(url).then(resp => resp => resp.body).catch(err => {
|
||||
cachedResources[url] = await $.http.get(url).then(resp => resp.body).catch(err => {
|
||||
res.status(500).json({
|
||||
status: "failed",
|
||||
message: `Cannot refresh remote resource: ${url}\n Reason: ${err}`
|
||||
@ -146,7 +146,22 @@ async function parseSub(sub, platform) {
|
||||
|
||||
$.log("=======================================================================");
|
||||
$.log(`Processing subscription: ${sub.name}, target platform ==> ${platform}.`);
|
||||
$.log(`Initializing parser...`);
|
||||
const $parser = ProxyParser(platform);
|
||||
// Parsers
|
||||
$parser.addParsers([
|
||||
Clash_All,
|
||||
// URI format parsers
|
||||
URI_SS, URI_SSR, URI_VMess, URI_Trojan,
|
||||
// Quantumult X platform
|
||||
QX_SS, QX_SSR, QX_VMess, QX_Trojan, QX_Http,
|
||||
// Loon platform
|
||||
Loon_SS, Loon_SSR, Loon_VMess, Loon_Trojan, Loon_Http,
|
||||
// Surge platform
|
||||
Surge_SS, Surge_VMess, Surge_Trojan, Surge_Http
|
||||
]);
|
||||
|
||||
$.log(`Parser initialized.`);
|
||||
let proxies = $parser.parse(raw);
|
||||
|
||||
// filters
|
||||
@ -180,6 +195,11 @@ async function parseSub(sub, platform) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Producers
|
||||
$parser.addProducers([
|
||||
QX_Producer, Loon_Producer, Surge_Producer, Raw_Producer
|
||||
]);
|
||||
return $parser.produce(proxies);
|
||||
}
|
||||
|
||||
@ -418,11 +438,12 @@ function ProxyParser(targetPlatform) {
|
||||
const parsers = [];
|
||||
const producers = [];
|
||||
|
||||
function addParsers(...args) {
|
||||
function addParsers(args) {
|
||||
args.forEach(a => parsers.push(a()));
|
||||
$.log(`${args.length} parser added.`);
|
||||
}
|
||||
|
||||
function addProducers(...args) {
|
||||
function addProducers(args) {
|
||||
args.forEach(a => producers.push(a()))
|
||||
}
|
||||
|
||||
@ -529,26 +550,8 @@ function ProxyParser(targetPlatform) {
|
||||
return output.join("\n");
|
||||
}
|
||||
|
||||
// Parsers
|
||||
addParsers(
|
||||
Clash_All,
|
||||
// URI format parsers
|
||||
URI_SS, URI_SSR, URI_VMess, URI_Trojan,
|
||||
// Quantumult X platform
|
||||
QX_SS, QX_SSR, QX_VMess, QX_Trojan, QX_Http,
|
||||
// Loon platform
|
||||
Loon_SS, Loon_SSR, Loon_VMess, Loon_Trojan, Loon_Http,
|
||||
// Surge platform
|
||||
Surge_SS, Surge_VMess, Surge_Trojan, Surge_Http
|
||||
);
|
||||
|
||||
// Producers
|
||||
addProducers(
|
||||
QX_Producer, Loon_Producer, Surge_Producer, Raw_Producer
|
||||
);
|
||||
|
||||
return {
|
||||
parse, produce
|
||||
parse, produce, addParsers, addProducers
|
||||
};
|
||||
}
|
||||
|
||||
@ -1418,26 +1421,21 @@ function SetPropertyOperator(key, val) {
|
||||
}
|
||||
|
||||
// add or remove flag for proxies
|
||||
function FlagOperator(type = 1) {
|
||||
function FlagOperator(add = true) {
|
||||
return {
|
||||
name: "Flag Operator",
|
||||
func: proxies => {
|
||||
return proxies.map(proxy => {
|
||||
switch (type) {
|
||||
case 0:
|
||||
// no flag
|
||||
proxy.name = removeFlag(proxy.name);
|
||||
break
|
||||
case 1:
|
||||
// get flag
|
||||
const newFlag = getFlag(proxy.name);
|
||||
// remove old flag
|
||||
proxy.name = removeFlag(proxy.name);
|
||||
proxy.name = newFlag + " " + proxy.name;
|
||||
proxy.name = proxy.name.replace(/🇹🇼/g, "🇨🇳");
|
||||
break;
|
||||
default:
|
||||
throw new Error("Unknown flag type: " + type);
|
||||
if (!add)
|
||||
// no flag
|
||||
proxy.name = removeFlag(proxy.name);
|
||||
else {
|
||||
// get flag
|
||||
const newFlag = getFlag(proxy.name);
|
||||
// remove old flag
|
||||
proxy.name = removeFlag(proxy.name);
|
||||
proxy.name = newFlag + " " + proxy.name;
|
||||
proxy.name = proxy.name.replace(/🇹🇼/g, "🇨🇳");
|
||||
}
|
||||
return proxy;
|
||||
})
|
||||
@ -2139,7 +2137,7 @@ function express(port = 3000) {
|
||||
app.use((req, res, next) => {
|
||||
res.set(DEFAULT_HEADERS);
|
||||
next();
|
||||
})
|
||||
});
|
||||
|
||||
// adapter
|
||||
app.start = () => {
|
||||
@ -2187,7 +2185,6 @@ function express(port = 3000) {
|
||||
}
|
||||
}
|
||||
if (handler) {
|
||||
$.notify(`DISPATCHING:`, `${method}, ${url}`, path);
|
||||
// dispatch to next handler
|
||||
const next = () => {
|
||||
dispatch(method, url, i);
|
||||
@ -2851,7 +2848,7 @@ var YAML =
|
||||
if (currentObj != null) res.push(currentObj);
|
||||
currentObj = {};
|
||||
isMap = true;
|
||||
continue;
|
||||
|
||||
} else if (m = line.match(/^-\s*(.*)/)) {
|
||||
if (currentObj != null)
|
||||
currentObj.push(processValue(m[1]));
|
||||
@ -2864,7 +2861,7 @@ var YAML =
|
||||
}
|
||||
res.push(processValue(m[1]));
|
||||
}
|
||||
continue;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
2
web/.gitignore
vendored
2
web/.gitignore
vendored
@ -21,3 +21,5 @@ pnpm-debug.log*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
|
||||
.vercel
|
||||
|
308
web/package-lock.json
generated
308
web/package-lock.json
generated
@ -1325,6 +1325,12 @@
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/html-minifier-terser": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz",
|
||||
"integrity": "sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/http-proxy": {
|
||||
"version": "1.17.4",
|
||||
"resolved": "https://registry.npm.taobao.org/@types/http-proxy/download/@types/http-proxy-1.17.4.tgz?cache=0&sync_timestamp=1596839386031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fhttp-proxy%2Fdownload%2F%40types%2Fhttp-proxy-1.17.4.tgz",
|
||||
@ -1761,6 +1767,12 @@
|
||||
"integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=",
|
||||
"dev": true
|
||||
},
|
||||
"big.js": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
|
||||
"integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
|
||||
"dev": true
|
||||
},
|
||||
"cacache": {
|
||||
"version": "13.0.1",
|
||||
"resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz?cache=0&sync_timestamp=1594429684526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-13.0.1.tgz",
|
||||
@ -1787,6 +1799,12 @@
|
||||
"unique-filename": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"emojis-list": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
|
||||
"integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
|
||||
"dev": true
|
||||
},
|
||||
"find-cache-dir": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz",
|
||||
@ -1808,6 +1826,39 @@
|
||||
"path-exists": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"html-webpack-plugin": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz",
|
||||
"integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"html-minifier": "^3.2.3",
|
||||
"loader-utils": "^0.2.16",
|
||||
"lodash": "^4.17.3",
|
||||
"pretty-error": "^2.0.2",
|
||||
"tapable": "^1.0.0",
|
||||
"toposort": "^1.0.0",
|
||||
"util.promisify": "1.0.0"
|
||||
}
|
||||
},
|
||||
"json5": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
|
||||
"integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
|
||||
"dev": true
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "0.2.17",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
|
||||
"integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"big.js": "^3.1.3",
|
||||
"emojis-list": "^2.0.0",
|
||||
"json5": "^0.5.0",
|
||||
"object-assign": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"locate-path": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz",
|
||||
@ -1888,6 +1939,16 @@
|
||||
"terser": "^4.6.12",
|
||||
"webpack-sources": "^1.4.3"
|
||||
}
|
||||
},
|
||||
"util.promisify": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
|
||||
"integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"define-properties": "^1.1.2",
|
||||
"object.getownpropertydescriptors": "^2.0.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -3100,13 +3161,13 @@
|
||||
"dev": true
|
||||
},
|
||||
"camel-case": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz",
|
||||
"integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz",
|
||||
"integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"no-case": "^2.2.0",
|
||||
"upper-case": "^1.1.1"
|
||||
"pascal-case": "^3.1.1",
|
||||
"tslib": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"camelcase": {
|
||||
@ -3275,8 +3336,8 @@
|
||||
},
|
||||
"clean-css": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz",
|
||||
"integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=",
|
||||
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
|
||||
"integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"source-map": "~0.6.0"
|
||||
@ -3284,8 +3345,8 @@
|
||||
"dependencies": {
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1589682764497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
@ -4485,8 +4546,8 @@
|
||||
},
|
||||
"dom-converter": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz",
|
||||
"integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=",
|
||||
"resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
|
||||
"integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"utila": "~0.4"
|
||||
@ -4524,8 +4585,8 @@
|
||||
},
|
||||
"domhandler": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz",
|
||||
"integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=",
|
||||
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
|
||||
"integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"domelementtype": "1"
|
||||
@ -4541,6 +4602,16 @@
|
||||
"domelementtype": "1"
|
||||
}
|
||||
},
|
||||
"dot-case": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz",
|
||||
"integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"no-case": "^3.0.3",
|
||||
"tslib": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"dot-prop": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.2.0.tgz?cache=0&sync_timestamp=1597574828045&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.2.0.tgz",
|
||||
@ -5921,8 +5992,8 @@
|
||||
},
|
||||
"html-minifier": {
|
||||
"version": "3.5.21",
|
||||
"resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz",
|
||||
"integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=",
|
||||
"resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
|
||||
"integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"camel-case": "3.0.x",
|
||||
@ -5934,10 +6005,67 @@
|
||||
"uglify-js": "3.4.x"
|
||||
},
|
||||
"dependencies": {
|
||||
"camel-case": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
|
||||
"integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"no-case": "^2.2.0",
|
||||
"upper-case": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"commander": {
|
||||
"version": "2.17.1",
|
||||
"resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz",
|
||||
"integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
|
||||
"integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
|
||||
"dev": true
|
||||
},
|
||||
"lower-case": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
|
||||
"integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
|
||||
"dev": true
|
||||
},
|
||||
"no-case": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
|
||||
"integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lower-case": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"param-case": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
|
||||
"integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"no-case": "^2.2.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"html-minifier-terser": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
|
||||
"integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"camel-case": "^4.1.1",
|
||||
"clean-css": "^4.2.3",
|
||||
"commander": "^4.1.1",
|
||||
"he": "^1.2.0",
|
||||
"param-case": "^3.0.3",
|
||||
"relateurl": "^0.2.7",
|
||||
"terser": "^4.6.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"commander": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
|
||||
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
@ -5948,55 +6076,46 @@
|
||||
"integrity": "sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=",
|
||||
"dev": true
|
||||
},
|
||||
"html-webpack-plugin": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz",
|
||||
"integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
|
||||
"html-webpack-inline-source-plugin": {
|
||||
"version": "0.0.10",
|
||||
"resolved": "https://registry.npmjs.org/html-webpack-inline-source-plugin/-/html-webpack-inline-source-plugin-0.0.10.tgz",
|
||||
"integrity": "sha512-0ZNU57u7283vrXSF5a4VDnVOMWiSwypKIp1z/XfXWoVHLA1r3Xmyxx5+Lz+mnthz/UvxL1OAf41w5UIF68Jngw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"html-minifier": "^3.2.3",
|
||||
"loader-utils": "^0.2.16",
|
||||
"lodash": "^4.17.3",
|
||||
"pretty-error": "^2.0.2",
|
||||
"tapable": "^1.0.0",
|
||||
"toposort": "^1.0.0",
|
||||
"escape-string-regexp": "^1.0.5",
|
||||
"slash": "^1.0.0",
|
||||
"source-map-url": "^0.4.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"slash": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
|
||||
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"html-webpack-plugin": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz",
|
||||
"integrity": "sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/html-minifier-terser": "^5.0.0",
|
||||
"@types/tapable": "^1.0.5",
|
||||
"@types/webpack": "^4.41.8",
|
||||
"html-minifier-terser": "^5.0.1",
|
||||
"loader-utils": "^1.2.3",
|
||||
"lodash": "^4.17.15",
|
||||
"pretty-error": "^2.1.1",
|
||||
"tapable": "^1.1.3",
|
||||
"util.promisify": "1.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"big.js": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz",
|
||||
"integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=",
|
||||
"dev": true
|
||||
},
|
||||
"emojis-list": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz",
|
||||
"integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
|
||||
"dev": true
|
||||
},
|
||||
"json5": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz",
|
||||
"integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
|
||||
"dev": true
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "0.2.17",
|
||||
"resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz",
|
||||
"integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"big.js": "^3.1.3",
|
||||
"emojis-list": "^2.0.0",
|
||||
"json5": "^0.5.0",
|
||||
"object-assign": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"util.promisify": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz?cache=0&sync_timestamp=1589682767473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.0.tgz",
|
||||
"integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=",
|
||||
"resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
|
||||
"integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"define-properties": "^1.1.2",
|
||||
@ -6007,8 +6126,8 @@
|
||||
},
|
||||
"htmlparser2": {
|
||||
"version": "3.10.1",
|
||||
"resolved": "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.10.1.tgz",
|
||||
"integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
|
||||
"integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"domelementtype": "^1.3.1",
|
||||
@ -6021,14 +6140,14 @@
|
||||
"dependencies": {
|
||||
"entities": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz",
|
||||
"integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
|
||||
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
|
||||
"dev": true
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1589682741447&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz",
|
||||
"integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"inherits": "^2.0.3",
|
||||
@ -7058,10 +7177,13 @@
|
||||
}
|
||||
},
|
||||
"lower-case": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz",
|
||||
"integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
|
||||
"dev": true
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz",
|
||||
"integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"tslib": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"lru-cache": {
|
||||
"version": "5.1.1",
|
||||
@ -7502,12 +7624,13 @@
|
||||
"dev": true
|
||||
},
|
||||
"no-case": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz",
|
||||
"integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=",
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz",
|
||||
"integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lower-case": "^1.1.1"
|
||||
"lower-case": "^2.0.1",
|
||||
"tslib": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"node-forge": {
|
||||
@ -7961,12 +8084,13 @@
|
||||
}
|
||||
},
|
||||
"param-case": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz",
|
||||
"integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz",
|
||||
"integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"no-case": "^2.2.0"
|
||||
"dot-case": "^3.0.3",
|
||||
"tslib": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"parent-module": {
|
||||
@ -8032,6 +8156,16 @@
|
||||
"integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=",
|
||||
"dev": true
|
||||
},
|
||||
"pascal-case": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz",
|
||||
"integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"no-case": "^3.0.3",
|
||||
"tslib": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"pascalcase": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz",
|
||||
@ -9150,8 +9284,8 @@
|
||||
},
|
||||
"renderkid": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npm.taobao.org/renderkid/download/renderkid-2.0.3.tgz",
|
||||
"integrity": "sha1-OAF5wv9a4TZcUivy/Pz/AcW3QUk=",
|
||||
"resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz",
|
||||
"integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"css-select": "^1.1.0",
|
||||
@ -9181,8 +9315,8 @@
|
||||
},
|
||||
"css-what": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npm.taobao.org/css-what/download/css-what-2.1.3.tgz",
|
||||
"integrity": "sha1-ptdgRXM2X+dGhsPzEcVlE9iChfI=",
|
||||
"resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
|
||||
"integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
|
||||
"dev": true
|
||||
},
|
||||
"domutils": {
|
||||
@ -10628,8 +10762,8 @@
|
||||
},
|
||||
"uglify-js": {
|
||||
"version": "3.4.10",
|
||||
"resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1596387201241&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz",
|
||||
"integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=",
|
||||
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
|
||||
"integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"commander": "~2.19.0",
|
||||
@ -10638,14 +10772,14 @@
|
||||
"dependencies": {
|
||||
"commander": {
|
||||
"version": "2.19.0",
|
||||
"resolved": "https://registry.npm.taobao.org/commander/download/commander-2.19.0.tgz",
|
||||
"integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
|
||||
"integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
|
||||
"dev": true
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1589682764497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz",
|
||||
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,8 @@
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint"
|
||||
"lint": "vue-cli-service lint",
|
||||
"vercel-build": "npm run build"
|
||||
},
|
||||
"dependencies": {
|
||||
"@dzangolab/vue-country-flag-icon": "^0.2.0",
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 7.3 KiB |
@ -9,11 +9,11 @@
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
|
||||
<meta name="viewport"
|
||||
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover"/>
|
||||
<link rel="Bookmark" href="https://raw.githubusercontent.com/chavyleung/scripts/master/BOXJS.png"/>
|
||||
<link rel="shortcut icon" href="https://raw.githubusercontent.com/chavyleung/scripts/master/BOXJS.png"/>
|
||||
<link rel="apple-touch-icon" href="https://raw.githubusercontent.com/chavyleung/scripts/master/BOXJS.png"/>
|
||||
<link rel="Bookmark" href="https://raw.githubusercontent.com/58xinian/icon/master/Sub-Store.png"/>
|
||||
<link rel="shortcut icon" href="https://raw.githubusercontent.com/58xinian/icon/master/Sub-Store.png"/>
|
||||
<link rel="apple-touch-icon" href="https://raw.githubusercontent.com/58xinian/icon/master/Sub-Store.png"/>
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||
<title>Sub-Store</title>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css">
|
||||
</head>
|
||||
|
@ -1,3 +1,3 @@
|
||||
const DEBUG = true;
|
||||
const DEBUG = false;
|
||||
|
||||
export const BACKEND_BASE = DEBUG ? `http://192.168.1.134:3000` : `http://sub.store`;
|
||||
export const BACKEND_BASE = DEBUG ? `http://192.168.1.134:3000` : `https://sub.store`;
|
@ -48,7 +48,7 @@ const router = new Router({
|
||||
|
||||
router.beforeEach((to, from, next) => {
|
||||
const {meta} = to;
|
||||
document.title = to.meta.title
|
||||
// document.title = to.meta.title
|
||||
store.commit("SET_NAV_TITLE", meta.title);
|
||||
next();
|
||||
})
|
||||
|
@ -39,53 +39,55 @@ const store = new Vuex.Store({
|
||||
actions: {
|
||||
// fetch subscriptions
|
||||
async FETCH_SUBSCRIPTIONS({state}) {
|
||||
axios.get("/sub").then(resp => {
|
||||
return axios.get("/sub").then(resp => {
|
||||
const {data} = resp.data;
|
||||
state.subscriptions = data;
|
||||
});
|
||||
},
|
||||
// fetch collections
|
||||
async FETCH_COLLECTIONS({state}) {
|
||||
axios.get("/collection").then(resp => {
|
||||
return axios.get("/collection").then(resp => {
|
||||
const {data} = resp.data;
|
||||
state.collections = data;
|
||||
});
|
||||
},
|
||||
// update subscriptions
|
||||
async UPDATE_SUBSCRIPTION({commit, dispatch}, {name, sub}) {
|
||||
axios.patch(`/sub/${name}`, sub).then(() => {
|
||||
async UPDATE_SUBSCRIPTION({dispatch}, {name, sub}) {
|
||||
return axios.patch(`/sub/${name}`, sub).then(() => {
|
||||
dispatch("FETCH_SUBSCRIPTIONS");
|
||||
dispatch("FETCH_COLLECTIONS");
|
||||
commit("SET_SUCCESS_MESSAGE", `成功更新订阅${sub.name || name}`);
|
||||
}).catch(err => {
|
||||
commit("SET_ERROR_MESSAGE", err);
|
||||
});
|
||||
},
|
||||
// new subscription
|
||||
async NEW_SUBSCRIPTION() {
|
||||
|
||||
async NEW_SUBSCRIPTION({dispatch}, sub) {
|
||||
return axios.post(`/sub`, sub).then(() => {
|
||||
dispatch("FETCH_SUBSCRIPTIONS");
|
||||
});
|
||||
},
|
||||
// delete subscription
|
||||
async DELETE_SUBSCRIPTION({commit, dispatch}, name) {
|
||||
axios.delete(`/sub/${name}`).then(() => {
|
||||
async DELETE_SUBSCRIPTION({dispatch}, name) {
|
||||
return axios.delete(`/sub/${name}`).then(() => {
|
||||
dispatch("FETCH_SUBSCRIPTIONS");
|
||||
dispatch("FETCH_COLLECTIONS");
|
||||
commit("SET_SUCCESS_MESSAGE", `成功删除订阅${name}`);
|
||||
}).catch(err => {
|
||||
commit("SET_ERROR_MESSAGE", err);
|
||||
})
|
||||
});
|
||||
},
|
||||
// update collection
|
||||
async UPDATE_COLLECTION() {
|
||||
|
||||
async UPDATE_COLLECTION({dispatch}, {name, collection}) {
|
||||
return axios.patch(`/collection/${name}`, collection).then(() => {
|
||||
dispatch("FETCH_COLLECTIONS");
|
||||
});
|
||||
},
|
||||
// new collection
|
||||
async NEW_COLLECTION() {
|
||||
|
||||
async NEW_COLLECTION({dispatch}, collection) {
|
||||
return axios.post(`/collection`, collection).then(() => {
|
||||
dispatch("FETCH_COLLECTIONS");
|
||||
})
|
||||
},
|
||||
// delete collection
|
||||
async DELETE_COLLECTION() {
|
||||
|
||||
async DELETE_COLLECTION({dispatch}, name) {
|
||||
return axios.delete(`/collection/${name}`).then(() => {
|
||||
dispatch("FETCH_COLLECTIONS");
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
import Axios from 'axios';
|
||||
import store from "@/store";
|
||||
import {BACKEND_BASE} from "@/config";
|
||||
|
||||
export const axios = Axios.create({
|
||||
@ -8,4 +9,12 @@ export const axios = Axios.create({
|
||||
|
||||
export function isEmptyObj(obj) {
|
||||
return Object.keys(obj).length === 0;
|
||||
}
|
||||
|
||||
export function showInfo(msg) {
|
||||
store.commit("SET_SUCCESS_MESSAGE", msg);
|
||||
}
|
||||
|
||||
export function showError(err) {
|
||||
store.commit("SET_ERROR_MESSAGE", err);
|
||||
}
|
@ -1,10 +1,107 @@
|
||||
<template>
|
||||
<v-container></v-container>
|
||||
<v-container>
|
||||
<v-card class="mb-4">
|
||||
<v-card-title>订阅配置</v-card-title>
|
||||
<v-form class="pl-4 pr-4 pb-4" v-model="valid">
|
||||
<v-subheader class="pl-0">订阅名称</v-subheader>
|
||||
<v-text-field
|
||||
v-model="name"
|
||||
class="mt-2"
|
||||
:rules="validations.nameRules"
|
||||
required
|
||||
placeholder="填入订阅名称,名称需唯一"
|
||||
/>
|
||||
<v-divider></v-divider>
|
||||
<v-subheader class="pl-0">包含的订阅</v-subheader>
|
||||
<v-list dense>
|
||||
<v-list-item v-for="sub in availableSubs" :key="sub.name">
|
||||
<v-list-item-avatar dark>
|
||||
<v-icon>mdi-cloud</v-icon>
|
||||
</v-list-item-avatar>
|
||||
<v-list-item-content>
|
||||
{{ sub.name }}
|
||||
</v-list-item-content>
|
||||
<v-spacer></v-spacer>
|
||||
<v-checkbox
|
||||
:value="sub.name"
|
||||
v-model="selected"
|
||||
class="pr-1"
|
||||
/>
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</v-form>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn icon @click="save"><v-icon>save_alt</v-icon></v-btn>
|
||||
<v-btn icon @click="discard"><v-icon>settings_backup_restore</v-icon></v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {showInfo, showError} from "@/utils";
|
||||
|
||||
export default {
|
||||
name: "CollectionEditor"
|
||||
data: function () {
|
||||
return {
|
||||
valid: false,
|
||||
validations: {
|
||||
nameRules: [
|
||||
v => !!v || "名字不能为空",
|
||||
v => /^[\w-_]*$/.test(v) || "订阅名称只能包含英文字符、横杠和下划线!"
|
||||
]
|
||||
},
|
||||
selected: [],
|
||||
name: ""
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
availableSubs() {
|
||||
return this.$store.state.subscriptions;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
save() {
|
||||
if (!this.valid || this.selected.length === 0) {
|
||||
return;
|
||||
}
|
||||
if (this.$route.params.name === 'UNTITLED') {
|
||||
this.$store.dispatch("NEW_COLLECTION", {
|
||||
name: this.name,
|
||||
subscriptions: this.selected
|
||||
}).then(() => {
|
||||
showInfo(`成功创建订阅:${this.name}!`)
|
||||
}).catch(() => {
|
||||
showError(`发生错误,无法创建订阅!`)
|
||||
});
|
||||
} else {
|
||||
this.$store.dispatch("UPDATE_COLLECTION", {
|
||||
name: this.$route.params.name,
|
||||
collection: {
|
||||
name: this.name,
|
||||
subscriptions: this.selected
|
||||
}
|
||||
}).then(() => {
|
||||
showInfo(`成功保存订阅:${this.name}!`)
|
||||
}).catch(() => {
|
||||
showError(`发生错误,无法保存订阅!`)
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
discard() {
|
||||
this.$router.back();
|
||||
}
|
||||
},
|
||||
created() {
|
||||
const name = this.$route.params.name;
|
||||
const collection = this.$store.state.collections[name] || {};
|
||||
this.$store.commit("SET_NAV_TITLE", collection.name ? `组合订阅编辑 -- ${collection.name}` : "新建组合订阅");
|
||||
this.name = collection.name;
|
||||
this.selected = collection.subscriptions || [];
|
||||
},
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
<v-container>
|
||||
<v-card class="mb-4">
|
||||
<v-subheader>基本信息</v-subheader>
|
||||
<v-form class="pl-4 pr-4 pb-4" v-model="formState.basicValid">
|
||||
<v-form class="pl-4 pr-4 pb-0" v-model="formState.basicValid">
|
||||
<v-text-field
|
||||
v-model="options.name"
|
||||
class="mt-2"
|
||||
@ -11,20 +11,41 @@
|
||||
label="订阅名称"
|
||||
placeholder="填入订阅名称,名称需唯一"
|
||||
/>
|
||||
<v-text-field
|
||||
<v-textarea
|
||||
v-model="options.url"
|
||||
class="mt-2"
|
||||
rows="2"
|
||||
:rules="validations.urlRules"
|
||||
required
|
||||
label="订阅链接"
|
||||
placeholder="填入机场原始订阅链接"
|
||||
/>
|
||||
</v-form>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn icon @click="save"><v-icon>save_alt</v-icon></v-btn>
|
||||
<v-btn icon @click="discard"><v-icon>settings_backup_restore</v-icon></v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
<v-card class="mb-4">
|
||||
<v-subheader>常用选项</v-subheader>
|
||||
<v-form class="pl-4 pr-4">
|
||||
<v-item-group>
|
||||
<v-radio-group
|
||||
v-model="options.useless"
|
||||
dense
|
||||
class="mt-0 mb-0"
|
||||
>
|
||||
过滤非法节点
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-radio label="保留" value="KEEP"/>
|
||||
</v-col>
|
||||
<v-col>
|
||||
<v-radio label="删除" value="REMOVE"/>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-radio-group>
|
||||
<v-radio-group
|
||||
v-model="options.flag"
|
||||
dense
|
||||
@ -32,13 +53,15 @@
|
||||
>
|
||||
国旗
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-radio label="默认" value="DEFAULT"/>
|
||||
</v-col>
|
||||
<v-col>
|
||||
<v-radio label="添加国旗" value="ADD"/>
|
||||
</v-col>
|
||||
<v-col>
|
||||
<v-radio label="删除国旗" value="REMOVE"/>
|
||||
</v-col>
|
||||
<v-col></v-col>
|
||||
</v-row>
|
||||
</v-radio-group>
|
||||
|
||||
@ -66,16 +89,16 @@
|
||||
dense
|
||||
class="mt-0 mb-0"
|
||||
>
|
||||
证书验证
|
||||
跳过证书验证
|
||||
<v-row>
|
||||
<v-col>
|
||||
<v-radio label="默认" value="DEFAULT"/>
|
||||
</v-col>
|
||||
<v-col>
|
||||
<v-radio label="强制开启" value="FORCE_OPEN"/>
|
||||
<v-radio label="强制跳过" value="FORCE_OPEN"/>
|
||||
</v-col>
|
||||
<v-col>
|
||||
<v-radio label="强制关闭" value="FORCE_CLOSE"/>
|
||||
<v-radio label="强制验证" value="FORCE_CLOSE"/>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-radio-group>
|
||||
@ -109,31 +132,12 @@
|
||||
</v-btn>
|
||||
</v-subheader>
|
||||
<v-divider></v-divider>
|
||||
<region-filter/>
|
||||
<keyword-filter/>
|
||||
<regex-filter/>
|
||||
<sort></sort>
|
||||
<keyword-sort></keyword-sort>
|
||||
</v-card>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// const operations = [
|
||||
// {
|
||||
// type: "Region Filter",
|
||||
// name: "区域过滤",
|
||||
// desc: "按照区域过滤节点",
|
||||
// }
|
||||
// ];
|
||||
|
||||
import RegionFilter from "@/components/RegionFilter";
|
||||
import KeywordFilter from "@/components/KeywordFilter";
|
||||
import RegexFilter from "@/components/RegexFilter";
|
||||
import Sort from "@/components/Sort";
|
||||
import KeywordSort from "@/components/KeywordSort";
|
||||
export default {
|
||||
components: {KeywordSort, Sort, RegexFilter, KeywordFilter, RegionFilter},
|
||||
data: function () {
|
||||
return {
|
||||
validations: {
|
||||
@ -152,39 +156,98 @@ export default {
|
||||
options: {
|
||||
name: "",
|
||||
url: "",
|
||||
useless: "KEEP",
|
||||
udp: "DEFAULT",
|
||||
flag: "ADD",
|
||||
flag: "DEFAULT",
|
||||
scert: "DEFAULT",
|
||||
tfo: "DEFAULT",
|
||||
process: [],
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
options: {
|
||||
handler(opt) {
|
||||
if (this.formState.basicValid) {
|
||||
console.log(`FORM UPDATED: ${JSON.stringify(opt)}`)
|
||||
}
|
||||
},
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
created() {
|
||||
const name = this.$route.params.name;
|
||||
const sub = (!!name || name === 'UNTITLED') ? {} : this.$store.state.subscriptions[name];
|
||||
const sub = (typeof name === 'undefined' || name === 'UNTITLED') ? {} : this.$store.state.subscriptions[name];
|
||||
this.$store.commit("SET_NAV_TITLE", sub.name ? `订阅编辑 -- ${sub.name}` : "新建订阅");
|
||||
this.options = {
|
||||
...this.options,
|
||||
name: sub.name,
|
||||
url: sub.url,
|
||||
udp: "DEFAULT",
|
||||
flag: "ADD",
|
||||
scert: "DEFAULT",
|
||||
tfo: "DEFAULT"
|
||||
this.options = loadSubscription(this.options, sub);
|
||||
},
|
||||
methods: {
|
||||
save() {
|
||||
if (this.options.name && this.options.url) {
|
||||
const sub = buildSubscription(this.options);
|
||||
if (this.$route.params.name !== "UNTITLED") {
|
||||
this.$store.dispatch("UPDATE_SUBSCRIPTION", {
|
||||
name: this.$route.params.name,
|
||||
sub
|
||||
});
|
||||
} else {
|
||||
this.$store.dispatch("NEW_SUBSCRIPTION", sub);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
discard() {
|
||||
this.$router.back();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function loadSubscription(options, sub) {
|
||||
options = {
|
||||
...options,
|
||||
name: sub.name,
|
||||
url: sub.url
|
||||
}
|
||||
// flag
|
||||
for (const p of (sub.process || [])) {
|
||||
switch (p.type) {
|
||||
case 'Useless Filter':
|
||||
options.useless = "REMOVE";
|
||||
break
|
||||
case 'Flag Operator':
|
||||
options.flag = p.args[0] ? "ADD" : "REMOVE";
|
||||
break
|
||||
case 'Set Property Operator':
|
||||
options[p.args[0]] = p.args[1] ? "FORCE_OPEN" : "FORCE_CLOSE";
|
||||
break
|
||||
}
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
function buildSubscription(options) {
|
||||
const sub = {
|
||||
name: options.name,
|
||||
url: options.url,
|
||||
process: []
|
||||
};
|
||||
// useless filter
|
||||
if (options.useless === 'REMOVE') {
|
||||
sub.process.push({
|
||||
type: "Useless Filter"
|
||||
});
|
||||
}
|
||||
// flag
|
||||
if (options.flag !== 'DEFAULT') {
|
||||
sub.process.push({
|
||||
type: "Flag Operator",
|
||||
args: [options.flag === 'ADD']
|
||||
});
|
||||
}
|
||||
// udp, tfo, scert
|
||||
for (const opt of ['udp', 'tfo', 'scert']) {
|
||||
if (options[opt] !== 'DEFAULT') {
|
||||
sub.process.push({
|
||||
type: "Set Property Operator",
|
||||
args: [opt, options[opt] === 'FORCE_OPEN']
|
||||
});
|
||||
}
|
||||
}
|
||||
// for (const p of options.process) {
|
||||
//
|
||||
// }
|
||||
return sub;
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
@ -120,6 +120,13 @@
|
||||
>
|
||||
<v-icon>mdi-plus</v-icon>
|
||||
</v-btn>
|
||||
<v-btn
|
||||
fab
|
||||
color="primary"
|
||||
@click="createCol"
|
||||
>
|
||||
<v-icon>create_new_folder</v-icon>
|
||||
</v-btn>
|
||||
</v-speed-dial>
|
||||
</v-fab-transition>
|
||||
<v-dialog fullscreen hide-overlay transition="dialog-bottom-transition" v-model="showProxyList" scrollable>
|
||||
@ -209,7 +216,7 @@ export default {
|
||||
this.$store.commit("SET_SUCCESS_MESSAGE", "成功复制订阅链接");
|
||||
break
|
||||
case 'EDIT':
|
||||
this.$router.push(`/sub-edit/${collection.name}`);
|
||||
this.$router.push(`/collection-edit/${collection.name}`);
|
||||
break
|
||||
case 'DELETE':
|
||||
this.$store.dispatch("DELETE_COLLECTION", collection.name);
|
||||
|
18
web/vercel.json
Normal file
18
web/vercel.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "sub-store",
|
||||
"version": 2,
|
||||
"builds": [
|
||||
{
|
||||
"src": "package.json",
|
||||
"use": "@vercel/static-build"
|
||||
}
|
||||
],
|
||||
"routes": [
|
||||
{
|
||||
"src": "/(js|css|img)/.*",
|
||||
"headers": { "cache-control": "max-age=31536000, immutable" }
|
||||
},
|
||||
{ "handle": "filesystem" },
|
||||
{ "src": ".*", "dest": "/" }
|
||||
]
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user