header-tools.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <!-- 顶栏右侧区域 -->
  2. <template>
  3. <div class="ele-admin-header-tool">
  4. <!-- 全屏切换 -->
  5. <div
  6. class="ele-admin-header-tool-item hidden-xs-only"
  7. @click="toggleFullscreen"
  8. >
  9. <i v-if="fullscreen" class="el-icon-_screen-restore"></i>
  10. <i v-else class="el-icon-_screen-full"></i>
  11. </div>
  12. <!-- 语言切换 -->
  13. <div class="ele-admin-header-tool-item">
  14. <i18n-icon />
  15. </div>
  16. <!-- 消息通知 -->
  17. <div class="ele-admin-header-tool-item">
  18. <header-notice />
  19. </div>
  20. <div class="ele-admin-header-tool-item">
  21. <el-select v-model="groupId" @change="groupIdChange">
  22. <el-option
  23. v-for="item in loginChangeGroupVOList"
  24. :key="item.groupId"
  25. :label="item.groupName"
  26. :value="item.groupId"
  27. >
  28. </el-option>
  29. </el-select>
  30. </div>
  31. <div class="ele-admin-header-tool-item">
  32. <el-select v-model="roleId" @change="roleChange">
  33. <el-option
  34. v-for="item in loginChangeRoleVOList"
  35. :key="item.roleId"
  36. :label="item.roleName"
  37. :value="item.roleId"
  38. >
  39. </el-option>
  40. </el-select>
  41. </div>
  42. <!-- 用户信息 -->
  43. <div class="ele-admin-header-tool-item">
  44. <el-dropdown @command="onUserDropClick">
  45. <div class="ele-admin-header-avatar">
  46. <el-avatar
  47. :src="
  48. loginUser && loginUser.avatarAddress
  49. ? loginUser.avatarAddress
  50. : xyy
  51. "
  52. />
  53. <span class="hidden-xs-only">{{
  54. loginUser && loginUser.nickname ? loginUser.nickname : ''
  55. }}</span>
  56. <i class="el-icon-arrow-down"></i>
  57. </div>
  58. <template v-slot:dropdown>
  59. <el-dropdown-menu>
  60. <!-- <router-link to="/user/profile">-->
  61. <!-- <el-dropdown-item icon="el-icon-user">个人中心</el-dropdown-item>-->
  62. <!-- </router-link>-->
  63. <el-dropdown-item command="profile" icon="el-icon-user">
  64. {{ $t('layout.header.profile') }}
  65. </el-dropdown-item>
  66. <el-dropdown-item command="password" icon="el-icon-key">
  67. {{ $t('layout.header.password') }}
  68. </el-dropdown-item>
  69. <el-dropdown-item
  70. command="logout"
  71. icon="el-icon-switch-button"
  72. divided
  73. >
  74. {{ $t('layout.header.logout') }}
  75. </el-dropdown-item>
  76. </el-dropdown-menu>
  77. </template>
  78. </el-dropdown>
  79. </div>
  80. <!-- 主题设置 -->
  81. <div class="ele-admin-header-tool-item" @click="openSetting">
  82. <i class="el-icon-_more"></i>
  83. </div>
  84. <!-- 修改密码弹窗 -->
  85. <password-modal :visible.sync="passwordVisible" />
  86. <!-- 主题设置抽屉 -->
  87. <setting-drawer :visible.sync="settingVisible" />
  88. </div>
  89. </template>
  90. <script>
  91. import HeaderNotice from './header-notice.vue';
  92. import PasswordModal from './password-modal.vue';
  93. import SettingDrawer from './setting-drawer.vue';
  94. import I18nIcon from './i18n-icon.vue';
  95. import { logout } from '@/utils/page-tab-util';
  96. import { userLogout } from '@/api/system/user';
  97. import xyy from '@/assets/xyy.jpg';
  98. import router from '@/router/index';
  99. import { getCurrentUser,setCurrentUser } from '@/utils/token-util';
  100. export default {
  101. components: { HeaderNotice, PasswordModal, SettingDrawer, I18nIcon },
  102. props: {
  103. // 是否是全屏
  104. fullscreen: Boolean
  105. },
  106. data() {
  107. return {
  108. xyy,
  109. // 是否显示修改密码弹窗
  110. passwordVisible: false,
  111. // 是否显示主题设置抽屉
  112. settingVisible: false,
  113. groupId: '',
  114. roleId: '',
  115. currentUser:{
  116. currentGroupId:'',
  117. currentRoleId:''
  118. }
  119. };
  120. },
  121. created() {
  122. this.currentUser = getCurrentUser()
  123. this.groupId = this.currentUser.currentGroupId;
  124. this.roleId = this.currentUser.currentRoleId;
  125. },
  126. computed: {
  127. // 当前用户信息
  128. loginUser() {
  129. return this.$store.state.user.info;
  130. },
  131. // 部门下拉
  132. loginChangeGroupVOList() {
  133. return this.$store.state.user?.info?.loginChangeGroupVOList;
  134. },
  135. // 角色下拉
  136. loginChangeRoleVOList() {
  137. return this.$store.state.user?.info?.loginChangeGroupVOList.find(
  138. (item) => item.groupId == this.groupId
  139. )?.loginChangeRoleVOList;
  140. }
  141. },
  142. methods: {
  143. groupIdChange(val) {
  144. this.roleChange(this.loginChangeRoleVOList[0].roleId);
  145. },
  146. roleChange(val) {
  147. this.roleId = val;
  148. this.currentUser.currentGroupId = this.groupId;
  149. this.currentUser.currentRoleId = val;
  150. setCurrentUser(this.currentUser)
  151. this.$store
  152. .dispatch('user/fetchUserInfo')
  153. .then(({ menus, homePath, authoritiesRouter }) => {
  154. router.roleChange({ menus, homePath, authoritiesRouter });
  155. });
  156. },
  157. /* 用户信息下拉点击事件 */
  158. onUserDropClick(command) {
  159. if (command === 'password') {
  160. this.passwordVisible = true;
  161. } else if (command === 'profile') {
  162. if (this.$route.fullPath !== '/user/profile') {
  163. this.$router.push('/user/profile');
  164. }
  165. } else if (command === 'logout') {
  166. // 退出登录
  167. this.$confirm(
  168. this.$t('layout.logout.message'),
  169. this.$t('layout.logout.title'),
  170. { type: 'warning' }
  171. )
  172. .then(() => {
  173. userLogout().then((res) => {
  174. localStorage.removeItem('userId');
  175. logout();
  176. });
  177. })
  178. .catch(() => {});
  179. }
  180. },
  181. /* 全屏切换 */
  182. toggleFullscreen() {
  183. this.$emit('fullscreen');
  184. },
  185. /* 打开设置抽屉 */
  186. openSetting() {
  187. this.settingVisible = true;
  188. }
  189. }
  190. };
  191. </script>