editArea.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. // 后端数据结构
  2. var areaData = {
  3. "data": {
  4. "area": {
  5. // "北京": [],
  6. // "河南": [
  7. // "洛阳市",
  8. // "驻马店市",
  9. // "周口市",
  10. // // "郑州市"
  11. // ],
  12. // "澳门": [],
  13. // "甘肃": []
  14. },
  15. "buyset": {
  16. "areacount": -1,
  17. "buyerclasscount": 11,
  18. "citys": {
  19. // "河南": 4
  20. }
  21. },
  22. "industry": [
  23. "党委办",
  24. "公共资源交易",
  25. "公安",
  26. "出版广电",
  27. "国资委",
  28. "地震",
  29. "安监",
  30. "工商",
  31. "法院",
  32. "电信行业",
  33. "财政"
  34. ]
  35. },
  36. "errMsg": "",
  37. "success": true
  38. }
  39. //加载数据
  40. function getData() {
  41. $DoPost("/subscribepay/editSub/getSubBuyMsg", {}, function (r) {
  42. if (r.success) {
  43. areaData = r;
  44. }
  45. }, false);
  46. }
  47. // 渲染城市方法
  48. function createMoreCity(arr) {
  49. var tempHtml = arr.map(function (v) {
  50. return '<button class="city">' + v.name + '</button>'
  51. }).join('')
  52. return tempHtml
  53. }
  54. var animatedRuning = false;
  55. function checkAnimatedRuning() {
  56. if (animatedRuning) {
  57. return true
  58. }
  59. animatedRuning = true;
  60. setTimeout(function () {
  61. animatedRuning = false;
  62. }, 500);
  63. return false
  64. }
  65. // 省下拉市事件
  66. function slideFun(obj) {
  67. if (checkAnimatedRuning()) {
  68. return
  69. }
  70. if (obj.next('.tab_content:not(:animated)').css("display") == "block") {
  71. obj.children().children('i').removeClass("up");
  72. } else {
  73. obj.children().children('i').addClass("up");
  74. }
  75. obj.toggleClass('selected').next('.tab_content:not(:animated)').slideToggle(500)
  76. obj.parent().siblings().children('.tab').removeClass('selected');
  77. }
  78. var obj
  79. // 改变选择结果方法
  80. function getResult() {
  81. obj = {};
  82. //$('.result_name').empty();
  83. $('.province').each(function () {
  84. let provinceText = $(this).text().trim();//省份名称
  85. let isChecked = $(this).children('.checkbox').is(':checked');
  86. let isHalf = $(this).children('.checkbox').hasClass('half');
  87. let arr = [];
  88. if (isChecked) {
  89. obj[provinceText] = [];
  90. } else if (isHalf && !isChecked) {
  91. let $that = $(this);
  92. obj[$that.text().trim()] = [];
  93. $that.parent().siblings().find('.city').each(function () {
  94. let parent = $(this).parent().siblings().find('.province').text().trim();
  95. if ($(this).is('.active') && parent == $that.text().trim()) {
  96. arr.push($(this).text().trim())
  97. }
  98. })
  99. obj[$that.text().trim()] = arr
  100. }
  101. })
  102. $('count').html($('.checkbox:not(.other):checked').length);
  103. //$('.result_name').append(getAreaClassArr_index(obj).join("、"));
  104. //校验是否修改
  105. if (theSameAs(obj) || $.isEmptyObject(obj)) {
  106. $('#enter').attr("disabled", "disabled");
  107. } else {
  108. $('#enter').removeAttr("disabled");
  109. }
  110. }
  111. // 初始化页面方法
  112. function init() {
  113. let p = areaData.data.area;
  114. let count = areaData.data.buyset.citys;
  115. // 1.渲染城市列表
  116. $(".select-area-box ul li:not('.index')").each(function () {
  117. var text = $(this).find(".province").text().trim()
  118. var data = null
  119. chinaMapJSON.some(function (v) {
  120. data = v
  121. return v.name.indexOf(text) !== -1
  122. })
  123. var box = $(this).find('div.tab_content')
  124. var html = createMoreCity(data.city)
  125. box.html(html)
  126. })
  127. // 2.当areacount == -1时,全国为选中状态,为正数时为选中的省份数目,全国选项不显示
  128. let pLength = Object.keys(areaData.data.area).length;
  129. let cLength = Object.keys(areaData.data.buyset.citys).length
  130. console.log(pLength, cLength)
  131. if (areaData.data.buyset.areacount == -1 && pLength == 0 && cLength == 0) {
  132. // 当购买的全国切选中的是全国时
  133. // $('.optional_count').html("可选择全部区域")
  134. //$('.all_area').show()
  135. $('.optional_count').hide()
  136. $('.total').html('34')
  137. $('.count').html('34')
  138. $('.tab.whole').parent('li').show();
  139. $('.checkbox.other').prop('checked', true);
  140. // $('.checkbox:not(.other)').attr('disabled',true)
  141. //$('.result_name').append(`<span>全国</span>`);
  142. } else if (areaData.data.buyset.areacount == -1 && pLength != 0) {
  143. // 当购买的全国而没有选择全国,选择部分省市时
  144. //$('.all_area').show();
  145. $('.province').removeAttr('data-count');
  146. $('.optional_count').hide();
  147. $('.total').html('34');
  148. initResult()
  149. } else {
  150. //$('.all_area').hide()
  151. $('.optional_count').show()
  152. $('.total').html(areaData.data.buyset.areacount)
  153. $('.tab.whole').parent('li').hide();
  154. // $('.checkbox.other').attr('disabled',true);
  155. initResult()
  156. }
  157. }
  158. function initResult() {
  159. let isAll = areaData.data.buyset.areacount;
  160. let p = areaData.data.area;
  161. let count = areaData.data.buyset.citys;
  162. // 渲染已选择结果
  163. for (const k in p) {
  164. console.log(p[k], k)
  165. if (p[k].length == 0) {
  166. $('.province').each(function () {
  167. let t = $(this).text().trim();
  168. if (k == t && p[k].length == 0) {
  169. // 如果购买的是全省,则不可点击下拉事件(不可修改城市)
  170. if (isAll != -1) {
  171. $(this).parent().siblings().children('.city').addClass('active').attr('disabled', true);
  172. $(this).parent('.tab').unbind('click').parent('li').siblings().find('.checkbox:not(.half)').parents('.tab').unbind('click')
  173. } else {
  174. $(this).parent().siblings().children('.city').addClass('active').removeAttr('disabled')
  175. }
  176. $(this).children('.checkbox').prop('checked', true)
  177. }
  178. })
  179. } else {
  180. console.log(k, p[k].length)
  181. $('.city').each(function () {
  182. let t = $(this).text().trim();
  183. p[k].forEach(v => {
  184. // console.log(v,t)
  185. if (v == t) {
  186. let that = $(this).parents('li').find('.tab:not(.municipality)');
  187. console.log("v==t")
  188. // 如果是可修改城市的省份,则可以进行下拉展示
  189. that.bind('click', function () {
  190. slideFun($(this));
  191. })
  192. $(this).addClass('active').removeAttr('disabled').parent().siblings('.tab').find('input').addClass('half');
  193. return;
  194. }
  195. })
  196. })
  197. for (const c in count) {
  198. if (p[k].length >= count[c]) {
  199. if (isAll != -1) {
  200. $('.city:not(.active)').attr('disabled', true)
  201. } else {
  202. $('.city:not(.active)').removeAttr('disabled')
  203. }
  204. }
  205. }
  206. }
  207. }
  208. // 添加可选择城市文字 和自定义属性值
  209. if (areaData.data.buyset.areacount != -1) {
  210. for (const c in count) {
  211. $('.province').each(function () {
  212. let t = $(this).text().trim();
  213. if (c == t) {
  214. $(this).attr("data-count", count[c]);
  215. $(this).after(`<em class="optional">可选择 ${count[c]} 个市</em>`)
  216. let that = $(this).parent('.tab:not(.municipality)');
  217. that.bind('click', function () {
  218. slideFun($(this));
  219. })
  220. }
  221. })
  222. }
  223. }
  224. //$('.result_name').append(getAreaClassArr_index(areaData.data.area).join("、"));
  225. $('.count').html($('.checkbox:not(.other):checked').length)
  226. // 如果选中的省份数量等于购买的省份数量,则将其他未选中的省份禁用
  227. if ($('.checkbox:not(.other):checked').length == $('.total').html()) {
  228. $('.checkbox:not(:checked)').attr('disabled', true);
  229. }
  230. $('#enter').attr("disabled", "disabled");
  231. }
  232. $(function () {
  233. // 省下拉事件
  234. $('.tab:not(.municipality)').on('click', function () {
  235. if (checkAnimatedRuning()) {
  236. return
  237. }
  238. if ($(this).next('.tab_content:not(:animated)').css("display") == "block") {
  239. $(this).children().children('i').removeClass("up");
  240. } else {
  241. $(this).children().children('i').addClass("up");
  242. }
  243. $(this).toggleClass('selected').next('.tab_content:not(:animated)').slideToggle(500);
  244. $(this).parent().siblings().children('.tab').removeClass('selected');
  245. });
  246. getData();
  247. // 初始化
  248. init();
  249. /**** 点击checkbox实现onchange事件 *****/
  250. // 1.点击全国按钮onchange事件;
  251. $('.checkbox.other').on('change', function () {
  252. let isChecked = $(this).is(':checked');
  253. if (isChecked) {
  254. $('.count').html('34')
  255. $('.checkbox:not(.other)').prop('checked', false).removeClass('half')
  256. $('.city').removeClass('active');
  257. $('.tab_content').slideUp()
  258. getResult()
  259. } else {
  260. $('.checkbox:not(.other)').removeAttr('disabled')
  261. $('.city').removeAttr('disabled')
  262. getResult()
  263. }
  264. })
  265. // 2.点击非全国按钮onchange事件;
  266. $('.checkbox:not(.other)').on('change', function () {
  267. $('.checkbox.other').prop('checked', false);
  268. let checkedLength = $('.checkbox:checked').length;
  269. let totalLength = $('.total').text();
  270. $('.count').html(checkedLength)
  271. if (checkedLength < totalLength) {
  272. $('.checkbox:not(.other)').removeAttr('disabled')
  273. getResult()
  274. } else {
  275. $('.checkbox:not(:checked)').attr('disabled', true)
  276. getResult()
  277. }
  278. if ($(this).is(':checked')) {
  279. if (areaData.data.buyset.areacount != -1) {
  280. $(this).prop('checked', true).removeClass('half').parents('li').find('.city').addClass('active').attr('disabled', true);
  281. } else {
  282. $(this).prop('checked', true).removeClass('half').parents('li').find('.city').addClass('active');
  283. }
  284. getResult()
  285. } else {
  286. $(this).prop('checked', false).removeClass('half').parent().parent().siblings().find('.city').removeClass('active').removeAttr('disabled');
  287. getResult()
  288. }
  289. })
  290. // 3.点击半选按钮触发的事件
  291. $('.checkbox.half').on('change', function () {
  292. console.log($(this).is(':checked'))
  293. if ($(this).is(':checked')) {
  294. if (areaData.data.buyset.areacount != -1) {
  295. $(this).prop('checked', true).removeClass('half').parents('li').find('.city').addClass('active').attr('disabled', true);
  296. } else {
  297. $(this).prop('checked', true).removeClass('half').parents('li').find('.city').addClass('active');
  298. }
  299. getResult()
  300. } else {
  301. $(this).prop('checked', false);
  302. $(this).parent().parent().siblings().find('.city').removeClass('active').removeAttr('disabled');
  303. $(this).parent().siblings('.optional').show();
  304. getResult()
  305. }
  306. })
  307. // 4.点击城市按钮触发的事件
  308. $('.tab_content').on('click', '.city', function () {
  309. let count = $(this).parent().siblings().find('.province').attr('data-count');
  310. $(this).toggleClass('active');
  311. $('.checkbox.other').prop('checked', false);
  312. var isActive = $(this).parent().find('.city.active').length
  313. let cityLength = $(this).parent().find('.city').length
  314. if (isActive === cityLength) {//当选中的城市数量等于该省下所有城市总数时,即为全选
  315. var oInput = $(this).parents('li').find('input.checkbox')
  316. oInput.removeClass('half').prop('checked', true)
  317. getResult()
  318. } else {//半选
  319. $(this).parents('li').find('input.checkbox').addClass('half').prop("checked", false)
  320. if (isActive > 0 && isActive != count) {
  321. $(this).parents('li').find('input.checkbox').addClass('half');
  322. $(this).parent('div').find('.city:not(.active)').removeAttr('disabled')
  323. getResult()
  324. } else if (isActive > 0 && isActive == count) {
  325. $(this).parents('li').find('input.checkbox').addClass('half');
  326. $(this).parent('div').find('.city:not(.active)').attr('disabled', true)
  327. getResult()
  328. } else {
  329. $(this).parent('div').find('.city:not(.active)').removeAttr('disabled')
  330. $(this).parents('li').find('input.checkbox').removeClass('half').prop('checked', false)
  331. getResult()
  332. }
  333. }
  334. })
  335. // 阻止input checkbox选中取消 触发父元素下拉事件
  336. $('.checkbox').click(function (e) {
  337. e.stopPropagation();
  338. })
  339. // 锚点跳转
  340. $("body").on('click', '.slide a', function () {
  341. var s = $(this).html()
  342. if (s == '#') {
  343. return;
  344. }
  345. document.querySelector('#' + s).scrollIntoView({
  346. block: 'center'
  347. });
  348. })
  349. // 取消按钮事件 返回上一页
  350. $('#cancel').click(function () {
  351. // window.history.go(-1)
  352. //$('.result_name').empty()
  353. $('.checkbox').prop('checked', false).removeAttr('disabled');
  354. $('.city').removeClass('active');
  355. $('.tab_content').slideUp();
  356. $('.optional').remove();
  357. $('.tab').find('i').removeClass("up");
  358. init();
  359. })
  360. // 确定修改事件
  361. $('#enter').click(function () {
  362. $('#enter').attr("disabled", "disabled");
  363. $DoPost("/subscribepay/editSub/submit", {
  364. "type": "area",
  365. "value": JSON.stringify(obj)
  366. }, function (r) {
  367. if (r.success) {
  368. window.location.replace('/front/vipsubscribe/submitEditSubFinish');
  369. }
  370. $('#enter').removeAttr("disabled");
  371. }, false);
  372. })
  373. });
  374. function theSameAs(select) {
  375. let tmp1 = getAreaClassArr(select);
  376. let tmp2 = getAreaClassArr(areaData.data.area);
  377. return (JSON.stringify(tmp1[0].sort()) === JSON.stringify(tmp2[0].sort())) && (JSON.stringify(tmp1[1].sort()) === JSON.stringify(tmp2[1].sort()));
  378. }