fix(abdm-opd): prevent inline payload parsing error in Register OPD modal
This commit is contained in:
parent
b352073ec6
commit
8a7b4440c5
|
|
@ -182,6 +182,12 @@
|
||||||
function esc(s) {
|
function esc(s) {
|
||||||
return String(s ?? '').replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"');
|
return String(s ?? '').replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"');
|
||||||
}
|
}
|
||||||
|
function encodePayload(obj) {
|
||||||
|
return btoa(unescape(encodeURIComponent(JSON.stringify(obj))));
|
||||||
|
}
|
||||||
|
function decodePayload(payload) {
|
||||||
|
return JSON.parse(decodeURIComponent(escape(atob(String(payload || '')))));
|
||||||
|
}
|
||||||
|
|
||||||
function loadQueue() {
|
function loadQueue() {
|
||||||
const date = document.getElementById('queueDate').value;
|
const date = document.getElementById('queueDate').value;
|
||||||
|
|
@ -255,12 +261,12 @@
|
||||||
actions += `<button class="btn btn-xs btn-sm btn-outline-danger me-1" onclick="abdmQCancel(${id})">Cancel</button>`;
|
actions += `<button class="btn btn-xs btn-sm btn-outline-danger me-1" onclick="abdmQCancel(${id})">Cancel</button>`;
|
||||||
}
|
}
|
||||||
if (!isLinked && (isPend || isCalled)) {
|
if (!isLinked && (isPend || isCalled)) {
|
||||||
const pl = JSON.stringify({
|
const pl = encodePayload({
|
||||||
id: t.id, abha_number: t.abha_number ?? '', abha_address: t.abha_address ?? '',
|
id: t.id, abha_number: t.abha_number ?? '', abha_address: t.abha_address ?? '',
|
||||||
aadhaar_number: t.aadhaar_number ?? t.aadhar_number ?? t.udai ?? '',
|
aadhaar_number: t.aadhaar_number ?? t.aadhar_number ?? t.udai ?? '',
|
||||||
patient_name: t.patient_name ?? '', phone: t.phone ?? '',
|
patient_name: t.patient_name ?? '', phone: t.phone ?? '',
|
||||||
gender: t.gender ?? '', dob: t.dob ?? ''
|
gender: t.gender ?? '', dob: t.dob ?? ''
|
||||||
}).replace(/'/g, ''');
|
});
|
||||||
actions += `<button class="btn btn-xs btn-sm btn-primary" onclick="abdmQRegister('${pl}')">Register OPD</button>`;
|
actions += `<button class="btn btn-xs btn-sm btn-primary" onclick="abdmQRegister('${pl}')">Register OPD</button>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -301,8 +307,8 @@
|
||||||
window.abdmQComplete = id => setStatus(id, 'COMPLETED');
|
window.abdmQComplete = id => setStatus(id, 'COMPLETED');
|
||||||
window.abdmQCancel = id => { if (confirm('Cancel token #' + id + '?')) setStatus(id, 'CANCELLED'); };
|
window.abdmQCancel = id => { if (confirm('Cancel token #' + id + '?')) setStatus(id, 'CANCELLED'); };
|
||||||
|
|
||||||
window.abdmQRegister = function (payloadJson) {
|
window.abdmQRegister = function (payloadEncoded) {
|
||||||
const t = JSON.parse(payloadJson);
|
const t = decodePayload(payloadEncoded);
|
||||||
const body = document.getElementById('abdmProcessTokenBody');
|
const body = document.getElementById('abdmProcessTokenBody');
|
||||||
body.innerHTML = `
|
body.innerHTML = `
|
||||||
<p class="mb-2 small">Processing ABHA Scan token for:</p>
|
<p class="mb-2 small">Processing ABHA Scan token for:</p>
|
||||||
|
|
@ -341,7 +347,7 @@
|
||||||
<div class="fw-bold">${esc(m.p_code || 'UHID N/A')} - ${esc(m.p_fname || 'Unnamed')}</div>
|
<div class="fw-bold">${esc(m.p_code || 'UHID N/A')} - ${esc(m.p_fname || 'Unnamed')}</div>
|
||||||
<div class="text-muted">Phone: ${esc(m.mphone1 || '—')} | ABHA: ${esc(m.patient_abha || '—')} | Aadhaar: ${esc(m.patient_aadhaar || '—')}</div>
|
<div class="text-muted">Phone: ${esc(m.mphone1 || '—')} | ABHA: ${esc(m.patient_abha || '—')} | Aadhaar: ${esc(m.patient_aadhaar || '—')}</div>
|
||||||
<div class="text-warning">Matched by: ${esc(reasons || 'Data match')}</div>
|
<div class="text-warning">Matched by: ${esc(reasons || 'Data match')}</div>
|
||||||
<button class="btn btn-sm btn-outline-primary mt-2" onclick="abdmQResolveExisting(${Number(t.id) || 0}, ${Number(m.id) || 0}, '${encodeURIComponent(JSON.stringify(t))}')">Use This Patient</button>
|
<button class="btn btn-sm btn-outline-primary mt-2" onclick="abdmQResolveExisting(${Number(t.id) || 0}, ${Number(m.id) || 0}, '${payloadEncoded}')">Use This Patient</button>
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
}).join('');
|
}).join('');
|
||||||
|
|
@ -351,11 +357,11 @@
|
||||||
Similar patient records found. Confirm existing patient or create a new record.
|
Similar patient records found. Confirm existing patient or create a new record.
|
||||||
</div>
|
</div>
|
||||||
${cards}
|
${cards}
|
||||||
<button class="btn btn-sm btn-success w-100 mt-2" onclick="abdmQCreateNewPatient(${Number(t.id) || 0}, '${encodeURIComponent(JSON.stringify(t))}')">Create New Patient</button>
|
<button class="btn btn-sm btn-success w-100 mt-2" onclick="abdmQCreateNewPatient(${Number(t.id) || 0}, '${payloadEncoded}')">Create New Patient</button>
|
||||||
<a href="${BASE}billing/patient" class="btn btn-sm btn-outline-secondary w-100 mt-2" target="_blank">Open Manual Patient Registration (/billing/patient)</a>
|
<a href="${BASE}billing/patient" class="btn btn-sm btn-outline-secondary w-100 mt-2" target="_blank">Open Manual Patient Registration (/billing/patient)</a>
|
||||||
<button class="btn btn-sm btn-outline-secondary w-100 mt-2" data-bs-dismiss="modal">Close</button>`;
|
<button class="btn btn-sm btn-outline-secondary w-100 mt-2" data-bs-dismiss="modal">Close</button>`;
|
||||||
} else {
|
} else {
|
||||||
abdmQCreateNewPatient(t.id, encodeURIComponent(JSON.stringify(t)), true);
|
abdmQCreateNewPatient(t.id, payloadEncoded, true);
|
||||||
}
|
}
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
body.innerHTML = `<div class="alert alert-danger small">Request error: ${esc(err.message)}</div>
|
body.innerHTML = `<div class="alert alert-danger small">Request error: ${esc(err.message)}</div>
|
||||||
|
|
@ -364,7 +370,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
window.abdmQResolveExisting = function (tokenId, patientId, encodedPayload) {
|
window.abdmQResolveExisting = function (tokenId, patientId, encodedPayload) {
|
||||||
const t = JSON.parse(decodeURIComponent(encodedPayload));
|
const t = decodePayload(encodedPayload);
|
||||||
const body = document.getElementById('abdmProcessTokenBody');
|
const body = document.getElementById('abdmProcessTokenBody');
|
||||||
body.innerHTML = '<p class="text-muted small mb-0">Linking token to selected patient…</p>';
|
body.innerHTML = '<p class="text-muted small mb-0">Linking token to selected patient…</p>';
|
||||||
|
|
||||||
|
|
@ -381,7 +387,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
window.abdmQCreateNewPatient = function (tokenId, encodedPayload, skipConfirm) {
|
window.abdmQCreateNewPatient = function (tokenId, encodedPayload, skipConfirm) {
|
||||||
const t = JSON.parse(decodeURIComponent(encodedPayload));
|
const t = decodePayload(encodedPayload);
|
||||||
const body = document.getElementById('abdmProcessTokenBody');
|
const body = document.getElementById('abdmProcessTokenBody');
|
||||||
if (!skipConfirm && !confirm('Create a new patient record for this token?')) {
|
if (!skipConfirm && !confirm('Create a new patient record for this token?')) {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user