]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Перенос стилей и скриптов
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 21 Nov 2025 15:04:46 +0000 (18:04 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 21 Nov 2025 15:04:46 +0000 (18:04 +0300)
erp24/views/grade/admin-update.php
erp24/views/grade/update.php
erp24/web/css/grade/admin-update.css [new file with mode: 0644]
erp24/web/css/grade/update.css [new file with mode: 0644]
erp24/web/js/grade/admin-update.js [new file with mode: 0644]

index 77999557ef74d8806145f7ff1b7d74e06b90d5f8..46568bc88b5040004fa1656b01b16c388dfd78b1 100644 (file)
@@ -6,10 +6,12 @@ use dosamigos\datetimepicker\DateTimePicker;
 use yii\widgets\ActiveForm;
 use yii\helpers\Html;
 use yii\helpers\ArrayHelper;
+use yii\web\View;
 use yii_app\helpers\PrintBlockHelper;
 use yii_app\records\Admin;
 use yii_app\records\AdminGroup;
 use yii_app\records\Products1c;
+use yii_app\records\EmployeePosition;
 use yii_app\services\FileService;
 
 /** @var Admin $model */
@@ -18,6 +20,38 @@ use yii_app\services\FileService;
 /** @var array $cityStores */
 /** @var array $adminHistoryCategories */
 /** @var array $companies */
+/** @var EmployeePosition[] $positions */
+
+// Определяем специальные группы с parent_id = 50 (нужно для JS)
+$specialGroups = [
+    AdminGroup::GROUP_FLORIST_DAY,      // 30
+    AdminGroup::GROUP_FLORIST_NIGHT,    // 35
+    AdminGroup::GROUP_FLORIST_SUPPORT_DAY, // 40
+    AdminGroup::GROUP_WORKERS,          // 45
+    AdminGroup::GROUP_ADMINISTRATORS,   // 50
+    AdminGroup::GROUP_FLORIST_SUPPORT_NIGHT, // 72
+    AdminGroup::GROUP_FLORIST,          // 89
+];
+
+// Ищем группу "Работники магазинов" по имени
+$workersGroup = AdminGroup::find()->where(['name' => AdminGroup::GROUP_STORE_WORKERS_NAME])->one();
+if ($workersGroup) {
+    $specialGroups[] = $workersGroup->id;
+}
+
+// Подключаем CSS и JS файлы
+$this->registerCssFile('/css/grade/admin-update.css');
+$this->registerJsFile('/js/grade/admin-update.js', ['position' => View::POS_END, 'depends' => [\yii\web\JqueryAsset::class]]);
+
+// Передаем PHP переменные в JavaScript
+$this->registerJs("
+    window.gradeAdminUpdateData = {
+        specialGroups: " . json_encode($specialGroups, JSON_NUMERIC_CHECK) . ",
+        adminGroups: " . json_encode($adminGroups ?? [], JSON_UNESCAPED_UNICODE) . ",
+        positionsData: " . json_encode(ArrayHelper::map($positions ?? [], 'id', 'name'), JSON_UNESCAPED_UNICODE) . ",
+        groupsData: " . json_encode($adminGroups ?? [], JSON_UNESCAPED_UNICODE) . "
+    };
+", View::POS_HEAD);
 
 ?>
 
@@ -50,27 +84,7 @@ use yii_app\services\FileService;
     ?>
 
     <?php
-    // Определяем специальные группы с parent_id = 50
-    $specialGroups = [
-        AdminGroup::GROUP_FLORIST_DAY,      // 30
-        AdminGroup::GROUP_FLORIST_NIGHT,    // 35
-        AdminGroup::GROUP_FLORIST_SUPPORT_DAY, // 40
-        AdminGroup::GROUP_WORKERS,          // 45
-        AdminGroup::GROUP_ADMINISTRATORS,   // 50
-        AdminGroup::GROUP_FLORIST_SUPPORT_NIGHT, // 72
-        AdminGroup::GROUP_FLORIST,          // 89
-    ];
-
-    // Ищем группу "Работники магазинов" по имени
-    $workersGroup = AdminGroup::find()->where(['name' => AdminGroup::GROUP_STORE_WORKERS_NAME])->one();
-    if ($workersGroup) {
-        $specialGroups[] = $workersGroup->id;
-    }
-
     $isSpecialGroup = in_array((int)$model->group_id, $specialGroups);
-    
-    // Преобразуем в JSON для использования в JavaScript
-    $specialGroupsJson = json_encode($specialGroups, JSON_NUMERIC_CHECK);
     ?>
 
     <div id="positionFieldSpecial" style="display: <?= $isSpecialGroup ? 'block' : 'none' ?>;">
@@ -92,9 +106,8 @@ use yii_app\services\FileService;
         ?>
         <div id="shiftField" style="display: <?= $shiftValue !== null ? 'block' : 'none' ?>;">
             <?php PrintBlockHelper::printBlock('Смена', Html::textInput('shift_display', $shiftValue ?? '', [
-                'class' => 'form-control',
+                'class' => 'form-control shift-display-readonly',
                 'readonly' => true,
-                'style' => 'background-color: #e9ecef; cursor: not-allowed;',
                 'id' => 'shift-display-input'
             ])) ?>
         </div>
@@ -276,157 +289,4 @@ use yii_app\services\FileService;
     <?php ActiveForm::end() ?>
 </div>
 
-</div>
-
-<style>
-    .hidden {
-        display: none;
-    }
-    .has-error select {
-        border-color: #dc3545 !important;
-        box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25) !important;
-    }
-</style>
-
-<script>
-    function toggleView(e) {
-        $(e.target).parent().find('.toggleableVisibility').toggleClass('hidden');
-    }
-
-    function changeWorkRateVisibility(t) {
-        if (t.value == 50) {
-            $('#workRate').show();
-        } else {
-            $('#workRate').hide();
-        }
-
-        // Переключаем тип поля должности
-        changePositionFieldVisibility(t.value);
-    }
-
-    function changePositionFieldVisibility(groupId) {
-        var specialGroups = <?= $specialGroupsJson ?>; // Получаем специальные группы из PHP
-
-        var isSpecialGroup = specialGroups.includes(parseInt(groupId));
-
-        if (isSpecialGroup) {
-            $('#positionFieldSpecial').show();
-            $('#positionFieldRegular').hide();
-        } else {
-            $('#positionFieldSpecial').hide();
-            $('#positionFieldRegular').show();
-            // Очищаем поле employee_position_id для не-специальных групп
-            $('select[name="Admin[employee_position_id]"]').val('');
-        }
-        
-        // Обновляем поле Смена на основе выбранной группы
-        updateShiftField(groupId);
-    }
-    
-    /**
-     * Обновляет поле Смена на основе названия группы
-     */
-    function updateShiftField(groupId) {
-        var groupsData = <?= json_encode($adminGroups, JSON_UNESCAPED_UNICODE) ?>;
-        var groupName = groupsData[groupId] || '';
-        var shiftField = $('#shiftField');
-        var shiftInput = $('#shift-display-input');
-        
-        if (!groupName) {
-            shiftField.hide();
-            return;
-        }
-        
-        // Проверяем наличие "день" или "ночь" в названии группы
-        var groupNameLower = groupName.toLowerCase();
-        var shiftValue = null;
-        
-        if (groupNameLower.indexOf('день') !== -1) {
-            shiftValue = 'День';
-        } else if (groupNameLower.indexOf('ночь') !== -1) {
-            shiftValue = 'Ночь';
-        }
-        
-        if (shiftValue !== null) {
-            shiftInput.val(shiftValue);
-            shiftField.show();
-        } else {
-            shiftField.hide();
-        }
-    }
-
-    // Данные для проверки соответствия грейда и группы
-    var positionsData = <?= json_encode(ArrayHelper::map($positions, 'id', 'name'), JSON_UNESCAPED_UNICODE) ?>;
-    var groupsData = <?= json_encode($adminGroups, JSON_UNESCAPED_UNICODE) ?>;
-    
-    /**
-     * Проверка соответствия выбранного грейда и группы
-     */
-    function checkGradeGroupMatch() {
-        var positionSelect = $('#employee-position-select');
-        var groupSelect = $('#group-id-select');
-        var alertDiv = $('#grade-group-mismatch-alert');
-        
-        // Проверяем только если выбраны оба значения
-        if (!positionSelect.length || !groupSelect.length || !positionSelect.val() || !groupSelect.val()) {
-            alertDiv.hide();
-            groupSelect.closest('.form-group').removeClass('has-error');
-            return;
-        }
-        
-        var selectedPositionId = positionSelect.val();
-        var selectedGroupId = groupSelect.val();
-        var positionName = positionsData[selectedPositionId] || '';
-        var groupName = groupsData[selectedGroupId] || '';
-        
-        if (!positionName || !groupName) {
-            alertDiv.hide();
-            groupSelect.closest('.form-group').removeClass('has-error');
-            return;
-        }
-        
-        // Нормализуем названия для сравнения (убираем "день", "ночь" и приводим к нижнему регистру)
-        var normalizedPositionName = positionName.toLowerCase().replace(/\s*(день|ночь)\s*/gi, '').trim();
-        var normalizedGroupName = groupName.toLowerCase().replace(/\s*(день|ночь)\s*/gi, '').trim();
-        
-        // Проверяем частичное совпадение
-        var hasMatch = false;
-        if (normalizedGroupName.indexOf(normalizedPositionName) !== -1 || 
-            normalizedPositionName.indexOf(normalizedGroupName) !== -1) {
-            hasMatch = true;
-        }
-        
-        if (!hasMatch) {
-            // Несовпадение - показываем предупреждение и выделяем поле группы
-            alertDiv.show();
-            groupSelect.closest('.form-group').addClass('has-error');
-            groupSelect.css('border-color', '#dc3545');
-            groupSelect.css('box-shadow', '0 0 0 0.2rem rgba(220, 53, 69, 0.25)');
-        } else {
-            // Совпадение - скрываем предупреждение и убираем выделение
-            alertDiv.hide();
-            groupSelect.closest('.form-group').removeClass('has-error');
-            groupSelect.css('border-color', '');
-            groupSelect.css('box-shadow', '');
-        }
-    }
-
-    // Инициализируем поле при загрузке страницы
-    $(document).ready(function() {
-        var initialGroupId = $('select[name="Admin[group_id]"]').val();
-        changePositionFieldVisibility(initialGroupId);
-
-        // Для не-специальных групп очищаем employee_position_id при загрузке
-        var specialGroups = <?= $specialGroupsJson ?>;
-        var isSpecialGroup = specialGroups.includes(parseInt(initialGroupId));
-        if (!isSpecialGroup) {
-            $('select[name="Admin[employee_position_id]"]').val('');
-        }
-        
-        // Обновляем поле Смена при загрузке страницы
-        updateShiftField(initialGroupId);
-        
-        // Проверяем соответствие при загрузке страницы
-        checkGradeGroupMatch();
-    });
-</script>
\ No newline at end of file
+</div>
\ No newline at end of file
index 150d13e3dedd7918c3a061ed3ed31773310f8381..9b9749787900ba8f81cef59799ebb55a014930d9 100755 (executable)
@@ -3,11 +3,15 @@
 use yii\widgets\ActiveForm;
 use yii\helpers\Html;
 use yii\helpers\ArrayHelper;
+use yii\web\View;
 
 use \yii\widgets\Pjax;
 
 use dosamigos\datetimepicker\DateTimePicker;
 
+// Подключаем CSS файл
+$this->registerCssFile('/css/grade/update.css');
+
 /** @var \yii_app\records\Admin $admin */
 /** @var \yii\base\DynamicModel $modelPosition */
 /** @var \yii_app\records\EmployeePosition[] $positions */
@@ -101,7 +105,7 @@ use dosamigos\datetimepicker\DateTimePicker;
                     <br><strong>Текущая группа:</strong> <?= Html::encode($admin->adminGroup->name) ?>
                 <?php endif; ?>
             <?php else: ?>
-                <strong style="color: #dc3545;">⚠️ Грейд не установлен</strong>
+                <strong class="grade-error-text">⚠️ Грейд не установлен</strong>
                 <br><small>Пожалуйста, выберите грейд из списка ниже</small>
             <?php endif; ?>
         </div>
@@ -151,9 +155,8 @@ use dosamigos\datetimepicker\DateTimePicker;
         <div class="col-4">
             <label class="font-weight-bold">Смена:</label>
             <?= Html::textInput('shift_display', $shiftValue, [
-                'class' => 'form-control',
-                'readonly' => true,
-                'style' => 'background-color: #e9ecef; cursor: not-allowed;'
+                'class' => 'form-control shift-display-readonly',
+                'readonly' => true
             ]) ?>
         </div>
     </div>
diff --git a/erp24/web/css/grade/admin-update.css b/erp24/web/css/grade/admin-update.css
new file mode 100644 (file)
index 0000000..407125c
--- /dev/null
@@ -0,0 +1,14 @@
+.hidden {
+    display: none;
+}
+
+.has-error select {
+    border-color: #dc3545 !important;
+    box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25) !important;
+}
+
+.shift-display-readonly {
+    background-color: #e9ecef;
+    cursor: not-allowed;
+}
+
diff --git a/erp24/web/css/grade/update.css b/erp24/web/css/grade/update.css
new file mode 100644 (file)
index 0000000..2f9301d
--- /dev/null
@@ -0,0 +1,11 @@
+/* Стили для страницы назначения грейда (grade/update) */
+
+.shift-display-readonly {
+    background-color: #e9ecef;
+    cursor: not-allowed;
+}
+
+.grade-error-text {
+    color: #dc3545;
+}
+
diff --git a/erp24/web/js/grade/admin-update.js b/erp24/web/js/grade/admin-update.js
new file mode 100644 (file)
index 0000000..b56ab0a
--- /dev/null
@@ -0,0 +1,141 @@
+/**
+ * JavaScript для страницы редактирования администратора (grade/admin-update)
+ */
+
+function toggleView(e) {
+    $(e.target).parent().find('.toggleableVisibility').toggleClass('hidden');
+}
+
+function changeWorkRateVisibility(t) {
+    if (t.value == 50) {
+        $('#workRate').show();
+    } else {
+        $('#workRate').hide();
+    }
+
+    // Переключаем тип поля должности
+    changePositionFieldVisibility(t.value);
+}
+
+function changePositionFieldVisibility(groupId) {
+    var specialGroups = window.gradeAdminUpdateData.specialGroups; // Получаем специальные группы из PHP
+
+    var isSpecialGroup = specialGroups.includes(parseInt(groupId));
+
+    if (isSpecialGroup) {
+        $('#positionFieldSpecial').show();
+        $('#positionFieldRegular').hide();
+    } else {
+        $('#positionFieldSpecial').hide();
+        $('#positionFieldRegular').show();
+        // Очищаем поле employee_position_id для не-специальных групп
+        $('select[name="Admin[employee_position_id]"]').val('');
+    }
+    
+    // Обновляем поле Смена на основе выбранной группы
+    updateShiftField(groupId);
+}
+
+/**
+ * Обновляет поле Смена на основе названия группы
+ */
+function updateShiftField(groupId) {
+    var groupsData = window.gradeAdminUpdateData.adminGroups;
+    var groupName = groupsData[groupId] || '';
+    var shiftField = $('#shiftField');
+    var shiftInput = $('#shift-display-input');
+    
+    if (!groupName) {
+        shiftField.hide();
+        return;
+    }
+    
+    // Проверяем наличие "день" или "ночь" в названии группы
+    var groupNameLower = groupName.toLowerCase();
+    var shiftValue = null;
+    
+    if (groupNameLower.indexOf('день') !== -1) {
+        shiftValue = 'День';
+    } else if (groupNameLower.indexOf('ночь') !== -1) {
+        shiftValue = 'Ночь';
+    }
+    
+    if (shiftValue !== null) {
+        shiftInput.val(shiftValue);
+        shiftField.show();
+    } else {
+        shiftField.hide();
+    }
+}
+
+/**
+ * Проверка соответствия выбранного грейда и группы
+ */
+function checkGradeGroupMatch() {
+    var positionSelect = $('#employee-position-select');
+    var groupSelect = $('#group-id-select');
+    var alertDiv = $('#grade-group-mismatch-alert');
+    
+    // Проверяем только если выбраны оба значения
+    if (!positionSelect.length || !groupSelect.length || !positionSelect.val() || !groupSelect.val()) {
+        alertDiv.hide();
+        groupSelect.closest('.form-group').removeClass('has-error');
+        return;
+    }
+    
+    var selectedPositionId = positionSelect.val();
+    var selectedGroupId = groupSelect.val();
+    var positionName = window.gradeAdminUpdateData.positionsData[selectedPositionId] || '';
+    var groupName = window.gradeAdminUpdateData.groupsData[selectedGroupId] || '';
+    
+    if (!positionName || !groupName) {
+        alertDiv.hide();
+        groupSelect.closest('.form-group').removeClass('has-error');
+        return;
+    }
+    
+    // Нормализуем названия для сравнения (убираем "день", "ночь" и приводим к нижнему регистру)
+    var normalizedPositionName = positionName.toLowerCase().replace(/\s*(день|ночь)\s*/gi, '').trim();
+    var normalizedGroupName = groupName.toLowerCase().replace(/\s*(день|ночь)\s*/gi, '').trim();
+    
+    // Проверяем частичное совпадение
+    var hasMatch = false;
+    if (normalizedGroupName.indexOf(normalizedPositionName) !== -1 || 
+        normalizedPositionName.indexOf(normalizedGroupName) !== -1) {
+        hasMatch = true;
+    }
+    
+    if (!hasMatch) {
+        // Несовпадение - показываем предупреждение и выделяем поле группы
+        alertDiv.show();
+        groupSelect.closest('.form-group').addClass('has-error');
+        groupSelect.css('border-color', '#dc3545');
+        groupSelect.css('box-shadow', '0 0 0 0.2rem rgba(220, 53, 69, 0.25)');
+    } else {
+        // Совпадение - скрываем предупреждение и убираем выделение
+        alertDiv.hide();
+        groupSelect.closest('.form-group').removeClass('has-error');
+        groupSelect.css('border-color', '');
+        groupSelect.css('box-shadow', '');
+    }
+}
+
+// Инициализируем поле при загрузке страницы
+$(document).ready(function() {
+    var initialGroupId = $('select[name="Admin[group_id]"]').val();
+    changePositionFieldVisibility(initialGroupId);
+
+    // Для не-специальных групп очищаем employee_position_id при загрузке
+    var specialGroups = window.gradeAdminUpdateData.specialGroups;
+    var isSpecialGroup = specialGroups.includes(parseInt(initialGroupId));
+    if (!isSpecialGroup) {
+        $('select[name="Admin[employee_position_id]"]').val('');
+    }
+    
+    // Обновляем поле Смена при загрузке страницы
+    updateShiftField(initialGroupId);
+    
+    // Проверяем соответствие при загрузке страницы
+    checkGradeGroupMatch();
+});
+