LabWork04 help me
This commit is contained in:
parent
6699eda085
commit
ee3075ed80
@ -19,9 +19,6 @@
|
|||||||
<td>
|
<td>
|
||||||
<button class="btn btn-danger" @click="deleteCategory(categor.id)">Удалить</button>
|
<button class="btn btn-danger" @click="deleteCategory(categor.id)">Удалить</button>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
|
||||||
<button class="btn btn-primary mr-2" @click="OpenModelForProducts();getProductsFromCategory(categor.id)">Просмотр продуктов</button>
|
|
||||||
</td>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -98,9 +95,6 @@ export default {
|
|||||||
const addModal = document.getElementById('editModal');
|
const addModal = document.getElementById('editModal');
|
||||||
addModal.addEventListener('shown.bs.modal', function () {
|
addModal.addEventListener('shown.bs.modal', function () {
|
||||||
})
|
})
|
||||||
const ModelForProducts = document.getElementById('ModelForProducts');
|
|
||||||
addModal.addEventListener('shown.bs.modal', function () {
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
@ -169,22 +163,6 @@ export default {
|
|||||||
console.log(error);
|
console.log(error);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
getProductsFromCategory(category_id){
|
|
||||||
axios.get(this.URL + `group/${category_id}/products`)
|
|
||||||
.then(response => {
|
|
||||||
this.products = response.data;
|
|
||||||
console.log(response.data);
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
OpenModelForProducts() {
|
|
||||||
document.getElementById("ModelForProducts").style.display = "block";
|
|
||||||
},
|
|
||||||
closeModelForProducts() {
|
|
||||||
document.getElementById("ModelForProducts").style.display = "none";
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
<div class="container mt-4">
|
<div class="container mt-4">
|
||||||
<h1 class="text-center mb-4">Product Table</h1>
|
<h1 class="text-center mb-4">Product Table</h1>
|
||||||
<button class="btn btn-primary mr-2" @click="openModal('create')">Добавить</button>
|
<button class="btn btn-primary mr-2" @click="openModal('create')">Добавить</button>
|
||||||
|
<button class="btn btn-primary mr-2" @click="openFiltrModel('create')">Фильтр</button>
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@ -25,12 +26,54 @@
|
|||||||
<td>
|
<td>
|
||||||
<button class="btn btn-danger" @click="deleteProduct(prdct.id)">Удалить</button>
|
<button class="btn btn-danger" @click="deleteProduct(prdct.id)">Удалить</button>
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
<button class="btn btn-primary" @click="product = prdct; openManyToManyModal()">Производители</button>
|
||||||
|
</td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- Модальное окно для добавления и изменения-->
|
<!-- Модальное окно для фильтра -->
|
||||||
|
<div class="modal" tabindex="-1" id="filtrModal">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">Filtr Products On Manufacturers</h5>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form>
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Название:</th>
|
||||||
|
<th>Редактировать запись:</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="mnfs in filtr" :key="mnfs.id">
|
||||||
|
<td>{{ mnfs.name }}</td>
|
||||||
|
<td>
|
||||||
|
<button class="btn btn-primary" type="button" @click="removeManufacturer(prod.id)">Удалить</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="input-group mb-3">
|
||||||
|
<select class="form-select" v-model="manufacturerId">
|
||||||
|
<option v-for="mnfctr in manufacturers" :key="mnfctr.id" :value="mnfctr.id">{{ mnfctr.name }}</option>
|
||||||
|
</select>
|
||||||
|
<button class="btn btn-outline-secondary" type="button" @click="addManufacturerFiltr()">Добавить</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="editModal" @click="executeFiltr()">Применить</button>
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="editModal" @click="closeManufacturerFiltr()">Закрыть</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="modal" tabindex="-1" id="editModal">
|
<div class="modal" tabindex="-1" id="editModal">
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
@ -69,6 +112,44 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="modal" tabindex="-1" id="manyToManyModal">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">Add Manufacturers to Product</h5>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form>
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Название:</th>
|
||||||
|
<th>Редактировать запись:</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="prod in productManufacturers" :key="prod.id">
|
||||||
|
<td>{{ prod.name }}</td>
|
||||||
|
<td>
|
||||||
|
<button class="btn btn-primary" type="button" @click="removeManufacturer(prod.id)">Удалить</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="input-group mb-3">
|
||||||
|
<select class="form-select" v-model="manufacturerId">
|
||||||
|
<option v-for="mnfctr in manufacturers" :key="mnfctr.id" :value="mnfctr.id">{{ mnfctr.name }}</option>
|
||||||
|
</select>
|
||||||
|
<button class="btn btn-outline-secondary" type="button" @click="addManufacturer()">Добавить</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="editModal" @click="closeManyToManyModal()">Закрыть</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import 'axios';
|
import 'axios';
|
||||||
@ -83,12 +164,19 @@ export default {
|
|||||||
const addModal = document.getElementById('editModal');
|
const addModal = document.getElementById('editModal');
|
||||||
addModal.addEventListener('shown.bs.modal', function () {
|
addModal.addEventListener('shown.bs.modal', function () {
|
||||||
})
|
})
|
||||||
|
const addFiltrModal = document.getElementById('filtrModal');
|
||||||
|
addFiltrModal.addEventListener('shown.bs.modal', function () {
|
||||||
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return{
|
return{
|
||||||
products: [],
|
products: [],
|
||||||
categories: [],
|
categories: [],
|
||||||
|
manufacturers: [],
|
||||||
|
productManufacturers: [],
|
||||||
|
filtr: [],
|
||||||
|
manufacturerId: 0,
|
||||||
URL: "http://localhost:8080/",
|
URL: "http://localhost:8080/",
|
||||||
product: new Product(),
|
product: new Product(),
|
||||||
editedProduct: new Product(),
|
editedProduct: new Product(),
|
||||||
@ -120,9 +208,11 @@ export default {
|
|||||||
this.product.price = parseInt(this.product.price);
|
this.product.price = parseInt(this.product.price);
|
||||||
console.log(this.product);
|
console.log(this.product);
|
||||||
axios.post(this.URL + "product", this.product)
|
axios.post(this.URL + "product", this.product)
|
||||||
.then(() => {
|
.then((response) => {
|
||||||
this.getProducts();
|
this.getProducts();
|
||||||
this.closeModal();
|
this.closeModal();
|
||||||
|
this.product = response.data;
|
||||||
|
this.openManyToManyModal();
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
@ -135,7 +225,8 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
async editProduct(product){
|
async editProduct(product){
|
||||||
await this.toBase64();
|
if(product.photo === undefined) await this.toBase64();
|
||||||
|
console.log(product);
|
||||||
axios.put(this.URL + `product/${product.id}`, product)
|
axios.put(this.URL + `product/${product.id}`, product)
|
||||||
.then(() =>{
|
.then(() =>{
|
||||||
const index = this.products.findIndex((s) => s.id === product.id);
|
const index = this.products.findIndex((s) => s.id === product.id);
|
||||||
@ -169,7 +260,6 @@ export default {
|
|||||||
await new Promise((resolve, reject) => {
|
await new Promise((resolve, reject) => {
|
||||||
reader.onload = function () {
|
reader.onload = function () {
|
||||||
phototemp.photo = reader.result;
|
phototemp.photo = reader.result;
|
||||||
console.log("phototemp: " + phototemp);
|
|
||||||
resolve();
|
resolve();
|
||||||
};
|
};
|
||||||
reader.onerror = function (error) {
|
reader.onerror = function (error) {
|
||||||
@ -178,6 +268,76 @@ export default {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
openManyToManyModal(){
|
||||||
|
this.getAllManufacturers();
|
||||||
|
this.getProductManufacturers();
|
||||||
|
document.getElementById("manyToManyModal").style.display = "block";
|
||||||
|
},
|
||||||
|
closeManyToManyModal() {
|
||||||
|
document.getElementById("manyToManyModal").style.display = "none";
|
||||||
|
},
|
||||||
|
getAllManufacturers(){
|
||||||
|
axios.get(this.URL + "manufacturer")
|
||||||
|
.then(response => {
|
||||||
|
this.manufacturers = response.data;
|
||||||
|
console.log(response.data);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getProductManufacturers(){
|
||||||
|
console.log(this.product.id);
|
||||||
|
axios.get(this.URL + `product/${this.product.id}/manufacturers`)
|
||||||
|
.then(response => {
|
||||||
|
this.productManufacturers = response.data;
|
||||||
|
console.log(response.data);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
addManufacturer(){
|
||||||
|
axios.post(this.URL + `product/${this.product.id}/Manufacturer/${this.manufacturerId}`)
|
||||||
|
.then(() => {
|
||||||
|
this.getProductManufacturers();
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
removeManufacturer(id){
|
||||||
|
axios.delete(this.URL + `product/${this.product.id}/Manufacturer/${id}`)
|
||||||
|
.then(() =>{
|
||||||
|
this.getProductManufacturers();
|
||||||
|
})
|
||||||
|
},
|
||||||
|
openFiltrModel() {
|
||||||
|
this.getAllManufacturers();
|
||||||
|
document.getElementById("filtrModal").style.display = "block";
|
||||||
|
},
|
||||||
|
addManufacturerFiltr() {
|
||||||
|
const selectedManufacturer = this.manufacturers.find(mnfctr => mnfctr.id === this.manufacturerId);
|
||||||
|
if (selectedManufacturer) {
|
||||||
|
this.filtr.push(selectedManufacturer);
|
||||||
|
console.log(this.filtr);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
closeManufacturerFiltr() {
|
||||||
|
document.getElementById("filtrModal").style.display = "none";
|
||||||
|
},
|
||||||
|
executeFiltr() {
|
||||||
|
console.log(this.filtr);
|
||||||
|
const manufacturers = this.filtr;
|
||||||
|
axios.post(this.URL + "product/by-manufacturers", manufacturers)
|
||||||
|
.then(response => {
|
||||||
|
this.products = response.data;
|
||||||
|
console.log(response.data);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -3,6 +3,7 @@ package ru.ulstu.is.sbapp.HardwareShop.controller;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import ru.ulstu.is.sbapp.HardwareShop.models.Manufacturer;
|
||||||
import ru.ulstu.is.sbapp.HardwareShop.models.Product;
|
import ru.ulstu.is.sbapp.HardwareShop.models.Product;
|
||||||
import ru.ulstu.is.sbapp.HardwareShop.services.ManufacturerService;
|
import ru.ulstu.is.sbapp.HardwareShop.services.ManufacturerService;
|
||||||
import ru.ulstu.is.sbapp.HardwareShop.services.ProductService;
|
import ru.ulstu.is.sbapp.HardwareShop.services.ProductService;
|
||||||
@ -34,6 +35,16 @@ public class ProductController {
|
|||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{id}/manufacturers")
|
||||||
|
public List<ManufacturerDTO> getProductManufacturers(@PathVariable Long id){
|
||||||
|
return productService.getProductManufacturers(id).stream().map(ManufacturerDTO::new).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/by-manufacturers")
|
||||||
|
public List<Product> getProductsByManufacturers(@RequestBody List<Manufacturer> manufacturers) {
|
||||||
|
return productService.getProductsByManufacturers(manufacturers);
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public ProductDTO createProduct(@RequestBody @Valid ProductDTO productDTO) throws IOException{
|
public ProductDTO createProduct(@RequestBody @Valid ProductDTO productDTO) throws IOException{
|
||||||
return new ProductDTO(productService.addProduct(productDTO));
|
return new ProductDTO(productService.addProduct(productDTO));
|
||||||
@ -44,9 +55,14 @@ public class ProductController {
|
|||||||
return new ProductDTO(productService.updateProduct(id, productDTO));
|
return new ProductDTO(productService.updateProduct(id, productDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/{id}/{manufacturer}")
|
@PostMapping("/{id}/Manufacturer/{manufacturerId}")
|
||||||
public void addManufacturer(@PathVariable Long id, @PathVariable Long manufacturer_id) {
|
public void addManufacturer(@PathVariable Long id, @PathVariable Long manufacturerId) {
|
||||||
productService.addManufacturersToProduct(id, manufacturer_id);
|
productService.addManufacturersToProduct(id, manufacturerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{id}/Manufacturer/{manufacturerId}")
|
||||||
|
public void removeManufacturer(@PathVariable Long id, @PathVariable Long manufacturerId) {
|
||||||
|
productService.removeManufacturersToProduct(id, manufacturerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/{id}")
|
@DeleteMapping("/{id}")
|
||||||
|
@ -38,6 +38,8 @@ public class Manufacturer {
|
|||||||
|
|
||||||
public Long getId() { return id;}
|
public Long getId() { return id;}
|
||||||
|
|
||||||
|
public void setId(Long id) { this.id = id; }
|
||||||
|
|
||||||
public String getName() { return name; }
|
public String getName() { return name; }
|
||||||
|
|
||||||
public String getAddress() { return address; }
|
public String getAddress() { return address; }
|
||||||
|
@ -58,7 +58,7 @@ public class Product {
|
|||||||
|
|
||||||
public String getName() { return name; }
|
public String getName() { return name; }
|
||||||
|
|
||||||
public void setName() { this.name = name; }
|
public void setName(String name) { this.name = name; }
|
||||||
|
|
||||||
public void setPrice(Integer price) { this.price = price; }
|
public void setPrice(Integer price) { this.price = price; }
|
||||||
|
|
||||||
|
@ -2,12 +2,14 @@ package ru.ulstu.is.sbapp.HardwareShop.repository;
|
|||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
import ru.ulstu.is.sbapp.HardwareShop.models.Manufacturer;
|
import ru.ulstu.is.sbapp.HardwareShop.models.Manufacturer;
|
||||||
import ru.ulstu.is.sbapp.HardwareShop.models.Product;
|
import ru.ulstu.is.sbapp.HardwareShop.models.Product;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface ProductRepository extends JpaRepository<Product, Long> {
|
public interface ProductRepository extends JpaRepository<Product, Long> {
|
||||||
@Query("Select manufacturerList from Product where id =:id")
|
@Query("SELECT p FROM Product p WHERE p.manufacturerList IN :manufacturers")
|
||||||
List<Manufacturer> getManufacturers(Long id);
|
List<Product> findByManufacturers(@Param("manufacturers") List<Manufacturer> manufacturers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,11 +73,18 @@ public class ProductService {
|
|||||||
return productRepository.findAll();
|
return productRepository.findAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(readOnly = true)
|
||||||
|
public List<Product> getProductsByManufacturers(List<Manufacturer> manufacturers) {
|
||||||
|
return productRepository.findByManufacturers(manufacturers);
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Product updateProduct(Long id, ProductDTO productDTO) {
|
public Product updateProduct(Long id, ProductDTO productDTO) {
|
||||||
final Product currentProduct = findProduct(id);
|
final Product currentProduct = findProduct(id);
|
||||||
|
currentProduct.setName(productDTO.getName());
|
||||||
currentProduct.setPrice(productDTO.getPrice());
|
currentProduct.setPrice(productDTO.getPrice());
|
||||||
/*currentProduct.setPhoto(productDTO.getPhoto().getBytes(StandardCharsets.UTF_8));*/
|
currentProduct.setPhoto(productDTO.getPhoto().getBytes(StandardCharsets.UTF_8));
|
||||||
|
currentProduct.setCategory(categoryService.findCategory(productDTO.getCategory_id()));
|
||||||
validatorUtil.validate(currentProduct);
|
validatorUtil.validate(currentProduct);
|
||||||
return productRepository.save(currentProduct);
|
return productRepository.save(currentProduct);
|
||||||
}
|
}
|
||||||
@ -121,8 +128,7 @@ public class ProductService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List getProductManufacturers(Long id){
|
public List<Manufacturer> getProductManufacturers(Long id){
|
||||||
List manufacturers = productRepository.getManufacturers(id);
|
return productRepository.findById(id).get().getManufacturerList();
|
||||||
return manufacturers;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user