搜索
重置
新增
{{{{ scope.row.status === '0' ? '正常' : '停用' }}}}
修改
删除
正常
停用
"""
@staticmethod
def build_readme(plugin_id: str) -> str:
"""
构建前端 README 内容。
:param plugin_id: 插件ID
:return: 前端 README 内容
"""
return f"""# {plugin_id} frontend plugin
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:
"""
构建前端插件 node 测试样例。
:param plugin_id: 插件ID
:return: 前端插件测试样例内容
"""
return f"""import assert from 'node:assert/strict'
import {{ existsSync }} from 'node:fs'
import {{ dirname, resolve }} from 'node:path'
import {{ fileURLToPath }} from 'node:url'
import {{ resolvePluginViewPath }} from '../../../src/utils/pluginViewResolver.js'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
const frontendRoot = resolve(__dirname, '../../..')
const viewPath = resolve(frontendRoot, 'plugins', '{plugin_id}', 'views', 'index.vue')
assert.equal(resolvePluginViewPath('plugin/{plugin_id}/index'), '../../../plugins/{plugin_id}/views/index.vue')
assert.equal(existsSync(viewPath), true)
console.log('{plugin_id} plugin frontend tests passed')
"""
class PluginFrontendScaffoldTemplateBuilder:
"""
根据目标 Vue 版本分派前端插件模板。
"""
@staticmethod
def build_api(plugin_id: str) -> str:
return PluginVue3FrontendScaffoldTemplateBuilder.build_api(plugin_id)
@staticmethod
def build_crud_api(plugin_id: str) -> str:
return PluginVue3FrontendScaffoldTemplateBuilder.build_crud_api(plugin_id)
@classmethod
def build_view(cls, plugin_id: str, frontend_version: FrontendVersion = 'vue3') -> str:
return cls._resolve_builder(frontend_version).build_view(plugin_id)
@classmethod
def build_crud_view(cls, plugin_id: str, frontend_version: FrontendVersion = 'vue3') -> str:
return cls._resolve_builder(frontend_version).build_crud_view(plugin_id)
@classmethod
def build_readme(cls, plugin_id: str, frontend_version: FrontendVersion = 'vue3') -> str:
return cls._resolve_builder(frontend_version).build_readme(plugin_id)
@classmethod
def build_test(cls, plugin_id: str, frontend_version: FrontendVersion = 'vue3') -> str:
return cls._resolve_builder(frontend_version).build_test(plugin_id)
@staticmethod
def _resolve_builder(
frontend_version: FrontendVersion,
) -> type[PluginVue2FrontendScaffoldTemplateBuilder] | type[PluginVue3FrontendScaffoldTemplateBuilder]:
if frontend_version == 'vue2':
return PluginVue2FrontendScaffoldTemplateBuilder
if frontend_version == 'vue3':
return PluginVue3FrontendScaffoldTemplateBuilder
raise ValueError(f'不支持的 Vue 版本:{frontend_version}')