добавлена возможноть изменять название магазина через CP

This commit is contained in:
Sergey Yarkov 2020-01-02 04:14:46 +03:00
parent ddd261081f
commit a0b17bc5e1
14 changed files with 112 additions and 46 deletions

View File

@ -8,9 +8,10 @@ function checkNotAuthenticated(req, res, next) {
next(); next();
} }
function loginRoute(req, res) { async function loginRoute(req, res, db) {
const store = await db.collection('content').findOne({});
res.render('admin/admin', { res.render('admin/admin', {
title: 'Digital-Store | Вход в панель управления сайтом' title: `${store.title} | Вход в панель управления сайтом`
}) })
} }
@ -27,7 +28,7 @@ module.exports = function (server, db) {
id => result.find(user => user.id === id) id => result.find(user => user.id === id)
); );
}); });
loginRoute(req, res); loginRoute(req, res, db);
}); });
// Отдача страницы с регистрацией // Отдача страницы с регистрацией
//server.get('/register', checkNotAuthenticated, (req, res) => registerRoute(req, res)); //server.get('/register', checkNotAuthenticated, (req, res) => registerRoute(req, res));

View File

@ -6,14 +6,17 @@ function checkAuthenticated(req, res, next) {
res.redirect('/admin'); res.redirect('/admin');
} }
module.exports = function (server, db) { module.exports = function (server, db) {
// роуты // роуты
server.get('/control-panel', checkAuthenticated, (req, res) => { server.get('/control-panel', checkAuthenticated, async (req, res) => {
try { try {
const store = await db.collection('content').findOne({});
res.render('admin/control-panel', { res.render('admin/control-panel', {
name: req.user.name, name: req.user.name,
email: req.user.email, email: req.user.email,
title: 'Digital-Store | Панель управления сайтом', title: `${store.title} | Панель управления сайтом`,
host: req.headers.host, host: req.headers.host,
pageName: ['Главная', 'main'], pageName: ['Главная', 'main'],
}); });
@ -24,11 +27,12 @@ module.exports = function(server, db) {
server.get('/control-panel/items', checkAuthenticated, async (req, res) => { server.get('/control-panel/items', checkAuthenticated, async (req, res) => {
try { try {
const items = await db.collection('items').find({}).toArray(); const items = await db.collection('items').find({}).toArray();
const store = await db.collection('content').findOne({});
const count = items.length; const count = items.length;
res.render('admin/items', { res.render('admin/items', {
name: req.user.name, name: req.user.name,
email: req.user.email, email: req.user.email,
title: 'Digital-Store | Товары', title: `${store.title} | Товары`,
host: req.headers.host, host: req.headers.host,
pageName: ['Товары', 'items'], pageName: ['Товары', 'items'],
count: count / 2 count: count / 2
@ -40,10 +44,11 @@ module.exports = function(server, db) {
server.get('/control-panel/categories', checkAuthenticated, async (req, res) => { server.get('/control-panel/categories', checkAuthenticated, async (req, res) => {
try { try {
const categories = await db.collection('categories').find({}).toArray(); const categories = await db.collection('categories').find({}).toArray();
const store = await db.collection('content').findOne({});
res.render('admin/categories', { res.render('admin/categories', {
name: req.user.name, name: req.user.name,
email: req.user.email, email: req.user.email,
title: 'Digital-Store | Категории', title: `${store.title} | Категории`,
host: req.headers.host, host: req.headers.host,
pageName: ['Категории', 'categories'], pageName: ['Категории', 'categories'],
categoriesCount: categories.length categoriesCount: categories.length
@ -54,10 +59,11 @@ module.exports = function(server, db) {
}); });
server.get('/control-panel/icons', checkAuthenticated, async (req, res) => { server.get('/control-panel/icons', checkAuthenticated, async (req, res) => {
try { try {
const store = await db.collection('content').findOne({});
res.render('admin/icons', { res.render('admin/icons', {
name: req.user.name, name: req.user.name,
email: req.user.email, email: req.user.email,
title: 'Digital-Store | Категории', title: `${store.title} | Категории`,
host: req.headers.host, host: req.headers.host,
pageName: ['Иконки', 'icons'] pageName: ['Иконки', 'icons']
}); });
@ -65,25 +71,30 @@ module.exports = function(server, db) {
res.render('main/404'); res.render('main/404');
} }
}); });
server.get('/control-panel/content', checkAuthenticated, (req, res) => { server.get('/control-panel/content', checkAuthenticated, async (req, res) => {
try { try {
const store = await db.collection('content').findOne({});
res.render('admin/content', { res.render('admin/content', {
name: req.user.name, name: req.user.name,
email: req.user.email, email: req.user.email,
title: 'Digital-Store | Контент', title: `${store.title} | Контент`,
host: req.headers.host, host: req.headers.host,
pageName: ['Контент', 'content'], pageName: ['Контент', 'content'],
store: {
title: store.title
}
}); });
} catch (error) { } catch (error) {
res.render('main/404'); res.render('main/404');
} }
}); });
server.get('/control-panel/administrators', checkAuthenticated, (req, res) => { server.get('/control-panel/administrators', checkAuthenticated, async (req, res) => {
try { try {
const store = await db.collection('content').findOne({});
res.render('admin/administrators', { res.render('admin/administrators', {
name: req.user.name, name: req.user.name,
email: req.user.email, email: req.user.email,
title: 'Digital-Store | Администраторы', title: `${store.title} | Администраторы`,
host: req.headers.host, host: req.headers.host,
pageName: ['Администраторы', 'administrators'], pageName: ['Администраторы', 'administrators'],
}); });
@ -91,12 +102,13 @@ module.exports = function(server, db) {
res.render('main/404'); res.render('main/404');
} }
}); });
server.get('/control-panel/database', checkAuthenticated, (req, res) => { server.get('/control-panel/database', checkAuthenticated, async (req, res) => {
try { try {
const store = await db.collection('content').findOne({});
res.render('admin/database', { res.render('admin/database', {
name: req.user.name, name: req.user.name,
email: req.user.email, email: req.user.email,
title: 'Digital-Store | Настройка Базы Данных', title: `${store.title} | Настройка Базы Данных`,
host: req.headers.host, host: req.headers.host,
pageName: ['База данных', 'database'], pageName: ['База данных', 'database'],
}); });
@ -221,4 +233,17 @@ module.exports = function(server, db) {
res.render('main/404'); res.render('main/404');
} }
}); });
// контент
server.post('/control-panel/content/update', checkAuthenticated, (req, res) => {
try {
const data = {
title: req.body.title
}
db.collection('content').updateOne({}, {$set: {title: data.title}});
res.redirect('/control-panel/content');
} catch (error) {
res.render('main/404');
}
});
} }

View File

@ -1,61 +1,82 @@
const ObjectID = require('mongodb').ObjectID; const ObjectID = require('mongodb').ObjectID;
module.exports = function (server, db) { module.exports = function (server, db) {
server.get('/', (req, res) => { server.get('/', async (req, res) => {
try { try {
const store = await db.collection('content').findOne({});
db.collection('categories').find().toArray((err, result) => { db.collection('categories').find().toArray((err, result) => {
const categories = result.map(category => category.title[0].toUpperCase() + category.title.slice(1)); const categories = result.map(category => category.title[0].toUpperCase() + category.title.slice(1));
res.render('main/index', { res.render('main/index', {
pageName: 'index', pageName: 'index',
title: 'Digital-Store | Главная', title: `${store.title} | Главная`,
categories categories,
store: {
title: store.title
}
}); });
}); });
} catch (error) { } catch (error) {
res.render('main/404'); res.render('main/404');
} }
}); });
server.get('/how-to-buy', (req, res) => { server.get('/how-to-buy', async (req, res) => {
try { try {
const store = await db.collection('content').findOne({});
res.render('main/how-to-buy', { res.render('main/how-to-buy', {
pageName: 'how-to-buy', pageName: 'how-to-buy',
title: 'Digital-Store | Как купить товар' title: `${store.title} | Как купить товар`,
store: {
title: store.title
}
}); });
} catch (error) { } catch (error) {
res.send('main/404'); res.send('main/404');
} }
}); });
server.get('/contacts', (req, res) => { server.get('/contacts', async (req, res) => {
try { try {
const store = await db.collection('content').findOne({});
res.render('main/contacts', { res.render('main/contacts', {
pageName: 'contacts', pageName: 'contacts',
title: 'Digital-Store | Контакты' title: `${store.title} | Контакты`,
store: {
title: store.title
}
}); });
} catch (error) { } catch (error) {
res.send('main/404'); res.send('main/404');
} }
}); });
server.get('/comments', (req, res) => { server.get('/comments', async (req, res) => {
try { try {
const store = await db.collection('content').findOne({});
res.render('main/comments', { res.render('main/comments', {
pageName: 'comments', pageName: 'comments',
title: 'Digital-Store | Отзывы' title: `${store.title} | Отзывы`,
store: {
title: store.title
}
}); });
} catch (error) { } catch (error) {
res.render('main/404'); res.render('main/404');
} }
}); });
server.get('/my-orders', (req, res) => { server.get('/my-orders', async (req, res) => {
try { try {
const store = await db.collection('content').findOne({});
res.render('main/my-orders', { res.render('main/my-orders', {
pageName: 'my-orders', pageName: 'my-orders',
title: 'Digital-Store | Мои покупки' title: `${store.title} | Мои покупки`,
store: {
title: store.title
}
}); });
} catch (error) { } catch (error) {
res.render('main/404'); res.render('main/404');
} }
}); });
server.get('/product/:id', (req, res) => { server.get('/product/:id', async (req, res) => {
const store = await db.collection('content').findOne({});
const product = new Promise((resolve, reject) => { const product = new Promise((resolve, reject) => {
db.collection('items').find({_id: ObjectID(req.params.id)}).toArray() db.collection('items').find({_id: ObjectID(req.params.id)}).toArray()
.then((items) => { .then((items) => {
@ -86,7 +107,10 @@ module.exports = function (server, db) {
date: item.date, date: item.date,
id: item._id, id: item._id,
type: category.type, type: category.type,
format: category.format format: category.format,
store: {
title: store.title
}
}); });
})) }))
.catch((error) => { .catch((error) => {

View File

@ -47,9 +47,9 @@ body.has-fixed-sidenav
label Редактирование категории label Редактирование категории
.category-delete .category-delete
.row .row
form(id="dellCategory" action="/control-panel/categories/delete" method="POST") form(id="deleteCategory" action="/control-panel/categories/delete" method="POST")
.input-field.col.s12 .input-field.col.s12
select#delete_select(name="category") select#deleteCategory_select(name="category")
option(value="" disabled selected) option(value="" disabled selected)
| Выберите категорию для удаления | Выберите категорию для удаления
label Удаление категории label Удаление категории

View File

@ -6,6 +6,20 @@ body.has-fixed-sidenav
.row .row
.col.s12 .col.s12
h2 Редактирование контента h2 Редактирование контента
p Изменяйте текст на сайте магазина только через эту страницу.
.col.s12
#content.card
.card-content
.content-update
h5 Редактировать контент
.row
form(action="/control-panel/content/update" method="POST")
.input-field.col.s12
input(id="title" type="text" name="title" value=store.title)
label(for="title") Название вашего магазина
.edit_success.col.s12
button(type="submit" class="btn waves-effect") Сохранить
include ./assets/templates/footer.pug include ./assets/templates/footer.pug
include ./assets/scripts.pug include ./assets/scripts.pug

View File

@ -6,6 +6,7 @@ body.has-fixed-sidenav
.row .row
.col.s12 .col.s12
h2 Редактирование иконок h2 Редактирование иконок
p Загрузите иконку для нужной вам категории.
.col.s12 .col.s12
#icons.card #icons.card
.card-content .card-content

View File

@ -6,7 +6,7 @@ body.has-fixed-sidenav
.row .row
.col.s12 .col.s12
h2 Редактирование товаров h2 Редактирование товаров
p Добавляйте новые товары или редактируйте старные. p Добавляйте новые товары или редактируйте старые.
.col.s12 .col.s12
#items.card #items.card
.card-content .card-content

View File

@ -1,14 +1,9 @@
//- Head HTML //- Head HTML
include ./assets/head.pug include ./assets/head.pug
//- Header Template
include ./assets/templates/header.pug
main.main-section main.main-section
include ./assets/templates/modals/cart.pug
.container .container
.row .row
.col.s12 .col.s12
h1(style="margin-top: 5rem;font-size:70px;") Ошибка 404. h1(style="margin-top: 2rem;font-size:70px;margin-bottom:2rem;") Ошибка 404.
a(href="/") Вернуться на главную.
//- Footer Template
include ./assets/templates/footer.pug

View File

@ -1,5 +1,5 @@
footer.main-footer footer.main-footer
span © 2019 Digital Store | Все права защищены. span © 2019 #{store.title} | Все права защищены.
.waves-effect.waves-light.pulse.cart-btn(id="cartOpen") .waves-effect.waves-light.pulse.cart-btn(id="cartOpen")
i.material-icons shopping_cart i.material-icons shopping_cart
span#counter.counter 0 span#counter.counter 0

View File

@ -7,7 +7,7 @@ header#header.main-header
.nav-wrapper.container .nav-wrapper.container
a.brand-logo.waves-effect.waves-light(href='/') a.brand-logo.waves-effect.waves-light(href='/')
i.material-icons shop_two i.material-icons shop_two
span#header-title Digital Store span#header-title #{store.title}
ul#desktop-nav.right.hide-on-med-and-down(data-current=currentPage) ul#desktop-nav.right.hide-on-med-and-down(data-current=currentPage)
li#page(data-page='index') li#page(data-page='index')
a(href='/') Главная a(href='/') Главная

View File

@ -11,12 +11,12 @@ export class CategoriesComponent extends Component {
setElems() { setElems() {
// селекты в которых рендерится контент // селекты в которых рендерится контент
this.$editSelect = this.$el.querySelector('#editCategory_select'); // редактирование категории this.$editSelect = this.$el.querySelector('#editCategory_select'); // редактирование категории
this.$dellSelect = this.$el.querySelector('#delete_select'); // удаление категории this.$dellSelect = this.$el.querySelector('#deleteCategory_select'); // удаление категории
this.$iconsSelect = this.$el.querySelector('#icons_select'); // выбор иконки this.$iconsSelect = this.$el.querySelector('#icons_select'); // выбор иконки
// обработка форм // обработка форм
this.$addForm = this.$el.querySelector('#addCategory'); // добавление категории this.$addForm = this.$el.querySelector('#addCategory');
this.$dellForm = this.$el.querySelector('#dellCategory'); // удаление категории this.$dellForm = this.$el.querySelector('#deleteCategory');
// добавим ивенты на наши формы // добавим ивенты на наши формы
this.$addForm.addEventListener('submit', this.addCategory.bind(this)); this.$addForm.addEventListener('submit', this.addCategory.bind(this));

View File

@ -0,0 +1,7 @@
import { Component } from '../core/component';
export class ContentComponent extends Component {
constructor(id) {
super(id);
}
}

View File

@ -15,7 +15,6 @@ export class IconsComponent extends Component {
async init() { async init() {
const icons = await apiService.getIcons(); const icons = await apiService.getIcons();
this.$icons.insertAdjacentHTML('beforeend', renderIcons(icons)); this.$icons.insertAdjacentHTML('beforeend', renderIcons(icons));
M.FormSelect.init(this.$icons); M.FormSelect.init(this.$icons);
} }