]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-282 Нужно сделать интерфейс настройки магазина
authormarina <m.zozirova@gmail.com>
Tue, 28 Jan 2025 14:42:58 +0000 (17:42 +0300)
committermarina <m.zozirova@gmail.com>
Tue, 28 Jan 2025 14:42:58 +0000 (17:42 +0300)
erp24/composer.json
erp24/controllers/CityStoreParamsController.php
erp24/views/city-store-params/index.php

index 965f092c56797af321ea4e12a1aa3a5c222f5c26..ec2445cc15904742c448d2f728edca1e42877719 100644 (file)
@@ -37,7 +37,8 @@
         "ext-xmlreader": "*",
         "enqueue/amqp-lib": "^0.10.19",
         "vlucas/phpdotenv": "^5.6",
-        "softark/yii2-dual-listbox": "^1.0"
+        "softark/yii2-dual-listbox": "^1.0",
+        "kartik-v/yii2-widget-depdrop": "dev-master"
     },
     "require-dev": {
         "yiisoft/yii2-debug": "~2.1.0",
index 65ae24052c409a1a12ba988a1fccaa29e17dd9a0..9566e32a92aed4f7b0b18c69a0f2e8167bbe1075 100644 (file)
@@ -197,7 +197,7 @@ class CityStoreParamsController extends Controller
 
         return [
             'success' => true,
-            'data' => ArrayHelper::map($stores, 'id', function($store) {
+            'data' => ArrayHelper::map($stores, 'id', function ($store) {
                 return $store->id . ' ' . $store->name;
             }),
         ];
@@ -263,4 +263,35 @@ class CityStoreParamsController extends Controller
             ]
         ];
     }
+
+    public function actionGetAddressData()
+    {
+        $params = Yii::$app->request->post()['depdrop_all_params'] ?? [];
+
+        if (isset($params['region'])) {
+            $cities = StoreCityList::findAll(['parent_id' => $params['region'], 'type' => StoreCityList::TYPE_CITY]);
+            if (!empty($cities)) {
+                $cityList = array_map(fn($city) => ['id' => $city->id, 'name' => $city->name], $cities);
+
+                return json_encode([
+                    'output' => $cityList,
+                    'selected' => $params['address_city'] ?? ''
+                ]);
+            }
+        }
+
+        if (isset($params['city'])) {
+            $districts = StoreCityList::findAll(['parent_id' => $params['city'], 'type' => StoreCityList::TYPE_DISTRICT]);
+            if (!empty($districts)) {
+                $districtList = array_map(fn($district) => ['id' => $district->id, 'name' => $district->name], $districts);
+
+                return json_encode([
+                    'output' => $districtList,
+                    'selected' => $params['address_district'] ?? ''
+                ]);
+            }
+        }
+
+        return json_encode(['output' => [], 'selected' => '']);
+    }
 }
index a65101a82ea5dc11e52749eb97d6b53d599aa4b0..463d8b90673619d46eb5b847ea40136de006939a 100644 (file)
@@ -9,6 +9,7 @@ use yii_app\records\AdminGroup;
 use yii_app\records\CityStore;
 use yii_app\records\StoreCityList;
 use yii_app\records\StoreType;
+use kartik\depdrop\DepDrop;
 
 /* @var $this yii\web\View */
 /* @var $dataProvider yii\data\ActiveDataProvider */
@@ -45,9 +46,9 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
                     'class' => 'd-block mt-2 text-decoration-none',
                     'target' => '_blank'
                 ]); ?>
-
             </div>
         </div>
+
         <div class="col-md-2">
             <div class="card p-2 bg-light shadow-sm">
                 <?= Select2::widget([
@@ -213,10 +214,10 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
                     </div>
                     <div class="col-md-3">
                         <?= Html::label('Регион'); ?>
-                        <?=  Select2::widget([
+                        <?= Select2::widget([
                             'name' => 'CityStoreParams[address_region]',
                             'value' => null,
-                            'data' =>  [],
+                            'data' => ArrayHelper::map(StoreCityList::findAll(['type' => StoreCityList::TYPE_REGION]), 'id', 'name'),
                             'options' => [
                                 'placeholder' => 'Регион',
                                 'class' => 'form-select',
@@ -227,35 +228,41 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
                             ],
                         ]); ?>
                     </div>
+
                     <div class="col-md-3">
                         <?= Html::label('Город'); ?>
-                        <?=  Select2::widget([
+                        <?= DepDrop::widget([
                             'name' => 'CityStoreParams[address_city]',
-                            'value' => null,
-                            'data' => [],
                             'options' => [
+                                'id' => 'city',
                                 'placeholder' => 'Город',
                                 'class' => 'form-select',
-                                'id' => 'city',
                             ],
                             'pluginOptions' => [
-                                'allowClear' => true,
+                                'depends' => ['region'],
+                                'placeholder' => 'Город',
+                                'url' => Url::to(['/city-store-params/get-address-data']),
+                                'params' => ['region'],
+                                'initialize' => true,
                             ],
                         ]); ?>
                     </div>
+
                     <div class="col-md-3">
                         <?= Html::label('Район'); ?>
-                        <?=  Select2::widget([
+                        <?= DepDrop::widget([
                             'name' => 'CityStoreParams[address_district]',
-                            'value' => null,
-                            'data' =>  [],
                             'options' => [
+                                'id' => 'district',
                                 'placeholder' => 'Район',
                                 'class' => 'form-select',
-                                'id' => 'district',
                             ],
                             'pluginOptions' => [
-                                'allowClear' => true,
+                                'depends' => ['city'],
+                                'placeholder' => 'Район',
+                                'url' => Url::to(['/city-store-params/get-address-data']),
+                                'params' => ['city'],
+                                'initialize' => false,
                             ],
                         ]); ?>
                     </div>
@@ -265,7 +272,7 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
                         <?= Html::label('Территориально управляющий', null); ?>
                     </div>
                     <div class="col-md-9">
-                        <?=  Select2::widget([
+                        <?= Select2::widget([
                             'name' => 'CityStoreParams[territorial_manager]',
                             'value' => null,
                             'data' => [],
@@ -285,10 +292,10 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
                         <?= Html::label('КШФ') ?>
                     </div>
                     <div class="col-md-9">
-                        <?=  Select2::widget([
+                        <?= Select2::widget([
                             'name' => 'CityStoreParams[bush_chef_florist]',
                             'value' => null,
-                            'data' =>  [],
+                            'data' => [],
                             'options' => [
                                 'placeholder' => 'Кустовой шеф-флорист',
                                 'class' => 'form-select',