ShareSheetButtons.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <FlexRow position="relative" align="center" wrap>
  3. <IconButton
  4. v-for="(item, k) in items"
  5. :key="k"
  6. :icon="getDefaultIconNames(item.icon)"
  7. :disabled="item.disabled"
  8. :color="item.color"
  9. :size="iconSize"
  10. :backgroundColor="item.backgroundColor"
  11. direction="column"
  12. justify="center"
  13. align="center"
  14. :buttonStyle="itemStyle"
  15. @click="emit('click', item)"
  16. >
  17. <Text v-if="item.title" :innerStyle="itemTextStyle" :text="item.title" />
  18. </IconButton>
  19. </FlexRow>
  20. </template>
  21. <script setup lang="ts">
  22. import type { ShareSheetItem } from './ShareSheet.vue';
  23. import IconMobile from '../images/share_mobile.png';
  24. import IconQQ from '../images/share_qq.png';
  25. import IconSina from '../images/share_sina.png';
  26. import IconWechat from '../images/share_wechart.png';
  27. import IconLink from '../images/share_sheet_link.png';
  28. import IconPoster from '../images/share_sheet_poster.png';
  29. import IconQrcode from '../images/share_sheet_qrcode.png';
  30. import IconWechatMoments from '../images/share_sheet_wechat_moments.png';
  31. import IconWechatAppQrcode from '../images/share_sheet_weapp_qrcode.png';
  32. import type { ViewStyle, TextStyle } from '../theme/ThemeDefine';
  33. import Text from '../basic/Text.vue';
  34. import IconButton from '../basic/IconButton.vue';
  35. import FlexRow from '../layout/FlexRow.vue';
  36. const props = defineProps<{
  37. items: ShareSheetItem[];
  38. iconSize?: number|string;
  39. itemStyle?: ViewStyle;
  40. itemTextStyle?: TextStyle;
  41. }>();
  42. const emit = defineEmits<{
  43. (e: 'click', item: ShareSheetItem): void;
  44. }>();
  45. function getDefaultIconNames(name: string|undefined) {
  46. switch (name) {
  47. case 'mobile': return IconMobile;
  48. case 'qq': return IconQQ;
  49. case 'wechat-moments': return IconWechatMoments;
  50. case 'sina': return IconSina;
  51. case 'wechat': return IconWechat;
  52. case 'link': return IconLink;
  53. case 'poster': return IconPoster;
  54. case 'qrcode': return IconQrcode;
  55. case 'wechat-app-qrcode': return IconWechatAppQrcode;
  56. }
  57. return name;
  58. }
  59. defineOptions({
  60. options: {
  61. virtualHost: true,
  62. }
  63. })
  64. </script>