/**
* 模块结构生成工具
*
* 生成符合 M8 规范的目录结构和文件模板
*/
import { generateVue2Template, generateVue2ScssTemplate, generateVue2RouterTemplate, generateVue2StoreTemplate, generateVue2MockTemplate } from "../templates/vue2.js";
import { generateVue3Template, generateVue3ScssTemplate, generateVue3RouterTemplate, generateVue3StoreTemplate, generateVue3MockTemplate } from "../templates/vue3.js";
export interface GenerateModuleOptions {
moduleName: string;
pageName: string;
vueVersion: "2" | "3";
author: string;
description: string;
skipMock?: boolean; // 是否跳过生成 mock 文件
}
export interface GeneratedFile {
path: string;
content: string;
}
/**
* 生成模块文件列表
*/
export function generateModuleFiles(options: GenerateModuleOptions): GeneratedFile[] {
const { moduleName, pageName, vueVersion, author, description, skipMock = false } = options;
const now = new Date();
const dateStr = formatDate(now);
const files: GeneratedFile[] = [];
if (vueVersion === "2") {
// Vue 2 模板
files.push({
path: `${pageName}.vue`,
content: generateVue2Template({ moduleName, pageName, author, description, dateStr }),
});
files.push({
path: `css/${moduleName}.scss`,
content: generateVue2ScssTemplate({ moduleName }),
});
files.push({
path: "router.js",
content: generateVue2RouterTemplate({ moduleName, pageName }),
});
files.push({
path: "store.js",
content: generateVue2StoreTemplate({ moduleName }),
});
// 默认生成 mock 文件,除非明确跳过
if (!skipMock) {
files.push({
path: "mock.js",
content: generateVue2MockTemplate({ moduleName }),
});
}
} else {
// Vue 3 模板
files.push({
path: `${pageName}.vue`,
content: generateVue3Template({ moduleName, pageName, author, description, dateStr }),
});
files.push({
path: `css/${moduleName}.scss`,
content: generateVue3ScssTemplate({ moduleName }),
});
files.push({
path: "router.js",
content: generateVue3RouterTemplate({ moduleName, pageName }),
});
files.push({
path: "store.ts",
content: generateVue3StoreTemplate({ moduleName }),
});
// 默认生成 mock 文件,除非明确跳过
if (!skipMock) {
files.push({
path: "mock.js",
content: generateVue3MockTemplate({ moduleName }),
});
}
}
// 添加 images 目录占位
files.push({
path: "images/.gitkeep",
content: "# 图片资源目录\n",
});
return files;
}
/**
* 格式化日期
*/
function formatDate(date: Date): string {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
const hours = String(date.getHours()).padStart(2, "0");
const minutes = String(date.getMinutes()).padStart(2, "0");
const seconds = String(date.getSeconds()).padStart(2, "0");
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}