xuguoyang před 9 měsíci
rodič
revize
f4c238323b
1 změnil soubory, kde provedl 45 přidání a 33 odebrání
  1. 45 33
      routers/api/layerConfiguration/__init__.py

+ 45 - 33
routers/api/layerConfiguration/__init__.py

@@ -472,40 +472,40 @@ class SysMuneCreateForm(BaseModel):
     visible:str
     layer_template:str
 
+
 @router.post('/create')
 async def create(
-    form_data: SysMuneCreateForm,
-    db: Session = Depends(get_db),
-    body = Depends(remove_xss_json),
-    user_id = Depends(valid_access_token)
+        form_data: SysMuneCreateForm,
+        db: Session = Depends(get_db),
+        body=Depends(remove_xss_json),
+        user_id=Depends(valid_access_token)
 ):
-
     try:
+        # 开始事务
+        db.begin()
+
+        # 创建新的菜单项
         new_menu = SysMenu(
-                            menu_name = form_data.menuName,
-                            parent_id = form_data.parentId,
-                            order_num = form_data.orderNum,
-                            path = form_data.path,
-                            is_frame = int(form_data.isFrame),
-                            is_cache = int(form_data.isCache),
-                            menu_type = form_data.menuType,
-                            visible = form_data.visible,
-                            status = form_data.status,
-                            icon = form_data.icon,
-                            component= form_data.component,
-                            perms=form_data.perms,
-                            query_param=form_data.queryParam,
-                            create_by = user_id
-                           )
+            menu_name=form_data.menuName,
+            parent_id=form_data.parentId,
+            order_num=form_data.orderNum,
+            path=form_data.path,
+            is_frame=int(form_data.isFrame),
+            is_cache=int(form_data.isCache),
+            menu_type=form_data.menuType,
+            visible=form_data.visible,
+            status=form_data.status,
+            icon=form_data.icon,
+            component=form_data.component,
+            perms=form_data.perms,
+            query_param=form_data.queryParam,
+            create_by=user_id
+        )
         db.add(new_menu)
-        db.commit()
-        db.refresh(new_menu)
-
-        layer_id = new_menu.menu_id
-        print(layer_id)
 
-        new_menu1 = SysMenuLayer(
-            menu_id = layer_id,
+        # 创建新的菜单层,此时还不能使用new_menu.menu_id,因为它还没有被赋值
+        new_menu_layer = SysMenuLayer(
+            menu_id=None,  # 先设置为None,稍后更新
             menu_name=form_data.menuName,
             parent_id=form_data.parentId,
             order_num=form_data.orderNum,
@@ -522,16 +522,26 @@ async def create(
             create_by=user_id,
             layer_template=form_data.layer_template
         )
-        db.add(new_menu)
-        db.add(new_menu1)
+        db.add(new_menu_layer)
+
+        # 提交事务之前刷新new_menu以确保menu_id被数据库生成
+        db.flush()  # 使用flush而不是commit,这样可以保存数据但不结束事务
+        db.refresh(new_menu)  # 刷新new_menu对象以获取数据库生成的menu_id
+        new_menu_layer.menu_id = new_menu.menu_id  # 现在可以设置new_menu_layer的menu_id了
+
+        # 如果需要,可以在这里再次刷新new_menu_layer,但通常不是必需的
+        # db.refresh(new_menu_layer)
+
+        # 提交事务
         db.commit()
-        db.refresh(new_menu)
+
         return {
             "code": 200,
-            "data": None,
+            "data": new_menu_layer.menu_id,  # 返回新创建的SysMenuLayer的ID
             "msg": "操作成功"
         }
     except Exception as e:
+        # 如果发生异常,回滚事务
         db.rollback()
         raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e))
 
@@ -562,6 +572,7 @@ async def update(
 ):
 
     try:
+        db.begin()
         query = db.query(SysMenu)
         query = query.filter(SysMenu.menu_id == body['menuId'])
         query = query.filter(SysMenu.del_flag != '2')
@@ -604,7 +615,7 @@ async def update(
         #         setattr(menu_to_update, field, value)
         #
         # db.add(menu_to_update)
-        db.commit()
+        # db.commit()
 
 
         queryLayer = db.query(SysMenuLayer)
@@ -667,6 +678,7 @@ async def delete(
     user_id = Depends(valid_access_token)
 ):
     try:
+        db.begin()
         query = db.query(SysMenu)
         query = query.filter(SysMenu.menu_id == menu_id)
         query = query.filter(SysMenu.del_flag != '2')
@@ -678,7 +690,7 @@ async def delete(
         menu_to_delete.create_by = user_id
         menu_to_delete.del_flag='2'
         # db.delete(menu_to_delete)
-        db.commit()
+        # db.commit()
 
 
         queryLayer = db.query(SysMenuLayer)