Forráskód Böngészése

配置动态标题实现

yuanmingze 3 napja
szülő
commit
16441f4bc0
2 módosított fájl, 38 hozzáadás és 5 törlés
  1. 3 3
      src/router/routes.ts
  2. 35 2
      vite.config.ts

+ 3 - 3
src/router/routes.ts

@@ -76,19 +76,19 @@ export const routes: RouteRecordRaw[] = [
     path: '/compliance-plan',
     name: 'CompliancePlan',
     component: () => import('@/views/compliance-plan/index.vue'),
-    meta: { title: '页面跳转中', requiresAuth: false },
+    meta: { title: '医药代表合规培训', requiresAuth: false },
   },
   {
     path: '/compliance-registration',
     name: 'ComplianceRegistration',
     component: () => import('@/views/compliance-registration/index.vue'),
-    meta: { title: '页面跳转中', requiresAuth: false },
+    meta: { title: '医药代表合规培训', requiresAuth: false },
   },
   {
     path: '/training-entry',
     name: 'TrainingEntry',
     component: () => import('@/views/training-entry/index.vue'),
-    meta: { title: '页面跳转中', requiresAuth: false },
+    meta: { title: '医药代表合规培训', requiresAuth: false },
   },
   {
     path: '/:pathMatch(.*)*',

+ 35 - 2
vite.config.ts

@@ -1,8 +1,41 @@
 import { fileURLToPath, URL } from 'node:url'
+import { mkdir, readFile, writeFile } from 'node:fs/promises'
+import { resolve } from 'node:path'
 
-import { defineConfig, loadEnv, UserConfig } from 'vite'
+import { defineConfig, loadEnv, UserConfig, type Plugin, type ResolvedConfig } from 'vite'
 import vue from '@vitejs/plugin-vue'
 
+const TRAINING_PAGE_TITLE = '医药代表合规培训'
+const TRAINING_PAGE_PATHS = ['compliance-plan', 'compliance-registration', 'training-entry']
+
+const trainingPageHtmlPlugin = (): Plugin => {
+  let resolvedConfig: ResolvedConfig
+
+  return {
+    name: 'training-page-html',
+    apply: 'build',
+    configResolved(config) {
+      resolvedConfig = config
+    },
+    async closeBundle() {
+      const outputDirectory = resolve(resolvedConfig.root, resolvedConfig.build.outDir)
+      const indexHtml = await readFile(resolve(outputDirectory, 'index.html'), 'utf8')
+      const trainingPageHtml = indexHtml.replace(
+        /<title>.*?<\/title>/,
+        `<title>${TRAINING_PAGE_TITLE}</title>`,
+      )
+
+      await Promise.all(
+        TRAINING_PAGE_PATHS.map(async (pagePath) => {
+          const pageDirectory = resolve(outputDirectory, pagePath)
+          await mkdir(pageDirectory, { recursive: true })
+          await writeFile(resolve(pageDirectory, 'index.html'), trainingPageHtml, 'utf8')
+        }),
+      )
+    },
+  }
+}
+
 // https://vite.dev/config/
 export default defineConfig(({ mode }): UserConfig => {
   const root = process.cwd()
@@ -11,7 +44,7 @@ export default defineConfig(({ mode }): UserConfig => {
 
   return {
     base: '/h5/',
-    plugins: [vue()].filter(Boolean),
+    plugins: [vue(), trainingPageHtmlPlugin()].filter(Boolean),
     resolve: {
       alias: {
         '@': fileURLToPath(new URL('./src', import.meta.url)),