转移页面
This commit is contained in:
parent
446cc7c92b
commit
6d08cee899
2
.env.development
Normal file
2
.env.development
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# 开发环境
|
||||||
|
VUE_APP_API=/api
|
1072
package-lock.json
generated
1072
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -8,8 +8,15 @@
|
|||||||
"lint": "vue-cli-service lint"
|
"lint": "vue-cli-service lint"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"axios": "^0.19.2",
|
||||||
|
"bulma": "^0.8.2",
|
||||||
"core-js": "^3.6.4",
|
"core-js": "^3.6.4",
|
||||||
"vue": "^2.6.11"
|
"markdown-it": "^10.0.0",
|
||||||
|
"node-sass": "^4.14.0",
|
||||||
|
"sass-loader": "^8.0.2",
|
||||||
|
"vue": "^2.6.11",
|
||||||
|
"vue-axios": "^2.1.5",
|
||||||
|
"vue2-ace-editor": "0.0.15"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vue/cli-plugin-babel": "~4.3.0",
|
"@vue/cli-plugin-babel": "~4.3.0",
|
||||||
|
@ -1,17 +1,33 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
<head>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||||
</head>
|
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||||
<body>
|
<script>
|
||||||
<noscript>
|
var authConfig = {
|
||||||
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
roots: [
|
||||||
</noscript>
|
{
|
||||||
<div id="app"></div>
|
id: "team",
|
||||||
<!-- built files will be auto injected -->
|
name: "TeamDrive",
|
||||||
</body>
|
pass: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "root",
|
||||||
|
name: "PriveDrive",
|
||||||
|
pass: "",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
};
|
||||||
|
window.gds = JSON.parse(JSON.stringify(authConfig.roots.map(it => it.name)));
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
52
src/App.vue
52
src/App.vue
@ -1,28 +1,50 @@
|
|||||||
<template>
|
<template>
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<img alt="Vue logo" src="./assets/logo.png">
|
<Layout ref="layout" />
|
||||||
<HelloWorld msg="Welcome to Your Vue.js App"/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import HelloWorld from './components/HelloWorld.vue'
|
import Layout from './view/Layout'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'App',
|
name: 'App',
|
||||||
components: {
|
components: {
|
||||||
HelloWorld
|
Layout
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
config: {
|
||||||
|
siteName: "",
|
||||||
|
title: "",
|
||||||
|
path: "",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
let favicon = document.createElement("link");
|
||||||
|
favicon.rel = "icon";
|
||||||
|
favicon.href =
|
||||||
|
"https://cdn.jsdelivr.net/gh/Aicirou/goindex-theme-acrou/favicon.ico";
|
||||||
|
document.getElementsByTagName("head")[0].appendChild(favicon);
|
||||||
|
|
||||||
|
let scripts = [
|
||||||
|
"https://at.alicdn.com/t/font_1760192_ud2z97y6kba.js"
|
||||||
|
];
|
||||||
|
scripts.map((item) => {
|
||||||
|
let script = document.createElement("script");
|
||||||
|
script.type = "text/javascript";
|
||||||
|
script.src = item;
|
||||||
|
document.getElementsByTagName("head")[0].appendChild(script);
|
||||||
|
});
|
||||||
|
|
||||||
|
let path = window.location.pathname;
|
||||||
|
this.config.path = path;
|
||||||
|
this.config.siteName = document.getElementsByTagName(
|
||||||
|
"title"
|
||||||
|
)[0].innerText;
|
||||||
|
this.config.title = this.siteName + "-" + decodeURI(path);
|
||||||
|
this.$refs.layout.render(this.config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
|
||||||
#app {
|
|
||||||
font-family: Avenir, Helvetica, Arial, sans-serif;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
text-align: center;
|
|
||||||
color: #2c3e50;
|
|
||||||
margin-top: 60px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
62
src/assets/style/public.scss
Normal file
62
src/assets/style/public.scss
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
@import "~/node_modules/bulma"
|
||||||
|
|
||||||
|
// .icon {
|
||||||
|
// width: 2em;
|
||||||
|
// height: 2em;
|
||||||
|
// vertical-align: -0.5em;
|
||||||
|
// fill: currentColor;
|
||||||
|
// overflow: hidden;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// th,td {
|
||||||
|
// border: 0 !important;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .breadcrumb:not(:last-child) {
|
||||||
|
// margin: 0.5rem 0;
|
||||||
|
// padding: 0 0.75em;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .breadcrumb ul {
|
||||||
|
// flex-wrap: inherit;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .breadcrumb li:not(:first-child):not(:last-child) {
|
||||||
|
// margin: 0 5px;
|
||||||
|
// overflow: hidden;
|
||||||
|
// text-overflow: ellipsis;
|
||||||
|
// white-space: nowrap;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// body {
|
||||||
|
// overflow: hidden;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .section {
|
||||||
|
// padding: 0.5rem 0.5rem 1.5rem 0.5rem;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .container {
|
||||||
|
// max-width: 980px !important;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .table {
|
||||||
|
// width: 100%;
|
||||||
|
// table-layout: fixed;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .table td {
|
||||||
|
// overflow: hidden;
|
||||||
|
// text-overflow: ellipsis;
|
||||||
|
// white-space: nowrap;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .no-content {
|
||||||
|
// background: url(https://s1.hdslb.com/bfs/static/jinkela/search/asserts/no-data.png) no-repeat 50% 50%;
|
||||||
|
// height: 240px;
|
||||||
|
// line-height: 240px;
|
||||||
|
// text-align: center;
|
||||||
|
// margin-top: 20px;
|
||||||
|
// }
|
||||||
|
|
||||||
|
$widescreen-enabled: false
|
@ -1,58 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="hello">
|
|
||||||
<h1>{{ msg }}</h1>
|
|
||||||
<p>
|
|
||||||
For a guide and recipes on how to configure / customize this project,<br>
|
|
||||||
check out the
|
|
||||||
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
|
|
||||||
</p>
|
|
||||||
<h3>Installed CLI Plugins</h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
|
|
||||||
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
|
|
||||||
</ul>
|
|
||||||
<h3>Essential Links</h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
|
|
||||||
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
|
|
||||||
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
|
|
||||||
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
|
|
||||||
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
|
|
||||||
</ul>
|
|
||||||
<h3>Ecosystem</h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
|
|
||||||
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
|
|
||||||
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
|
|
||||||
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
|
|
||||||
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'HelloWorld',
|
|
||||||
props: {
|
|
||||||
msg: String
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
|
||||||
<style scoped>
|
|
||||||
h3 {
|
|
||||||
margin: 40px 0 0;
|
|
||||||
}
|
|
||||||
ul {
|
|
||||||
list-style-type: none;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
li {
|
|
||||||
display: inline-block;
|
|
||||||
margin: 0 10px;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: #42b983;
|
|
||||||
}
|
|
||||||
</style>
|
|
44
src/main.js
44
src/main.js
@ -1,7 +1,51 @@
|
|||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import App from './App.vue'
|
import App from './App.vue'
|
||||||
|
import axios from '@utils/axios'
|
||||||
|
import VueAxios from 'vue-axios'
|
||||||
|
// import bulma from 'bulma'
|
||||||
|
|
||||||
|
var styles = [
|
||||||
|
// 'https://cdn.jsdelivr.net/npm/bulma@0.8.1/css/bulma.min.css',
|
||||||
|
// 'https://cdn.jsdelivr.net/npm/bulma-tooltip@3.0.2/dist/css/bulma-tooltip.min.css',
|
||||||
|
'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css',
|
||||||
|
]
|
||||||
|
styles.forEach(item=>{
|
||||||
|
document.write(`<link rel="stylesheet" href="${item}">`);
|
||||||
|
})
|
||||||
|
|
||||||
|
// document.write(
|
||||||
|
// `<style>.icon{width:2em;height:2em;vertical-align:-0.5em;fill:currentColor;overflow:hidden;}th,td{border:0 !important;}.breadcrumb:not(:last-child){margin:0.5rem 0;padding:0 0.75em;}.breadcrumb ul{flex-wrap:inherit;}.breadcrumb li:not(:first-child):not(:last-child){margin:0 5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
||||||
|
// body {
|
||||||
|
// overflow: hidden;
|
||||||
|
// }
|
||||||
|
// .section {
|
||||||
|
// padding: 0.5rem 0.5rem 1.5rem 0.5rem;
|
||||||
|
// }
|
||||||
|
// .container {
|
||||||
|
// max-width: 980px !important;
|
||||||
|
// }
|
||||||
|
// .table{
|
||||||
|
// width:100%;
|
||||||
|
// table-layout: fixed;
|
||||||
|
// }
|
||||||
|
// .table td{
|
||||||
|
// overflow: hidden;
|
||||||
|
// text-overflow: ellipsis;
|
||||||
|
// white-space: nowrap;
|
||||||
|
// }
|
||||||
|
// .no-content {
|
||||||
|
// background: url(https://s1.hdslb.com/bfs/static/jinkela/search/asserts/no-data.png) no-repeat 50% 50%;
|
||||||
|
// height: 240px;
|
||||||
|
// line-height: 240px;
|
||||||
|
// text-align: center;
|
||||||
|
// margin-top: 20px;
|
||||||
|
// }
|
||||||
|
// </style>`
|
||||||
|
// );
|
||||||
|
|
||||||
Vue.config.productionTip = false
|
Vue.config.productionTip = false
|
||||||
|
// Vue.use(bulma)
|
||||||
|
Vue.use(VueAxios,axios)
|
||||||
|
|
||||||
new Vue({
|
new Vue({
|
||||||
render: h => h(App),
|
render: h => h(App),
|
||||||
|
104
src/utils/AcrouUtil.js
Normal file
104
src/utils/AcrouUtil.js
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
import axios from "@utils/axios";
|
||||||
|
|
||||||
|
export const getQueryString = (path, param) => {
|
||||||
|
if (!path) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
var args = getURLParameters(path);
|
||||||
|
return args[param] ? args[param] : "";
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getURLParameters = (url) =>
|
||||||
|
url
|
||||||
|
.match(/([^?=&]+)(=([^&]*))/g)
|
||||||
|
.reduce(
|
||||||
|
(a, v) => (
|
||||||
|
(a[v.slice(0, v.indexOf("="))] = v.slice(v.indexOf("=") + 1)), a
|
||||||
|
),
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
|
||||||
|
// console.log(getURLParameters("/Movies/xx.mp4?a=view&y=123"));
|
||||||
|
|
||||||
|
//console.log(getQueryString("/Movies/xx.mp4?a=view&y=123", "y"));
|
||||||
|
|
||||||
|
export function get_file(option, callback) {
|
||||||
|
var path = option.path;
|
||||||
|
var modifiedTime = option.file.modifiedTime;
|
||||||
|
var key = "file_path_" + path + modifiedTime;
|
||||||
|
var data = localStorage.getItem(key);
|
||||||
|
data = "";
|
||||||
|
if (data) {
|
||||||
|
return callback(data);
|
||||||
|
} else {
|
||||||
|
axios.get(path).then((res) => {
|
||||||
|
var data = res.data;
|
||||||
|
localStorage.setItem(key, data);
|
||||||
|
callback(data);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function get_filex(path, callback) {
|
||||||
|
axios.get(path).then((res) => {
|
||||||
|
var data = res.data;
|
||||||
|
callback(data);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//时间转换
|
||||||
|
export function utc2beijing(utc_datetime) {
|
||||||
|
// 转为正常的时间格式 年-月-日 时:分:秒
|
||||||
|
var T_pos = utc_datetime.indexOf("T");
|
||||||
|
var Z_pos = utc_datetime.indexOf("Z");
|
||||||
|
var year_month_day = utc_datetime.substr(0, T_pos);
|
||||||
|
var hour_minute_second = utc_datetime.substr(T_pos + 1, Z_pos - T_pos - 1);
|
||||||
|
var new_datetime = year_month_day + " " + hour_minute_second; // 2017-03-31 08:02:06
|
||||||
|
|
||||||
|
// 处理成为时间戳
|
||||||
|
var timestamp = new Date(Date.parse(new_datetime));
|
||||||
|
timestamp = timestamp.getTime();
|
||||||
|
timestamp = timestamp / 1000;
|
||||||
|
|
||||||
|
// 增加8个小时,北京时间比utc时间多八个时区
|
||||||
|
var unixtimestamp = timestamp + 8 * 60 * 60;
|
||||||
|
|
||||||
|
// 时间戳转为时间
|
||||||
|
var unixtimestamp = new Date(unixtimestamp * 1000);
|
||||||
|
var year = 1900 + unixtimestamp.getYear();
|
||||||
|
var month = "0" + (unixtimestamp.getMonth() + 1);
|
||||||
|
var date = "0" + unixtimestamp.getDate();
|
||||||
|
var hour = "0" + unixtimestamp.getHours();
|
||||||
|
var minute = "0" + unixtimestamp.getMinutes();
|
||||||
|
var second = "0" + unixtimestamp.getSeconds();
|
||||||
|
return (
|
||||||
|
year +
|
||||||
|
"-" +
|
||||||
|
month.substring(month.length - 2, month.length) +
|
||||||
|
"-" +
|
||||||
|
date.substring(date.length - 2, date.length) +
|
||||||
|
" " +
|
||||||
|
hour.substring(hour.length - 2, hour.length) +
|
||||||
|
":" +
|
||||||
|
minute.substring(minute.length - 2, minute.length) +
|
||||||
|
":" +
|
||||||
|
second.substring(second.length - 2, second.length)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function formatFileSize(bytes) {
|
||||||
|
if (bytes >= 1000000000) {
|
||||||
|
bytes = (bytes / 1000000000).toFixed(2) + " GB";
|
||||||
|
} else if (bytes >= 1000000) {
|
||||||
|
bytes = (bytes / 1000000).toFixed(2) + " MB";
|
||||||
|
} else if (bytes >= 1000) {
|
||||||
|
bytes = (bytes / 1000).toFixed(2) + " KB";
|
||||||
|
} else if (bytes > 1) {
|
||||||
|
bytes = bytes + " bytes";
|
||||||
|
} else if (bytes == 1) {
|
||||||
|
bytes = bytes + " byte";
|
||||||
|
} else {
|
||||||
|
bytes = "";
|
||||||
|
}
|
||||||
|
return bytes;
|
||||||
|
}
|
9
src/utils/axios.js
Normal file
9
src/utils/axios.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import axios from "axios";
|
||||||
|
|
||||||
|
// 创建一个 axios 实例
|
||||||
|
const service = axios.create({
|
||||||
|
baseURL: process.env.VUE_APP_API ? process.env.VUE_APP_API : "",
|
||||||
|
// timeout: 30000,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default service;
|
98
src/view/Layout.vue
Normal file
98
src/view/Layout.vue
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<Navbar ref="navbar"></Navbar>
|
||||||
|
<section class="section">
|
||||||
|
<div class="container">
|
||||||
|
<go-headmd :option="headmd" v-show="headmd.display"></go-headmd>
|
||||||
|
<bread-crumb ref="breadcrumb"></bread-crumb>
|
||||||
|
<go-list
|
||||||
|
ref="list"
|
||||||
|
v-on:headmd="setHeadmd"
|
||||||
|
v-on:readmemd="setReadmemd"
|
||||||
|
v-show="show=='list'"
|
||||||
|
></go-list>
|
||||||
|
<hr />
|
||||||
|
<go-readmemd :option="readmemd" v-show="readmemd.display"></go-readmemd>
|
||||||
|
<go-video ref="govideo" v-show="show=='video'"></go-video>
|
||||||
|
<go-text :option="text" v-show="show=='text'"></go-text>
|
||||||
|
<go-img ref="goimg" v-show="show=='img'"></go-img>
|
||||||
|
<Footer></Footer>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Navbar from "./common/Navbar"
|
||||||
|
import BreadCrumb from "./common/BreadCrumb"
|
||||||
|
import GoVideo from "./page/GoVideo"
|
||||||
|
import Markdown from "./common/Markdown"
|
||||||
|
import GoList from "./page/GoList"
|
||||||
|
import GoText from "./page/GoText"
|
||||||
|
import GoImg from "./page/GoImg"
|
||||||
|
import Footer from "./common/Footer"
|
||||||
|
import { getQueryString } from "@utils/AcrouUtil"
|
||||||
|
export default {
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
path: "",
|
||||||
|
show: "list",
|
||||||
|
text: { file: {}, path: "" },
|
||||||
|
headmd: { display: false, file: {}, path: "" },
|
||||||
|
readmemd: { display: false, file: {}, path: "" },
|
||||||
|
};
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
Navbar: Navbar,
|
||||||
|
BreadCrumb: BreadCrumb,
|
||||||
|
GoHeadmd: Markdown,
|
||||||
|
GoReadmemd: Markdown,
|
||||||
|
GoList: GoList,
|
||||||
|
GoVideo: GoVideo,
|
||||||
|
GoText: GoText,
|
||||||
|
GoImg: GoImg,
|
||||||
|
Footer: Footer,
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
render (config) {
|
||||||
|
let path = config.path;
|
||||||
|
this.$refs.navbar.siteName = config.siteName;
|
||||||
|
this.$refs.breadcrumb.render(path);
|
||||||
|
var param = window.location.search;
|
||||||
|
var reg = /\/\d+:$/g;
|
||||||
|
if (path.match(reg) || param.indexOf("?a=view") < 0) {
|
||||||
|
this.show = "list";
|
||||||
|
this.$refs.list.render(path, getQueryString(param, "q"));
|
||||||
|
} else {
|
||||||
|
var name = path.split("/").pop();
|
||||||
|
var ext = name.split(".").pop().toLowerCase();
|
||||||
|
if (
|
||||||
|
"|html|php|css|go|java|js|json|txt|sh|md|".indexOf(`|${ext}|`) >= 0
|
||||||
|
) {
|
||||||
|
this.show = "text";
|
||||||
|
this.text = {
|
||||||
|
path: path,
|
||||||
|
file: {},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("|mp4|webm|mkv|".indexOf(`|${ext}|`) >= 0) {
|
||||||
|
this.show = "video";
|
||||||
|
this.$refs.govideo.render(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("|bmp|jpg|jpeg|png|gif|".indexOf(`|${ext}|`) >= 0) {
|
||||||
|
this.show = "img";
|
||||||
|
this.$refs.goimg.render(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setHeadmd (val) {
|
||||||
|
this.headmd = val;
|
||||||
|
},
|
||||||
|
setReadmemd (val) {
|
||||||
|
this.readmemd = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
49
src/view/common/BreadCrumb.vue
Normal file
49
src/view/common/BreadCrumb.vue
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<template>
|
||||||
|
<nav class="breadcrumb is-hidden-mobile is-hidden-touch" aria-label="breadcrumbs">
|
||||||
|
<ul>
|
||||||
|
<li v-show="navs.length>0">
|
||||||
|
<a href="/">首页</a>
|
||||||
|
</li>
|
||||||
|
<li
|
||||||
|
v-for="(item,index) in navs"
|
||||||
|
:class="(index+1)==navs.length?'is-active':''"
|
||||||
|
v-bind:key="index"
|
||||||
|
>
|
||||||
|
<a v-if="(index+1)==navs.length" aria-current="page" href="#">{{item.title}}</a>
|
||||||
|
<a v-else :href="item.path">{{item.title}}</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
navs: [],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
render (path) {
|
||||||
|
var arr = path.trim("/").split("/");
|
||||||
|
var p = "/";
|
||||||
|
if (arr.length > 0) {
|
||||||
|
var navs = [];
|
||||||
|
for (var i in arr) {
|
||||||
|
var n = arr[i];
|
||||||
|
if (n == "") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
n = decodeURI(n);
|
||||||
|
p += n + "/";
|
||||||
|
navs.push({
|
||||||
|
path: p,
|
||||||
|
title: n,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.navs = navs;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
38
src/view/common/Footer.vue
Normal file
38
src/view/common/Footer.vue
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content has-text-centered is-fixed-bottom">
|
||||||
|
<div class="columns is-mobile is-centered">
|
||||||
|
<div class="field is-grouped is-grouped-multiline">
|
||||||
|
<div class="control">
|
||||||
|
<div class="tags has-addons">
|
||||||
|
<a
|
||||||
|
class="tag is-dark"
|
||||||
|
href="https://github.com/Aicirou/goindex-theme-acrou"
|
||||||
|
>goindex-template-acrou</a>
|
||||||
|
<span class="tag is-light">
|
||||||
|
MIT
|
||||||
|
<i class="fab fa-github"></i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
content: "",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
0
src/view/common/Head.vue
Normal file
0
src/view/common/Head.vue
Normal file
40
src/view/common/Markdown.vue
Normal file
40
src/view/common/Markdown.vue
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content" v-html="content"></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { get_file } from "@utils/AcrouUtil"
|
||||||
|
import MarkdownIt from 'markdown-it'
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
option: {},
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
option (val) {
|
||||||
|
this.render()
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
content: `
|
||||||
|
<center>
|
||||||
|
<i class="fa fa-spinner fa-pulse fa-2x fa-fw"></i>
|
||||||
|
<span class="sr-only">Loading...</span>
|
||||||
|
</center>
|
||||||
|
`,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
components: {},
|
||||||
|
methods: {
|
||||||
|
render () {
|
||||||
|
const md = new MarkdownIt()
|
||||||
|
// if (window.md == undefined) {
|
||||||
|
// window.md = window.markdownit();
|
||||||
|
// }
|
||||||
|
get_file(this.option, (data) => {
|
||||||
|
this.content = md.render(data);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
112
src/view/common/Navbar.vue
Normal file
112
src/view/common/Navbar.vue
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
<template>
|
||||||
|
<nav class="navbar is-dark" role="navigation" aria-label="main navigation">
|
||||||
|
<div class="container">
|
||||||
|
<div class="navbar-brand">
|
||||||
|
<a class="navbar-item" href="/">
|
||||||
|
<h3 class="title is-3 has-text-white">{{siteName}}</h3>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
role="button"
|
||||||
|
:class="'navbar-burger burger '+(isActive?'is-active':'')"
|
||||||
|
aria-label="menu"
|
||||||
|
aria-expanded="false"
|
||||||
|
data-target="navbarBasicExample"
|
||||||
|
@click="burgerClick"
|
||||||
|
>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
<span aria-hidden="true"></span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div id="navbarBasicExample" :class="'navbar-menu '+(isActive?'is-active':'')">
|
||||||
|
<div class="navbar-start">
|
||||||
|
<div
|
||||||
|
class="navbar-item has-dropdown is-hoverable"
|
||||||
|
v-if="gds.length>0 && getCurrGD.length>0"
|
||||||
|
>
|
||||||
|
<a class="navbar-link">{{this.currgd.name}}</a>
|
||||||
|
<div class="navbar-dropdown is-boxed">
|
||||||
|
<a
|
||||||
|
class="navbar-item"
|
||||||
|
@click="changeItem(item)"
|
||||||
|
v-for="(item,index) in getCurrGD"
|
||||||
|
v-bind:key="index"
|
||||||
|
>{{item.name}}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="navbar-end">
|
||||||
|
<div class="navbar-item">
|
||||||
|
<div class="field is-grouped">
|
||||||
|
<p class="control has-icons-left" style="width:100%;">
|
||||||
|
<input
|
||||||
|
class="input is-rounded has-text-grey"
|
||||||
|
@keyup.enter="query"
|
||||||
|
v-model="param"
|
||||||
|
type="search"
|
||||||
|
placeholder="Search or jump to…"
|
||||||
|
/>
|
||||||
|
<span class="icon is-small is-left">
|
||||||
|
<i class="fas fa-search"></i>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a
|
||||||
|
class="navbar-item"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
title="Download on GitHub"
|
||||||
|
href="https://github.com/Aicirou/goindex-theme-acrou"
|
||||||
|
>
|
||||||
|
<i class="fab fa-github"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
created () {
|
||||||
|
if (window.gds && window.gds.length > 0) {
|
||||||
|
this.gds = window.gds.map((item, index) => {
|
||||||
|
return {
|
||||||
|
name: item,
|
||||||
|
id: ":" + index + "/",
|
||||||
|
};
|
||||||
|
});
|
||||||
|
this.currgd = this.gds[0];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
siteName: "",
|
||||||
|
param: "",
|
||||||
|
currgd: {},
|
||||||
|
gds: [],
|
||||||
|
isActive: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
changeItem (item) {
|
||||||
|
this.currgd = item;
|
||||||
|
},
|
||||||
|
query () {
|
||||||
|
if (this.param) {
|
||||||
|
location.href = "/?q=" + this.param;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
burgerClick () {
|
||||||
|
this.isActive = !this.isActive
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
getCurrGD () {
|
||||||
|
return this.gds.filter((item) => item.name !== this.currgd.name);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
22
src/view/page/GoImg.vue
Normal file
22
src/view/page/GoImg.vue
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content">
|
||||||
|
<figure class="image">
|
||||||
|
<img :src="imgurl" />
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
imgurl: "",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
render (path) {
|
||||||
|
this.imgurl = path;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
213
src/view/page/GoList.vue
Normal file
213
src/view/page/GoList.vue
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<progress
|
||||||
|
v-if="loading"
|
||||||
|
class="progress is-small is-primary"
|
||||||
|
style="height: .25rem;"
|
||||||
|
max="100"
|
||||||
|
>15%</progress>
|
||||||
|
<table class="table is-hoverable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th
|
||||||
|
v-for="(column,index) in columns"
|
||||||
|
v-bind:key="index"
|
||||||
|
:class="column.class"
|
||||||
|
:style="column.style"
|
||||||
|
>{{column.name}}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="(file,index) in files" v-bind:key="index">
|
||||||
|
<td @click="go(file.path)">
|
||||||
|
<svg class="icon" aria-hidden="true">
|
||||||
|
<use :xlink:href="getIcon(file.mimeType)" />
|
||||||
|
</svg>
|
||||||
|
{{file.name}}
|
||||||
|
</td>
|
||||||
|
<td class="is-hidden-mobile is-hidden-touch">{{file.modifiedTime}}</td>
|
||||||
|
<td class="is-hidden-mobile is-hidden-touch">{{file.size}}</td>
|
||||||
|
<td
|
||||||
|
class="is-hidden-mobile is-hidden-touch"
|
||||||
|
v-if="file.mimeType!=='application/vnd.google-apps.folder'"
|
||||||
|
>
|
||||||
|
<span class="icon">
|
||||||
|
<i class="fa fa-download" @click="go(file.path,'down')"></i>
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div v-show="files.length==0" class="has-text-centered no-content"></div>
|
||||||
|
<nav class="pagination is-centered is-small" role="navigation" aria-label="pagination">
|
||||||
|
<a class="pagination-previous">Previous</a>
|
||||||
|
<a class="pagination-next">Next page</a>
|
||||||
|
<ul class="pagination-list">
|
||||||
|
<li>
|
||||||
|
<a class="pagination-link" aria-label="Goto page 1">1</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<span class="pagination-ellipsis">…</span>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="pagination-link" aria-label="Goto page 45">45</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="pagination-link is-current" aria-label="Page 46" aria-current="page">46</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="pagination-link" aria-label="Goto page 47">47</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<span class="pagination-ellipsis">…</span>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="pagination-link" aria-label="Goto page 86">86</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { utc2beijing, formatFileSize } from "@utils/AcrouUtil";
|
||||||
|
export default {
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
page: {},
|
||||||
|
files: [],
|
||||||
|
loading: false,
|
||||||
|
columns: [
|
||||||
|
{ name: "文件", style: "" },
|
||||||
|
{
|
||||||
|
name: "修改时间",
|
||||||
|
style: "width:20%",
|
||||||
|
class: "is-hidden-mobile is-hidden-touch",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "大小",
|
||||||
|
style: "width:10%",
|
||||||
|
class: "is-hidden-mobile is-hidden-touch",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "下载",
|
||||||
|
style: "width:6%",
|
||||||
|
class: "is-hidden-mobile is-hidden-touch",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
icon: {
|
||||||
|
"application/vnd.google-apps.folder": "icon-morenwenjianjia",
|
||||||
|
"video/mp4": "icon-mp",
|
||||||
|
"video/x-matroska": "icon-mkv",
|
||||||
|
"video/x-msvideo": "icon-avi",
|
||||||
|
"video/webm": "icon-webm",
|
||||||
|
"text/plain": "icon-txt",
|
||||||
|
"text/markdown": "icon-markdown",
|
||||||
|
"text/x-ssa": "icon-ASS",
|
||||||
|
"application/x-subrip": "icon-srt",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
render (path, param) {
|
||||||
|
this.loading = true;
|
||||||
|
var password = localStorage.getItem("password" + path);
|
||||||
|
var p = {
|
||||||
|
password: password || null,
|
||||||
|
page_token: null,
|
||||||
|
page_index: 0
|
||||||
|
};
|
||||||
|
this.axios
|
||||||
|
.post(path, p)
|
||||||
|
.then((res) => {
|
||||||
|
var data = res.data.data;
|
||||||
|
if (
|
||||||
|
typeof data != "null" &&
|
||||||
|
data.hasOwnProperty("error") &&
|
||||||
|
data.error.code == "401"
|
||||||
|
) {
|
||||||
|
var pass = prompt("目录加密,请输入密码", "");
|
||||||
|
localStorage.setItem("password" + path, pass);
|
||||||
|
if (pass != null && pass != "") {
|
||||||
|
this.render(path);
|
||||||
|
} else {
|
||||||
|
history.go(-1);
|
||||||
|
}
|
||||||
|
} else if (typeof data != "null") {
|
||||||
|
var exts = [
|
||||||
|
"html",
|
||||||
|
"php",
|
||||||
|
"css",
|
||||||
|
"go",
|
||||||
|
"java",
|
||||||
|
"js",
|
||||||
|
"json",
|
||||||
|
"txt",
|
||||||
|
"sh",
|
||||||
|
"md",
|
||||||
|
"mp4",
|
||||||
|
"webm",
|
||||||
|
"mkv",
|
||||||
|
"bmp",
|
||||||
|
"jpg",
|
||||||
|
"jpeg",
|
||||||
|
"png",
|
||||||
|
"gif",
|
||||||
|
];
|
||||||
|
try {
|
||||||
|
this.files = data.files.map((item) => {
|
||||||
|
var p = path + item.name;
|
||||||
|
// HEAD.md
|
||||||
|
if (item.name === "HEAD.md") {
|
||||||
|
this.$emit("headmd", {
|
||||||
|
display: true,
|
||||||
|
file: item,
|
||||||
|
path: p,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// REDEME.md
|
||||||
|
if (item.name === "README.md") {
|
||||||
|
this.$emit("readmemd", {
|
||||||
|
display: true,
|
||||||
|
file: item,
|
||||||
|
path: p,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var ext = p.split(".").pop();
|
||||||
|
if (exts.indexOf(`${ext}`) >= 0) {
|
||||||
|
p += "?a=view";
|
||||||
|
} else {
|
||||||
|
if (item.mimeType === "application/vnd.google-apps.folder") {
|
||||||
|
p += "/";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
path: p,
|
||||||
|
...item,
|
||||||
|
modifiedTime: utc2beijing(item.modifiedTime),
|
||||||
|
size: formatFileSize(item.size),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.loading = false;
|
||||||
|
})
|
||||||
|
.catch((ex) => {
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
go (path, type = "view") {
|
||||||
|
if (type === "down") {
|
||||||
|
path = path.replace("?a=view", "");
|
||||||
|
}
|
||||||
|
location.href = path;
|
||||||
|
},
|
||||||
|
getIcon (type) {
|
||||||
|
return "#" + (this.icon[type] ? this.icon[type] : "icon-weizhi");
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
54
src/view/page/GoText.vue
Normal file
54
src/view/page/GoText.vue
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content">
|
||||||
|
<editor
|
||||||
|
ref="myEditor"
|
||||||
|
v-model="content"
|
||||||
|
@init="editorInit"
|
||||||
|
lang="html"
|
||||||
|
theme="chrome"
|
||||||
|
width="100%"
|
||||||
|
height="600"
|
||||||
|
></editor>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { get_file } from "@utils/AcrouUtil"
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
option: {
|
||||||
|
path: "",
|
||||||
|
file: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
option (val) {
|
||||||
|
this.content = "加载中...";
|
||||||
|
get_file(this.option, (data) => {
|
||||||
|
this.content = data;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
content: "",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
editor: require("vue2-ace-editor"),
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
render (path) { },
|
||||||
|
editorInit (editor) {
|
||||||
|
editor.setFontSize(18)
|
||||||
|
editor.session.setUseWrapMode(false);
|
||||||
|
require("brace/ext/language_tools"); //language extension prerequsite...
|
||||||
|
require("brace/mode/html");
|
||||||
|
require("brace/mode/javascript"); //language
|
||||||
|
require("brace/mode/less");
|
||||||
|
require("brace/theme/chrome");
|
||||||
|
require("brace/snippets/javascript"); //snippet
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
91
src/view/page/GoVideo.vue
Normal file
91
src/view/page/GoVideo.vue
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content">
|
||||||
|
<iframe
|
||||||
|
width="100%"
|
||||||
|
height="600px;"
|
||||||
|
:src="apiurl"
|
||||||
|
frameborder="0"
|
||||||
|
border="0"
|
||||||
|
marginwidth="0"
|
||||||
|
marginheight="0"
|
||||||
|
scrolling="no"
|
||||||
|
allowtransparency="true"
|
||||||
|
allowfullscreen="true"
|
||||||
|
></iframe>
|
||||||
|
<div class="card">
|
||||||
|
<header class="card-header">
|
||||||
|
<p class="card-header-title">
|
||||||
|
<span class="icon">
|
||||||
|
<i class="fa fa-play-circle" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
播放 /
|
||||||
|
<span class="icon">
|
||||||
|
<i class="fa fa-download" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
下载
|
||||||
|
</p>
|
||||||
|
</header>
|
||||||
|
<div class="card-content">
|
||||||
|
<div class="content">
|
||||||
|
<div class="columns is-mobile is-multiline has-text-centered">
|
||||||
|
<div class="column" v-for="(item,index) in players" v-bind:key="index">
|
||||||
|
<p class="heading">
|
||||||
|
<a :href="item.scheme+(item.name==='Thunder'?getThunder:videourl)">
|
||||||
|
<figure class="image is-48x48" style="margin: 0 auto;">
|
||||||
|
<img class="icon" :src="item.icon" />
|
||||||
|
</figure>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<p class>{{item.name}}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
apiurl: "",
|
||||||
|
videourl: "",
|
||||||
|
players: [
|
||||||
|
{
|
||||||
|
name: 'IINA',
|
||||||
|
icon: 'https://www.iina.io/images/iina-icon-60.png',
|
||||||
|
scheme: 'iina://weblink?url='
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'PotPlayer',
|
||||||
|
icon: 'https://cloud.jsonpop.cn/go2index/player/potplayer.png',
|
||||||
|
scheme: 'potplayer://'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'VLC',
|
||||||
|
icon: 'https://cloud.jsonpop.cn/go2index/player/vlc.png',
|
||||||
|
scheme: 'vlc://'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Thunder',
|
||||||
|
icon: 'https://cloud.jsonpop.cn/go2index/player/thunder.png',
|
||||||
|
scheme: 'thunder://'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
render (path) {
|
||||||
|
this.videourl = window.location.origin + path;
|
||||||
|
this.apiurl =
|
||||||
|
"https://api.jsonpop.cn/demo/blplyaer/?url=" + this.videourl;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
getThunder () {
|
||||||
|
return Buffer.from("AA" + this.videourl + "ZZ").toString("base64")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
35
vue.config.js
Normal file
35
vue.config.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
function resolve (dir) {
|
||||||
|
return path.join(__dirname, dir);
|
||||||
|
}
|
||||||
|
module.exports = {
|
||||||
|
lintOnSave: true,
|
||||||
|
css: {
|
||||||
|
loaderOptions: {
|
||||||
|
// 设置 scss 公用变量文件
|
||||||
|
sass: {
|
||||||
|
prependData: `@import '~@/assets/style/public.scss';`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
devServer: {
|
||||||
|
proxy: {
|
||||||
|
"/api": {
|
||||||
|
target: "https://ossdev.achirou.workers.dev/",
|
||||||
|
ws: true,
|
||||||
|
changeOrigin: true,
|
||||||
|
pathRewrite: {
|
||||||
|
"^/api": "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
chainWebpack: (config) => {
|
||||||
|
config.resolve.alias
|
||||||
|
.set('@', resolve('src'))
|
||||||
|
.set('@assets', resolve('src/assets'))
|
||||||
|
.set('@utils', resolve('src/utils'))
|
||||||
|
.set('@node_modules', resolve('node_modules'))
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user