242 lines
8.2 KiB
JavaScript
242 lines
8.2 KiB
JavaScript
/*
|
||
* 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();
|
||
}
|
||
});
|
||
}) |