feat: 恢复首页菜单接口权限过滤并补充国际出港/进港权限对照表
- 恢复 HomeFragment 左侧主菜单/右侧二级菜单的 auths 权限过滤, 右侧改用集合精确匹配避免子串误判(AppIntExpAssemble 是 AppIntExpAssembleAllocate 的子串),并对过滤后空列表做 first() 保护 - 关闭开发调试开关 DEV_AUTO_SELECT_MENU / DEV_AUTO_LOGIN - 新增国际出港/进港二级入口与英文权限串对照表(交后端做角色绑定) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -54,7 +54,7 @@ class HomeFragment : Fragment() {
|
||||
* TODO: 正式发布前务必设置为 false
|
||||
*/
|
||||
companion object {
|
||||
private const val DEV_AUTO_SELECT_MENU = true // 开发调试:自动选择菜单开关,正式发布前设为 false
|
||||
private const val DEV_AUTO_SELECT_MENU = false // 开发调试:自动选择菜单开关,正式发布前设为 false
|
||||
private const val DEV_AUTO_SELECT_MENU_ID = Constant.AuthName.IntImp // 自动选择的目标菜单
|
||||
}
|
||||
|
||||
@@ -76,7 +76,11 @@ class HomeFragment : Fragment() {
|
||||
|
||||
val leftMenuList = initLeftMenuData()
|
||||
rvLeft.adapter = HomeLeftAdapt(leftMenuList)
|
||||
rvRight.adapter = HomeRightAdapt(getRightMenu4Id(leftMenuList.first().id))
|
||||
// 权限过滤后列表可能为空(账号无任何菜单权限),避免 first() 抛异常
|
||||
val firstMenuId = leftMenuList.firstOrNull()?.id
|
||||
rvRight.adapter = HomeRightAdapt(
|
||||
if (firstMenuId != null) getRightMenu4Id(firstMenuId) else emptyList()
|
||||
)
|
||||
|
||||
// ========== 开发调试:自动选择指定菜单 ==========
|
||||
autoSelectMenuForDev()
|
||||
@@ -198,7 +202,7 @@ class HomeFragment : Fragment() {
|
||||
inner class LeftMenu(val id: String, val img: Int, val text: String)
|
||||
|
||||
fun initLeftMenuData(): List<LeftMenu> {
|
||||
var list = arrayListOf<LeftMenu>()
|
||||
val list = arrayListOf<LeftMenu>()
|
||||
list.add(LeftMenu(Constant.AuthName.DomExp, R.mipmap.gncn_icon, "国内出港"))
|
||||
list.add(LeftMenu(Constant.AuthName.DomImp, R.mipmap.gnjg, "国内进港"))
|
||||
list.add(LeftMenu(Constant.AuthName.IntExp, R.mipmap.gjcn_icon, "国际出港"))
|
||||
@@ -210,15 +214,15 @@ class HomeFragment : Fragment() {
|
||||
list.add(LeftMenu(Constant.AuthName.Comprehensive, R.mipmap.zhgl_icon, "综合管理"))
|
||||
|
||||
/**
|
||||
* 左侧菜单 权限过滤
|
||||
* TODO: 暂时关闭权限筛选,方便开发调试
|
||||
* 左侧菜单 权限过滤:仅保留接口下发、且含有二级权限的主菜单
|
||||
* auths 结构:{ 主菜单ID: [二级权限串, ...], ... }
|
||||
*/
|
||||
// getAuthsObj()?.let {
|
||||
// val authsFilter = list.filter { m ->
|
||||
// it.getJSONArray(m.id) != null && it.getJSONArray(m.id).size > 0
|
||||
// }
|
||||
// list = authsFilter as ArrayList<LeftMenu>
|
||||
// }
|
||||
getAuthsObj()?.let { authsObj ->
|
||||
return list.filter { m ->
|
||||
val arr = authsObj.getJSONArray(m.id)
|
||||
arr != null && arr.size > 0
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
@@ -980,13 +984,14 @@ class HomeFragment : Fragment() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 右侧菜单 权限过滤
|
||||
* 右侧菜单 权限过滤:仅保留当前主菜单下、接口下发的二级入口
|
||||
* 使用集合精确匹配,避免子串误判(如 AppIntExpAssemble 是 AppIntExpAssembleAllocate 的子串)
|
||||
*/
|
||||
// TODO: 暂时关闭权限筛选
|
||||
// val authsFilter = list.filter { m ->
|
||||
// SharedPreferenceUtil.getString(Constant.Share.authList).contains(m.id)
|
||||
// }
|
||||
// list = authsFilter as ArrayList<RightMenu>
|
||||
getAuthsObj()?.let { authsObj ->
|
||||
val authArr = authsObj.getJSONArray(id)
|
||||
val authSet = authArr?.map { it.toString() }?.toSet() ?: emptySet()
|
||||
return list.filter { m -> authSet.contains(m.id) }
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ import me.jessyan.autosize.internal.CustomAdapt
|
||||
* ========== 开发调试开关 ==========
|
||||
* TODO: 正式发布前务必设置为 false
|
||||
*/
|
||||
private const val DEV_AUTO_LOGIN = true // 自动登录开关
|
||||
private const val DEV_AUTO_LOGIN = false // 自动登录开关
|
||||
|
||||
@Route(path = ARouterConstants.ACTIVITY_URL_LOGIN)
|
||||
class LoginActivity : BaseActivity(),
|
||||
|
||||
BIN
国际出港进港权限对照表.xlsx
Normal file
BIN
国际出港进港权限对照表.xlsx
Normal file
Binary file not shown.
Reference in New Issue
Block a user