demo.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <template>
  2. <div class="demo full">
  3. <h2>{{ translate('basic') }}</h2>
  4. <nut-menu>
  5. <nut-menu-item v-model="state.value1" :options="options1" />
  6. <nut-menu-item v-model="state.value2" @change="handleChange" :options="options2" />
  7. </nut-menu>
  8. <h2>{{ translate('customMenuContent') }}</h2>
  9. <nut-menu>
  10. <nut-menu-item v-model="state.value1" :options="options1" />
  11. <nut-menu-item :title="translate('screen')" ref="item">
  12. <div :style="{ display: 'flex', flex: 1, 'justify-content': 'space-between', 'align-items': 'center' }">
  13. <div :style="{ marginRight: '10px' }">{{ translate('customContent') }}</div>
  14. <nut-button @click="onConfirm">{{ translate('confirm') }}</nut-button>
  15. </div>
  16. </nut-menu-item>
  17. </nut-menu>
  18. <h2>{{ translate('twoColsInOneLine') }}</h2>
  19. <nut-menu>
  20. <nut-menu-item v-model="state.value3" :cols="2" :options="options3" />
  21. </nut-menu>
  22. <h2>{{ translate('customActiveColor') }}</h2>
  23. <nut-menu active-color="green">
  24. <nut-menu-item v-model="state.value1" :options="options1" />
  25. <nut-menu-item v-model="state.value2" @change="handleChange" :options="options2" />
  26. </nut-menu>
  27. <h2>{{ translate('customIcons') }}</h2>
  28. <nut-menu>
  29. <nut-menu-item v-model="state.value1" :options="options1" titleIcon="joy-smile" />
  30. <nut-menu-item v-model="state.value2" @change="handleChange" :options="options2" optionIcon="checklist" />
  31. </nut-menu>
  32. <h2>{{ translate('expandDirection') }}</h2>
  33. <nut-menu direction="up">
  34. <nut-menu-item v-model="state.value1" :options="options1" />
  35. <nut-menu-item v-model="state.value2" @change="handleChange" :options="options2" />
  36. </nut-menu>
  37. <h2>{{ translate('disableMenu') }}</h2>
  38. <nut-menu>
  39. <nut-menu-item disabled v-model="state.value1" :options="options1" />
  40. <nut-menu-item disabled v-model="state.value2" @change="handleChange" :options="options2" />
  41. </nut-menu>
  42. </div>
  43. </template>
  44. <script lang="ts">
  45. import { reactive, ref, computed } from 'vue';
  46. import { createComponent } from '@/packages/utils/create';
  47. const { createDemo, translate } = createComponent('menu');
  48. import { useTranslate } from '@/sites/assets/util/useTranslate';
  49. useTranslate({
  50. 'zh-CN': {
  51. basic: '基本用法',
  52. customMenuContent: '自定义菜单内容',
  53. customContent: '自定义内容',
  54. screen: '筛选',
  55. confirm: '确认',
  56. twoColsInOneLine: '一行两列',
  57. customActiveColor: '自定义选中态颜色',
  58. customIcons: '自定义图标',
  59. expandDirection: '向上展开',
  60. disableMenu: '禁用菜单',
  61. allProducts: '全部商品',
  62. newProducts: '新款商品',
  63. activityProducts: '活动商品',
  64. defaultSort: '默认排序',
  65. praiseSort: '好评排序',
  66. salesVolumeSort: '销量排序',
  67. product1: '家庭清洁/纸品',
  68. product2: '个人护理',
  69. product3: '美妆护肤',
  70. product4: '食品饮料',
  71. product5: '家用电器',
  72. product6: '母婴',
  73. product7: '数码',
  74. product8: '电脑、办公',
  75. product9: '运动户外',
  76. product10: '厨具',
  77. product11: '医疗保健',
  78. product12: '酒类',
  79. product13: '生鲜',
  80. product14: '家具',
  81. product15: '传统滋补',
  82. product16: '汽车用品',
  83. product17: '家居日用'
  84. },
  85. 'en-US': {
  86. basic: 'Basic Usage',
  87. customMenuContent: 'Custom Menu Content',
  88. customContent: 'Custom content',
  89. screen: 'Screen',
  90. confirm: 'Confirm',
  91. twoColsInOneLine: 'Two Cols In One Line',
  92. customActiveColor: 'Custom Active Color',
  93. customIcons: 'Custom Icons',
  94. expandDirection: 'Expand Direction',
  95. disableMenu: 'Disable Menu',
  96. allProducts: 'All Products',
  97. newProducts: 'New Products',
  98. activityProducts: 'Activity Products',
  99. defaultSort: 'Default Sort',
  100. praiseSort: 'Praise Sort',
  101. salesVolumeSort: 'Sales Volume Sort',
  102. product1: 'Product1',
  103. product2: 'Product2',
  104. product3: 'Product3',
  105. product4: 'Product4',
  106. product5: 'Product5',
  107. product6: 'Product6',
  108. product7: 'Product7',
  109. product8: 'Product8',
  110. product9: 'Product9',
  111. product10: 'Product10',
  112. product11: 'Product11',
  113. product12: 'Product12',
  114. product13: 'Product13',
  115. product14: 'Product14',
  116. product15: 'Product15',
  117. product16: 'Product16',
  118. product17: 'Product17'
  119. }
  120. });
  121. export default createDemo({
  122. props: {},
  123. setup() {
  124. const state = reactive({
  125. value1: 0,
  126. value2: 'a',
  127. value3: 0
  128. });
  129. const options1 = computed(() => [
  130. { text: translate('allProducts'), value: 0 },
  131. { text: translate('newProducts'), value: 1 },
  132. { text: translate('activityProducts'), value: 2 }
  133. ]);
  134. const options2 = computed(() => [
  135. { text: translate('defaultSort'), value: 'a' },
  136. { text: translate('praiseSort'), value: 'b' },
  137. { text: translate('salesVolumeSort'), value: 'c' }
  138. ]);
  139. const options3 = computed(() => [
  140. { text: translate('allProducts'), value: 0 },
  141. { text: translate('product1'), value: 1 },
  142. { text: translate('product2'), value: 2 },
  143. { text: translate('product3'), value: 3 },
  144. { text: translate('product4'), value: 4 },
  145. { text: translate('product5'), value: 5 },
  146. { text: translate('product6'), value: 6 },
  147. { text: translate('product7'), value: 7 },
  148. { text: translate('product8'), value: 8 },
  149. { text: translate('product9'), value: 9 },
  150. { text: translate('product10'), value: 10 },
  151. { text: translate('product11'), value: 11 },
  152. { text: translate('product12'), value: 12 },
  153. { text: translate('product13'), value: 13 },
  154. { text: translate('product14'), value: 14 },
  155. { text: translate('product15'), value: 15 },
  156. { text: translate('product16'), value: 16 },
  157. { text: translate('product17'), value: 17 }
  158. ]);
  159. const item = ref('');
  160. const onConfirm = () => {
  161. item.value.toggle();
  162. };
  163. const handleChange = (val) => {
  164. console.log('val', val);
  165. };
  166. return {
  167. state,
  168. item,
  169. options1,
  170. options2,
  171. options3,
  172. onConfirm,
  173. handleChange,
  174. translate
  175. };
  176. }
  177. });
  178. </script>