初始上传
This commit is contained in:
271
addon/v3tov4/shop/controller/Upgrade.php
Executable file
271
addon/v3tov4/shop/controller/Upgrade.php
Executable file
@@ -0,0 +1,271 @@
|
||||
<?php
|
||||
/**
|
||||
* Niushop商城系统 - 团队十年电商经验汇集巨献!
|
||||
* =========================================================
|
||||
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
|
||||
* ----------------------------------------------
|
||||
* 官方网址: https://www.niushop.com
|
||||
|
||||
* =========================================================
|
||||
*/
|
||||
|
||||
namespace addon\v3tov4\shop\controller;
|
||||
|
||||
use addon\v3tov4\model\Log;
|
||||
use app\model\system\Database;
|
||||
use app\shop\controller\BaseShop;
|
||||
use addon\v3tov4\model\Upgrade as UpgradeModel;
|
||||
use addon\v3tov4\model\Log as LogModel;
|
||||
use think\facade\Cache;
|
||||
|
||||
/**
|
||||
* 升级
|
||||
* @author Administrator
|
||||
*
|
||||
*/
|
||||
class Upgrade extends BaseShop
|
||||
{
|
||||
/**
|
||||
* 数据迁移
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$log = new LogModel();
|
||||
$upgrade = new UpgradeModel();
|
||||
$task_class = $upgrade->getTaskClass();
|
||||
|
||||
if (request()->isJson()) {
|
||||
$index = input('index', -1);
|
||||
$class = input('class', '');
|
||||
|
||||
if ($index == -1) {
|
||||
// 添加迁移日志
|
||||
$class_array = explode(',', $class);
|
||||
$log_data = [];
|
||||
foreach ($class_array as $k => $v) {
|
||||
if ($task_class[ $v ][ 'is_show' ]) {
|
||||
$log_data[] = [
|
||||
'module' => $v,
|
||||
'title' => $task_class[ $v ][ 'name' ],
|
||||
'remark' => $task_class[ $v ][ 'introduction' ],
|
||||
'create_time' => time()
|
||||
];
|
||||
}
|
||||
}
|
||||
$log->addLogList($log_data);
|
||||
$task_list = $upgrade->getSyncTask($class);
|
||||
if (empty($task_list[ 'code' ])) {
|
||||
Cache::set('upgrade_error_task', '');
|
||||
}
|
||||
Cache::set('upgrade_task', $task_list);
|
||||
} else {
|
||||
$task_list = Cache::get('upgrade_task');
|
||||
$run_res = $upgrade->run($task_list[ $index ]);
|
||||
if ($run_res[ 'code' ] < 0) {
|
||||
$task_error_list = Cache::get('upgrade_error_task');
|
||||
if (empty($task_error_list)) {
|
||||
$task_error_list = [
|
||||
'data' => $task_list[ $index ],
|
||||
'error' => $run_res[ 'message' ]
|
||||
];
|
||||
} else {
|
||||
array_push($task_error_list, [ 'data' => $task_list[ $index ], 'error' => $run_res[ 'message' ] ]);
|
||||
}
|
||||
Cache::set('upgrade_error_task', $task_error_list);
|
||||
}
|
||||
}
|
||||
$task_error_list = Cache::get('upgrade_error_task');
|
||||
if (!empty($task_list[ 'code' ])) {
|
||||
return error(-1, $task_list[ 'message' ]);
|
||||
} elseif (!empty($task_error_list)) {
|
||||
$count = 0;
|
||||
foreach ($task_error_list as $k => $v) {
|
||||
if (!empty($v[ 'error' ])) {
|
||||
return error(-1, $v[ 'error' ]);
|
||||
} else {
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
if ($count == count($task_error_list)) {
|
||||
return success(0, '', [ 'index' => $index, 'total' => count($task_list), 'page_size' => $upgrade->getPageSize() ]);
|
||||
}
|
||||
} else {
|
||||
return success(0, '', [ 'index' => $index, 'total' => count($task_list), 'page_size' => $upgrade->getPageSize() ]);
|
||||
}
|
||||
} else {
|
||||
$this->assign('task_class', $task_class);
|
||||
return $this->fetch("upgrade/index");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 备份数据库
|
||||
*/
|
||||
public function backupSql()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
try {
|
||||
$upgrade_no = date('YmdHi');
|
||||
|
||||
$database = new Database();
|
||||
ini_set('memory_limit', '500M');
|
||||
$size = 300;
|
||||
$volumn = 1024 * 1024 * 2;
|
||||
$dump = '';
|
||||
$last_table = input('last_table', '');
|
||||
$series = max(1, input('series', 1));
|
||||
if (empty($last_table)) {
|
||||
$catch = true;
|
||||
} else {
|
||||
$catch = false;
|
||||
}
|
||||
$back_sql_root = "upload/backup/{$upgrade_no}/sql";
|
||||
if (!is_dir($back_sql_root)) {
|
||||
dir_mkdir($back_sql_root);
|
||||
}
|
||||
$tables = $database->getDatabaseList();
|
||||
if (empty($tables)) {
|
||||
return success();
|
||||
}
|
||||
foreach ($tables as $table) {
|
||||
$table = array_shift($table);
|
||||
if (!empty($last_table) && $table == $last_table) {
|
||||
$catch = true;
|
||||
}
|
||||
if (!$catch) {
|
||||
continue;
|
||||
}
|
||||
if (!empty($dump)) {
|
||||
$dump .= "\n\n";
|
||||
}
|
||||
if ($table != $last_table) {
|
||||
$row = $database->getTableSchemas($table);
|
||||
$dump .= $row;
|
||||
}
|
||||
$index = 0;
|
||||
if (!empty(input('index'))) {
|
||||
$index = input('index');
|
||||
}
|
||||
//枚举所有表的INSERT语句
|
||||
while (true) {
|
||||
$start = $index * $size;
|
||||
$result = $database->getTableInsertSql($table, $start, $size);
|
||||
if (!empty($result)) {
|
||||
$dump .= $result[ 'data' ];
|
||||
if (strlen($dump) > $volumn) {
|
||||
$bakfile = "{$back_sql_root}/backup-{$series}.sql";
|
||||
$dump .= "\n\n";
|
||||
file_put_contents($bakfile, $dump);
|
||||
++$series;
|
||||
++$index;
|
||||
$current = array (
|
||||
'is_backup_end' => 0,
|
||||
'last_table' => $table,
|
||||
'index' => $index,
|
||||
'series' => $series,
|
||||
);
|
||||
$current_series = $series - 1;
|
||||
return success(0, '正在导出数据, 请不要关闭浏览器, 当前第 ' . $current_series . ' 卷.', $current);
|
||||
}
|
||||
}
|
||||
if (empty($result) || count($result[ 'result' ]) < $size) {
|
||||
break;
|
||||
}
|
||||
++$index;
|
||||
}
|
||||
}
|
||||
$back_file = "{$back_sql_root}/backup-{$series}.sql";
|
||||
$dump .= "\n\n----MySQL Dump End";
|
||||
file_put_contents($back_file, $dump);
|
||||
return success(0, '数据库备份完成', [ 'is_backup_end' => 1 ]);
|
||||
} catch (\Exception $e) {
|
||||
return error(-1, $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最新的模块迁移状态,防止重复迁移
|
||||
* @return array
|
||||
*/
|
||||
public function checkModuleIsUpgrade()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$log = new LogModel();
|
||||
$upgrade = new UpgradeModel();
|
||||
$task_class = $upgrade->getTaskClass();
|
||||
$module = input('module', '');
|
||||
if (!empty($module)) {
|
||||
$module_arr = explode(",", $module);
|
||||
$res = [];
|
||||
foreach ($module_arr as $k => $v) {
|
||||
if ($task_class[ $v ][ 'is_show' ]) {
|
||||
$item = $log->getLogFirstData($v, 1);
|
||||
$res[] = [
|
||||
'module' => $v,
|
||||
'title' => $task_class[ $v ][ 'name' ],
|
||||
'count' => (int) ( $item[ 'data' ] )
|
||||
];
|
||||
}
|
||||
}
|
||||
return success(0, '', $res);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新迁移日志状态
|
||||
* @return array
|
||||
*/
|
||||
public function updateLogStatus()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$log = new LogModel();
|
||||
$upgrade = new UpgradeModel();
|
||||
$task_class = $upgrade->getTaskClass();
|
||||
$module = input('module', '');
|
||||
if (!empty($module)) {
|
||||
$module_arr = explode(",", $module);
|
||||
$res = success(0, '', 0);
|
||||
foreach ($module_arr as $k => $v) {
|
||||
if ($task_class[ $v ][ 'is_show' ]) {
|
||||
$log_info = $log->getLogFirstData($v, 0);
|
||||
$log_info = $log_info[ 'data' ];
|
||||
if (!empty($log_info)) {
|
||||
$edit_res = $log->editLog([ 'status' => 1 ], [ [ 'id', '=', $log_info[ 'id' ] ] ]);
|
||||
$res[ 'data' ] = $edit_res[ 'data' ];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function log()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$log = new LogModel();
|
||||
$page = input('page', 1);
|
||||
$page_size = input('page_size', PAGE_LIST_ROWS);
|
||||
$condition = [];
|
||||
$list = $log->getLogPageList($condition, $page, $page_size);
|
||||
return $list;
|
||||
} else {
|
||||
return $this->fetch("upgrade/log");
|
||||
}
|
||||
}
|
||||
|
||||
public function deleteLog()
|
||||
{
|
||||
if (request()->isJson()) {
|
||||
$ids = input('ids', '');
|
||||
if (!empty($ids)) {
|
||||
$log = new LogModel();
|
||||
$res = $log->deleteLog($ids);
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
addon/v3tov4/shop/view/public/img/migration_new.png
Executable file
BIN
addon/v3tov4/shop/view/public/img/migration_new.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
BIN
addon/v3tov4/shop/view/public/img/migration_select.png
Executable file
BIN
addon/v3tov4/shop/view/public/img/migration_select.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
316
addon/v3tov4/shop/view/upgrade/index.html
Executable file
316
addon/v3tov4/shop/view/upgrade/index.html
Executable file
@@ -0,0 +1,316 @@
|
||||
<style>
|
||||
.js-migrate-list {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.progress-bar-wrap .layui-input-block {
|
||||
padding-top: 11px;
|
||||
min-height: initial;
|
||||
}
|
||||
|
||||
.progress-bar {
|
||||
height: 10px;
|
||||
background: #e8e8e8;
|
||||
width: 60%;
|
||||
border-radius: 4px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.progress-bar .curr {
|
||||
content: '';
|
||||
background: var(--base-color);
|
||||
display: block;
|
||||
width: 0;
|
||||
height: 10px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.progress-bar .value {
|
||||
position: absolute;
|
||||
right: -70px;
|
||||
top: -3px;
|
||||
line-height: initial;
|
||||
}
|
||||
|
||||
.js-save[disabled] {
|
||||
background: #d2d2d2 !important;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.laytable-cell-1-0-3 {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div class="layui-collapse tips-wrap">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title">操作提示</h2>
|
||||
<ul class="layui-colla-content layui-show">
|
||||
<li>在迁移数据前,首先会备份原数据,SQL文件存放在upload/backup文件夹下</li>
|
||||
<li>迁移数据开始后,请不要关闭当前页面,以免造成未知错误</li>
|
||||
<li>文档参考:<a href="https://www.kancloud.cn/niucloud/niushop_b2c_v4/1852551" target="_blank" class="text-color">v3Tov4迁移数据说明文档</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form form-wrap">
|
||||
|
||||
<table lay-filter="migrate_list" lay-skin="line" class="js-migrate-list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th lay-data="{checkbox:true,field:'key', width:'5%'}"></th>
|
||||
<th lay-data="{field:'name',width:'20%'}">迁移模块</th>
|
||||
<th lay-data="{field:'introduction',width:'65%'}">描述</th>
|
||||
<th lay-data="{field:'action',width:'10%'}" >迁移说明</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{foreach name="$task_class" item="vo" key="k"}
|
||||
{if $vo['is_show']}
|
||||
<tr>
|
||||
<td>{$k}</td>
|
||||
<td>{$vo['name']}</td>
|
||||
<td>{$vo['introduction']}</td>
|
||||
<td>
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn js-select-desc" data-desc='{$vo["desc"]}'>详情</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/if}
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{foreach name="$task_class" item="vo" key="k"}
|
||||
<input type="hidden" name="migrate_data" title="{$vo['name']}" value="{$k}" lay-skin="primary">
|
||||
{/foreach}
|
||||
|
||||
<div class="layui-form-item progress-bar-wrap">
|
||||
<label class="layui-form-label mid">迁移进度:</label>
|
||||
<div class="layui-input-block">
|
||||
<div class="progress-bar">
|
||||
<span class="curr"></span>
|
||||
<span class="value">0%</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mid">
|
||||
<button class="layui-btn js-save" lay-submit lay-filter="save">迁移</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var form, table;
|
||||
var index = -1;// 当前页
|
||||
var migrate_data = [];// 已选迁移模块
|
||||
var total = 0;// 总页数
|
||||
var page_size = 0;//每页数量
|
||||
|
||||
var last_table = "";
|
||||
var backup_index = 0;
|
||||
var series = 0;
|
||||
var is_backup_end = 0;// 是否备份完成
|
||||
var repeat_flag = false; //防重复标识
|
||||
|
||||
layui.use(['form', 'table'], function () {
|
||||
form = layui.form;
|
||||
table = layui.table;
|
||||
|
||||
table.init('migrate_list');
|
||||
|
||||
table.on('checkbox(migrate_list)', function (obj) {
|
||||
if (obj.type == "all") {
|
||||
migrate_data = [];
|
||||
if (obj.checked) {
|
||||
$("input[name='migrate_data']").each(function () {
|
||||
migrate_data.push($(this).val());
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if (obj.checked) {
|
||||
migrate_data.push(obj.data.key);
|
||||
} else {
|
||||
for (var i in migrate_data) {
|
||||
if (migrate_data[i] == obj.data.key) migrate_data.splice(i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("body").off("click", ".js-select-desc").on("click", ".js-select-desc", function () {
|
||||
var desc = $(this).attr("data-desc");
|
||||
layer.open({
|
||||
title: '迁移说明',
|
||||
area: ['900px', '600px'],
|
||||
content: '<pre>' + desc + '</pre>'
|
||||
});
|
||||
});
|
||||
|
||||
form.on("submit(save)", function (data) {
|
||||
if (!migrate_data.length) {
|
||||
layer.msg("请选择要迁移的数据");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (repeat_flag) return false;
|
||||
repeat_flag = true;
|
||||
|
||||
checkModuleIsUpgrade(function () {
|
||||
execute();
|
||||
});
|
||||
|
||||
})
|
||||
});
|
||||
|
||||
function execute() {
|
||||
if (is_backup_end) {
|
||||
migrate();
|
||||
} else {
|
||||
$(".js-save").text("数据备份中...").attr("disabled", true);
|
||||
backupSql(function (res) {
|
||||
if (res.code >= 0) {
|
||||
$(".js-save").text("数据迁移中...").attr("disabled", true);
|
||||
migrate();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 迁移数据
|
||||
*/
|
||||
function migrate() {
|
||||
$.ajax({
|
||||
url: ns.url("v3tov4://shop/upgrade/index"),
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
data: {index: index, 'class': migrate_data.toString()},
|
||||
success: function (res) {
|
||||
if (res.code >= 0) {
|
||||
var data = res.data;
|
||||
index = parseInt(data.index);
|
||||
total = parseInt(data.total);
|
||||
page_size = parseInt(data.page_size);
|
||||
var progress = 0;
|
||||
if (index > -1) {
|
||||
// 进度计算公式:(当前页 * 每页数量) / 总数量(每页数量 * 总页数) * 100
|
||||
progress = parseFloat(((index + 1) * page_size) / (page_size * total) * 100).toFixed(2);
|
||||
}
|
||||
|
||||
$(".progress-bar .curr").css("width", progress + "%");
|
||||
$(".progress-bar .value").text(progress + "%");
|
||||
if ((parseInt(index) + 1) < total) {
|
||||
index++;
|
||||
execute();
|
||||
} else {
|
||||
updateLogStatus();
|
||||
$(".js-save").text("迁移完成").removeAttr("disabled");
|
||||
layer.msg("迁移完成");
|
||||
}
|
||||
} else {
|
||||
layer.msg(res.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据备份
|
||||
* @param callback
|
||||
*/
|
||||
function backupSql(callback) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: ns.url("v3tov4://shop/upgrade/backupSql"),
|
||||
dataType: 'json',
|
||||
data: {
|
||||
last_table: last_table,
|
||||
index: backup_index,
|
||||
series: series
|
||||
},
|
||||
success: function (res) {
|
||||
if (res.code >= 0) {
|
||||
var data = res.data;
|
||||
//判断是否备份完成
|
||||
if (data.is_backup_end) {
|
||||
is_backup_end = data.is_backup_end;
|
||||
if (callback) callback(res);
|
||||
} else {
|
||||
last_table = data.last_table;
|
||||
series = data.series;
|
||||
backup_index = data.index;
|
||||
backupSql(callback);
|
||||
}
|
||||
} else {
|
||||
if (callback) callback(res);
|
||||
is_backup_end = 0;
|
||||
layer.msg("备份发生错误:", res.message);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最新的模块迁移状态,防止重复迁移
|
||||
* @param callback
|
||||
*/
|
||||
function checkModuleIsUpgrade(callback) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: ns.url("v3tov4://shop/upgrade/checkModuleIsUpgrade"),
|
||||
dataType: 'json',
|
||||
data: {
|
||||
module: migrate_data.toString()
|
||||
},
|
||||
success: function (res) {
|
||||
var data = res.data;
|
||||
var module = [];
|
||||
var message = '';
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (data[i].count) {
|
||||
module.push(data[i].title);
|
||||
}
|
||||
}
|
||||
if (module.length) {
|
||||
message = "[ " + module.join(",") + ' ] 数据已迁移成功,确定要重新迁移吗?';
|
||||
var index = layer.confirm(message, {
|
||||
title: '操作提示',
|
||||
// btn: ['返回列表', '继续添加'],
|
||||
closeBtn: 0,
|
||||
yes: function () {
|
||||
if (callback) callback();
|
||||
layer.close(index);
|
||||
}, btn2: function () {
|
||||
repeat_flag = false;
|
||||
layer.close(index);
|
||||
}
|
||||
})
|
||||
} else {
|
||||
if (callback) callback();
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新迁移日志状态
|
||||
*/
|
||||
function updateLogStatus() {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: ns.url("v3tov4://shop/upgrade/updateLogStatus"),
|
||||
dataType: 'json',
|
||||
data: {
|
||||
module: migrate_data.toString()
|
||||
},
|
||||
success: function (res) {
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
129
addon/v3tov4/shop/view/upgrade/log.html
Executable file
129
addon/v3tov4/shop/view/upgrade/log.html
Executable file
@@ -0,0 +1,129 @@
|
||||
<style>
|
||||
.layui-layout-admin .tips-wrap{margin-bottom: 15px;}
|
||||
</style>
|
||||
|
||||
<div class="layui-collapse tips-wrap">
|
||||
<div class="layui-colla-item">
|
||||
<h2 class="layui-colla-title">操作提示</h2>
|
||||
<ul class="layui-colla-content layui-show">
|
||||
<li>迁移数据日志</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<table id="upgrade_log" lay-filter="upgrade_log"></table>
|
||||
</div>
|
||||
<!--操作-->
|
||||
<script type="text/html" id="operation">
|
||||
<div class="table-btn">
|
||||
<a class="layui-btn" lay-event="delete">删除</a>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- 批量删除 -->
|
||||
<script type="text/html" id="batchOperation">
|
||||
<button class="layui-btn layui-btn-primary" lay-event="delete">批量删除</button>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
var repeat_flag = false;
|
||||
var table = new Table({
|
||||
elem: '#upgrade_log',
|
||||
filter: "upgrade_log",
|
||||
url: ns.url("v3tov4://shop/upgrade/log"),
|
||||
cols: [[{
|
||||
width: "3%",
|
||||
type: 'checkbox',
|
||||
field: 'id',
|
||||
unresize: 'false'
|
||||
}, {
|
||||
field: 'title',
|
||||
width: '25%',
|
||||
title: '迁移模块',
|
||||
unresize: 'true'
|
||||
}, {
|
||||
field: 'remark',
|
||||
width: '35%',
|
||||
title: '备注',
|
||||
unresize: 'true'
|
||||
}, {
|
||||
width: '17%',
|
||||
title: '迁移时间',
|
||||
unresize: 'true',
|
||||
templet: function (d) {
|
||||
return ns.time_to_date(d.create_time);
|
||||
}
|
||||
}, {
|
||||
width: '10%',
|
||||
title: '迁移状态',
|
||||
unresize: 'true',
|
||||
templet: function (d) {
|
||||
return d.status ? "完成" : "未完成";
|
||||
}
|
||||
}, {
|
||||
title: '操作',
|
||||
toolbar: '#operation',
|
||||
unresize: 'false',
|
||||
align:'right'
|
||||
}]],
|
||||
bottomToolbar: "#batchOperation"
|
||||
});
|
||||
|
||||
/**
|
||||
* 批量操作
|
||||
*/
|
||||
table.bottomToolbar(function (obj) {
|
||||
if (obj.data.length < 1) {
|
||||
layer.msg('请选择要操作的数据');
|
||||
return;
|
||||
}
|
||||
switch (obj.event) {
|
||||
case "delete":
|
||||
var id_array = new Array();
|
||||
for (i in obj.data) id_array.push(obj.data[i].id);
|
||||
deleteLog(id_array.toString());
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听工具栏操作
|
||||
*/
|
||||
table.tool(function (obj) {
|
||||
var data = obj.data;
|
||||
switch (obj.event) {
|
||||
case 'delete':
|
||||
deleteLog(data.id);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
function deleteLog(id) {
|
||||
if (repeat_flag) return;
|
||||
repeat_flag = true;
|
||||
|
||||
layer.confirm('确定要删除该日志吗?', function (index) {
|
||||
layer.close(index);
|
||||
$.ajax({
|
||||
url: ns.url("v3tov4://shop/upgrade/deleteLog"),
|
||||
data: {
|
||||
"ids": id
|
||||
},
|
||||
dataType: 'JSON',
|
||||
type: 'POST',
|
||||
success: function (res) {
|
||||
layer.msg(res.message);
|
||||
repeat_flag = false;
|
||||
|
||||
if (res.code == 0) {
|
||||
table.reload({
|
||||
page: {
|
||||
curr: 1
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user