Fixed pic upload page relation
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
const { Image } = require('../models');
|
const { Image, MenuItem, Page } = require('../models');
|
||||||
const { v4: uuidv4 } = require('uuid');
|
const { v4: uuidv4 } = require('uuid');
|
||||||
const multer = require('multer');
|
const multer = require('multer');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
@@ -17,17 +17,33 @@ const upload = multer({ storage });
|
|||||||
|
|
||||||
exports.uploadImage = upload.single('image');
|
exports.uploadImage = upload.single('image');
|
||||||
|
|
||||||
|
exports.getAllPages = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const pages = await MenuItem.findAll();
|
||||||
|
res.status(200).json(pages.map((item) => {return { link: item.link, name: item.name}; }));
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
res.status(500).send('Fehler beim Auslesen');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
exports.saveImageDetails = async (req, res) => {
|
exports.saveImageDetails = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const { title, description, pageId } = req.body;
|
const { title, description, page } = req.body;
|
||||||
const filename = req.file.filename;
|
const filename = req.file.filename;
|
||||||
|
const pageItem = await Page.findAll({ where: { link: page } });
|
||||||
|
console.log(pageItem)
|
||||||
const newImage = await Image.create({
|
const newImage = await Image.create({
|
||||||
id: uuidv4(),
|
id: uuidv4(),
|
||||||
filename,
|
filename,
|
||||||
title,
|
title,
|
||||||
description,
|
description,
|
||||||
pageId: pageId || null
|
pageId: pageItem && pageItem[0] ? pageItem[0].id : null
|
||||||
});
|
});
|
||||||
|
if (page) {
|
||||||
|
const imageUrl = `/uploads/${filename}`;
|
||||||
|
await MenuItem.update({ image: imageUrl }, { where: { link: page} });
|
||||||
|
}
|
||||||
res.status(201).json(newImage);
|
res.status(201).json(newImage);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Fehler beim Speichern des Bildes:', error);
|
console.error('Fehler beim Speichern des Bildes:', error);
|
||||||
@@ -37,7 +53,7 @@ exports.saveImageDetails = async (req, res) => {
|
|||||||
|
|
||||||
exports.getImages = async (req, res) => {
|
exports.getImages = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const images = await Image.findAll({ order: [['title', 'ASC']]});
|
const images = await Image.findAll({ order: [['title', 'ASC']] });
|
||||||
res.status(200).json(images);
|
res.status(200).json(images);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Fehler beim Abrufen der Bilder:', error);
|
console.error('Fehler beim Abrufen der Bilder:', error);
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
const { uploadImage, saveImageDetails, getImages, getImagesByPage, getImageById, getImageByHash, updateImage } = require('../controllers/imageController');
|
const { getAllPages, uploadImage, saveImageDetails, getImages, getImagesByPage, getImageById, getImageByHash, updateImage } = require('../controllers/imageController');
|
||||||
const authMiddleware = require('../middleware/authMiddleware')
|
const authMiddleware = require('../middleware/authMiddleware')
|
||||||
|
|
||||||
router.post('/', authMiddleware, uploadImage, saveImageDetails);
|
router.post('/', authMiddleware, uploadImage, saveImageDetails);
|
||||||
router.get('/', authMiddleware, getImages);
|
router.get('/', authMiddleware, getImages);
|
||||||
router.get('/page/:pageId', getImagesByPage);
|
router.get('/page/:pageId', getImagesByPage);
|
||||||
|
router.put('/hash/:id', getImageByHash);
|
||||||
|
router.get('/pages', getAllPages);
|
||||||
router.get('/:id', getImageById);
|
router.get('/:id', getImageById);
|
||||||
router.put('/:id', authMiddleware, updateImage);
|
router.put('/:id', authMiddleware, updateImage);
|
||||||
router.put('/hash/:id', getImageByHash);
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<label for="page">Seite</label>
|
<label for="page">Seite</label>
|
||||||
<select id="page" v-model="selectedPage">
|
<select id="page" v-model="selectedPage">
|
||||||
<option value="">Keine Seite</option>
|
<option value="">Keine Seite</option>
|
||||||
<option v-for="page in pages" :key="page.id" :value="page.id">{{ page.title }}</option>
|
<option v-for="page in pages" :key="page.value" :value="page.value">{{ page.caption }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<button type="submit">Hochladen</button>
|
<button type="submit">Hochladen</button>
|
||||||
@@ -34,13 +34,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import axios from '../../axios';
|
import axios from '../../axios';
|
||||||
import { formatDate, formatTimeFromDate } from '@/utils/strings'
|
import { formatDate, formatTimeFromDate } from '@/utils/strings'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ImageUpload',
|
name: 'ImageUpload',
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
formData.append('title', this.title);
|
formData.append('title', this.title);
|
||||||
formData.append('description', this.description);
|
formData.append('description', this.description);
|
||||||
formData.append('image', this.image);
|
formData.append('image', this.image);
|
||||||
formData.append('pageId', this.selectedPage);
|
formData.append('page', this.selectedPage);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await axios.post('/image/', formData);
|
await axios.post('/image/', formData);
|
||||||
@@ -83,8 +83,18 @@
|
|||||||
},
|
},
|
||||||
async fetchPages() {
|
async fetchPages() {
|
||||||
try {
|
try {
|
||||||
const response = await axios.get('/image/pages');
|
const response = await axios.get('/menu-data');
|
||||||
this.pages = response.data;
|
const buildRecursive = function (data, prefix = '') {
|
||||||
|
return data.flatMap(item => {
|
||||||
|
let children = [];
|
||||||
|
if (item.submenu && item.submenu.length) {
|
||||||
|
children = buildRecursive(item.submenu, prefix + item.name + " -> ");
|
||||||
|
}
|
||||||
|
return [{ value: item.link, caption: prefix + item.name }, ...children];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
this.pages = buildRecursive(response.data);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Fehler beim Abrufen der Seiten:', error);
|
console.error('Fehler beim Abrufen der Seiten:', error);
|
||||||
}
|
}
|
||||||
@@ -112,23 +122,24 @@
|
|||||||
this.fetchImages();
|
this.fetchImages();
|
||||||
this.fetchPages();
|
this.fetchPages();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
form div {
|
form div {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
.uploaded-image {
|
|
||||||
|
.uploaded-image {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin: 0 0 0.5em 0.5em;
|
margin: 0 0 0.5em 0.5em;
|
||||||
border: 1px solid #e0e0e0;
|
border: 1px solid #e0e0e0;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
.uploaded-image input,
|
|
||||||
.uploaded-image textarea {
|
.uploaded-image input,
|
||||||
|
.uploaded-image textarea {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 5px 0;
|
margin: 5px 0;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
Reference in New Issue
Block a user