common.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718
  1. common={};
  2. var issave = false;
  3. common.spider={};
  4. common.form={};
  5. common.maskShow=function(title){
  6. var change=function(){
  7. if(title){
  8. $("#maskTitle").text(title);
  9. }else{
  10. $("#maskTitle").text("加载中");
  11. }
  12. var width=$(window).width();
  13. var height=$("body").height();
  14. $(".mask>.box").css("left",(width-width*0.3)/2);
  15. $(".mask").removeClass("hide").css("height",height);
  16. }
  17. $(window).resize(function(){
  18. change();
  19. });
  20. change();
  21. }
  22. common.maskHide=function(){
  23. $(".mask").addClass("hide");
  24. $(window).unbind("resize");
  25. }
  26. common.setActive=function(name){
  27. $("ul.sidebar-menu li.active").removeClass("active");
  28. $("ul.sidebar-menu li[data="+name+"]").addClass("active");
  29. }
  30. common.form.isCheck=function(id,func){
  31. var ischeck=true;
  32. $("#"+id+" [name]").each(function(){
  33. if(this){
  34. var value=$(this).prop("value");
  35. var name=$(this).prop("name");
  36. if(!value || value==""){
  37. if(func){
  38. func(this);
  39. }else{
  40. ischeck=false;
  41. $(this).css("border-color","red");
  42. $(this).attr("placeholder","此项不能为空")
  43. }
  44. }else{
  45. if($(this).css("border-color")=="rgb(255, 0, 0)"){
  46. $(this).css("border-color","#d2d6de");
  47. }
  48. }
  49. }
  50. })
  51. return ischeck;
  52. }
  53. common.form.serializeArray=function(id){
  54. var serializeArray={};
  55. var chromeArr = [];
  56. var rangeChromeArr = [];
  57. $("#"+id+" [name]").each(function(){
  58. var name=$(this).prop("name");
  59. var value=$(this).prop("value");
  60. if($(this).get(0).tagName=="TEXTAREA" && $(this).attr("id")){
  61. if($(this).attr("id").indexOf("Step1")>-1){
  62. value=editor_1.getValue()
  63. }else if($(this).attr("id").indexOf("Step2")>-1){
  64. value=editor_2.getValue()
  65. }else if($(this).attr("id").indexOf("Step3")>-1){
  66. value=editor_3.getValue()
  67. }else if($(this).attr("id").indexOf("Stepre3")>-1){
  68. value=editor_re3.getValue()
  69. }
  70. }else{
  71. value=$(this).prop("value");
  72. value=value?value:"";
  73. }
  74. //组合有序的chrome
  75. if(name.includes("Range.Chrome")){//循环动作
  76. var rangeChromeMap = {};
  77. rangeChromeMap["action"] = name.replace("Range.Chrome.","");
  78. rangeChromeMap["param"] = value
  79. var selector_val = $(this).parents(".chrome-actions").find("[sel='"+name+".selector']").val();
  80. if (selector_val) {
  81. rangeChromeMap["selector"]= selector_val
  82. }
  83. rangeChromeArr.push(rangeChromeMap);
  84. }else if (name.includes("Chrome")){//基础动作
  85. var chromeMap = {};
  86. chromeMap["action"] = name.replace("Chrome.","");
  87. chromeMap["param"] = value
  88. var selector_val = $(this).parents(".chrome-actions").find("[sel='"+name+".selector']").val();
  89. if (selector_val) {
  90. chromeMap["selector"]= selector_val
  91. }
  92. chromeArr.push(chromeMap);
  93. }else{
  94. serializeArray[name]=value.trim();
  95. }
  96. });
  97. if (chromeArr.length > 0){
  98. serializeArray[id+".Chrome"] = JSON.stringify(chromeArr);
  99. }
  100. if (rangeChromeArr.length > 0){
  101. serializeArray[id+".RangeChrome"] = JSON.stringify(rangeChromeArr);
  102. }
  103. return serializeArray
  104. }
  105. common.form.submit=function(){}
  106. //js编辑器展示
  107. common.spider.editjs=function (step) {
  108. $("#modal-js").modal("show");
  109. setTimeout(() => {
  110. editor2_js.refresh();
  111. editor3_js.refresh();
  112. }, 500)
  113. }
  114. common.spider.initMirror=function() {
  115. editor_1 = CodeMirror.fromTextArea($("#Step1_mirror")[0], {
  116. theme:"solarized light",
  117. lineNumbers: true,
  118. indentUnit:4,
  119. smartIndent:true,
  120. indentWithTabs:true,
  121. extraKeys:{
  122. "F11": function(cm) {
  123. cm.setOption("fullScreen", !cm.getOption("fullScreen"));
  124. },
  125. "F10": function(cm) {
  126. var r=window.confirm("生成代码后原先的将会被覆盖,是否生成?")
  127. if(r){
  128. $("a[for=Step1]").eq(0).trigger("click",["editor_1"])
  129. }
  130. },
  131. "F9":function(cm) {
  132. var str_tab = "\t".repeat(cm.getCursor().ch);
  133. var _keyWord = "something";
  134. cm.replaceSelection(`if true then\n${str_tab}\treturn ${_keyWord}\n${str_tab}end`);
  135. },
  136. "F8":function(cm){
  137. var str_tab = "\t".repeat(cm.getCursor().ch);
  138. cm.replaceSelection(`local attachments = com.getFileAttachmentsArrayWithTag(data["href"],"dl","<dl>"..data["contenthtml"].."</dl>",false)\n${str_tab}if table.getn(attachments)>0 then\n\t\t${str_tab}data["projectinfo"]={\n\t\t${str_tab}["attachments"]=attachments\n\t${str_tab}}\n${str_tab}end`);
  139. },
  140. "Esc": function(cm) {
  141. if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
  142. }
  143. }
  144. });
  145. editor_2 = CodeMirror.fromTextArea($("#Step2_mirror")[0], {
  146. theme:"solarized light",
  147. lineNumbers: true,
  148. indentUnit:4,
  149. smartIndent:true,
  150. indentWithTabs:true,
  151. extraKeys:{
  152. "F11": function(cm) {
  153. cm.setOption("fullScreen", !cm.getOption("fullScreen"));
  154. },
  155. "F10": function(cm) {
  156. var r=window.confirm("生成代码后原先的将会被覆盖,是否生成?")
  157. if(r){
  158. $("a[for=Step2]").eq(0).trigger("click",["editor_2"])
  159. }
  160. },
  161. "F9":function(cm) {
  162. var str_tab = "\t".repeat(cm.getCursor().ch);
  163. var _keyWord = "something";
  164. cm.replaceSelection(`if true then\n${str_tab}\treturn ${_keyWord}\n${str_tab}end`);
  165. },
  166. "F8":function(cm){
  167. var str_tab = "\t".repeat(cm.getCursor().ch);
  168. cm.replaceSelection(`local attachments = com.getFileAttachmentsArrayWithTag(data["href"],"dl","<dl>"..data["contenthtml"].."</dl>",false)\n${str_tab}if table.getn(attachments)>0 then\n\t\t${str_tab}data["projectinfo"]={\n\t\t${str_tab}["attachments"]=attachments\n\t${str_tab}}\n${str_tab}end`);
  169. },
  170. "Ctrl-F10":function (cm){
  171. if (!luaIsChrome){
  172. window.alert("非chrome爬虫,禁止使用chrome下载方法");
  173. return
  174. }
  175. var regex = /{([^}]*)}/g;
  176. var str_tab = "\t".repeat(cm.getCursor().ch);
  177. var data = common.form.serializeArray("Step2");
  178. var baseChromeActionsStr = data["Step2.Chrome"];
  179. var luaText = `local timeout = 60\n${str_tab}local chromeTask = [[\n${str_tab}\t{\n${str_tab}\t\t`;
  180. var baseText = ``;
  181. var rangText = ``;
  182. var timesText = ``;
  183. if (baseChromeActionsStr){
  184. var rangeChromeActionsStr = data["Step2.RangeChrome"];
  185. var rangeTimes = data["Step2.RangeTimes"];
  186. if(rangeChromeActionsStr) {
  187. if(!rangeTimes){
  188. window.alert("未设置循环动作执行次数");
  189. return;
  190. }else{
  191. timesText = `${str_tab}"range-times":`+rangeTimes+`,\n${str_tab}${str_tab}`
  192. }
  193. //循环动作
  194. var rangeChromeActionMapStr = rangeChromeActionsStr.substring(1,rangeChromeActionsStr.length - 1);
  195. var rangeChromeActionsStrArr = rangeChromeActionMapStr.match(regex);
  196. for (var i in rangeChromeActionsStrArr){
  197. if (i == rangeChromeActionsStrArr.length -1){
  198. rangText += rangeChromeActionsStrArr[i]+`\n${str_tab}\t`;
  199. }else{
  200. rangText += rangeChromeActionsStrArr[i]+`,\n${str_tab}\t\t\t`;
  201. }
  202. }
  203. rangText = `"range-actions":[\n${str_tab}${str_tab}\t`+rangText+`\t]\n${str_tab}`
  204. }
  205. //基础动作
  206. var baseChromeActionMapStr = baseChromeActionsStr.substring(1,baseChromeActionsStr.length - 1);
  207. var baseChromeActionsStrArr = baseChromeActionMapStr.match(regex);
  208. for (var i in baseChromeActionsStrArr){
  209. var baseActionText = baseChromeActionsStrArr[i];
  210. if (baseActionText.includes("navigate")){
  211. baseActionText = `{"action":"navigate","param":"]]..href..[["}`
  212. }
  213. if (i == baseChromeActionsStrArr.length -1){
  214. baseText += baseActionText+`\n${str_tab}\t`;
  215. }else{
  216. baseText += baseActionText+`,\n${str_tab}\t\t\t`;
  217. }
  218. }
  219. if(rangText){
  220. baseText = `"base-actions":[\n${str_tab}${str_tab}\t`+baseText+`\t],\n${str_tab}`
  221. }else{
  222. baseText = `"base-actions":[\n${str_tab}${str_tab}\t`+baseText+`\t]\n${str_tab}`
  223. }
  224. }else{
  225. //luaText += `添加基础执行动作\n${str_tab}\t`;
  226. window.alert("未设置基础循环动作");
  227. return;
  228. }
  229. luaText += baseText + timesText + rangText + `\t}\n${str_tab}]]\n${str_tab}local contenthtmltable = downloadByChrome(timeout,chromeTask)`
  230. cm.replaceSelection(luaText);
  231. },
  232. "Esc": function(cm) {
  233. if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
  234. }
  235. }
  236. });
  237. editor_3 = CodeMirror.fromTextArea($("#Step3_mirror")[0], {
  238. theme:"solarized light",
  239. lineNumbers: true,
  240. indentUnit:4,
  241. smartIndent:true,
  242. indentWithTabs:true,
  243. extraKeys:{
  244. "F11": function(cm) {
  245. cm.setOption("fullScreen", !cm.getOption("fullScreen"));
  246. },
  247. "F10": function(cm) {
  248. var r=window.confirm("生成代码后原先的将会被覆盖,是否生成?")
  249. if(r){
  250. $("a[for=Step3]").eq(0).trigger("click",["editor_3"])
  251. }
  252. },
  253. "F9":function(cm) {
  254. var str_tab = "\t".repeat(cm.getCursor().ch);
  255. var _keyWord = "something";
  256. cm.replaceSelection(`if true then\n${str_tab}\treturn ${_keyWord}\n${str_tab}end`);
  257. },
  258. "F8":function(cm){
  259. var str_tab = "\t".repeat(cm.getCursor().ch);
  260. cm.replaceSelection(`local attachments = com.getFileAttachmentsArrayWithTag(data["href"],"dl","<dl>"..data["contenthtml"].."</dl>",false)\n${str_tab}if table.getn(attachments)>0 then\n\t\t${str_tab}data["projectinfo"]={\n\t\t${str_tab}["attachments"]=attachments\n\t${str_tab}}\n${str_tab}end`);
  261. },
  262. "Ctrl-F10":function (cm){
  263. if (!luaIsChrome){
  264. window.alert("非chrome爬虫,禁止使用chrome下载方法");
  265. return
  266. }
  267. var regex = /{([^}]*)}/g;
  268. var str_tab = "\t".repeat(cm.getCursor().ch);
  269. var data = common.form.serializeArray("Step3");
  270. var baseChromeActionsStr = data["Step3.Chrome"];
  271. var luaText = `local timeout = 60\n${str_tab}local chromeTask = [[\n${str_tab}\t{\n${str_tab}\t\t`;
  272. var baseText = ``;
  273. var rangText = ``;
  274. var timesText = ``;
  275. if (baseChromeActionsStr){
  276. var rangeChromeActionsStr = data["Step3.RangeChrome"];
  277. var rangeTimes = data["Step3.RangeTimes"];
  278. if(rangeChromeActionsStr) {
  279. if(!rangeTimes){
  280. window.alert("未设置循环动作执行次数");
  281. return;
  282. }else{
  283. timesText = `${str_tab}"range-times":`+rangeTimes+`,\n${str_tab}${str_tab}`
  284. }
  285. //循环动作
  286. var rangeChromeActionMapStr = rangeChromeActionsStr.substring(1,rangeChromeActionsStr.length - 1);
  287. var rangeChromeActionsStrArr = rangeChromeActionMapStr.match(regex);
  288. for (var i in rangeChromeActionsStrArr){
  289. if (i == rangeChromeActionsStrArr.length -1){
  290. rangText += rangeChromeActionsStrArr[i]+`\n${str_tab}\t`;
  291. }else{
  292. rangText += rangeChromeActionsStrArr[i]+`,\n${str_tab}\t\t\t`;
  293. }
  294. }
  295. rangText = `"range-actions":[\n${str_tab}${str_tab}\t`+rangText+`\t]\n${str_tab}`
  296. }
  297. //基础动作
  298. var baseChromeActionMapStr = baseChromeActionsStr.substring(1,baseChromeActionsStr.length - 1);
  299. var baseChromeActionsStrArr = baseChromeActionMapStr.match(regex);
  300. for (var i in baseChromeActionsStrArr){
  301. var baseActionText = baseChromeActionsStrArr[i];
  302. if (baseActionText.includes("navigate")){
  303. baseActionText = `{"action":"navigate","param":"]]..data["href"]..[["}`
  304. }
  305. if (i == baseChromeActionsStrArr.length -1){
  306. baseText += baseActionText+`\n${str_tab}\t`;
  307. }else{
  308. baseText += baseActionText+`,\n${str_tab}\t\t\t`;
  309. }
  310. }
  311. if(rangText){
  312. baseText = `"base-actions":[\n${str_tab}${str_tab}\t`+baseText+`\t],\n${str_tab}`
  313. }else{
  314. baseText = `"base-actions":[\n${str_tab}${str_tab}\t`+baseText+`\t]\n${str_tab}`
  315. }
  316. }else{
  317. //luaText += `添加基础执行动作\n${str_tab}\t`;
  318. window.alert("未设置基础循环动作");
  319. return;
  320. }
  321. luaText += baseText + timesText + rangText + `\t}\n${str_tab}]]\n${str_tab}local contenthtmltable = downloadByChrome(timeout,chromeTask)`
  322. cm.replaceSelection(luaText);
  323. },
  324. "Esc": function(cm) {
  325. if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
  326. }
  327. }
  328. });
  329. editor_re3 = CodeMirror.fromTextArea($("#stepre3_mirror")[0], {
  330. theme:"solarized light",
  331. lineNumbers: true,
  332. indentUnit:4,
  333. smartIndent:true,
  334. indentWithTabs:true
  335. });
  336. editor_4 = CodeMirror.fromTextArea($("#testcontents")[0], {
  337. theme:"abcdef",
  338. lineNumbers: true,
  339. extraKeys:{
  340. "F11": function(cm) {
  341. cm.setOption("fullScreen", !cm.getOption("fullScreen"));
  342. },
  343. "Esc": function(cm) {
  344. if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
  345. }
  346. }
  347. });
  348. editor_1.setSize("auto","auto");
  349. editor_2.setSize("auto","auto");
  350. editor_3.setSize("auto","auto");
  351. editor_re3.setSize("auto","auto");
  352. editor_4.setSize("auto","300");
  353. }
  354. common.spider.setExpert=function(editor,text){
  355. text=text.substr(text.indexOf("function "));
  356. eval(editor+".setValue("+JSON.stringify(text, null, "\t")+")")
  357. }
  358. common.spider.guideActive=function(name,li){
  359. $(".guide button.active").removeClass("active");
  360. $(".guide button[data-mode="+name+"]").addClass("active");
  361. var target=$(li).find("a").attr("href")+ " fieldset";
  362. $(target).each(function(){
  363. if(name==$(this).attr("data-mode")){
  364. $(this).removeClass("hide");
  365. }else{
  366. $(this).addClass("hide")
  367. }
  368. });
  369. }
  370. common.spider.model={}
  371. common.spider.getModel=function(func){
  372. $.ajax({
  373. url:"/center/model",
  374. method:"post",
  375. success:function(d){
  376. common.spider.model=d;
  377. for(var name in d){
  378. var option=$("<option>");
  379. option.val(name);
  380. option.text(name);
  381. $("#model").append(option);
  382. }
  383. if(func){
  384. if (models!="" && typeof(models)!="object"){
  385. models=JSON.parse(models)
  386. func(models.model);
  387. }else{
  388. models={};
  389. func();
  390. }
  391. }
  392. }
  393. })
  394. }
  395. common.spider.json=[];
  396. common.spider.test=function(data,func){
  397. $.ajax({
  398. url:"/center/run",
  399. method:"post",
  400. data:data,
  401. success:function(rs){
  402. if(func){
  403. func(rs);
  404. if(rs["msg"] == "附件中含有乱码"){
  405. showMsg("附件中含有乱码!!",function(){});
  406. }
  407. }else{
  408. common.maskHide();
  409. showMsg("超时",function(){});
  410. }
  411. },
  412. error: function (XMLHttpRequest, textStatus, errorThrown) {
  413. common.spider.error(XMLHttpRequest, textStatus, errorThrown);
  414. },
  415. })
  416. }
  417. common.spider.error = function (XMLHttpRequest, textStatus, errorThrown) {
  418. common.maskHide();
  419. alert(`XMLHttpRequest.status : ${XMLHttpRequest.status}\ntextStatus : ${textStatus}`);
  420. };
  421. common.spider.setModel=function(name,p){
  422. if(!name){
  423. name=$("#model").val();
  424. }
  425. var modelbody=$("#model-body .others");
  426. modelbody.children().remove();
  427. var model=common.spider.model[name];
  428. if(model){
  429. for(var k in model){
  430. var div=$("<div class='form-group'></div>");
  431. var label=$("<label class='col-sm-4 control-label'>"+model[k]+"</label>");
  432. var c_div=$("<div class='col-md-7'></div>");
  433. if(model[k]=="省份"){
  434. var select=$("<select class='form-control' onchange='getcity($(this).val())'></select>")
  435. select.attr("name",k);
  436. select.attr("id",k);
  437. for(var i in common.spider.json){
  438. var field=common.spider.json[i];
  439. for(name in field){
  440. var option=$("<option value='"+name+"'>"+name+"</option>")
  441. select.append(option);
  442. }
  443. }
  444. modelbody.append(div.append(label).append(c_div.append(select)));
  445. }else if(model[k]=="城市"){
  446. var select=$("<select class='form-control' onchange='cleardistrict()'></select>")
  447. select.attr("name",k);
  448. select.attr("id",k);
  449. modelbody.append(div.append(label).append(c_div.append(select)));
  450. }else{
  451. var input=$("<input type='text' class='form-control'/>");
  452. input.attr("name",k);
  453. // if(k == "district"){
  454. // input.attr("disabled",true);
  455. // }
  456. input.attr("id",k);
  457. input.attr("placeholder",model[k]);
  458. modelbody.append(div.append(label).append(c_div.append(input)));
  459. }
  460. }
  461. $("#area").prepend('<option value="">--请选择--</option>')
  462. if(models!=""){
  463. if(typeof(models)!="object"){
  464. models=JSON.parse(models);
  465. }
  466. for(var k in models){
  467. if(p && k=="model"){
  468. }else if(k=="city"){
  469. getcity(models["area"],models[k])
  470. if(models[k]!=""){
  471. $("#"+k).prepend('<option selected value="'+models[k]+'">'+models[k]+'</option>')
  472. }
  473. }else{
  474. $("#"+k).val(models[k]);
  475. }
  476. }
  477. }
  478. }
  479. return true
  480. }
  481. function getcity(area,city){
  482. $("#city").find("option").remove();
  483. $("#city").append('<option value="">--请选择--</option>')
  484. $.ajax({
  485. url:"/center/getCity",
  486. method:"post",
  487. data:{"area":area},
  488. success:function(r){
  489. for(var i in r){
  490. if(r[i]!=city){
  491. $("#city").append('<option value="'+r[i]+'">'+r[i]+'</option>')
  492. }
  493. }
  494. }
  495. })
  496. }
  497. function cleardistrict(){
  498. $("#district").val("");
  499. }
  500. common.spider.upstate=function(code){
  501. if(!issave){
  502. alert("请保存爬虫!")
  503. return
  504. }
  505. var id=$("#spiderCode").val();
  506. showConfirm("是否提交?\n完成后将不能更改", function() {
  507. common.spider.save_unnew();
  508. $.get("/center/spider/upstate?state=1&code="+id,function(r){
  509. if (r["istotask"]){
  510. window.location.href = "/center/task/edit/"+r["taskid"]+"__2";
  511. }else{
  512. $(window).unbind('beforeunload');
  513. window.location.href = "/center";
  514. }
  515. })
  516. })
  517. }
  518. common.spider.save=function(a,b){
  519. var base=common.form.serializeArray("baseinfo");
  520. if(window.location.pathname=="/center/spider"){
  521. $.get("/center/spider/isrepeat?code="+base["Base.SpiderCode"],function(r){
  522. if(r=="y"){
  523. var y=window.confirm("检测到您处于新建页面,爬虫代码已重复,确定覆盖已有爬虫?")
  524. if(!y){
  525. return false
  526. }
  527. }
  528. })
  529. }
  530. common.spider.save_unnew();
  531. }
  532. common.spider.upload=function(code){
  533. var url="/center/spider/upstate?state=3&code="+code;
  534. showConfirm("审核通过?", function() {
  535. common.maskShow("正在处理...");
  536. $.get(url,function(res){
  537. common.maskHide();
  538. if(res["err"]==""){
  539. showTip("处理成功",500,function(){});
  540. window.location.href = "/center";
  541. }else{
  542. showMsg(res["err"],function(){});
  543. }
  544. })
  545. });
  546. }
  547. common.spider.save_unnew=function(){
  548. var base=common.form.serializeArray("baseinfo");//基本参数
  549. var Step1=common.form.serializeArray("Step1");//发布时间
  550. var Step2=common.form.serializeArray("Step2");//列表页
  551. var Step3=common.form.serializeArray("Step3");//详情页
  552. var Stepre3=common.form.serializeArray("Stepre3");
  553. //设置types
  554. Step1["Step1.types"]=$("[href='#tab_1']").parent().attr("data-mode");
  555. Step1["Step1.types"]=Step1["Step1.types"]=="guide"?"0":"1"
  556. var Step2_type = $("[href='#tab_2']").parent().attr("data-mode");
  557. if (Step2_type === "chrome"){
  558. Step1["Step2.types"]="2"
  559. }else if (Step2_type === "expert"){
  560. Step1["Step2.types"]="1"
  561. }else if (Step2_type === "guide"){
  562. Step1["Step2.types"]="0"
  563. }
  564. var Step3_type = $("[href='#tab_3']").parent().attr("data-mode");
  565. if (Step3_type === "chrome"){
  566. Step1["Step3.types"]="2"
  567. }else if (Step3_type === "expert"){
  568. Step1["Step3.types"]="1"
  569. }else if (Step3_type === "guide"){
  570. Step1["Step3.types"]="0"
  571. }
  572. Stepre3["StepRe3.Checked"] = $("#copyTab").prop('checked');//是否复制三级页
  573. var all=$.extend({},base,Step1,Step2,Step3,Stepre3);
  574. $.ajax({
  575. url:"/center/save",
  576. method:"post",
  577. data:all,
  578. async : false,
  579. success:function(r){
  580. if (r["ok"]){
  581. if (r["msg"]){
  582. showMsg(r["msg"],function(){});
  583. }
  584. issave = true;
  585. common.spider.saveTip("保存成功");
  586. if(window.location.pathname=="/center/spider"){
  587. $(window).unbind('beforeunload');
  588. window.location.href="/center/spider/edit/"+r["code"]+"__";
  589. }
  590. $(window).unbind('beforeunload');
  591. }else{
  592. showMsg(r["msg"],function(){});
  593. }
  594. }
  595. })
  596. }
  597. common.spider.saveTip=function(t){
  598. var d=new Date();
  599. t=t+" "+d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()+" "+d.getHours()+":"+(d.getMinutes()<10?"0"+d.getMinutes():d.getMinutes())+":"+(d.getSeconds()<10?"0"+d.getSeconds():d.getSeconds());
  600. $(".callout-a").text(t);
  601. }
  602. common.passwords=function(){
  603. if($("#passwords").parent().parent().hasClass("hide")){
  604. $("#passwords").parent().parent().removeClass("hide");
  605. return;
  606. }else{
  607. var v=$("#passwords").val();
  608. if(!v || v==""){
  609. alert("密码不能为空")
  610. }else{
  611. $.get("/center/password?password="+v,function(r){
  612. alert(r);
  613. $("#passwords").parent().parent().addClass("hide");
  614. })
  615. window.location.href="/center/logout"
  616. }
  617. }
  618. }
  619. function setCookie(name,value){
  620. var expdate = new Date(); //初始化时间
  621. expdate.setTime(expdate.getTime() + 30 * 60 * 1000); //时间
  622. document.cookie = name+"="+value+";expires="+expdate.toGMTString()+";path=/";
  623. }
  624. function getCookie(c_name){
  625. if (document.cookie.length>0){
  626. c_start=document.cookie.indexOf(c_name + "=")
  627. if (c_start!=-1){
  628. c_start=c_start + c_name.length+1
  629. c_end=document.cookie.indexOf(";",c_start)
  630. if (c_end==-1) c_end=document.cookie.length
  631. return unescape(document.cookie.substring(c_start,c_end))
  632. }
  633. }
  634. return ""
  635. }
  636. function statusbox(){
  637. if($(".checkstatusbox").is(":hidden")){
  638. $(".checkstatusbox").removeClass("hide");
  639. }else{
  640. $(".checkstatusbox").addClass("hide");
  641. }
  642. }
  643. common.spider.checkStatus=function(t,code){
  644. var node = $(t).parent().find("input[type='radio']:checked").val()
  645. common.maskShow("正在测试,这可能需要一点时间");
  646. $.get("/center/spider/pass?code="+code+"&node="+node,function(r){
  647. if(r==null){
  648. r=[false,false,false,false]
  649. showMsg("脚本解析失败!!",function(){});
  650. }
  651. var allstatus=true;
  652. if(r[0]){
  653. $("#status_base").removeClass("text-danger").addClass("text-success").text("已通过");
  654. }else{
  655. $("#status_base").removeClass("text-success").addClass("text-danger").text("未通过");
  656. allstatus=false;
  657. }
  658. if(r[1]){
  659. $("#status_time").removeClass("text-danger").addClass("text-success").text("已通过");
  660. }else{
  661. $("#status_time").removeClass("text-success").addClass("text-danger").text("未通过");
  662. allstatus=false;
  663. }
  664. if(r[2]){
  665. $("#status_list").removeClass("text-danger").addClass("text-success").text("已通过");
  666. }else{
  667. $("#status_list").removeClass("text-success").addClass("text-danger").text("未通过");
  668. allstatus=false;
  669. }
  670. if(r[3]){
  671. $("#status_content").removeClass("text-danger").addClass("text-success").text("已通过");
  672. }else{
  673. $("#status_content").removeClass("text-success").addClass("text-danger").text("未通过");
  674. allstatus=false;
  675. }
  676. if(allstatus){
  677. $("#status_all").removeClass("text-danger").addClass("text-success").text("已通过");
  678. }else{
  679. $("#status_all").removeClass("text-success").addClass("text-danger").text("未通过");
  680. }
  681. $(".callout-a").text("下载请求:"+r[4]+"次,时间函数:"+r[5]+"次,列表函数:"+r[6]+"次 "+r[8]+"条信息,内容函数:"+r[7]+"次");
  682. common.maskHide();
  683. $("#jsonClick")[0].click();
  684. //window.open("/center/spider/json");
  685. //window.open("https://editor.qmx.top/center/spider/json");
  686. })
  687. }
  688. common.spider.checkTime=function(code){
  689. $.ajax({
  690. url:"/center/spider/checktime",
  691. method:"post",
  692. data:{"code":code},
  693. success:function(b){
  694. if(b){
  695. showMsg("success",function(){});
  696. ttable.ajax.reload( null, false );
  697. }
  698. }
  699. })
  700. }
  701. Date.prototype.format=function(format){var o={"M+":this.getMonth()+1,"d+":this.getDate(),"h+":this.getHours(),"m+":this.getMinutes(),"s+":this.getSeconds(),"q+":Math.floor((this.getMonth()+3)/3),"S":this.getMilliseconds()};if(/(y+)/.test(format)){format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length))}for(var k in o){if(new RegExp("("+k+")").test(format)){format=format.replace(RegExp.$1,RegExp.$1.length==1?o[k]:("00"+o[k]).substr((""+o[k]).length))}}return format};function getDate(l){var date=new Date(l);pattern="yyyy-MM-dd hh:mm:ss";return date.format(pattern)};