150 lines
2.9 KiB
JavaScript
150 lines
2.9 KiB
JavaScript
import Vue from "vue";
|
|
import VueRouter from "vue-router";
|
|
import EditNote from "@/views/EditNote.vue";
|
|
import ViewNote from "@/views/ViewNote.vue";
|
|
import ErrorRoute from "@/views/ErrorRoute.vue";
|
|
import ErrorNote from "@/views/ErrorNote.vue";
|
|
import { getKeyMeta, getNoteMeta } from "@/api/note";
|
|
import { getStoreKey } from "@/api/lock";
|
|
import storage from "@/libs/storage";
|
|
|
|
Vue.use(VueRouter);
|
|
|
|
var keyMeta = null;
|
|
var noteMeta = null;
|
|
var errorMeta = null;
|
|
|
|
function getKeyMetaParam() {
|
|
return keyMeta;
|
|
}
|
|
|
|
function getNoteMetaParam() {
|
|
return noteMeta;
|
|
}
|
|
|
|
function getErrorMetaParam() {
|
|
return errorMeta;
|
|
}
|
|
|
|
function getNoteView() {
|
|
if (errorMeta) {
|
|
return;
|
|
}
|
|
|
|
let path = location.pathname;
|
|
|
|
let key = path.substring(1, path.length);
|
|
|
|
if (keyMeta && keyMeta.key) {
|
|
key = keyMeta.key;
|
|
}
|
|
|
|
let regKey = /^[abcdefhikmnopqstuvwxyz23456789]{16}$/;
|
|
if (!regKey.test(key)) {
|
|
errorMeta = 100002;
|
|
return ErrorNote;
|
|
}
|
|
|
|
if (keyMeta && keyMeta.key) {
|
|
//firstEdit
|
|
return EditNote;
|
|
}
|
|
|
|
//set noteMeta
|
|
noteMeta = getNoteMeta(key);
|
|
|
|
//server error
|
|
if (!noteMeta) {
|
|
errorMeta = 100006;
|
|
return ErrorNote;
|
|
}
|
|
|
|
//invalidated key
|
|
if (!noteMeta.key) {
|
|
errorMeta = 100002;
|
|
return ErrorNote;
|
|
}
|
|
|
|
//validated state
|
|
if (1 == noteMeta.state) {
|
|
return ViewNote;
|
|
}
|
|
|
|
//deleted
|
|
if (0 == noteMeta.state) {
|
|
let storeKey = getStoreKey(key);
|
|
storage.local.delete(storeKey);
|
|
// user deleted
|
|
if (noteMeta.ttl > 0) {
|
|
errorMeta = 100003;
|
|
return ErrorNote;
|
|
} else {// timeout
|
|
errorMeta = 100004;
|
|
return ErrorNote;
|
|
}
|
|
}
|
|
|
|
if (null == noteMeta.state) {
|
|
let storeKey = getStoreKey(key);
|
|
//if has storage , then edit
|
|
if (storage.local.getText(storeKey)) {
|
|
return EditNote;
|
|
} else {
|
|
//storage is empty
|
|
let df = storage.session.getText(storeKey + "_delete")
|
|
if (df) {//unsubmitted,user deleted.
|
|
errorMeta = 100003;
|
|
return ErrorNote;
|
|
} else {//unsubmitted
|
|
errorMeta = 100005;
|
|
return ErrorNote;
|
|
}
|
|
}
|
|
}
|
|
|
|
// other exception
|
|
errorMeta = 100001;
|
|
return ErrorNote;
|
|
}
|
|
|
|
function getHomeRedirect() {
|
|
let path = location.pathname;
|
|
if (path != "/") {
|
|
return;
|
|
}
|
|
|
|
//setKeyMeta
|
|
keyMeta = getKeyMeta();
|
|
|
|
// server error
|
|
if (!keyMeta) {
|
|
errorMeta = 100006;
|
|
return "/error_"+errorMeta;
|
|
}
|
|
|
|
return "/" + keyMeta.key;
|
|
}
|
|
|
|
const routes = [
|
|
{
|
|
path: "/",
|
|
name: "home",
|
|
redirect: getHomeRedirect(),
|
|
},
|
|
{ path: "/error_:code([0-9]{6})", component: ErrorNote },
|
|
{
|
|
path: "/:name([a-z0-9]{10,20})",
|
|
name: "note",
|
|
component: getNoteView(),
|
|
meta: { keyMeta: getKeyMetaParam(), noteMeta: getNoteMetaParam(), errorMeta: getErrorMetaParam() },
|
|
},
|
|
{ path: "/:path(.*)", component: ErrorRoute }
|
|
];
|
|
|
|
const router = new VueRouter({
|
|
routes,
|
|
mode: "history",
|
|
});
|
|
|
|
export default router;
|