page-badges.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. var app = new Vue({
  2. el: "#app",
  3. data: {
  4. badges: []
  5. },
  6. mounted: function() {
  7. this.getBadges();
  8. mountBadges();
  9. },
  10. methods: {
  11. getBadges: function() {
  12. $.ajax({
  13. url: "/api/badges/",
  14. method: "GET",
  15. success: function(data) {
  16. app.badges = data;
  17. },
  18. error: toast.defaultAjaxError
  19. });
  20. },
  21. createNewBadge: function() {
  22. $("#badgesForm input[name=id]").val("-1");
  23. $("#badgesForm input[name=name]").val("");
  24. $("#badgesForm input[name=description]").val("");
  25. $("#badgesForm input[name=icon]").val("");
  26. },
  27. postBadgeData: function() {
  28. let formElement = $("#badgesForm").get(0);
  29. let formData = new FormData(formElement);
  30. let isNewBadge = $("#badgesForm input[name=id]").val() == "-1";
  31. let method = "";
  32. let action = "";
  33. if (isNewBadge) {
  34. method = "POST";
  35. action = "created";
  36. } else {
  37. method = "PUT";
  38. action = "updated";
  39. }
  40. $.ajax({
  41. url: "/api/badges/",
  42. method: method,
  43. data: formData,
  44. cache: false,
  45. contentType: false,
  46. processData: false,
  47. success: function(data) {
  48. if (isNewBadge) {
  49. app.badges.push(data);
  50. } else {
  51. for (let i = 0; i < app.badges.length; i++) {
  52. if (app.badges[i].id == data.id) {
  53. app.badges[i].name = data.name;
  54. break;
  55. }
  56. }
  57. }
  58. toast.success(null, "Badge " + action + " successfully.", false);
  59. },
  60. error: toast.defaultAjaxError
  61. });
  62. }
  63. },
  64. updated: function() {}
  65. });
  66. function mountBadges() {
  67. $("#badgesDropdown").dropdown("setting", "onChange", function(val) {
  68. let badge = app.badges[val];
  69. $("#badgesForm input[name=id]").val(badge.id);
  70. $("#badgesForm input[name=name]").val(badge.name);
  71. $("#badgesForm input[name=description]").val(badge.description);
  72. $("#badgesForm input[name=icon]").val(badge.icon);
  73. });
  74. }
  75. $("#menu-badges").addClass("active");