Skip to content

Commit 6fd5173

Browse files
authored
Merge pull request eee555#39 from putianyi889/patch-30
管理员审核、冻结UI
2 parents 2a3a6e4 + 847d67e commit 6fd5173

File tree

6 files changed

+124
-19
lines changed

6 files changed

+124
-19
lines changed

back_end/saolei/userprofile/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def user_login(request):
3232
# login(request, request.user)
3333
response['msg'] = response['msg'] = {
3434
"id": request.user.id, "username": request.user.username,
35-
"realname": request.user.realname, "is_banned": request.user.is_banned}
35+
"realname": request.user.realname, "is_banned": request.user.is_banned, "is_staff": request.user.is_staff}
3636
return JsonResponse(response)
3737
# if user_id:=request.session.get("_auth_user_id"):
3838
# if user:=User.objects.get(id=user_id):
@@ -59,7 +59,7 @@ def user_login(request):
5959
login(request, user)
6060
response['msg'] = {
6161
"id": user.id, "username": user.username,
62-
"realname": user.realname, "is_banned": user.is_banned}
62+
"realname": user.realname, "is_banned": user.is_banned, "is_staff": user.is_staff}
6363
if 'user_id' in data and data['user_id'] != str(user.id):
6464
# 检测到小号
6565
logger.info(f'{data["user_id"][:50]} is diffrent from {str(user.id)}.')

back_end/saolei/videomanager/views.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ def video_query(request):
179179

180180
values = video_all_fields
181181

182+
# 排序
182183
if data["r"] == "true":
183184
ob = "-" + data["o"]
184185
else:
@@ -362,7 +363,7 @@ def approve(request):
362363
update_video_num(video_i)
363364
cache.hdel("review_queue", _id)
364365
# logger.info(f'{request.user.id} approve {json.dumps(ids)} response {json.dumps(res)}')
365-
return JsonResponse(json.dumps(res), safe=False)
366+
return JsonResponse(res, safe=False)
366367
else:
367368
return HttpResponse("别瞎玩")
368369

front_end/src/components/VideoList.vue

Lines changed: 70 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
src="/flop/index.html" ref="video_iframe"></iframe>
88
</el-dialog>
99
</Teleport>
10-
<el-table :data="videos_trans" :show-header="false" @row-click="preview"
10+
<el-table :data="videos_trans" :show-header="false" @row-click="preview" table-layout="auto"
1111
style="width: 100%; color: black;font-size: 16px;">
1212
<el-table-column prop="time" min-width="200" />
1313
<el-table-column v-if="need_player_name" min-width="80">
@@ -20,6 +20,13 @@
2020
<el-table-column prop="mode" min-width="80" />
2121
<el-table-column prop="rtime" min-width="90" />
2222
<el-table-column prop="bv" min-width="60" />
23+
<el-table-column style="white-space: nowrap;">
24+
<template #default="scope">
25+
<el-button v-if="review_mode" type="success" circle :icon="Check" @click="handleApprove(scope.row)" />
26+
<el-button v-if="store.user.is_staff" type="danger" circle :icon="Close"
27+
@click="handleFreeze(scope.row)" />
28+
</template>
29+
</el-table-column>
2330
<!-- <el-table-column min-width="200">
2431
<template #default="scope">
2532
<PreviewDownload :id="scope.row.key"></PreviewDownload>
@@ -37,7 +44,13 @@ import PlayerName from '@/components/PlayerName.vue';
3744
const preview_visible = ref(false);
3845
import useCurrentInstance from "@/utils/common/useCurrentInstance";
3946
import { getRowIdentity } from 'element-plus/es/components/table/src/util';
40-
import { ms_to_s } from '@/utils';
47+
import { Check, Close } from '@element-plus/icons-vue';
48+
import { ElNotification } from 'element-plus';
49+
50+
import { useUserStore } from '@/store';
51+
const store = useUserStore()
52+
53+
import { ms_to_s, approve, freeze } from '@/utils';
4154
const { proxy } = useCurrentInstance();
4255
4356
const data = defineProps({
@@ -54,13 +67,19 @@ const data = defineProps({
5467
need_player_name: {
5568
type: Boolean,
5669
default: true
70+
},
71+
review_mode: {
72+
type: Boolean,
73+
default: false
5774
}
5875
})
5976
77+
const emit = defineEmits(['update'])
78+
6079
const videos_trans = computed(() => {
6180
data.videos.forEach((v: any) => {
6281
// console.log(v);
63-
82+
6483
v.time = utc_to_local_format(v.time);
6584
if (v.level == "b") {
6685
v.level = "初级";
@@ -69,7 +88,7 @@ const videos_trans = computed(() => {
6988
} else if (v.level == "e") {
7089
v.level = "高级";
7190
}
72-
v.rtime = ms_to_s(v.timems)+ "s";
91+
v.rtime = ms_to_s(v.timems) + "s";
7392
if (v.mode == "00") {
7493
v.mode = "标准";
7594
} else if (v.mode == "01") {
@@ -161,6 +180,53 @@ const playVideo = function (uri: string) {
161180
});
162181
}
163182
183+
const handleApprove = async function (row: any) {
184+
let status = await approve(proxy, row.key);
185+
if (status == 'True') {
186+
ElNotification({
187+
title: '审核成功',
188+
message: '录像已通过审核',
189+
type: 'success',
190+
})
191+
} else if (status == 'False') {
192+
ElNotification({
193+
title: '审核失败',
194+
message: '录像已通过审核',
195+
type: 'warning',
196+
})
197+
} else {
198+
ElNotification({
199+
title: '审核失败',
200+
message: '发生未知错误: status=' + status,
201+
type: 'error',
202+
})
203+
}
204+
emit('update')
205+
}
206+
207+
const handleFreeze = async function (row: any) {
208+
let status = await freeze(proxy, row.key);
209+
if (status == 'True') {
210+
ElNotification({
211+
title: '审核成功',
212+
message: '录像已通过审核',
213+
type: 'success',
214+
})
215+
} else if (status == 'False') {
216+
ElNotification({
217+
title: '审核失败',
218+
message: '录像已通过审核',
219+
type: 'warning',
220+
})
221+
} else {
222+
ElNotification({
223+
title: '审核失败',
224+
message: '发生未知错误: status=' + status,
225+
type: 'error',
226+
})
227+
}
228+
emit('update')
229+
}
164230
165231
</script>
166232
<style></style>

front_end/src/store/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export const useUserStore = defineStore('user', {
1010
username: "",
1111
realname: "",
1212
is_banned: false,
13+
is_staff: true,
1314
country: ""
1415
}, // 真正的用户
1516
// 访问谁的地盘不再具有记忆性。即点“我的地盘”,将永远是“我”的地盘

front_end/src/utils/index.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,29 @@ export function ms_to_s(ms: number): string {
1717
return `${Math.floor(ms / 1000)}.${(ms % 1000 + "").padStart(3, '0')}`;
1818
}
1919

20+
import { ComponentCustomProperties } from "vue";
21+
export async function approve(proxy: ComponentCustomProperties & Record<string, any>, id: number) {
22+
var status;
23+
await proxy.$axios.get('video/approve?ids=[' + id + ']').then(function (response) {
24+
const data = response.data;
25+
if (data.length != 1) {
26+
console.log(data)
27+
throw new Error('Unexpected error')
28+
}
29+
status = data[0]
30+
}).catch()
31+
return status
32+
}
2033

34+
export async function freeze(proxy: ComponentCustomProperties & Record<string, any>, id: number) {
35+
var status;
36+
await proxy.$axios.get('video/freeze?ids=[' + id + ']').then(function (response) {
37+
const data = response.data;
38+
if (data.length != 1) {
39+
console.log(data)
40+
throw new Error('Unexpected error')
41+
}
42+
status = data[0]
43+
}).catch()
44+
return status
45+
}

front_end/src/views/HomeView.vue

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<VideoList :videos="newest_queue" :reverse="true"></VideoList>
2121
</el-tab-pane>
2222
<el-tab-pane label="审核队列" class="bottom_tabs" :lazy="true">
23-
<VideoList :videos="review_queue"></VideoList>
23+
<VideoList :videos="review_queue" :review_mode="store.user.is_staff" @update="update_review_queue" v-loading="review_queue_updating"></VideoList>
2424
</el-tab-pane>
2525
</el-tabs>
2626
</el-main>
@@ -45,22 +45,17 @@ import { to_fixed_n } from "@/utils";
4545
const { proxy } = useCurrentInstance();
4646
import { utc_to_local_format } from "@/utils/system/tools";
4747
48+
import { useUserStore } from '../store'
49+
const store = useUserStore()
50+
4851
const review_queue = ref<any[]>([]);
4952
const newest_queue = ref<any[]>([]);
5053
const news_queue = ref<any[]>([]);
5154
55+
const review_queue_updating = ref(false);
56+
5257
onMounted(() => {
53-
proxy.$axios.get('/video/review_queue/',
54-
{
55-
params: {}
56-
}
57-
).then(function (response) {
58-
for (let key in response.data) {
59-
response.data[key] = JSON.parse(response.data[key] as string);
60-
response.data[key]["key"] = Number.parseInt(key);
61-
review_queue.value.push(response.data[key]);
62-
}
63-
})
58+
update_review_queue()
6459
proxy.$axios.get('/video/newest_queue/',
6560
{
6661
params: {}
@@ -123,6 +118,23 @@ const trans_index = (i: string) => {
123118
}
124119
}
125120
121+
const update_review_queue = async () => {
122+
review_queue_updating.value = true
123+
await proxy.$axios.get('/video/review_queue/',
124+
{
125+
params: {}
126+
}
127+
).then(function (response) {
128+
review_queue.value.splice(0,review_queue.value.length)
129+
for (let key in response.data) {
130+
response.data[key] = JSON.parse(response.data[key] as string);
131+
response.data[key]["key"] = Number.parseInt(key);
132+
review_queue.value.push(response.data[key]);
133+
}
134+
})
135+
review_queue_updating.value = false
136+
}
137+
126138
</script>
127139

128140
<style scope lang='less'>

0 commit comments

Comments
 (0)