123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591 |
- {{include "head.html"}}
- <div class="modal fade" id="modal-assigntask" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <div class="modal-header">
- <button type="button" id="assign-close" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <!--<div class="edit-form">-->
- <div class="edit-info">
- <span class="glyphicon glyphicon-remove code-assign" aria-hidden="true"></span>
- <span class="info">爬虫分发<span>
- </div>
- <form class="form-horizontal" role="form">
- <div class="form-group">
- <label for="modify" class="col-sm-2 control-label">问题描述:</label>
- <div class="col-sm-10">
- <textarea class="form-control" id="reason"></textarea>
- </div>
- </div>
- <div class="form-group">
- <div class="col-sm-offset-2 col-sm-10">
- <input type="button" onclick="comfirm_disables()" class="btn btn-primary" value="确定">
- <input type="button" onclick="disables_cancel()" class="btn btn-default" value="取消">
- </div>
- </div>
- </form>
- <!--</div> -->
- </div>
- </div>
- </div><!-- /.modal-content -->
- </div><!-- /.modal -->
- </div>
- <div class="content-wrapper">
- <section class="content-header">
- <h1>
- 日常任务列表
- <small>
- <button class="btn btn-primary" onclick='tasks()'>
- 批量导入任务
- </button>
- <iframe srcdoc="<form id='uploadform' method='post' enctype='multipart/form-data' action='/center/taskfile'><input type='file' name='xlsx' /></form>" height=0 scrolling=no class="hide" id="taskfileframe">
- </iframe>
-
- <button class="btn btn-primary createTask" onclick='createTask("")'>新建任务</button>
-
- <a class="btn btn-default btn-sm" id="batchAssign" onclick="batchAssign()">批量分发</a>
- <a class="btn btn-default btn-sm" id="batchClose" onclick="batchClose()">批量关闭</a>
- <a class="btn btn-default btn-sm" id="batchDeal" onclick="batchDeal()">批量处理</a>
- </small>
- </h1>
- <ol class="breadcrumb">
- <li><a href="#"><i class="fa fa-dashboard"></i> 导入</a></li>
- <li class="active">列表</li>
- </ol>
- </section>
- <section id="taskerrmsg" class="content hide" style="min-height:0px;">
- <h5>错误信息:</h5>
- </section>
- <section class="content">
- <div class="box">
- <div class="box-body">
- <table id="task" class="table table-bordered table-striped">
- <thead>
- <tr>
- <th>网址</th>
- <th><input type="checkbox" id="selrow" onclick="selectrow(this)"/></th>
- <th>编号</th>
- <th>网站名称</th>
- <th>栏目名称</th>
- <th>爬虫代码</th>
- <th>平台</th>
- <th>状态</th>
- <th>类型</th>
- <th>维护人</th>
- <!-- <th>紧急度</th>-->
- <th>节点</th>
- <th>次数</th>
- <!-- <th>频率次数</th>-->
- <th>来源</th>
- <th>7日下载量</th>
- <th>失败占比</th>
- <!-- <th>最迟完成时间</th>-->
- <!-- <th>挂起</th>-->
- <th class="hidden-xs">操作</th>
- </tr>
- </thead>
- <tbody>
-
- </tbody>
- </table>
- </div>
- </div>
- </section>
- <script>
- var assigncode = "";
- var assignid = "";
- $(function(){
- taskConst = true;
- setCookie("task","");
- ttabletask = $('#task').DataTable({
- "language": {
- "url": "/js/dataTables.chinese.lang"
- },
- "ajax": {
- "url": "/center/managerTask",
- "type": "POST"
-
- },
- "columnDefs": [
- { "targets": 0 ,"bVisible": false}, //隐藏列
- { "orderable": false, "targets": [0,1,2,3,4,5,6,7,8,9,10,15] } //设置列不可排序
- ],
- "order": [[14,"desc"]], //默认排序列
- "lengthChange":false,
- "serverSide": true,
- "searching": true,
- "ordering": true,
- "info": true,
- "autoWidth": false,
- "columns": [
- {"data": "href"},
- {"data": "_id",render:function(val,a,row){
- return "<input type='checkbox' value='"+val+"' code='"+row.s_code+"' state='"+row.i_state+"'/>"
- }},
- {"data": "_id",render:function(val,a,row){
- return row.num
- }},
- {"data": "s_site","width":"10%"},
- {"data": "s_channel","width":"10%",render:function(val,a,row){
- var href ="javascript:void(0)" ;
- if(row["href"] != ""){
- href = row["href"];
- }
- var vals="<a href='"+href+"' title='"+val+"' target='_blank'>"+val+"</a>"
- return vals
- }},
- {"data": "s_code",render:function(val,a,row){
- // var site = row["s_site"];
- // var chanel = row["s_channel"];
- // var href = "http://test.qmx.top:3000/dashboard/db/pa-chong-cai-ji-fen-jiao-ben-30ri-zou-shi-fen-xi?orgId=5&var-spidercode="+val+"&var-site="+site+"&=var-channel="+chanel;
- // return "<a href='"+href+"' target='_blank' title='"+val+"'>"+val+"</a>"
- return val;
- }},
- {"data": "s_platform"},
- {"data": "i_state","width":"5%",render:function(val,a,row){
- if (val == 0){
- return "待确认"
- }else if (val == 1){
- return "待处理"
- }else if (val == 2){
- return "处理中"
- }else if (val == 3){
- return "待审核"
- }else if (val == 4){
- return "审核通过"
- }else if (val == 5){
- return "未通过"
- }else if (val == 6){
- return "关闭"
- }
- }},
- {"data": "s_type","width":"7%",render:function(val,a,row){
- if(val== "1"){
- val="列表页异常"
- }else if(val=="2"){
- val="数据异常错误"
- }else if(val=="3"){
- val="爬虫翻页异常"
- }else if(val=="4"){
- val="采集频率异常"
- }else if(val=="5"){
- val="下载异常"
- }else if(val=="6"){
- val="数据异常警告"
- }else if(val=="0"){
- val="常规任务"
- }
- return val;
- }},
- {"data": "s_modify"},
- {"data": "i_event"},
- {"data": "i_times"},
- {"data": "s_source"},
- {"data": "i_count"},
- {"data": "f_failrate"},
- // {"data": "l_complete","width":"8%",render:function(val,a,row){
- // var dt = new Date()
- // dt.setTime(parseInt(val) * 1000);
- // return dt.format("yyyy-MM-dd hh:mm:ss");
- // }},
- {"data": "_id","width":"10%",render:function(val,a,row){
- var div=$("<div><div class=\"btn-group\"></div></div>")
- var buttonWatch=$('<a type="button" target="_blank" class="btn btn-sm btn-primary">编辑</a>');
- var buttonClose=$('<a type="button" class="btn btn-sm btn-danger">关闭</a>');
- var buttonTag=$('<a type="button" class="btn btn-sm btn-warning">标记</a>');
- //var buttonDel=$('<a type="button" class="btn btn-sm btn-default">删除</a>');
- buttonWatch.attr("href","/center/task/edit/"+row['_id']+"__0");
- buttonClose.attr("onclick","closeTask('"+row['s_code']+"','"+row['i_state']+"','"+row['_id']+"')");
- buttonTag.attr("onclick","tagTask('"+row['s_code']+"','"+row['i_state']+"','"+row['_id']+"','"+row['s_type']+"')");
- div.find(".btn-group").append(buttonWatch);
- div.find(".btn-group").append(buttonClose);
- var buttonAssign=$('<a type="button" class="btn btn-sm btn-info">分发</a>');
- buttonAssign.attr("onclick","assignTask('"+row['s_code']+"','"+row['i_state']+"','"+row['_id']+"')");
- if(row['i_state'] == "0"){
- div.find(".btn-group").append(buttonAssign);
- div.find(".btn-group").append(buttonTag);
- }else if (row['i_state'] == "1"){
- div.find(".btn-group").append(buttonTag);
- }
- return div.html();
- }}
- ],
- "fnDrawCallback": function(table) {
- $("ul.pagination").prepend(" 转到第 <input type='text' id='changePage' style='width:20px;'> 页 <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
- $('#dataTable-btn').click(function(e) {
- var redirectpage=0
- if($("#changePage").val() && $("#changePage").val() > 0) {
- redirectpage = $("#changePage").val() - 1;
- }
- ttabletask.page(redirectpage).draw(false);
- });
- },
- "fnServerParams": function (e) {
- var taskState = $("#task_state").val();
- var taskEvent = $("#task_event").val();
- var taskStype = $("#task_stype").val();
- var userid = $("#modifyuser").val();
- var platform = $("#platform").val();
- //任务状态
- if(taskState){
- e.taskState = taskState;
- }else{
- e.taskState="-1";
- }
- //节点
- if(taskEvent){
- e.taskEvent = taskEvent;
- }else{
- e.taskEvent="-1";
- }
- //任务类型
- if(taskStype){
- e.taskStype = taskStype;
- }else{
- e.taskStype="-1";
- }
- //维护人
- if(userid){
- e.userid = userid;
- }else{
- e.userid="-1";
- }
- //平台
- if(platform){
- e.platform = platform;
- }else{
- e.platform="-1";
- }
- }
- });
- // common.setActive("index_rwgl");
- common.menuActive("managerTask");
- ttabletask.on('init.dt', function () {
- var taskState="<option value='-1'>全部</option>"+
- "<option value='0'>待确认</option>"+
- "<option value='1'>待处理</option>"+
- "<option value='2'>处理中</option>"+
- "<option value='3'>待审核</option>"+
- "<option value='4'>审核通过</option>"+
- "<option value='5'>未通过</option>"+
- "<option value='6'>关闭</option>";
- var selectState="<div class='form-group'><label for='name'>任务状态:</label>"+
- "<select id='task_state' onchange='checkclick(this.value)' class='form-control input-sm'>"+
- taskState+
- "</select></div>"
- $("#task_filter").prepend(" ");
- $("#task_filter").prepend(selectState);
- var taskStype="<option value='-1'>全部</option>"+
- "<option value='1'>列表页异常</option>"+
- "<option value='2'>数据异常错误</option>"+
- "<option value='3'>爬虫翻页异常</option>"+
- "<option value='4'>采集频率异常</option>"+
- "<option value='5'>下载异常</option>"+
- "<option value='6'>数据异常警告</option>"+
- "<option value='0'>常规任务</option>";
- var selectStype="<div class='form-group'><label for='name'>任务类型:</label>"+
- "<select id='task_stype' onchange='checkclick(this.value)' class='form-control input-sm'>"+
- taskStype+
- "</select></div>"
- $("#task_filter").prepend(" ");
- $("#task_filter").prepend(selectStype);
- var taskEvent="<option value='-1'>全部</option>"
- var events={{.T.events}}
- for(k in events){
- taskEvent+="<option value='"+events[k]+"'>"+events[k]+"</option>"
- }
- var selectEvent="<div class='form-group'><label for='name'>节点:</label>"+
- "<select id='task_event' onchange='checkclick(this.value)' class='form-control input-sm'>"+
- taskEvent+
- "</select></div>"
- $("#task_filter").prepend(" ");
- $("#task_filter").prepend(selectEvent);
- var modifyuser="<option value='-1'>全部</option>"
- var modifyusers={{.T.modifyusers}}
- for(k in modifyusers){
- modifyuser+="<option value='"+modifyusers[k]["_id"]+"'>"+modifyusers[k]["s_name"]+"</option>"
- }
- var selectModifyuser="<div class='form-group'><label for='name'>维护人:</label>"+
- "<select id='modifyuser' onchange='checkclick(this.value)' class='form-control input-sm'>"+
- modifyuser+
- "</select></div>"
- $("#task_filter").prepend(" ");
- $("#task_filter").prepend(selectModifyuser);
- //平台
- var platform="<option value='-1'>全部</option>"
- platform+="<option value='golua平台'>golua平台</option>";
- platform+="<option value='chrome'>chrome</option>";
- platform+="<option value='python'>python</option>";
- platform+="<option value='通用平台'>通用平台</option>";
- platform+="<option value='jschrome'>jschrome</option>";
- var selectPlatform="<div class='form-group'><label for='name'>平台:</label>"+
- "<select id='platform' onchange='checkclick(this.value)' class='form-control input-sm'>"+
- platform+
- "</select></div>"
- $("#task_filter").prepend(" ");
- $("#task_filter").prepend(selectPlatform);
- //修改样式
- $("#task_wrapper .col-sm-6").css({width:"100%"});
- });
- ttabletask.on('preXhr.dt', function ( e, settings, data ) {
- $("[type=search]").keypress(function(){
- setCookie("task",$("[type=search]").val());
- })
- })
- })
- function createComboxPendState(code,id){
- return "<select onchange='changeCodePendState(this.value,\""+code+"\",\""+id+"\")' class='form-control input-sm'>"+
- "<option value=1>是</option>"+
- "<option value=0>否</option>"+
- "</select>"
- };
- function changeCodePendState(pendstate,code,id){
- $.ajax({
- url:"/center/spider/updatePendState",
- type:"post",
- data:{
- "pendstate":pendstate,
- "id":id,
- "code":code,
- "stype":"task"
- },
- success:function(r){
- if(!r || !r.success){
- showTip("修改失败", 1000, function() {});
- }
- ttabletask.ajax.reload();
- }
- })
- }
- function checkclick(urgency){
- ttabletask.ajax.reload();
- }
-
- function tasks(){
- var f=$("#taskfileframe").contents().find("input");
- f.get(0).click();
- f.change(function(){
- var val=$(this).val()?$(this).val():"";
- if(val.indexOf(".xlsx")<0){
- showTip("文件格式非法",2000);
- }else{
- $(this).parent().submit();
- common.maskShow("正在导入数据");
- var ret=setInterval(function(){
- var f=$(window.frames[0].document).find("form");
- if(f.length==0){
- common.maskHide();
- var errorInfo=$(window.frames[0].document).find("body").html();
- $(window.frames[0].document).find("body").append("<form id='uploadform' method='post' enctype='multipart/form-data' action='/center/taskfile'><input type='file' name='xlsx' /></form>");
-
- var r=window.confirm("导入完毕,是否查看错误信息");
- if(r){
- $("#taskerrmsg").removeClass("hide").append(errorInfo);
- ttabletask.ajax.reload();
- }else{
- window.location.reload();
- }
- clearInterval(ret);
- }
- },500)
- }
- })
- }
- function disables_cancel(){
- $("#modal-assigntask").modal("hide");
- }
-
- function comfirm_disables(){
- if(assigncode== "" || assignid == ""){
- showTip("分发失败", 1000);
- return
- }
- var reasontext = $("#reason").val();
- $.post("/center/task/assignChangeTaskState",{"code":assigncode,"id":assignid,"reason":reasontext},function(r){
- if(r == "y"){
- $("#modal-assigntask").modal("hide");
- showTip("分发成功", 1000);
- $('#com-alert').on('hidden.bs.modal', function () {
- ttabletask.ajax.reload();
- })
- }else if(r == "e"){
- showTip("任务已存在", 1000);
- }else if(r == "n"){
- showTip("分发失败", 1000);
- }else{
- showTip("没有权限", 1000);
- }
- });
- }
-
- //分发任务
- function assignTask(code,state,id){
- if(state != "0"){
- return;
- }
- assigncode = code;
- assignid = id;
- $("#modal-assigntask").modal("show");
- }
- //关闭任务
- function closeTask(code,state,id){
- if(state == "6"){
- return
- }
- showConfirm("确定关闭任务?",function(){
- $.post("/center/task/closeChangeTaskState",{"id":id,"code":code},function(r){
- if(r == "y"){
- showTip("关闭成功", 1000);
- $('#com-alert').on('hidden.bs.modal', function () {
- ttabletask.ajax.reload();
- })
- }else if(r == "n"){
- showTip("关闭失败", 1000);
- }else{
- showTip("没有权限", 1000);
- }
- })
- })
- }
- //标记任务
- function tagTask(code,state,id,stype){
- if(state != 0 && state != 1){
- alert("该任务不能被标记!")
- return
- }
- showConfirm("确定标记任务?",function(){
- $.post("/center/spider/tagcode",{"id":id,"code":code,"stype":stype},function(r){
- if(r == "y"){
- showTip("标记成功", 1000);
- $('#com-alert').on('hidden.bs.modal', function () {
- ttabletask.ajax.reload();
- })
- }else{
- showTip("标记失败", 1000);
- }
- })
- })
- }
- //批量分发
- function batchAssign(){
- var codes=[];
- var ids=[];
- var flag = true;
- $("#task_wrapper td input[type=checkbox]").each(function(){
- if($(this).prop("checked")){
- var state = $(this).attr("state")
- if(state == "6"){
- flag = false;
- }
- ids.push($(this).val());
- codes.push($(this).attr("code"));
- }
- });
- if(!flag){
- showTip("请选择未关闭的任务", 2000);
- return
- }
- if(ids.length >0){
- showConfirm("确定批量分发?", function() {
- $.post("/center/task/batchAssign",{"codes":codes.join(","),"ids":ids.join(",")},function(r){
- if(r == null){
- showTip("批量分发成功", 1000);
- }else{
- showTip(r+";分发失败",30000);
- }
- $("#selrow").prop('checked',false);
- $('#com-alert').on('hidden.bs.modal', function () {
- ttabletask.ajax.reload();
- })
- })
- })
- }else{
- showTip("没有选择项", 1000);
- }
- }
- //批量关闭
- function batchClose(){
- var ids=[]
- var codes=[];
- var flag = true;
- $("#task_wrapper td input[type=checkbox]").each(function(){
- if($(this).prop("checked")){
- var state = $(this).attr("state")
- if(state == "6"){
- flag = false;
- }
- ids.push($(this).val());
- codes.push($(this).attr("code"));
- }
- });
- if(!flag){
- showTip("请选择未关闭的任务", 2000);
- return
- }
- if(ids.length >0){
- showConfirm("确定批量关闭?", function() {
- $.post("/center/task/batchClose",{"ids":ids.join(","),"codes":codes.join(",")},function(r){
- if(r == null){
- showTip("批量关闭成功", 1000);
- }else{
- showTip(r+";关闭失败",30000);
- }
- $("#selrow").prop('checked',false);
- $('#com-alert').on('hidden.bs.modal', function () {
- ttabletask.ajax.reload();
- })
- })
- })
- }else{
- showTip("没有选择项", 1000);
- }
- }
- //批量处理
- function batchDeal(){
- var ids=[]
- // var codes=[];
- $("#task_wrapper td input[type=checkbox]").each(function(){
- if($(this).prop("checked")){
- var state = $(this).attr("state")
- if(state == "1"){
- ids.push($(this).val());
- // codes.push($(this).attr("code"));
- }
- }
- });
- if(ids.length >0){
- showConfirm("确定批量处理?", function() {
- $.post("/center/task/batchDeal",{"ids":ids.join(",")},function(r){
- showTip(r, 1000);
- $("#selrow").prop('checked',false);
- $('#com-alert').on('hidden.bs.modal', function () {
- ttabletask.ajax.reload();
- })
- })
- })
- }else{
- showTip("没有选择正确项", 1000);
- }
- }
- function selectrow(me){
- var sel=$(me);
- var isSelected=sel.prop('checked');
- if(isSelected){
- $("#task td input[type=checkbox]").prop("checked",true);
- }else{
- $("#task td input[type=checkbox]").prop("checked",false);
- }
- }
- </script>
- </div>
- {{include "bottom.html"}}
|