Tarea entregada - Primer Commit

This commit is contained in:
RodoIsAlnum
2025-10-24 22:40:20 -06:00
commit 7a763ed972
6 changed files with 1053 additions and 0 deletions

231
MedicsView.qml Normal file
View File

@@ -0,0 +1,231 @@
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtQuick.Controls.Material 2.15
Item {
RowLayout {
anchors.fill: parent
anchors.margins: 20
spacing: 20
// Lista de médicos
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
border.color: Material.color(Material.Grey)
border.width: 1
radius: 5
ColumnLayout {
anchors.fill: parent
anchors.margins: 10
spacing: 10
Label {
text: "Lista de Médicos"
font.pixelSize: 18
font.bold: true
}
ListView {
id: medicsListView
Layout.fillWidth: true
Layout.fillHeight: true
clip: true
spacing: 5
model: window.medicsData
delegate: Rectangle {
width: medicsListView.width
height: 90
color: mouseArea.containsMouse ? Material.color(Material.Grey, Material.Shade100) : "white"
border.color: Material.color(Material.Grey, Material.Shade300)
radius: 5
RowLayout {
anchors.fill: parent
anchors.margins: 10
spacing: 10
ColumnLayout {
Layout.fillWidth: true
spacing: 5
Label {
text: modelData.nombre + " " + modelData.apellido
font.pixelSize: 16
font.bold: true
}
Label {
text: "Especialidad: " + (modelData.especialidad || "N/A")
font.pixelSize: 14
color: Material.color(Material.Teal)
}
Label {
text: "ID: " + modelData.medico_id
font.pixelSize: 12
color: Material.color(Material.Grey)
}
}
Button {
text: "✏️"
flat: true
onClicked: {
medicForm.editMode = true
medicForm.currentId = modelData.medico_id
medicForm.nombreField.text = modelData.nombre
medicForm.apellidoField.text = modelData.apellido
medicForm.especialidadField.text = modelData.especialidad
}
}
Button {
text: "🗑️"
flat: true
Material.foreground: Material.Red
onClicked: {
deleteDialog.medicId = modelData.medico_id
deleteDialog.medicName = modelData.nombre + " " + modelData.apellido
deleteDialog.open()
}
}
}
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
acceptedButtons: Qt.NoButton
}
}
ScrollBar.vertical: ScrollBar {}
}
}
}
// Formulario de médicos
Rectangle {
id: medicForm
Layout.preferredWidth: 350
Layout.fillHeight: true
border.color: Material.color(Material.Grey)
border.width: 1
radius: 5
property bool editMode: false
property int currentId: -1
property alias nombreField: nombreInput
property alias apellidoField: apellidoInput
property alias especialidadField: especialidadInput
ColumnLayout {
anchors.fill: parent
anchors.margins: 20
spacing: 15
Label {
text: medicForm.editMode ? "Editar Médico" : "Nuevo Médico"
font.pixelSize: 18
font.bold: true
}
TextField {
id: nombreInput
Layout.fillWidth: true
placeholderText: "Nombre"
Material.accent: Material.Teal
}
TextField {
id: apellidoInput
Layout.fillWidth: true
placeholderText: "Apellido"
Material.accent: Material.Teal
}
TextField {
id: especialidadInput
Layout.fillWidth: true
placeholderText: "Especialidad"
Material.accent: Material.Teal
}
RowLayout {
Layout.fillWidth: true
spacing: 10
Button {
Layout.fillWidth: true
text: medicForm.editMode ? "Actualizar" : "Agregar"
Material.background: Material.Teal
Material.foreground: "white"
onClicked: {
if (nombreInput.text && apellidoInput.text && especialidadInput.text) {
if (medicForm.editMode) {
apiManager.updateMedic(
medicForm.currentId,
nombreInput.text,
apellidoInput.text,
especialidadInput.text
)
} else {
apiManager.addMedic(
nombreInput.text,
apellidoInput.text,
especialidadInput.text
)
}
nombreInput.text = ""
apellidoInput.text = ""
especialidadInput.text = ""
medicForm.editMode = false
}
}
}
Button {
text: "Cancelar"
visible: medicForm.editMode
onClicked: {
nombreInput.text = ""
apellidoInput.text = ""
especialidadInput.text = ""
medicForm.editMode = false
}
}
}
Item {
Layout.fillHeight: true
}
}
}
}
// Dialog de confirmación de eliminación
Dialog {
id: deleteDialog
anchors.centerIn: parent
title: "Confirmar eliminación"
modal: true
standardButtons: Dialog.Yes | Dialog.No
property int medicId: -1
property string medicName: ""
Label {
text: "¿Está seguro que desea eliminar al médico " + deleteDialog.medicName + "?"
}
onAccepted: {
apiManager.deleteMedic(deleteDialog.medicId)
}
}
}