lanxin 1 месяц назад
Родитель
Сommit
7e589148dc

+ 9 - 1
src/pages/Bresource/B1overview/B1import/index.tsx

@@ -8,6 +8,7 @@ import { useParams } from 'react-router-dom'
 import { MessageFu } from '@/utils/message'
 import B1tab1 from '../B1tab1'
 import B1tab2 from '../B1tab2'
+import { hasKuScopeAuth } from '@/utils/authority'
 
 const tabArr = ['导入资源数据', '导入封面', '导入附件']
 
@@ -29,12 +30,19 @@ function B1import() {
   }, [closeFlag])
 
   useEffect(() => {
+    if (!hasKuScopeAuth(fId)) {
+      setLoding(true)
+      setKuList([])
+      MessageFu.warning('您没有该资源库的查看权限')
+      return
+    }
     getKuListByOpenFu(data => {
       setLoding(true)
       if (data && data.length) {
         setKuList(data)
         const obj = data.find(v => v.value === Number(fId))
         if (obj) setkuTxt(obj.label)
+        else MessageFu.warning('您没有该资源库的查看权限')
       }
     })
   }, [fId])
@@ -46,7 +54,7 @@ function B1import() {
       <div className='pageTitle'>资源总览-数据导入 资源库:{kuTxt}</div>
 
       {loding && kuList.length === 0 ? (
-        <div className='Z0null'>请先在 系统管理-资源库管理 添加数据</div>
+        <div className='Z0null'>暂无可查看的资源库,请联系管理员配置资源可见权限</div>
       ) : (
         <>
           <div className='B1Itop'>

+ 6 - 1
src/pages/Bresource/B1overview/index.tsx

@@ -63,6 +63,9 @@ function B1overview() {
         setTimeout(() => {
           setTimeKey(Date.now())
         }, 50)
+      } else {
+        setKuList([])
+        setFormData({ ...selectTopBase, formDefId: 0 })
       }
     })
   }, [dispatch, getFormZiFu])
@@ -391,7 +394,9 @@ function B1overview() {
         </div>
       ) : (
         <div hidden={!loding} className='Z0null'>
-          请先在 系统管理-资源库管理 添加数据
+          {kuList.length === 0
+            ? '暂无可查看的资源库,请联系管理员配置资源可见权限'
+            : '请先在 系统管理-资源库管理 添加数据'}
         </div>
       )}
 

+ 10 - 0
src/pages/Layout/index.tsx

@@ -93,6 +93,16 @@ function Layout() {
       let isOkIdArr: number[] = [9901]
 
       const roleArr: any[] = res.data.permission
+      const roleInfo: any = res.data.role || {}
+
+      // 资源可见权限(先于路由挂载写入,供资源库列表过滤)
+      const scopeStorage = Number(roleInfo.scopeStorage) || 1
+      const scopeStorageIdsTxt: string = roleInfo.scopeStorageIds || ''
+      const scopeStorageIds = scopeStorageIdsTxt
+        ? scopeStorageIdsTxt.split(',').map((v: string) => Number(v)).filter((v: number) => !Number.isNaN(v))
+        : []
+      store.dispatch({ type: 'layout/scopeStorage', payload: scopeStorage })
+      store.dispatch({ type: 'layout/scopeStorageIds', payload: scopeStorageIds })
 
       roleArr.forEach(v1 => {
         if (v1.children) {

+ 7 - 0
src/pages/Zother/SelectGoods/index.tsx

@@ -163,6 +163,13 @@ function SelectGoods({
   // 点击提交
   const btnOk = useCallback(() => {
     dataResFu(checkArr, formDefId)
+    // 检查入库资源是否有封面
+    console.log(checkArr)
+    const hasCover = checkArr.some(v => v.thumb)
+    if (!hasCover) {
+      MessageFu.error('资源未上传封面,提交失败')
+      return
+    }
     if (!isOne) MessageFu.success('提交成功')
     closeFu()
   }, [checkArr, closeFu, dataResFu, formDefId, isOne])

+ 23 - 3
src/pages/Zother/ZgoodsInfo/index.tsx

@@ -17,6 +17,7 @@ import Zg3log from './Zg3log'
 import { getKuListByOpenFu } from '../data'
 import history from '@/utils/history'
 import { goodInfoKeyGet, goodInfoKeySet } from '@/utils/storage'
+import { hasKuScopeAuth } from '@/utils/authority'
 
 const btnArrTemp = [
   {
@@ -36,15 +37,34 @@ function ZgoodsInfo() {
   const [kuList, setKuList] = useState<antdSelectType[]>([])
 
   const [errFlag, setErrFlag] = useState(false)
+  const [kuChecked, setKuChecked] = useState(false)
 
   useEffect(() => {
+    setKuChecked(false)
+    setErrFlag(false)
+    setkuTxt('')
+
+    if (!hasKuScopeAuth(fId)) {
+      setErrFlag(true)
+      setKuChecked(true)
+      MessageFu.warning('您没有该资源库的查看权限')
+      return
+    }
+
     getKuListByOpenFu(data => {
       if (data && data.length) {
         setKuList(data)
         const obj = data.find(v => v.value === Number(fId))
         if (obj) setkuTxt(obj.label)
-        else setErrFlag(true)
+        else {
+          setErrFlag(true)
+          MessageFu.warning('您没有该资源库的查看权限')
+        }
+      } else {
+        setErrFlag(true)
+        MessageFu.warning('暂无可查看的资源库')
       }
+      setKuChecked(true)
     })
   }, [fId])
 
@@ -75,8 +95,8 @@ function ZgoodsInfo() {
   }, [fId, id])
 
   useEffect(() => {
-    getInfoFu()
-  }, [getInfoFu])
+    if (kuChecked && !errFlag) getInfoFu()
+  }, [kuChecked, errFlag, getInfoFu])
 
   // 发布状态/入库状态
   const selectTxt = useCallback((type: '发布状态' | '入库状态' | '推荐状态', val: number) => {

+ 3 - 2
src/pages/Zother/data.tsx

@@ -1,6 +1,7 @@
 import { Z1_APIgetAll } from '@/store/action/Zsystem/Z1sysSet'
 import history from '@/utils/history'
 import { MessageFu } from '@/utils/message'
+import { filterKuListByScope } from '@/utils/authority'
 
 export type Typetable = {
   auditUserIds: string
@@ -33,7 +34,7 @@ export type Typetable = {
 }
 export type GoodsType = any
 
-// 异步获取资源库列表--已开启状态
+// 异步获取资源库列表--已开启状态(会按角色「资源可见权限」过滤)
 export const getKuListByOpenFu = async (back: (data: any[]) => void, flag?: boolean) => {
   const res = await Z1_APIgetAll({ pageNum: 1, pageSize: 99999 }, true)
   if (res.code === 0) {
@@ -46,7 +47,7 @@ export const getKuListByOpenFu = async (back: (data: any[]) => void, flag?: bool
       label: v.formName + (v.isEnabled !== 1 ? '(关闭状态)' : ''),
       isEnabled: v.isEnabled
     }))
-    back(list)
+    back(filterKuListByScope(list))
   }
 }
 

+ 12 - 3
src/pages/Zsystem/Z6roleSet/Z6edit.tsx

@@ -36,7 +36,7 @@ function Z6edit({ sId, closeFu, addTableFu, editTableFu }: Props) {
   // 资源库
   const { kList } = useKuList()
 
-  const [scopeStorageIds, setScopeStorageIds] = useState<Number[]>([])
+  const [scopeStorageIds, setScopeStorageIds] = useState<number[]>([])
 
   // 编辑进来获取详情
   const getInfoFu = useCallback(async (id: number) => {
@@ -60,11 +60,20 @@ function Z6edit({ sId, closeFu, addTableFu, editTableFu }: Props) {
     }
   }, [])
 
-  // 新增进来获取权限数据
+  // 新增进来获取权限数据:默认选中除系统管理/系统设置相关功能外的所有功能
   const getAddInfoFu = useCallback(async () => {
     const res = await Z6_APIgetAddTreeList()
     if (res.code === 0) {
-      const resArr: TypeZ6Role[] = res.data || []
+      const resArr: TypeZ6Role[] = (res.data || []).map((v: TypeZ6Role) => {
+        const isSysSet = v.name === '系统管理' || v.name === '系统设置'
+        return {
+          ...v,
+          children: (v.children || []).map(c => ({
+            ...c,
+            authority: !isSysSet
+          }))
+        }
+      })
       setRoleArr(resArr)
     }
   }, [])

+ 12 - 1
src/store/reducer/layout.ts

@@ -33,7 +33,11 @@ const initState = {
   // 用户信息
   userInfo: {} as any,
   // 修改密码
-  passEditShow: false
+  passEditShow: false,
+  // 资源可见权限:1所有资源 2仅与资源库相关
+  scopeStorage: 1,
+  // 资源可见权限-允许的资源库id
+  scopeStorageIds: [] as number[]
 }
 
 // 定义 action 类型
@@ -45,6 +49,8 @@ type LayoutActionType =
   | { type: 'layout/userRolePermissions'; payload: RouterType }
   | { type: 'layout/userInfo'; payload: any }
   | { type: 'layout/passEditShow'; payload: boolean }
+  | { type: 'layout/scopeStorage'; payload: number }
+  | { type: 'layout/scopeStorageIds'; payload: number[] }
   | {
       type: 'layout/closeUpFile'
       payload: {
@@ -80,6 +86,11 @@ export default function layoutReducer(state = initState, action: LayoutActionTyp
     // 修改密码
     case 'layout/passEditShow':
       return { ...state, passEditShow: action.payload }
+    // 资源可见权限
+    case 'layout/scopeStorage':
+      return { ...state, scopeStorage: action.payload }
+    case 'layout/scopeStorageIds':
+      return { ...state, scopeStorageIds: action.payload }
 
     default:
       return state

+ 17 - 0
src/utils/authority.ts

@@ -10,6 +10,23 @@ export const authorityFu = (id: number, txt: string, fu: () => void, txt2?: stri
   else MessageFu.warning(txt2 ? txt2 : `您没有 ${txt} 页面权限`)
 }
 
+/** 当前用户是否可访问指定资源库(管理员 / 所有资源 / 在允许列表内) */
+export const hasKuScopeAuth = (formDefId: number | string): boolean => {
+  const { scopeStorage, scopeStorageIds, userInfo } = store.getState().A0Layout
+  if (userInfo?.isAdmin === 1) return true
+  if (scopeStorage !== 2) return true
+  return (scopeStorageIds || []).includes(Number(formDefId))
+}
+
+/** 按角色「资源可见权限」过滤资源库列表 */
+export const filterKuListByScope = <T extends { value: number | string }>(list: T[]): T[] => {
+  const { scopeStorage, scopeStorageIds, userInfo } = store.getState().A0Layout
+  if (userInfo?.isAdmin === 1) return list
+  if (scopeStorage !== 2) return list
+  const ids = scopeStorageIds || []
+  return list.filter(v => ids.includes(Number(v.value)))
+}
+
 // 列表页面的审批按钮是否显示,true为显示
 export const tableListAuditBtnFu = (item: any) => {
   let flag = false