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; }