cwg-language.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <template>
  2. <view class="cwg-language" >
  3. <cwg-dropdown :menu-list="customMenuList" @menuClick="handleMenuClick" showActive :activeKey="lang">
  4. <view class="pc-header-btn cursor-pointer" :data-tooltip="t('vu.tooltip.t101')">
  5. <cwg-icon name="cwg-lang" :color="iconColor " :size="20" />
  6. <text class="lang-text">{{ t(`language.${lang}`) }}</text>
  7. </view>
  8. </cwg-dropdown>
  9. </view>
  10. </template>
  11. <script setup lang="ts">
  12. import { computed } from 'vue'
  13. import { useI18n } from 'vue-i18n'
  14. import { localesList, switchAppLanguage } from '@/locale/index'
  15. import { lang } from '@/composables/config'
  16. const props = defineProps({
  17. iconColor: {
  18. type: String,
  19. default: '#97A1C0'
  20. },
  21. })
  22. const { t, locale } = useI18n()
  23. const customMenuList = computed(() =>
  24. localesList.map((code) => ({
  25. label: t(`language.${code}`),
  26. type: code
  27. })),
  28. )
  29. function handleMenuClick({ value }: { value: any }) {
  30. const type = value?.type ?? value
  31. switchAppLanguage(type, { locale, lang })
  32. }
  33. function getFlagSrc(code: string) {
  34. switch (code) {
  35. case 'en':
  36. return '/static/flag-en.png'
  37. case 'cn':
  38. return '/static/flag-cn.png'
  39. case 'zhHant':
  40. return '/static/flag-zhHant.png'
  41. case 'es':
  42. return '/static/flag-es.png'
  43. default:
  44. return '/static/flag-en.png'
  45. }
  46. }
  47. </script>
  48. <style scoped lang="scss">
  49. @import "@/uni.scss";
  50. .pc-header-btn {
  51. width: auto;
  52. display: flex;
  53. align-items: center;
  54. cursor: pointer;
  55. gap: px2rpx(6);
  56. padding: 0 px2rpx(5);
  57. }
  58. .cwg-language {
  59. :deep(.cwg-dropdown-menu-container) {
  60. left: px2rpx(-40) !important;
  61. right: px2rpx(0) !important;
  62. }
  63. @media screen and (max-width: 991px) {
  64. :deep(.cwg-dropdown-menu-container) {
  65. right: px2rpx(-20) !important;
  66. .menu{
  67. max-height: 70vh;
  68. overflow-y: scroll;
  69. scrollbar-width: thin;
  70. }
  71. }
  72. }
  73. @media screen and (max-width: 768px) {
  74. :deep(.cwg-dropdown-menu-container) {
  75. right: px2rpx(0) !important;
  76. }
  77. }
  78. }
  79. :deep(.cwg-dropdown-menu-container .menu .menu-item) {
  80. min-height: px2rpx(36);
  81. }
  82. :deep(.cwg-dropdown) {
  83. overflow: visible !important;
  84. }
  85. </style>