diff --git a/src/main/java/com/cardiff/client_project/controller/admin/CommonAdminHospitalController.java b/src/main/java/com/cardiff/client_project/controller/admin/CommonAdminHospitalController.java new file mode 100644 index 0000000000000000000000000000000000000000..52b239dd38ba94d406ddf430497d898b06c22b6a --- /dev/null +++ b/src/main/java/com/cardiff/client_project/controller/admin/CommonAdminHospitalController.java @@ -0,0 +1,40 @@ +package com.cardiff.client_project.controller.admin; + +import com.cardiff.client_project.pojo.dto.HospitalDTO; +import com.cardiff.client_project.service.CommonAdminHospitalService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/commonAdmin/hospital") +public class CommonAdminHospitalController { + + @Autowired + private CommonAdminHospitalService commonAdminHospitalService; + + @GetMapping("/all") + public List<HospitalDTO> getAllHospitals() { + return commonAdminHospitalService.getAllHospitals(); + } + + @PostMapping("/add") + public ResponseEntity<String> addHospital(@RequestBody HospitalDTO hospital) { + commonAdminHospitalService.addHospital(hospital); + return ResponseEntity.ok("Hospital added successfully!"); + } + + @PutMapping("/update") + public ResponseEntity<String> updateHospital(@RequestBody HospitalDTO hospital) { + commonAdminHospitalService.updateHospital(hospital); + return ResponseEntity.ok("Hospital updated successfully!"); + } + + @DeleteMapping("/delete/{id}") + public ResponseEntity<String> deleteHospital(@PathVariable int id) { + commonAdminHospitalService.deleteHospital(id); + return ResponseEntity.ok("Hospital deleted successfully!"); + } +} diff --git a/src/main/java/com/cardiff/client_project/controller/admin/SuperAdminController.java b/src/main/java/com/cardiff/client_project/controller/admin/SuperAdminController.java index a33e0be93552abfb37a66157ef00f73d996dd59f..1c01ed8b716310b0badffa0e2c83adbd53949a28 100644 --- a/src/main/java/com/cardiff/client_project/controller/admin/SuperAdminController.java +++ b/src/main/java/com/cardiff/client_project/controller/admin/SuperAdminController.java @@ -71,4 +71,15 @@ public class SuperAdminController { Result result= superAdminService.update(selectDTO); return result; } + + /** + * page selete + */ + @GetMapping("/pageSelect") + public Result pageSelect(@RequestParam String type,@RequestParam Integer pageSize,@RequestParam Integer pageNumber){ + Result result=superAdminService.selectPage(type,pageSize,pageNumber); + return result; + } } + + diff --git a/src/main/java/com/cardiff/client_project/mapper/CommonAdminHospitalMapper.java b/src/main/java/com/cardiff/client_project/mapper/CommonAdminHospitalMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..9eee82cc265d0f43d5a9d1706977e9cc6cbef0dc --- /dev/null +++ b/src/main/java/com/cardiff/client_project/mapper/CommonAdminHospitalMapper.java @@ -0,0 +1,40 @@ +package com.cardiff.client_project.mapper; + +import com.cardiff.client_project.pojo.dto.HospitalDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public class CommonAdminHospitalMapper { + + @Autowired + JdbcTemplate jdbcTemplate; + + // æŸ¥è¯¢æ‰€æœ‰åŒ»é™¢ä¿¡æ¯ + public List<HospitalDTO> findAll() { + String sql = "SELECT * FROM hospital"; + return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(HospitalDTO.class)); + } + + // æ·»åŠ åŒ»é™¢ä¿¡æ¯ + public int save(HospitalDTO hospital) { + String sql = "INSERT INTO hospital (name, location, phone, totalBeds, availableBeds, occupancyRate) VALUES (?, ?, ?, ?, ?, ?)"; + return jdbcTemplate.update(sql, hospital.getName(), hospital.getLocation(), hospital.getPhone(), hospital.getTotalBeds(), hospital.getAvailableBeds(), hospital.getOccupancyRate()); + } + + // æ›´æ–°åŒ»é™¢ä¿¡æ¯ + public int update(HospitalDTO hospital) { + String sql = "UPDATE hospital SET name=?, location=?, phone=?, totalBeds=?, availableBeds=?, occupancyRate=? WHERE id=?"; + return jdbcTemplate.update(sql, hospital.getName(), hospital.getLocation(), hospital.getPhone(), hospital.getTotalBeds(), hospital.getAvailableBeds(), hospital.getOccupancyRate(), hospital.getId()); + } + + // æ ¹æ® ID åˆ é™¤åŒ»é™¢ä¿¡æ¯ + public int deleteById(int id) { + String sql = "DELETE FROM hospital WHERE id=?"; + return jdbcTemplate.update(sql, id); + } +} diff --git a/src/main/java/com/cardiff/client_project/service/CommonAdminHospitalService.java b/src/main/java/com/cardiff/client_project/service/CommonAdminHospitalService.java new file mode 100644 index 0000000000000000000000000000000000000000..998146130d2bb4d50c931a9e664fb2c5df32a087 --- /dev/null +++ b/src/main/java/com/cardiff/client_project/service/CommonAdminHospitalService.java @@ -0,0 +1,15 @@ +package com.cardiff.client_project.service; + +import com.cardiff.client_project.pojo.dto.HospitalDTO; + +import java.util.List; + +public interface CommonAdminHospitalService { + List<HospitalDTO> getAllHospitals(); + + void addHospital(HospitalDTO hospital); + + void updateHospital(HospitalDTO hospital); + + void deleteHospital(int id); +} diff --git a/src/main/java/com/cardiff/client_project/service/SuperAdminService.java b/src/main/java/com/cardiff/client_project/service/SuperAdminService.java index 02968edbc4de931bdcbdec570f07a3b031b4fe6e..94d22a2d3dcb9d68d9cd789f8a3501bfb5c9bbfe 100644 --- a/src/main/java/com/cardiff/client_project/service/SuperAdminService.java +++ b/src/main/java/com/cardiff/client_project/service/SuperAdminService.java @@ -46,4 +46,6 @@ public interface SuperAdminService { * @return */ Result selectByItem(SelectDTO selectDTO); + + Result selectPage(String type, Integer pageSize, int i); } diff --git a/src/main/java/com/cardiff/client_project/service/imp/CommonAdminHospitalServiceImp.java b/src/main/java/com/cardiff/client_project/service/imp/CommonAdminHospitalServiceImp.java new file mode 100644 index 0000000000000000000000000000000000000000..90a14b5af8fbb93f4da7395c9cfc3e0fd9c102af --- /dev/null +++ b/src/main/java/com/cardiff/client_project/service/imp/CommonAdminHospitalServiceImp.java @@ -0,0 +1,43 @@ +package com.cardiff.client_project.service.imp; + +import com.cardiff.client_project.pojo.dto.HospitalDTO; +import com.cardiff.client_project.service.CommonAdminHospitalService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService { + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Override + public List<HospitalDTO> getAllHospitals() { + String sql = "SELECT * FROM hospital"; + return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(HospitalDTO.class)); + } + + @Override + public void addHospital(HospitalDTO hospital) { + String sql = "INSERT INTO hospital (name, location, phone, totalBeds, availableBeds, occupancyRate) VALUES (?, ?, ?, ?, ?, ?)"; + jdbcTemplate.update(sql, hospital.getName(), hospital.getLocation(), hospital.getPhone(), + hospital.getTotalBeds(), hospital.getAvailableBeds(), hospital.getOccupancyRate()); + } + + @Override + public void updateHospital(HospitalDTO hospital) { + String sql = "UPDATE hospital SET name=?, location=?, phone=?, totalBeds=?, availableBeds=?, occupancyRate=? WHERE id=?"; + jdbcTemplate.update(sql, hospital.getName(), hospital.getLocation(), hospital.getPhone(), + hospital.getTotalBeds(), hospital.getAvailableBeds(), hospital.getOccupancyRate(), hospital.getId()); + } + + @Override + public void deleteHospital(int id) { + String sql = "DELETE FROM hospital WHERE id=?"; + jdbcTemplate.update(sql, id); + } +} diff --git a/src/main/java/com/cardiff/client_project/service/imp/SuperAdminServiceImp.java b/src/main/java/com/cardiff/client_project/service/imp/SuperAdminServiceImp.java index 4589db4183759ad1b7be5687419df2ecf6cebc41..d238ec423a368aca939e788060b03ba5f86a8fda 100644 --- a/src/main/java/com/cardiff/client_project/service/imp/SuperAdminServiceImp.java +++ b/src/main/java/com/cardiff/client_project/service/imp/SuperAdminServiceImp.java @@ -200,5 +200,25 @@ public class SuperAdminServiceImp implements SuperAdminService { } } + + @Override + public Result selectPage(String type, Integer pageSize, int pageNumber) { + if(type.equals("commonAdmin")){ + List<CommonAdmin> commonAdmins = superAdminMapper.selectPageCommonAdmin(pageSize, pageNumber); + //get all and count items + List<AdminVO> adminVOS = superAdminMapper.selectAllAdmin(); + if(commonAdmins.size()>0){ + System.out.println(adminVOS.size()); + Integer count=adminVOS.size()%pageSize==0?adminVOS.size()/pageSize:adminVOS.size()/pageSize+1; + return Result.success(count.toString(),commonAdmins); + } + } + if(type.equals("hospital")){ + + } + return Result.error(ResponseCode.ERROR); + } + + } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index ae3309bbd3927093b2b55a5e17ae320797fbc6c0..b0f4bde722ce1aad6861d9e9ce85187f71605cac 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -3,4 +3,4 @@ healthcare: url: jdbc:mysql://localhost:3306/health_care port: 3306 username: root - password: root \ No newline at end of file + password: 472500 \ No newline at end of file diff --git a/src/main/resources/static/html/admin.html b/src/main/resources/static/html/admin.html index 8199126c1505b7269c8c0c98278ebd9017aa818b..8c8d95b2f9e79d190bdc99225cb580a811f6d9d5 100644 --- a/src/main/resources/static/html/admin.html +++ b/src/main/resources/static/html/admin.html @@ -3,16 +3,16 @@ <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Administrator Management</title> + <title>Hospital Management</title> <link rel="stylesheet" type="text/css" href="../css/admin.css"> </head> <body> <!-- Left Sidebar Navigation --> <nav class="sidebar"> <div class="text-lg font-semibold">System</div> - <a href="#" data-content="admin">Hospital</a> - <a href="#" data-content="patient">Patient</a> - <a href="#" data-content="logout">Log Out</a> + <a href="#" data-content="hospital">Hospital</a> + <a href="#" data-content="patient">Nursing staff</a> + <a href="#" data-content="logout">LogOut</a> </nav> <!-- Main Content Area --> @@ -23,28 +23,29 @@ </div> </div> -<!-- Modal for Adding Admin --> +<!-- Modal for Adding Hospital --> <div id="modal"> <div class="modal-content"> - <h2>Add New Admin</h2> + <h2>Add New Hospital</h2> <div> <label for="modal-name">Name</label> <input type="text" id="modal-name" /> </div> <div> - <label for="modal-email">Email</label> - <input type="email" id="modal-email" /> + <label for="modal-location">Location</label> + <input type="text" id="modal-location" /> </div> <div> <label for="modal-phone">Phone</label> <input type="text" id="modal-phone" /> </div> <div> - <label for="modal-status">Status</label> - <select id="modal-status"> - <option value="Active">Active</option> - <option value="Inactive">Inactive</option> - </select> + <label for="modal-totalBeds">Total Beds</label> + <input type="number" id="modal-totalBeds" /> + </div> + <div> + <label for="modal-availableBeds">Available Beds</label> + <input type="number" id="modal-availableBeds" /> </div> <div class="modal-footer"> <button id="modal-save">Save</button> @@ -60,30 +61,31 @@ const modalClose = document.getElementById("modal-close"); const modalSave = document.getElementById("modal-save"); - // Fetch admin data based on search criteria - function loadAdmins(filters = {}) { + // Fetch hospital data + function loadHospitals(filters = {}) { const query = new URLSearchParams(filters).toString(); - fetch(`/admin/select?${query}`) + fetch(`/commonAdmin/hospital/all?${query}`) .then(response => response.json()) .then(data => { const tableBody = document.getElementById("table-body"); tableBody.innerHTML = ""; - data.forEach(admin => { + data.forEach(hospital => { const row = document.createElement("tr"); row.innerHTML = ` - <td>${admin.id}</td> - <td>${admin.email}</td> - <td>${admin.phone}</td> - <td>${admin.name}</td> - <td>${admin.status}</td> + <td>${hospital.id}</td> + <td>${hospital.name}</td> + <td>${hospital.location}</td> + <td>${hospital.phone}</td> + <td>${hospital.totalBeds}</td> + <td>${hospital.availableBeds}</td> `; tableBody.appendChild(row); }); }) - .catch(error => console.error('Error loading admins:', error)); + .catch(error => console.error('Error loading hospitals:', error)); } - // Open add admin modal + // Open modal function openModal() { modal.style.display = "block"; } @@ -93,58 +95,52 @@ modal.style.display = "none"; }); - // Save new admin + // Save new hospital modalSave.addEventListener("click", () => { const name = document.getElementById("modal-name").value; - const email = document.getElementById("modal-email").value; + const location = document.getElementById("modal-location").value; const phone = document.getElementById("modal-phone").value; - const status = document.getElementById("modal-status").value; + const totalBeds = document.getElementById("modal-totalBeds").value; + const availableBeds = document.getElementById("modal-availableBeds").value; - const newAdmin = { name, email, phone, status }; + const newHospital = { name, location, phone, totalBeds, availableBeds }; - fetch('/admin/sign', { + fetch('/commonAdmin/hospital/add', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(newAdmin) + body: JSON.stringify(newHospital) }) .then(response => response.json()) .then(() => { - loadAdmins(); // Reload admin list + loadHospitals(); // Reload hospital list modal.style.display = "none"; // Close modal }) - .catch(error => console.error('Error saving admin:', error)); + .catch(error => console.error('Error saving hospital:', error)); }); - // Load admin interface with search toolbar - function loadAdminInterface() { + // Load hospital interface + function loadHospitalInterface() { dynamicContent.innerHTML = ` <div id="toolbar"> <label for="searchName">Name</label> <input type="text" class="searchBox" id="searchName" placeholder="type name..." /> - <label for="searchEmail">Email</label> - <input type="text" class="searchBox" id="searchEmail" placeholder="type email..." /> - <label for="searchPhone">Phone</label> - <input type="text" class="searchBox" id="searchPhone" placeholder="type phone..." /> - <label for="searchStatus">Status</label> - <select class="searchBox" id="searchStatus"> - <option value="">All</option> - <option value="Active">Active</option> - <option value="Inactive">Inactive</option> - </select> + <label for="searchLocation">Location</label> + <input type="text" class="searchBox" id="searchLocation" placeholder="type location..." /> <button id="searchButton">Search</button> </div> <div class="table-container"> - <button id="add-btn" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">Add Admin</button> + <button id="add-btn" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">Add</button> <table> <thead> <tr> <th>ID</th> - <th>Email</th> - <th>Phone</th> <th>Name</th> - <th>Status</th> + <th>Location</th> + <th>Phone</th> + <th>Total Beds</th> + <th>Available Beds</th> </tr> </thead> <tbody id="table-body"> @@ -154,22 +150,20 @@ </div> `; - // Add admin button event + // Add hospital button event document.getElementById("add-btn").addEventListener("click", openModal); // Search button event document.getElementById("searchButton").addEventListener("click", () => { const filters = { name: document.getElementById("searchName").value, - email: document.getElementById("searchEmail").value, - phone: document.getElementById("searchPhone").value, - status: document.getElementById("searchStatus").value + location: document.getElementById("searchLocation").value }; - loadAdmins(filters); + loadHospitals(filters); }); - // Load admin data initially - loadAdmins(); + // Load hospital data initially + loadHospitals(); } // Sidebar navigation @@ -177,8 +171,8 @@ link.addEventListener("click", function (event) { event.preventDefault(); const contentKey = this.getAttribute("data-content"); - if (contentKey === "admin") { - loadAdminInterface(); + if (contentKey === "hospital") { + loadHospitalInterface(); } }); }); diff --git a/src/main/resources/static/js/mainHospitalView.js b/src/main/resources/static/js/mainHospitalView.js index 1e6a9e183c6874cc0af7b47a9784c149e4a06117..22d8d4702ee4860fbbde1c75a974befcb15e194c 100644 --- a/src/main/resources/static/js/mainHospitalView.js +++ b/src/main/resources/static/js/mainHospitalView.js @@ -280,7 +280,7 @@ function updateTable(data) { <td class="tdOption"> <label id="edit" class="btn">Edit</label> <label id="delete" class="btn">Delete</label> - <label id="freeze" class="btn">Freeze</label> + <label id="freeze" class="btn">Change status</label> </td> </tr> `; diff --git a/src/main/resources/static/js/mainSupAdminView.js b/src/main/resources/static/js/mainSupAdminView.js index 8d4328f4f27bf1ae04881fd531bca973f0f1062f..2005f653be22fff349de1d1e1cf654b65587ec7a 100644 --- a/src/main/resources/static/js/mainSupAdminView.js +++ b/src/main/resources/static/js/mainSupAdminView.js @@ -247,23 +247,36 @@ function updateTable(data) { <td class="tdOption"> <label id="edit" class="btn">Edit</label> <label id="delete" class="btn">Delete</label> - <label id="freeze" class="btn">Freeze</label> + <label id="freeze" class="btn">Change status</label> </td> </tr> `; tbody.append(tr); }); } -$(document).on("change","#page-size",function (){ - let pageSize=document.getElementById("page-size").value + +function pageSelect(pageSize,paginationDiv,pageNumber) { + $.ajax({ contentType: "application/json", - url: `/superAdmin/pageSelect?type=commonAdmin&pageSize=${pageSize}`, + url: `/superAdmin/pageSelect?type=commonAdmin&pageSize=${pageSize}&pageNumber=${pageNumber}`, type: "GET", dataType: "Json", success: function (data) { - console.log(data) + console.log(data) if (data.code != 0) { + console.log(data.code) + console.log(data.data) + paginationDiv.innerHTML = ""; //clear old button + for (let i = 1; i <= data.msg; i++) { + const button = document.createElement("button"); + button.textContent = i; + button.style.margin = "0 5px"; + button.style.padding = "5px 10px"; + button.style.cursor = "pointer"; + button.onclick = () => pageSelect(pageSize,paginationDiv,button.textContent); + paginationDiv.appendChild(button); + } updateTable(data.data) //location.reload() } else { @@ -271,5 +284,10 @@ $(document).on("change","#page-size",function (){ } }, }) +} +$(document).on("change","#page-size",function (){ + let pageSize=document.getElementById("page-size").value + let paginationDiv = document.getElementById("pagination"); + pageSelect(pageSize,paginationDiv,"1"); }) \ No newline at end of file diff --git a/src/main/resources/templates/mainHospitalView.html b/src/main/resources/templates/mainHospitalView.html index d53b851731370c57dfc2d9123f68a6a57be608e0..8531c7773fb71da8cabe13a2c7af3edc4bf31b7f 100644 --- a/src/main/resources/templates/mainHospitalView.html +++ b/src/main/resources/templates/mainHospitalView.html @@ -60,7 +60,7 @@ <td class="tdOption"> <label id="edit" class="btn">Edit</label> <label id="delete" class="btn">Delete</label> - <label id="freeze" class="btn">Freeze</label> + <label id="freeze" class="btn">Change status</label> </td> </tr> </tbody> diff --git a/src/main/resources/templates/mainSupAdminView.html b/src/main/resources/templates/mainSupAdminView.html index c0d52d8c8936318bcfcdc2a215e498caa8fafdb3..d3d05a2464b6386f182cf8d9f090d41fdd9e2a8a 100644 --- a/src/main/resources/templates/mainSupAdminView.html +++ b/src/main/resources/templates/mainSupAdminView.html @@ -48,7 +48,7 @@ <td class="tdOption"> <label id="edit" class="btn">Edit</label> <label id="delete" class="btn">Delete</label> - <label id="freeze" class="btn">Freeze</label> + <label id="freeze" class="btn">Change status</label> </td> </tr> @@ -91,13 +91,22 @@ <button type="button" id="addAdmin" style="margin-right: 170px;margin-left: 20px">Submit</button> <button type="button" onclick="location.reload()">Cancel</button> </div> -<div> - <select id="page-size"> +<div style="display: flex; align-items: center; gap: 10px; justify-content: center;"> + <select id="page-size" style="background-color: #f9f9f9; + border: 1px solid #ccc; + border-radius: 4px; + padding: 8px 12px; + font-size: 14px; + color: #333; + cursor: pointer; + width: 150px; + transition: all 0.3s ease;"> <option value="">items per page</option> <option value="1">1</option> <option value="2">2</option> <option value="15">15</option> </select> + <div id="pagination" style="margin-top: 10px;"></div> </div> <script src="/js/mainSupAdminView.js"></script> </body>