from .naming import PluginScaffoldNaming class PluginVue2FrontendScaffoldTemplateBuilder: """ Vue 2 前端插件模板内容构建器。 """ @staticmethod def build_view(plugin_id: str) -> str: """ 构建 Vue 2 前端视图模板内容。 :param plugin_id: 插件ID :return: 前端视图模板内容 """ return f""" """ @staticmethod def build_crud_view(plugin_id: str) -> str: """ 构建 Vue 2 前端 CRUD 视图模板内容。 :param plugin_id: 插件ID :return: 前端 CRUD 视图模板内容 """ class_name = PluginScaffoldNaming.to_class_name(plugin_id) return f""" """ @staticmethod def build_readme(plugin_id: str) -> str: """ 构建 Vue 2 前端 README 内容。 :param plugin_id: 插件ID :return: 前端 README 内容 """ return f"""# {plugin_id} frontend plugin Vue 2 frontend plugin scaffold generated by `ruoyi plugin create`. ## Structure - `api/`: request wrappers used by plugin pages. - `views/`: Vue pages loaded by backend menu component paths. - `../../tests/plugins/{plugin_id}/`: frontend node tests for plugin view resolving. ## Route Component The backend menu component `plugin/{plugin_id}/index` maps to: ```text plugins/{plugin_id}/views/index.vue ``` """ @staticmethod def build_test(plugin_id: str) -> str: """ 构建 Vue 2 前端插件 node 测试样例。 :param plugin_id: 插件ID :return: 前端插件测试样例内容 """ return f"""const assert = require('assert').strict const {{ existsSync }} = require('fs') const {{ resolve }} = require('path') const {{ resolvePluginViewPath }} = require('../../../src/utils/pluginViewResolver') const frontendRoot = resolve(__dirname, '../../..') const viewPath = resolve(frontendRoot, 'plugins', '{plugin_id}', 'views', 'index.vue') assert.equal(resolvePluginViewPath('plugin/{plugin_id}/index'), './{plugin_id}/views/index.vue') assert.equal(existsSync(viewPath), true) console.log('{plugin_id} plugin frontend tests passed') """