vip_index_new.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610
  1. $(function () {
  2. // 格式化金钱的函数
  3. // s: 金额(number) 必传
  4. // n: 保留小数的位数(int:0-100)
  5. function formatMoney(s, n) {
  6. if (n === undefined) {
  7. n = -1
  8. } else {
  9. n = n > 0 && n <= 20 ? n : 2;
  10. }
  11. var intS = parseInt(s)
  12. var point = '.'
  13. var left;
  14. var right;
  15. s = parseFloat((s + '').replace(/[^\d\.-]/g, ''))
  16. // 没传n,默认(如果为整数,则不保留小数。如果为浮点数,则保留两位小数)
  17. if (n === -1) {
  18. if (s === intS) {
  19. n = 0
  20. right = ''
  21. point = ''
  22. } else {
  23. n = 2
  24. s = s.toFixed(n);
  25. right = s.split('.')[1];
  26. }
  27. s = s + ''
  28. left = s.split('.')[0].split("").reverse();
  29. } else {
  30. s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + '';
  31. left = s.split('.')[0].split('').reverse();
  32. right = s.split('.')[1];
  33. }
  34. t = "";
  35. for (i = 0; i < left.length; i++) {
  36. t += left[i] + ((i + 1) % 3 == 0 && (i + 1) != left.length ? ',' : '');
  37. }
  38. var money = t.split('').reverse().join('') + point + right;
  39. return money;
  40. }
  41. //项目匹配开关
  42. var checkedflag = true;
  43. function setprojectmatch(index) {
  44. if (checkedflag) {
  45. checkedflag = false;
  46. $.post("/subscribepay/afterPay/setUserInfo", {pageType: "projectMatch", pmindex: index}, function (r) {
  47. if (r.flag) {
  48. checkedflag = true;
  49. reqData.projectmatch = index;
  50. sessionStorage.setItem('sub_vip_state', JSON.stringify(reqData))
  51. }
  52. })
  53. }
  54. }
  55. function getDataWitXHR() {
  56. $DoPost('/subscribepay/vipsubscribe/getSubBuyMsg', {}, function (res) {
  57. if (!res.success) return;
  58. res.data.oldArea = res.data.area;
  59. res.data.oldIndustry = res.data.industry;
  60. var globalStateStr = JSON.stringify(res.data);
  61. sessionStorage.setItem('sub_vip_state', globalStateStr);
  62. globalState = JSON.parse(globalStateStr);
  63. init(res.data)
  64. })
  65. }
  66. //获取选择
  67. function getCount(area, industry) {
  68. if (industry[0] === "全部行业") industry = [];
  69. if (area["全国"]) area = {};
  70. //计算地区数量
  71. var count = {
  72. "areacount": -1, //省份数量
  73. "buyerclasscount": -1,
  74. "citys": [] //购买省份中城市数量
  75. };
  76. //行业
  77. if (industry.length != 0) {
  78. count.buyerclasscount = industry.length
  79. }
  80. //地区
  81. if (!$.isEmptyObject(area)) {
  82. count.areacount = 0;
  83. for (var i in area) {
  84. var citys = area[i];
  85. var thisLen = citys.length;
  86. if (thisLen === 0) {
  87. count.areacount++
  88. } else {
  89. count.citys.push(thisLen)
  90. }
  91. }
  92. }
  93. return count
  94. }
  95. // 设置已选择的区域和行业
  96. /**
  97. * selected = {
  98. * areacount: 2,
  99. * buyerclasscount: 2,
  100. * citys: [1, 2, 3]
  101. * }
  102. */
  103. function setSelectedAreaAndInd(selected) {
  104. // selected = {
  105. // areacount: 2,
  106. // buyerclasscount: 2,
  107. // citys: [1, 2, 3]
  108. // }
  109. // 设置已选择区域
  110. var citySum = arrSum(selected.citys)
  111. var text = {
  112. p: selected.areacount + '个省',
  113. c: citySum + '个市',
  114. s: '分布在' + selected.citys.length + '个省内'
  115. }
  116. if (selected.areacount === -1) {
  117. $('.vip-body .area .selected-area').text('全国')
  118. } else {
  119. if (selected.areacount === 0) {
  120. $('.vip-body .area .selected-area').text(text.c + '(' + text.s + ')')
  121. } else if (selected.citys.length === 0) {
  122. $('.vip-body .area .selected-area').text(text.p)
  123. } else {
  124. $('.vip-body .area .selected-area').text(text.p + '、' + text.c + '(' + text.s + ')')
  125. }
  126. }
  127. // 设置已选择行业
  128. if (selected.buyerclasscount === -1) {
  129. $('.vip-body .industry .selected-industry').text('全行业')
  130. } else {
  131. $('.vip-body .industry .selected-industry').text(selected.buyerclasscount + '个行业')
  132. }
  133. }
  134. // 设置已购买的区域和行业
  135. /**
  136. * buyset = {
  137. * areacount: 2,
  138. * buyerclasscount: 2,
  139. * newcitys: [1, 2, 3]
  140. * }
  141. */
  142. function setBuyAreaAndInd(buySet) {
  143. // 设置已购买区域
  144. var buySetCitySum = arrSum(buySet.newcitys)
  145. var text = {
  146. p: buySet.areacount + '个省',
  147. c: buySetCitySum + '个市',
  148. s: '分布在' + buySet.newcitys.length + '个省内'
  149. }
  150. if (buySet.areacount === -1) {
  151. $('.vip-body .area .buy-set-area').text('全国')
  152. } else {
  153. if (buySet.areacount === 0) {
  154. $('.vip-body .area .buy-set-area').text(text.c + '(' + text.s + ')')
  155. } else if (buySet.newcitys.length === 0) {
  156. $('.vip-body .area .buy-set-area').text(text.p)
  157. } else {
  158. $('.vip-body .area .buy-set-area').text(text.p + '、' + text.c + '(' + text.s + ')')
  159. }
  160. }
  161. // 设置已选择行业
  162. if (buySet.buyerclasscount === -1) {
  163. $('.vip-body .industry .buy-set-industry').text('全行业')
  164. } else {
  165. $('.vip-body .industry .buy-set-industry').text(buySet.buyerclasscount + '个行业')
  166. }
  167. }
  168. function clearSession() {
  169. sessionStorage.removeItem("vip_index_read");
  170. sessionStorage.removeItem('sub_vip_state');
  171. }
  172. function arrSum(arr) {
  173. var sum = 0
  174. arr.forEach(function (item, i) {
  175. sum += item
  176. })
  177. return sum
  178. }
  179. // picker的显示隐藏
  180. function pickerShow(selector, f) {
  181. if (f) {
  182. // 添加进场动画,并显示
  183. $(selector).find('.weui-mask').removeClass('weui-animate-fade-out').addClass('weui-animate-fade-in')
  184. $(selector).find('.weui-picker').removeClass('weui-animate-slide-down').addClass('weui-animate-slide-up')
  185. $(selector).show(300);
  186. } else {
  187. // 添加离场动画,并隐藏
  188. $(selector).find('.weui-mask').removeClass('weui-animate-fade-in').addClass('weui-animate-fade-out')
  189. $(selector).find('.weui-picker').removeClass('weui-animate-slide-up').addClass('weui-animate-slide-down')
  190. $(selector).hide(300);
  191. }
  192. }
  193. // 项目匹配问号点击事件
  194. $('.project-match .icon-bangzhu').on('click', function () {
  195. var str = '开启后,系统将根据你订阅的关键词自动匹配出相关联的项目,并将相关联项目的后续动态在VIP订阅内一并推送。'
  196. weui.alert(str, {
  197. title: '项目匹配',
  198. className: 'jy-alert',
  199. buttons: [{
  200. label: '我知道了'
  201. }]
  202. });
  203. })
  204. // 计算标准点击事件
  205. $('.billing-list-btn').on('click', function () {
  206. pickerShow('.billing-list-container', true)
  207. })
  208. // 计算标准隐藏
  209. $('.billing-list-container .dialog_hd__close').on('click', function () {
  210. pickerShow('.billing-list-container', false)
  211. })
  212. $('.weui-mask').on('click', function () {
  213. pickerShow('.billing-list-container', false)
  214. })
  215. // 阅读并接受协议前的模拟checkbox点击事件
  216. if (sessionStorage.getItem("vip_index_read") == "1") {
  217. $('.checkbox').addClass("checked")
  218. $('.vip-footer.upgrade .confirm').prop('disabled', false);
  219. }
  220. $('.checkbox').on('click', function () {
  221. $(this).toggleClass('checked');
  222. var state = $(this).hasClass('checked');
  223. $('.vip-footer.upgrade .confirm').prop('disabled', !state);
  224. sessionStorage.setItem("vip_index_read", state ? "1" : "0");
  225. });
  226. // switch点击切换
  227. $('.switch').on('click', function (e) {
  228. var $this = $(this);
  229. var hasChecked = $this.hasClass('checked');
  230. if (!hasChecked) {
  231. $this.addClass('checked');
  232. setprojectmatch(1);
  233. } else {
  234. $this.removeClass('checked');
  235. setprojectmatch(0);
  236. weui.toast('项目匹配已关闭', {
  237. duration: 1500,
  238. className: 'jy-toast',
  239. callback: function () {
  240. console.log('close')
  241. }
  242. });
  243. }
  244. })
  245. //保存取消提示 module 1 修改 2升级
  246. function cancelTip(module) {
  247. weui.dialog({
  248. title: '提示信息',
  249. content: module == 1 ? '所选订阅设置已做修改,返回后修改的设置将不做保存。' : '所选订阅设置已超出购买范围,升级后方才生效,返回后修改的设置将不做保存。',
  250. className: 'jy-dialog',
  251. buttons: [
  252. {
  253. label: module == 1 ? '保存修改' : '立即升级',
  254. type: 'primary',
  255. onClick: function () {
  256. doSubmit();
  257. }
  258. },
  259. {
  260. label: '取消',
  261. type: 'default',
  262. onClick: function () {
  263. clearSession()
  264. window.history.go(-1);
  265. }
  266. }
  267. ]
  268. });
  269. }
  270. function initCycleSelector() {
  271. $('.vip-body .body-item.cycle').on('click', function () {
  272. pickerShow('#time_cycle', true)
  273. })
  274. // 打开dialog
  275. $('#time_cycle .weui-mask').on('click', function () {
  276. pickerShow('#time_cycle', false)
  277. })
  278. // 关闭dialog
  279. $('#time_cycle .box_hd .cancel').on('click', function () {
  280. pickerShow('#time_cycle', false)
  281. })
  282. // 选择完成(确定)按钮的点击事件
  283. $('#enter_period').on('click', function () {
  284. var checkedValue = $('#time_cycle input:radio[name="time"]:checked').val();
  285. var result = null
  286. if (checkedValue == 'month') {
  287. result = $('#number_box_month .month_number').text() + '个月'
  288. } else if (checkedValue == 'year') {
  289. result = $('#number_box_year span.active').attr('data-id') + '年'
  290. }
  291. console.log(result)
  292. $('.vip-body .extend-cycle').show().text('延长订阅周期' + result)
  293. pickerShow('#time_cycle', false)
  294. })
  295. // 1. 对订阅时间选择的input绑定点击事件
  296. $('#time_cycle input:radio[name="time"]').on('click', function (e) {
  297. // 解除确认按钮的锁定
  298. $('#time_cycle .form-btn button').removeAttr('disabled')
  299. if ($(e.target).hasClass('monthly')) {
  300. // 按月订阅
  301. $('#number_box_month').addClass('active');
  302. $('#number_box_year span').removeClass('active');
  303. } else {
  304. // 按年订阅
  305. $('#number_box_month').removeClass('active');
  306. // $('#number_box_year span:eq(0)').addClass('active').siblings().removeClass('active');
  307. }
  308. })
  309. /* --------控制月份number_box的事件 点击加减号触发的事件------- */
  310. $('#number_box_month').on('click', 'button', function (e) {
  311. // 点击加减号让input radio选中
  312. $("#monthly").prop('checked', true);
  313. $('#yearly').prop('checked', false);
  314. $('.number_box span').removeClass('active')
  315. $('#number_box_month').addClass('active');
  316. var $number = $('#number_box_month span.month_number');
  317. var $monthlyInput = $('#monthly');
  318. // 未整理的data数组,里面的值都是字符串
  319. var preData = e.delegateTarget.dataset
  320. var currentNum = parseInt($number.text());
  321. var data = {};
  322. // 把字符串转换成数字
  323. for (var i in preData) {
  324. data[i] = preData[i] - 0
  325. }
  326. if (!$monthlyInput.prop('checked')) {
  327. return
  328. }
  329. // 判断是点击的是+ 还是-
  330. if ($(e.target).hasClass('add')) {
  331. // 点的+
  332. // currentNum = currentNum >= 12 ? 12 : currentNum + 1;
  333. currentNum = currentNum >= data.numboxMax ? data.numboxMax : currentNum + data
  334. .numboxStep;
  335. } else {
  336. // 点的-
  337. // currentNum = currentNum <= 1 ? 1 : currentNum - 1;
  338. currentNum = currentNum <= data.numboxMin ? data.numboxMin : currentNum - data
  339. .numboxStep;
  340. }
  341. $number.text(currentNum)
  342. var price = (5.8 * currentNum).toFixed(1);
  343. $('.computed_price').html('¥' + price)
  344. var firstButton = $('#number_box_month button:first')
  345. var lastButton = $('#number_box_month button:last')
  346. if (currentNum >= 10) {
  347. $('.profit_tips').show()
  348. } else {
  349. $('.profit_tips').hide()
  350. }
  351. // 如果为操作后的结果为1,则锁定减号按钮
  352. if (currentNum === data.numboxMin) {
  353. firstButton.attr('disabled', true)
  354. } else {
  355. firstButton.removeAttr('disabled')
  356. }
  357. // 如果为操作后的结果为12,则锁定加号按钮
  358. if (currentNum === data.numboxMax) {
  359. lastButton.attr('disabled', true)
  360. } else {
  361. lastButton.removeAttr('disabled')
  362. }
  363. })
  364. /* -------- 控制年份number_box的事件 点击1年 2年 3年触发的事件------- */
  365. $('#number_box_year').on('click', 'span', function (e) {
  366. $('#number_box_month').removeClass('active');
  367. console.log(e.target.dataset.id)
  368. var id = e.target.dataset.id;
  369. $('.profit_tips').hide()
  370. $(this).addClass('active').siblings().removeClass('active')
  371. $('#yearly').prop('checked', true);
  372. $("#monthly").prop('checked', false);
  373. // 渲染结果 保留一位小数
  374. var result = (Number(id) * 58).toFixed(1);
  375. $('.computed_price').html('¥' + result)
  376. })
  377. /* -------- 选择按月订阅 radio触发的事件------- */
  378. $('#monthly').on('change', function (e) {
  379. var isChecked = $(this).is(':checked')
  380. var val = $('.month_number').text();
  381. if (val >= 10) {
  382. $('.profit_tips').show()
  383. }
  384. if (!isChecked) {
  385. $('#number_box_month button').attr('disabled', true)
  386. } else {
  387. $('#number_box_month button').removeAttr('disabled')
  388. }
  389. if (val == 1) {
  390. $('#number_box_month button:eq(0)').prop('disabled', true)
  391. }
  392. if (val == 12) {
  393. $('#number_box_month button:eq(1)').prop('disabled', true)
  394. }
  395. var result = (Number(val) * 5.8).toFixed(1);
  396. $('.computed_price').html('¥' + result)
  397. })
  398. /* -------- 选择按年订阅 radio触发的事件------- */
  399. $('#yearly').on('change', function (e) {
  400. $('.profit_tips').hide()
  401. // console.log($(this).is(':checked'))
  402. var isChecked = $(this).is(':checked')
  403. // 按年订阅默认选择1年
  404. var val = 1;
  405. $('.computed_price').html('¥' + Number(val) * 58)
  406. if (isChecked) {
  407. $('#number_box_year span:eq(0)').addClass('active').siblings().removeClass('active')
  408. }
  409. })
  410. }
  411. // 以下数据交互 -------------------
  412. // 定义全部变量state
  413. var globalState = {}
  414. var changeTime = [];
  415. var submitPrice = 0;
  416. function init(state) {
  417. // init 已选择的区域和行业
  418. var selectedAreaAndInd = getCount(state.area, state.industry)
  419. setSelectedAreaAndInd(selectedAreaAndInd)
  420. // 初始化,已购买的城市和行业
  421. setBuyAreaAndInd(state.buyset)
  422. // 初始化订阅周期
  423. var dStart = new Date(state.startTime * 1000).pattern('yyyy年MM月dd日')
  424. var dEnd
  425. var change = sessionStorage.getItem("vip_change_time");
  426. if (change) {
  427. var afterEndTime
  428. if (change.indexOf("月") > -1) {
  429. var monthNum = parseInt(change.replace("个月", ""));
  430. afterEndTime = getVipEndDate(2, monthNum, state.endTime)
  431. changeTime = [monthNum, 2]
  432. } else {
  433. var yearNum = parseInt(change.replace("年", ""));
  434. afterEndTime = getVipEndDate(1, yearNum, state.endTime)
  435. changeTime = [yearNum, 1]
  436. }
  437. dEnd = new Date(afterEndTime * 1000).pattern('yyyy年MM月dd日');
  438. $(".body-item.cycle .tip").show();
  439. } else {
  440. dEnd = new Date(state.endTime * 1000).pattern('yyyy年MM月dd日')
  441. }
  442. var sDuration = dStart + ' - ' + dEnd
  443. $('.body-item.cycle .buy-cycle').text(sDuration)
  444. // 初始化关键词
  445. if (state.items.lenght === 0) {
  446. $('.body-item.keywords .keywords-text').text('未分类')
  447. } else {
  448. var arr = []
  449. state.items.forEach(function (item, index) {
  450. arr.push(item['s_item'])
  451. })
  452. $('.body-item.keywords .keywords-text').text(arr.join('、'))
  453. }
  454. // 初始化信息类型
  455. if (state.infotype.length === 0) {
  456. $('.body-item.info-type .info-type-text').text('全部类型')
  457. } else {
  458. $('.body-item.info-type .info-type-text').text(state.infotype.join('、'))
  459. }
  460. // 推送设置初始化
  461. var pushSettingMap = {
  462. 1: '实时推送',
  463. 2: '每日推送',
  464. 3: '每周推送',
  465. 4: '每月推送',
  466. }
  467. $('.body-item.push-setting .push-setting-text').text(pushSettingMap[state.ratemode])
  468. // 初始化项目匹配
  469. if (state.projectmatch) {
  470. $('.switch').addClass('checked')
  471. } else {
  472. $('.switch').removeClass('checked')
  473. }
  474. }
  475. // 给订阅周期栏目绑定点击事件(订阅周期选择框显示与隐藏等各种操作)
  476. //initCycleSelector()
  477. var subVipState = sessionStorage.getItem('sub_vip_state');
  478. var reqData = JSON.parse(subVipState);
  479. if (subVipState) {
  480. init(reqData);
  481. //判断是否修改
  482. var IndustryNoChange = JSON.stringify(reqData.oldIndustry.sort()) === JSON.stringify(reqData.industry.sort());
  483. var tmp1 = getAreaClassArr(reqData.oldArea);
  484. var tmp2 = getAreaClassArr(reqData.area);
  485. var areaNoChange = (JSON.stringify(tmp1[0].sort()) === JSON.stringify(tmp2[0].sort())) && (JSON.stringify(tmp1[1].sort()) === JSON.stringify(tmp2[1].sort()));
  486. if (IndustryNoChange && areaNoChange && changeTime.length==0) {
  487. return
  488. }
  489. //判断是否需要升级
  490. var status = getUpgradeFinalStatus(getBuySet(reqData.area, reqData.industry), {
  491. "areacount": reqData.buyset.areacount,
  492. "buyerclasscount": reqData.buyset.buyerclasscount,
  493. "citys": reqData.buyset.newcitys
  494. }, changeTime, reqData.endTime, reqData.renewList);
  495. if (status[0] === -2) {
  496. alert("出错");
  497. return
  498. }
  499. if (status[0] === -1) {
  500. //直接修改
  501. $(".vip-footer.modify").show();
  502. $('.vip-footer .button-l.reset').on("click", function () {
  503. cancelTip(1);
  504. })
  505. return
  506. }
  507. if (status[0] > 0) {
  508. //需要付钱
  509. $(".vip-footer.upgrade").show();
  510. //价格展示
  511. $(".vip-footer.upgrade .billing-price").text("¥" + formatMoney(status[0]))
  512. submitPrice = status[0] * 100
  513. }
  514. //区域需要升级
  515. if (status[1]) {
  516. $(".body-item.area .tip-need-upgrade").show();
  517. }
  518. //行业需要升级
  519. if (status[2]) {
  520. $(".body-item.industry .tip-need-upgrade").show()
  521. }
  522. if (!status[1] && !status[2]) {
  523. $(".vip-footer.upgrade .confirm").text("立即续费");
  524. }
  525. $('.vip-footer .button-l.reset').on("click", function () {
  526. cancelTip(2);
  527. })
  528. } else {
  529. getDataWitXHR()
  530. }
  531. //提交请求
  532. $('.vip-footer .button-r.confirm').on('click', function () {
  533. $(this).attr("disabled", "disabled");
  534. doSubmit();
  535. $(this).removeAttr("disabled");
  536. })
  537. //保存 or 升级
  538. function doSubmit() {
  539. $DoPost('/subscribepay/vipsubscribe/saveChange', {
  540. "area": reqData.area["全国"] ? '{}' : JSON.stringify(reqData.area),
  541. "industry": reqData.industry.join(","),
  542. "payWay": "wx_js",
  543. "time": sessionStorage.getItem("vip_change_time"),
  544. "price": submitPrice
  545. }, function (res) {
  546. console.log(res)
  547. }, false);
  548. }
  549. });