demo.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <template>
  2. <div class="demo-list">
  3. <h4>基础用法</h4>
  4. <div class="show-demo">
  5. <nut-checkbox v-model="checkbox1" @change="changeBox1"
  6. >复选框</nut-checkbox
  7. >
  8. <span>{{ checkbox1 }}</span>
  9. </div>
  10. <p class="p-word"
  11. >组合使用 checkbox 时推荐使用 checkboxgroup 组件,见下方示例</p
  12. >
  13. <h4>CheckboxGroup基本用法</h4>
  14. <div class="show-demo">
  15. <nut-checkboxgroup v-model="checkboxGroup1">
  16. <nut-checkbox label="选项一"></nut-checkbox>
  17. <nut-checkbox label="选项二"></nut-checkbox>
  18. </nut-checkboxgroup>
  19. <p>选择状态:{{ checkboxGroup1 }}</p>
  20. </div>
  21. <h4>禁用状态</h4>
  22. <div class="show-demo show-demo-block">
  23. <nut-checkbox v-model="checkbox2" disabled>未选时禁用状态</nut-checkbox>
  24. <nut-checkbox v-model="checkbox3" disabled>已选时禁用状态</nut-checkbox>
  25. </div>
  26. <h4>CheckboxGroup整体禁用</h4>
  27. <div class="show-demo">
  28. <nut-checkboxgroup v-model="checkboxGroup2" disabled>
  29. <nut-checkbox label="选项一"></nut-checkbox>
  30. <nut-checkbox label="选项二"></nut-checkbox>
  31. </nut-checkboxgroup>
  32. <p>选择状态:{{ checkboxGroup2 }}</p>
  33. </div>
  34. <h4>自定义尺寸</h4>
  35. <div class="show-demo show-demo-block">
  36. <nut-checkbox v-model="checkbox4" size="small">小号1</nut-checkbox>
  37. <nut-checkbox v-model="checkbox5" size="base">默认</nut-checkbox>
  38. <nut-checkbox v-model="checkbox6" size="large">大号</nut-checkbox>
  39. <p>size可选值:'small', 'base', 'large'</p>
  40. </div>
  41. <h4>CheckboxGroup整体尺寸</h4>
  42. <div class="show-demo">
  43. <nut-checkboxgroup v-model="checkboxGroup3" size="small">
  44. <nut-checkbox label="选项一"></nut-checkbox>
  45. <nut-checkbox label="选项二"></nut-checkbox>
  46. </nut-checkboxgroup>
  47. </div>
  48. <h4>禁用动效</h4>
  49. <div class="show-demo">
  50. <nut-checkbox v-model="checkbox7" :animation="false"
  51. >没有动效</nut-checkbox
  52. >
  53. <p>animation属性值为false时,禁用自带动效</p>
  54. </div>
  55. <h4>CheckboxGroup整体禁用动效</h4>
  56. <div class="show-demo">
  57. <nut-checkboxgroup v-model="checkboxGroup4" :animation="false">
  58. <nut-checkbox label="没有动效1"></nut-checkbox>
  59. <nut-checkbox label="没有动效2"></nut-checkbox>
  60. </nut-checkboxgroup>
  61. </div>
  62. <h4>事件</h4>
  63. <div class="show-demo">
  64. <div class="demo-box">
  65. <nut-checkbox
  66. v-model="checkbox9"
  67. :label="'change事件'"
  68. @change="checkboxChange"
  69. >备选项</nut-checkbox
  70. >
  71. <span>{{ result1 }}</span>
  72. </div>
  73. </div>
  74. <h4>CheckboxGroup整体事件</h4>
  75. <div class="show-demo">
  76. <div>
  77. <nut-checkboxgroup v-model="checkboxGroup4" @change="getChange">
  78. <nut-checkbox label="选项一"></nut-checkbox>
  79. <nut-checkbox label="选项二"></nut-checkbox>
  80. </nut-checkboxgroup>
  81. </div>
  82. <span>{{ result2 }}</span>
  83. </div>
  84. <h4>自定义Class</h4>
  85. <div class="show-demo">
  86. <nut-checkbox class="my-checkbox" v-model="checkbox12"
  87. >自定义Class:"my-checkbox"</nut-checkbox
  88. >
  89. </div>
  90. <h4>全选与反选</h4>
  91. <div class="show-demo">
  92. <div>
  93. <nut-checkboxgroup
  94. ref="checkboxGroupDemo"
  95. v-model="checkboxGroup5"
  96. @change="getChange2"
  97. >
  98. <nut-checkbox label="选项一"></nut-checkbox>
  99. <nut-checkbox label="选项二"></nut-checkbox>
  100. <nut-checkbox label="选项三"></nut-checkbox>
  101. </nut-checkboxgroup>
  102. </div>
  103. <div>
  104. <span>{{ result3 }}</span>
  105. </div>
  106. <nut-button size="small" type="primary" @click="chooseAll(true)"
  107. >全选</nut-button
  108. >
  109. <nut-button size="small" type="primary" @click="chooseAll()"
  110. >反选</nut-button
  111. >
  112. <nut-button size="small" type="primary" @click="chooseAll(false)"
  113. >取消</nut-button
  114. >
  115. </div>
  116. <h4>CheckboxGroup排列方向</h4>
  117. <div class="show-demo">
  118. <div>
  119. <nut-checkboxgroup
  120. v-model="checkboxGroup6"
  121. direction="vertical"
  122. @change="getChange3"
  123. >
  124. <nut-checkbox label="选项一"></nut-checkbox>
  125. <nut-checkbox label="选项二"></nut-checkbox>
  126. <nut-checkbox label="选项三"></nut-checkbox>
  127. </nut-checkboxgroup>
  128. </div>
  129. <span>{{ result2 }}</span>
  130. </div>
  131. </div>
  132. </template>
  133. <script lang="ts">
  134. import { reactive, ref, toRefs } from 'vue';
  135. import { createComponent } from '@/utils/create';
  136. const { createDemo } = createComponent('checkbox');
  137. export default createDemo({
  138. setup(props, context) {
  139. const data = reactive({
  140. checkbox1: false,
  141. checkbox2: false,
  142. checkbox3: true,
  143. checkbox4: true,
  144. checkbox5: true,
  145. checkbox6: true,
  146. checkbox7: false,
  147. checkbox8: true,
  148. checkbox9: false,
  149. checkbox10: true,
  150. checkbox11: false,
  151. checkbox12: true,
  152. checkbox13: false,
  153. checkboxGroup1: ['选项一'],
  154. checkboxGroup2: ['选项一'],
  155. checkboxGroup3: [],
  156. checkboxGroup4: ['选项一'],
  157. checkboxGroup5: [],
  158. checkboxGroup6: []
  159. });
  160. const result = reactive({
  161. result1: '',
  162. result2: '',
  163. result3: '',
  164. result4: ''
  165. });
  166. const changeBox1 = (state: boolean) => {
  167. data.checkbox1 = state;
  168. };
  169. const checkboxChange = (state: string, val: string) => {
  170. result.result1 = state;
  171. };
  172. const getChange = (val: string) => {
  173. result.result2 = '选中状态选项:' + val;
  174. };
  175. const getChange2 = (val: string) => {
  176. result.result3 = '选中状态选项:' + val;
  177. };
  178. const getChange3 = (val: string) => {
  179. result.result4 = '选中状态选项:' + val;
  180. };
  181. const checkboxGroupDemo = ref(null);
  182. const chooseAll = (val: boolean | string) => {
  183. (checkboxGroupDemo.value as any).toggleAll(val);
  184. };
  185. return {
  186. changeBox1,
  187. checkboxChange,
  188. checkboxGroupDemo,
  189. getChange,
  190. getChange2,
  191. getChange3,
  192. chooseAll,
  193. ...toRefs(data),
  194. ...toRefs(result)
  195. };
  196. }
  197. });
  198. </script>
  199. <style>
  200. #app {
  201. background: #f7f8fa;
  202. }
  203. </style>
  204. <style lang="scss" scoped>
  205. .demo-list {
  206. margin: 60px 0;
  207. padding: 17px;
  208. h4 {
  209. margin-top: 10px;
  210. line-height: 20px;
  211. color: #909ca4;
  212. font-size: 14px;
  213. }
  214. .show-demo {
  215. margin-top: 10px;
  216. padding: 15px;
  217. background-color: #ffffff;
  218. border-radius: 7px;
  219. box-shadow: 0px 1px 7px 0px rgba(237, 238, 241, 1);
  220. p,
  221. span {
  222. margin-top: 10px;
  223. font-size: 14px;
  224. color: #636363;
  225. }
  226. span {
  227. font-size: 12px;
  228. }
  229. .nut-button {
  230. margin: 10px 10px 0 0;
  231. }
  232. }
  233. .p-word {
  234. margin: 15px 0;
  235. font-size: 14px;
  236. color: #636363;
  237. padding-left: 5px;
  238. border-left: 8px solid #03a9f4;
  239. }
  240. .show-demo-block {
  241. view {
  242. display: block;
  243. margin-bottom: 10px;
  244. }
  245. }
  246. .my-checkbox::v-deep .nut-checkbox {
  247. input:checked {
  248. background-image: url('https://img13.360buyimg.com/imagetools/jfs/t1/154120/1/10623/372/5fe013e6E4694fbf9/fd38d389b3a3b9c6.png');
  249. background-size: 100%;
  250. border: none;
  251. }
  252. }
  253. }
  254. </style>