diff --git a/back_end/saolei/videomanager/view_utils.py b/back_end/saolei/videomanager/view_utils.py index 6b5e305..51402a7 100644 --- a/back_end/saolei/videomanager/view_utils.py +++ b/back_end/saolei/videomanager/view_utils.py @@ -16,13 +16,9 @@ record_update_fields.append(f"{level}_{stat}_{mode}") record_update_fields.append(f"{level}_{stat}_id_{mode}") -def fieldname_translate(name: str): - if name in [field.name for field in VideoModel._meta.get_fields()]: - return name - elif name in [field.name for field in ExpandVideoModel._meta.get_fields()]: - return "video__" + name - else: - return name +video_all_fields = ["id", "upload_time", "player__realname", "timems", "bv", "bvs"] +for name in [field.name for field in ExpandVideoModel._meta.get_fields()]: + video_all_fields.append("video__" + name) # 确定用户破某个纪录后,且对应模式、指标的三个级别全部有录像后,更新redis中的数据 def update_3_level_cache_record(realname: str, index: str, mode: str, ms_user: UserMS): diff --git a/back_end/saolei/videomanager/views.py b/back_end/saolei/videomanager/views.py index 8f1fc00..ccf3416 100644 --- a/back_end/saolei/videomanager/views.py +++ b/back_end/saolei/videomanager/views.py @@ -3,7 +3,7 @@ from django.contrib.auth.decorators import login_required from .forms import UploadVideoForm from .models import VideoModel, ExpandVideoModel -from .view_utils import update_personal_record, update_personal_record_stock, fieldname_translate +from .view_utils import update_personal_record, update_personal_record_stock, video_all_fields from userprofile.models import UserProfile from django.http import HttpResponse, JsonResponse, FileResponse import json, urllib @@ -174,8 +174,7 @@ def video_query(request): if request.method == 'GET': data = request.GET - values = [fieldname_translate(s) for s in data.getlist("v[]")] - values.append("id") + values = video_all_fields if data["r"] == "true": ob = "-" + data["o"] diff --git a/front_end/src/views/VideoView.vue b/front_end/src/views/VideoView.vue index 573d2ea..b1d0020 100644 --- a/front_end/src/views/VideoView.vue +++ b/front_end/src/views/VideoView.vue @@ -9,12 +9,12 @@ {{ tag.name }} + @click="level_tag_selected = key as string; request_videos();">{{ tag.name }} {{ tag.name }} + @click="mode_tag_selected = key as string; request_videos();">{{ tag.name }} @@ -23,10 +23,6 @@ }} - - 刷新 - -
@@ -34,7 +30,8 @@ :prop="index_tags[key].key" :label="index_tags[key].name" :formatter="columnFormatter(key)" - sortable="custom"> + sortable="custom" + :sort-orders="index_tags[key].reverse ? (['descending', 'ascending']) : (['ascending', 'descending'])">
@@ -77,6 +74,7 @@ const state = reactive({ CurrentPage: 1, PageSize: 10, VideoCount: 0, + ReverseOrder: false, Total: 3 }); @@ -187,9 +185,8 @@ const columnFormatter = (key: string) => { onMounted(() => { document.getElementsByClassName("el-pagination__goto")[0].childNodes[0].nodeValue = "转到"; // 把分页器的go to改成中文。 - - mod_style(); + request_videos(); }) function to_fixed_n(input: string | number | undefined, to_fixed: number): string | number | undefined { @@ -214,15 +211,25 @@ const mod_style = () => { includes(index_tag_selected.value); } +const prevColumn = ref(null); //上一个排序列 const handleSortChange = (sort: any) => { - console.log(sort.prop, sort.order); - for (var key of Object.keys(index_tags)) { // 很丑陋,but it works + console.log(sort); + for (var key of Object.keys(index_tags)) { // 找到对应的key。很丑陋,but it works if (index_tags[key].key == sort.prop) { - index_tag_selected.value = key; - index_tags[key].reverse = sort.order == "descending"; + if (key != index_tag_selected.value) { // 改变了排序列,清除之前列的排序 + if (prevColumn.value != null) { + prevColumn.value.order = null; + } + index_tag_selected.value = key; + } + if (sort.order == null) { // 不允许通过点击箭头的方式将排序变成 null + sort.column.order = state.ReverseOrder ? "descending" : "ascending"; + } + state.ReverseOrder = sort.column.order == "descending" break; } } + prevColumn.value = sort.column; request_videos(); } @@ -248,9 +255,8 @@ const request_videos = () => { params: { level: level_tags[level_tag_selected.value].key, mode: mode_tags[mode_tag_selected.value].key, - v: ["player__realname"].concat(selected_index().map(function(x) {return index_tags[x].key})), // list of fields o: index_tags[index_tag_selected.value].key, // order by - r: index_tags[index_tag_selected.value].reverse, // reverse order + r: state.ReverseOrder, // reverse order ps: state.PageSize, // page size page: state.CurrentPage, }