index.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <template>
  2. <div class="flex flex-row w-full h-16 border-l border-gray-200 drop-shadow dark:border-l-0"
  3. style="background-color: var(--header-bg-color)">
  4. <div class="flex flex-row justify-between w-full">
  5. <div class="flex flex-row min-w-[17rem]">
  6. <div class="flex items-center w-8 h-full ml-2 hover:cursor-pointer" @click="store.changeExpaned">
  7. <Icon name="list-bullet" class="w-6 h-8" />
  8. </div>
  9. <div class="flex items-center pl-3 w-96 sm:pl-0" v-if="isShowNavData">
  10. <!-- <Breadcrumbs /> -->
  11. <el-select :disabled="isAdverDisabled" style="width:260px;" v-model="navData.advertiser" filterable
  12. value-key="id" remote @change="adverChange" reserve-keyword placeholder="请选择投手" :remote-method="remoteMethod">
  13. <el-option v-for="item in navDataArr" :key="item.id" :label="item.username" :value="item" />
  14. </el-select>
  15. <el-select v-model="navData.app" style="width:260px;" class="m-2" @change="appChange" clearable filterable
  16. placeholder="请选择" size="default">
  17. <el-option v-for="item in miniPrograms" :key="item.id" :label="item.name" :value="item.app_name">
  18. <div class="flex items-center">
  19. <el-image :src="item.type_logo" style="width: 20px; height: 20px" class="mr-5" fit="contain"></el-image>
  20. <span class="mr-5">{{ item.name }}</span>
  21. </div>
  22. </el-option>
  23. </el-select>
  24. </div>
  25. </div>
  26. <div class="flex w-52 sm:min-w-[18rem] flex-row item-center pl-1 sm:pl-0 justify-end sm:justify-between mr-4">
  27. <div class="hidden w-3/5 sm:flex">
  28. <!-- 菜单切换 -->
  29. <!-- <MenuSelect /> -->
  30. <!-- 搜索 -->
  31. <MenuSearch />
  32. <!-- 多语言 -->
  33. <Lang />
  34. <!-- 暗黑主题 -->
  35. <Theme />
  36. <!-- <Notification /> -->
  37. </div>
  38. <Profile />
  39. </div>
  40. </div>
  41. </div>
  42. </template>
  43. <script setup lang="ts">
  44. import { useAppStore } from '@/stores/modules/app'
  45. import { advertiserListAdvertiser } from '@/api/advertiser/index'
  46. import Notification from './notification.vue'
  47. import MenuSearch from './menuSearch.vue'
  48. import MenuSelect from './menuSelect.vue'
  49. import { useUserStore } from '@/stores/modules/user/index'
  50. import Cache from '@/support/cache';
  51. import router from '@/router'
  52. const store = useAppStore()
  53. const miniPrograms = ref([])
  54. const navData = ref({})
  55. const navDataArr = ref([])
  56. const searchMenuVisiable = ref(false)
  57. const isAdverDisabled = ref(false)
  58. const userStore = useUserStore()
  59. const adverChange = (e) => {
  60. console.log(e, 'userStore', userStore.roles, navData.value, 'navData.value');
  61. navData.value.app = ''
  62. miniPrograms.value = e.miniPrograms
  63. }
  64. const remoteMethod = (query: string) => {
  65. if (query) {
  66. init({ username: query })
  67. } else {
  68. init({})
  69. }
  70. }
  71. const isShowNavData = computed(() => {
  72. console.log(userStore.getRoles, 'getRoles');
  73. if (userStore.getRoles?.some(el => (el?.identify == 'optimizer'))) {
  74. navData.value.advertiser = navDataArr.value[0]
  75. isAdverDisabled.value = true;
  76. miniPrograms.value = navDataArr.value[0]?.miniPrograms
  77. }
  78. return userStore.getRoles?.some(el => (el?.identify == 'optimizer'))
  79. })
  80. const appChange = (e) => {
  81. initPer()
  82. console.log(e, 'appChange', userStore.roles, navData.value, 'appChange.valappChangeappChangeue');
  83. Cache.set('nav_data', JSON.stringify(navData.value));
  84. // router.push('/')
  85. // let timer = setTimeout(() => {
  86. // location.reload()
  87. // clearTimeout(timer)
  88. // }, 100)
  89. searchMenuVisiable.value = false
  90. }
  91. const initPer = () => {
  92. userStore.getUserInfo().then(res => {
  93. const {
  94. id,
  95. username,
  96. email,
  97. avatar,
  98. permissions,
  99. roles,
  100. rememberToken,
  101. status
  102. } = res;
  103. // set user info
  104. userStore.setId(id);
  105. userStore.setUsername(username);
  106. userStore.setEmail(email);
  107. userStore.setRoles(roles);
  108. userStore.setRememberToken(rememberToken);
  109. userStore.setStatus(status);
  110. userStore.setAvatar(avatar);
  111. userStore.setPermissions(permissions);
  112. })
  113. }
  114. const init = (params?: object) => {
  115. advertiserListAdvertiser({ ...params, limit: 50 }).then(res => {
  116. console.log(res, 'advertiserListAdvertiseradvertiserListAdvertiser');
  117. navDataArr.value = res.data
  118. })
  119. }
  120. onMounted(() => {
  121. init()
  122. let timer = setTimeout(() => {
  123. if (JSON.parse(Cache.get('nav_data'))) {
  124. navData.value = JSON.parse(Cache.get('nav_data')) || {}
  125. miniPrograms.value = JSON.parse(Cache.get('nav_data'))?.advertiser?.miniPrograms || []
  126. } else {
  127. if (miniPrograms.value.length > 0) {
  128. navData.value.app = miniPrograms.value[0].app_name
  129. Cache.set('nav_data', JSON.stringify(navData.value));
  130. initPer()
  131. }
  132. }
  133. clearTimeout(timer)
  134. }, 300);
  135. })
  136. </script>