select.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <template>
  2. <div>
  3. <nut-docheader
  4. :name="$route.name"
  5. :chName="$route.params.chnName"
  6. type="Component"
  7. desc="下拉选择面板,从页面底部弹出,支持多级联动选择及异步请求。"
  8. :showQrCode="true"></nut-docheader>
  9. <!-- <p>从页面底部弹出的select选择器,支持多级选择及异步请求的多级选择</p> -->
  10. <!-- <a class="button button-primary" href="/demo.html#/select" target="_blank">Demo</a> -->
  11. <h5>示例</h5>
  12. <h6>默认用法</h6>
  13. <nut-codebox :code="demo.code1" :imgUrl="['../asset/img/demo/select1.png']"></nut-codebox>
  14. <nut-codebox :code="demo.code11"></nut-codebox>
  15. <h6>显示内容自定义Slot</h6>
  16. <nut-codebox :code="demo.code2" :imgUrl="['../asset/img/demo/select2.png']"></nut-codebox>
  17. <nut-codebox :code="demo.code22"></nut-codebox>
  18. <h6>异步加载</h6>
  19. <nut-codebox :code="demo.code3" :imgUrl="['../asset/img/demo/select3.png']"></nut-codebox>
  20. <nut-codebox :code="demo.code33"></nut-codebox>
  21. <h5>Props</h5>
  22. <div class="tbl-wrapper">
  23. <table class="u-full-width">
  24. <thead>
  25. <tr>
  26. <th>参数</th>
  27. <th>说明</th>
  28. <th>类型</th>
  29. <th>默认值</th>
  30. <th>可选值</th>
  31. </tr>
  32. </thead>
  33. <tbody>
  34. <tr>
  35. <td>data</td>
  36. <td>显示数据,类型为[{"n": "1","s":[{"n","2"}]}]</td>
  37. <td>Array</td>
  38. <td>--</td>
  39. <td>--</td>
  40. </tr>
  41. <tr>
  42. <td>selected</td>
  43. <td>选中值,每一列的显示值已‘-’分割,如设置的值本列未找到,则默认第一个,例“2017-1-2”</td>
  44. <td>String</td>
  45. <td>--</td>
  46. <td>--</td>
  47. </tr>
  48. <tr>
  49. <td>nodeKey</td>
  50. <td>跟数据节点值,如传入数据为[{"n":"1","b":"2"}],nodeKey配置为n,则列表显示1</td>
  51. <td>String</td>
  52. <td>--</td>
  53. <td>n</td>
  54. </tr>
  55. <tr>
  56. <td>childKey</td>
  57. <td>子数据节点值,如传入数据为[{"n":"1","s":[{"n","1"}]}],childKey配置为s,则子列表为s数据</td>
  58. <td>String</td>
  59. <td>--</td>
  60. <td>s</td>
  61. </tr>
  62. <tr>
  63. <td>async</td>
  64. <td>是否支持异步,当为true时,data配置一层即可,列拖动时会返回对应索引,可动态添加后面的子列,如果为异步时,滑动完会弹出蒙层,为阻止多次请求。更新列时,可以使用第二个参数来关闭蒙层,或者使用hideSelectMash来关闭蒙层</td>
  65. <td>Boolean</td>
  66. <td>--</td>
  67. <td>false</td>
  68. </tr>
  69. </tbody>
  70. </table>
  71. </div>
  72. <h5>Slot</h5>
  73. <div class="tbl-wrapper">
  74. <table class="u-full-width">
  75. <thead>
  76. <tr>
  77. <th>名称</th>
  78. <th>说明</th>
  79. </tr>
  80. </thead>
  81. <tbody>
  82. <tr>
  83. <td>显示Slot</td>
  84. <td>默认显示的自定义样式Slot</td>
  85. </tr>
  86. </tbody>
  87. </table>
  88. </div>
  89. <h5>Events</h5>
  90. <div class="tbl-wrapper">
  91. <table class="u-full-width">
  92. <thead>
  93. <tr>
  94. <th>事件名</th>
  95. <th>说明</th>
  96. <th>回调参数</th>
  97. </tr>
  98. </thead>
  99. <tbody>
  100. <tr>
  101. <td>slideEnd</td>
  102. <td>当异步开启时,每当滑动结束时触发,并且会自动弹出蒙层来阻止用户多次滑动请求多次,切记注意判断的时间,否则会造成死循环,。</td>
  103. <td>[数据数据],数据索引对应列(用于更新数据)</td>
  104. </tr>
  105. <tr>
  106. <td>change</td>
  107. <td>点击确认时触发</td>
  108. <td>[每列选中的对象值]</td>
  109. </tr>
  110. </tbody>
  111. </table>
  112. </div>
  113. <h5>Methods</h5>
  114. <div class="tbl-wrapper">
  115. <table class="u-full-width">
  116. <thead>
  117. <tr>
  118. <th>事件名</th>
  119. <th>说明</th>
  120. <th>传入参数</th>
  121. </tr>
  122. </thead>
  123. <tbody>
  124. <tr>
  125. <td>updateSelect</td>
  126. <td>当异步开启时,动态添加第二列时调用</td>
  127. <td>符合列表数据结构(nodeKey与childKey),第二个参数为是否在更新后关闭蒙层,主要用在最后一列渲染完后使用。</td>
  128. </tr>
  129. <tr>
  130. <td>showSelectMask</td>
  131. <td>显示蒙层,主要用于异步操作时,防止多次请求</td>
  132. <td>蒙曾显示文字,默认:数据加载中...</td>
  133. </tr>
  134. <tr>
  135. <td>hideSelectMask</td>
  136. <td>隐藏蒙层,异步时更新数据完成之后,去掉蒙层使用</td>
  137. <td>无</td>
  138. </tr>
  139. </tbody>
  140. </table>
  141. </div>
  142. </div>
  143. </template>
  144. <script>
  145. import Vue from 'vue';
  146. export default {
  147. data(){
  148. return{
  149. demo:{
  150. code1: `<nut-select class="demo1-select"
  151. :selected="demo1.selected"
  152. :data="demo1.data"
  153. @change="demo1Change">
  154. {{demo1.selected}}
  155. </nut-select>`,
  156. code11:`export default {
  157. data(){
  158. return{
  159. demo1: {
  160. data: [
  161. {"n": "北京", "s": [{"n": "海淀区"},{"n": "通州区"}]},
  162. {"n": "上海", "s": [{"n": "浦东新区"},{"n": "其他区"}]},
  163. {"n": "河北省", "s": [{"n": "石家庄市", "s": [{"n": "城东区"},{"n": "城西区"}]},{"n":"秦皇岛市"}]},
  164. {"n": "上海", "s": [{"n": "浦东新区"},{"n": "其他区"}]},
  165. {"n": "上海", "s": [{"n": "浦东新区"},{"n": "其他区"}]},
  166. {"n": "上海", "s": [{"n": "浦东新区"},{"n": "其他区"}]},
  167. {"n": "上海", "s": [{"n": "浦东新区"},{"n": "其他区"}]},
  168. {"n": "上海", "s": [{"n": "浦东新区"},{"n": "其他区"}]},
  169. {"n": "上海", "s": [{"n": "浦东新区"},{"n": "其他区"}]}
  170. ],
  171. selected: '河北省-石家庄市-城东区'
  172. }
  173. }
  174. }
  175. }`,
  176. code2: `
  177. <nut-select
  178. :selected="demo2.selected"
  179. :data="demo2.data"
  180. @change="demo2Change"
  181. class="demo-select">
  182. <slot><a class="button button-primary">{{demo2.selected}}</a></slot>
  183. </nut-select>`,
  184. code22:`export default {
  185. data(){
  186. return{
  187. demo2: {
  188. selected: '2018-11',
  189. data: [
  190. {"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"}]},
  191. {"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"}]},
  192. {"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"}]},
  193. {"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"}]},
  194. {"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"}]},
  195. {"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"}]},
  196. {"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"}]}
  197. ]
  198. }
  199. }
  200. }
  201. }`,
  202. code3: `
  203. <nut-select
  204. :selected="demo3.selected"
  205. :data="demo3.data"
  206. :async = true
  207. @change="demo3Change"
  208. @slideEnd="slideEnd"
  209. class="demo-select">
  210. <slot><a class="button button-primary">{{demo3.selected}}</a></slot>
  211. </nut-select>`,
  212. code33:`export default {
  213. data(){
  214. return{
  215. demo3: {
  216. selected: '1',
  217. data: [
  218. {"n":"1"},{"n":"2"},{"n":"3"},{"n":"4"},{"n":"5"},{"n":"6"}
  219. ]
  220. }
  221. }
  222. }
  223. }`,
  224. }
  225. }
  226. },
  227. methods:{
  228. }
  229. }
  230. </script>
  231. <style>
  232. </style>