123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- <script setup lang="ts">
- import { storeToRefs } from "pinia";
- import { useRoute, useRouter } from "vue-router";
- import { useAppStore } from "@/store/modules/app";
- import { useTagsViewStore } from "@/store/modules/tagsView";
- import { useUserStore } from "@/store/modules/user";
- import { SchoolList } from "@/api/school/types";
- import { getSchoolList } from "@/api/school";
- import { watch } from "vue";
- import SvgIcon from "@/components/SvgIcon/index.vue";
- const appStore = useAppStore();
- const tagsViewStore = useTagsViewStore();
- const userStore = useUserStore();
- const route = useRoute();
- const router = useRouter();
- const { device } = storeToRefs(appStore); // 设备类型:desktop-宽屏设备 || mobile-窄屏设备
- /**
- * 左侧菜单栏显示/隐藏
- */
- function toggleSideBar() {
- appStore.toggleSidebar(true);
- }
- /**
- * vueUse 全屏
- */
- const { isFullscreen, toggle } = useFullscreen();
- /**
- * 注销
- */
- function logout() {
- ElMessageBox.confirm("确定注销并退出系统吗?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- }).then(() => {
- userStore
- .logout()
- .then(() => {
- tagsViewStore.delAllViews();
- })
- .then(() => {
- router.push(`/login?redirect=${route.fullPath}`);
- });
- });
- }
- /**
- * 学校数据
- */
- const schoolData = ref<SchoolList[]>([
- {
- school_id: 0,
- name: "全部学校",
- },
- {
- school_id: 1,
- name: "学校1",
- },
- ]);
- const schoolNumber = ref(0);
- function querySchoolList() {
- getSchoolList()
- .then(({ data }) => {
- schoolData.value.concat(data);
- })
- .catch((error) => {
- console.log(error);
- });
- }
- onMounted(() => {
- // querySchoolList();
- });
- watch(
- () => schoolNumber.value,
- (newValue, oldValue) => {
- console.log("schoolNumber", newValue, oldValue);
- userStore.changeSchool(schoolNumber.value);
- }
- );
- </script>
- <template>
- <!-- 顶部导航栏 -->
- <div class="navbar">
- <!-- 左侧面包屑 -->
- <div class="flex">
- <hamburger
- :is-active="appStore.sidebar.opened"
- @toggle-click="toggleSideBar"
- />
- <breadcrumb />
- </div>
- <!-- 右侧导航设置 -->
- <div class="flex">
- <!-- 导航栏设置(窄屏隐藏)-->
- <div v-if="device !== 'mobile'" class="setting-container">
- <!--全屏 -->
- <div class="setting-item" @click="toggle">
- <svg-icon
- :icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
- size="16px"
- />
- </div>
- </div>
- <!-- 学校选择下拉框 -->
- <el-select v-model="schoolNumber" size="large" placeholder="全部学校">
- <el-option
- v-for="item in schoolData"
- :key="item.school_id"
- :label="item.name"
- :value="item.school_id"
- />
- </el-select>
- <!-- 用户头像 -->
- <div class="avatar-container">
- <span class="spl">|</span>
- <img :src="userStore.avatar + '?imageView2/1/w/80/h/80'" />
- <span class="">{{ userStore.nickname }}</span>
- <span @click="logout"
- ><svg-icon icon-class="exit" color="#006eff" size="20px"
- /></span>
- </div>
- </div>
- </div>
- </template>
- <style lang="scss" scoped>
- .navbar {
- display: flex;
- align-items: center;
- justify-content: space-between;
- height: 70px;
- background-color: #fff;
- box-shadow: 0 0 1px #0003;
- .setting-container {
- display: flex;
- align-items: center;
- .setting-item {
- display: inline-block;
- width: 30px;
- height: 70px;
- line-height: 70px;
- color: #5a5e66;
- text-align: center;
- cursor: pointer;
- &:hover {
- background: rgb(249 250 251 / 100%);
- }
- }
- }
- .el-select {
- padding: 15px 0;
- margin-left: 12px;
- }
- .avatar-container {
- display: flex;
- align-items: center;
- justify-items: center;
- margin: 0 20px 0 0;
- cursor: pointer;
- img {
- width: 40px;
- height: 40px;
- border-radius: 20px;
- }
- span {
- margin-left: 12px;
- font-size: 16px;
- color: #494949;
- &.spl {
- margin: 0 12px 0 12px;
- color: #d7d8d8;
- }
- }
- }
- .svg-icon {
- margin-bottom: -2px;
- }
- }
- </style>
|