• Dcat-Admin
  • 有个bug, 影响整体稳定性【已修正】

这个问题在老的dcat中就已经存在。

在有统计card的页面,点击浏览器回退按钮,再进这个页面时,会产生很多重复请求。

复现步骤:

比如点击默认表格页面:https://jikeadmin.saishiyun.net/admin/dcatplus-demo/grid
再点击组合表格页面:https://jikeadmin.saishiyun.net/admin/dcatplus-demo/reports
点击返回按钮,再点击表格页面的菜单则产生:/admin/dcat-api/value的请求,N条,重复会产生上百条请求。

刚才在demo页面复现了一次,服务器已经处理不过来了。具体复现可以加我,希望可以一起解决这个问题:微信forloop163

最简单的复现路径是:点击默认表格菜单,点击返回,再点击默认表格菜单,就会有很多重复的dcat-api/valuedcat-api/value请求

好的。找不到 forloop163 微信。你是不是微信号不对

    • 已编辑

    如果你使用还是dcat-admin , 非dcat-plus版。请使用以下代码,去修正。

    把 使用以下代码去修正, use DcatInteractsWithApi 加到你的每一个图表 Card中

    重写了 InteractsWithApi 中的两个方法, 只有在 图表Card id, 在页面中存在时才会触发异步请求

    <?php
    
    namespace App\Helpers;
    
    use Illuminate\Http\Request;
    
    /**
     * Trait InteractsWithApi.
     *
     *
     * @method mixed handle(Request $request)
     * @method mixed valueResult()
     */
    trait DcatInteractsWithApi
    {
        /**
         * 构建请求数据js代码.
         *
         * @return null|string
         */
        public function buildRequestScript()
        {
            if (! $this->allowBuildRequest()) {
                return;
            }
    
            $fetching = implode(';', $this->requestScripts['fetching']);
            $fetched = implode(';', $this->requestScripts['fetched']);
            $id = $this->id();
            return <<<JS
    (function () {
        if($("#{$id}").length >= 1) {
            var loading;
    
            function request(data) {
                if (loading) {
                    return;
                }
                loading = 1;
    
                data = $.extend({$this->formatRequestData()}, data || {});
    
                {$fetching};
    
                $.ajax({
                  url: '{$this->getRequestUrl()}',
                  dataType: 'json',
                  method: '{$this->method}',
                  data: data,
                  success: function (response) {
                    loading = 0;
                    {$fetched};
                  },
                  error: function (a, b, c) {
                      loading = 0;
                      Dcat.handleAjaxError(a, b, c)
                  },
                });
            }
    
            request();
    
            {$this->buildBindingScript()}
         }
    })();
    JS;
        }
    
        private function formatRequestData()
        {
            $data = [
                '_key'   => $this->getUriKey(),
                '_token' => csrf_token(),
            ];
    
            return json_encode(
                array_merge($this->parameters(), $data)
            );
        }
    }
    admin 更改标题为「有个bug, 影响整体稳定性【已修正】