wangding-pickerAddress.vue 2.6 KB

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