Tarea entregada - Primer Commit
This commit is contained in:
231
MedicsView.qml
Normal file
231
MedicsView.qml
Normal 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user