index.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. const https = require("../../utils/serverData");
  2. const pinyin = require('js-pinyin');
  3. Component({
  4. properties: {
  5. changeValue: "",
  6. changeLabel: ""
  7. },
  8. data: {
  9. mapData: [],
  10. loading: false,
  11. indexList: [],
  12. value: "",
  13. label: "",
  14. cityList: []
  15. },
  16. attached: async function () {
  17. const {
  18. changeValue,
  19. } = this.data
  20. this.setData({
  21. loading: true
  22. })
  23. let mapData = await this.getAreaList()
  24. this.setData({
  25. mapData
  26. })
  27. mapData.map(item => {
  28. item.pinyin = pinyin.getFullChars(item.label);
  29. });
  30. let provice = {};
  31. mapData.map((item) => {
  32. const Initials = item.pinyin[0].toUpperCase();
  33. // 如果对象里有当前字母项则直接 push 一个对象,如果没有则创建一个新的键并赋值;
  34. if (provice[Initials]) {
  35. provice[Initials].push(item);
  36. } else {
  37. provice[Initials] = [item];
  38. }
  39. });
  40. // 将数据转为数组,并按字母顺利排列
  41. let filterData = [];
  42. for (let key in provice) {
  43. const obj = {
  44. letter: key,
  45. list: provice[key]
  46. };
  47. filterData.push(obj)
  48. }
  49. filterData.sort((a, b) => {
  50. return a.letter.localeCompare(b.letter)
  51. });
  52. // 为索引字符数组赋值
  53. let indexList = [],
  54. arr = [];
  55. filterData.forEach((item) => {
  56. indexList.push(item.letter)
  57. let model = {
  58. letter: item.letter,
  59. list: []
  60. }
  61. item.list.forEach((si, sii) => {
  62. const modelb = {
  63. ...si,
  64. order: Math.floor(item.list.length / 3) > Math.floor(sii / 3) ? false : true
  65. }
  66. model.list.push(modelb);
  67. })
  68. arr.push(model);
  69. }
  70. );
  71. let name = "";
  72. let index = mapData.findIndex((s) => String(s.id) === String(changeValue))
  73. if (index !== -1) {
  74. name = this.data.mapData[index].name
  75. }
  76. this.setData({
  77. indexList: indexList,
  78. cityList: arr,
  79. value: String(changeValue),
  80. label: name,
  81. loading: false
  82. })
  83. console.log(changeValue,);
  84. console.log(this.data.value);
  85. },
  86. methods: {
  87. async getAreaList() {
  88. const {
  89. code,
  90. data
  91. } = await https.getArea({
  92. level: 2
  93. })
  94. let arr = code === 1 ? data.list : [];
  95. arr.map((s) => {
  96. return s.value = s.id, s.label = s.name
  97. })
  98. return arr
  99. },
  100. bindViewTap(e) {
  101. const {
  102. pindex,
  103. index
  104. } = e.currentTarget.dataset
  105. const model = {
  106. value: this.data.cityList[pindex].list[index].value,
  107. label: this.data.cityList[pindex].list[index].label,
  108. }
  109. this.setData(model)
  110. console.log(model);
  111. this.triggerEvent("itemClick", model)
  112. },
  113. }
  114. })