fix(taskhall): 修复接单负责人可接任务附件可见性

This commit is contained in:
Your Name 2026-02-25 17:27:21 +08:00
parent 34ead8be3d
commit 0ddbadfd7c

View File

@ -2557,16 +2557,22 @@ const configStore = useConfigStore()
// 标签页
const activeTab = ref('available')
// 是否为部门负责人(从localStorage获取用户信息)
const isDepartmentLeader = computed(() => {
const parseUserInfo = () => {
try {
const userStr = localStorage.getItem('userInfo')
if (!userStr) return false
const user = JSON.parse(userStr)
return user?.isDepartmentLeader === 1 || user?.role === 'dept_leader' || user?.role === 'admin'
if (!userStr) return {}
return JSON.parse(userStr)
} catch {
return false
return {}
}
}
const currentUserInfo = ref<any>(parseUserInfo())
// 是否为部门负责人
const isDepartmentLeader = computed(() => {
const user = currentUserInfo.value || {}
return user?.isDepartmentLeader === 1 || user?.isDepartmentLeader === true || user?.role === 'dept_leader' || user?.role === 'admin'
})
// 部门视角切换功能(用于管理多个部门的负责人)
@ -2600,7 +2606,7 @@ const effectiveDeptId = computed(() => {
// 计算是否有导出权限(部门负责人或管理员)
const canExportTaskHall = computed(() => {
const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}')
const userInfo = currentUserInfo.value || {}
if (!userInfo || !userInfo.id) return false
// 管理员可以导出
@ -2624,35 +2630,42 @@ const canExportTaskHall = computed(() => {
// 初始化部门视角数据
const initDeptViewData = async () => {
try {
const userStr = localStorage.getItem('userInfo')
let user = userStr ? JSON.parse(userStr) : null
// 如果用户信息中没有 managedDepartments 字段,则调用 API 刷新
if (user && !user.managedDepartments) {
console.log('用户信息中没有 managedDepartments,刷新用户信息...')
try {
const response = await authApi.getUserInfo()
if (response.data) {
user = response.data
localStorage.setItem('userInfo', JSON.stringify(user))
console.log('用户信息已刷新:', user)
}
} catch (e) {
console.warn('刷新用户信息失败:', e)
let user: any = parseUserInfo()
// 每次进入任务大厅都刷新一次用户信息,避免本地缓存过期导致权限判断错误
try {
const response = await authApi.getUserInfo()
if (response.data) {
user = response.data
localStorage.setItem('userInfo', JSON.stringify(user))
}
} catch (e) {
console.warn('刷新用户信息失败,回退本地缓存:', e)
}
if (user) {
currentUserInfo.value = user || {}
if (user && user.id) {
userDeptId.value = user.deptId
userDeptName.value = user.deptName || '我的部门'
userDeptType.value = user.deptType || 'demand'
// 优先使用后端返回的部门类型;缺失时从部门列表回填
let resolvedDeptType = user.deptType
if (!resolvedDeptType && Array.isArray(user.managedDepartments) && user.deptId) {
const selfDept = user.managedDepartments.find((dept: ManagedDepartment) => dept.deptId === user.deptId)
if (selfDept?.deptType) {
resolvedDeptType = selfDept.deptType
}
}
userDeptType.value = resolvedDeptType || 'demand'
// 获取用户管理的部门列表
if (user.managedDepartments && Array.isArray(user.managedDepartments)) {
managedDepartments.value = user.managedDepartments.filter(
(dept: ManagedDepartment) => dept.deptId !== user.deptId // 排除用户自己所属的部门
)
console.log('用户管理的部门:', managedDepartments.value)
} else {
managedDepartments.value = []
}
}
} catch (e) {
@ -3415,7 +3428,7 @@ const isHighScoreTask = (task: TaskOrSubTask) => {
// 判断是否可以下载附件
const canDownloadAttachment = (task: TaskOrSubTask) => {
// 管理员可下载
const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}')
const userInfo = currentUserInfo.value || {}
if (userInfo.isAdmin === 1 || userInfo.isAdmin === true) {
return true
}
@ -3438,12 +3451,27 @@ const parseAttachmentUrls = (attachmentUrl?: string) => {
// 可接任务卡片:接单部门负责人可提前查看附件信息
const canViewAvailableTaskAttachmentInfo = computed(() => {
const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}')
const userInfo = currentUserInfo.value || {}
const isAdmin = userInfo.isAdmin === 1 || userInfo.isAdmin === true
if (isAdmin) {
return true
}
return isDepartmentLeader.value && effectiveDeptType.value === 'receiving'
if (!isDepartmentLeader.value) {
return false
}
// 当前切换部门为接单部门
if (effectiveDeptType.value === 'receiving') {
return true
}
// 未切换视角时,用户自身部门为接单部门
if (currentDeptView.value === undefined && userDeptType.value === 'receiving') {
return true
}
return false
})
// 加载配置数据(从全局store加载)