填报表如何获取外部参数(如登录账号信息)

本文介绍了润乾报表v5中如何利用会话变量(如用户ID)来控制填报表的单元格权限,包括可视性和可编辑性。通过设置JS表达式,可以实现根据用户身份进行权限控制。例如,当userID分别为'wangwang'、'lili'和'zhangsan'时,单元格B2和B3的显示和编辑状态会有所变化。

填报表通过会话变量来控制单元格的可写及可视是常规及常用功能,润乾报表也完全支持,但在使用方式上,v4 到 v5 有所有调整,较多人可能还不是太清楚。

本文将结合实例来说明 v5 中如何通过参数来控制用户权限的功能。

我们模拟使用会话变量,即当前系统登录用户的 ID(当然也可以用角色、机构等)来实现对 v5 填报表的权限控制。

1、 准备填报表

1png

B2 是测试是否可视格子并赋值给 B2 为”可视”,B3 为测试是否可编辑格子。

2、 设置权限控制表达式

均为支持js表达式写法

B2:是否可视表达式内,userID==“wangwang”,即当用户 id 为 wangwang 时可视,否则不显示。

2png

B3:是否可编辑表达式,userID==”lili”,即当前用户 id 为 lili 时可编辑。

3png</

根据你提供的参数信息: | 序号 | 参数 | 参数说明 | |------|------------|----------------------| | 1 | PageResult | 信息记录分页结果 | 这是一个典型的 **分页查询接口返回结构**,示某个接口返回一个名为 `PageResult` 的对象,封装了“信息记录”的分页数据。 我们将基于通用业务场景(如日志、操作记录、审计、数据列等)进行建模,并生成: - ✅ 完整的 JSON 响应示例 - ✅ `PageResult` 结构定义(含泛型列和分页元数据) - ✅ 示例信息记录项 `InfoRecordDTO` - ✅ Python 和 Java 实现代码 - ✅ 接口设计建议 --- ### ✅ JSON 响应示例(信息记录分页结果) ```json { "success": true, "message": "查询成功", "data": { "pageResult": { "list": [ { "id": "LOG_20250405_001", "title": "用户登录系统", "content": "用户 admin (ID: U001) 于 2025-04-05T08:30:22Z 从 IP 192.168.1.100 登录", "type": "LOGIN", "level": "INFO", "source": "AUTH_SERVICE", "operator": "admin", "operateTime": "2025-04-05T08:30:22Z", "createTime": "2025-04-05T08:30:25Z" }, { "id": "LOG_20250405_002", "title": "修改预算报权限", "content": "将报 'SALES_Q1' 的查看权限授予用户 zhangwei", "type": "PERMISSION_UPDATE", "level": "WARN", "source": "BI_SYSTEM", "operator": "admin", "operateTime": "2025-04-05T09:15:40Z", "createTime": "2025-04-05T09:15:42Z" }, { "id": "LOG_20250405_003", "title": "数据推送失败", "content": "向外部系统 DATA_LAKE 推送销售数据失败,错误码:503", "type": "DATA_SYNC", "level": "ERROR", "source": "SYNC_JOB_001", "operator": "system", "operateTime": "2025-04-05T09:30:00Z", "createTime": "2025-04-05T09:30:05Z" } ], "total": 156, "pageNum": 1, "pageSize": 10, "pages": 16 } } } ``` > 🔹 场景说明: > 用户请求“信息记录”列(如操作日志、事件流),后端以分页形式返回。 --- ### ✅ 字段解释(`PageResult` + `InfoRecordDTO`) #### `PageResult<T>` 分页容器 | 字段名 | 类型 | 说明 | |------------|--------------|------| | `list` | List<T> | 当前页的数据记录列 | | `total` | Long / Integer | 总记录数 | | `pageNum` | Integer | 当前页码(通常从 1 开始) | | `pageSize` | Integer | 每页条数 | | `pages` | Integer | 总页数(可计算得出) | #### `InfoRecordDTO`(信息记录项) | 字段名 | 类型 | 说明 | |---------------|--------------|------| | `id` | String | 记录唯一标识 | | `title` | String | 标题(简要描述) | | `content` | String | 详细内容(支持富文本或 JSON 字符串) | | `type` | String | 类型:LOGIN / PERMISSION_UPDATE / DATA_SYNC / ERROR 等 | | `level` | String | 日志级别:INFO / WARN / ERROR / DEBUG | | `source` | String | 来源模块或服务名称 | | `operator` | String | 操作人(用户账号或系统) | | `operateTime` | DateTime | 操作发生时间(业务时间) | | `createTime` | DateTime | 记录创建时间(入库时间) | --- ### ✅ Python: Pydantic 模型定义(FastAPI 风格) ```python from pydantic import BaseModel from typing import List, Optional from datetime import datetime # 信息记录 DTO class InfoRecordDTO(BaseModel): id: str title: str content: str type: str # LOGIN, PERMISSION_UPDATE, DATA_SYNC... level: str # INFO, WARN, ERROR source: str operator: str operateTime: datetime createTime: datetime # 分页结果包装类(泛型模拟) class PageResult(BaseModel): list: List[InfoRecordDTO] total: int pageNum: int pageSize: int pages: int # 统一响应体 class ApiResponse(BaseModel): success: bool message: str data: PageResult ``` #### FastAPI 接口使用示例: ```python from fastapi import FastAPI, Query app = FastAPI() @app.get("/info-record/page", response_model=ApiResponse) def get_info_records( pageNum: int = Query(1, ge=1), pageSize: int = Query(10, ge=1, le=100) ): # 模拟数据库查询 total = 156 pages = (total + pageSize - 1) // pageSize records = [ InfoRecordDTO( id="LOG_20250405_001", title="用户登录系统", content="用户 admin (ID: U001) 于 2025-04-05T08:30:22Z 从 IP 192.168.1.100 登录", type="LOGIN", level="INFO", source="AUTH_SERVICE", operator="admin", operateTime=datetime(2025, 4, 5, 8, 30, 22), createTime=datetime(2025, 4, 5, 8, 30, 25) ), InfoRecordDTO( id="LOG_20250405_002", title="修改预算报权限", content="将报 'SALES_Q1' 的查看权限授予用户 zhangwei", type="PERMISSION_UPDATE", level="WARN", source="BI_SYSTEM", operator="admin", operateTime=datetime(2025, 4, 5, 9, 15, 40), createTime=datetime(2025, 4, 5, 9, 15, 42) ) ] page_result = PageResult( list=records, total=total, pageNum=pageNum, pageSize=pageSize, pages=pages ) return { "success": True, "message": "查询成功", "data": page_result } ``` --- ### ✅ Java DTO 示例(Spring Boot 风格) #### 1. `InfoRecordDTO.java` ```java import java.time.LocalDateTime; public class InfoRecordDTO { private String id; private String title; private String content; private String type; // LOGIN, PERMISSION_UPDATE... private String level; // INFO, WARN, ERROR private String source; private String operator; private LocalDateTime operateTime; private LocalDateTime createTime; // Getters and Setters ... } ``` #### 2. `PageResult<T>.java`(泛型支持) ```java import java.util.List; public class PageResult<T> { private List<T> list; private long total; private int pageNum; private int pageSize; private int pages; public PageResult() {} public PageResult(List<T> list, long total, int pageNum, int pageSize) { this.list = list; this.total = total; this.pageNum = pageNum; this.pageSize = pageSize; this.pages = (int) Math.ceil((double) total / pageSize); } // Getters and Setters ... } ``` #### 3. Controller 示例 ```java @RestController @RequestMapping("/info-record") public class InfoRecordController { @GetMapping("/page") public ResponseEntity<ApiResponse<PageResult<InfoRecordDTO>>> getPage( @RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize) { List<InfoRecordDTO> list = infoRecordService.queryPage(pageNum, pageSize); long total = infoRecordService.countTotal(); PageResult<InfoRecordDTO> pageResult = new PageResult<>(list, total, pageNum, pageSize); return ResponseEntity.ok(ApiResponse.success(pageResult)); } } ``` --- ### ✅ 分页逻辑建议(Java 后端) ```java // 数据库分页参数计算 int offset = (pageNum - 1) * pageSize; List<InfoRecordDTO> list = mapper.selectByPage(offset, pageSize); long total = mapper.countAll(); ``` --- ### ❗注意事项总结 | 项目 | 建议 | |------|------| | 时间精度 | 使用 ISO 8601 格式(如 `2025-04-05T08:30:22Z`)避免时区问题 | | 内容长度 | `content` 字段建议限制长度(如 2000 字符),避免性能问题 | | 查询性能 | 在 `operateTime`, `type`, `operator`, `level` 上建立复合索引 | | 权限控制 | 敏感记录(如权限变更)需做权限校验,仅授权用户可查 | | 数据保留 | 可设置自动归档策略(如只保留最近 6 个月) | | 泛型设计 | `PageResult<T>` 支持复用到其他分页接口(如用户分页、订单分页) | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值