index.vue 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <template>
  2. <view :class="classes" :style="showMask && `z-index:9999`">
  3. <slot></slot>
  4. </view>
  5. </template>
  6. <script lang="ts">
  7. import { toRefs, reactive, provide, computed } from 'vue';
  8. import { createComponent } from '@/utils/create';
  9. const { componentName, create } = createComponent('menu');
  10. import menuitem from '@/packages/menuitem/index.vue';
  11. export default create({
  12. children: [menuitem],
  13. props: {
  14. type: {
  15. //单选 simple 多选 multiple,暂留
  16. type: String,
  17. default: 'simple'
  18. },
  19. hasMask: {
  20. type: Boolean,
  21. default: true
  22. }
  23. },
  24. setup(props, { emit }) {
  25. const state = reactive({
  26. showMask: false
  27. });
  28. const classes = computed(() => {
  29. const prefixCls = componentName;
  30. return {
  31. [prefixCls]: true
  32. };
  33. });
  34. const handleMaskShow = (status: boolean) => {
  35. state.showMask = status;
  36. };
  37. provide('menuRelation', {
  38. handleMaskShow,
  39. hasMask: props.hasMask
  40. });
  41. return { ...toRefs(state), classes };
  42. }
  43. });
  44. </script>
  45. <style lang="scss">
  46. @import 'index.scss';
  47. </style>