增加权限

This commit is contained in:
Rhett霍 2026-03-19 10:01:55 +08:00
parent da5084d1d8
commit 58b8174e1e
2 changed files with 87 additions and 54 deletions

View File

@ -14,32 +14,35 @@
<!-- 宫格组件 --> <!-- 宫格组件 -->
<uni-section title="订单管理" type="line"></uni-section> <uni-section title="订单管理" type="line"></uni-section>
<view class="grid-body"> <view class="grid-body">
<uni-grid :column="2" :showBorder="false" @change="changeGrid"> <uni-grid :column="3" :showBorder="false" @change="changeGrid">
<uni-grid-item @click="gotoOrderManager"> <uni-grid-item @click="gotoOrderManager" v-if="checkRole(['shangwu','shangyeUser','gylzy','gylfujinli','zhangmj','dazhongadmin'])">
<view class="grid-item-box"> <view class="grid-item-box">
<uni-icons size="30" type="person-filled"></uni-icons> <uni-icons size="30" type="person-filled"></uni-icons>
<text class="text">订单管理</text> <text class="text">订单管理</text>
</view> </view>
</uni-grid-item> </uni-grid-item>
<uni-grid-item @click="gotoOrder"> <uni-grid-item @click="gotoOrder" v-if="checkRole(['gylzy','scshoukuan','gddingdancangku','zjdingdancangku','scdindanshenhe','gylfujinli','dazhongadmin','gspcangku'])">
<view class="grid-item-box"> <view class="grid-item-box">
<uni-icons size="30" type="compose"></uni-icons> <uni-icons size="30" type="compose"></uni-icons>
<text class="text">订单审核</text> <text class="text">订单审核</text>
</view> </view>
</uni-grid-item> </uni-grid-item>
<uni-grid-item @click="gotoFinalcial"> <uni-grid-item @click="gotoFinalcial" v-if="checkRole(['gylzy','scshoukuan','gddingdancangku','gylfujinli','zjhexiaocaiwushenhe','DLMshenhe'
,'dazhongadmin','zjshouzhang','HOPdingdancangku'])">
<view class="grid-item-box"> <view class="grid-item-box">
<uni-icons size="30" type="list"></uni-icons> <uni-icons size="30" type="list"></uni-icons>
<text class="text">财务审批</text> <text class="text">财务审批</text>
</view> </view>
</uni-grid-item> </uni-grid-item>
<uni-grid-item @click="gotoBusiness"> <uni-grid-item @click="gotoBusiness" v-if="checkRole(['shangwu','gylzy','gylfujinli','zhangmj','dazhongadmin','daqu_zongbu'])">
<view class="grid-item-box"> <view class="grid-item-box">
<uni-icons size="30" type="staff"></uni-icons> <uni-icons size="30" type="staff"></uni-icons>
<text class="text">商务审批</text> <text class="text">商务审批</text>
</view> </view>
</uni-grid-item> </uni-grid-item>
<uni-grid-item @click="gotoOrderSearchQuery"> <uni-grid-item @click="gotoOrderSearchQuery" v-if="checkRole(['shangwu','daqu_dong','shangyeUser','gylzy','scshoukuan','gddingdancangku',
'zjdingdancangku','scdindanshenhe','gylfujinli','chaxun','baishufei','zhangmj','fuzongjian','zhangp','dazhongadmin','zjkaipiao','zjshouzhang','gspcangku',
'daqu_nan','daqu_xi','daqu_bei','daqu_zongbu'])">
<view class="grid-item-box"> <view class="grid-item-box">
<uni-icons size="30" type="person-filled"></uni-icons> <uni-icons size="30" type="person-filled"></uni-icons>
<text class="text">订单综合查询</text> <text class="text">订单综合查询</text>
@ -50,13 +53,14 @@
<uni-section title="开户管理" type="line" /> <uni-section title="开户管理" type="line" />
<view class="grid-body"> <view class="grid-body">
<uni-grid :column="4" :showBorder="false" @change="changeGrid"> <uni-grid :column="4" :showBorder="false" @change="changeGrid">
<uni-grid-item @click="navigateTo('/pages/work/AccountPricePreliminaryRreview/index')"> <uni-grid-item @click="navigateTo('/pages/work/AccountPricePreliminaryRreview/index')" v-if="checkRole(['daqu_dong','gylzy','gylfujinli','fuzongjian',
'dazhongadmin','daqu_nan','daqu_xi','daqu_bei','daqu_zongbu'])">
<view class="grid-item-box"> <view class="grid-item-box">
<uni-icons size="30" type="person-filled"></uni-icons> <uni-icons size="30" type="person-filled"></uni-icons>
<text class="text">账期价格初审</text> <text class="text">账期价格初审</text>
</view> </view>
</uni-grid-item> </uni-grid-item>
<uni-grid-item @click="navigateTo('/pages/work/AccountPriceFinallReview/index')"> <uni-grid-item @click="navigateTo('/pages/work/AccountPriceFinallReview/index')" v-if="checkRole(['gylzy','gylfujinli','dazhongadmin'])">
<view class="grid-item-box"> <view class="grid-item-box">
<uni-icons size="30" type="person-filled"></uni-icons> <uni-icons size="30" type="person-filled"></uni-icons>
<text class="text">账期价格复审</text> <text class="text">账期价格复审</text>
@ -122,13 +126,37 @@
</template> </template>
<script setup> <script setup>
import {getCurrentInstance, ref} from "vue" import { getCurrentInstance, onMounted, ref } from "vue"
import {navigateTo} from "../../utils/utils"; import { navigateTo } from "../../utils/utils";
import { useUserStore } from '@/store'
import { checkPermi, checkRole } from "@/utils/permission"; //
const {proxy} = getCurrentInstance() const { proxy } = getCurrentInstance()
const current = ref(0) const current = ref(0)
const swiperDotIndex = ref(0) const swiperDotIndex = ref(0)
const data = ref([{image: '/static/images/banner/background.jpg'}]) const data = ref([{image: '/static/images/banner/background.jpg'}])
const userStore = useUserStore()
//
// function checkRole(roles) {
// const userRoles = userStore.roles || []
// return userRoles.some(role => roles.includes(role))
// }
//
// function checkPermi(permissions) {
// const userPermissions = userStore.permissions || []
// return permissions.some(perm => userPermissions.includes(perm))
// }
onMounted(async () => {
try {
await userStore.getInfo()
} finally {
}
})
function clickBannerItem(item) { function clickBannerItem(item) {
console.info(item) console.info(item)
@ -166,13 +194,11 @@ const gotoOrderManager = () => {
url: '/pages/work/OrderManager/index' url: '/pages/work/OrderManager/index'
}) })
} }
const gotoOrderSearchQuery = () => { const gotoOrderSearchQuery = () => {
uni.navigateTo({ uni.navigateTo({
url: '/pages/work/OrderSearchQuery/index' url: '/pages/work/OrderSearchQuery/index'
}) })
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -1,29 +1,5 @@
import store from '@/store' import store from '@/store'
import { useUserStore } from '@/store' // 导入 userStore
/**
* 字符权限校验
* @param {Array} value 校验值
* @returns {Boolean}
*/
export function checkPermi(value) {
if (value && value instanceof Array && value.length > 0) {
const permissions = store.getters && store.getters.permissions
const permissionDatas = value
const all_permission = "*:*:*"
const hasPermission = permissions.some(permission => {
return all_permission === permission || permissionDatas.includes(permission)
})
if (!hasPermission) {
return false
}
return true
} else {
console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`)
return false
}
}
/** /**
* 角色权限校验 * 角色权限校验
@ -32,20 +8,51 @@ export function checkPermi(value) {
*/ */
export function checkRole(value) { export function checkRole(value) {
if (value && value instanceof Array && value.length > 0) { if (value && value instanceof Array && value.length > 0) {
const roles = store.getters && store.getters.roles // 方式1通过 store.getters 获取,但需要确保 getters 返回的是值
// const roles = store.getters?.roles || []
// 方式2直接使用 useUserStore
const userStore = useUserStore()
const roles = userStore.roles || [] // 这里 roles 是 ref需要 .value
const permissionRoles = value const permissionRoles = value
const super_admin = "admin" const super_admin = "admin"
const hasRole = roles.some(role => { // 确保 roles 是数组,处理 ref
const rolesArray = Array.isArray(roles) ? roles : (roles.value || [])
const hasRole = rolesArray.some(role => {
return super_admin === role || permissionRoles.includes(role) return super_admin === role || permissionRoles.includes(role)
}) })
if (!hasRole) { return hasRole
return false
}
return true
} else { } else {
console.error(`need roles! Like checkRole="['admin','editor']"`) console.error(`need roles! Like checkRole="['admin','editor']"`)
return false return false
} }
}
/**
* 权限校验
* @param {Array} value 校验值
* @returns {Boolean}
*/
export function checkPermi(value) {
if (value && value instanceof Array && value.length > 0) {
const userStore = useUserStore()
const permissions = userStore.permissions || []
const permissionDatas = value
const all_permission = "*:*:*"
// 确保 permissions 是数组,处理 ref
const permissionsArray = Array.isArray(permissions) ? permissions : (permissions.value || [])
const hasPermission = permissionsArray.some(permission => {
return all_permission === permission || permissionDatas.includes(permission)
})
return hasPermission
} else {
console.error(`need permissions! Like checkPermi="['system:user:add','system:user:edit']"`)
return false
}
} }