Skip to content
Snippets Groups Projects
Commit 74f5c126 authored by wyl's avatar wyl
Browse files

Merge remote-tracking branch 'origin/main' into...

Merge remote-tracking branch 'origin/main' into 34-as-a-superadmin-i-want-to-be-able-to-see-my-username-and-permissions-on-the-page-so-that-i-can

# Conflicts:
#	src/main/resources/application-dev.yml
#	src/main/resources/static/js/beds.js
parents 113c1d30 d5b9a574
No related branches found
No related tags found
1 merge request!77update system
package com.cardiff.client_project.controller.admin; package com.cardiff.client_project.controller.admin;
import com.cardiff.client_project.pojo.dto.HospitalDTO; import com.cardiff.client_project.pojo.dto.HospitalDTO;
import com.cardiff.client_project.pojo.vo.NurseVO;
import com.cardiff.client_project.service.CommonAdminHospitalService; import com.cardiff.client_project.service.CommonAdminHospitalService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
...@@ -31,7 +32,7 @@ public class CommonAdminHospitalController { ...@@ -31,7 +32,7 @@ public class CommonAdminHospitalController {
commonAdminHospitalService.addHospital(hospital); commonAdminHospitalService.addHospital(hospital);
return ResponseEntity.ok("Hospital added successfully!"); return ResponseEntity.ok("Hospital added successfully!");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace(); // Print error log
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("Error adding hospital: " + e.getMessage()); .body("Error adding hospital: " + e.getMessage());
} }
...@@ -45,13 +46,8 @@ public class CommonAdminHospitalController { ...@@ -45,13 +46,8 @@ public class CommonAdminHospitalController {
@PutMapping("/update") @PutMapping("/update")
public ResponseEntity<String> updateHospital(@RequestBody HospitalDTO hospital) { public ResponseEntity<String> updateHospital(@RequestBody HospitalDTO hospital) {
try { commonAdminHospitalService.updateHospital(hospital);
commonAdminHospitalService.updateHospital(hospital); return ResponseEntity.ok("Hospital updated successfully!");
return ResponseEntity.ok("Hospital updated successfully!");
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("Error updating hospital: " + e.getMessage());
}
} }
@DeleteMapping("/delete/{id}") @DeleteMapping("/delete/{id}")
...@@ -64,4 +60,14 @@ public class CommonAdminHospitalController { ...@@ -64,4 +60,14 @@ public class CommonAdminHospitalController {
.body("Failed to delete hospital: " + e.getMessage()); .body("Failed to delete hospital: " + e.getMessage());
} }
} }
@GetMapping("/nurses")
public List<NurseVO> getNurses(@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "hospitalId", required = false) Integer hospitalId) {
if (name == null && hospitalId == null) {
return commonAdminHospitalService.getAllNurses();
}
return commonAdminHospitalService.searchNurses(name, hospitalId);
}
} }
package com.cardiff.client_project.mapper; package com.cardiff.client_project.mapper;
import com.cardiff.client_project.pojo.dto.HospitalDTO; import com.cardiff.client_project.pojo.dto.HospitalDTO;
import com.cardiff.client_project.pojo.vo.NurseVO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Repository @Repository
...@@ -14,25 +16,38 @@ public class CommonAdminHospitalMapper { ...@@ -14,25 +16,38 @@ public class CommonAdminHospitalMapper {
@Autowired @Autowired
JdbcTemplate jdbcTemplate; JdbcTemplate jdbcTemplate;
// Query all hospital information // 更新医院信息
public List<HospitalDTO> findAll() { public int update(HospitalDTO hospital) {
String sql = "SELECT * FROM hospital"; String sql = "UPDATE hospital SET name=?, address=?, phone=?, totalBeds=?, availableBeds=?, occupancyRate=? WHERE id=?";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(HospitalDTO.class)); return jdbcTemplate.update(sql, hospital.getName(), hospital.getAddress(), hospital.getPhone(),
hospital.getTotalBeds(), hospital.getAvailableBeds(), hospital.getOccupancyRate(), hospital.getId());
} }
// Add Hospital Information public List<NurseVO> findAllNurses() {
public int save(HospitalDTO hospital) { String sql = "SELECT id, name, status, " +
String sql = "INSERT INTO hospital (name, location, phone, totalBeds, availableBeds, occupancyRate) VALUES (?, ?, ?, ?, ?, ?)"; "CASE WHEN status = 1 THEN 'Active' ELSE 'Inactive' END AS status_str, " +
return jdbcTemplate.update(sql, hospital.getName(), hospital.getLocation(), hospital.getPhone(), hospital.getTotalBeds(), hospital.getAvailableBeds(), hospital.getOccupancyRate()); "hospitalId, type AS gender, age, address, email, phone " +
"FROM nurse";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(NurseVO.class));
} }
// Update Hospital Information public List<NurseVO> searchNurses(String name, Integer hospitalId) {
public int update(HospitalDTO hospital) { StringBuilder sql = new StringBuilder("SELECT id, name, status, ");
String sql = "UPDATE hospital SET name=?, location=?, phone=?, totalBeds=?, availableBeds=?, occupancyRate=? WHERE id=?"; sql.append("CASE WHEN status = 1 THEN 'Active' ELSE 'Inactive' END AS status_str, ");
return jdbcTemplate.update(sql, hospital.getName(), hospital.getLocation(), hospital.getPhone(), hospital.getTotalBeds(), hospital.getAvailableBeds(), hospital.getOccupancyRate(), hospital.getId()); sql.append("hospitalId, type AS gender, age, address, email, phone ");
sql.append("FROM nurse WHERE 1=1");
List<Object> params = new ArrayList<>();
if (name != null && !name.isEmpty()) {
sql.append(" AND name LIKE ?");
params.add("%" + name + "%");
}
if (hospitalId != null) {
sql.append(" AND hospitalId = ?");
params.add(hospitalId);
}
return jdbcTemplate.query(sql.toString(), params.toArray(), new BeanPropertyRowMapper<>(NurseVO.class));
} }
} }
...@@ -20,5 +20,6 @@ public class NursingHome { ...@@ -20,5 +20,6 @@ public class NursingHome {
private String email; private String email;
private int roleId; private int roleId;
private int status; private int status;
private String location;
} }
package com.cardiff.client_project.service; package com.cardiff.client_project.service;
import com.cardiff.client_project.pojo.dto.SelectDTO;
import com.cardiff.client_project.pojo.dto.HospitalDTO; import com.cardiff.client_project.pojo.dto.HospitalDTO;
import com.cardiff.client_project.pojo.vo.NurseVO;
import com.cardiff.client_project.utils.Result;
import java.util.List; import java.util.List;
...@@ -11,7 +14,13 @@ public interface CommonAdminHospitalService { ...@@ -11,7 +14,13 @@ public interface CommonAdminHospitalService {
void addHospital(HospitalDTO hospital); void addHospital(HospitalDTO hospital);
Result add(Object entity);
void updateHospital(HospitalDTO hospital); void updateHospital(HospitalDTO hospital);
void deleteHospital(int id); void deleteHospital(int id);
List<NurseVO> getAllNurses();
List<NurseVO> searchNurses(String name, Integer hospitalId);
} }
package com.cardiff.client_project.service.imp; package com.cardiff.client_project.service.imp;
import com.cardiff.client_project.mapper.CommonAdminHospitalMapper;
import com.cardiff.client_project.pojo.dto.HospitalDTO; import com.cardiff.client_project.pojo.dto.HospitalDTO;
import com.cardiff.client_project.pojo.vo.NurseVO;
import com.cardiff.client_project.service.CommonAdminHospitalService; import com.cardiff.client_project.service.CommonAdminHospitalService;
import com.cardiff.client_project.utils.Result;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
...@@ -15,6 +18,9 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService ...@@ -15,6 +18,9 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService
@Autowired @Autowired
private JdbcTemplate jdbcTemplate; private JdbcTemplate jdbcTemplate;
@Autowired
private CommonAdminHospitalMapper commonAdminHospitalMapper;
@Override @Override
public List<HospitalDTO> getAllHospitals() { public List<HospitalDTO> getAllHospitals() {
String sql = "SELECT * FROM hospital"; String sql = "SELECT * FROM hospital";
...@@ -23,19 +29,21 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService ...@@ -23,19 +29,21 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService
@Override @Override
public List<HospitalDTO> searchHospitals(String name, String location) { public List<HospitalDTO> searchHospitals(String name, String location) {
String sql = "SELECT * FROM hospital WHERE 1=1"; StringBuilder sql = new StringBuilder("SELECT * FROM hospital WHERE 1=1");
if (name != null && !name.isEmpty()) { if (name != null && !name.isEmpty()) {
sql += " AND name LIKE '%" + name + "%'"; sql.append(" AND name LIKE ?");
} }
if (location != null && !location.isEmpty()) { if (location != null && !location.isEmpty()) {
sql += " AND location LIKE '%" + location + "%'"; sql.append(" AND address LIKE ?");
} }
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(HospitalDTO.class)); return jdbcTemplate.query(sql.toString(), new BeanPropertyRowMapper<>(HospitalDTO.class),
name != null ? "%" + name + "%" : null,
location != null ? "%" + location + "%" : null);
} }
@Override @Override
public void addHospital(HospitalDTO hospital) { public void addHospital(HospitalDTO hospital) {
if (hospital.getName() == null || hospital.getAddress() == null || // 修改为 address if (hospital.getName() == null || hospital.getAddress() == null ||
hospital.getPhone() == null || hospital.getTotalBeds() <= 0 || hospital.getPhone() == null || hospital.getTotalBeds() <= 0 ||
hospital.getAvailableBeds() < 0) { hospital.getAvailableBeds() < 0) {
throw new IllegalArgumentException("Invalid hospital data: Missing or incorrect fields."); throw new IllegalArgumentException("Invalid hospital data: Missing or incorrect fields.");
...@@ -48,18 +56,22 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService ...@@ -48,18 +56,22 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService
hospital.getTotalBeds(), hospital.getAvailableBeds(), occupancyRate); hospital.getTotalBeds(), hospital.getAvailableBeds(), occupancyRate);
} }
@Override
public Result add(Object entity) {
return null;
}
@Override @Override
public void updateHospital(HospitalDTO hospital) { public void updateHospital(HospitalDTO hospital) {
if (hospital.getId() <= 0 || hospital.getName() == null || hospital.getLocation() == null || if (hospital.getId() <= 0 || hospital.getName() == null || hospital.getAddress() == null ||
hospital.getPhone() == null || hospital.getTotalBeds() <= 0 || hospital.getAvailableBeds() < 0) { hospital.getPhone() == null || hospital.getTotalBeds() <= 0 || hospital.getAvailableBeds() < 0) {
throw new IllegalArgumentException("Invalid hospital data: Missing or incorrect fields."); throw new IllegalArgumentException("Invalid hospital data: Missing or incorrect fields.");
} }
String sql = "UPDATE hospital SET name = ?, location = ?, phone = ?, totalBeds = ?, availableBeds = ?, occupancyRate = ? WHERE id = ?"; String sql = "UPDATE hospital SET name = ?, address = ?, phone = ?, totalBeds = ?, availableBeds = ?, occupancyRate = ? WHERE id = ?";
double occupancyRate = 1.0 - (double) hospital.getAvailableBeds() / hospital.getTotalBeds(); double occupancyRate = 1.0 - (double) hospital.getAvailableBeds() / hospital.getTotalBeds();
int rowsUpdated = jdbcTemplate.update(sql, hospital.getName(), hospital.getLocation(), hospital.getPhone(), int rowsUpdated = jdbcTemplate.update(sql, hospital.getName(), hospital.getAddress(), hospital.getPhone(),
hospital.getTotalBeds(), hospital.getAvailableBeds(), occupancyRate, hospital.getId()); hospital.getTotalBeds(), hospital.getAvailableBeds(), occupancyRate, hospital.getId());
if (rowsUpdated == 0) { if (rowsUpdated == 0) {
...@@ -69,21 +81,19 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService ...@@ -69,21 +81,19 @@ public class CommonAdminHospitalServiceImp implements CommonAdminHospitalService
@Override @Override
public void deleteHospital(int id) { public void deleteHospital(int id) {
// Delete the specified record. String sql = "DELETE FROM hospital WHERE id = ?";
String deleteSql = "DELETE FROM hospital WHERE id = ?"; jdbcTemplate.update(sql, id);
jdbcTemplate.update(deleteSql, id);
// Reorder ID
String reorderSql = "SET @new_id = 0; " +
"UPDATE hospital SET id = (@new_id := @new_id + 1); " +
"ALTER TABLE hospital AUTO_INCREMENT = 1;";
for (String sql : reorderSql.split(";")) {
if (!sql.trim().isEmpty()) {
jdbcTemplate.execute(sql.trim());
}
}
} }
@Override
public List<NurseVO> getAllNurses() {
return commonAdminHospitalMapper.findAllNurses();
}
@Override
public List<NurseVO> searchNurses(String name, Integer hospitalId) {
return commonAdminHospitalMapper.searchNurses(name, hospitalId);
}
} }
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<nav class="sidebar"> <nav class="sidebar">
<div class="text-lg font-semibold">System</div> <div class="text-lg font-semibold">System</div>
<a href="#" data-content="hospital">Hospital</a> <a href="#" data-content="hospital">Hospital</a>
<a href="#" data-content="patient">Nursing staff</a> <a href="#" data-content="nursing">Nursing Staff</a>
<a><div onclick="chooseOut()">Sign Out</div></a> <a><div onclick="chooseOut()">Sign Out</div></a>
</nav> </nav>
<div class="content"> <div class="content">
...@@ -68,6 +68,7 @@ ...@@ -68,6 +68,7 @@
function loadHospitalInterface() { function loadHospitalInterface() {
dynamicContent.innerHTML = ` dynamicContent.innerHTML = `
<h2>Hospital Management</h2>
<div id="toolbar"> <div id="toolbar">
<label for="searchName">Name</label> <label for="searchName">Name</label>
<input type="text" id="searchName" placeholder="Search by name" /> <input type="text" id="searchName" placeholder="Search by name" />
...@@ -84,19 +85,50 @@ ...@@ -84,19 +85,50 @@
<th>Name</th> <th>Name</th>
<th>Address</th> <th>Address</th>
<th>Phone</th> <th>Phone</th>
<th>Total Beds</th>
<th>Available Beds</th>
<th>Actions</th> <th>Actions</th>
</tr> </tr>
</thead> </thead>
<tbody id="table-body"></tbody> <tbody id="hospital-table-body"></tbody>
</table> </table>
`; `;
bindToolbarEvents(); bindHospitalToolbarEvents();
loadHospitals(); loadHospitals();
} }
function loadNursingStaffInterface() {
dynamicContent.innerHTML = `
<h2>Nursing Staff</h2>
<div id="toolbar">
<label for="searchNurseName">Name</label>
<input type="text" id="searchNurseName" placeholder="Search by name" />
<label for="searchNurseHospitalId">Hospital ID</label>
<input type="number" id="searchNurseHospitalId" placeholder="Search by Hospital ID" />
<button id="searchNurseButton">Search</button>
<button id="allNurseButton">All</button>
</div>
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Status</th>
<th>Hospital ID</th>
<th>Age</th>
<th>Address</th>
<th>Email</th>
<th>Phone</th>
</tr>
</thead>
<tbody id="nursing-table-body"></tbody>
</table>
`;
bindNursingToolbarEvents();
loadNurses();
}
function openAddHospitalModal() { function openAddHospitalModal() {
document.getElementById('modal-title').innerText = "Add New Hospital"; document.getElementById('modal-title').innerText = "Add New Hospital";
document.getElementById('hospital-modal').style.display = 'flex'; document.getElementById('hospital-modal').style.display = 'flex';
...@@ -120,8 +152,8 @@ ...@@ -120,8 +152,8 @@
name: document.getElementById('modal-name').value.trim(), name: document.getElementById('modal-name').value.trim(),
address: document.getElementById('modal-address').value.trim(), address: document.getElementById('modal-address').value.trim(),
phone: document.getElementById('modal-phone').value.trim(), phone: document.getElementById('modal-phone').value.trim(),
totalBeds: parseInt(document.getElementById('modal-totalBeds').value, 10), totalBeds: parseInt(document.getElementById('modal-totalBeds').value.trim()),
availableBeds: parseInt(document.getElementById('modal-availableBeds').value, 10), availableBeds: parseInt(document.getElementById('modal-availableBeds').value.trim())
}; };
if (!hospitalData.name || !hospitalData.address || !hospitalData.phone || if (!hospitalData.name || !hospitalData.address || !hospitalData.phone ||
...@@ -153,7 +185,7 @@ ...@@ -153,7 +185,7 @@
fetch(`/commonAdmin/hospital/all?${query}`) fetch(`/commonAdmin/hospital/all?${query}`)
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
const tableBody = document.getElementById('table-body'); const tableBody = document.getElementById('hospital-table-body');
tableBody.innerHTML = ''; tableBody.innerHTML = '';
data.forEach(hospital => { data.forEach(hospital => {
...@@ -163,8 +195,6 @@ ...@@ -163,8 +195,6 @@
<td>${hospital.name}</td> <td>${hospital.name}</td>
<td>${hospital.address}</td> <td>${hospital.address}</td>
<td>${hospital.phone}</td> <td>${hospital.phone}</td>
<td>${hospital.totalBeds}</td>
<td>${hospital.availableBeds}</td>
<td> <td>
<button class="editButton" data-id="${hospital.id}">Edit</button> <button class="editButton" data-id="${hospital.id}">Edit</button>
<button class="deleteButton" data-id="${hospital.id}">Delete</button> <button class="deleteButton" data-id="${hospital.id}">Delete</button>
...@@ -172,103 +202,85 @@ ...@@ -172,103 +202,85 @@
`; `;
tableBody.appendChild(row); tableBody.appendChild(row);
}); });
bindRowEvents();
}) })
.catch(error => console.error("Error loading hospitals:", error)); .catch(error => console.error("Error loading hospitals:", error));
} }
function handleDeleteHospital(event) { function loadNurses(filters = {}) {
const id = event.target.getAttribute('data-id'); const query = new URLSearchParams(filters).toString();
fetch(`/commonAdmin/hospital/nurses?${query}`)
if (confirm(`Are you sure you want to delete the hospital with ID ${id}?`)) {
fetch(`/commonAdmin/hospital/delete/${id}`, { method: 'DELETE' })
.then(response => {
if (response.ok) {
alert("Deleted successfully!");
loadHospitals();
} else {
throw new Error("Failed to delete hospital.");
}
})
.catch(error => console.error("Error deleting hospital:", error));
}
}
function handleEditHospital(event) {
const id = event.target.getAttribute('data-id');
fetch(`/commonAdmin/hospital/${id}`)
.then(response => response.json()) .then(response => response.json())
.then(hospital => { .then(data => {
document.getElementById('modal-title').innerText = "Edit Hospital"; const tableBody = document.getElementById('nursing-table-body');
document.getElementById('modal-name').value = hospital.name; tableBody.innerHTML = '';
document.getElementById('modal-address').value = hospital.address;
document.getElementById('modal-phone').value = hospital.phone; data.forEach(nurse => {
document.getElementById('modal-totalBeds').value = hospital.totalBeds; const row = document.createElement('tr');
document.getElementById('modal-availableBeds').value = hospital.availableBeds; row.innerHTML = `
document.getElementById('hospital-modal').style.display = 'flex'; <td>${nurse.id}</td>
<td>${nurse.name}</td>
document.getElementById('save-hospital-btn').onclick = () => updateHospital(id); <td>${nurse.status_str}</td>
<td>${nurse.hospitalId}</td>
<td>${nurse.age}</td>
<td>${nurse.address}</td>
<td>${nurse.email}</td>
<td>${nurse.phone}</td>
`;
tableBody.appendChild(row);
});
}) })
.catch(error => console.error("Error fetching hospital details:", error)); .catch(error => console.error("Error loading nurses:", error));
} }
function updateHospital(id) {
const hospitalData = {
id,
name: document.getElementById('modal-name').value.trim(),
address: document.getElementById('modal-address').value.trim(),
phone: document.getElementById('modal-phone').value.trim(),
totalBeds: parseInt(document.getElementById('modal-totalBeds').value, 10),
availableBeds: parseInt(document.getElementById('modal-availableBeds').value, 10),
};
if (!hospitalData.name || !hospitalData.address || !hospitalData.phone ||
isNaN(hospitalData.totalBeds) || isNaN(hospitalData.availableBeds)) {
alert("All fields are required!");
return;
}
fetch('/commonAdmin/hospital/update', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(hospitalData),
}).then(response => {
if (response.ok) {
alert("Hospital updated successfully!");
closeHospitalModal();
loadHospitals();
} else {
return response.text().then(text => { throw new Error(text); });
}
}).catch(error => {
console.error("Error updating hospital:", error);
alert("Failed to update hospital: " + error.message);
});
}
function bindToolbarEvents() { function bindHospitalToolbarEvents() {
document.getElementById('addHospitalButton').addEventListener('click', openAddHospitalModal); document.getElementById('addHospitalButton').addEventListener('click', openAddHospitalModal);
document.getElementById('searchButton').addEventListener('click', () => {
const name = document.getElementById('searchName').value.trim();
const address = document.getElementById('searchAddress').value.trim();
const filters = {};
if (name) filters.name = name;
if (address) filters.location = address;
loadHospitals(filters);
});
document.getElementById('allButton').addEventListener('click', () => {
loadHospitals();
});
// Add close button event listener
document.getElementById('close-hospital-modal').addEventListener('click', closeHospitalModal);
} }
function bindRowEvents() { function bindNursingToolbarEvents() {
document.querySelectorAll('.deleteButton').forEach(button => { document.getElementById('searchNurseButton').addEventListener('click', () => {
button.addEventListener('click', handleDeleteHospital); const name = document.getElementById('searchNurseName').value.trim();
const hospitalId = document.getElementById('searchNurseHospitalId').value.trim();
const filters = {};
if (name) filters.name = name;
if (hospitalId) filters.hospitalId = hospitalId;
loadNurses(filters);
}); });
document.querySelectorAll('.editButton').forEach(button => { document.getElementById('allNurseButton').addEventListener('click', () => {
button.addEventListener('click', handleEditHospital); loadNurses();
}); });
} }
document.getElementById('close-hospital-modal').addEventListener('click', closeHospitalModal);
document.querySelectorAll(".sidebar a").forEach(link => { document.querySelectorAll(".sidebar a").forEach(link => {
link.addEventListener("click", function(event) { link.addEventListener("click", function(event) {
event.preventDefault(); event.preventDefault();
const contentKey = this.getAttribute("data-content"); const contentKey = this.getAttribute("data-content");
if (contentKey === "hospital") { if (contentKey === "hospital") {
loadHospitalInterface(); loadHospitalInterface();
} else if (contentKey === "nursing") {
loadNursingStaffInterface();
} }
}); });
}); });
......
...@@ -13,10 +13,10 @@ $(document).ready(function () { ...@@ -13,10 +13,10 @@ $(document).ready(function () {
<nav class="top-nav"> <nav class="top-nav">
<div class="nav-brand">Digital Insight for Health</div> <div class="nav-brand">Digital Insight for Health</div>
<div class="nav-items"> <div class="nav-items">
<a href="/dashboard" class="nav-link"> <a href="/superAdminView.html?type=hospital" class="nav-link">
<i class="fas fa-home"></i> Home <i class="fas fa-home"></i> Home
</a> </a>
<a href="/beds" class="nav-link active"> <a href="/beds.html" class="nav-link active">
<i class="fas fa-bed"></i> Beds <i class="fas fa-bed"></i> Beds
</a> </a>
<button class="nav-link sign-out" onclick="handleSignOut()"> <button class="nav-link sign-out" onclick="handleSignOut()">
...@@ -95,7 +95,47 @@ $(document).ready(function () { ...@@ -95,7 +95,47 @@ $(document).ready(function () {
}); });
// Form Submit Handler // Form Submit Handler
$("#hospitalForm").submit(handleFormSubmit); $("#hospitalForm").submit(function(e) {
e.preventDefault();
const formData = {
name: $("#hospitalName").val(),
location: $("#hospitalLocation").val(),
address: $("#hospitalLocation").val(), // Match DB schema
phone: $("#hospitalPhone").val(),
totalBeds: parseInt($("#totalBeds").val()),
availableBeds: parseInt($("#availableBeds").val()),
type: 'hospital',
status: 1,
roleId: 3,
email: '',
password: '$2a$10$wvAZoj4V51MH/MLhVIrnG.NrY07/.Gn9Ar6JsyzRAubWtqbWzgKie'
};
if (!validateFormData(formData)) {
showError('Please fill all required fields');
return;
}
$.ajax({
url: API_BASE_URL,
method: 'POST',
contentType: 'application/json',
data: JSON.stringify(formData),
success: function(response) {
if(response && response.code === 1) {
$("#hospitalModal").fadeOut();
loadHospitals();
showSuccess('Hospital added successfully');
} else {
showError(response.msg || DEFAULT_ERROR);
}
},
error: function(xhr, status, error) {
console.error('API Error:', error);
showError(DEFAULT_ERROR);
}
});
});
// Delete Handler // Delete Handler
$(document).on('click', '.delete-btn', function() { $(document).on('click', '.delete-btn', function() {
...@@ -105,15 +145,16 @@ $(document).ready(function () { ...@@ -105,15 +145,16 @@ $(document).ready(function () {
url: `${API_BASE_URL}/${id}`, url: `${API_BASE_URL}/${id}`,
method: 'DELETE', method: 'DELETE',
success: function(response) { success: function(response) {
if(response.code === 200) { if(response && response.code === 1) {
loadHospitals(); loadHospitals();
showSuccess('Hospital deleted successfully');
} else { } else {
alert(response.msg || 'Delete failed'); showError(response.msg || 'Delete failed');
} }
}, },
error: function(xhr) { error: function(xhr) {
alert('Delete failed');
console.error('Delete Error:', xhr); console.error('Delete Error:', xhr);
showError('Failed to delete hospital');
} }
}); });
} }
...@@ -191,6 +232,27 @@ $(document).ready(function () { ...@@ -191,6 +232,27 @@ $(document).ready(function () {
$('#hospitalTable tbody').html(`<tr><td colspan="8" class="text-center text-danger">${message}</td></tr>`); $('#hospitalTable tbody').html(`<tr><td colspan="8" class="text-center text-danger">${message}</td></tr>`);
} }
function validateFormData(data) {
return data.name &&
data.location &&
data.phone &&
data.totalBeds > 0 &&
data.availableBeds >= 0 &&
data.availableBeds <= data.totalBeds;
}
function showSuccess(message) {
const alert = `
<div class="alert alert-success">
${message}
</div>
`;
$('.table-container').before(alert);
setTimeout(() => {
$('.alert').fadeOut().remove();
}, 3000);
}
// Add CSS for new components // Add CSS for new components
const styles = ` const styles = `
.top-nav { .top-nav {
...@@ -273,5 +335,5 @@ $(document).ready(function () { ...@@ -273,5 +335,5 @@ $(document).ready(function () {
function handleSignOut() { function handleSignOut() {
localStorage.clear(); localStorage.clear();
window.location.href = '/login'; window.location.href = '/login.html';
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment