wangding-pickerAddress.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <template>
  2. <view>
  3. <picker @change="bindPickerChange" @columnchange="columnchange" :range="array" range-key="name" :value="value" mode="multiSelector"><slot></slot></picker>
  4. </view>
  5. </template>
  6. <script>
  7. const req = require('../../utils/request.js');
  8. // import AllAddress from './data.js';
  9. let selectVal = ['', '', ''];
  10. export default {
  11. data() {
  12. return {
  13. value: [0, 0, 0],
  14. ids: [],
  15. array: [],
  16. index: 0,
  17. allAddressData: []
  18. };
  19. },
  20. created() {
  21. this.getReqAreaList();
  22. },
  23. methods: {
  24. getReqAreaList() {
  25. let areaList = req.getStorage('areaList');
  26. if (areaList && areaList.length > 0) {
  27. this.allAddressData = areaList;
  28. this.initSelect();
  29. } else {
  30. req.getRequest(
  31. '/area/list',
  32. {},
  33. data => {
  34. req.setStorage('areaList', data);
  35. this.allAddressData = data;
  36. this.initSelect();
  37. },
  38. true
  39. );
  40. }
  41. },
  42. // 初始化地址选项
  43. initSelect() {
  44. this.updateSourceDate() // 更新源数据
  45. .updateAddressDate() // 更新结果数据
  46. .updateIdsDate()
  47. .$forceUpdate(); // 触发双向绑定
  48. },
  49. // 地址控件改变控件
  50. columnchange(d) {
  51. this.updateSelectIndex(d.detail.column, d.detail.value) // 更新选择索引
  52. .updateSourceDate() // 更新源数据
  53. .updateAddressDate()
  54. .updateIdsDate() // 更新结果数据
  55. .$forceUpdate(); // 触发双向绑定
  56. },
  57. /**
  58. * 更新源数据
  59. * */
  60. updateSourceDate() {
  61. this.array = [];
  62. this.array[0] = this.allAddressData.map(obj => {
  63. return {
  64. name: obj.label,
  65. id: obj.value
  66. };
  67. });
  68. this.array[1] = this.allAddressData[this.value[0]].nodes.map(obj => {
  69. return {
  70. name: obj.label,
  71. id: obj.value
  72. };
  73. });
  74. this.array[2] = this.allAddressData[this.value[0]].nodes[this.value[1]].nodes.map(obj => {
  75. return {
  76. name: obj.label,
  77. id: obj.value
  78. };
  79. });
  80. return this;
  81. },
  82. /**
  83. * 更新索引
  84. * */
  85. updateSelectIndex(column, value) {
  86. let arr = JSON.parse(JSON.stringify(this.value));
  87. arr[column] = value;
  88. if (column === 0) {
  89. arr[1] = 0;
  90. arr[2] = 0;
  91. }
  92. if (column === 1) {
  93. arr[2] = 0;
  94. }
  95. this.value = arr;
  96. return this;
  97. },
  98. /**
  99. * 更新结果数据
  100. * */
  101. updateAddressDate() {
  102. selectVal = [];
  103. selectVal[0] = this.array[0][this.value[0]].name + ' ';
  104. selectVal[1] = this.array[1][this.value[1]].name + ' ';
  105. if (this.array[2].length > 0) {
  106. selectVal[2] = this.array[2][this.value[2]].name + ' ';
  107. }
  108. return this;
  109. },
  110. updateIdsDate() {
  111. this.ids = [];
  112. this.ids[0] = this.array[0][this.value[0]].id;
  113. this.ids[1] = this.array[1][this.value[1]].id;
  114. if (this.array[2].length > 0) {
  115. this.ids[2] = this.array[2][this.value[2]].id;
  116. }
  117. return this;
  118. },
  119. /**
  120. * 点击确定
  121. * */
  122. bindPickerChange(e) {
  123. this.$emit('change', {
  124. index: this.value,
  125. data: selectVal,
  126. ids: this.ids
  127. });
  128. return this;
  129. }
  130. }
  131. };
  132. </script>
  133. <style></style>