qfw.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  1. var hasNewActive = new Date() >= Date.parse(new Date("2015/12/14 00:00:00")) && new Date() < Date.parse(new Date("2016/2/1 00:00:00"));
  2. //网站初始化状态
  3. var webSiteInitFlag = true;
  4. //登录状态 false--未登录,true--已登录
  5. var isLogined = false;
  6. //0默认,1微官网,2员工邀请,3绑定微信,4注册,5预约,6投标,7登录之后跳转到用户中心首页
  7. var loginBackType = null;
  8. //登录完之后强制刷新
  9. var compulsoryreRresh = false;
  10. //顶部是否加载完毕
  11. var topLoadOver = false;
  12. //表单验证的参数
  13. var cssctlObj = null;
  14. var ValidDatatype = {
  15. //正数
  16. "f": function(gets,obj,curform,regxp){
  17. return !!gets.match("^[0-9].*$");
  18. },
  19. //手机号
  20. "m": function(gets,obj,curform,regxp){
  21. return !!gets.match("^[1][3-9][0-9]{9}$");
  22. },
  23. //邮箱
  24. "e": function(gets,obj,curform,regxp){
  25. return !!gets.match("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
  26. },
  27. "*4": /^[^\s]{4,4}$/,//四位任意字符
  28. "n4": /^\d{4,4}$/, //四位数字
  29. "n6": /^\d{6,6}$/, //六位数字
  30. "ns6-14": function(gets,obj,curform,regxp){//6~14个字符的数字、字母、可输入特殊字符的两种组合
  31. var msg = "长度为6~14个字符的数字、字母组合,区分大小写";
  32. if(obj.attr("recheck")){
  33. msg = "两次输入的密码不一致";
  34. }
  35. if(gets.length == 0){
  36. return false;
  37. }else if(gets.indexOf(" ") > -1){
  38. return "密码中不能包含有空格";
  39. }else if(regxp.n.test(gets) || /^[A-Za-z]+$/.test(gets)){
  40. return msg;
  41. }else if(/((?=[\x21-\x7e]+)[^A-Za-z0-9])/.test(gets) && !/\d/.test(gets) && !/[\u4E00-\u9FA5\uf900-\ufa2d\w\.\s]/.test(gets)){
  42. return msg;
  43. }
  44. return true;
  45. }
  46. }
  47. Date.prototype.Format = function (fmt) { //author: meizz
  48. var o = {
  49. "M+": this.getMonth() + 1, //月份
  50. "d+": this.getDate(), //日
  51. "h+": this.getHours(), //小时
  52. "m+": this.getMinutes(), //分
  53. "s+": this.getSeconds(), //秒
  54. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  55. "S": this.getMilliseconds() //毫秒
  56. };
  57. if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  58. for (var k in o)
  59. if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  60. return fmt;
  61. }
  62. //浏览器窗口大小变化重新加载
  63. window.onresize=webSiteInit;
  64. serializeObject = function(form) {
  65. var o = {};
  66. $.each(form.serializeArray(),function() {
  67. if (this['value']) {
  68. o[this['name']] = this['value'];
  69. }
  70. });
  71. return o;
  72. };
  73. //
  74. $(function(){
  75. if(webSiteInitFlag){
  76. webSiteInit();
  77. }
  78. });
  79. function makeData(d,_this,b){
  80. var s=$("#immediately")
  81. var res=makeImmediately(d,b);
  82. if(res){
  83. if(s.size()==0){
  84. var w=_this[0].offsetWidth;
  85. s=$("<div id='immediately' style='position:absolute;top:40px;display:none;z-index:9999;width:"+w+"px'/>")
  86. s.appendTo(_this.parent())
  87. _this.blur(function(event){
  88. //$("#immediately").animate({opacity:"toggle"},700);
  89. })
  90. }
  91. s.html(res).show()
  92. }else{
  93. s.html("").hide()
  94. }
  95. }
  96. //即时搜索时的事件处理
  97. function imFind(obj){
  98. var val=$(obj).val();
  99. if(val){
  100. $.post("/search/sim",$.extend(serializeObject($("#searchform")),{words:val}),function(d){
  101. makeData(d,$(obj))
  102. })
  103. }else{
  104. if(isLogined){
  105. $.post("/mermber/searchlog",function(d){
  106. makeData(d,$(obj),true)
  107. })
  108. }else{
  109. var s=$("#immediately")
  110. if(s.size()==1){
  111. s.html("").hide()
  112. }
  113. }
  114. }
  115. return false;
  116. }
  117. //调用搜索按钮查询
  118. function iq(obj){
  119. //$("#immediately").stop(true,true).hide();
  120. var namew=$("input[name='words']").val($(obj).text())
  121. var nf=namew.closest("form");
  122. if(nf.size()==1){
  123. nf.submit();
  124. }else{
  125. $("#c_words").click();
  126. }
  127. return false;
  128. }
  129. //删除历史数据
  130. function delLogs(){
  131. $.get("/mermber/delLog");
  132. }
  133. var delLog="<div style='text-align:right;text-decoration:underline;cursor:auto'><small style='cursor:pointer' class='text-muted' onclick='delLogs()'>删除历史记录</small></div>";
  134. //组织数据
  135. function makeImmediately(data,b){
  136. var res="";
  137. if(data&&data.length>0&&!(typeof data == "string")){
  138. for(var i=0;i<data.length;i++){
  139. var ds=data[i].split("_")
  140. //res+="<div onclick='iq(this)'>"+ds[0]+"</div>"
  141. if($("#loginStatus").length == 1){
  142. res+="<div onclick='window.open(\"/wx/enterprise/"+ds[1]+".html\")'>"+ds[0]+"</div>"
  143. }else{
  144. res+="<div onclick='window.open(\"/enterprise/"+ds[1]+".html\")'>"+ds[0]+"</div>"
  145. }
  146. }
  147. if(b){
  148. res+=delLog
  149. }
  150. }
  151. return res;
  152. }
  153. //网站初始化的一些设置
  154. function webSiteInit(){
  155. var waitTopLoadOver = null;
  156. var clear_waitTopLoadOver = function(){
  157. if(waitTopLoadOver != null){
  158. clearInterval(waitTopLoadOver);
  159. waitTopLoadOver = null;
  160. }
  161. }
  162. try{
  163. var setBottomPadding = function(){
  164. $("#qfw-bottom").css("padding-top","0px");
  165. var testBottom_offsetTop = $("#testBottom").offset().top;
  166. var windowHeight = $(window).height();
  167. if (windowHeight < document.body.clientHeight){
  168. windowHeight = document.body.clientHeight;
  169. }
  170. if(testBottom_offsetTop < windowHeight){
  171. $("#qfw-bottom").css("padding-top",(windowHeight - testBottom_offsetTop)+"px");
  172. }
  173. }
  174. //设置底部不留空白
  175. if($("#qfw-bottom").length > 0){
  176. if(typeof(topLoadOver) != "undefined") {
  177. waitTopLoadOver = setInterval(function(){
  178. if(topLoadOver){
  179. clear_waitTopLoadOver();
  180. setBottomPadding();
  181. }
  182. },100);
  183. setTimeout(clear_waitTopLoadOver,5000);
  184. }else{
  185. setBottomPadding();
  186. }
  187. }
  188. //设置左右布局
  189. if($("#loginStatus").is(":visible") && $(".a-content").length == 1 && $(".a-c-left").length == 1 && $(".a-c-right").length == 1){
  190. $(".a-c-left").css("width",$(".a-content").width() - 265);
  191. if($(".a-content").children(".clearfix").length == 0){
  192. $(".a-content").append('<div class="clearfix"></div>');
  193. }
  194. }
  195. //设置用户用心左右布局
  196. var memberLeft_marginLeft = 0;
  197. if($(".member-content").length == 1 && $(".member-content>.member-left").length == 1 && $(".member-content>.member-right").length == 1){
  198. $(".member-right").width($(".member-content").width() - 200 - 15);
  199. if($(".member-content").children(".clearfix").length == 0){
  200. $(".member-content").append('<div class="clearfix"></div>');
  201. }
  202. }
  203. }catch(e){
  204. clear_waitTopLoadOver();
  205. }
  206. }
  207. //发送验证码
  208. var SendIdentCode = {
  209. name: null,
  210. flag: false,
  211. init: function(obj,userName,parentId,c,checkCodeObj){
  212. var sendType = null;
  213. if(ValidDatatype.m(userName)){
  214. sendType = "短信";
  215. }else if(ValidDatatype.e(userName)){
  216. sendType = "邮箱";
  217. }else{
  218. return;
  219. }
  220. this.name = userName;
  221. var thisClass = this;
  222. var parentNode = $((parentId?(parentId+" "):"")+".afterSendIdentCode").show();
  223. var childNode = parentNode.children("div");
  224. if(c == -1){
  225. thisClass.flag = true;
  226. $(obj).attr("disabled","disabled");
  227. childNode.addClass("text-primary").html('抱歉,您今天发送的验证码次数已超限制,请明天再来。');
  228. return;
  229. }
  230. thisClass.flag = false;
  231. if(checkCodeObj){
  232. checkCodeObj.attr("disabled","disabled");
  233. }
  234. $(obj).addClass("text-muted").removeClass("cursor-pointer").text("已发送");
  235. $(obj).css("background-color","ccc");
  236. $(obj).css("border","1px solid #ccc");
  237. var count = 59;
  238. childNode.removeClass("text-primary").text("校验码已通过"+sendType+"发出,如果没有收到,您可在"+count--+"秒后重新发送");
  239. var intgerval = setInterval(function (){
  240. if(count == 0){
  241. if(checkCodeObj){
  242. checkCodeObj.removeAttr("disabled");
  243. }
  244. $(obj).removeClass("text-muted").addClass("cursor-pointer");
  245. $(obj).text("获取"+sendType+"验证码");
  246. parentNode.hide();
  247. clearInterval(intgerval);
  248. $(obj).css("background-color","FF5A5F");
  249. $(obj).css("border","1px solid #FF5A5F");
  250. $(obj).css("color","ffffff");
  251. }else{
  252. childNode.removeClass("text-primary").text("校验码已通过"+sendType+"发出,如果没有收到,您可在"+count--+"秒后重新发送");
  253. }
  254. },1000);
  255. }
  256. }
  257. //绑定表单验证
  258. function bindValidForm(setting,clas,ajaxConfig){
  259. $("[datatype]").focus(function(){
  260. if($(this).val().length == 0){
  261. var obj = $(this).parent("div").next().find(".Validform_checktip");
  262. var checktipText = obj.text();
  263. if(typeof(obj.attr("checktip")) != "undefined"){
  264. checktipText = obj.attr("checktip");
  265. }
  266. if(checktipText.length > 0 && !obj.hasClass("Validform_wrong") && !obj.hasClass("Validform_right")){
  267. obj.attr("checktip",obj.text()).text(checktipText).show();
  268. }
  269. }
  270. });
  271. //表单input获得焦点后,右侧出现提示信息
  272. var settings = {
  273. tiptype:2,
  274. tiptype:function(msg,o,cssctl){
  275. var obj = $(o.obj).parent().next().children(".Validform_checktip")
  276. cssctlObj = cssctl;
  277. cssctl(obj,o.type);
  278. obj.text(msg).show();
  279. },
  280. datatype:ValidDatatype
  281. };
  282. if(setting){
  283. $.extend(settings,setting);
  284. }
  285. var validForm = $("."+(clas?clas:"validForm")).Validform(settings);
  286. validForm.tipmsg.r=" ";
  287. validForm.tipmsg.c=" ";
  288. var ajaxUrl = {
  289. async:false,
  290. error:function (data,obj){
  291. $(obj).parent().next().children(".Validform_wrong").text("服务器端错误");
  292. }
  293. }
  294. if(ajaxConfig){
  295. $.extend(ajaxUrl,ajaxConfig);
  296. }
  297. validForm.config({
  298. ajaxurl:ajaxUrl
  299. });
  300. return validForm;
  301. }
  302. function errorProcess(obj,msg){
  303. obj = obj.parent().next().children(".Validform_checktip")
  304. cssctlObj(obj,3);
  305. obj.text(msg).show();
  306. }
  307. //替换input中的非数字
  308. function rePlaceUnDigital(obj){
  309. if(/[^\d]/g.test(obj.value)){
  310. var pos = getCursorPos(obj);
  311. var array = obj.value.split("");
  312. for(var i in array){
  313. if(/[^\d]/g.test(array[i])){
  314. pos--;
  315. }
  316. }
  317. obj.value = obj.value.replace(/[^\d]/g,'');
  318. setCursorPos(obj,pos);
  319. }
  320. }
  321. //替换input中的空格
  322. function rePlaceSpace(obj){
  323. if(obj.value.indexOf(' ')>-1){
  324. var pos = getCursorPos(obj);
  325. var array = obj.value.split("");
  326. for(var i in array){
  327. if(array[i] == " "){
  328. pos--;
  329. }
  330. }
  331. obj.value = obj.value.replace(new RegExp(' ','gm'),'');
  332. setCursorPos(obj,pos);
  333. }
  334. }
  335. /**
  336. * 设置光标在短连接输入框中的位置
  337. * @param inpObj 输入框
  338. * @param pos
  339. */
  340. function setCursorPos(inpObj, pos){
  341. if(navigator.userAgent.indexOf("MSIE") > -1){
  342. var range = document.selection.createRange();
  343. var textRange = inpObj.createTextRange();
  344. textRange.moveStart('character',pos);
  345. textRange.collapse();
  346. textRange.select();
  347. }else{
  348. inpObj.setSelectionRange(pos,pos);
  349. }
  350. }
  351. /**
  352. * 获取光标在短连接输入框中的位置
  353. * @param inpObj 输入框
  354. */
  355. function getCursorPos(inpObj){
  356. if(navigator.userAgent.indexOf("MSIE") > -1) { // IE
  357. var range = document.selection.createRange();
  358. range.text = '';
  359. range.setEndPoint('StartToStart',inpObj.createTextRange());
  360. return range.text.length;
  361. } else {
  362. return inpObj.selectionStart;
  363. }
  364. }
  365. //获取cookie
  366. function getCookie(name){
  367. var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
  368. if(arr=document.cookie.match(reg))
  369. return unescape(arr[2]);
  370. else
  371. return null;
  372. }
  373. //QQ登陆
  374. function qqLogin(){
  375. window.location.href = 'https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101228008&redirect_uri=http%3A%2F%2Fwww.qimingxing.info%2FqqCallBack%3FloginBackType='+loginBackType+'&scope=get_user_info';
  376. }
  377. //微信登录
  378. function weixinLogin(){
  379. window.location.href = 'https://open.weixin.qq.com/connect/qrconnect?appid=wx5553bf4febae85e4&redirect_uri=http%3a%2f%2fwww.qimingxing.info/weixinCallBack%3FloginBackType='+loginBackType+'&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect';
  380. }
  381. /**
  382. * 正则表达式实现endWith效果函数
  383. * @param str 要判断的字符
  384. **/
  385. String.prototype.endWith = function(str){
  386. var reg = new RegExp(str+"$");
  387. return reg.test(this);
  388. }
  389. /**
  390. * 正则表达式实现startWith效果函数
  391. * @param str 要判断的字符
  392. **/
  393. String.prototype.startWith = function(str){
  394. var reg = new RegExp("^"+str);
  395. return reg.test(this);
  396. }
  397. //动态加载css
  398. function addCssByLink(url){
  399. var links=document.getElementsByTagName('link')
  400. for(var i=0;i<links.length;i++){
  401. if(links[i].href&&links[i].href.indexOf(url)>-1){
  402. return;
  403. }
  404. }
  405. var doc=document;
  406. var link=doc.createElement("link");
  407. link.setAttribute("rel", "stylesheet");
  408. link.setAttribute("type", "text/css");
  409. link.setAttribute("href", url);
  410. var heads = doc.getElementsByTagName("head");
  411. if(heads.length)
  412. heads[0].appendChild(link);
  413. else
  414. doc.documentElement.appendChild(link);
  415. }
  416. //动态加载js
  417. function loadJS(url, success){
  418. var scripts=document.getElementsByTagName('script')
  419. for(var i=0;i<scripts.length;i++){
  420. if(scripts[i].src&&scripts[i].src.indexOf(url)>-1){
  421. if(success) success();
  422. return;
  423. }
  424. }
  425. var domScript = document.createElement('script');
  426. domScript.src = url;
  427. success = success || function(){};
  428. domScript.onload = domScript.onreadystatechange = function() {
  429. if (!this.readyState || 'loaded' === this.readyState || 'complete' === this.readyState) {
  430. success();
  431. this.onload = this.onreadystatechange = null;
  432. //this.parentNode.removeChild(this);
  433. }
  434. }
  435. document.getElementsByTagName('head')[0].appendChild(domScript);
  436. }
  437. //判断对象是否为空对象{}
  438. function isNullObj(obj){
  439. for(var i in obj){
  440. if(obj.hasOwnProperty(i)){
  441. return false;
  442. }
  443. }
  444. return true;
  445. }
  446. //根据id去后台查询评论个数、投标状态
  447. function advertAjaxRqe(position){
  448. var data = "position="+position;
  449. $("#hotDemand>div").each(function(){
  450. var id = $(this).attr("data-id");
  451. if(id != ""){
  452. data += "&demandId="+id;
  453. }
  454. });
  455. if(data != ""){
  456. $.post("/front/advertAjaxRqe",data,function(r){
  457. if(r.demand){
  458. var demand = r.demand;
  459. for(var i in demand){
  460. var status = demand[i].status;
  461. var html = null;
  462. if(status == 1){
  463. html = '<img src="/images/u385.png"/>';
  464. }else if(status == 2){
  465. html = '<img src="/images/u347.png"/>';
  466. }else if(status == 3){
  467. html = '<span class="a-bg-gray">任务超时</span>';
  468. }else if(status == 4){
  469. html = '<span class="a-bg-gray">已撤销</span>';
  470. }
  471. if(html != null){
  472. $('#hotDemand [data-id="'+demand[i].id+'"] .a-com-last').html(html);
  473. }
  474. if(demand[i].online == "y"){
  475. $('#hotDemand [data-id="'+demand[i].id+'"]>.a-com-name>i').addClass("text-primary");
  476. }
  477. }
  478. }
  479. });
  480. }
  481. }
  482. //页面中分享功能
  483. function pcShare(){
  484. this.flag = false;
  485. var thisClass = this;
  486. $("body").click(function(e){
  487. if(e.target.id == "pcShare"){
  488. $("#pcShare-content").show();
  489. if(!thisClass.flag){
  490. $("#pcShare-content").after('<div class="bdsharebuttonbox"><a href="#" id="bds_weixin" data-cmd="weixin" title="分享到微信">微信扫码</a><a href="#" id="bds_tsina" data-cmd="tsina" title="分享到新浪微博">新浪微博"</a><a href="#" id="bds_tqq" data-cmd="tqq" title="分享到腾讯微博">腾讯微博</a><a href="#" id="bds_qzone" data-cmd="qzone" title="分享到QQ空间">QQ空间</a><a href="#" id="bds_douban" data-cmd="douban" title="分享到豆瓣网">豆瓣</a></div>');
  491. loadJS("http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion="+~(-new Date()/36e5),function(){
  492. var interval = setInterval(function(){
  493. if($("#bdshare_weixin_qrcode_dialog").length == 1){
  494. clearInterval(interval);
  495. $("#share-weixin").append($("#bdshare_weixin_qrcode_dialog").find("table"));
  496. $("#bdshare_weixin_qrcode_dialog").remove();
  497. }else{
  498. document.getElementById('bds_weixin').click();
  499. }
  500. },500);
  501. setTimeout(function(){
  502. clearInterval(interval);
  503. },60000);
  504. });
  505. $("#share-tsina").click(function(e){
  506. document.getElementById('bds_tsina').click();
  507. $("#pcShare-content").hide();
  508. });
  509. $("#share-tqq").click(function(e){
  510. document.getElementById('bds_tqq').click();
  511. $("#pcShare-content").hide();
  512. });
  513. $("#share-qzone").click(function(e){
  514. document.getElementById('bds_qzone').click();
  515. $("#pcShare-content").hide();
  516. });
  517. $("#share-douban").click(function(e){
  518. document.getElementById('bds_douban').click();
  519. $("#pcShare-content").hide();
  520. });
  521. thisClass.flag = true;
  522. }
  523. }else if(e.target.id != "pcShare-content" && $(e.target).parents(".b-pcshare-content").attr("id") != "pcShare-content" && !$(e.target).hasClass("bdsharebuttonbox") && !$(e.target).parent().hasClass("bdsharebuttonbox")){
  524. $("#pcShare-content").hide();
  525. }
  526. });
  527. }