diff --git a/README.md b/README.md index b96177e2dce80fc346313c5ea90bd7dd2a3b9ed5..3e2227f4bd8a71868626e6591f41271e1341c052 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@

logo

-

Dash-FastAPI-Admin v1.0.7

+

Dash-FastAPI-Admin v1.0.8

基于Dash+FastAPI前后端分离的纯Python快速开发框架

- + @@ -85,6 +85,11 @@ Dash-FastAPI-Admin是一套全部开源的快速开发平台,毫无保留给 +## 在线体验 +- *账号:admin* +- *密码:admin123* +- 演示地址:dfadmin管理系统 + ## 项目运行相关 ```bash diff --git a/dash-fastapi-backend/module_admin/annotation/log_annotation.py b/dash-fastapi-backend/module_admin/annotation/log_annotation.py index 37dc894045c9df84b5c67c316e09b4b767565879..c2d88a69e65078857c812a2b9bf87d63554085f1 100644 --- a/dash-fastapi-backend/module_admin/annotation/log_annotation.py +++ b/dash-fastapi-backend/module_admin/annotation/log_annotation.py @@ -136,7 +136,7 @@ def log_decorator(title: str, business_type: int, log_type: Optional[str] = 'ope else: current_user = await get_current_user(request, token, query_db) oper_name = current_user.user.user_name - dept_name = current_user.dept.dept_name + dept_name = current_user.dept.dept_name if current_user.dept else None operation_log = dict( title=title, business_type=business_type, diff --git a/dash-fastapi-backend/module_admin/controller/login_controller.py b/dash-fastapi-backend/module_admin/controller/login_controller.py index e9a000bf25e400ded96d2329a489a6fe737fff11..19ff188ef2e5f3a1d807503bd3b60330be2f387d 100644 --- a/dash-fastapi-backend/module_admin/controller/login_controller.py +++ b/dash-fastapi-backend/module_admin/controller/login_controller.py @@ -38,7 +38,7 @@ async def login(request: Request, form_data: CustomOAuth2PasswordRequestForm = D data={ "user_id": str(result[0].user_id), "user_name": result[0].user_name, - "dept_name": result[1].dept_name, + "dept_name": result[1].dept_name if result[1] else None, "session_id": session_id, "login_info": user.login_info }, diff --git a/dash-fastapi-backend/module_admin/controller/user_controller.py b/dash-fastapi-backend/module_admin/controller/user_controller.py index 88433ffb216c214b906a8544e7da3e3567f85a50..27bc11b0ccb802a045ed191c6f947c7053cc043d 100644 --- a/dash-fastapi-backend/module_admin/controller/user_controller.py +++ b/dash-fastapi-backend/module_admin/controller/user_controller.py @@ -201,10 +201,10 @@ async def export_system_user_template(request: Request, query_db: Session = Depe @userController.post("/user/export", dependencies=[Depends(CheckUserInterfaceAuth('system:user:export'))]) @log_decorator(title='用户管理', business_type=5) -async def export_system_user_list(request: Request, user_query: UserQueryModel, query_db: Session = Depends(get_db)): +async def export_system_user_list(request: Request, user_query: UserQueryModel, query_db: Session = Depends(get_db), data_scope_sql: str = Depends(GetDataScope('SysUser'))): try: # 获取全量数据 - user_query_result = UserService.get_user_list_services(query_db, user_query) + user_query_result = UserService.get_user_list_services(query_db, user_query, data_scope_sql) user_export_result = UserService.export_user_list_services(user_query_result) logger.info('导出成功') return streaming_response_200(data=bytes2file_response(user_export_result)) diff --git a/dash-fastapi-backend/module_admin/dao/user_dao.py b/dash-fastapi-backend/module_admin/dao/user_dao.py index d7a0a505e59ca812f01462153c267228cc4254e8..c68b5dba0026100d242f88a3e9cd82639599c994 100644 --- a/dash-fastapi-backend/module_admin/dao/user_dao.py +++ b/dash-fastapi-backend/module_admin/dao/user_dao.py @@ -6,7 +6,7 @@ from module_admin.entity.do.dept_do import SysDept from module_admin.entity.do.post_do import SysPost from module_admin.entity.do.menu_do import SysMenu from module_admin.entity.vo.user_vo import UserModel, UserRoleModel, UserPostModel, CurrentUserInfo, UserQueryModel, UserRoleQueryModel -from utils.time_format_util import list_format_datetime, format_datetime_dict_list +from utils.time_format_util import object_format_datetime, list_format_datetime, format_datetime_dict_list from datetime import datetime, time from typing import Union, List @@ -55,11 +55,11 @@ class UserDao: """ query_user_basic_info = db.query(SysUser) \ .filter(SysUser.status == 0, SysUser.del_flag == 0, SysUser.user_id == user_id) \ - .distinct().all() + .distinct().first() query_user_dept_info = db.query(SysDept).select_from(SysUser) \ .filter(SysUser.status == 0, SysUser.del_flag == 0, SysUser.user_id == user_id) \ .join(SysDept, and_(SysUser.dept_id == SysDept.dept_id, SysDept.status == 0, SysDept.del_flag == 0)) \ - .distinct().all() + .distinct().first() query_user_role_info = db.query(SysRole).select_from(SysUser) \ .filter(SysUser.status == 0, SysUser.del_flag == 0, SysUser.user_id == user_id) \ .outerjoin(SysUserRole, SysUser.user_id == SysUserRole.user_id) \ @@ -85,8 +85,8 @@ class UserDao: .order_by(SysMenu.order_num) \ .distinct().all() results = dict( - user_basic_info=list_format_datetime(query_user_basic_info), - user_dept_info=list_format_datetime(query_user_dept_info), + user_basic_info=object_format_datetime(query_user_basic_info), + user_dept_info=object_format_datetime(query_user_dept_info), user_role_info=list_format_datetime(query_user_role_info), user_post_info=list_format_datetime(query_user_post_info), user_menu_info=list_format_datetime(query_user_menu_info) @@ -104,11 +104,11 @@ class UserDao: """ query_user_basic_info = db.query(SysUser) \ .filter(SysUser.del_flag == 0, SysUser.user_id == user_id) \ - .distinct().all() + .distinct().first() query_user_dept_info = db.query(SysDept).select_from(SysUser) \ .filter(SysUser.del_flag == 0, SysUser.user_id == user_id) \ .join(SysDept, and_(SysUser.dept_id == SysDept.dept_id, SysDept.status == 0, SysDept.del_flag == 0)) \ - .distinct().all() + .distinct().first() query_user_role_info = db.query(SysRole).select_from(SysUser) \ .filter(SysUser.del_flag == 0, SysUser.user_id == user_id) \ .outerjoin(SysUserRole, SysUser.user_id == SysUserRole.user_id) \ @@ -127,8 +127,8 @@ class UserDao: .join(SysMenu, and_(SysRoleMenu.menu_id == SysMenu.menu_id, SysMenu.status == 0)) \ .distinct().all() results = dict( - user_basic_info=list_format_datetime(query_user_basic_info), - user_dept_info=list_format_datetime(query_user_dept_info), + user_basic_info=object_format_datetime(query_user_basic_info), + user_dept_info=object_format_datetime(query_user_dept_info), user_role_info=list_format_datetime(query_user_role_info), user_post_info=list_format_datetime(query_user_post_info), user_menu_info=list_format_datetime(query_user_menu_info) diff --git a/dash-fastapi-backend/module_admin/entity/vo/user_vo.py b/dash-fastapi-backend/module_admin/entity/vo/user_vo.py index 21310f766e2ae4ea4f9c65a434094726f4b18d65..ba79c0d54c732a4024968804fac5bfb599ce8472 100644 --- a/dash-fastapi-backend/module_admin/entity/vo/user_vo.py +++ b/dash-fastapi-backend/module_admin/entity/vo/user_vo.py @@ -128,8 +128,8 @@ class CurrentUserInfo(BaseModel): """ 数据库返回当前用户信息 """ - user_basic_info: List[Union[UserModel, None]] - user_dept_info: List[Union[DeptModel, None]] + user_basic_info: Union[UserModel, None] + user_dept_info: Union[DeptModel, None] user_role_info: List[Union[RoleModel, None]] user_post_info: List[Union[PostModel, None]] user_menu_info: Union[List, None] diff --git a/dash-fastapi-backend/module_admin/service/login_service.py b/dash-fastapi-backend/module_admin/service/login_service.py index 7a2f71b2e791b7de04f3b49e459027560ba261e0..ca6f8db254b8059e409691656c3ad7dab6668639 100644 --- a/dash-fastapi-backend/module_admin/service/login_service.py +++ b/dash-fastapi-backend/module_admin/service/login_service.py @@ -75,16 +75,16 @@ async def get_current_user(request: Request = Request, token: str = Depends(oaut raise AuthException(data="", message="用户token不合法") redis_token = await request.app.state.redis.get(f"{RedisInitKeyConfig.ACCESS_TOKEN.get('key')}:{session_id}") # 此方法可实现同一账号同一时间只能登录一次 - # redis_token = await request.app.state.redis.get(f"{RedisInitKeyConfig.ACCESS_TOKEN.get('key')}:{user.user_basic_info[0].user_id}") + # redis_token = await request.app.state.redis.get(f"{RedisInitKeyConfig.ACCESS_TOKEN.get('key')}:{user.user_basic_info.user_id}") if token == redis_token: await request.app.state.redis.set(f"{RedisInitKeyConfig.ACCESS_TOKEN.get('key')}:{session_id}", redis_token, ex=timedelta(minutes=JwtConfig.REDIS_TOKEN_EXPIRE_MINUTES)) - # await request.app.state.redis.set(f"{RedisInitKeyConfig.ACCESS_TOKEN.get('key')}:{user.user_basic_info[0].user_id}", redis_token, + # await request.app.state.redis.set(f"{RedisInitKeyConfig.ACCESS_TOKEN.get('key')}:{user.user_basic_info.user_id}", redis_token, # ex=timedelta(minutes=JwtConfig.REDIS_TOKEN_EXPIRE_MINUTES)) return CurrentUserInfoServiceResponse( - user=user.user_basic_info[0], - dept=user.user_dept_info[0], + user=user.user_basic_info, + dept=user.user_dept_info, role=user.user_role_info, post=user.user_post_info, menu=user.user_menu_info diff --git a/dash-fastapi-backend/module_admin/service/user_service.py b/dash-fastapi-backend/module_admin/service/user_service.py index 1d8260efbce5502c6350df3b411dc360f81962a4..eef7ed46f17bfdb47209261f9fc4545b693325f7 100644 --- a/dash-fastapi-backend/module_admin/service/user_service.py +++ b/dash-fastapi-backend/module_admin/service/user_service.py @@ -139,8 +139,8 @@ class UserService: user = UserDao.get_user_detail_by_id(result_db, user_id=user_id) return UserDetailModel( - user=user.user_basic_info[0], - dept=user.user_dept_info[0], + user=user.user_basic_info, + dept=user.user_dept_info, role=user.user_role_info, post=user.user_post_info ) @@ -155,7 +155,7 @@ class UserService: """ reset_user = page_object.dict(exclude_unset=True) if page_object.old_password: - user = UserDao.get_user_detail_by_id(result_db, user_id=page_object.user_id).user_basic_info[0] + user = UserDao.get_user_detail_by_id(result_db, user_id=page_object.user_id).user_basic_info if not PwdUtil.verify_password(page_object.old_password, user.password): result = dict(is_success=False, message='旧密码不正确') return CrudUserResponse(**result) diff --git a/dash-fastapi-frontend/callbacks/app_c.py b/dash-fastapi-frontend/callbacks/app_c.py index 0210e4328131ced648253e9eb0a4d104099bd07f..be94265f0957fa09d6374df9e389405cef43509f 100644 --- a/dash-fastapi-frontend/callbacks/app_c.py +++ b/dash-fastapi-frontend/callbacks/app_c.py @@ -28,7 +28,8 @@ def check_api_response(data): # api拦截器——退出登录二次确认 @app.callback( - Output('redirect-container', 'children', allow_duplicate=True), + [Output('redirect-container', 'children', allow_duplicate=True), + Output('token-container', 'data', allow_duplicate=True)], Input('token-invalid-modal', 'okCounts'), prevent_initial_call=True ) @@ -41,10 +42,11 @@ def redirect_page(okCounts): dcc.Location( pathname='/login', id='index-redirect' - ) + ), + None ] - return dash.no_update + return [dash.no_update] * 2 # 应用初始化主题颜色 diff --git a/dash-fastapi-frontend/callbacks/layout_c/head_c.py b/dash-fastapi-frontend/callbacks/layout_c/head_c.py index f462f7ce42653c603d025c5e33a816520454cfc7..a64910c398245d734ca71088cf97f08c1b6133f3 100644 --- a/dash-fastapi-frontend/callbacks/layout_c/head_c.py +++ b/dash-fastapi-frontend/callbacks/layout_c/head_c.py @@ -45,7 +45,8 @@ app.clientside_callback( # 退出登录回调 @app.callback( - Output('redirect-container', 'children', allow_duplicate=True), + [Output('redirect-container', 'children', allow_duplicate=True), + Output('token-container', 'data', allow_duplicate=True)], Input('logout-modal', 'okCounts'), prevent_initial_call=True ) @@ -60,9 +61,10 @@ def logout_confirm(okCounts): pathname='/login', id='index-redirect' ), + None ] - return dash.no_update + return [dash.no_update] * 2 # 全局页面重载回调 diff --git a/dash-fastapi-frontend/callbacks/monitor_c/job_c/job_c.py b/dash-fastapi-frontend/callbacks/monitor_c/job_c/job_c.py index d0eb60a8b0b65cfd8b93a78d6756769dc4ffda4d..a7aa458f3e8234311b893b157f77d2ade209d03e 100644 --- a/dash-fastapi-frontend/callbacks/monitor_c/job_c/job_c.py +++ b/dash-fastapi-frontend/callbacks/monitor_c/job_c/job_c.py @@ -378,7 +378,7 @@ def job_confirm(confirm_trigger, modal_type, edit_row_info, form_value, form_lab form_label_validate_info=[None if form_value_state.get(k) else f'{form_label_state.get(k)}不能为空!' for k in form_label_output_list], modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('处理失败', type='error') ) diff --git a/dash-fastapi-frontend/callbacks/system_c/config_c.py b/dash-fastapi-frontend/callbacks/system_c/config_c.py index 47bf411f393be4afa1ad31e4d68422f8e95e725d..b13305931af0ee7a8cddc196c20ee5576707e772 100644 --- a/dash-fastapi-frontend/callbacks/system_c/config_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/config_c.py @@ -351,7 +351,7 @@ def dict_type_confirm(confirm_trigger, modal_type, edit_row_info, form_value, fo form_label_validate_info=[None if form_value_state.get(k) else f'{form_label_state.get(k)}不能为空!' for k in form_label_output_list], modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('处理失败', type='error') ) diff --git a/dash-fastapi-frontend/callbacks/system_c/dept_c.py b/dash-fastapi-frontend/callbacks/system_c/dept_c.py index 41645cd2a5f92ac35f3b15628c5b36ac852d0946..57eb7873353df20ad3712db31041a0b03659a6ef 100644 --- a/dash-fastapi-frontend/callbacks/system_c/dept_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/dept_c.py @@ -348,7 +348,7 @@ def dept_confirm(confirm_trigger, modal_type, edit_row_info, form_value, form_la form_label_validate_info=[None if form_value_state.get(k) else f'{form_label_state.get(k)}不能为空!' for k in form_label_output_list], modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('处理失败', type='error') ) diff --git a/dash-fastapi-frontend/callbacks/system_c/dict_c/dict_c.py b/dash-fastapi-frontend/callbacks/system_c/dict_c/dict_c.py index a2b87cc66a58361a2a2e5fcf4b494f38e989b60a..b557febb2de27c7cae0f35ab6167d656397b6b7e 100644 --- a/dash-fastapi-frontend/callbacks/system_c/dict_c/dict_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/dict_c/dict_c.py @@ -355,7 +355,7 @@ def dict_type_confirm(confirm_trigger, modal_type, edit_row_info, form_value, fo form_label_validate_info=[None if form_value_state.get(k) else f'{form_label_state.get(k)}不能为空!' for k in form_label_output_list], modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('处理失败', type='error') ) diff --git a/dash-fastapi-frontend/callbacks/system_c/dict_c/dict_data_c.py b/dash-fastapi-frontend/callbacks/system_c/dict_c/dict_data_c.py index f5c98bc29a8717b594822dd9cdd92561408df2be..795cf07d95fdd7964353f0c2c6047f68258f7607 100644 --- a/dash-fastapi-frontend/callbacks/system_c/dict_c/dict_data_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/dict_c/dict_data_c.py @@ -350,7 +350,7 @@ def dict_data_confirm(confirm_trigger, modal_type, edit_row_info, form_value, fo form_label_validate_info=[None if form_value_state.get(k) else f'{form_label_state.get(k)}不能为空!' for k in form_label_output_list], modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('处理失败', type='error') ) diff --git a/dash-fastapi-frontend/callbacks/system_c/menu_c/components_c/button_type_c.py b/dash-fastapi-frontend/callbacks/system_c/menu_c/components_c/button_type_c.py index 53da181b9c4b5e6a0845201ea350138062f59f27..7116953826d51579f7bd1df13efad100a2f4f2b7 100644 --- a/dash-fastapi-frontend/callbacks/system_c/menu_c/components_c/button_type_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/menu_c/components_c/button_type_c.py @@ -90,7 +90,7 @@ def menu_confirm_button(confirm_trigger, modal_type, edit_row_info, parent_id, m ], modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('处理失败', type='error') ) diff --git a/dash-fastapi-frontend/callbacks/system_c/menu_c/components_c/content_type_c.py b/dash-fastapi-frontend/callbacks/system_c/menu_c/components_c/content_type_c.py index d18c71630026c0293bc6514de8879b13b652c9d6..967ba75388d7605812963cffa9aaeb5985b10a39 100644 --- a/dash-fastapi-frontend/callbacks/system_c/menu_c/components_c/content_type_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/menu_c/components_c/content_type_c.py @@ -98,7 +98,7 @@ def menu_confirm_content(confirm_trigger, modal_type, edit_row_info, parent_id, ], modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('处理失败', type='error') ) diff --git a/dash-fastapi-frontend/callbacks/system_c/menu_c/components_c/menu_type_c.py b/dash-fastapi-frontend/callbacks/system_c/menu_c/components_c/menu_type_c.py index f37b79231973b06560bdb14fdd2e761dbd836edb..8242bb2014aa310a461f2183f111c5dc1b83eef6 100644 --- a/dash-fastapi-frontend/callbacks/system_c/menu_c/components_c/menu_type_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/menu_c/components_c/menu_type_c.py @@ -104,7 +104,7 @@ def menu_confirm_menu(confirm_trigger, modal_type, edit_row_info, parent_id, men ], modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('处理失败', type='error') ) diff --git a/dash-fastapi-frontend/callbacks/system_c/notice_c.py b/dash-fastapi-frontend/callbacks/system_c/notice_c.py index 310fb8028550105b27340645f0c5b5ca5bbd814f..a0910f42464865a7b11c3b5b0cdff2e1e422484b 100644 --- a/dash-fastapi-frontend/callbacks/system_c/notice_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/notice_c.py @@ -500,7 +500,7 @@ def notice_confirm(confirm_trigger, modal_type, edit_row_info, notice_title, not notice_type_form_help=None if notice_type else '请输入公告类型!', modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('处理失败', type='error') ) diff --git a/dash-fastapi-frontend/callbacks/system_c/post_c.py b/dash-fastapi-frontend/callbacks/system_c/post_c.py index 1f8985a4710a2765ff8878dbfe4aa4f78363a100..07712ab632ff930d6a26502cede7398732f08cd5 100644 --- a/dash-fastapi-frontend/callbacks/system_c/post_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/post_c.py @@ -339,7 +339,7 @@ def post_confirm(confirm_trigger, modal_type, edit_row_info, form_value, form_la form_label_validate_info=[None if form_value_state.get(k) else f'{form_label_state.get(k)}不能为空!' for k in form_label_output_list], modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('处理失败', type='error') ) diff --git a/dash-fastapi-frontend/callbacks/system_c/role_c/role_c.py b/dash-fastapi-frontend/callbacks/system_c/role_c/role_c.py index e382657eb3fbd10a96e48fdb7fc45bafebc483af..1d751463e11f76f356bdb3fb1bb4b9dd4427719e 100644 --- a/dash-fastapi-frontend/callbacks/system_c/role_c/role_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/role_c/role_c.py @@ -554,7 +554,7 @@ def role_confirm(confirm_trigger, modal_type, edit_row_info, form_value, form_la form_label_validate_info=[None if form_value_state.get(k) else form_label_state.get(k) for k in form_label_output_list], modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('处理失败', type='error') ) diff --git a/dash-fastapi-frontend/callbacks/system_c/user_c/profile_c/reset_pwd_c.py b/dash-fastapi-frontend/callbacks/system_c/user_c/profile_c/reset_pwd_c.py index a33a8123895c354855455e29aa49aa838b9c3e30..7fe72373ffa566e039cd43bda47b6a47fb1305d9 100644 --- a/dash-fastapi-frontend/callbacks/system_c/user_c/profile_c/reset_pwd_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/user_c/profile_c/reset_pwd_c.py @@ -76,7 +76,7 @@ def reset_submit_user_info(reset_click, old_password, new_password, confirm_pass None if old_password else '请输入旧密码!', None if new_password else '请输入新密码!', None if confirm_password else '请输入确认密码!', - {'timestamp': time.time()}, + dash.no_update, fuc.FefferyFancyMessage('修改失败', type='error'), ] diff --git a/dash-fastapi-frontend/callbacks/system_c/user_c/profile_c/user_info_c.py b/dash-fastapi-frontend/callbacks/system_c/user_c/profile_c/user_info_c.py index 14a882bfd109ec6b7b66014f990db036429b25bb..087434d9e950a4992dee78dc933ae761b5b52570 100644 --- a/dash-fastapi-frontend/callbacks/system_c/user_c/profile_c/user_info_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/user_c/profile_c/user_info_c.py @@ -64,7 +64,7 @@ def reset_submit_user_info(reset_click, nick_name, phonenumber, email, sex): None if nick_name else '请输入用户昵称!', None if phonenumber else '请输入手机号码!', None if email else '请输入邮箱!', - {'timestamp': time.time()}, + dash.no_update, fuc.FefferyFancyMessage('修改失败', type='error'), ] diff --git a/dash-fastapi-frontend/callbacks/system_c/user_c/user_c.py b/dash-fastapi-frontend/callbacks/system_c/user_c/user_c.py index b5c03cc00c685ca4931f429714bb064a3a57c6b0..d521334a268fe90abe93159dea9562bb44a4f776 100644 --- a/dash-fastapi-frontend/callbacks/system_c/user_c/user_c.py +++ b/dash-fastapi-frontend/callbacks/system_c/user_c/user_c.py @@ -358,7 +358,7 @@ def usr_add_confirm(add_confirm, post, role, form_value, form_label): form_label_validate_info=[None if form_value_state.get(k) else f'{form_label_state.get(k)}不能为空!' for k in form_label_output_list], modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('新增失败', type='error') ) @@ -513,7 +513,7 @@ def usr_edit_confirm(edit_confirm, edit_row_info, post, role, form_value, form_l form_label_validate_info=[None if form_value_state.get(k) else f'{form_label_state.get(k)}不能为空!' for k in form_label_output_list], modal_visible=dash.no_update, operations=dash.no_update, - api_check_token_trigger={'timestamp': time.time()}, + api_check_token_trigger=dash.no_update, global_message_container=fuc.FefferyFancyMessage('编辑失败', type='error') ) diff --git a/dash-fastapi-frontend/views/layout/components/head.py b/dash-fastapi-frontend/views/layout/components/head.py index 95efcf85bada766ed40de518c6a4f3a5f48e2977..5f1e7fde23c89728dcd369f5519c616df620defc 100644 --- a/dash-fastapi-frontend/views/layout/components/head.py +++ b/dash-fastapi-frontend/views/layout/components/head.py @@ -50,7 +50,7 @@ def render_head_content(): 'display': 'flex', 'alignItems': 'center' }, - flex='24' + flex='21' ), # 页首中部搜索区域 @@ -87,6 +87,23 @@ def render_head_content(): flex='6' ), + # 页首开源项目地址 + fac.AntdCol( + html.A( + html.Img( + src='https://gitee.com/insistence2022/dash-fastapi-admin/badge/star.svg?theme=dark' + ), + href='https://gitee.com/insistence2022/dash-fastapi-admin', + target='_blank' + ), + style={ + 'height': '100%', + 'display': 'flex', + 'alignItems': 'center' + }, + flex='3' + ), + # 页首右侧用户信息区域 fac.AntdCol( fac.AntdSpace( diff --git a/dash-fastapi-frontend/views/system/user/profile/__init__.py b/dash-fastapi-frontend/views/system/user/profile/__init__.py index b6fca1ddb368bfd118dd8264879210509d019371..74eafbf4f9b356137a0e60f79b4ca392e6a834c5 100644 --- a/dash-fastapi-frontend/views/system/user/profile/__init__.py +++ b/dash-fastapi-frontend/views/system/user/profile/__init__.py @@ -65,7 +65,8 @@ def render(button_perms): fac.AntdIcon(icon='antd-cluster'), fac.AntdText('所属部门'), html.Div( - session.get('dept_info').get('dept_name') + "/" + ','.join( + session.get('dept_info').get('dept_name') if session.get( + 'dept_info') else "" + "/" + ','.join( [item.get('post_name') for item in session.get('post_info')]), id='profile_c-dept',