#javascript #plsql #oracle-apex #dashboard
Вопрос:
Я работаю над Oracle Apex v21.1. Я пытаюсь создать небольшую таблицу «панель мониторинга» для администратора.
Пример использования : Когда отделы будут готовы представить свои запасы, они могут нажать кнопку «Проверить запасы», которая затем отобразит информацию о том, что их запасы готовы, на панели управления таблицей администратора. Затем администратор может проверить панель мониторинга, посмотреть, кто закончил, а кто нет. На панели мониторинга будут отображаться названия отделов, дата проверки, состояние запасов (Готово / Не готово) в двух разных цветах (зеленый = готово / красный = не готово). Если инвентарь не готов, в столбце #ССЫЛКА появляется значок электронной почты, который дает администратору возможность отправить электронное письмо в отдел. Если он готов, отображается простая «проверка».
Вот что у меня уже есть и что я могу сделать :
- Кнопка проверить работает, отделы могут изменить состояние своих запасов, нажав на нее, вот код :
UPDATE inv_tb_dashboard SET etat_dashboard = 1, date_dashboard = SYSDATE WHERE fk_service_dashboard IN (SELECT pk_service FROM inv_tb_service WHERE UPPER(code_service) = v('APP_USER'));
- Я могу динамически изменять цвет строки таблицы на основе значения состояния (0 для false, 1 для true) вот код JS :
$(document).ready(function() {
$("td:nth-child(3)").each(function() {
if ($(this).text() === "Non validé") {
$(this).parent().children().css({'background-color': '#d88882'});
}
else if($(this).text() === "Validé"){
$(this).parent().children().css({'background-color': 'lightgreen'});
}
});
});
- Я могу изменить значки, но вот та часть, которая мне не нравится и которую я хочу улучшить и сделать чище. На самом деле в моей таблице есть
icon_dashboard
столбец, в этом столбце отображаются два значка, о которых я упоминал выше. У меня есть динамическое действие при загрузке страницы, которое выполняет этот код :
UPDATE inv_tb_dashboard
SET
icone_dashboard =
'<a href="mailto:'||email_dashboard||'?Subject=RAPPEL - Inventaire communal"><span aria-label="Mail"><span class="fa fa-envelope-o" aria-hidden="true" title="Mail"></span></span></a>'
WHERE etat_dashboard = 0;
UPDATE inv_tb_dashboard
SET
icone_dashboard =
'<span aria-label="Mail"><span class="fa fa-check-circle-o" aria-hidden="true" title="Mail"></span></span>'
WHERE etat_dashboard = 1;
ДА. Как вы можете видеть, я вставляю HTML-теги в столбец в статическом тексте, в зависимости от значения etat_dashboard
которого указано выше (0 false / 1 true). Это действительно не самый чистый способ сделать это, и я хотел бы, чтобы что-то работало лучше.
Вместо этого я хотел бы знать, можно ли динамически изменять значение столбца #ССЫЛКА# с помощью выражения JavaScript или jQuery и устанавливать значки, которые я сделал на своем DA при загрузке страницы ? Это могло бы позволить мне избавиться от icon_dashboard
колонки.
Не стесняйтесь задавать вопросы для получения более подробной информации.
Заранее спасибо,
Томас
Ответ №1:
Вместо того, чтобы иметь столбец «icon_dashboard» в вашей таблице и обновлять его значение до необходимого значения, вы могли бы добавить CASE
оператор в свой выбор. Таким образом, динамическое действие для обновления таблицы не требуется. Выбрать было бы что-то вроде:
SELECT
<standard_columns>,
CASE
WHEN etat_dashboard = 0 THEN '<a href="mailto:'||email_dashboard||'?Subject=RAPPEL - Inventaire communal"><span aria-label="Mail"><span class="fa fa-envelope-o" aria-hidden="true" title="Mail"></span></span></a>'
WHEN etat_dashboard = 1 THEN '<span aria-label="Mail"><span class="fa fa-check-circle-o" aria-hidden="true" title="Mail"></span></span>'
END as icone_dashboard
FROM inv_tb_dashboard
Это не удаляет html-код из запроса, но значительно упрощает процесс. В конце концов, вы должны спросить себя — что имеет наименьшее обслуживание в будущем, добавление одной строки в запрос или пользовательское действие javascript.