|
@@ -0,0 +1,79 @@
|
|
|
|
+export default async function (to, from) {
|
|
|
|
+ //获得全局url
|
|
|
|
+ const { $webUrl, $CwebUrl } = useNuxtApp();
|
|
|
|
+ if(to.path == '/' || to.path == '/404'){
|
|
|
|
+ //如果目标路由是/,或者/404 无需验证
|
|
|
|
+ }else{
|
|
|
|
+ // to是目标路由对象,from是来源路由对象
|
|
|
|
+ console.log('进入路由中间件,目标路由:', to.path,"当前路由:",from.path);
|
|
|
|
+ //拆分目标路由
|
|
|
|
+ let parts = parseRoute(to.path)
|
|
|
|
+ console.log(parts)
|
|
|
|
+
|
|
|
|
+ const responseRoute = await $fetch($webUrl + '/web/checkWebsiteRoute', {
|
|
|
|
+ headers: {
|
|
|
|
+ 'Content-Type': 'application/json',
|
|
|
|
+ 'Userurl': $CwebUrl,
|
|
|
|
+ 'Origin': $CwebUrl
|
|
|
|
+ },
|
|
|
|
+ query: parts
|
|
|
|
+ })
|
|
|
|
+ console.log(responseRoute)
|
|
|
|
+ if(responseRoute.code == 200){
|
|
|
|
+ //如果路由存在,不做任何操作
|
|
|
|
+ }else{
|
|
|
|
+ return navigateTo('/404')
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//提取路由
|
|
|
|
+function parseRoute(url) {
|
|
|
|
+ const parts = url.split('/').filter(Boolean); // 分割并过滤空字符串
|
|
|
|
+ const lastPart = parts[parts.length - 1];
|
|
|
|
+
|
|
|
|
+ // 提取 id(数字.html 的数字部分)
|
|
|
|
+ const idMatch = lastPart.match(/^(\d+)\.html$/);
|
|
|
|
+ const id = idMatch ? idMatch[1] : undefined;
|
|
|
|
+
|
|
|
|
+ // 如果最后是数字.html、index.html 或 list-数字.html,则去掉它
|
|
|
|
+ const isSpecialRoute = idMatch || lastPart === "index.html" || lastPart.startsWith("list-");
|
|
|
|
+ if (isSpecialRoute) {
|
|
|
|
+ parts.pop();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let all_route, last_route;
|
|
|
|
+
|
|
|
|
+ // 如果路径以 xiangcunshangcheng 开头
|
|
|
|
+ if (parts[0] === "xiangcunshangcheng") {
|
|
|
|
+ if( parts.length > 1){
|
|
|
|
+ if(parts[parts.length - 1] != 'gongying' && parts[parts.length - 1] != 'qiugou'){
|
|
|
|
+ // 否则按原逻辑处理
|
|
|
|
+ all_route = parts.join('/');
|
|
|
|
+ last_route = parts.length > 0 ? parts[parts.length - 1] : null;
|
|
|
|
+ }else{
|
|
|
|
+ // all_route = 去掉最后一层
|
|
|
|
+ all_route = parts.slice(0, -1).join('/');
|
|
|
|
+ // last_route = 新的最后一层
|
|
|
|
+ last_route = parts.length > 1 ? parts[parts.length - 2] : null;
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ // 否则按原逻辑处理
|
|
|
|
+ all_route = parts.join('/');
|
|
|
|
+ last_route = parts.length > 0 ? parts[parts.length - 1] : null;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ // 否则按原逻辑处理
|
|
|
|
+ all_route = parts.join('/');
|
|
|
|
+ last_route = parts.length > 0 ? parts[parts.length - 1] : null;
|
|
|
|
+ }
|
|
|
|
+ // 返回结果(只有数字.html 时才包含 id)
|
|
|
|
+ const result = {
|
|
|
|
+ all_route,
|
|
|
|
+ last_route
|
|
|
|
+ };
|
|
|
|
+ if (id !== undefined) {
|
|
|
|
+ result.id = id;
|
|
|
|
+ }
|
|
|
|
+ return result;
|
|
|
|
+}
|