浏览代码

表单联动功能优化

jqh 4 年之前
父节点
当前提交
07727fd49e

+ 0 - 41
resources/assets/dcat/js/extensions/Helpers.js

@@ -264,47 +264,6 @@ export default class Helpers {
         })
     }
 
-    /**
-     * 联动select表单
-     *
-     * @param _this
-     * @param options
-     */
-    loadField(_this, options) {
-        let target = $(_this).closest(options.group || '.fields-group').find(options.class);
-        let values = [];
-
-        if (! options.values) {
-            $(_this).find('option:selected').each(function () {
-                if (String(this.value) === '0' || this.value) {
-                    values.push(this.value)
-                }
-            });
-        } else {
-            values = options.values;
-            if (typeof values === 'string') {
-                values = [values];
-            }
-        }
-
-        if (! values.length) {
-            return;
-        }
-
-        target.find("option").remove();
-
-        Dcat.loading();
-
-        $.ajax(options.url+values).then(function (data) {
-            Dcat.loading(false);
-
-            $.map(data, function (d) {
-                target.append(new Option(d[options.textField], d[options.idField], false, false));
-            });
-            target.val(String(target.attr('data-value')).split(',')).trigger('change');
-        });
-    }
-
     /**
      * 联动多个字段.
      *

文件差异内容过多而无法显示
+ 0 - 0
resources/dist/dcat/js/dcat-app.js


文件差异内容过多而无法显示
+ 0 - 0
resources/dist/dcat/js/dcat-app.js.map


+ 0 - 2
resources/views/filter/select.blade.php

@@ -28,5 +28,3 @@
     $("{!! $selector !!}").select2(configs);
     @endif
 </script>
-
-@yield('admin.select-load')

+ 0 - 27
resources/views/form/checkbox.blade.php

@@ -28,33 +28,6 @@
 </script>
 @endif
 
-@if(! empty($load))
-<script once>
-    var selector = '{!! $selector !!}';
-
-    $(document).off('change', selector);
-    $(document).on('change', selector, function () {
-        var values = [];
-
-        $(selector+':checked').each(function () {
-            if (String(this.value) === '0' || this.value) {
-                values.push(this.value)
-            }
-        });
-
-        Dcat.helpers.loadField(this, {
-            group: '{{ $load['group'] ?? '.fields-group' }}',
-            class: '.{{ $load['class'] }}',
-            url: "{!! $load['url'].(strpos($load['url'],'?')?'&':'?') !!}q=",
-            textField: "{{ $load['textField'] }}",
-            idField: "{{ $load['idField'] }}",
-            values: values,
-        });
-    });
-    $(selector+':checked').trigger('change')
-</script>
-@endif
-
 @if(! empty($loads))
 <script once>
     var selector = '{!! $selector !!}',

+ 0 - 21
resources/views/form/radio.blade.php

@@ -15,27 +15,6 @@
     </div>
 </div>
 
-@if(! empty($load))
-<script once>
-    var selector = '{!! $selector !!}';
-
-    $(document).off('change', selector);
-    $(document).on('change', selector, function () {
-        var values = this.value;
-
-        Dcat.helpers.loadField(this, {
-            group: '{{ $load['group'] ?? '.fields-group' }}',
-            class: '.{{ $load['class'] }}',
-            url: "{!! $load['url'].(strpos($load['url'],'?')?'&':'?') !!}q=",
-            textField: "{{ $load['textField'] }}",
-            idField: "{{ $load['idField'] }}",
-            values: values,
-        });
-    });
-    $(selector+':checked').trigger('change')
-</script>
-@endif
-
 @if(! empty($loads))
 <script once>
     var selector = '{!! $selector !!}',

+ 0 - 23
resources/views/form/select-script.blade.php

@@ -29,26 +29,3 @@
     {!! $cascadeScript !!}
 </script>
 
-@if(isset($loads))
-    {{--loads联动--}}
-    <script once>
-        var selector = '{!! $selector !!}';
-
-        var fields = '{!! $loads['fields'] !!}'.split('^');
-        var urls = '{!! $loads['urls'] !!}'.split('^');
-
-        $(document).off('change', selector);
-        $(document).on('change', selector, function () {
-            Dcat.helpers.loadFields(this, {
-                group: '.fields-group',
-                urls: urls,
-                fields: fields,
-                textField: "{{ $loads['textField'] }}",
-                idField: "{{ $loads['idField'] }}",
-            });
-        });
-        $(selector).trigger('change');
-    </script>
-@endif
-
-@yield('admin.select-load')

+ 0 - 15
resources/views/form/selecttable.blade.php

@@ -38,21 +38,6 @@
         values: {!! json_encode($options) !!},
     });
 
-    @if(! empty($load))
-    $input.on('change', function () {
-        var values = this.value;
-
-        Dcat.helpers.loadField(this, {
-            group: '{{ $load['group'] ?? '.fields-group' }}',
-            class: '.{{ $load['class'] }}',
-            url: "{!! $load['url'].(strpos($load['url'],'?')?'&':'?') !!}q=",
-            textField: "{{ $load['textField'] }}",
-            idField: "{{ $load['idField'] }}",
-            values: values,
-        });
-    }).trigger('change');
-    @endif
-
     @if(! empty($loads))
     var fields = '{!! $loads['fields'] !!}'.split('^');
     var urls = '{!! $loads['urls'] !!}'.split('^');

+ 21 - 17
resources/views/scripts/select.blade.php

@@ -36,22 +36,26 @@
 @overwrite
 </script>
 
-@section('admin.select-load')
-    @if(isset($load))
-    <script once>
-        var selector = '{!! $selector !!}';
 
-        $(document).off('change', selector);
-        $(document).on('change', selector, function () {
-            Dcat.helpers.loadField(this, {
-                group: '{{ $load['group'] ?? '.fields-group' }}',
-                class: '.{{ $load['class'] }}',
-                url: "{!! $load['url'].(strpos($load['url'],'?')?'&':'?') !!}q=",
-                textField: "{{ $load['textField'] }}",
-                idField: "{{ $load['idField'] }}",
-            });
+@if(isset($loads))
+{{--loads联动--}}
+<script once>
+    var selector = '{!! $selector !!}';
+
+    var fields = '{!! $loads['fields'] !!}'.split('^');
+    var urls = '{!! $loads['urls'] !!}'.split('^');
+
+    $(document).off('change', selector);
+    $(document).on('change', selector, function () {
+        Dcat.helpers.loadFields(this, {
+            group: '{{ $loads['group'] ?? '.fields-group' }}',
+            urls: urls,
+            fields: fields,
+            textField: "{{ $loads['textField'] }}",
+            idField: "{{ $loads['idField'] }}",
         });
-        $(selector).trigger('change');
-    </script>
-    @endif
-@overwrite
+    });
+    $(selector).trigger('change');
+</script>
+@endif
+

+ 3 - 11
src/Form/Field/CanLoadFields.php

@@ -18,22 +18,14 @@ trait CanLoadFields
      */
     public function load($field, $sourceUrl, string $idField = 'id', string $textField = 'text')
     {
-        if (Str::contains($field, '.')) {
-            $field = $this->formatName($field);
-        }
-
-        $class = $this->normalizeElementClass($field);
-
-        $url = admin_url($sourceUrl);
-
-        return $this->addVariables(['load' => compact('url', 'class', 'idField', 'textField')]);
+        return $this->loads($field, $sourceUrl, $idField, $textField);
     }
 
     /**
      * 联动加载多个字段.
      *
-     * @param string $fields
-     * @param string $sourceUrls
+     * @param array|string $fields
+     * @param array|string $sourceUrls
      * @param string $idField
      * @param string $textField
      *

+ 28 - 6
src/Grid/Filter/Presenter/Select.php

@@ -287,13 +287,35 @@ class Select extends Presenter
      */
     public function load($target, string $resourceUrl, string $idField = 'id', string $textField = 'text'): self
     {
-        $class = $this->filter->formatColumnClass($target);
-
-        $url = admin_url($resourceUrl);
-
-        $group = 'form';
+        return $this->loads($target, $resourceUrl, $idField, $textField);
+    }
 
-        return $this->addVariables(['load' => compact('url', 'class', 'idField', 'textField', 'group')]);
+    /**
+     * 联动加载多个字段.
+     *
+     * @param array|string $fields
+     * @param array|string $sourceUrls
+     * @param string $idField
+     * @param string $textField
+     *
+     * @return $this
+     */
+    public function loads($fields = [], $sourceUrls = [], string $idField = 'id', string $textField = 'text')
+    {
+        $fieldsStr = implode('^', array_map(function ($field) {
+            return $this->filter->formatColumnClass($field);
+        }, (array) $fields));
+        $urlsStr = implode('^', array_map(function ($url) {
+            return admin_url($url);
+        }, (array) $sourceUrls));
+
+        return $this->addVariables(['loads' => [
+            'fields'    => $fieldsStr,
+            'urls'      => $urlsStr,
+            'idField'   => $idField,
+            'textField' => $textField,
+            'group'     => 'form',
+        ]]);
     }
 
     /**

部分文件因为文件数量过多而无法显示