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);