]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Форма редактирования на главной странице
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 15 Jan 2025 14:42:49 +0000 (17:42 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 15 Jan 2025 14:42:49 +0000 (17:42 +0300)
erp24/controllers/StoresTypeListController.php
erp24/views/stores-type-list/index.php

index aaf8a04d04824b2f97def19f395aa4ed59ac08b7..923faec6ccb63e53290622609a69b9aa5f07a596 100644 (file)
@@ -40,15 +40,36 @@ class StoresTypeListController extends Controller
     public function actionIndex()
     {
         $model = new StoresTypeList();
-        if ($this->request->isPost) {
-            if ($model->load($this->request->post()) && $model->validate()) {
+        $editId = $this->request->post('editId'); // Получаем ID для редактирования
+
+        if ($model->load($this->request->post())) {
+            if ($editId) {
+                $existingModel = StoresTypeList::findOne($editId);
+                if ($existingModel) {
+                    $existingModel->type_name = $model->type_name;
+                    $existingModel->type_alias = strtolower(preg_replace('/[\s-]+/', '_', $model->type_name));
+                    if ($existingModel->save()) {
+                        Yii::$app->session->setFlash('success', 'Запись успешно обновлена.');
+                        return $this->redirect(['index']);
+                    }
+                }
+            } else {
                 $model->type_alias = strtolower(preg_replace('/[\s-]+/', '_', $model->type_name));
-
                 if ($model->save()) {
-                    Yii::$app->session->setFlash('success', 'Тип Ð¼Ð°Ð³Ð°Ð·Ð¸Ð½Ð° Ñ\83Ñ\81пеÑ\88но Ñ\81оÑ\85Ñ\80анен.');
+                    Yii::$app->session->setFlash('success', 'Ð\9dоваÑ\8f Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c Ñ\83Ñ\81пеÑ\88но Ñ\81оздана.');
                     return $this->redirect(['index']);
                 }
             }
+            Yii::$app->session->setFlash('error', 'Ошибка сохранения.');
+        }
+
+        $deleteId = $this->request->post('deleteId');
+        if ($deleteId) {
+            $deleteModel = StoresTypeList::findOne($deleteId);
+            if ($deleteModel && $deleteModel->delete()) {
+                Yii::$app->session->setFlash('success', 'Запись успешно удалена.');
+                return $this->redirect(['index']);
+            }
         }
 
         $dataProvider = new ActiveDataProvider([
@@ -61,6 +82,15 @@ class StoresTypeListController extends Controller
         ]);
     }
 
+    public function actionGetRecord($id)
+    {
+        $model = StoresTypeList::findOne($id);
+        if ($model) {
+            return $this->asJson(['type_name' => $model->type_name]);
+        }
+        return $this->asJson(['error' => 'Запись не найдена']);
+    }
+
     /**
      * Displays a single StoresTypeList model.
      * @param int $id ID
index a7de5094165e0895bec70cfe1261c94ad90f8301..7d689fde2f6db73d036c1a38a2a88cd485099131 100644 (file)
@@ -2,7 +2,6 @@
 
 use yii\widgets\ActiveForm;
 use yii\widgets\Pjax;
-use yii_app\records\StoresTypeList;
 use yii\helpers\Html;
 use yii\helpers\Url;
 use yii\grid\ActionColumn;
@@ -32,17 +31,32 @@ $this->params['breadcrumbs'][] = $this->title;
         </div>
     <?php endif; ?>
     <div class="form-container mb-4 col-4">
-        <?php $form = ActiveForm::begin([
-            'options' => ['data-pjax' => true],
-        ]); ?>
+        <?php $form = ActiveForm::begin(['options' => ['data-pjax' => true]]); ?>
 
-        <?= $form->field($model, 'type_name')->textInput(['maxlength' => true])->label('Название типа') ?>
+        <?= $form->field($model, 'type_name')->textInput(['id' => 'type-name-field', 'maxlength' => true])->label('Название') ?>
 
-        <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
+        <?= Html::hiddenInput('editId', '', ['id' => 'edit-id']) ?>
+        <?= Html::hiddenInput('deleteId', '', ['id' => 'delete-id']) ?>
+
+        <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success', 'id' => 'save-btn']) ?>
+        <?= Html::button('Отмена', ['class' => 'btn btn-secondary', 'id' => 'cancel-btn']) ?>
+        <div class="list-container my-4">
+            <ul id="record-list" class="list-group">
+                <?php foreach ($dataProvider->getModels() as $item): ?>
+                    <li class="list-group-item" data-id="<?= $item->id ?>">
+                        <?= Html::encode($item->type_name) ?>
+                    </li>
+                <?php endforeach; ?>
+            </ul>
+        </div>
+        <?= Html::button('Удалить', ['class' => 'btn btn-danger d-none', 'id' => 'delete-btn']) ?>
+        <?= Html::button('Редактировать', ['class' => 'btn btn-primary d-none', 'id' => 'edit-btn']) ?>
 
         <?php ActiveForm::end(); ?>
     </div>
 
+
+
     <?= GridView::widget([
         'dataProvider' => $dataProvider,
         'columns' => [
@@ -64,3 +78,70 @@ $this->params['breadcrumbs'][] = $this->title;
 
     <?php Pjax::end(); ?>
 </div>
+
+<script>
+    document.addEventListener('DOMContentLoaded', function () {
+        const list = document.getElementById('record-list');
+        const typeNameField = document.getElementById('type-name-field');
+        const editIdInput = document.getElementById('edit-id');
+        const deleteIdInput = document.getElementById('delete-id');
+        const deleteBtn = document.getElementById('delete-btn');
+        const cancelBtn = document.getElementById('cancel-btn');
+        const saveBtn = document.getElementById('save-btn');
+        const editBtn = document.getElementById('edit-btn');
+
+        list.addEventListener('click', function (event) {
+            const target = event.target;
+            if (target.classList.contains('list-group-item')) {
+                const id = target.dataset.id;
+
+                fetch('<?= Url::to(['get-record']) ?>?id=' + id)
+                    .then(response => response.json())
+                    .then(data => {
+                        if (data.error) {
+                            alert(data.error);
+                        } else {
+                            typeNameField.value = data.type_name;
+                            editIdInput.value = id;
+                            deleteIdInput.value = '';
+
+                            document.querySelectorAll('.list-group-item').forEach(item => {
+                                item.classList.remove('active');
+                            });
+                            target.classList.add('active');
+                            deleteBtn.classList.remove('d-none');
+                            editBtn.classList.remove('d-none');
+                        }
+                    });
+            }
+        });
+
+        editBtn.addEventListener('click', function () {
+            const id = editIdInput.value;
+            if (id) {
+                saveBtn.click();
+            } else {
+                alert('Выберите запись для редактирования.');
+            }
+        });
+
+        deleteBtn.addEventListener('click', function () {
+            const id = editIdInput.value;
+            if (id && confirm('Вы уверены, что хотите удалить запись?')) {
+                deleteIdInput.value = id;
+                saveBtn.click();
+            }
+        });
+
+        cancelBtn.addEventListener('click', function () {
+            typeNameField.value = '';
+            editIdInput.value = '';
+            deleteIdInput.value = '';
+            deleteBtn.classList.add('d-none');
+            editBtn.classList.add('d-none');
+            document.querySelectorAll('.list-group-item').forEach(item => {
+                item.classList.remove('active');
+            });
+        });
+    });
+</script>
\ No newline at end of file