|
@@ -1,8 +1,41 @@
|
|
|
import { fileURLToPath, URL } from 'node:url'
|
|
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'
|
|
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/
|
|
// https://vite.dev/config/
|
|
|
export default defineConfig(({ mode }): UserConfig => {
|
|
export default defineConfig(({ mode }): UserConfig => {
|
|
|
const root = process.cwd()
|
|
const root = process.cwd()
|
|
@@ -11,7 +44,7 @@ export default defineConfig(({ mode }): UserConfig => {
|
|
|
|
|
|
|
|
return {
|
|
return {
|
|
|
base: '/h5/',
|
|
base: '/h5/',
|
|
|
- plugins: [vue()].filter(Boolean),
|
|
|
|
|
|
|
+ plugins: [vue(), trainingPageHtmlPlugin()].filter(Boolean),
|
|
|
resolve: {
|
|
resolve: {
|
|
|
alias: {
|
|
alias: {
|
|
|
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
|
'@': fileURLToPath(new URL('./src', import.meta.url)),
|