202 lines
8.2 KiB
Python
202 lines
8.2 KiB
Python
# coding: gb2312
|
||
from PyQt5.QtWidgets import *
|
||
from LSZXPagesLibrary.consensus import *
|
||
from LSZXPagesLibrary.pop_message_dialog import PopDialogMessage
|
||
from LSZXPagesLibrary.running_score_layout_define import RunningScoreLayoutDefine
|
||
from LSZXPagesLibrary.tool import format_time
|
||
from PureBackend.global_execrise_backend import GEB
|
||
|
||
|
||
class RunningScore(RunningScoreLayoutDefine):
|
||
|
||
def __init__(self):
|
||
super(RunningScore, self).__init__()
|
||
self.eb = GEB().get_geb()
|
||
self.person_list = None
|
||
self.selected_person_id = ""
|
||
self.labels = []
|
||
# 注册返回界面的按钮
|
||
self.back_home_button.clicked.connect(self.back_home)
|
||
# 提交成绩响应动作
|
||
self.stop_test_button.clicked.connect(self.stop)
|
||
self.revoke_update_button.clicked.connect(self.withdraw_fix_score)
|
||
self.commit_update_button.clicked.connect(self.fix_score)
|
||
# 弹窗
|
||
self.message_pop_windows = PopDialogMessage(self)
|
||
# 确定结束考试弹窗
|
||
self.stop_exercise_pop_windows = PopDialogMessage(self)
|
||
# 弹窗
|
||
self.message_pop_windows.connect(self.message_pop_commit)
|
||
# 确定结束考试弹窗
|
||
self.stop_exercise_pop_windows.connect(self.stop_exercise_pop_commit)
|
||
|
||
def fix_score(self):
|
||
self.eb.fix_score(self.selected_person_id)
|
||
# 确认成绩的考生列表
|
||
self.person_list = self.eb.get_running_all_score()
|
||
self.clear_summary()
|
||
self.redraw_person_list()
|
||
|
||
def withdraw_fix_score(self):
|
||
self.eb.fix_withdraw(self.selected_person_id)
|
||
# 确认成绩的考生列表
|
||
self.person_list = self.eb.get_running_all_score()
|
||
self.clear_summary()
|
||
self.redraw_person_list()
|
||
|
||
def back_home(self):
|
||
# 返回首页时弹窗提示
|
||
self.message_pop_windows.show("此操作将直接结束考试,并且成绩作废,是否继续?")
|
||
|
||
# 弹窗点击了确定按钮事件
|
||
def message_pop_commit(self):
|
||
self.clear_summary()
|
||
# 跳转
|
||
self.jump2(HOME_PAGE)
|
||
|
||
def stop(self):
|
||
# 返回首页时弹窗提示
|
||
self.stop_exercise_pop_windows.show("此操作将结束考试,并提交成绩,是否继续?")
|
||
|
||
# 弹窗点击了确定按钮事件
|
||
def stop_exercise_pop_commit(self):
|
||
self.clear_summary()
|
||
# 提交考试成绩
|
||
self.eb.update_running_score()
|
||
pkg = {
|
||
EXERCISE_TYPE: self.data[EXERCISE_TYPE],
|
||
PERSON_LIST: [
|
||
{
|
||
IS_CHOOSE: False,
|
||
NAME: score["name"],
|
||
ID: score["id"],
|
||
SCORE: int(score['running_score']),
|
||
COUNT: format_time(score['running_count']),
|
||
CLASS: score['class'],
|
||
BAND_ID: score["band_id"]
|
||
}
|
||
for score in self.eb.get_all_score()
|
||
]
|
||
}
|
||
self.jump2(RUNNING_PICK_UP, pkg)
|
||
|
||
def refresh(self) -> None:
|
||
exercise_type = self.data.get(EXERCISE_TYPE)
|
||
if exercise_type:
|
||
exercise_name = EXERCISE_TYPE_TABLE[exercise_type]
|
||
self.title_label.setText(exercise_name)
|
||
|
||
# 确认成绩的考生列表
|
||
self.person_list = self.data.get(PERSON_LIST)
|
||
self.clear_summary()
|
||
self.redraw_person_list()
|
||
|
||
# 清除所有结算信息
|
||
def clear_summary(self):
|
||
scroll_round_widget = self.init_scroll_round_widget()
|
||
self.scroll_round_area.setWidget(scroll_round_widget)
|
||
self.round_tips_label.setText("长跑详情:")
|
||
self.score_abnormal_label.setText("成绩可能存在异常,请核对!")
|
||
# 清除旧的记录
|
||
self.labels = []
|
||
|
||
def redraw_person_list(self):
|
||
column_num = 6
|
||
row_num = 6
|
||
scroll_widget = QWidget()
|
||
scroll_widget.setStyleSheet("border:none;")
|
||
scroll_layout = QVBoxLayout(scroll_widget)
|
||
row_layout = QHBoxLayout()
|
||
for index, item in enumerate(self.person_list):
|
||
card_widget = self.create_person_card(item)
|
||
row_layout.addWidget(card_widget)
|
||
self.labels.append(card_widget)
|
||
|
||
index += 1
|
||
if index % column_num == 0:
|
||
scroll_layout.addLayout(row_layout)
|
||
row_layout = QHBoxLayout()
|
||
|
||
if row_layout.count() > 0:
|
||
for _ in range(column_num - row_layout.count()):
|
||
# 空白框
|
||
empty_box = QLabel()
|
||
row_layout.addWidget(empty_box)
|
||
scroll_layout.addLayout(row_layout)
|
||
|
||
if scroll_layout.count() < row_num:
|
||
for _ in range(row_num - scroll_layout.count()):
|
||
# 空白框
|
||
empty_box = QLabel()
|
||
empty_box.setFrameShape(QFrame.Box)
|
||
empty_box.setLineWidth(0)
|
||
# 增加到布局中
|
||
row_layout = QHBoxLayout()
|
||
row_layout.addWidget(empty_box)
|
||
scroll_layout.addStretch()
|
||
scroll_layout.addLayout(row_layout)
|
||
self.scroll_area.setWidget(scroll_widget)
|
||
|
||
# 每个考生的卡片样式
|
||
def create_person_card(self, item):
|
||
# 如果done是True,代表考生已完成考试,成绩没有异常,显示蓝色
|
||
if item["done"]:
|
||
self.card_widget = self.init_card_widget_widget()
|
||
round_score_name = self.init_round_score_name_label_widget()
|
||
round_score_id = self.init_round_score_id_label_widget()
|
||
round_score_name.setText(item["name"])
|
||
# 否则就是为完成考试,分两种情况,判断成绩是否发生修改
|
||
else:
|
||
# 未完成考试的成绩被修改成功,显示蓝色,并在名字后面添加※号标记
|
||
if item["fix"]:
|
||
self.card_widget = self.init_card_widget_widget()
|
||
round_score_name = self.init_round_score_name_label_widget()
|
||
round_score_id = self.init_round_score_id_label_widget()
|
||
round_score_name.setText(item["name"] + "※")
|
||
# 未完成考试的成绩没有修改,显示黄色
|
||
else:
|
||
self.card_widget = self.init_unfinished_card_widget_widget()
|
||
round_score_name = self.init_round_unfinished_score_name_label_widget()
|
||
round_score_id = self.init_round_unfinished_score_id_label_widget()
|
||
round_score_name.setText(item["name"])
|
||
round_score_time = self.init_round_score_time_label_widget()
|
||
round_score_grade = self.init_round_score_grade_label_widget()
|
||
bottom_layout = QHBoxLayout()
|
||
bottom_layout.addWidget(round_score_time)
|
||
bottom_layout.addWidget(round_score_grade)
|
||
round_score_id.setText('编号:' + item["id"])
|
||
round_score_time.setText('用时:' + format_time(item["total_time"]))
|
||
round_score_grade.setText('成绩:' + str(item["score"]))
|
||
person_card_layout = QVBoxLayout(self.card_widget)
|
||
person_card_layout.addWidget(round_score_name)
|
||
person_card_layout.addWidget(round_score_id)
|
||
person_card_layout.addLayout(bottom_layout)
|
||
self.card_widget.mousePressEvent = lambda event, lbl=self.card_widget: self.on_label_clicked(event, lbl)
|
||
return self.card_widget
|
||
|
||
# 点击考生卡片后,获取考生长跑详情,包括考生姓名,ID,圈数,每圈用时
|
||
def on_label_clicked(self, event, label):
|
||
index = self.labels.index(label)
|
||
person_name = self.person_list[index]["name"]
|
||
# 获得该人员ID
|
||
self.selected_person_id = self.person_list[index]["id"]
|
||
self.round_tips_label.setText(person_name + "(编号:" + self.selected_person_id + ")长跑详情:")
|
||
self.score_abnormal_label.setText(person_name + "(编号:" + self.selected_person_id + ")的成绩可能存在异常,请核对!")
|
||
|
||
# 考生长跑详情,圈数+圈时
|
||
scroll_round_widget = self.init_scroll_round_widget()
|
||
row_round_layout = QVBoxLayout(scroll_round_widget)
|
||
row_round_num = 10
|
||
|
||
for item in self.eb.get_round_time(self.selected_person_id):
|
||
round_time_label = self.init_round_time_label_widget()
|
||
round_time_label.setText(item["name"] + ":" + item["time"])
|
||
row_round_layout.addWidget(round_time_label)
|
||
if row_round_layout.count() < row_round_num:
|
||
for _ in range(row_round_num - row_round_layout.count()):
|
||
# 空白框
|
||
empty_box = QLabel()
|
||
empty_box.setStyleSheet("border:none")
|
||
row_round_layout.addWidget(empty_box)
|
||
self.scroll_round_area.setWidget(scroll_round_widget)
|