Commit 52fbb4b0 by pangchong

feat: 菜单数据调整

parent c944567e
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
<view :style="{ height: safeAreaInsets?.top + 'px' }" v-if="custom"></view> <view :style="{ height: safeAreaInsets?.top + 'px' }" v-if="custom"></view>
<!-- 自定义导航栏 --> <!-- 自定义导航栏 -->
<global-navbar :title="title" v-if="showNavbar"> <global-navbar :title="title" v-if="showNavbar">
<template #left> <template #left v-if="pages.length > 1">
<view v-if="isEdit" class="cancel" @tap="handleCancel">取消</view> <view v-if="isEdit" class="cancel" @tap="handleCancel">取消</view>
<uni-icons type="left" size="16" @tap="goBack" v-else></uni-icons> <uni-icons type="left" size="16" @tap="goBack" v-else></uni-icons>
</template> </template>
...@@ -137,6 +137,8 @@ const handleSave = () => { ...@@ -137,6 +137,8 @@ const handleSave = () => {
const handleChangeEdit = (value) => { const handleChangeEdit = (value) => {
isEdit.value = value isEdit.value = value
} }
// 获取页面栈
const pages = getCurrentPages()
defineExpose({ defineExpose({
handleChangeEdit handleChangeEdit
}) })
......
<template>沟通</template> <template>
<global-page title="沟通"></global-page>
</template>
<script setup></script> <script setup></script>
......
...@@ -68,6 +68,7 @@ const handleLogin = async () => { ...@@ -68,6 +68,7 @@ const handleLogin = async () => {
} }
} }
onLoad(() => { onLoad(() => {
loginForm.verifyCode = ''
getGifCaptcha() getGifCaptcha()
}) })
</script> </script>
......
<template>个人中心</template> <template>
<global-page title="个人中心">
<template #bottom>
<global-button size="large" type="primary" @tap="handleLogOut">退出登录</global-button>
</template>
</global-page>
</template>
<script setup></script> <script setup>
import useUserStore from '@/store/user'
//退出登录
const userStore = useUserStore()
const handleLogOut = () => {
userStore.handleLogOut()
}
</script>
<style lang="scss"></style> <style lang="scss"></style>
...@@ -52,13 +52,13 @@ const pageRef = ref() ...@@ -52,13 +52,13 @@ const pageRef = ref()
const handleCancel = () => { const handleCancel = () => {
isEdit.value = false isEdit.value = false
pageRef.value?.handleChangeEdit(false) pageRef.value?.handleChangeEdit(false)
homeMenuList.value = cloneDeep(userStore.homeMenuList) homeMenuList.value = cloneDeep(userStore.getHomeMenuList)
} }
//保存 //保存
const handleSave = () => { const handleSave = () => {
isEdit.value = false isEdit.value = false
pageRef.value?.handleChangeEdit(false) pageRef.value?.handleChangeEdit(false)
userStore.homeMenuList = cloneDeep(homeMenuList.value) userStore.changeHomeMenuList(cloneDeep(homeMenuList.value))
uni.$message.showToast('保存菜单成功') uni.$message.showToast('保存菜单成功')
} }
//编辑 //编辑
...@@ -69,7 +69,7 @@ const handleEdit = () => { ...@@ -69,7 +69,7 @@ const handleEdit = () => {
//操作菜单 //操作菜单
const homeMenuList = ref([]) const homeMenuList = ref([])
onLoad(() => { onLoad(() => {
homeMenuList.value = cloneDeep(userStore.homeMenuList) homeMenuList.value = cloneDeep(userStore.getHomeMenuList)
}) })
const handleHomeMenu = (menu, type) => { const handleHomeMenu = (menu, type) => {
if (isEdit.value) { if (isEdit.value) {
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<scroll-view class="tab-content" scroll-y="true"> <scroll-view class="tab-content" scroll-y="true">
<view class="tab-content-item" v-if="activeIndex == 0"> <view class="tab-content-item" v-if="activeIndex == 0">
<view class="menu-list"> <view class="menu-list">
<menu-item class="menu-item" v-for="item in userStore.homeMenuList" :data="item" :key="item.id" @tap="goTo(item.url)"></menu-item> <menu-item class="menu-item" v-for="item in userStore.getHomeMenuList" :data="item" :key="item.id" @tap="goTo(item.url)"></menu-item>
<menu-item class="menu-item" :data="userStore.allMenuItem" @tap="goAppCenter"></menu-item> <menu-item class="menu-item" :data="userStore.allMenuItem" @tap="goAppCenter"></menu-item>
</view> </view>
</view> </view>
......
...@@ -21,10 +21,10 @@ const useUserStore = defineStore('user', { ...@@ -21,10 +21,10 @@ const useUserStore = defineStore('user', {
state: () => { state: () => {
return { return {
token: '', token: '',
userInfo: undefined, userInfo: undefined, //用户信息
menuList: cloneDeep(menuList), menuList: cloneDeep(menuList), //全部菜单
homeMenuList: cloneDeep(menuList), allMenuItem: { id: 999, name: '全部菜单', icon: 'all', group: '', count: 0 },
allMenuItem: { id: 999, name: '全部菜单', icon: 'all', group: '', count: 0 } allHomeMenuList: [] //所有登录用户的首页菜单信息
} }
}, },
getters: { getters: {
...@@ -39,6 +39,10 @@ const useUserStore = defineStore('user', { ...@@ -39,6 +39,10 @@ const useUserStore = defineStore('user', {
groups[item.group].push(item) groups[item.group].push(item)
return groups return groups
}, {}) }, {})
},
//获取当前登录用户的首页菜单
getHomeMenuList(state) {
return state.allHomeMenuList.find((item) => item.userId == state.userInfo?.id)?.homeMenuList || state.menuList
} }
}, },
actions: { actions: {
...@@ -46,6 +50,13 @@ const useUserStore = defineStore('user', { ...@@ -46,6 +50,13 @@ const useUserStore = defineStore('user', {
setUserInfo(data) { setUserInfo(data) {
this.token = data.token this.token = data.token
this.userInfo = data this.userInfo = data
//加入用户首页菜单信息
if (!this.allHomeMenuList.find((item) => item.userId == this.userInfo.id)) {
this.allHomeMenuList.push({
userId: this.userInfo.id,
homeMenuList: this.menuList
})
}
//跳转工作台 //跳转工作台
uni.switchTab({ url: '/pages/panel/index' }) uni.switchTab({ url: '/pages/panel/index' })
}, },
...@@ -55,6 +66,11 @@ const useUserStore = defineStore('user', { ...@@ -55,6 +66,11 @@ const useUserStore = defineStore('user', {
this.userInfo = undefined this.userInfo = undefined
//返回登录页面 //返回登录页面
uni.redirectTo({ url: '/pages/login/index' }) uni.redirectTo({ url: '/pages/login/index' })
},
//修改用户首页菜单
changeHomeMenuList(menuList) {
const index = this.allHomeMenuList.findIndex((item) => item.userId == this.userInfo.id)
this.allHomeMenuList[index].homeMenuList = menuList
} }
}, },
// 配置持久化 // 配置持久化
......
...@@ -123,11 +123,23 @@ export const http = (options) => { ...@@ -123,11 +123,23 @@ export const http = (options) => {
const statusCode = parseInt(res.statusCode) const statusCode = parseInt(res.statusCode)
if (statusCode >= 200 && statusCode < 300) { if (statusCode >= 200 && statusCode < 300) {
// 2.1 提取核心数据 res.data // 2.1 提取核心数据 res.data
if (res.data.code == 403) {
const userStore = useUserStore()
uni.$message.showToast(res.data.message)
setTimeout(() => {
userStore.handleLogOut()
}, 500)
reject(res)
} else {
resolve(res.data) resolve(res.data)
} else if (statusCode === 401) { }
} else if (statusCode == 401) {
// 401错误 -> 清理用户信息,跳转到登录页 // 401错误 -> 清理用户信息,跳转到登录页
const userStore = useUserStore() const userStore = useUserStore()
uni.$message.showToast(res.data.message)
setTimeout(() => {
userStore.handleLogOut() userStore.handleLogOut()
}, 500)
reject(res) reject(res)
} else { } else {
// 其他错误 -> 根据后端错误信息轻提示 // 其他错误 -> 根据后端错误信息轻提示
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment