Files
2021-03-13 18:42:01 +08:00

236 lines
11 KiB
HTML

<include file="Update:top"/>
<div class="Refresh Refreshing" id="app">
<div class="Refresh_top clearer">
<div class="Refresh_left fl clearer">
<div class="Refresh_left_icon fl">
<div class="fensug">
<div class="wavenum">
<b id="denfenjs">{{percent}}%</b>
</div>
<div class="waven">
<div class="wave" :style="'height:'+percent+'%'"></div>
</div>
</div>
</div>
<div class="Refresh_left_txt fl">
<dd>{{bigTitle}}</dd>
<dt>{{bigTitleDetail}}</dt>
</div>
</div>
<div class="Refreshing_right fr">已用时:{{timeStr}}</div>
<div class="Refreshing_schedule" :style="'width:'+percent+'%;'"></div>
</div>
<div class="Refresh_bottom">
<div class="Refresh_bottom_list">
<div class="bottom_list_title clearer">
<div class="list_title_icon fl">
<span class="iconfont">&#xe650;</span>缓存刷新
</div>
</div>
<div class="bottom_list_content clearer">
<template v-for="(item,index) in taskInc">
<label :class="'list_content_li fl '+item.className " v-if="item.group==1">
<div class="content_li_txt">
<dd class="iconfont" v-html="item.icon"></dd>
<dt>{{item.name}}</dt>
<div class="li_txt_bottom li_txt_bottom1"><span :style="'width:'+item.selfPerent+'%'">{{item.selfPerent}}%</span></div>
<div class="li_txt_bottom li_txt_bottom2">{{item.num}}条</div>
</div>
</label>
</template>
</div>
</div>
<div class="Refresh_bottom_list">
<div class="bottom_list_title clearer">
<div class="list_title_icon fl">
<span class="iconfont">&#xe604;</span>首页/栏目/单页刷新
</div>
</div>
<div class="bottom_list_content clearer">
<template v-for="(item,index) in taskInc">
<label :class="'list_content_li fl '+item.className " v-if="item.group==2">
<div class="content_li_txt">
<dd class="iconfont" v-html="item.icon"></dd>
<dt>{{item.name}}</dt>
<div class="li_txt_bottom li_txt_bottom1"><span :style="'width:'+item.selfPerent+'%'">{{item.selfPerent}}%</span></div>
<div class="li_txt_bottom li_txt_bottom2">{{item.num}}条</div>
</div>
</label>
</template>
</div>
</div>
<div class="Refresh_bottom_list">
<div class="bottom_list_title clearer">
<div class="list_title_icon fl">
<span class="iconfont">&#xe60b;</span>内容页刷新
</div>
</div>
<div class="bottom_list_content clearer">
<template v-for="(item,index) in taskInc">
<label :class="'list_content_li fl '+item.className " v-if="item.group==3">
<div class="content_li_txt">
<dd class="iconfont" v-html="item.icon"></dd>
<dt>{{item.name}}</dt>
<div class="li_txt_bottom li_txt_bottom1"><span :style="'width:'+item.selfPerent+'%'">{{item.selfPerent}}%</span></div>
<div class="li_txt_bottom li_txt_bottom2">{{item.num}}条</div>
</div>
</label>
</template>
</div>
</div>
</div>
</div>
<include file="Inc:foot" noiframeauto="true"/>
<script src="/Public/Admin/js/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
allNum:0,
bigTitle:"数据正在更新中",
bigTitleDetail:"受页面数量大小等因素需要一定的时间才能操作完成,请耐心等候...",
timeFun:null,
timeStr:"00:00:00",
percent:1,//任务进度,一开始给个1好看一些
task_index:1,//对应后台的task_index,
taskInc:{$data},
},
methods:{
foundTask:function(){
var isFound=false;
for(var k in this.taskInc){
if(this.taskInc[k]["task_index"]==this.task_index){
isFound=true;
this.sendTask(k,1,0);
}
}
//防止有未勾选的任务组
if(!isFound){
this.task_index++;
this.foundTask();
}
},
sendTask:function(k,i,ids_key){
var taskUrl="index.php?m=Admin&c=Update&a="+this.taskInc[k]["taskName"]+"&i="+i;
//如果刷新首页,列表页,内容页,自定义列表页,自定义内容页,需要访问Home下的控制器。
if(this.taskInc[k]["taskName"]=="updateHome"||this.taskInc[k]["taskName"]=="updatePage"||this.taskInc[k]["taskName"]=="updatePages"||this.taskInc[k]["taskName"]=="updateCat"||this.taskInc[k]["taskName"]=="updateDetai"){
var taskUrl="index.php?m=Home&c=Update&a="+this.taskInc[k]["taskName"]+"&i="+i;
}
var ids=this.taskInc[k]["ids"];
if(ids){
taskUrl=taskUrl+"&id="+ids[ids_key];
}
//如果当前
this.taskInc[k]["className"]="Finishing";
//如果是刷新内容页需要传递num和table字段
if(this.taskInc[k]["taskName"]=="updateDetai"){
taskUrl=taskUrl+"&table_name="+this.taskInc[k]["table"]+"&count="+this.taskInc[k]["num"];
}
var obj=this;
$.ajax({
url:taskUrl,
type:"get",
async:true,
dataType:'json',
success:function(result){
var status=result.status;
var data=result.info;
if(status){
//更新进度
obj.taskInc[k]["alreadyNum"]=obj.taskInc[k]["alreadyNum"]+data.num;
obj.updatePercent();
//这个任务执行完成了
if(data.complete==1){
//判断是不是栏目和自定义列表,需要刷新多个栏目的
if(obj.taskInc[k]["ids"]){
ids_key++;
if(obj.taskInc[k]["ids"][ids_key]){
//当前栏目刷新完成了,刷新下一个栏目
obj.sendTask(k,1,ids_key);
}else{
//这条任务刷新完成了,刷新下一个任务
obj.task_index++;//下一条任务
//obj.sendTask(k+1,1,0);
obj.foundTask();
}
}else{
//这条任务刷新完成了,刷新下一个任务
obj.task_index++;//下一条任务
//obj.sendTask(k+1,1,0);
obj.foundTask();
}
}else{
//未完成继续
i++;
obj.sendTask(k,i,ids_key);
}
}else{
layer.alert(data);
}
},
error:function(xhr,textStatus){
alert("程序出错"+xhr);
}
})
},
//更新进度条的
updatePercent:function(){
var allNum=0;
var alreadyNum=0;
for(var k in this.taskInc){
//当前进度
this.taskInc[k]["selfPerent"]=Math.ceil(this.taskInc[k]["alreadyNum"]/this.taskInc[k]["num"]*100);
//当前显示样式
if(this.taskInc[k]["selfPerent"]==100){
this.taskInc[k]["className"]="Finished";
//当这个任务完成后,将下个任务设置为开始状态。因为有的任务执行ajax请求时间长,ICON一直是灰色的状态
var nextK=parseInt(k)+1;
if(this.percent<100){
//this.taskInc[nextK]["className"]="Finishing";
}
}else if(this.taskInc[k]["selfPerent"]==0){
this.taskInc[k]["className"]="ReadFinishing";
}else{
this.taskInc[k]["className"]="Finishing";
}
//总体进度
allNum=allNum+Math.ceil(this.taskInc[k]["num"]);
this.allNum=allNum;
alreadyNum=alreadyNum+Math.ceil(this.taskInc[k]["alreadyNum"]);
}
var percent=alreadyNum/allNum*100;
this.percent=Math.ceil(percent);
//刷新完成
if(percent==100){
this.bigTitle="所有数据已更新完成!";
this.bigTitleDetail="总计用时:"+this.timeStr+",更新了"+this.allNum+"个页面。";
clearInterval(this.timeFun);
}
}
},
mounted:function(){
//开始执行任务
//this.sendTask(0,1,0);
this.task_index=this.taskInc[0].task_index;
this.foundTask();
//计时器
var count=0;
var obj=this;
this.timeFun=setInterval(function() {
var h = parseInt(count / 1000 / 60 / 60);
var m = parseInt(count / 1000 / 60) % 60;
var s = parseInt(count / 1000) % 60;
var ms = parseInt(count / 10) % 100;
h = h < 10 ? '0' + h : h;
m = m < 10 ? '0' + m : m;
s = s < 10 ? '0' + s : s;
ms = ms < 10 ? '0' + ms : ms;
obj.timeStr = h + ':' + m + ':' + s ;
count += 10;
}, 10)
},
});
</script>