- {{ task.title }}
- {{ new Date(task.created_at).toLocaleString('ru') }}
-
-
-
-
-
+
+ в стеке
+ {{ new Date(task.created_at).toLocaleString('ru') }}
+
+
+
+ Да, всё верно
+
+
+ Детализировать
+
+
-
-
+
+
\ No newline at end of file
diff --git a/frontend/src/views/TreeView.vue b/frontend/src/views/TreeView.vue
index d1c7fe5..329a33e 100644
--- a/frontend/src/views/TreeView.vue
+++ b/frontend/src/views/TreeView.vue
@@ -3,8 +3,10 @@
-
-
Дерево задач
-
Пока пусто — дерево появится в M3.
-
+
+
\ No newline at end of file
diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts
index 0beaf31..f46107e 100644
--- a/frontend/vite.config.ts
+++ b/frontend/vite.config.ts
@@ -1,9 +1,52 @@
-import { defineConfig } from 'vite'
+import { createReadStream, existsSync, statSync, cpSync } from 'node:fs'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
+import { defineConfig, type Plugin } from 'vite'
import vue from '@vitejs/plugin-vue'
-// Dev: /api проксируется на backend. В проде nginx отдаёт статику и проксирует сам.
+// kit.css ссылается на шрифты/иконки через абсолютные /assets/... URL —
+// по контракту кита хост обязан отдавать его dist/assets на /assets.
+// В dev — middleware, в build — копирование в dist/assets.
+const kitAssetsDir = path.resolve(
+ fileURLToPath(new URL('.', import.meta.url)),
+ 'node_modules/gnexus-ui-kit/dist/assets',
+)
+
+const mimeByExt: Record = {
+ '.css': 'text/css',
+ '.js': 'text/javascript',
+ '.svg': 'image/svg+xml',
+ '.png': 'image/png',
+ '.jpg': 'image/jpeg',
+ '.woff': 'font/woff',
+ '.woff2': 'font/woff2',
+ '.ttf': 'font/ttf',
+}
+
+function kitAssetsPlugin(): Plugin {
+ return {
+ name: 'gnexus-kit-assets',
+ configureServer(server) {
+ server.middlewares.use((req, res, next) => {
+ const url = (req.url ?? '').split('?')[0]
+ if (!url.startsWith('/assets/')) return next()
+ const file = path.join(kitAssetsDir, url.slice('/assets/'.length))
+ if (!existsSync(file) || !statSync(file).isFile()) return next()
+ res.setHeader('Content-Type', mimeByExt[path.extname(file)] ?? 'application/octet-stream')
+ createReadStream(file).pipe(res)
+ })
+ },
+ closeBundle() {
+ cpSync(kitAssetsDir, path.resolve(fileURLToPath(new URL('.', import.meta.url)), 'dist/assets'), {
+ recursive: true,
+ })
+ },
+ }
+}
+
+// Dev: /api и /auth проксируются на backend. В проде nginx отдаёт статику и проксирует сам.
export default defineConfig({
- plugins: [vue()],
+ plugins: [vue(), kitAssetsPlugin()],
server: {
port: 15134, // 5173 занят другими проектами; мнемоника: 1 + API 8134
proxy: {