nav-city-dropdown.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <template>
  2. <view class="mpvue-picker">
  3. <page-head :title="title"></page-head>
  4. <view class="uni-padding-wrap uni-common-mt">
  5. <view class="uni-title">
  6. <!-- #ifndef H5 -->
  7. <uni-icons size="16" type="info"></uni-icons>
  8. <!-- #endif -->
  9. 说明 :
  10. </view>
  11. <view class="uni-helllo-text">
  12. <view>
  13. 在App端可在pages.json里配置buttons,暂不支持动态改变buttons的样式,使用onNavigationBarButtonTap可监听城市选择按钮的点击事件。
  14. </view>
  15. </view>
  16. </view>
  17. <mpvue-picker
  18. :themeColor="themeColor"
  19. ref="mpvuePicker"
  20. :mode="mode"
  21. :deepLength="deepLength"
  22. :pickerValueDefault="pickerValueDefault"
  23. @onConfirm="onConfirm"
  24. @onCancel="onCancel"
  25. :pickerValueArray="pickerValueArray"
  26. ></mpvue-picker>
  27. <!-- <picker ref="mpvuePicker" @change="bindPickerChange" :value="index" :range="pickerValueArray" range-key="label">
  28. <view class="">{{pickerValueArray[index].label}}</view>
  29. </picker>
  30. --> </view>
  31. </template>
  32. <script>
  33. // https://github.com/zhetengbiji/mpvue-picker
  34. import mpvuePicker from '../../../components/mpvue-picker/mpvuePicker.vue';
  35. // https://github.com/zhetengbiji/mpvue-citypicker
  36. export default {
  37. components: {
  38. mpvuePicker
  39. },
  40. data() {
  41. return {
  42. title: 'nav-city-dropdown',
  43. pickerValueArray: [
  44. {
  45. label: '北京市',
  46. value: 110000
  47. },
  48. {
  49. label: '天津市',
  50. value: 120000
  51. },
  52. {
  53. label: '广州市',
  54. value: 440100
  55. },
  56. {
  57. label: '深圳市',
  58. value: 440300
  59. }
  60. ],
  61. themeColor: '#007AFF',
  62. mode: '',
  63. deepLength: 1,
  64. pickerValueDefault: [0],
  65. index: 0,
  66. };
  67. },
  68. onReady() {
  69. this.setStyle(0, '北京市');
  70. },
  71. methods: {
  72. onCancel(e) {
  73. console.log(e);
  74. },
  75. // 单列
  76. showSinglePicker() {
  77. this.mode = 'selector';
  78. this.deepLength = 1;
  79. this.pickerValueDefault = [0];
  80. this.$refs.mpvuePicker.show();
  81. },
  82. onConfirm(e) {
  83. console.log(e.label);
  84. this.setStyle(0, e.label);
  85. },
  86. /**
  87. * 修改导航栏buttons
  88. * index[number] 修改的buttons 下标索引,最右边索引为0
  89. * text[string] 需要修改的text 内容
  90. */
  91. setStyle(index, text) {
  92. let pages = getCurrentPages();
  93. let page = pages[pages.length - 1];
  94. if (text.length > 3) {
  95. text = text.substr(0, 3) + '...';
  96. }
  97. // #ifdef APP-PLUS
  98. let currentWebview = page.$getAppWebview();
  99. let titleNView = currentWebview.getStyle().titleNView;
  100. // 添加文字过长截取为3个字符,请根据自己业务需求更改
  101. titleNView.buttons[0].text = text;
  102. currentWebview.setStyle({
  103. titleNView: titleNView
  104. });
  105. // #endif
  106. // #ifdef H5
  107. // h5 临时方案
  108. document.getElementsByClassName('uni-btn-icon')[1].innerText = text;
  109. // #endif
  110. }
  111. },
  112. onBackPress() {
  113. if (this.$refs.mpvuePicker.showPicker) {
  114. this.$refs.mpvuePicker.pickerCancel();
  115. return true;
  116. }
  117. },
  118. onUnload() {
  119. if (this.$refs.mpvuePicker.showPicker) {
  120. this.$refs.mpvuePicker.pickerCancel();
  121. }
  122. },
  123. onNavigationBarButtonTap(e) {
  124. if (e.index === 0) {
  125. this.showSinglePicker();
  126. }
  127. }
  128. };
  129. </script>
  130. <style></style>