feat(api): 计提参数查看放开登录用户、修改仅管理员(#17/#6 答复)

- deps 新增 LoginUser 依赖;params 只读七端点改登录即可,写(提交/撤回)保持 AdminUser
- 前端 params 路由 requiresAdmin → allowedRoles(admin/finance/leader);页面写按钮按角色显隐
- 权限用例分层:普通用户目录 200、提交/撤回 403、未登录拦截

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
liuwenxinandClaude Code committed 2026-10-19 11:19:16 +08:00
1 parent 2652397720
commit 7008de0c69
5 files changed
+54 -19

No files matched your search

+8 -1
View File
@@ -62,10 +62,17 @@ const routes: RouteRecordRaw[] = [
meta: { title: '岗位角色', group: '系统管理', requiresAdmin: true, order: 5 },
},
{
// 计提参数:查看放开到管理员/财务/领导(#17 答复「查看可、修改仅
// 管理员」);页面内写按钮按 admin 角色显隐
path: '/system/params',
name: 'system-params',
component: () => import('@/views/system/params/index.vue'),
meta: { title: '计提参数', group: '系统管理', requiresAdmin: true, order: 6 },
meta: {
title: '计提参数',
group: '系统管理',
allowedRoles: [ROLE_ADMIN, 'finance', 'leader'],
order: 6,
},
},
{
path: '/system/settings',
+11 -4
View File
@@ -15,6 +15,8 @@ import type {
import AppPagination from '@/components/table/AppPagination.vue'
import { useConfirmAction } from '@/composables/useConfirmAction'
import { usePagedList } from '@/composables/usePagedList'
import { useUserStore } from '@/store/user'
import { ROLE_ADMIN } from '@/utils/constants'
import { handledError } from '@/utils/error'
/**
@@ -24,9 +26,13 @@ import { handledError } from '@/utils/error'
* - 目录按「分组 → 参数 → 维度值」展示当前生效值;修改先进「待提交」,
* 以批次提交(一次一批,逐项留痕旧值/新值)
* - 支持立即生效或指定日期生效;未生效批次可整批撤回
* - 权限分层(澄清 #17 答复 2026-10-19):查看对财务/领导放开(只读),
* 修改仅管理员——写按钮按角色显隐,越权仍有后端 403 兜底
* - 图表/导出:统计用 ECharts(用户指定),导出为 xlsx 文件流
*/
const { confirmAndRun } = useConfirmAction()
const userStore = useUserStore()
const isAdmin = computed(() => userStore.roles.includes(ROLE_ADMIN))
// ==================== 目录 ====================
@@ -472,6 +478,7 @@ onMounted(() => {
待改为 {{ pendingOf(item, v.dimension_value)!.new_value }}
</el-tag>
<el-button
v-if="isAdmin"
link
type="primary"
size="small"
@@ -487,7 +494,7 @@ onMounted(() => {
</td>
<td>
<el-button
v-if="!item.values.length"
v-if="isAdmin && !item.values.length"
link
type="primary"
size="small"
@@ -504,8 +511,8 @@ onMounted(() => {
</el-collapse>
</el-card>
<!-- 待提交批次 -->
<el-card v-if="pendingList.length" shadow="never" class="pending-card">
<!-- 待提交批次(仅管理员可见可操作) -->
<el-card v-if="isAdmin && pendingList.length" shadow="never" class="pending-card">
<template #header>
<div class="pending-head">
<b>待提交变更({{ pendingList.length }} 项)</b>
@@ -670,7 +677,7 @@ onMounted(() => {
<el-table-column label="操作" width="80">
<template #default="{ row }">
<el-button
v-if="row.effective_date > localToday()"
v-if="isAdmin && row.effective_date > localToday()"
link
type="danger"
size="small"