diff --git a/config/routes/control-panel.js b/config/routes/control-panel.js
index 48535d0..67ead64 100644
--- a/config/routes/control-panel.js
+++ b/config/routes/control-panel.js
@@ -164,7 +164,14 @@ module.exports = function(server, db) {
db.collection('items').updateOne({"_id": ObjectID(data.id)}, {$set: {title: data.title, price: data.price, description: data.description, category: data.category.title}});
res.redirect('/control-panel/items');
} catch (error) {
- console.log(error);
+ res.render('main/404');
+ }
+ });
+ server.post('/control-panel/items/delete', checkAuthenticated, (req, res) => {
+ try {
+ db.collection('items').deleteOne({"_id": ObjectID(req.body.id)});
+ res.redirect('/control-panel/items');
+ } catch (error) {
res.render('main/404');
}
});
diff --git a/dist/views/admin/assets/templates/modals/delete_item.pug b/dist/views/admin/assets/templates/modals/delete_item.pug
new file mode 100644
index 0000000..3029c16
--- /dev/null
+++ b/dist/views/admin/assets/templates/modals/delete_item.pug
@@ -0,0 +1,15 @@
+// Edit Item
+#deleteItemModal.c_modal-wrap.hide
+ .container
+ .row
+ .c_modal
+ .c_modal-content.deleteItem
+ .modal-content
+ .modal-content__header(style="margin-bottom: 1rem;")
+ h4.small-title Удаление товара
+ span#deleteItemClose.modal-close
+ i.material-icons close
+ .modal-content__form
+ p Вы действительно хотите удалить этот товар?
+ button.btn.red.delete-item(style="width: 100%;margin-top:3rem;") Удалить
+// Edit Category END
diff --git a/dist/views/admin/items.pug b/dist/views/admin/items.pug
index 641f3c1..d7b6c75 100644
--- a/dist/views/admin/items.pug
+++ b/dist/views/admin/items.pug
@@ -17,7 +17,7 @@ body.has-fixed-sidenav
label.label-icon(for="search")
i.material-icons search
i.material-icons close
- .table-items.table
+ #edit.table-items.table
table.highlight
thead
tr
@@ -30,11 +30,12 @@ body.has-fixed-sidenav
th Редактирование
.divider
- tbody#editItem
+ tbody
#loader.progress
.indeterminate
ul#pagination.pagination.center(data-page="1")
-
+
+ include ./assets/templates/modals/delete_item.pug
include ./assets/templates/modals/edit_item.pug
include ./assets/templates/footer.pug
include ./assets/scripts.pug
\ No newline at end of file
diff --git a/src/admin/components/pagination.component.js b/src/admin/components/pagination.component.js
index bb3fceb..1ba9aa7 100644
--- a/src/admin/components/pagination.component.js
+++ b/src/admin/components/pagination.component.js
@@ -51,11 +51,17 @@ export class PaginationComponent extends Component {
// выполняем запрос на сервер и выводим на данные
async moveTo(page, insertTo, request) {
- this.$el.setAttribute('data-page', page);
- insertTo.innerHTML = '';
- this.loader.show();
- insertTo.insertAdjacentHTML('afterbegin', await request(page));
- this.loader.hide();
+ try {
+ this.$el.setAttribute('data-page', page);
+ insertTo.innerHTML = '';
+ this.loader.show();
+ insertTo.insertAdjacentHTML('afterbegin', await request(page));
+ this.loader.hide();
+ } catch (error) {
+ this.loader.hide();
+ this.$el.classList.add('hide');
+ insertTo.parentNode.innerHTML = '
Товаров или категорий в магазине нету.
';
+ }
}
moveNext(page, li, insertTo, request) {
diff --git a/src/admin/core/modal.js b/src/admin/core/modal.js
index 7440d0b..3aee733 100644
--- a/src/admin/core/modal.js
+++ b/src/admin/core/modal.js
@@ -15,11 +15,9 @@ export class Modal {
}
show(e) {
- if (e.target.id === this.open.id) {
- this.$el.classList.remove('hide');
- document.body.style.overflowY = 'hidden';
- this.openHandler(e);
- }
+ this.$el.classList.remove('hide');
+ document.body.style.overflowY = 'hidden';
+ this.openHandler(e);
}
hide() {
diff --git a/src/admin/index.js b/src/admin/index.js
index 574b91c..826bd19 100644
--- a/src/admin/index.js
+++ b/src/admin/index.js
@@ -5,12 +5,15 @@ import { ItemsComponent } from "./components/items.component.js";
import { LoaderComponent } from "./components/loader.component.js";
import { PaginationComponent } from "./components/pagination.component.js";
import { editItemModal } from "./modals/editItem.modal.js";
+import { deleteItemModal } from "./modals/deleteItem.modal.js";
const loader = new LoaderComponent('loader');
const pagination = new PaginationComponent('pagination', {loader});
const categories = new CategoriesComponent('categories');
const items = new ItemsComponent('items', {pagination});
+
const editCategory = new editCategoryModal('editCategoryModal', 'editCategory_select', 'editCategoryClose');
-const editItem = new editItemModal('editItemModal', 'editItem', 'editItemClose')
+const editItem = new editItemModal('editItemModal', 'edit', 'editItemClose');
+const deleteItem = new deleteItemModal('deleteItemModal', 'edit', 'deleteItemClose');
const materialize = new MaterializeConfig();
console.log('Control-Panel v1.0.0');
\ No newline at end of file
diff --git a/src/admin/modals/deleteItem.modal.js b/src/admin/modals/deleteItem.modal.js
new file mode 100644
index 0000000..2a901f2
--- /dev/null
+++ b/src/admin/modals/deleteItem.modal.js
@@ -0,0 +1,36 @@
+import { Modal } from "../core/modal";
+import axios from "axios";
+
+export class deleteItemModal extends Modal {
+ constructor(id, open, close) {
+ super(id, open, close);
+ }
+
+ show(e) {
+ if (e.target.id === 'deleteItem') {
+ this.$el.classList.remove('hide');
+ document.body.style.overflowY = 'hidden';
+ this.openHandler(e);
+ }
+ }
+
+ setElems() {
+ this.$content = this.$el.querySelector('.modal-content__form');
+ }
+
+ openHandler(e) {
+ const data = JSON.parse(e.target.parentNode.parentNode.dataset.info);
+ this.$el.querySelector('.delete-item').onclick = this.deleteHandler.bind(this, data.id);
+ }
+
+ deleteHandler(id) {
+ axios.post('/control-panel/items/delete', {id})
+ .then(() => {
+ alert('Товар был успешно удален.');
+ document.location.reload(true);
+ })
+ .catch(() => {
+ alert('Невозможно выполнить запрос.');
+ });
+ }
+}
\ No newline at end of file
diff --git a/src/admin/modals/editItem.modal.js b/src/admin/modals/editItem.modal.js
index f2d4d71..9db6a27 100644
--- a/src/admin/modals/editItem.modal.js
+++ b/src/admin/modals/editItem.modal.js
@@ -7,6 +7,14 @@ export class editItemModal extends Modal {
super(id, open, close);
}
+ show(e) {
+ if (e.target.id === 'editItem') {
+ this.$el.classList.remove('hide');
+ document.body.style.overflowY = 'hidden';
+ this.openHandler(e);
+ }
+ }
+
setElems() {
this.$id = this.$el.querySelector('.id');
this.$title = this.$el.querySelector('.title');
@@ -16,16 +24,16 @@ export class editItemModal extends Modal {
}
async openHandler(e) {
- const data = JSON.parse(e.target.parentNode.parentNode.dataset.info),
+ const data = JSON.parse(e.target.parentNode.parentNode.dataset.info),
categories = await apiService.getCategories();
- this.$category.innerHTML = ``;
- this.$id.value = data.id;
- this.$title.value = data.title;
- this.$price.value = data.price;
- this.$description.value = data.description;
- this.$category.insertAdjacentHTML('beforeend', renderCategories(categories));
- M.FormSelect.init(this.$category);
- M.updateTextFields();
+ this.$category.innerHTML = ``;
+ this.$id.value = data.id;
+ this.$title.value = data.title;
+ this.$price.value = data.price;
+ this.$description.value = data.description;
+ this.$category.insertAdjacentHTML('beforeend', renderCategories(categories));
+ M.FormSelect.init(this.$category);
+ M.updateTextFields();
}
}
\ No newline at end of file
diff --git a/src/admin/templates/items.template.js b/src/admin/templates/items.template.js
index e354c95..50e36f1 100644
--- a/src/admin/templates/items.template.js
+++ b/src/admin/templates/items.template.js
@@ -3,7 +3,7 @@ export function renderItems(items, categories) {
categories.forEach(category => {
items.forEach(item => {
- if (item.category.toLowerCase() === category.title.toLowerCase()) html += ` | ${item.title} | ${item.category} | ${new Date(item.date).toLocaleDateString()} | ${item.count} | ${item.price} ₽ | |
`
+ if (item.category.toLowerCase() === category.title.toLowerCase()) html += ` | ${item.title} | ${item.category[0].toUpperCase() + item.category.slice(1)} | ${new Date(item.date).toLocaleDateString()} | ${item.count} | ${item.price} ₽ | |
`
});
});
return html;