You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
5.5 KiB
Vue
185 lines
5.5 KiB
Vue
<template>
|
|
<view class="setting-container" :style="{ height: `${windowHeight}px` }">
|
|
<NavBar :title="pageTitle" />
|
|
<view class="menu-list">
|
|
<view class="list-cell list-cell-arrow" @click="handleLanguageChange">
|
|
<view class="menu-item-box">
|
|
<view class="iconfont icon-global menu-icon"></view>
|
|
<view>{{ t('setting.language') }}</view>
|
|
</view>
|
|
<view class="text-grey">{{ t('setting.currentLanguage', { language: currentLanguageLabel }) }}</view>
|
|
</view>
|
|
<view class="list-cell list-cell-arrow" @click="handleToPwd">
|
|
<view class="menu-item-box">
|
|
<view class="iconfont icon-password menu-icon"></view>
|
|
<view>{{ t('mine.changePassword') }}</view>
|
|
</view>
|
|
</view>
|
|
<view class="list-cell list-cell-arrow" @click="handleTerminalChange">
|
|
<view class="menu-item-box">
|
|
<view class="iconfont icon-phone menu-icon"></view>
|
|
<view>{{ t('setting.terminalMode') }}</view>
|
|
</view>
|
|
<view class="text-grey">{{ t('setting.currentTerminal', { terminal: currentTerminalLabel }) }}</view>
|
|
</view>
|
|
<view class="list-cell list-cell-arrow" @click="handleToUpgrade">
|
|
<view class="menu-item-box">
|
|
<view class="iconfont icon-refresh menu-icon"></view>
|
|
<view>{{ t('setting.checkUpdate') }}</view>
|
|
</view>
|
|
</view>
|
|
<view class="list-cell list-cell-arrow" @click="handleCleanTmp">
|
|
<view class="menu-item-box">
|
|
<view class="iconfont icon-clean menu-icon"></view>
|
|
<view>{{ t('setting.cleanCache') }}</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="cu-list menu">
|
|
<view class="cu-item item-box">
|
|
<view class="content text-center" @click="handleLogout">
|
|
<text class="text-black">{{ t('setting.logout') }}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view>
|
|
<uni-popup ref="popup" type="dialog">
|
|
<uni-popup-dialog type="info" :cancelText="t('common.close')" :confirmText="t('common.exit')" :title="t('common.notice')" :content="t('common.confirmLogout')"
|
|
@confirm="dialogConfirm" @close="dialogClose">
|
|
</uni-popup-dialog>
|
|
</uni-popup>
|
|
</view>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { computed, ref } from "vue";
|
|
import { useI18n } from 'vue-i18n'
|
|
import useUserStore from '@/store/modules/user'
|
|
import { getCurrentLocale, setLocale } from '@/locales'
|
|
import NavBar from '@/components/common/NavBar.vue'
|
|
import { getTerminalType, setTerminalType, TERMINAL_TYPE_MOBILE, TERMINAL_TYPE_SCANNER } from '@/utils/terminal'
|
|
|
|
const userStore = useUserStore()
|
|
const { t } = useI18n()
|
|
|
|
const pageTitle = computed(() => t('nav.setting'))
|
|
const windowHeight = ref(uni.getSystemInfoSync().windowHeight);
|
|
const popup = ref(null);
|
|
const currentLocale = ref(getCurrentLocale())
|
|
const currentTerminalType = ref(getTerminalType())
|
|
const currentLanguageLabel = computed(() => currentLocale.value === 'en-US' ? t('setting.enUS') : t('setting.zhCN'))
|
|
const currentTerminalLabel = computed(() => currentTerminalType.value === TERMINAL_TYPE_SCANNER ? t('setting.scanner') : t('setting.mobile'))
|
|
|
|
function handleToPwd() {
|
|
uni.navigateTo({
|
|
url: '/pages_mine/pages/pwd/index'
|
|
});
|
|
};
|
|
|
|
function handleToUpgrade() {
|
|
uni.showToast({
|
|
title: t('common.moduleBuilding'),
|
|
mask: false,
|
|
icon: "none",
|
|
duration: 1000
|
|
});
|
|
};
|
|
|
|
function handleCleanTmp() {
|
|
uni.showToast({
|
|
title: t('common.moduleBuilding'),
|
|
mask: false,
|
|
icon: "none",
|
|
duration: 1000
|
|
});
|
|
};
|
|
function handleLanguageChange() {
|
|
uni.showActionSheet({
|
|
itemList: [t('setting.zhCN'), t('setting.enUS')],
|
|
success: ({ tapIndex }) => {
|
|
const nextLocale = tapIndex === 1 ? 'en-US' : 'zh-CN'
|
|
setLocale(nextLocale)
|
|
currentLocale.value = nextLocale
|
|
uni.showToast({
|
|
title: t('common.languageSwitched'),
|
|
icon: 'none',
|
|
duration: 1000
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
function handleTerminalChange() {
|
|
uni.showActionSheet({
|
|
itemList: [t('setting.mobile'), t('setting.scanner')],
|
|
success: async ({ tapIndex }) => {
|
|
const nextTerminalType = tapIndex === 1 ? TERMINAL_TYPE_SCANNER : TERMINAL_TYPE_MOBILE
|
|
if (nextTerminalType === currentTerminalType.value) {
|
|
return
|
|
}
|
|
|
|
const previousTerminalType = currentTerminalType.value
|
|
setTerminalType(nextTerminalType)
|
|
currentTerminalType.value = nextTerminalType
|
|
uni.showLoading({
|
|
title: t('setting.switchingTerminal')
|
|
})
|
|
|
|
try {
|
|
await userStore.refreshPermissionInfo()
|
|
uni.showToast({
|
|
title: t('setting.terminalSwitched', { terminal: currentTerminalLabel.value }),
|
|
icon: 'none',
|
|
duration: 1000
|
|
})
|
|
} catch (error) {
|
|
setTerminalType(previousTerminalType)
|
|
currentTerminalType.value = previousTerminalType
|
|
await userStore.refreshPermissionInfo().catch(() => {})
|
|
uni.showToast({
|
|
title: t('common.saveFailed'),
|
|
icon: 'none',
|
|
duration: 1000
|
|
})
|
|
} finally {
|
|
uni.hideLoading()
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
function handleLogout() {
|
|
popup.value.open();
|
|
};
|
|
function dialogConfirm() {
|
|
userStore.logOut().then(() => {
|
|
uni.reLaunch({
|
|
url: '/pages/login'
|
|
});
|
|
})
|
|
};
|
|
function dialogClose() {
|
|
};
|
|
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.page {
|
|
background-color: #f8f8f8;
|
|
}
|
|
|
|
.item-box {
|
|
background-color: #FFFFFF;
|
|
margin: 30rpx;
|
|
display: flex;
|
|
flex-direction: row;
|
|
justify-content: center;
|
|
align-items: center;
|
|
padding: 10rpx;
|
|
border-radius: 8rpx;
|
|
color: #303133;
|
|
font-size: 32rpx;
|
|
}
|
|
</style>
|