common.js 25 KB

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