updateArea.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741
  1. $(function () {
  2. // 后端数据结构
  3. // var areaData = {
  4. // 'data': {
  5. // // 选择的数量
  6. // 'area': {
  7. // '北京': [],
  8. // '河南': [
  9. // '洛阳市',
  10. // '驻马店市',
  11. // '周口市',
  12. // '郑州市'
  13. // ],
  14. // '湖南':['长沙市'],
  15. // '澳门': [],
  16. // '甘肃': []
  17. // },
  18. // 'buyset': {
  19. // // 购买的全省的数量(不带市)
  20. // 'areacount': 7,
  21. // 'buyerclasscount': 11,
  22. // // 购买的城市
  23. // 'citys': {
  24. // '河南': 4,
  25. // '湖南': 3,
  26. // '吉林': 2
  27. // }
  28. // }
  29. // },
  30. // 'errMsg': '',
  31. // 'success': true
  32. // };
  33. var areaData = {
  34. 'data': {
  35. // 选择的数量
  36. 'area': {},
  37. 'buyset': {
  38. // 购买的全省的数量(不带市)
  39. 'areacount': 7,
  40. 'buyerclasscount': 11,
  41. // 购买的城市
  42. 'citys': {}
  43. }
  44. },
  45. 'errMsg': '',
  46. 'success': true
  47. };
  48. // 已经购买过的城市数量
  49. let alreadyBuy = {
  50. province: {
  51. totalCount: 0,
  52. selectedCount: 0
  53. },
  54. city: {
  55. totalCount: 0,
  56. selectedCount: 0
  57. }
  58. }
  59. // 新增城市数量(排除修改的数量)
  60. let newlyAdded = {
  61. province: 0,
  62. city: 0
  63. }
  64. // ----------------- 以下定义功能函数 ----------------------------
  65. function createMoreCity(arr) {
  66. var tempHtml = arr.map(function (v) {
  67. return '<button class="city">' + v.name + '</button>'
  68. }).join('')
  69. return tempHtml
  70. }
  71. // 新增求值 ---- 统计数量,不做视图操作
  72. function getResult(callback) {
  73. if (areaData.data.buyset.areacount === -1) {
  74. $('.result_text.add_new .added-info').hide()
  75. return
  76. }
  77. // 升级新增清空
  78. $('.result_text.add_new .added-info').text('')
  79. let isWholeSelected = $('.tab.whole input').is(':checked')
  80. let isWholeDisabled = $('.tab.whole input').prop('disabled')
  81. // 已购买省份改变的数量
  82. let dBuySetProvinceCount = 0
  83. // 已购买省份改变的数量
  84. let dAddedProvinceCount = 0
  85. // 已购买城市改变的数量
  86. let dBuySetCityCount = 0
  87. // 新增城市的数量
  88. let dAddedCityCount = 0
  89. $('.area-list li:not(.index)').each(function(i, dom){
  90. if ($(dom).children('.tab').hasClass('whole')) return true
  91. // 统计非全国的数量
  92. // 没有'data-buy-city-count'属性的 $(dom).attr('data-buy-city-count') 为undefined
  93. if ($(dom).attr('data-buy-city-count')) {
  94. /******** 此处判断的是已购买的城市下的 ********************/
  95. // 获取购买城市的数量
  96. let buyCount = $(dom).attr('data-buy-city-count') - 0 // 隐式转换成Number
  97. // 获取城市不可点击的数量
  98. let alreadySelectedCount = $(dom).find('button[disabled]').length
  99. // 选择城市的数量(包括不可点击的)
  100. let hasActiveCount = $(dom).find('button.active').length
  101. if (hasActiveCount > buyCount) {
  102. dBuySetCityCount += buyCount
  103. dAddedCityCount += (hasActiveCount - buyCount)
  104. } else {
  105. // 操作已购买的数量
  106. dBuySetCityCount += hasActiveCount
  107. }
  108. } else {
  109. // 是不是直辖市或自治区,在有data-buy-count没必要判断
  110. let hasCities = $(dom).find('.tab').hasClass('municipality')
  111. // 是否购买过该省份(还需要判断该省份下面的城市是否全部disabled --- 同时满足才算购买过全省)
  112. let provinceInput = $(dom).find('input')
  113. // 循环着的当前的省份是否可选 和 是否被选中
  114. let isBoughtProvince = provinceInput.prop('disabled')
  115. let isChecked = provinceInput.is(':checked')
  116. // 可得到已经购买的省份的数量(循环完成后可得到,循环过程中的值可能不全)
  117. // 判断是否为购买过的城市
  118. if (isBoughtProvince) {
  119. // 将已购买(选中但不能单击的)城市选中
  120. if (isChecked) {
  121. dBuySetProvinceCount ++
  122. }
  123. } else {
  124. // 判断是否是直辖市或自治区(省份下面没有城市的和有城市的分开计算)
  125. if (hasCities) {
  126. // 直辖市、自治区 -----直接进行省份的操作
  127. // 并且没有购买过该省的,并且选中的
  128. if (isChecked) {
  129. dAddedProvinceCount ++
  130. }
  131. } else {
  132. // 带有市的省份城市(该省份下以前没有购买过任何城市)
  133. // 两种情况:1. 全选 2. 不全选
  134. let allCityLength = $(dom).find('button').length
  135. let otherTotalAddCount = $(dom).find('button.active').length
  136. if (allCityLength === otherTotalAddCount && isChecked) {
  137. // 选中了省份下的所有城市
  138. dAddedProvinceCount ++
  139. } else {
  140. // 对城市做新增操作
  141. dAddedCityCount += otherTotalAddCount
  142. }
  143. }
  144. }
  145. }
  146. })
  147. // 循环完成判断已经选择的省份数量 是否 大于购买过的数量
  148. if (dBuySetProvinceCount + dAddedProvinceCount > alreadyBuy.province.totalCount) {
  149. // 如果已选择的数量和新增的数量大于已购买过的数量,说明我有购买新的城市
  150. dAddedProvinceCount -= (alreadyBuy.province.totalCount - dBuySetProvinceCount)
  151. dBuySetProvinceCount = alreadyBuy.province.totalCount
  152. } else {
  153. dBuySetProvinceCount += dAddedProvinceCount
  154. dAddedProvinceCount = 0
  155. }
  156. // 已购买城市下选项改变,状态更新
  157. alreadyBuy.city.selectedCount = dBuySetCityCount
  158. newlyAdded.city = dAddedCityCount
  159. alreadyBuy.province.selectedCount = dBuySetProvinceCount
  160. newlyAdded.province = dAddedProvinceCount
  161. callback && callback()
  162. setDataInResult()
  163. // 全国被选中了
  164. if (isWholeSelected && !isWholeDisabled) {
  165. $('.result_text.add_new .added-info').text('全国')
  166. $('.result_text.add_new').show()
  167. isLockedTipButtons(false)
  168. }
  169. }
  170. function setDataInResult() {
  171. let buySetInfo = {
  172. p: `省级区域${alreadyBuy.province.selectedCount}/${alreadyBuy.province.totalCount}、`,
  173. c: `地市${alreadyBuy.city.selectedCount}/${alreadyBuy.city.totalCount}`
  174. }
  175. let addedInfo = {
  176. p: `省级区域 ${newlyAdded.province}、`,
  177. c: `地市 ${newlyAdded.city}`
  178. }
  179. // 修改数量并进行重新赋值
  180. $('.result_text.already .buy-set-info').text(buySetInfo.p + buySetInfo.c)
  181. // 升级新增赋值
  182. $('.result_text.add_new .added-info').text(addedInfo.p + addedInfo.c)
  183. if (newlyAdded.province !== 0 || newlyAdded.city !== 0) {
  184. $('.result_text.add_new').show()
  185. isLockedTipButtons(false)
  186. } else {
  187. $('.result_text.add_new').hide()
  188. isLockedTipButtons(true)
  189. }
  190. }
  191. // 求需要M的数量
  192. function getResultWithMCount() {
  193. let added = {
  194. country: 0,
  195. province: 0,
  196. city: {
  197. // '河南': 1,
  198. // '吉林': 1
  199. }
  200. }
  201. // 购买过的省份数量
  202. let buySetProvinceCount = $('.area-list').attr('data-buy-province-count') - 0 // 隐式转换成Number
  203. $('.area-list li:not(.index)').each(function(i, dom) {
  204. if ($(dom).children('.tab').hasClass('whole')) {
  205. // 判断是否被选中
  206. if ($(dom).find('input.other').is(':checked')) {
  207. added.country = -1
  208. added.province = 0
  209. added.city = {}
  210. return false
  211. }
  212. } else {
  213. added.country = 0
  214. let pName = $(dom).find('.province').text().replace(/\s+ | [\r\n]/g, '')
  215. // 获取当前dom下有几个按钮有active样式
  216. let activeButtonLength = $(dom).find('button.active').length
  217. // 判断该省是否有购买过的城市
  218. if ($(dom).attr('data-buy-city-count')) {
  219. let buyCityCount = $(dom).attr('data-buy-city-count') - 0
  220. let aCityCount = activeButtonLength - buyCityCount
  221. if (aCityCount > 0) {
  222. added.city[pName] = aCityCount
  223. } else {
  224. // 选不到购买的个数
  225. }
  226. } else {
  227. // 判断是否是直辖市
  228. let isMunicipality = $(dom).find('.tab').hasClass('municipality')
  229. let allCitylength = $(dom).find('button').length
  230. if (isMunicipality) {
  231. if ($(dom).find('input').is(':checked')) {
  232. added.province ++
  233. }
  234. } else {
  235. if (activeButtonLength === allCitylength) {
  236. added.province ++
  237. } else {
  238. if (activeButtonLength !== 0) added.city[pName] = activeButtonLength
  239. }
  240. }
  241. }
  242. }
  243. })
  244. // 循环完成判断计算省份
  245. let aProvinceCount = added.province - buySetProvinceCount
  246. if (aProvinceCount > 0) {
  247. added.province = aProvinceCount
  248. } else {
  249. added.province = 0
  250. }
  251. return added
  252. }
  253. // 点亮的城市数量详情(需要省和城市名称)
  254. function getActiveCityDetail(state = '') {
  255. let isWholeCountry = $('.tab.whole input').is(':checked')
  256. if (isWholeCountry) {
  257. // 选择全国
  258. let str = $('.area-list li .tab.whole .province').text().replace(/\s+ | [\r\n]/g, '')
  259. let obj = {}
  260. obj[str] = []
  261. return obj
  262. } else {
  263. let arr = []
  264. $('.area-list li:not(.index)').each(function(i, dom) {
  265. if ($(dom).children('.tab').hasClass('whole')) return
  266. let isMunicipality = $(dom).find('.tab').hasClass('municipality')
  267. let pName = $(dom).find('.province').text().replace(/\s+ | [\r\n]/g, '')
  268. let selectedObj = {
  269. name: pName,
  270. children: []
  271. }
  272. // 是否是直辖市或自治区
  273. if (isMunicipality) {
  274. if ($(dom).find('input:not([disabled])').is(':checked')) {
  275. arr.push(selectedObj)
  276. }
  277. } else {
  278. let allCitylength = $(dom).find('button').length
  279. if (state === 'disabled') {
  280. // 判断是否全省被选中
  281. if ($(dom).find('button.active').length === allCitylength) {
  282. // 判断省下有没有不可点击的按钮
  283. if ($(dom).attr('data-buy-city-count')) {
  284. $(dom).find('button.active').each(function(c, dom) {
  285. let cName = $(dom).text().replace(/\s+ | [\r\n]/g, '')
  286. selectedObj.children.push(cName)
  287. })
  288. if (selectedObj.children.length) {
  289. arr.push(selectedObj)
  290. }
  291. } else {
  292. arr.push(selectedObj)
  293. }
  294. } else {
  295. $(dom).find('button.active').each(function(c, dom) {
  296. let cName = $(dom).text().replace(/\s+ | [\r\n]/g, '')
  297. selectedObj.children.push(cName)
  298. })
  299. if (selectedObj.children.length) {
  300. arr.push(selectedObj)
  301. }
  302. }
  303. } else {
  304. // 判断是否全省被选中
  305. if ($(dom).find('button.active:not([disabled])').length === allCitylength) {
  306. arr.push(selectedObj)
  307. } else {
  308. $(dom).find('button.active:not([disabled])').each(function(c, dom) {
  309. let cName = $(dom).text().replace(/\s+ | [\r\n]/g, '')
  310. selectedObj.children.push(cName)
  311. })
  312. if (selectedObj.children.length) {
  313. arr.push(selectedObj)
  314. }
  315. }
  316. }
  317. }
  318. })
  319. // 处理arr
  320. // [
  321. // {
  322. // name: '安徽',
  323. // children: ["合肥市", "蚌埠市", "阜阳市"]
  324. // },
  325. // {
  326. // name: '海南',
  327. // children: ["三亚市", "文昌市"]
  328. // },
  329. // {
  330. // name: '河南',
  331. // children: ["郑州市", "信阳市"]
  332. // }
  333. // ]
  334. let selectedCityDetail = {}
  335. arr.forEach(function(item, i) {
  336. selectedCityDetail[item.name] = item.children
  337. })
  338. return selectedCityDetail
  339. }
  340. }
  341. // 初始选择的城市恢复,根据传入的p恢复为Disabled灰色按钮
  342. function renderSelectedCityDisabled(p = {}) {
  343. for (const k in p) {
  344. if (p[k].length == 0) {
  345. // 购买的省份
  346. $('.province').each(function () {
  347. let t = $(this).text().trim();
  348. if (k == t) {
  349. $(this).children('.checkbox').prop('checked',true).attr('disabled',true);
  350. $(this).parents('li').children('.tab_content').find('.city').addClass('active').attr('disabled',true);
  351. }
  352. })
  353. } else {
  354. $('.city').each(function () {
  355. let t = $(this).text().trim();
  356. p[k].forEach(v =>{
  357. if(v !== t) return
  358. // let that = $(this).parents('li').find('.tab:not(.municipality)');
  359. // 改变状态按钮
  360. $(this).addClass('active').attr('disabled',true).parent().siblings('.tab').find('input').addClass('half').attr('disabled',true);
  361. })
  362. })
  363. }
  364. }
  365. }
  366. // 初始选择的城市恢复,根据传入的p恢复为Active蓝色按钮
  367. // 需要放到init之后
  368. function renderSelectedCityActive(p = {}) {
  369. for (const k in p) {
  370. if (k === '全国') {
  371. $('.area-list li:not(.index):eq(0)').find('input').trigger('click')
  372. return
  373. }
  374. if (p[k].length == 0) {
  375. // 购买的省份
  376. $('.province').each(function () {
  377. let t = $(this).text().trim();
  378. if (k == t && p[k].length == 0) {
  379. $(this).parent().siblings().find('.city').trigger('click')
  380. }
  381. })
  382. } else {
  383. $('.city').each(function () {
  384. let t = $(this).text().trim();
  385. p[k].forEach(v =>{
  386. if(v !== t) return
  387. // let that = $(this).parents('li').find('.tab:not(.municipality)');
  388. // 改变状态按钮
  389. $(this).trigger('click')
  390. })
  391. })
  392. }
  393. }
  394. getResult()
  395. }
  396. function isLockedTipButtons(f) {
  397. $('.tips_btn button').prop('disabled', f)
  398. }
  399. // 根据数据进行求总数 --- 上方提示数据信息的初始化
  400. function initAlreadyBuy(p, buyset, citys) {
  401. // 此处在数据返回后根据数据进行求值
  402. if (buyset.areacount === -1) {
  403. $('.result_text.already .buy-set-info').text('全国')
  404. $('.result_text.add_new .added-info').hide().text('')
  405. }
  406. // 选择的省和市的数量
  407. for (let a in p) {
  408. if (p[a].length) {
  409. // 已经选择的市的数量
  410. alreadyBuy.city.selectedCount += p[a].length
  411. } else {
  412. // 已经选择的省的数量
  413. alreadyBuy.province.selectedCount ++
  414. }
  415. }
  416. // 购买的全省的数量(不包含市)
  417. alreadyBuy.province.totalCount = buyset.areacount;
  418. // 购买的城市数量
  419. for (const c in citys) {
  420. alreadyBuy.city.totalCount += citys[c]
  421. }
  422. // console.log(alreadyBuy)
  423. let buySetInfo = {
  424. p: `省级区域${alreadyBuy.province.selectedCount}/${alreadyBuy.province.totalCount}、`,
  425. c: `地市${alreadyBuy.city.selectedCount}/${alreadyBuy.city.totalCount}`
  426. }
  427. $('.result_text.already .buy-set-info').text(buySetInfo.p + buySetInfo.c)
  428. $('.result_text.add_new .added-info').text('')
  429. }
  430. // 初始化方法
  431. function init() {
  432. let data = areaData.data
  433. let buyset = data.buyset;
  434. let citys = buyset.citys;
  435. initAlreadyBuy(data.area, buyset, citys)
  436. // 1.根据返回数据进行渲染
  437. if (buyset.areacount === -1) {
  438. // 购买全国
  439. if (Object.keys(data.area).length === 0) {
  440. // 选中全国
  441. // 不能操作
  442. $('.checkbox.other').prop('disabled', true).prop('checked', true)
  443. $('.checkbox:not(.other)').prop('disabled', true)
  444. $('.city').attr('disabled', true)
  445. } else {
  446. renderSelectedCityDisabled(data.area)
  447. }
  448. isLockedTipButtons(true)
  449. $('.result_text.already .buy-set-info').text('全国')
  450. } else {
  451. // 购买的非全国
  452. renderSelectedCityDisabled(data.area)
  453. }
  454. // 2.根据数据绑定data-buy-count,并赋值
  455. // area-list上绑定购买的省份数量
  456. $('.area-list').attr('data-buy-province-count', buyset.areacount)
  457. $('.area-list li:not(.index)').each(function(i, dom){
  458. if ($(dom).children('.tab').hasClass('whole')) return
  459. // 获取省的名字,并去空格.回车.换行
  460. let provinceName = $(dom).find('.province').text().replace(/\s+ | [\r\n]/g, '')
  461. for (let c in citys) {
  462. if (c === provinceName) {
  463. $(dom).attr('data-buy-city-count', citys[c])
  464. }
  465. }
  466. })
  467. $('.add_new').hide()
  468. getResult()
  469. }
  470. // ----------------- 以下绑定事件 ----------------------------
  471. // 0.渲染城市列表
  472. $(".select-area-box ul li:not('.index')").each(function () {
  473. var text = $(this).find(".province").text().trim()
  474. var data = null
  475. chinaMapJSON.some(function (v) {
  476. data = v
  477. return v.name.indexOf(text) !== -1
  478. })
  479. var box = $(this).find('div.tab_content')
  480. var html = createMoreCity(data.city)
  481. box.html(html)
  482. })
  483. // fastClick初始化: https://github.com/ftlabs/fastclick
  484. // FastClick.attach(document.body)
  485. // 1.省下拉市
  486. let isAnimating = false
  487. $(".select-area-box .tab:not(.municipality)").on('click', function (event) {
  488. if (isAnimating) return
  489. isAnimating = true
  490. if ($(this).next('.tab_content:not(:animated)').css("display") == "block") {
  491. $(this).children().children('i').css({
  492. "display": "inline-block",
  493. "transform": "rotate(0)"
  494. })
  495. } else {
  496. $(this).children().children('i').css({
  497. "display": "inline-block",
  498. "transform": "rotate(-180deg)"
  499. })
  500. }
  501. $(this).toggleClass('selected').next('.tab_content:not(:animated)').slideToggle(500)
  502. $(this).parent().siblings().children('.tab').removeClass('selected');
  503. setTimeout(() => {
  504. isAnimating = false
  505. }, 500)
  506. })
  507. // 2.点击全国按钮onchange事件;
  508. $('.checkbox.other').on('change', function () {
  509. let isChecked = $(this).is(':checked')
  510. if(isChecked){
  511. $(this).prop('checked',true);
  512. $('.checkbox:not(.other):not([disabled])').prop('checked',false).removeClass('half');
  513. $('.city:not([disabled])').removeClass('active');
  514. $('.tab_content').slideUp();
  515. }
  516. getResult()
  517. })
  518. // 3.点击非全国按钮onchange事件
  519. $('.checkbox:not(.other)').on('change', function () {
  520. $('.checkbox.other').prop('checked',false);
  521. let isChecked = $(this).is(':checked');
  522. if(isChecked){
  523. $(this).prop('checked',true).removeClass('half');
  524. $(this).parents('li').find('.city').addClass('active');
  525. // 控制点击checkbox时候是否展开下方的城市列表
  526. // $(this).parent().parent('.tab:not(.municipality)').siblings('.tab_content').slideDown();
  527. }else{
  528. $(this).prop('checked',false);
  529. $(this).parents('li').find('.city').removeClass('active');
  530. };
  531. getResult();
  532. showOther();
  533. })
  534. // 4.点击半选按钮触发的事件
  535. // $('.checkbox.half').on('change', function () {
  536. // $('.checkbox.other').prop('checked', false)
  537. // let isChecked = $(this).is(':checked')
  538. // $(this).prop('checked', isChecked).removeClass('half')
  539. // console.log("!1")
  540. // getResult();
  541. // })
  542. // 5.点击城市按钮触发的事件
  543. $('.tab_content').on('click', '.city', function () {
  544. // 全国取消选中
  545. $('.checkbox.other').prop('checked',false);
  546. $(this).toggleClass('active')
  547. // 省下所有选中的地市数量
  548. let activeCityLength = $(this).parent().find('.city.active').length;
  549. // 省下一共有几个城市
  550. let cityLength = $(this).parent().find('.city').length;
  551. let oInput = $(this).parents('li').find('input.checkbox')
  552. if (activeCityLength === cityLength) {//当选中的城市数量等于该省下所有城市总数时,即为全选
  553. if ($(this).siblings('.city[disabled]').length === 0) {
  554. oInput.removeClass('half').prop('checked', true)
  555. }
  556. } else if (activeCityLength === 0){
  557. oInput.prop('checked', false).removeClass('half')
  558. } else {//半选
  559. oInput.prop("checked",false).addClass('half')
  560. }
  561. getResult();
  562. showCityTips(this)
  563. })
  564. // 6. 重置按钮点击事件
  565. $('.reset-btn').on('click', function() {
  566. // alreadyBuy = {
  567. // province: {
  568. // totalCount: 0,
  569. // selectedCount: 0
  570. // },
  571. // city: {
  572. // totalCount: 0,
  573. // selectedCount: 0
  574. // }
  575. // }
  576. // newlyAdded = {
  577. // province: 0,
  578. // city: 0
  579. // }
  580. // 数组置0,在重新从数据中计算初始状态结果并返回
  581. for (let i in alreadyBuy) {
  582. for(let ii in alreadyBuy[i]) {
  583. alreadyBuy[i][ii] = 0
  584. }
  585. }
  586. for (let j in newlyAdded) {
  587. newlyAdded[j] = 0
  588. }
  589. $(".select-area-box .tab:not(.municipality) .icon").css({
  590. "display": "inline-block",
  591. "transform": "rotate(0)"
  592. });
  593. $('.checkbox').prop('checked', false).removeAttr('disabled');
  594. $('.city').removeClass('active');
  595. $('input').removeClass('half')
  596. $('.tab_content').slideUp();
  597. $('.optional').remove()
  598. init();
  599. $(".tips_d_text").hide();
  600. $(".btns .reset-btn").prop("disabled",false);
  601. $(".btns .save-btn").prop("disabled",false);
  602. })
  603. // 7.锚点跳转
  604. $("body").on('click', '.slide a', function () {
  605. var s = $(this).html()
  606. if (s == '#') {
  607. return;
  608. }
  609. document.querySelector('#' + s).scrollIntoView({
  610. block: 'center'
  611. });
  612. })
  613. // 阻止input checkbox选中取消 触发父元素下拉事件
  614. $('.checkbox').click(function (e) {
  615. e.stopPropagation();
  616. })
  617. function showCityTips(dom){
  618. let isAll = $(".area-list").attr("data-buy-province-count");
  619. if(Number(isAll)===-1){
  620. return
  621. }
  622. let activeCityLength = $(dom).parent().find('.city.active').length;
  623. let selectedCityLength = $(dom).parent().find('.city.active:not([disabled])').length;
  624. let disabledCityLength = $(dom).parent().find('.city[disabled]').length;
  625. let cityLength = $(dom).parent().find('.city').length;
  626. let dataCount = $(dom).parent().parent().attr("data-buy-city-count");
  627. if(dataCount === undefined){
  628. dataCount = 0;
  629. }else{
  630. if(Number(dataCount) === disabledCityLength){
  631. dataCount = 0;
  632. }else{
  633. dataCount = dataCount - disabledCityLength;
  634. }
  635. }
  636. let showCount = selectedCityLength - dataCount;
  637. if(showCount > 2){
  638. $(".tips_d_text").text("已新增"+showCount+"个市,建议新增“全省”");
  639. $(".tips_d_text").show();
  640. }else{
  641. $(".tips_d_text").hide();
  642. }
  643. if(showCount === cityLength){
  644. showOther();
  645. }
  646. }
  647. function showOther(){
  648. let showCounts = newlyAdded.province;
  649. if(showCounts > 9){
  650. $(".tips_d_text").text("已新增"+showCounts+"个省,建议新增“全国”")
  651. $(".tips_d_text").show();
  652. }else{
  653. $(".tips_d_text").hide();
  654. }
  655. }
  656. // ----------------------- 以下数据交互 ------------------
  657. $DoPost("/subscribepay/renewUpgrade/getBuyMsg", {}, function (data) {
  658. if(data){
  659. areaData["data"] = {
  660. "area" : data.area,
  661. "buyset" : data.buyset,
  662. }
  663. init();
  664. }
  665. }, false);
  666. // 确认按钮事件
  667. $('.save-btn').on('click', function(){
  668. // 获取added城市详情
  669. var activeCityDetail = getActiveCityDetail()
  670. let areaCount = getResultWithMCount()
  671. // console.log("111",areaCount)
  672. // console.log(JSON.stringify(activeCityDetail))
  673. // console.log(activeCityDetail)
  674. // console.log(areaData)
  675. // console.log(alreadyBuy)
  676. sessionStorage.vipAddCount = JSON.stringify(newlyAdded);
  677. sessionStorage.vipSubSelectCity = newlyAdded.city;
  678. sessionStorage.vipSubSelectAreaUpgrade = JSON.stringify(activeCityDetail);
  679. sessionStorage.vipSubSelectAreaAdd = JSON.stringify(areaCount);
  680. history.go(-1);
  681. })
  682. //
  683. if(sessionStorage.vipSubSelectAreaUpgrade!==undefined&&sessionStorage.vipSubSelectAreaUpgrade!==""){
  684. let areaObj = JSON.parse(sessionStorage.vipSubSelectAreaUpgrade);
  685. renderSelectedCityActive(areaObj);
  686. }
  687. // 求需要M的城市数量
  688. // getResultWithMCount()
  689. // 获取点亮的城市的列表详情(带省名和城市名)
  690. // getActiveCityDetail()
  691. // 回显为蓝色激活样式
  692. // renderSelectedCityActive()
  693. // 回显为灰色不可点击样式
  694. // renderSelectedCityDisabled()
  695. })