| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 | <?phpuse yii\grid\GridView;use yii\helpers\Html;/* @var $this yii\web\View *//* @var $dataProvider yii\data\ActiveDataProvider */$this->title = '数据备份';$this->params['breadcrumbs'][] = $this->title;?><div class="config-index">    <?php \yii\widgets\ActiveForm::begin(['id' => 'export-form', 'action' => ['init']])?>    <p>        <?= Html::a('立即备份', ['init'], ['class' => 'btn btn-success', 'id' => 'export']) ?>    </p>    <div class="box box-success">        <div class="box-body">            <?= GridView::widget([                'id' => 'grid',                'dataProvider' => $dataProvider,                'columns' => [                    [                        'class' => \yii\grid\CheckboxColumn::className(),                        'name' => 'tables',                        'checkboxOptions' => function ($model, $key, $index, $column) {                            return ['value' => $model['name']];                        }                    ],                    'name:text:表名',                    'rows:text:数据量',                    [                        'attribute' => 'data_length',                        'label' => '数据大小',                        'value' => function ($model) {                            return Yii::$app->formatter->asShortSize($model['data_length']);                        }                    ],                    'create_time:text:创建时间',                    [                        'class' => 'yii\grid\ActionColumn',                        'template' => '{a} {b}',                        'buttons' => [                            'a' => function ($url, $model, $key) {                                return Html::a('优化表',                                    ['export/optimize', 'tables' => $model['name']],                                    [                                        'data' => [                                            'ajax' => 1,                                            'method' => 'get'                                        ],                                        'class' => 'btn btn-default btn-xs'                                    ]                                );                            },                            'b' => function ($url, $model, $key) {                                return Html::a('修复表',                                    ['export/repair', 'tables' => $model['name']],                                    [                                        'data' => [                                            'ajax' => 1,                                            'method' => 'get'                                        ],                                        'class' => 'btn btn-default btn-xs'                                    ]                                );                            }                        ]                    ],                ],            ]); ?>            <?php \yii\widgets\ActiveForm::end()?>        </div>    </div></div><?php $this->beginBlock('js'); ?><!-- /应用列表 --><script type="text/javascript">    (function($){        var $form = $("#export-form"), $export = $("#export"), tables        $optimize = $("#optimize"), $repair = $("#repair");        $optimize.add($repair).click(function(){            $.post(this.href, $form.serialize(), function(data){                if(data.status){                    $.modal.success(data.info);                } else {                    $.modal.error(data.info);                }                setTimeout(function(){                    $('#top-alert').find('button').click();                    $(that).removeClass('disabled').prop('disabled',false);                },1500);            }, "json");            return false;        });        $export.click(function(){            if ($('#grid').yiiGridView('getSelectedRows').length <= 0) {                $.modal.error('请选择要备份的表');                return false;            }            $export.parent().children().addClass("disabled");            $export.html("正在发送备份请求...");            var that = this;            $.post(                $form.attr("action"),                $form.serialize(),                function(data){                    if(data.status){                        tables = data.tables;                        $export.html(data.info + "开始备份,请不要关闭本页面!");                        backup.call(that, data.tab);                        window.onbeforeunload = function(){ return "正在备份数据库,请不要关闭!" }                    } else {                        $.modal.error(data.info);                        $export.parent().children().removeClass("disabled");                        $export.html("立即备份");                        setTimeout(function(){                            $(that).removeClass('disabled').prop('disabled',false);                        },1500);                    }                },                "json"            );            return false;        });        function backup(tab, status){            status && showmsg(tab.id, "开始备份...(0%)");            $.post('<?= \yii\helpers\Url::to(['start'])?>', tab, function(data){                if(data.status){                    showmsg(tab.id, data.info);                    if(!$.isPlainObject(data.tab)){                        $export.parent().children().removeClass("disabled");                        $export.html("备份完成,点击重新备份");                        window.onbeforeunload = function(){ return null }                        return;                    }                    backup(data.tab, tab.id != data.tab.id);                } else {                    $.modal.error(data.info);                    $export.parent().children().removeClass("disabled");                    $export.html("立即备份");                    setTimeout(function(){                        $(this).removeClass('disabled').prop('disabled',false);                    },1500);                }            }, "json");        }        function showmsg(id, msg){            $form.find("input[value=" + tables[id] + "]").closest("tr").find(".info").html(msg);        }    })(jQuery);</script><?php $this->endBlock('js'); ?>
 |