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:
1 parent
2652397720
commit
7008de0c69
5 files changed
+54
-19
No files matched your search
@@ -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',
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in new issue
Block a user