55 lines
3.9 KiB
Vue
55 lines
3.9 KiB
Vue
<template>
|
||
<view v-if="user" class="page-shell portal-page"><PortalHeader title="个人中心" :user="user" :show-profile="false" /><view class="portal-content profile-content"><view class="profile-card"><view class="profile-avatar">{{ user.name.slice(0, 1) }}</view><view><text class="profile-name">{{ user.name }}</text><text class="profile-role">国内仓作业员</text></view></view><view class="profile-list"><view class="profile-row"><text>作业仓库</text><text class="profile-value">{{ user.warehouse }}</text></view><view class="profile-row"><text>当前班次</text><text class="profile-value">08:00–17:00</text></view><view class="profile-row"><text>应用版本</text><text class="profile-value">{{ appVersion }}</text></view><button class="profile-row profile-row-action" @tap="checkUpdate"><text>检查更新</text><text class="profile-row-arrow">›</text></button><button class="profile-row profile-row-action" @tap="showSettings"><text>系统设置</text><text class="profile-row-arrow">›</text></button></view><button class="logout-action" @tap="openLogout">退出登录</button></view><uni-popup ref="logoutPopup" type="center" :is-mask-click="true" @change="handleLogoutChange"><view class="logout-dialog-card" role="dialog" aria-modal="true" aria-label="确认退出登录"><PopupHeader title="确认退出登录?" tone="danger" @close="closeLogout" /><text class="logout-dialog-content">退出后会清空本次会话中的箱号草稿、扫码记录与作业进度。</text><view class="logout-dialog-actions"><button class="logout-dialog-cancel" @tap="closeLogout">取消</button><button class="logout-dialog-confirm" @tap="logout">确认退出</button></view></view></uni-popup><view v-if="toast" class="app-toast warning" role="status">设置功能将在后续版本开放</view></view>
|
||
</template>
|
||
<script>
|
||
import { logoutCurrentSession } from '@/api/logout-session.js'
|
||
import PortalHeader from '@/components/PortalHeader.vue'
|
||
import PopupHeader from '@/components/PopupHeader.vue'
|
||
import { session, requireSession, getSessionRevision } from '@/stores/session.js'
|
||
import { checkForAppUpdate } from '@/utils/app-update.js'
|
||
|
||
export default {
|
||
components: { PopupHeader, PortalHeader },
|
||
data() { return { user: session.currentUser, appVersion: '0.0.1', logoutOpen: false, toast: false } },
|
||
onShow() { if (!requireSession()) return; this.user = session.currentUser; this.loadAppVersion() },
|
||
beforeUnmount() { clearTimeout(this._toastTimer) },
|
||
onBackPress() { if (!this.logoutOpen) return false; this.closeLogout(); return true },
|
||
methods: {
|
||
loadAppVersion() {
|
||
// #ifdef APP-PLUS
|
||
this.appVersion = String(plus.runtime.version || this.appVersion)
|
||
// #endif
|
||
},
|
||
checkUpdate() {
|
||
// #ifdef APP-PLUS
|
||
checkForAppUpdate({ manual: true })
|
||
return
|
||
// #endif
|
||
// #ifndef APP-PLUS
|
||
uni.showToast({ title: '请在 PDA App 中检查更新', icon: 'none' })
|
||
// #endif
|
||
},
|
||
openLogout() { this.logoutOpen = true; this.$refs.logoutPopup.open() },
|
||
closeLogout() { this.logoutOpen = false; this.$refs.logoutPopup.close() },
|
||
handleLogoutChange(event) { this.logoutOpen = Boolean(event.show) },
|
||
showSettings() { clearTimeout(this._toastTimer); this.toast = true; this._toastTimer = setTimeout(() => { this.toast = false }, 2200) },
|
||
logout() {
|
||
if (this._logoutPromise) return this._logoutPromise
|
||
this.closeLogout()
|
||
const operation = logoutCurrentSession()
|
||
this.user = null
|
||
this._logoutPromise = operation.then(result => {
|
||
if (getSessionRevision() === result.clearedRevision) uni.reLaunch({ url: '/pages/login/login' })
|
||
return result
|
||
}, error => {
|
||
if (getSessionRevision() === error.logoutRevision) {
|
||
uni.reLaunch({ url: '/pages/login/login', complete() { uni.showToast({ title: '已清除本地登录,服务端退出未确认', icon: 'none', duration: 3000 }) } })
|
||
}
|
||
return { revoked: false, error }
|
||
})
|
||
return this._logoutPromise
|
||
}
|
||
}
|
||
}
|
||
</script>
|