summaryrefslogtreecommitdiff
path: root/pages/admin
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2022-10-16 19:30:29 +0200
committerSanto Cariotti <santo@dcariotti.me>2022-10-16 19:30:29 +0200
commitc43aa314a3916be3c264d0d4f94f9153151d118f (patch)
tree094d643e67a495275c90f7b4e92a082687241343 /pages/admin
parent51143de16c323072c83f1968dfe31e2cf530d06c (diff)
Delete rows from admin cp
Diffstat (limited to 'pages/admin')
-rw-r--r--pages/admin/models.vue58
-rw-r--r--pages/admin/reports.vue67
2 files changed, 125 insertions, 0 deletions
diff --git a/pages/admin/models.vue b/pages/admin/models.vue
index e1f65d7..ca84932 100644
--- a/pages/admin/models.vue
+++ b/pages/admin/models.vue
@@ -1,6 +1,39 @@
<template lang="pug">
.mx-auto.w-90p.py-6(class="sm:px-6 lg:px-8 md:max-w-7xl")
h1.text-3xl.font-bold(class="dark:text-white") Models
+ .relative.z-10(aria-labelledby="modal-title", role="dialog", aria-modal="true" v-if="boxDeleteModel > 0")
+ .fixed.inset-0.bg-gray-900.bg-opacity-90.transition-opacity
+ .fixed.inset-0.z-10.overflow-y-auto
+ .flex.min-h-full.items-end.justify-center.p-4.text-center(class="sm:items-center sm:p-0")
+ .relative.transform.overflow-hidden.rounded-lg.bg-white.text-left.shadow-xl.transition-all(class="sm:my-8 sm:w-full sm:max-w-lg")
+ .bg-white.px-4.pt-5.pb-4(class="sm:p-6 sm:pb-4")
+ div(class="sm:flex sm:items-start")
+ .mx-auto.flex.h-12.w-12.flex-shrink-0.items-center.justify-center.rounded-full.bg-red-100(class="sm:mx-0 sm:h-10 sm:w-10")
+ svg.h-6.w-6.text-red-600(xmlns="http://www.w3.org/2000/svg", fill="none", viewbox="0 0 24 24", stroke-width="1.5", stroke="currentColor", aria-hidden="true")
+ path(stroke-linecap="round", stroke-linejoin="round", d="M12 10.5v3.75m-9.303 3.376C1.83 19.126 2.914 21 4.645 21h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 4.88c-.866-1.501-3.032-1.501-3.898 0L2.697 17.626zM12 17.25h.007v.008H12v-.008z")
+ .mt-3.text-center(class="sm:mt-0 sm:ml-4 sm:text-left")
+ h3#modal-title.text-lg.font-medium.leading-6.text-gray-900 Are you sure?
+ .mt-2
+ p.text-sm.text-gray-500
+ | Model data and all of the files will be deleted. This action cannot be undone.
+ .bg-gray-50.px-4.py-3(class="sm:flex sm:flex-row-reverse sm:px-6")
+ button.inline-flex.w-full.justify-center.rounded-md.border.border-transparent.bg-red-600.px-4.py-2.text-base.font-medium.text-white.shadow-sm(
+ type="button"
+ :class="{'hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 sm:ml-3 sm:w-auto sm:text-sm': true, 'opacity-25 cursor-default': isLoading}"
+ :disabled="isLoading"
+ :readonly="isLoading"
+ @click="deleteModel"
+ )
+ <svg class="animate-spin -ml-1 mr-3 h-5 w-5 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" v-if="isLoading">
+ <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
+ <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
+ </svg>
+ | Yes, confirm
+ button.mt-3.inline-flex.w-full.justify-center.rounded-md.border.border-gray-300.bg-white.px-4.py-2.text-base.font-medium.text-gray-700.shadow-sm(
+ type="button"
+ class="hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm"
+ @click="boxDeleteModel = 0"
+ ) Cancel
.grid.grid-cols-6.mt-3
div
admin-sidebar
@@ -10,6 +43,7 @@
:fields="models"
path="/models/"
:deleterow="true"
+ :delete="openModal"
)
pagination(:page="page" :pages="pages" v-if="count" path="/admin/models")
</template>
@@ -25,6 +59,7 @@ export default {
name: "AdminView",
head: { title: "Models · Verden" },
computed: {
+ ...mapGetters(["isLoading"]),
...mapGetters("auth", ["isLogged", "me"]),
...mapGetters("models", ["models", "count"]),
},
@@ -32,6 +67,7 @@ export default {
return {
page: 0,
pages: 0,
+ boxDeleteModel: 0,
};
},
components: {
@@ -51,5 +87,27 @@ export default {
this.pages = Math.ceil(this.count / 20);
});
},
+ methods: {
+ openModal(id) {
+ this.boxDeleteModel = id;
+ },
+ deleteModel() {
+ if (this.boxDeleteModel) {
+ this.$store
+ .dispatch("models/deleteModel", this.boxDeleteModel)
+ .then((response) => {
+ if (response.status == 204) {
+ this.$store.dispatch("models/getModels", this.page).then(() => {
+ this.pages = Math.ceil(this.count / 20);
+ });
+ this.$toast.success("Model deleted!");
+ this.boxDeleteModel = 0;
+ } else {
+ this.$toast.error(response.data);
+ }
+ });
+ }
+ },
+ },
};
</script>
diff --git a/pages/admin/reports.vue b/pages/admin/reports.vue
index 7191060..5866335 100644
--- a/pages/admin/reports.vue
+++ b/pages/admin/reports.vue
@@ -1,6 +1,38 @@
<template lang="pug">
.mx-auto.w-90p.py-6(class="sm:px-6 lg:px-8 md:max-w-7xl")
h1.text-3xl.font-bold(class="dark:text-white") Reports
+ .relative.z-10(aria-labelledby="modal-title", role="dialog", aria-modal="true" v-if="boxDeleteReport > 0")
+ .fixed.inset-0.bg-gray-900.bg-opacity-90.transition-opacity
+ .fixed.inset-0.z-10.overflow-y-auto
+ .flex.min-h-full.items-end.justify-center.p-4.text-center(class="sm:items-center sm:p-0")
+ .relative.transform.overflow-hidden.rounded-lg.bg-white.text-left.shadow-xl.transition-all(class="sm:my-8 sm:w-full sm:max-w-lg")
+ .bg-white.px-4.pt-5.pb-4(class="sm:p-6 sm:pb-4")
+ div(class="sm:flex sm:items-start")
+ .mx-auto.flex.h-12.w-12.flex-shrink-0.items-center.justify-center.rounded-full.bg-red-100(class="sm:mx-0 sm:h-10 sm:w-10")
+ svg.h-6.w-6.text-red-600(xmlns="http://www.w3.org/2000/svg", fill="none", viewbox="0 0 24 24", stroke-width="1.5", stroke="currentColor", aria-hidden="true")
+ path(stroke-linecap="round", stroke-linejoin="round", d="M12 10.5v3.75m-9.303 3.376C1.83 19.126 2.914 21 4.645 21h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 4.88c-.866-1.501-3.032-1.501-3.898 0L2.697 17.626zM12 17.25h.007v.008H12v-.008z")
+ .mt-3.text-center(class="sm:mt-0 sm:ml-4 sm:text-left")
+ h3#modal-title.text-lg.font-medium.leading-6.text-gray-900 Are you sure?
+ .mt-2
+ p.text-sm.text-gray-500 This action cannot be undone.
+ .bg-gray-50.px-4.py-3(class="sm:flex sm:flex-row-reverse sm:px-6")
+ button.inline-flex.w-full.justify-center.rounded-md.border.border-transparent.bg-red-600.px-4.py-2.text-base.font-medium.text-white.shadow-sm(
+ type="button"
+ :class="{'hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 sm:ml-3 sm:w-auto sm:text-sm': true, 'opacity-25 cursor-default': isLoading}"
+ :disabled="isLoading"
+ :readonly="isLoading"
+ @click="deleteReport"
+ )
+ <svg class="animate-spin -ml-1 mr-3 h-5 w-5 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" v-if="isLoading">
+ <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
+ <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
+ </svg>
+ | Yes, confirm
+ button.mt-3.inline-flex.w-full.justify-center.rounded-md.border.border-gray-300.bg-white.px-4.py-2.text-base.font-medium.text-gray-700.shadow-sm(
+ type="button"
+ class="hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm"
+ @click="boxDeleteReport = 0"
+ ) Cancel
.grid.grid-cols-6.mt-3
div
admin-sidebar
@@ -19,6 +51,7 @@
:keys="['id', 'model_id', 'created', 'updated', 'user', 'resolved', 'note', 'admin_note']"
:fields="warnings"
:deleterow="true"
+ :delete="openModal"
)
pagination(:page="page" :pages="pages" v-if="count" path="/admin/reports")
</template>
@@ -34,6 +67,7 @@ export default {
name: "AdminView",
head: { title: "Reports · Verden" },
computed: {
+ ...mapGetters(["isLoading"]),
...mapGetters("auth", ["isLogged", "me"]),
...mapGetters("warnings", ["warnings", "count"]),
},
@@ -42,6 +76,7 @@ export default {
page: 0,
pages: 0,
notResolved: false,
+ boxDeleteReport: 0,
};
},
components: {
@@ -82,5 +117,37 @@ export default {
});
}
},
+ methods: {
+ openModal(id) {
+ this.boxDeleteReport = id;
+ },
+ deleteReport() {
+ if (this.boxDeleteReport) {
+ this.$store
+ .dispatch("warnings/deleteWarning", this.boxDeleteReport)
+ .then((response) => {
+ if (response.status == 204) {
+ if (this.notResolved) {
+ this.$store
+ .dispatch("warnings/filterWarnings", { page: this.page })
+ .then(() => {
+ this.pages = Math.ceil(this.count / 20);
+ });
+ } else {
+ this.$store
+ .dispatch("warnings/getWarnings", this.page)
+ .then(() => {
+ this.pages = Math.ceil(this.count / 20);
+ });
+ }
+ this.$toast.success("Report deleted!");
+ this.boxDeleteReport = 0;
+ } else {
+ this.$toast.error(response.data);
+ }
+ });
+ }
+ },
+ },
};
</script>