原始提交
This commit is contained in:
242
assets/user.js
Normal file
242
assets/user.js
Normal file
@@ -0,0 +1,242 @@
|
||||
/*
|
||||
* Copyright (C) 2022. Gardel <sunxinao@hotmail.com> and contributors
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
const MDCSnackbar = mdc.snackbar.MDCSnackbar;
|
||||
const MDCTextField = mdc.textField.MDCTextField;
|
||||
const MDCFormField = mdc.formField.MDCFormField;
|
||||
const MDCRadio = mdc.radio.MDCRadio;
|
||||
//const MDCRipple = mdc.ripple.MDCRipple;
|
||||
|
||||
const snackbar = new MDCSnackbar(document.querySelector('.mdc-snackbar'));
|
||||
const modelField = new MDCFormField(document.querySelector('.model'));
|
||||
const radio1 = new MDCRadio(document.querySelector('#radio-steve'));
|
||||
const radio2 = new MDCRadio(document.querySelector('#radio-alex'));
|
||||
const radio3 = new MDCRadio(document.querySelector('#radio-skin'));
|
||||
const radio4 = new MDCRadio(document.querySelector('#radio-cape'));
|
||||
modelField.input = {radio1, radio2};
|
||||
const url = new MDCTextField(document.querySelector('.url'));
|
||||
const file = new MDCTextField(document.querySelector('.file'));
|
||||
const changeTo = new MDCTextField(document.querySelector('.changeTo'));
|
||||
|
||||
const modelTypeForm = document.querySelector('.mdc-form-field.model');
|
||||
|
||||
snackbar.close()
|
||||
|
||||
$("#file-input").change(function() {
|
||||
const path = this.value;
|
||||
if (!path) {
|
||||
$("#file-path").text("或选择一张图片");
|
||||
$(".url").show();
|
||||
} else {
|
||||
$("#file-path").text(path);
|
||||
url.value = '';
|
||||
$(".url").hide();
|
||||
}
|
||||
});
|
||||
|
||||
const modelTypeChange = function () {
|
||||
if (radio3.checked) {
|
||||
$(modelTypeForm).show();
|
||||
} else {
|
||||
$(modelTypeForm).hide();
|
||||
}
|
||||
}
|
||||
$("#radio-3").change(modelTypeChange)
|
||||
$("#radio-4").change(modelTypeChange)
|
||||
|
||||
$("#url-input").on("input", function() {
|
||||
const url = this.value;
|
||||
if (!url) {
|
||||
$(".file").show();
|
||||
} else {
|
||||
file.value = '';
|
||||
$(".file").hide();
|
||||
}
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
if (!localStorage.accessToken) {
|
||||
localStorage.loginTime = 1;
|
||||
window.location = "index.html";
|
||||
}
|
||||
$.ajax({
|
||||
url: '/authserver/validate',
|
||||
type: 'POST',
|
||||
dataType: "JSON",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({
|
||||
accessToken: localStorage.accessToken,
|
||||
}),
|
||||
success: function(data) {
|
||||
//有效,啥也不整
|
||||
},
|
||||
error: function(e) {
|
||||
if (e.status == 403) {
|
||||
// 持续套娃
|
||||
$.ajax({
|
||||
url: '/authserver/refresh',
|
||||
type: 'POST',
|
||||
dataType: "JSON",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({
|
||||
accessToken: localStorage.accessToken,
|
||||
}),
|
||||
success: function(data) {
|
||||
if (!data.accessToken) {
|
||||
localStorage.loginTime = 1;
|
||||
window.location = "index.html";
|
||||
} else {
|
||||
snackbar.timeoutMs = 5000;
|
||||
snackbar.labelText = "刷新token成功,accessToken:" + data.accessToken;
|
||||
snackbar.open();
|
||||
localStorage.accessToken = data.accessToken;
|
||||
localStorage.loginTime = new Date().getTime();
|
||||
if(data.selectedProfile) {
|
||||
localStorage.profileName = data.selectedProfile.name;
|
||||
localStorage.uuid = data.selectedProfile.id;
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function(e) {
|
||||
if (e.status == 403) {
|
||||
localStorage.loginTime = 1;
|
||||
window.location = "index.html";
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$("#upload-form").submit(function(e) {
|
||||
e.preventDefault();
|
||||
if (!url.value && !$("#file-input").val()) {
|
||||
snackbar.timeoutMs = 5000;
|
||||
snackbar.labelText = "没填信息";
|
||||
snackbar.open();
|
||||
return;
|
||||
}
|
||||
let textureType = 'skin'
|
||||
if (radio3.checked) {
|
||||
textureType = 'skin'
|
||||
} else if (radio4.checked) {
|
||||
textureType = 'cape'
|
||||
}
|
||||
if (!url.value) {
|
||||
const formData = new FormData();
|
||||
formData.append("model", radio1.checked ? radio1.value : radio2.value);
|
||||
formData.append("file", $("#file-input")[0].files[0]);
|
||||
//formData.contentType = "multipart/form-data";
|
||||
$.ajax({
|
||||
url: `/api/user/profile/${localStorage.uuid}/${textureType}`,
|
||||
type: 'PUT',
|
||||
processData: false,
|
||||
contentType: false,
|
||||
headers: {'Authorization':'Bearer ' + localStorage.accessToken},
|
||||
data: formData,
|
||||
success: function(data) {
|
||||
snackbar.timeoutMs = 5000;
|
||||
snackbar.labelText = "材质上传成功";
|
||||
snackbar.open();
|
||||
},
|
||||
error: function(e) {
|
||||
snackbar.timeoutMs = 5000;
|
||||
snackbar.labelText = "材质上传失败";
|
||||
snackbar.open();
|
||||
}
|
||||
});
|
||||
} else if (url.value) {
|
||||
$.ajax({
|
||||
url: `/api/user/profile/${localStorage.uuid}/${textureType}`,
|
||||
type: 'POST',
|
||||
dataType: "JSON",
|
||||
contentType: "application/json",
|
||||
headers: {'Authorization':'Bearer ' + localStorage.accessToken},
|
||||
data: JSON.stringify({
|
||||
model: radio1.checked ? radio1.value : radio2.value,
|
||||
url: url.value
|
||||
}),
|
||||
success: function(data) {
|
||||
snackbar.timeoutMs = 5000;
|
||||
snackbar.labelText = "材质上传成功";
|
||||
snackbar.open();
|
||||
},
|
||||
error: function(e) {
|
||||
snackbar.timeoutMs = 5000;
|
||||
snackbar.labelText = "材质上传失败";
|
||||
snackbar.open();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$("#change-form").submit(function(e) {
|
||||
e.preventDefault();
|
||||
if (changeTo.value.length <= 1) {
|
||||
snackbar.timeoutMs = 5000;
|
||||
snackbar.labelText = "更改失败, 角色名格式不正确";
|
||||
snackbar.open();
|
||||
return;
|
||||
}
|
||||
$.ajax({
|
||||
url: '/authserver/change',
|
||||
type: 'POST',
|
||||
dataType: "JSON",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({
|
||||
accessToken: localStorage.accessToken,
|
||||
changeTo: changeTo.value
|
||||
}),
|
||||
success: function(data) {
|
||||
snackbar.timeoutMs = 5000;
|
||||
snackbar.labelText = "更改成功";
|
||||
snackbar.open();
|
||||
localStorage.profileName = changeTo.value;
|
||||
},
|
||||
error: function(e) {
|
||||
snackbar.timeoutMs = 5000;
|
||||
snackbar.labelText = "更改失败, 可能是角色名已存在";
|
||||
snackbar.open();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('#delete-btn').click(function () {
|
||||
let textureType = 'skin'
|
||||
if (radio3.checked) {
|
||||
textureType = 'skin'
|
||||
} else if (radio4.checked) {
|
||||
textureType = 'cape'
|
||||
}
|
||||
$.ajax({
|
||||
url: `/api/user/profile/${localStorage.uuid}/${textureType}`,
|
||||
type: 'DELETE',
|
||||
headers: {'Authorization':'Bearer ' + localStorage.accessToken},
|
||||
success: function(data) {
|
||||
snackbar.timeoutMs = 5000;
|
||||
snackbar.labelText = "恢复成功";
|
||||
snackbar.open();
|
||||
localStorage.profileName = changeTo.value;
|
||||
},
|
||||
error: function(e) {
|
||||
snackbar.timeoutMs = 5000;
|
||||
snackbar.labelText = "重置失败";
|
||||
snackbar.open();
|
||||
}
|
||||
});
|
||||
})
|
Reference in New Issue
Block a user