130 lines
3.3 KiB
JavaScript
130 lines
3.3 KiB
JavaScript
import { getNoteMetaNew } from "@/api/note";
|
|
import VueRouter from "vue-router";
|
|
import EditNote from "@/views/EditNote.vue";
|
|
import ViewNote from "@/views/ViewNote.vue";
|
|
import ErrorNote from "@/views/ErrorNote.vue";
|
|
import storage from "@/libs/storage";
|
|
import { getStoreKey } from "@/api/lock";
|
|
|
|
|
|
export default function getRouter() {
|
|
let path = location.pathname;
|
|
let key = path.substring(1, path.length);
|
|
//let errorMeta = null;
|
|
|
|
if (path == "/") {
|
|
//errorMeta = 100002;
|
|
return errorRouter(100002);
|
|
}
|
|
|
|
let keyMeta = storage.session.getObject("keyMeta");
|
|
|
|
let regKey = /^[abcdefhikmnopqstuvwxyz23456789]{16}$/;
|
|
|
|
if (!regKey.test(key)) {
|
|
return errorRouter(100002);
|
|
}
|
|
|
|
if (keyMeta && keyMeta.key) {
|
|
// if(document.referrer=="/"){
|
|
// }
|
|
return noteRouter(EditNote, keyMeta, null);
|
|
}
|
|
|
|
return getNoteMetaNew(key).then(function (resp) {
|
|
if (null == resp || null == resp.data) {
|
|
return errorRouter(100006);
|
|
}
|
|
|
|
let result = resp.data;
|
|
if (result.code != '000000') {
|
|
return errorRouter(parseInt(result.code));
|
|
}
|
|
|
|
let noteMeta = result.data;
|
|
if (null == noteMeta) {
|
|
return errorRouter(100001);
|
|
}
|
|
if (null == noteMeta.key) {
|
|
return errorRouter(100002);
|
|
}
|
|
|
|
//view
|
|
if (1 == noteMeta.state) {
|
|
return noteRouter(ViewNote, keyMeta, noteMeta);
|
|
}
|
|
|
|
//deleted
|
|
if (0 == noteMeta.state) {
|
|
let storeKey = getStoreKey(key);
|
|
storage.local.delete(storeKey);
|
|
// user deleted
|
|
if (noteMeta.ttl > 0) {
|
|
// errorMeta = 100003;
|
|
return errorRouter(100003);
|
|
} else {// timeout
|
|
// errorMeta = 100004;
|
|
return errorRouter(100004);
|
|
}
|
|
}
|
|
|
|
//edit or unsubmitted
|
|
if (null == noteMeta.state) {
|
|
let storeKey = getStoreKey(key);
|
|
return storage.local.getText(storeKey).then(function (storeInfo) {
|
|
//if has storage , then edit
|
|
if (null != storeInfo) {
|
|
return noteRouter(EditNote, keyMeta, noteMeta);
|
|
}
|
|
|
|
//storage is empty
|
|
let df = storage.session.getText(storeKey + "_delete")
|
|
if (df) {//unsubmitted,user deleted.
|
|
// errorMeta = 100003;
|
|
return errorRouter(100003);
|
|
} else {//unsubmitted
|
|
// errorMeta = 100005;
|
|
return errorRouter(100005);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
function noteRouter(noteView, keyMeta, noteMeta) {
|
|
const routes = [
|
|
{
|
|
path: "/:name([a-z0-9]{10,20})",
|
|
name: "note",
|
|
component: noteView,
|
|
meta: { keyMeta: keyMeta, noteMeta: noteMeta },
|
|
}
|
|
];
|
|
|
|
const router = new VueRouter({
|
|
routes,
|
|
mode: "history",
|
|
});
|
|
return router;
|
|
}
|
|
|
|
|
|
function errorRouter(errorCode) {
|
|
const routes = [
|
|
{
|
|
path: "/error_:code([0-9]{6})",
|
|
name: "error",
|
|
component: ErrorNote,
|
|
errorMeta: errorCode
|
|
}
|
|
];
|
|
|
|
const router = new VueRouter({
|
|
routes,
|
|
mode: "history",
|
|
});
|
|
return router;
|
|
}
|
|
|