|
|
@ -1,11 +1,17 @@ |
|
|
import os |
|
|
import os |
|
|
|
|
|
import logging |
|
|
from jinja2 import Environment, FileSystemLoader |
|
|
from jinja2 import Environment, FileSystemLoader |
|
|
from db import get_table, get_columns |
|
|
from db import get_table, get_columns |
|
|
from utils import * |
|
|
from utils import * |
|
|
import yaml |
|
|
import yaml |
|
|
|
|
|
|
|
|
env = Environment(loader=FileSystemLoader("templates/vue")) |
|
|
env = Environment(loader=FileSystemLoader("templates/vue")) |
|
|
def render(template, out, ctx): |
|
|
def render(template, out, ctx, overwrite=False): |
|
|
|
|
|
|
|
|
|
|
|
# 文件存在且不允许覆盖 → 跳过 |
|
|
|
|
|
if os.path.exists(out) and not overwrite: |
|
|
|
|
|
logging.info("Skip exists file: %s", out) |
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
tpl = env.get_template(template) |
|
|
tpl = env.get_template(template) |
|
|
content = tpl.render(**ctx) |
|
|
content = tpl.render(**ctx) |
|
|
@ -32,7 +38,7 @@ def build_fields(table): |
|
|
|
|
|
|
|
|
return fields |
|
|
return fields |
|
|
|
|
|
|
|
|
def generate_vue(table, cfg): |
|
|
def generate_vue(table, cfg , overwrite=False): |
|
|
|
|
|
|
|
|
API_DIR = cfg["frontend"]["root"]+"/"+cfg["frontend"]["api"] |
|
|
API_DIR = cfg["frontend"]["root"]+"/"+cfg["frontend"]["api"] |
|
|
VIEW_DIR = cfg["frontend"]["root"]+"/"+cfg["frontend"]["views"] |
|
|
VIEW_DIR = cfg["frontend"]["root"]+"/"+cfg["frontend"]["views"] |
|
|
@ -41,7 +47,7 @@ def generate_vue(table, cfg): |
|
|
EDIT_FIELDS = cfg["frontend"]["editFields"] |
|
|
EDIT_FIELDS = cfg["frontend"]["editFields"] |
|
|
|
|
|
|
|
|
table_info = get_table(table) |
|
|
table_info = get_table(table) |
|
|
entity = table # table.replace("health_","") |
|
|
entity = table |
|
|
ctx = { |
|
|
ctx = { |
|
|
"table":table, |
|
|
"table":table, |
|
|
"table_comment":table_info["table_comment"], |
|
|
"table_comment":table_info["table_comment"], |
|
|
@ -54,35 +60,41 @@ def generate_vue(table, cfg): |
|
|
render( |
|
|
render( |
|
|
"api.ts.j2", |
|
|
"api.ts.j2", |
|
|
f"{API_DIR}/{entity}.ts", |
|
|
f"{API_DIR}/{entity}.ts", |
|
|
ctx |
|
|
ctx, |
|
|
|
|
|
overwrite |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
render( |
|
|
render( |
|
|
"index.vue.j2", |
|
|
"index.vue.j2", |
|
|
f"{VIEW_DIR}/{entity}/index.vue", |
|
|
f"{VIEW_DIR}/{entity}/index.vue", |
|
|
ctx |
|
|
ctx, |
|
|
|
|
|
overwrite |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
render( |
|
|
render( |
|
|
"data.ts.j2", |
|
|
"data.ts.j2", |
|
|
f"{VIEW_DIR}/{entity}/data.ts", |
|
|
f"{VIEW_DIR}/{entity}/data.ts", |
|
|
ctx |
|
|
ctx, |
|
|
|
|
|
overwrite |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
render( |
|
|
render( |
|
|
"form.ts.j2", |
|
|
"form.ts.j2", |
|
|
f"{VIEW_DIR}/{entity}/form.ts", |
|
|
f"{VIEW_DIR}/{entity}/form.ts", |
|
|
ctx |
|
|
ctx, |
|
|
|
|
|
overwrite |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
render( |
|
|
render( |
|
|
"router.ts.j2", |
|
|
"router.ts.j2", |
|
|
f"{ROUTER_DIR}/{entity}.ts", |
|
|
f"{ROUTER_DIR}/{entity}.ts", |
|
|
ctx |
|
|
ctx, |
|
|
|
|
|
overwrite |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
render( |
|
|
render( |
|
|
"mock.ts.j2", |
|
|
"mock.ts.j2", |
|
|
f"{MOCK_DIR}/{entity}.ts", |
|
|
f"{MOCK_DIR}/{entity}.ts", |
|
|
ctx |
|
|
ctx, |
|
|
|
|
|
overwrite |
|
|
) |
|
|
) |