project.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from flask import Blueprint, render_template, redirect, url_for
  2. import tools.utils as utils
  3. from core.dtos import ProjectDto
  4. from core.user_session import Permission
  5. from stores import BudgetStore, ProjectStore, ProjectTaskStore
  6. logger = utils.get_logger()
  7. project_bp = Blueprint("project", __name__, template_folder="templates")
  8. project_store = ProjectStore()
  9. budget_store = BudgetStore()
  10. project_task_store = ProjectTaskStore()
  11. @project_bp.route("/", methods=["GET"])
  12. @Permission.authorize
  13. def index():
  14. return render_template("project/index.html", page_active="project")
  15. @project_bp.route("/budget_info/<project_id>", methods=["GET"])
  16. @Permission.authorize
  17. def budget_info(project_id: str):
  18. project = project_store.get(project_id)
  19. try:
  20. budgets = budget_store.get_budget_info(project_id)
  21. except Exception as e:
  22. logger.error(f"访问项目概算页面失败[{project_id}]: {str(e)}")
  23. return redirect(url_for("project.project_error", project_id=project_id))
  24. return render_template(
  25. "project/budget_info.html",
  26. page_active="project",
  27. project=project,
  28. budgets=budgets,
  29. )
  30. @project_bp.route("/quota_info/<project_id>/<int:task_id>", methods=["GET"])
  31. @Permission.authorize
  32. def quota_info(project_id: str, task_id: int):
  33. project = project_store.get(project_id)
  34. task = project_task_store.get_task_dto(task_id)
  35. try:
  36. budgets = budget_store.get_budget_info(project_id)
  37. except Exception as e:
  38. logger.error(f"访问定额输入页面失败[{project_id}]: {str(e)}")
  39. return redirect(url_for("project.project_error", project_id=project_id))
  40. return render_template(
  41. "project/quota_info.html",
  42. page_active="project",
  43. project=project,
  44. budgets=budgets,
  45. task=task,
  46. )
  47. @project_bp.route("/project_error/<project_id>", methods=["GET"])
  48. @Permission.authorize
  49. def project_error(project_id: str):
  50. project = project_store.get(project_id)
  51. if not project:
  52. project = ProjectDto(project_id=project_id, project_name="")
  53. return render_template("project/error.html", page_active="project", project=project)