Правки
This commit is contained in:
parent
983edb4fac
commit
ef247b45be
@ -90,7 +90,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<footer class=" headStyleNavBar footer mt-5 d-flex flex-shrink-0 justify-content-center align-items-center">
|
<footer class="headStyleNavBar footer mt-5 d-flex flex-shrink-0 justify-content-center align-items-center">
|
||||||
Адреса: ул. Северный Венец, 32; ул. Андрея Блаженного, 3
|
Адреса: ул. Северный Венец, 32; ул. Андрея Блаженного, 3
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
|
BIN
Lab3(1).zip
Normal file
BIN
Lab3(1).zip
Normal file
Binary file not shown.
@ -40,9 +40,9 @@
|
|||||||
<span class = "mainSt">
|
<span class = "mainSt">
|
||||||
<b>Новости</b>
|
<b>Новости</b>
|
||||||
</span>
|
</span>
|
||||||
<div class="btn-group" role="group">
|
<div class="btn-group" role="group">
|
||||||
<button id="items-add" class="btn btn-info">Добавить товар (диалог)</button>
|
<button id="items-add" class="btn btn-info">Добавить новость</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="tbb1 p-3 table-responsive-md mt-4 row justify-content-start">
|
<div class="tbb1 p-3 table-responsive-md mt-4 row justify-content-start">
|
||||||
<table id = "items-table" class="table col-lg2 w-75 table-striped">
|
<table id = "items-table" class="table col-lg2 w-75 table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
File diff suppressed because one or more lines are too long
@ -38,20 +38,72 @@
|
|||||||
</nav>
|
</nav>
|
||||||
<div class = "container col text-center">
|
<div class = "container col text-center">
|
||||||
<span class = "mainSt">Новости</span>
|
<span class = "mainSt">Новости</span>
|
||||||
<div class="text-center">
|
<div class="text-center d-flex justify-content-end">
|
||||||
<button class="btn btn-primary w-auto" type="button" onclick ="location.href='admin.html';">
|
<button class="btn btn-primary w-auto" type="button" onclick ="location.href='admin.html';">
|
||||||
Добавить новость</button>
|
Админ Панель</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
<main>
|
||||||
|
<div class = "container-fluid d-flex justify-content-center">
|
||||||
|
<div class="btn-group text-center" role="group">
|
||||||
|
<button id="items-add" class="btn btn-info">
|
||||||
|
Добавить новость</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
<div class = "row">
|
<div class = "row">
|
||||||
<footer class="headStyleNavBar footer mt-5 d-flex flex-shrink-0 justify-content-center align-items-center">
|
<footer class="headStyleNavBar mt-5 d-flex flex-shrink-0 justify-content-center align-items-center">
|
||||||
Адреса: ул. Северный Венец, 32; ул. Андрея Блаженного, 3
|
Адреса: ул. Северный Венец, 32; ул. Андрея Блаженного, 3
|
||||||
</footer>
|
</footer>
|
||||||
|
</div>
|
||||||
|
<div id="items-update" class="modal fade" tabindex="-1" data-bs-backdrop="static" data-bs-keyboard="false">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<form id="items-form" class="needs-validation" novalidate>
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h1 class="modal-title fs-5" id="items-update-title"></h1>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="text-center">
|
||||||
|
<img id="image-preview" src="https://via.placeholder.com/200" class="rounded"
|
||||||
|
alt="placeholder">
|
||||||
|
</div>
|
||||||
|
<input id="items-line-id" type="number" hidden>
|
||||||
|
<div class="mb-2">
|
||||||
|
<label for="date" class="form-label">Дата</label>
|
||||||
|
<input id="date" class="form-control" name="date" type = "date" required>
|
||||||
|
</div>
|
||||||
|
<div class="mb-2">
|
||||||
|
<label class="form-label" for="name">Название</label>
|
||||||
|
<input id="name" name="name" class="form-control" type = "text"
|
||||||
|
required>
|
||||||
|
</div>
|
||||||
|
<div class="mb-2">
|
||||||
|
<label class="form-label" for="description">Описание</label>
|
||||||
|
<input id="description" name="description" class="form-control" type="text"
|
||||||
|
required>
|
||||||
|
</div>
|
||||||
|
<div class="mb-2">
|
||||||
|
<label class="form-label" for="image">Изображение</label>
|
||||||
|
<input id="image" type="file" name="image" class="form-control" accept="image/*">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
|
||||||
|
<button type="submit" class="btn btn-primary">Сохранить</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script type = "module">
|
<script type = "module">
|
||||||
import { UpdateNews } from "./js/lines";
|
import validation from "./js/validation";
|
||||||
|
import { UpdateNews, linesForm } from "./js/lines";
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
validation();
|
||||||
|
linesForm();
|
||||||
UpdateNews();
|
UpdateNews();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
@ -29,6 +29,7 @@ function resetValues() {
|
|||||||
// перед показом происходит заполнение формы для редактирования
|
// перед показом происходит заполнение формы для редактирования
|
||||||
// если объект item не пуст
|
// если объект item не пуст
|
||||||
export function showUpdateModal(item) {
|
export function showUpdateModal(item) {
|
||||||
|
console.info(item, modalTitle.innerHTML);
|
||||||
modalTitle.innerHTML = item === null ? "Добавить" : "Изменить";
|
modalTitle.innerHTML = item === null ? "Добавить" : "Изменить";
|
||||||
console.info(item);
|
console.info(item);
|
||||||
|
|
||||||
@ -45,7 +46,6 @@ export function showUpdateModal(item) {
|
|||||||
} else {
|
} else {
|
||||||
resetValues();
|
resetValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
myModal.show();
|
myModal.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +35,8 @@ export function createItemsOption(name, value = "", isSelected = false) {
|
|||||||
// <td><a href="#" onclick="callback()"><i class="fa-solid icon"></i></a></td>
|
// <td><a href="#" onclick="callback()"><i class="fa-solid icon"></i></a></td>
|
||||||
function createTableAnchor(icon, callback) {
|
function createTableAnchor(icon, callback) {
|
||||||
const i = document.createElement("i");
|
const i = document.createElement("i");
|
||||||
|
console.info("icon", icon);
|
||||||
|
console.info("callback", callback);
|
||||||
i.classList.add("fa-solid", icon);
|
i.classList.add("fa-solid", icon);
|
||||||
|
|
||||||
const a = document.createElement("a");
|
const a = document.createElement("a");
|
||||||
@ -51,7 +53,25 @@ function createTableAnchor(icon, callback) {
|
|||||||
td.appendChild(a);
|
td.appendChild(a);
|
||||||
return td;
|
return td;
|
||||||
}
|
}
|
||||||
|
export function createAnchor(icon, callback) {
|
||||||
|
const i = document.createElement("i");
|
||||||
|
console.info("icon", icon);
|
||||||
|
console.info("callback", callback);
|
||||||
|
i.classList.add("fa-solid", icon);
|
||||||
|
|
||||||
|
const a = document.createElement("a");
|
||||||
|
a.href = "#";
|
||||||
|
a.appendChild(i);
|
||||||
|
a.onclick = (event) => {
|
||||||
|
// чтобы в URL не добавлялась решетка
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
callback(icon);
|
||||||
|
};
|
||||||
|
const div = document.createElement("div");
|
||||||
|
div.appendChild(a);
|
||||||
|
return a;
|
||||||
|
}
|
||||||
// функция создает колонку таблицы с текстом value
|
// функция создает колонку таблицы с текстом value
|
||||||
// <td>value</td>
|
// <td>value</td>
|
||||||
function createTableColumn(value) {
|
function createTableColumn(value) {
|
||||||
@ -71,7 +91,7 @@ function createTableColumn(value) {
|
|||||||
// <td><a href="#" onclick="editPageCallback()"><i class="fa-solid fa-pen-to-square"></i></a></td>
|
// <td><a href="#" onclick="editPageCallback()"><i class="fa-solid fa-pen-to-square"></i></a></td>
|
||||||
// <td><a href="#" onclick="deleteCallback()"><i class="fa-solid fa-trash"></i></a></td>
|
// <td><a href="#" onclick="deleteCallback()"><i class="fa-solid fa-trash"></i></a></td>
|
||||||
// </tr>
|
// </tr>
|
||||||
export function createTableRow(item, index, editCallback, editPageCallback, deleteCallback) {
|
export function createTableRow(item, index, editCallback, deleteCallback) {
|
||||||
const rowNumber = document.createElement("th");
|
const rowNumber = document.createElement("th");
|
||||||
rowNumber.scope = "row";
|
rowNumber.scope = "row";
|
||||||
rowNumber.textContent = index + 1;
|
rowNumber.textContent = index + 1;
|
||||||
|
@ -7,7 +7,7 @@ import {
|
|||||||
} from "./lines-rest-api";
|
} from "./lines-rest-api";
|
||||||
import {
|
import {
|
||||||
// createItemsOption,
|
// createItemsOption,
|
||||||
cntrls, createTableRow, imagePlaceholder,
|
cntrls, createTableRow, createAnchor, imagePlaceholder,
|
||||||
} from "./lines-ui";
|
} from "./lines-ui";
|
||||||
|
|
||||||
// async function drawItemsSelect() {
|
// async function drawItemsSelect() {
|
||||||
@ -64,6 +64,7 @@ async function addLine(item, itemName, description, image) {
|
|||||||
console.info(data);
|
console.info(data);
|
||||||
// загрузка и заполнение table
|
// загрузка и заполнение table
|
||||||
drawLinesTable();
|
drawLinesTable();
|
||||||
|
UpdateNews();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function editLine(id, item, itemName, description, image) {
|
async function editLine(id, item, itemName, description, image) {
|
||||||
@ -74,6 +75,7 @@ async function editLine(id, item, itemName, description, image) {
|
|||||||
console.info(data);
|
console.info(data);
|
||||||
// загрузка и заполнение table
|
// загрузка и заполнение table
|
||||||
drawLinesTable();
|
drawLinesTable();
|
||||||
|
UpdateNews();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function removeLine(id) {
|
async function removeLine(id) {
|
||||||
@ -87,6 +89,7 @@ async function removeLine(id) {
|
|||||||
console.info(data);
|
console.info(data);
|
||||||
// загрузка и заполнение table
|
// загрузка и заполнение table
|
||||||
drawLinesTable();
|
drawLinesTable();
|
||||||
|
UpdateNews();
|
||||||
}
|
}
|
||||||
|
|
||||||
// функция для получения содержимого файла в виде base64 строки
|
// функция для получения содержимого файла в виде base64 строки
|
||||||
@ -254,12 +257,17 @@ export function linesForm() {
|
|||||||
<span class = "d-flex"><p></p></span>
|
<span class = "d-flex"><p></p></span>
|
||||||
</div>
|
</div>
|
||||||
</div> */
|
</div> */
|
||||||
|
|
||||||
|
function clearNews() {
|
||||||
|
const newsElements = document.querySelectorAll(".mainDiv");
|
||||||
|
newsElements.forEach((element) => element.remove());
|
||||||
|
}
|
||||||
async function UpdateNew(div1, item) {
|
async function UpdateNew(div1, item) {
|
||||||
const div2 = document.createElement("div");
|
const div2 = document.createElement("div");
|
||||||
div2.setAttribute("class", "col mt-4");
|
div2.setAttribute("class", "col mt-4");
|
||||||
const div3 = document.createElement("div");
|
const div3 = document.createElement("div");
|
||||||
div3.setAttribute("class", "rectNews d-flex flex-column");
|
div3.setAttribute("class", "rectNews d-flex flex-column");
|
||||||
const image = document.createElement("image");
|
const image = document.createElement("img");
|
||||||
image.setAttribute("src", item.image);
|
image.setAttribute("src", item.image);
|
||||||
image.setAttribute("width", "100%");
|
image.setAttribute("width", "100%");
|
||||||
image.setAttribute("alt", item.name);
|
image.setAttribute("alt", item.name);
|
||||||
@ -269,21 +277,76 @@ async function UpdateNew(div1, item) {
|
|||||||
span1.setAttribute("class", "rectNewsText");
|
span1.setAttribute("class", "rectNewsText");
|
||||||
span1.textContent = item.description;
|
span1.textContent = item.description;
|
||||||
div1.appendChild(div2);
|
div1.appendChild(div2);
|
||||||
|
div4.appendChild(createAnchor("fa-pencil", () => showUpdateModal(item)));
|
||||||
|
div4.appendChild(createAnchor("fa-trash", () => removeLine(item.id)));
|
||||||
div2.appendChild(div3);
|
div2.appendChild(div3);
|
||||||
div3.appendChild(image);
|
div3.appendChild(image);
|
||||||
div3.appendChild(div4);
|
div3.appendChild(div4);
|
||||||
div4.appendChild(span1);
|
div4.appendChild(span1);
|
||||||
}
|
}
|
||||||
export async function UpdateNews() {
|
export async function UpdateNews() {
|
||||||
|
clearNews();
|
||||||
|
console.info("linesForm");
|
||||||
|
|
||||||
const data = await getAllLines();
|
const data = await getAllLines();
|
||||||
const div1 = document.createElement("div");
|
const div1 = document.createElement("div");
|
||||||
div1.setAttribute("class", "row");
|
div1.setAttribute("class", "mainDiv row");
|
||||||
|
|
||||||
data.forEach((item, index) => {
|
data.forEach((item, index) => {
|
||||||
console.info(index);
|
console.info(index);
|
||||||
|
cntrls.form.addEventListener("submit", async (event) => {
|
||||||
|
console.info("Form on Submit231");
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
// drawLinesTable();
|
||||||
|
// if (!cntrls.form.checkValidity()) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// linesForm();
|
||||||
|
// let imageBase64 = "";
|
||||||
|
// // Получение выбранного пользователем изображения в виде base64 строки
|
||||||
|
// // Если пользователь ничего не выбрал, то не нужно сохранять в БД
|
||||||
|
// // дефолтное изображение
|
||||||
|
// if (cntrls.imagePreview.src !== imagePlaceholder) {
|
||||||
|
// // Загрузка содержимого атрибута src тэга img с id image-preview
|
||||||
|
// // Здесь выполняется HTTP запрос с типом GET
|
||||||
|
// console.info("imagePreview.src");
|
||||||
|
// console.info(cntrls.imagePreview.src);
|
||||||
|
// const result = await fetch(cntrls.imagePreview.src);
|
||||||
|
// // Получение из HTTP-ответа бинарного содержимого
|
||||||
|
// const blob = await result.blob();
|
||||||
|
// // Получение base64 строки для файла
|
||||||
|
// // Здесь выполняется Promise из функции readFile
|
||||||
|
// // Promise позволяет писать линейный код для работы с асинхронными методами
|
||||||
|
// // без использования обработчиков (callback) с помощью await
|
||||||
|
// imageBase64 = await readFile(blob);
|
||||||
|
// }
|
||||||
|
// // получение id строки для редактирования
|
||||||
|
// // это значение содержится в скрытом input
|
||||||
|
// const currentId = cntrls.lineId.value;
|
||||||
|
// // если значение id не задано,
|
||||||
|
// // то необходимо выполнить добавление записи
|
||||||
|
// // иначе обновление записи
|
||||||
|
// if (!currentId) {
|
||||||
|
// await addLine(
|
||||||
|
// cntrls.itemDate.value,
|
||||||
|
// cntrls.itemName.value,
|
||||||
|
// cntrls.itemDescription.value,
|
||||||
|
// imageBase64,
|
||||||
|
// );
|
||||||
|
// } else {
|
||||||
|
// await editLine(
|
||||||
|
// currentId,
|
||||||
|
// cntrls.itemDate.value,
|
||||||
|
// cntrls.itemName.value,
|
||||||
|
// cntrls.itemDescription.value,
|
||||||
|
// imageBase64,
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// // после выполнения добавления/обновления модальное окно скрывается
|
||||||
|
// hideUpdateModal();
|
||||||
|
});
|
||||||
UpdateNew(div1, item);
|
UpdateNew(div1, item);
|
||||||
if (index % 2 !== 0) {
|
document.body.appendChild(div1);
|
||||||
document.body.appendChild(div1);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
document.body.appendChild(div1);
|
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,11 @@ header nav {
|
|||||||
height : 500px !important;
|
height : 500px !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@media(min-height: 740px){
|
||||||
|
body{
|
||||||
|
min-height: 1070px;
|
||||||
|
}
|
||||||
|
}
|
||||||
.headStyle{
|
.headStyle{
|
||||||
color: #FFFFFF
|
color: #FFFFFF
|
||||||
}
|
}
|
||||||
@ -46,6 +51,11 @@ header nav {
|
|||||||
.headStyleNavBar2{
|
.headStyleNavBar2{
|
||||||
background-color: #575757
|
background-color: #575757
|
||||||
}
|
}
|
||||||
|
.body{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100hv;
|
||||||
|
}
|
||||||
.stsp{
|
.stsp{
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
@ -97,6 +107,16 @@ header nav {
|
|||||||
margin-top: 9px;
|
margin-top: 9px;
|
||||||
margin-bottom:25px;
|
margin-bottom:25px;
|
||||||
}
|
}
|
||||||
|
.rectNewsInvisible{
|
||||||
|
width: 5px;
|
||||||
|
height: 50px;
|
||||||
|
border : 2px solid #2582A3;
|
||||||
|
}
|
||||||
|
.modal-dialog img{
|
||||||
|
max-width: 310px;
|
||||||
|
max-height: 200px;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
.stylePage2{
|
.stylePage2{
|
||||||
float : center;
|
float : center;
|
||||||
margin-right: 7;
|
margin-right: 7;
|
||||||
@ -136,11 +156,11 @@ header nav a:hover {
|
|||||||
}
|
}
|
||||||
|
|
||||||
footer {
|
footer {
|
||||||
position : fixed;
|
position: fixed;
|
||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
z-index: 0;
|
z-index: 1;
|
||||||
background-color: #9c9c9c;
|
background-color: #9c9c9c;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
|
Loading…
Reference in New Issue
Block a user