qc.ifish7.com/Application/Admin/View/Update/Refreshing.html

236 lines
11 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>