wangding-pickerAddressSingle.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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. let obj = {
  29. label: '请选择',
  30. value: '0',
  31. nodes: []
  32. }
  33. this.allAddressData.map(item=>{
  34. item.nodes.unshift(obj);
  35. if(item.nodes && item.nodes.length > 0){
  36. item.nodes.map(it=>{
  37. if(it.nodes && it.nodes.length > 0){
  38. it.nodes.unshift(obj);
  39. }
  40. })
  41. }
  42. return item;
  43. })
  44. this.allAddressData.unshift(obj);
  45. this.initSelect();
  46. } else {
  47. req.getRequest(
  48. '/area/list',
  49. {},
  50. data => {
  51. req.setStorage('areaList', data);
  52. this.allAddressData = data;
  53. let obj = {
  54. label: '请选择',
  55. value: '0',
  56. nodes: []
  57. }
  58. this.allAddressData.map(item=>{
  59. item.nodes.unshift(obj);
  60. if(item.nodes && item.nodes.length > 0){
  61. item.nodes.map(it=>{
  62. if(it.nodes && it.nodes.length > 0){
  63. it.nodes.unshift(obj);
  64. }
  65. })
  66. }
  67. return item;
  68. })
  69. this.allAddressData.unshift(obj);
  70. this.initSelect();
  71. },
  72. true
  73. );
  74. }
  75. },
  76. // 初始化地址选项
  77. initSelect() {
  78. this.updateSourceDate() // 更新源数据
  79. .updateAddressDate() // 更新结果数据
  80. .updateIdsDate()
  81. .$forceUpdate(); // 触发双向绑定
  82. },
  83. // 地址控件改变控件
  84. columnchange(d) {
  85. this.updateSelectIndex(d.detail.column, d.detail.value) // 更新选择索引
  86. .updateSourceDate() // 更新源数据
  87. .updateAddressDate()
  88. .updateIdsDate() // 更新结果数据
  89. .$forceUpdate(); // 触发双向绑定
  90. },
  91. /**
  92. * 更新源数据
  93. * */
  94. updateSourceDate() {
  95. this.array = [];
  96. let obj = {
  97. name: '请选择',
  98. id: '0',
  99. }
  100. this.array[0] = this.allAddressData.map(obj => {
  101. return {
  102. name: obj.label,
  103. id: obj.value
  104. };
  105. });
  106. this.array[1] = this.allAddressData[this.value[0]].nodes.map(obj => {
  107. return {
  108. name: obj.label,
  109. id: obj.value
  110. };
  111. });
  112. this.array[2] = this.allAddressData[this.value[0]].nodes[this.value[1]].nodes.map(obj => {
  113. return {
  114. name: obj.label,
  115. id: obj.value
  116. };
  117. });
  118. return this;
  119. },
  120. /**
  121. * 更新索引
  122. * */
  123. updateSelectIndex(column, value) {
  124. let arr = JSON.parse(JSON.stringify(this.value));
  125. arr[column] = value;
  126. if (column === 0) {
  127. arr[1] = 0;
  128. arr[2] = 0;
  129. }
  130. if (column === 1) {
  131. arr[2] = 0;
  132. }
  133. this.value = arr;
  134. return this;
  135. },
  136. /**
  137. * 更新结果数据
  138. * */
  139. updateAddressDate() {
  140. selectVal = [];
  141. selectVal[0] = this.array[0][this.value[0]].name;
  142. selectVal[1] = this.array[1][this.value[1]].name;
  143. if (this.array[2].length > 0) {
  144. selectVal[2] = this.array[2][this.value[2]].name;
  145. }
  146. return this;
  147. },
  148. updateIdsDate() {
  149. this.ids = [];
  150. this.ids[0] = this.array[0][this.value[0]].id;
  151. this.ids[1] = this.array[1][this.value[1]].id;
  152. if (this.array[2].length > 0) {
  153. this.ids[2] = this.array[2][this.value[2]].id;
  154. }
  155. return this;
  156. },
  157. /**
  158. * 点击确定
  159. * */
  160. bindPickerChange(e) {
  161. this.$emit('change', {
  162. index: this.value,
  163. data: selectVal,
  164. ids: this.ids
  165. });
  166. return this;
  167. }
  168. }
  169. };
  170. </script>
  171. <style></style>