| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- from fastapi import APIRouter, Depends, Form, Request
- from fastapi.responses import HTMLResponse, RedirectResponse
- from sqlalchemy.orm import Session
- from database import SessionLocal
- router = APIRouter(prefix="/admin/step1", tags=["step1"])
- def get_db():
- db = SessionLocal()
- try:
- yield db
- finally:
- db.close()
- @router.get("", response_class=HTMLResponse)
- def step1_page(request: Request, db: Session = Depends(get_db)):
- rows = db.execute("""
- SELECT * FROM step1_attr
- ORDER BY base_template_id, attr_key, sort_order
- """).fetchall()
- html = """
- <h2>Step1 模板配置</h2>
- <form method="post" action="/admin/step1/add">
- 模板ID:<input name="base_template_id"><br>
- 属性Key:<input name="attr_key"><br>
- 属性名:<input name="attr_name"><br>
- 值ID:<input name="value_id"><br>
- 值名称:<input name="value_name"><br>
- 必填:<input name="required" value="1"><br>
- 多选:<input name="is_multi" value="0"><br>
- <button type="submit">新增</button>
- </form>
- <hr>
- """
- last_tpl = None
- for r in rows:
- if r.base_template_id != last_tpl:
- html += f"<h3>模板 {r.base_template_id}</h3>"
- last_tpl = r.base_template_id
- html += f"""
- <div>
- [{r.attr_name}] {r.value_name}
- </div>
- """
- return html
- @router.post("/add")
- def add_step1(
- base_template_id: int = Form(...),
- attr_key: str = Form(...),
- attr_name: str = Form(...),
- value_id: int = Form(...),
- value_name: str = Form(...),
- required: int = Form(1),
- is_multi: int = Form(0),
- db: Session = Depends(get_db)
- ):
- db.execute("""
- INSERT INTO step1_attr
- (base_template_id, attr_key, attr_name, value_id, value_name, required, is_multi)
- VALUES
- (:tpl,:k,:n,:vid,:vname,:r,:m)
- """, {
- "tpl": base_template_id,
- "k": attr_key,
- "n": attr_name,
- "vid": value_id,
- "vname": value_name,
- "r": required,
- "m": is_multi
- })
- db.commit()
- return RedirectResponse("/admin/step1", status_code=302)
|