CountryDict.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <template>
  2. <view>
  3. <uni-nav-bar
  4. status-bar = true
  5. fixed = true
  6. background-color="#03b6b3"
  7. color="#ffffff"
  8. left-icon="arrowleft"
  9. @clickLeft="navigateBack">
  10. <text slot="default" style="text-align: center; flex: 1; font-size: 18px; font-weight: bold;">Country/Region</text>
  11. </uni-nav-bar>
  12. <view>
  13. <uni-indexed-list :options="list" :showSelect="false" @click="bindClick"></uni-indexed-list>
  14. </view>
  15. </view>
  16. </template>
  17. <script>
  18. import uniNavBar from "@/components/uni-nav-bar/uni-nav-bar.vue";
  19. import uniIndexedList from "@/components/uni-indexed-list/uni-indexed-list.vue";
  20. export default {
  21. comments: {uniNavBar, uniIndexedList},
  22. data() {
  23. return {
  24. list: []
  25. }
  26. },
  27. mounted(){
  28. this.initDicts();
  29. },
  30. methods: {
  31. bindClick(e){
  32. let finallyCode = e.item.name.toLowerCase();
  33. const eventChannel = this.getOpenerEventChannel()
  34. eventChannel.emit('acceptSelectedCountry', {code: finallyCode, country: e.item.name});
  35. uni.navigateBack();
  36. },
  37. navigateBack() {
  38. uni.navigateBack()
  39. },
  40. async initDicts(){
  41. const res= await this.$myRequest({
  42. url: '/sys/sysDicts',
  43. data: {
  44. type: 'unit_country_dict_en'
  45. }
  46. })
  47. res.data[0].forEach(code => {
  48. let letter = code.label[0].toUpperCase();
  49. let itemValue = code.label;
  50. if(this.list.length){
  51. let hasSameLetter = false;
  52. let listItemIndex;
  53. for(let l = 0; l < this.list.length; l++){
  54. if(this.list[l].letter == letter){
  55. hasSameLetter = true;
  56. listItemIndex = l;
  57. break;
  58. }
  59. }
  60. if(hasSameLetter){
  61. this.list[listItemIndex].data.push(itemValue);
  62. }else{
  63. this.list.push({
  64. letter: letter,
  65. data: [itemValue]
  66. });
  67. }
  68. }else{
  69. this.list.push({
  70. letter: letter,
  71. data: [itemValue]
  72. });
  73. }
  74. this.list.sort(function(a, b){
  75. return a.letter.charCodeAt()-b.letter.charCodeAt();
  76. })
  77. })
  78. },
  79. }
  80. }
  81. </script>
  82. <style scoped>
  83. /deep/ .uni-indexed-list__menu{
  84. width: 30px;
  85. }
  86. </style>