index.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <template>
  2. <Layout.Header :style="headerStyle" class="layout-header">
  3. <Space :size="30">
  4. <img style="height: 52px;" src="~@/assets/images/logo-login.png" alt=""/>
  5. <span style="font-size: 30px;margin-left:-10px;">华北油田智能检索</span>
  6. </Space>
  7. <Space :size="20">
  8. <!-- <Search />-->
  9. <Tooltip title="修改密码" placement="bottom" v-if="isDev">
  10. <LockOutlined @click="updatePassword()"/>
  11. <UpdatePassword ref="updatePasswordRef"></UpdatePassword>
  12. </Tooltip>
  13. <FullScreen/>
  14. <Tooltip title="退出系统" placement="bottom" v-if="isDev">
  15. <PoweroffOutlined @click.prevent="doLogout"/>
  16. </Tooltip>
  17. <LocalePicker/>
  18. <!--
  19. <Dropdown placement="bottomRight">
  20. <Avatar :src="userInfo.headImg" :alt="userInfo.name">{{ userInfo.name }}</Avatar>
  21. <template #overlay>
  22. <Menu>
  23. <Menu.Item @click="$router.push({ name: 'account-about' })">
  24. {{ $t('routes.account.about') }}
  25. </Menu.Item>
  26. <Menu.Item @click="$router.push({ name: 'account-settings' })">
  27. {{ $t('routes.account.settings') }}
  28. </Menu.Item>
  29. <Menu.Divider />
  30. <Menu.Item>
  31. <div @click.prevent="doLogout">
  32. <poweroff-outlined /> {{ $t('layout.header.dropdownItemLoginOut') }}
  33. </div>
  34. </Menu.Item>
  35. </Menu>
  36. </template>
  37. </Dropdown> -->
  38. <!-- <ProjectSetting />-->
  39. </Space>
  40. </Layout.Header>
  41. </template>
  42. <script lang="tsx" setup>
  43. import {computed, nextTick, type CSSProperties, ref, onMounted} from 'vue';
  44. import {useRouter, useRoute} from 'vue-router';
  45. import {
  46. QuestionCircleOutlined,
  47. PoweroffOutlined,
  48. LockOutlined,
  49. ExportOutlined,
  50. } from '@ant-design/icons-vue';
  51. import {
  52. message,
  53. Modal,
  54. Dropdown,
  55. Menu,
  56. Space,
  57. Avatar,
  58. Tooltip,
  59. type MenuTheme,
  60. } from 'ant-design-vue';
  61. import {Search, FullScreen, ProjectSetting} from './components/';
  62. import {useUserStore} from '@/store/modules/user';
  63. import {useKeepAliveStore} from '@/store/modules/keepAlive';
  64. /*import {useLockscreenStore} from '@/store/modules/lockscreen';*/
  65. import {LOGIN_NAME} from '@/router/constant';
  66. import {useThemeStore} from '@/store/modules/projectConfig';
  67. import UpdatePassword from'@/views/system/users/updatePassword.vue';
  68. import {getConfig} from "@/utils/config";
  69. defineProps({
  70. collapsed: {
  71. type: Boolean,
  72. },
  73. theme: {
  74. type: String as PropType<MenuTheme>,
  75. },
  76. });
  77. const emit = defineEmits(['update:collapsed']);
  78. const userStore = useUserStore();
  79. const themeStore = useThemeStore();
  80. /*const lockscreenStore = useLockscreenStore();*/
  81. const keepAliveStore = useKeepAliveStore();
  82. const router = useRouter();
  83. const route = useRoute();
  84. const userInfo = computed(() => userStore.userInfo);
  85. const headerStyle = computed<CSSProperties>(() => {
  86. const {navTheme, layout} = themeStore;
  87. const isDark = navTheme === 'dark' && layout === 'topmenu';
  88. return {
  89. backgroundColor: navTheme === 'realDark' || isDark ? '' : 'rgba(255, 255, 255, 0.85)',
  90. color: isDark ? 'rgba(255, 255, 255, 0.85)' : '',
  91. };
  92. });
  93. const updatePasswordRef = ref();
  94. const isDev = ref(false);
  95. // 退出登录
  96. const doLogout = () => {
  97. Modal.confirm({
  98. title: '您确定要退出登录吗?',
  99. icon: <QuestionCircleOutlined/>,
  100. centered: true,
  101. onOk: async () => {
  102. // 如果不是rootadmin,则退出登录
  103. await userStore.logout();
  104. keepAliveStore.clear();
  105. // 移除标签页
  106. localStorage.clear();
  107. message.success('成功退出登录');
  108. await nextTick();
  109. router.replace({
  110. name: LOGIN_NAME,
  111. query: {
  112. /*redirect: route.fullPath,*/
  113. },
  114. });
  115. },
  116. });
  117. };
  118. const updatePassword = () => {
  119. updatePasswordRef.value.show(userInfo.value.userId,userInfo.value.userName,userInfo.value.loginId);
  120. };
  121. onMounted(() => {
  122. getConfig().then((res: any) => {
  123. isDev.value = res.isDev;
  124. }, () => {
  125. isDev.value = true;
  126. })
  127. })
  128. </script>
  129. <style lang="less" scoped>
  130. .layout-header {
  131. position: sticky;
  132. top: 0;
  133. z-index: 10;
  134. display: flex;
  135. height: @header-height;
  136. padding: 0 20px;
  137. justify-content: space-between;
  138. align-items: center;
  139. background-color: #1890ff !important;
  140. color: white;
  141. * {
  142. cursor: pointer;
  143. }
  144. }
  145. </style>