fix(ssr): добавить route mixin для SSR совместимости Ziggy

- Создан RouteMixin.js для предоставления route() всем компонентам
- Обновлён ssr.js с правильным импортом Router и созданием route функции
- Исправлен BackButton.vue с проверкой this.route перед использованием
- Добавлена обработка ошибок для route() с fallback на '#'

Решает ошибку: ReferenceError: route is not defined at Proxy.resolvedLink

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
F4ilji
2026-04-07 22:41:14 +05:00
co-authored by Qwen-Coder
parent 3798d01da1
commit d7c6d23a6b
4 changed files with 442 additions and 13 deletions
+27
View File
@@ -0,0 +1,27 @@
/**
* SSR-safe route mixin
* Provides the route() function to all Vue components during SSR
*/
export function createRouteMixin(pageProps, RouterClass) {
return {
methods: {
route(name, params = {}, absolute = false) {
try {
const ziggyConfig = {
...pageProps.ziggy,
location: pageProps.ziggy?.location
? new URL(pageProps.ziggy.location)
: new URL(process.env.APP_URL || 'http://localhost'),
};
const router = new RouterClass(name, params, absolute, ziggyConfig);
return router.toString();
} catch (error) {
console.error('Ziggy route error:', error.message);
return '#';
}
}
}
};
}
+4 -12
View File
@@ -5,6 +5,7 @@ import { renderToString } from '@vue/server-renderer'
import { createSSRApp, h } from 'vue'
import { ZiggyVue } from '../../vendor/tightenco/ziggy/dist/vue.m';
import { default as Router } from '../../vendor/tightenco/ziggy/dist/index.m.js';
import { createRouteMixin } from './mixins/RouteMixin.js';
createServer(page =>
createInertiaApp({
@@ -33,18 +34,9 @@ createServer(page =>
ziggyConfig.location = new URL(process.env.APP_URL || 'http://localhost');
}
// Создаем функцию route с правильной конфигурацией
const route = (name, params, absolute, config) => {
const ziggyConfigForRoute = {
...page.props.ziggy,
location: ziggyConfig.location,
};
const router = new Router(name, params, absolute, ziggyConfigForRoute);
return router.toString();
};
// Делаем route доступным глобально
ssrApp.config.globalProperties.route = route;
// Добавляем route mixin для всех компонентов
const routeMixin = createRouteMixin(page, Router);
ssrApp.mixin(routeMixin);
return ssrApp
.use(plugin)