select.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <template>
  2. <div>
  3. <nut-demoheader
  4. :name="$route.name"
  5. ></nut-demoheader>
  6. <!-- DEMO区域 -->
  7. <h5>示例</h5>
  8. <p>默认用法</p>
  9. <nut-select class="demo1-select" :selected="demo1.selected" :data="demo1.data" @change="demo1Change">{{demo1.selected}}</nut-select>
  10. <!-- DEMO代码 -->
  11. <p>显示内容自定义Slot</p>
  12. <nut-select
  13. :selected="demo2.selected"
  14. :data="demo2.data"
  15. @change="demo2Change"
  16. class="demo-select">
  17. <slot><a class="button button-primary">{{demo2.selected}}</a></slot>
  18. </nut-select>
  19. <!-- DEMO代码 -->
  20. <p>异步加载</p>
  21. <nut-select
  22. :selected="demo3.selected"
  23. :data="demo3.data"
  24. :async = true
  25. @change="demo3Change"
  26. @slideEnd="slideEnd"
  27. class="demo-select">
  28. <slot><a class="button button-primary">{{demo3.selected}}</a></slot>
  29. </nut-select>
  30. <!-- DEMO代码 -->
  31. <div id="demo-select"></div>
  32. </div>
  33. </template>
  34. <script>
  35. export default {
  36. data(){
  37. return{
  38. demo1: {
  39. data: [
  40. {
  41. "n": "北京",
  42. "s": [
  43. {"n": "海淀区","s": [{"n": "城东区"},{"n": "城西区"}]},
  44. {"n": "通州区","s": [{"n": "通州东区"},{"n": "通州西区"}]}
  45. ]
  46. },
  47. {
  48. "n": "上海",
  49. "s": [
  50. {"n": "浦东新区", "s": [{"n": "浦东东区"},{"n": "浦东西区"}]},
  51. {"n": "陆家嘴区","s": [{"n": "陆家嘴东区"},{"n": "陆家嘴西区"}]}
  52. ]
  53. },
  54. {
  55. "n": "河北省",
  56. "s": [
  57. {"n": "石家庄市", "s": [{"n": "城东区"},{"n": "城西区"}]},
  58. {"n":"秦皇岛市", "s": [{"n": "海港区"},{"n": "山海关区"}]}
  59. ]
  60. }
  61. ],
  62. selected: '河北省-石家庄市-城东区',
  63. txt: `<nut-select class="demo1-select"
  64. :selected="demo1.selected"
  65. :data="demo1.data"
  66. @change="demo1Change">{{demo1.selected}}</nut-select>
  67. export default {
  68. methods:{
  69. demo1Change(val) {
  70. this.demo1.selected = val.join('-');
  71. }
  72. }
  73. }`
  74. },
  75. demo2: {
  76. selected: '2018-11',
  77. data: [
  78. {"n":"2017","s":[{"n":"1"},{"n":"2"},{"n":"3"},{"n":"4"},{"n":"5"},{"n":"6"},{"n":"7"},{"n":"8"},{"n":"9"},{"n":"10"},{"n":"11"},{"n":"12"}]},
  79. {"n":"2018","s":[{"n":"1"},{"n":"2"},{"n":"3"},{"n":"4"},{"n":"5"},{"n":"6"},{"n":"7"},{"n":"8"},{"n":"9"},{"n":"10"},{"n":"11"},{"n":"12"}]},
  80. {"n":"2019","s":[{"n":"1"},{"n":"2"},{"n":"3"},{"n":"4"},{"n":"5"},{"n":"6"},{"n":"7"},{"n":"8"},{"n":"9"},{"n":"10"},{"n":"11"},{"n":"12"}]},
  81. {"n":"2020","s":[{"n":"1"},{"n":"2"},{"n":"3"},{"n":"4"},{"n":"5"},{"n":"6"},{"n":"7"},{"n":"8"},{"n":"9"},{"n":"10"},{"n":"11"},{"n":"12"}]},
  82. {"n":"2021","s":[{"n":"1"},{"n":"2"},{"n":"3"},{"n":"4"},{"n":"5"},{"n":"6"},{"n":"7"},{"n":"8"},{"n":"9"},{"n":"10"},{"n":"11"},{"n":"12"}]},
  83. {"n":"2022","s":[{"n":"1"},{"n":"2"},{"n":"3"},{"n":"4"},{"n":"5"},{"n":"6"},{"n":"7"},{"n":"8"},{"n":"9"},{"n":"10"},{"n":"11"},{"n":"12"}]},
  84. {"n":"2023","s":[{"n":"1"},{"n":"2"},{"n":"3"},{"n":"4"},{"n":"5"},{"n":"6"},{"n":"7"},{"n":"8"},{"n":"9"},{"n":"10"},{"n":"11"},{"n":"12"}]}
  85. ],
  86. txt: `<nut-select
  87. :selected="demo2.selected"
  88. :data="demo2.data"
  89. @change="demo2Change">
  90. <slot><button>{{demo2.selected}}</button></slot>
  91. </nut-select>
  92. export default {
  93. methods:{
  94. demo2Change(val) {
  95. this.demo2.selected = val.join('-');
  96. }
  97. }
  98. }
  99. `
  100. },
  101. demo3: {
  102. selected: '1',
  103. data: [
  104. {"n":"1"},{"n":"2"},{"n":"3"},{"n":"4"},{"n":"5"},{"n":"6"}
  105. ],
  106. txt: `
  107. <nut-select
  108. :selected="demo3.selected"
  109. :data="demo3.data"
  110. :async = true
  111. @change="demo3Change"
  112. @slideEnd="slideEnd">
  113. <slot><button>{{demo3.selected}}</button></slot>
  114. </nut-select>
  115. export default {
  116. methods:{
  117. slideEnd(val, $select) {
  118. console.log(val);
  119. $select.updateSelect([{"n": parseInt(Math.random()*10)},{"n": parseInt(Math.random()*10)}]);
  120. },
  121. demo3Change(val) {
  122. this.demo3.selected = val.join('-');
  123. }
  124. }
  125. }`
  126. }
  127. }
  128. },
  129. methods:{
  130. demo1Change(val) {
  131. var arr = [];
  132. for(var i = 0; i < val.length; i++) {
  133. arr.push(val[i].n);
  134. }
  135. this.demo1.selected = arr.join('-');
  136. },
  137. demo2Change(val) {
  138. var arr = [];
  139. for(var i = 0; i < val.length; i++) {
  140. arr.push(val[i].n);
  141. }
  142. this.demo2.selected = arr.join('-');
  143. },
  144. demo3Change(val) {
  145. var arr = [];
  146. for(var i = 0; i < val.length; i++) {
  147. arr.push(val[i].n);
  148. }
  149. this.demo3.selected = arr.join('-');
  150. },
  151. slideEnd(val, $select) {
  152. $select.showSelectMask('我可以自定义,为了让你看到我延迟2s消失');
  153. if(val.length < 3) {
  154. $select.updateSelect([{"n": parseInt(Math.random()*10)},{"n": parseInt(Math.random()*10)}]);
  155. }else {
  156. setTimeout(function() {
  157. $select.hideSelectMask();
  158. },2000)
  159. }
  160. }
  161. }
  162. }
  163. </script>
  164. <style>
  165. .demo1-select {
  166. border:1px solid #ccc;
  167. height: 40px;
  168. line-height: 40px;
  169. padding-left: 10px;
  170. display: block;
  171. }
  172. .demo-select {
  173. width: 100%;
  174. }
  175. </style>