@@ -80,10 +80,10 @@
+
+
\ No newline at end of file
diff --git a/front_end/src/components/widgets/UserArbiterCSV.vue b/front_end/src/components/widgets/UserArbiterCSV.vue
new file mode 100644
index 00000000..4e52a445
--- /dev/null
+++ b/front_end/src/components/widgets/UserArbiterCSV.vue
@@ -0,0 +1,136 @@
+
+
+ {{ $t('profile.exportJSON') }}
+
+
+
+
+
+
+
+ {{ $t('profile.exportArbiterCSV') }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/front_end/src/i18n/locales/en.ts b/front_end/src/i18n/locales/en.ts
index 82df57ae..d790b06e 100644
--- a/front_end/src/i18n/locales/en.ts
+++ b/front_end/src/i18n/locales/en.ts
@@ -196,6 +196,8 @@ export default {
captchaRequired: 'Captcha required',
confirmPasswordMismatch: 'Mismatches password',
connectionFail: 'Connection failed. Please try again',
+ copyToClipboardFail: 'Failed to copy.',
+ copyToClipboardSuccess: 'Text copied.',
emailCodeInvalid: 'Email code is invalid or expired',
emailCodeRequired: 'Email code required',
emailCollision: 'Email already exists',
@@ -249,6 +251,10 @@ export default {
modeRecord: ' mode record: '
},
videos: 'All videos',
+ exportJSON: 'Export as JSON',
+ exportJSONTooltip: 'Raw data fetched from the server.',
+ exportArbiterCSV: 'Export as CSV',
+ exportArbiterCSVTooltip: 'Compatible with stats_csv.csv generated by Minesweeper Arbiter.
Not supporting Leff, Reff, Deff, GZiNi and HZiNi at present.',
upload: {
title: 'Video Upload',
dragOrClick: `Drag files here or click here to select`,
diff --git a/front_end/src/i18n/locales/zh-cn.ts b/front_end/src/i18n/locales/zh-cn.ts
index 531e6472..5b53e008 100644
--- a/front_end/src/i18n/locales/zh-cn.ts
+++ b/front_end/src/i18n/locales/zh-cn.ts
@@ -196,6 +196,8 @@ export default {
captchaRequired: '请输入图形验证码',
confirmPasswordMismatch: '密码和确认密码不一致',
connectionFail: '无法连接到服务器,请重试',
+ copyToClipboardFail: '复制失败',
+ copyToClipboardSuccess: '复制成功',
emailCodeInvalid: '邮箱验证码过期或不正确',
emailCodeRequired: '请输入邮箱验证码',
emailCollision: '邮箱已存在',
@@ -249,6 +251,10 @@ export default {
modeRecord: '模式纪录:'
},
videos: '全部录像',
+ exportJSON: '导出JSON',
+ exportJSONTooltip: '从服务器获取的源数据',
+ exportArbiterCSV: '导出CSV',
+ exportArbiterCSVTooltip: '兼容 Minesweeper Arbiter 生成的 stats_csv.csv。
目前不支持 Leff, Reff, Deff, GZiNi, HZiNi。',
upload: {
title: '上传录像',
dragOrClick: `将录像拉到此处或 点击此处选择`,
diff --git a/front_end/src/store/index.ts b/front_end/src/store/index.ts
index 91183b99..531a409b 100644
--- a/front_end/src/store/index.ts
+++ b/front_end/src/store/index.ts
@@ -11,7 +11,11 @@ export const store = defineStore('user', {
realname: "",
is_banned: false,
is_staff: false,
- country: ""
+ country: "",
+ accountlink: [],
+ identifiers: [],
+ videos: [],
+ loading: true,
}, // 真正的用户
// 访问谁的地盘不再具有记忆性。即点“我的地盘”,将永远是“我”的地盘
// 想要访问特定用户,可以用url
@@ -22,7 +26,12 @@ export const store = defineStore('user', {
username: "",
realname: "",
is_banned: false,
- country: ""
+ is_staff: false,
+ country: "",
+ accountlink: [] as any[],
+ identifiers: [] as string[],
+ videos: [] as any[],
+ loading: true,
},
login_status: LoginStatus.Undefined, // 登录状态,全局维护
new_identifier: false, // 是否有新标识录像
diff --git a/front_end/src/views/PlayerProfileView.vue b/front_end/src/views/PlayerProfileView.vue
index 05957a00..6a0f78ef 100644
--- a/front_end/src/views/PlayerProfileView.vue
+++ b/front_end/src/views/PlayerProfileView.vue
@@ -1,8 +1,16 @@
{{ $t('accountlink.title') }}
+
+
+
+
+
\ No newline at end of file
diff --git a/front_end/src/views/PlayerVideosView.vue b/front_end/src/views/PlayerVideosView.vue
index 6559f295..6913cc9a 100644
--- a/front_end/src/views/PlayerVideosView.vue
+++ b/front_end/src/views/PlayerVideosView.vue
@@ -1,54 +1,15 @@
-
-
-
+
+
+
+
-
-
-
diff --git a/front_end/src/views/PlayerView.vue b/front_end/src/views/PlayerView.vue
index 963b3b3d..34d20053 100644
--- a/front_end/src/views/PlayerView.vue
+++ b/front_end/src/views/PlayerView.vue
@@ -46,14 +46,13 @@
- {{ realname }}
+ {{ realname }}
+
{{ signature }}
+ $t('profile.change') }}
- {{ $t('profile.identifier') }}{{
- identifiers.join(", ") }}
@@ -70,7 +69,7 @@
-
+
@@ -106,15 +105,12 @@ import { useRoute } from 'vue-router';
const t = useI18n();
const route = useRoute()
-const loading = ref(true)
-
//编辑前的
const userid = ref("");
const username = ref("");
const realname = ref("");
const signature = ref("");
const popularity = ref("");
-const identifiers = ref([]); // 通过审核的标识
//编辑状态时的
const realname_edit = ref("");
@@ -164,7 +160,9 @@ function refresh() {
store.player.username = data.username;
store.player.is_banned = data.is_banned;
store.player.country = data.country;
-
+ store.player.is_staff = data.is_staff;
+ store.player.identifiers = data.identifiers;
+ store.player.videos = data.videos;
userid.value = data.id;
realname.value = data.realname;
@@ -174,15 +172,13 @@ function refresh() {
popularity.value = data.popularity;
realname_edit.value = data.realname;
signature_edit.value = data.signature;
- identifiers.value.length = 0;
- identifiers.value.push(...data.identifiers);
// console.log(imageUrl);
if (data.avatar) {
imageUrl.value = "data:image/;base64," + data.avatar;
imageUrlOld = "data:image/;base64," + data.avatar;
}
// console.log(imageUrl);
- loading.value = false;
+ store.player.loading = false;
})
}
diff --git a/front_end/src/views/SettingView.vue b/front_end/src/views/SettingView.vue
index c41dab05..4f0f370e 100644
--- a/front_end/src/views/SettingView.vue
+++ b/front_end/src/views/SettingView.vue
@@ -38,21 +38,15 @@
{{ $t('common.toDo') }}
{{ $t('common.toDo') }}
-
-
-
-
-