diff --git a/odf-uniapp/pages/fault-add/index.vue b/odf-uniapp/pages/fault-add/index.vue index 01cf6ee..d593b60 100644 --- a/odf-uniapp/pages/fault-add/index.vue +++ b/odf-uniapp/pages/fault-add/index.vue @@ -391,7 +391,16 @@ async function handleSubmit() { console.log(`[fault-add] ====== 提交成功, 总耗时${Date.now() - t0}ms ======`) uni.showToast({ title: '提交成功', icon: 'success' }) setTimeout(() => { + // #ifdef H5 + // H5端页面栈可能因刷新丢失,navigateBack 可能回到首页而非故障列表 + // 直接 redirectTo 回故障列表页,确保回到上级页面 + uni.redirectTo({ + url: '/pages/fault-list/index?cableId=' + cableId.value + '&cableName=' + encodeURIComponent(form.cableName) + }) + // #endif + // #ifndef H5 uni.navigateBack() + // #endif }, 1500) } else { console.warn(`[fault-add] 业务失败: code=${res.code}, msg=${res.msg}`) diff --git a/odf-uniapp/pages/fault-detail/index.vue b/odf-uniapp/pages/fault-detail/index.vue index a828728..fa25480 100644 --- a/odf-uniapp/pages/fault-detail/index.vue +++ b/odf-uniapp/pages/fault-detail/index.vue @@ -54,7 +54,7 @@ 故障发生频次 {{ detail.faultCount }} - + 增加频次 @@ -90,7 +90,7 @@ {{ detail.mileageCorrection || '未填写' }} - + 修改 @@ -125,6 +125,9 @@ import { onLoad } from '@dcloudio/uni-app' import { getFaultDetail, incrementFaultCount, updateMileageCorrection } from '@/services/trunk' import { BASE_URL } from '@/services/api' import { openNavigation } from '@/utils/navigation' +import store from '@/store' + +const canEdit = store.hasPermi('odfcablefaults:edit') const statusBarHeight = uni.getSystemInfoSync().statusBarHeight || 0 const faultId = ref('') diff --git a/odf-uniapp/pages/fault-list/index.vue b/odf-uniapp/pages/fault-list/index.vue index c237df8..07aba1a 100644 --- a/odf-uniapp/pages/fault-list/index.vue +++ b/odf-uniapp/pages/fault-list/index.vue @@ -47,7 +47,7 @@ - + 新增故障 @@ -59,6 +59,7 @@ import { ref } from 'vue' import { onLoad, onShow, onReachBottom } from '@dcloudio/uni-app' import { getFaultList } from '@/services/trunk' +import store from '@/store' const statusBarHeight = uni.getSystemInfoSync().statusBarHeight || 0 const faultList = ref([]) @@ -68,6 +69,7 @@ const pageNum = ref(1) const pageSize = ref(20) const totalPage = ref(1) const loading = ref(false) +const canAdd = store.hasPermi('odfcablefaults:add') function calcDisplayMileage(mileage, mileageCorrection) { const m = parseFloat(mileage) diff --git a/odf-uniapp/pages/login/index.vue b/odf-uniapp/pages/login/index.vue index af7821f..853f92f 100644 --- a/odf-uniapp/pages/login/index.vue +++ b/odf-uniapp/pages/login/index.vue @@ -39,8 +39,8 @@ const password = ref('') async function handleLogin() { const res = await appLogin(username.value, password.value) if (res.code === 200) { - const { jwt, userId, userName } = res.data - store.setAuth(jwt, userId, userName) + const { jwt, userId, userName, permissions } = res.data + store.setAuth(jwt, userId, userName, permissions) const permRes = await checkPermission() store.isPermission = permRes.code === 200 // 获取用户功能版块权限 diff --git a/odf-uniapp/store/index.js b/odf-uniapp/store/index.js index a5b8a44..033f0da 100644 --- a/odf-uniapp/store/index.js +++ b/odf-uniapp/store/index.js @@ -8,6 +8,9 @@ const store = reactive({ userName: uni.getStorageSync('userName') || '', isPermission: false, + // 用户菜单权限列表 + permissions: JSON.parse(uni.getStorageSync('permissions') || '[]'), + // 功能版块权限列表 modules: JSON.parse(uni.getStorageSync('modules') || '[]'), @@ -16,13 +19,21 @@ const store = reactive({ dictBusinessTypes: [], // 业务类型列表 // 设置认证信息 - setAuth(token, userId, userName) { + setAuth(token, userId, userName, permissions) { this.token = token this.userId = userId this.userName = userName + this.permissions = permissions || [] uni.setStorageSync('token', token) uni.setStorageSync('userId', userId) uni.setStorageSync('userName', userName) + uni.setStorageSync('permissions', JSON.stringify(this.permissions)) + }, + + // 检查是否拥有某个权限 + hasPermi(perm) { + if (this.permissions.includes('*:*:*')) return true + return this.permissions.includes(perm) }, // 设置功能版块权限 @@ -37,10 +48,12 @@ const store = reactive({ this.userId = '' this.userName = '' this.isPermission = false + this.permissions = [] this.modules = [] uni.removeStorageSync('token') uni.removeStorageSync('userId') uni.removeStorageSync('userName') + uni.removeStorageSync('permissions') uni.removeStorageSync('modules') } }) diff --git a/server/ZR.Admin.WebApi/Controllers/Business/OdfCableFaultsController.cs b/server/ZR.Admin.WebApi/Controllers/Business/OdfCableFaultsController.cs index 24f8561..732fd40 100644 --- a/server/ZR.Admin.WebApi/Controllers/Business/OdfCableFaultsController.cs +++ b/server/ZR.Admin.WebApi/Controllers/Business/OdfCableFaultsController.cs @@ -53,7 +53,7 @@ namespace ZR.Admin.WebApi.Controllers.Business /// /// [HttpPost("add")] - [ActionPermissionFilter(Permission = "odfcablefaults:list")] + [ActionPermissionFilter(Permission = "odfcablefaults:add")] [Log(Title = "干线故障", BusinessType = BusinessType.INSERT)] public async Task Add([FromBody] OdfCableFaultAddDto dto) { @@ -66,7 +66,7 @@ namespace ZR.Admin.WebApi.Controllers.Business /// 增加故障频次 /// [HttpPost("incrementFaultCount/{id}")] - [ActionPermissionFilter(Permission = "odfcablefaults:list")] + [ActionPermissionFilter(Permission = "odfcablefaults:edit")] [Log(Title = "干线故障", BusinessType = BusinessType.UPDATE)] public IActionResult IncrementFaultCount(int id) { @@ -78,7 +78,7 @@ namespace ZR.Admin.WebApi.Controllers.Business /// 更新表显里程矫正 /// [HttpPost("updateMileageCorrection/{id}")] - [ActionPermissionFilter(Permission = "odfcablefaults:list")] + [ActionPermissionFilter(Permission = "odfcablefaults:edit")] [Log(Title = "干线故障", BusinessType = BusinessType.UPDATE)] public IActionResult UpdateMileageCorrection(int id, [FromBody] MileageCorrectionDto dto) { diff --git a/server/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs b/server/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs index cfacb33..d9b0e24 100644 --- a/server/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs +++ b/server/ZR.Admin.WebApi/Controllers/System/SysLoginController.cs @@ -109,7 +109,7 @@ namespace ZR.Admin.WebApi.Controllers.System }; //CacheService.SetUserPerms(GlobalConstant.UserPermKEY + user.UserId, permissions); var jwt = JwtUtil.GenerateJwtToken(JwtUtil.AddClaims(loginUser)); - return SUCCESS(new { jwt, user.UserId, user.UserName }); + return SUCCESS(new { jwt, user.UserId, user.UserName, permissions }); } // diff --git a/sql/v1.0.2.1/02_add_fault_add_edit_permissions.sql b/sql/v1.0.2.1/02_add_fault_add_edit_permissions.sql new file mode 100644 index 0000000..5f03d7a --- /dev/null +++ b/sql/v1.0.2.1/02_add_fault_add_edit_permissions.sql @@ -0,0 +1,24 @@ +-- ============================================= +-- 干线故障权限修复:新增 odfcablefaults:add 和 odfcablefaults:edit 菜单按钮 +-- 并分配给角色2(本部门及以下可编辑权限)和角色3(编辑角色) +-- 角色4(查看权限)不分配,仅保留 list/query +-- ============================================= + +-- 1. 插入新增和修改菜单按钮(ParentId=11200 即干线故障管理) +SET IDENTITY_INSERT sys_menu ON; + +INSERT INTO sys_menu (MenuId, MenuName, ParentId, OrderNum, MenuType, perms, Status, IsFrame, IsCache, Visible, Create_by, Create_time) +VALUES (11223, N'新增', 11200, 2, 'F', 'odfcablefaults:add', 0, 1, 0, '0', 'admin', GETDATE()); + +INSERT INTO sys_menu (MenuId, MenuName, ParentId, OrderNum, MenuType, perms, Status, IsFrame, IsCache, Visible, Create_by, Create_time) +VALUES (11224, N'修改', 11200, 3, 'F', 'odfcablefaults:edit', 0, 1, 0, '0', 'admin', GETDATE()); + +SET IDENTITY_INSERT sys_menu OFF; + +-- 2. 角色2(本部门及以下可编辑权限)分配新增和修改权限 +INSERT INTO sys_role_menu (Role_id, Menu_id) VALUES (2, 11223); +INSERT INTO sys_role_menu (Role_id, Menu_id) VALUES (2, 11224); + +-- 3. 角色3(编辑角色)分配新增和修改权限 +INSERT INTO sys_role_menu (Role_id, Menu_id) VALUES (3, 11223); +INSERT INTO sys_role_menu (Role_id, Menu_id) VALUES (3, 11224);