123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- <template>
- <div class="head-com">
- <div class="head-com-left">
- <CusEllipsis v-if="initDuty" :value="dutyPeopleCpt"/>
- </div>
- <div class="head-com-right">
- <img class="icon-date" src="@/assets/images/layout/head_icon-1.png">
- <div class="date">{{currentDateCpt}}</div>
- <img class="icon-user" src="@/assets/images/layout/head_icon-2.png">
- <div class="name">{{$store.state.app.userInfo?.displayName}}</div>
- <div class="dept">{{$store.state.app.userInfo?.dept?.organizationName}}</div>
- <div class="button __hover" @click="onLogout">退出</div>
- </div>
- </div>
- </template>
- <script lang="ts">
- import {
- defineComponent,
- computed,
- onMounted,
- ref,
- reactive,
- watch,
- getCurrentInstance,
- ComponentInternalInstance,
- toRefs,
- nextTick
- } from 'vue'
- import {useStore} from 'vuex'
- import {useRouter, useRoute} from 'vue-router'
- import {toLogin} from "@/utils/permissions";
- import {ElMessageBox} from "element-plus";
- export default defineComponent({
- name: '',
- components: {},
- setup() {
- const store = useStore();
- const router = useRouter();
- const route = useRoute();
- const that = (getCurrentInstance() as ComponentInternalInstance).appContext.config.globalProperties
- const state = reactive({
- initDuty: false
- })
- const dutyPeopleCpt = computed(() => {
- let str = ''
- const dutyHallLeader = `值班厅领导:${store.state.app.dutyInfo?.dutyHallLeader ? store.state.dictionary.dutyHallLeaderMap.get(store.state.app.dutyInfo.dutyHallLeader) : '无'}`
- const totalClass = `总值班:${store.state.app.dutyInfo?.totalClass ? store.state.dictionary.totalClassMap.get(store.state.app.dutyInfo.totalClass) : '无'}`
- const shiftLeader = `带班领导:${store.state.app.dutyInfo?.shiftLeader ? store.state.dictionary.shiftLeaderMap.get(store.state.app.dutyInfo.shiftLeader) : '无'}`
- const dutyPerson = `值班员:${store.state.app.dutyInfo?.dutyPerson ? store.state.app.dutyInfo.dutyPerson.split(',').map(v => store.state.dictionary.dutyPersonMap.get(v)).join('、') : '无'}`
- str += `${dutyHallLeader} ${totalClass} ${shiftLeader} ${dutyPerson}`
- return str
- })
- const currentDateCpt = computed(() => {
- let d = ''
- switch (new Date(store.state.app.timestamp).getDay()) {
- case 0: d = '星期日'
- break
- case 1: d = '星期一'
- break
- case 2: d = '星期二'
- break
- case 3: d = '星期三'
- break
- case 4: d = '星期四'
- break
- case 5: d = '星期五'
- break
- case 6: d = '星期六'
- break
- }
- return that.$util.YMDHms(store.state.app.timestamp) + ' ' + d
- })
- const onLogout = () => {
- ElMessageBox.confirm('请确认是否退出登录!', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: "warning",
- }).then(() => {
- that.$api.logout()
- toLogin()
- }).catch(() => {})
- }
- // 获取字典
- const initDictionary = () => {
- Promise.all([
- store.dispatch('dictionary/LOAD_DICT_LIST', 'duty_hall_leader'),
- store.dispatch('dictionary/LOAD_DICT_LIST', 'total_class'),
- store.dispatch('dictionary/LOAD_DICT_LIST', 'shift_leader'),
- store.dispatch('dictionary/LOAD_DICT_LIST', 'duty_person'),
- ]).then(() => {
- state.initDuty = true
- })
- }
- onMounted(() => {
- initDictionary()
- store.dispatch('app/LOAD_DUTY_INFO')
- })
- return {
- ...toRefs(state),
- dutyPeopleCpt,
- currentDateCpt,
- onLogout
- }
- },
- })
- </script>
- <style scoped lang="scss">
- .head-com {
- width: 100%;
- height: 100%;
- display: flex;
- justify-content: space-between;
- padding-top: 42px;
- box-sizing: border-box;
- background-image: url("@/assets/images/layout/head_bg.png");
- background-size: 100% 100%;
- font-size: 14px;
- font-family: PingFang SC-Regular, PingFang SC;
- font-weight: 400;
- color: #2EB8FF;
- line-height: 20px;
- .head-com-left {
- width: 30%;
- margin-left: 30px;
- height: fit-content;
- word-spacing: 16px;
- }
- .head-com-right {
- margin-right: 30px;
- height: fit-content;
- display: flex;
- .icon-date, .icon-user {
- width: 16px;
- height: 16px;
- margin-right: 8px;
- margin-top: 1px;
- }
- .date {
- margin-right: 16px;
- }
- .name {
- margin-right: 4px;
- }
- .dept {
- margin-right: 16px;
- }
- .button {
- background-image: url("@/assets/images/layout/head_exit.png");
- background-repeat: no-repeat;
- background-size: 100% 100%;
- width: 54px;
- height: 26px;
- color: #FFFFFF;
- display: flex;
- justify-content: center;
- }
- }
- }
- </style>
|