feat: oma profiili -toiminto + placeholder-siivous + poista fix-skriptit
- Lisätty "Oma profiili" -nappi headeriin (⚙ + nimen klikkaus) - Profiili-modaali: muokkaa nimi, sähköposti, salasana, allekirjoitukset - Uusi profile_update API-endpoint (vaatii vain kirjautumisen) - check_auth palauttaa nyt myös email-kentän - Siivottu kaikki yrityskohtaiset placeholder-tekstit geneerisiksi (cuitunet.fi → yritys.fi, Kauppakatu → Esimerkkikatu, jne.) - Poistettu väliaikaiset fix_role.php ja fix_saatavuus.php Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
80
script.js
80
script.js
@@ -594,9 +594,9 @@ function createLiittymaRow(data = {}, index = 0) {
|
||||
<button type="button" class="btn-remove-row" title="Poista liittymä">✕</button>
|
||||
</div>
|
||||
<div class="form-grid form-grid-liittyma">
|
||||
<div class="form-group"><label>Osoite</label><input type="text" class="l-asennusosoite" value="${esc(data.asennusosoite || '')}" placeholder="esim. Kauppakatu 5"></div>
|
||||
<div class="form-group"><label>Postinumero</label><input type="text" class="l-postinumero" value="${esc(data.postinumero || '')}" placeholder="20100"></div>
|
||||
<div class="form-group"><label>Kaupunki</label><input type="text" class="l-kaupunki" value="${esc(data.kaupunki || '')}" placeholder="Turku"></div>
|
||||
<div class="form-group"><label>Osoite</label><input type="text" class="l-asennusosoite" value="${esc(data.asennusosoite || '')}" placeholder="esim. Esimerkkikatu 1"></div>
|
||||
<div class="form-group"><label>Postinumero</label><input type="text" class="l-postinumero" value="${esc(data.postinumero || '')}" placeholder="00100"></div>
|
||||
<div class="form-group"><label>Kaupunki</label><input type="text" class="l-kaupunki" value="${esc(data.kaupunki || '')}" placeholder="Helsinki"></div>
|
||||
<div class="form-group"><label>Nopeus</label><input type="text" class="l-liittymanopeus" value="${esc(data.liittymanopeus || '')}" placeholder="esim. 100/100"></div>
|
||||
<div class="form-group"><label>Hinta €/kk</label><input type="number" class="l-hinta" step="0.01" min="0" value="${data.hinta || ''}"></div>
|
||||
<div class="form-group"><label>Sopimuskausi</label><select class="l-sopimuskausi">
|
||||
@@ -1114,6 +1114,76 @@ document.getElementById('user-form').addEventListener('submit', async (e) => {
|
||||
} catch (e) { alert(e.message); }
|
||||
});
|
||||
|
||||
// ==================== OMA PROFIILI ====================
|
||||
|
||||
const profileModal = document.getElementById('profile-modal');
|
||||
document.getElementById('btn-profile').addEventListener('click', openProfileModal);
|
||||
document.getElementById('user-info').addEventListener('click', openProfileModal);
|
||||
document.getElementById('profile-modal-close').addEventListener('click', () => profileModal.style.display = 'none');
|
||||
document.getElementById('profile-form-cancel').addEventListener('click', () => profileModal.style.display = 'none');
|
||||
|
||||
async function openProfileModal() {
|
||||
// Hae tuoreet tiedot
|
||||
const auth = await apiCall('check_auth');
|
||||
if (!auth.authenticated) return;
|
||||
document.getElementById('profile-username').value = auth.username;
|
||||
document.getElementById('profile-nimi').value = auth.nimi || '';
|
||||
document.getElementById('profile-email').value = auth.email || '';
|
||||
document.getElementById('profile-password').value = '';
|
||||
// Allekirjoitukset
|
||||
const sigSection = document.getElementById('profile-signatures-section');
|
||||
const sigList = document.getElementById('profile-signatures-list');
|
||||
const userSigs = auth.signatures || {};
|
||||
try {
|
||||
const mailboxes = await apiCall('all_mailboxes');
|
||||
if (mailboxes.length === 0) {
|
||||
sigSection.style.display = 'none';
|
||||
} else {
|
||||
sigSection.style.display = '';
|
||||
sigList.innerHTML = mailboxes.map(mb =>
|
||||
`<div style="margin-bottom:0.75rem;">
|
||||
<label style="font-weight:600;font-size:0.85rem;color:#333;">${esc(mb.company_nimi)} — ${esc(mb.nimi)}</label>
|
||||
<textarea class="profile-sig-textarea" data-mailbox-id="${mb.id}" rows="3"
|
||||
style="width:100%;margin-top:0.25rem;padding:8px;border:1px solid #ddd;border-radius:6px;font-size:0.85rem;font-family:inherit;resize:vertical;"
|
||||
placeholder="esim.\nNimi\nYritys Oy\ninfo@yritys.fi">${esc(userSigs[mb.id] || '')}</textarea>
|
||||
</div>`
|
||||
).join('');
|
||||
}
|
||||
} catch {
|
||||
sigSection.style.display = 'none';
|
||||
}
|
||||
profileModal.style.display = 'flex';
|
||||
}
|
||||
|
||||
document.getElementById('profile-form').addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
const signatures = {};
|
||||
document.querySelectorAll('.profile-sig-textarea').forEach(ta => {
|
||||
const mbId = ta.dataset.mailboxId;
|
||||
const val = ta.value.trim();
|
||||
if (val) signatures[mbId] = val;
|
||||
});
|
||||
const data = {
|
||||
nimi: document.getElementById('profile-nimi').value,
|
||||
email: document.getElementById('profile-email').value,
|
||||
signatures,
|
||||
};
|
||||
const pw = document.getElementById('profile-password').value;
|
||||
if (pw) data.password = pw;
|
||||
try {
|
||||
await apiCall('profile_update', 'POST', data);
|
||||
// Päivitä UI
|
||||
const auth = await apiCall('check_auth');
|
||||
if (auth.authenticated) {
|
||||
currentUser = { username: auth.username, nimi: auth.nimi, role: auth.role, id: auth.user_id };
|
||||
currentUserSignatures = auth.signatures || {};
|
||||
document.getElementById('user-info').textContent = auth.nimi || auth.username;
|
||||
}
|
||||
profileModal.style.display = 'none';
|
||||
alert('Profiili päivitetty!');
|
||||
} catch (e) { alert(e.message); }
|
||||
});
|
||||
|
||||
// ==================== TICKETS (ASIAKASPALVELU) ====================
|
||||
|
||||
let tickets = [];
|
||||
@@ -1875,7 +1945,7 @@ async function loadSettings() {
|
||||
const apiTitle = document.getElementById('api-company-name');
|
||||
if (apiTitle && currentCompany) apiTitle.textContent = currentCompany.nimi + ' — ';
|
||||
const key = config.api_key || 'AVAIN';
|
||||
document.getElementById('api-example-url').textContent = `api.php?action=saatavuus&key=${key}&osoite=Kauppakatu+5&postinumero=20100&kaupunki=Turku`;
|
||||
document.getElementById('api-example-url').textContent = `api.php?action=saatavuus&key=${key}&osoite=Esimerkkikatu+1&postinumero=00100&kaupunki=Helsinki`;
|
||||
|
||||
// Telegram-asetukset
|
||||
document.getElementById('settings-telegram-token').value = config.telegram_bot_token || '';
|
||||
@@ -1981,7 +2051,7 @@ document.getElementById('btn-generate-key').addEventListener('click', async () =
|
||||
try {
|
||||
const config = await apiCall('generate_api_key', 'POST');
|
||||
document.getElementById('settings-api-key').value = config.api_key || '';
|
||||
document.getElementById('api-example-url').textContent = `api.php?action=saatavuus&key=${config.api_key}&osoite=Kauppakatu+5&postinumero=20100&kaupunki=Turku`;
|
||||
document.getElementById('api-example-url').textContent = `api.php?action=saatavuus&key=${config.api_key}&osoite=Esimerkkikatu+1&postinumero=00100&kaupunki=Helsinki`;
|
||||
} catch (e) { alert(e.message); }
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user