first commit

This commit is contained in:
lihansani
2026-07-13 15:37:05 +08:00
commit 8b11aa2efc
299 changed files with 206339 additions and 0 deletions

View File

@@ -0,0 +1,100 @@
import json
from system.code_template.backend.mapping import component_to_search_type
from utils.ru_convert import RuleConvert
def generator_backend_api(api_info):
form_info = api_info.form_info
form_info_dict = json.loads(form_info)
filter_txt = ''
field_code = ''
for item in form_info_dict.get('schemas'):
field_code = f''''{item['field']}', {field_code}'''
column = f'''
{item['field']}: {component_to_search_type[item['component']]} = Field(None, alias='{item['field']}')'''
filter_txt = column + filter_txt
api_txt = f'''from typing import List
from .model import {RuleConvert.to_upper_camel_case(api_info.code)}
from ninja import Field, ModelSchema, Query, Router
from ninja.pagination import paginate
from utils.fu_crud import (
ImportSchema,
create,
delete,
export_data,
import_data,
retrieve,
update,
)
from utils.fu_ninja import FuFilters, MyPagination
router = Router()
# 设置过滤字段
class Filters(FuFilters):
{filter_txt}
# 设置请求接收字段
class {RuleConvert.to_upper_camel_case(api_info.code)}SchemaIn(ModelSchema):
class Config:
model = {RuleConvert.to_upper_camel_case(api_info.code)}
model_exclude = ['create_datetime', 'update_datetime', 'belong_dept', 'modifier', 'creator', 'id']
# 设置响应字段
class {RuleConvert.to_upper_camel_case(api_info.code)}SchemaOut(ModelSchema):
class Config:
model = {RuleConvert.to_upper_camel_case(api_info.code)}
model_fields = '__all__'
# 创建{RuleConvert.to_upper_camel_case(api_info.code)}
@router.post('/{api_info.code}', response={RuleConvert.to_upper_camel_case(api_info.code)}SchemaOut)
def create_{api_info.code}(request, data: {RuleConvert.to_upper_camel_case(api_info.code)}SchemaIn):
{api_info.code} = create(request, data, {RuleConvert.to_upper_camel_case(api_info.code)})
return {api_info.code}
# 删除{RuleConvert.to_upper_camel_case(api_info.code)}
@router.delete('/{api_info.code}/{{id}}')
def delete_{api_info.code}(request, id: int):
delete(id, {RuleConvert.to_upper_camel_case(api_info.code)})
return {{'success': True}}
# 更新{RuleConvert.to_upper_camel_case(api_info.code)}
@router.put('/{api_info.code}/{{id}}', response={RuleConvert.to_upper_camel_case(api_info.code)}SchemaOut)
def update_{api_info.code}(request, id: int, data: {RuleConvert.to_upper_camel_case(api_info.code)}SchemaIn):
{api_info.code} = update(request, id, data, {RuleConvert.to_upper_camel_case(api_info.code)})
return {api_info.code}
# 获取{RuleConvert.to_upper_camel_case(api_info.code)}
@router.get('/{api_info.code}', response=List[{RuleConvert.to_upper_camel_case(api_info.code)}SchemaOut])
@paginate(MyPagination)
def list_{api_info.code}(request, filters: Filters = Query(...)):
qs = retrieve(request, {RuleConvert.to_upper_camel_case(api_info.code)}, filters)
return qs
# 导入
@router.get('/{api_info.code}/all/export')
def export_{api_info.code}(request):
export_fields = ({field_code})
return export_data(request, {RuleConvert.to_upper_camel_case(api_info.code)}, {RuleConvert.to_upper_camel_case(api_info.code)}SchemaOut, export_fields)
# 导出
@router.post('/{api_info.code}/all/import')
def import_{api_info.code}(request, data: ImportSchema):
import_fields = ({field_code})
return import_data(request, {RuleConvert.to_upper_camel_case(api_info.code)}, {RuleConvert.to_upper_camel_case(api_info.code)}SchemaIn, data, import_fields)
'''
return api_txt

View File

@@ -0,0 +1,31 @@
component_to_db_type = {
'Input': 'CharField(null=True, blank=True, max_length=255, ',
'IconPicker': 'CharField(null=True, blank=True, max_length=255, ',
'StrengthMeter': 'CharField(null=True, blank=True, max_length=255, ',
'Select': 'CharField(null=True, blank=True, max_length=255, ',
'CheckboxGroup': 'CharField(null=True, blank=True, max_length=255, ',
'InputNumber': 'DecimalField(null=True, blank=True, max_digits = 13, decimal_places = 4, ',
'InputTextArea': 'TextField(null=True, blank=True, ',
'RadioGroup': 'CharField(null=True, blank=True, max_length=255, ',
'DatePicker': 'DateField(null=True, blank=True, ',
'MonthPicker': 'DateField(null=True, blank=True, ',
'TimePicker': 'TimeField(null=True, blank=True, ',
'Switch': 'BooleanField(null=True, blank=True, ',
'Rate': 'CharField(null=True, blank=True, max_length=255, ',
}
component_to_search_type = {
'Input': 'str',
'IconPicker': 'str',
'StrengthMeter': 'str',
'Select': 'str',
'CheckboxGroup': 'str',
'InputNumber': 'int',
'InputTextArea': 'str',
'RadioGroup': 'str',
'DatePicker': 'str',
'MonthPicker': 'str',
'TimePicker': 'str',
'Switch': 'bool',
'Rate': 'str',
}

View File

@@ -0,0 +1,31 @@
import json
from system.code_template.backend.mapping import component_to_db_type
from utils.ru_convert import RuleConvert
def generator_backend_model(model_info):
form_info = model_info.form_info
form_info_dict = json.loads(form_info)
header_txt = f'''from django.db import models
from utils.models import CoreModel
'''
columns_txt = ''
for item in form_info_dict.get('schemas'):
column = f'''
{item['field']} = models.{component_to_db_type[item['component']]}verbose_name='{item['label']}', help_text='{item['label']}')'''
columns_txt = column + columns_txt
bottom_txt = f'''class {RuleConvert.to_upper_camel_case(model_info.code)}(CoreModel):
{columns_txt}
class Meta:
db_table = 'generator_{model_info.code}'
verbose_name = '{model_info.name}'
verbose_name_plural = verbose_name
ordering = ('-create_datetime',)
'''
model_txt = header_txt + bottom_txt
return model_txt

View File

@@ -0,0 +1,9 @@
def generator_router(router_info):
router_txt = f'''from ninja import Router
from .api import router
{router_info.code}_router = Router()
{router_info.code}_router.add_router('/', router, tags=['{router_info.name}'])
'''
return router_txt
pass