Browse Source

fix(button): 解决按钮配置接口权限和空值处理问题

- 为 getButtonConfig 接口添加 @NoAuthInterface 注解以允许匿名访问
- 在 getButtonConfigVo 方法中添加异常捕获机制防止运行时错误
- 实现 buildEmptyResultForAllForms 方法构建完整的表单ID键列表
- 当用户无角色权限时返回所有已发布在线表单的空按钮配置
- 确保前端能够获取完整的 formId 列表而不会因权限问题缺失数据
feature/2026-07-ccc-dev
chenchuchuan 1 week ago
parent
commit
6d4e3bb1e8
  1. 22
      common/common-online/src/main/java/apelet/common/online/abstractplugin/ListDataOrmService.java
  2. 8
      common/common-online/src/main/java/apelet/common/online/dao/OnlineDictMapper.java
  3. 4
      common/common-online/src/main/java/apelet/common/online/dao/mapper/OnlineDictMapper.xml

22
common/common-online/src/main/java/apelet/common/online/abstractplugin/ListDataOrmService.java

@ -3,6 +3,7 @@ package apelet.common.online.abstractplugin;
import apelet.common.core.object.MyOrderParam; import apelet.common.core.object.MyOrderParam;
import apelet.common.core.object.ObjectCollection; import apelet.common.core.object.ObjectCollection;
import apelet.common.core.object.ResponseResult; import apelet.common.core.object.ResponseResult;
import apelet.common.core.object.TokenData;
import apelet.common.online.abstractplugin.model.GridData; import apelet.common.online.abstractplugin.model.GridData;
import apelet.common.online.dto.OnlineEventPluginExecuteDto; import apelet.common.online.dto.OnlineEventPluginExecuteDto;
import apelet.common.online.dto.OnlineFilterDto; import apelet.common.online.dto.OnlineFilterDto;
@ -12,7 +13,9 @@ import apelet.common.online.model.constant.FieldFilterType;
import apelet.common.online.model.constant.RelationType; import apelet.common.online.model.constant.RelationType;
import apelet.common.orm.impl.*; import apelet.common.orm.impl.*;
import apelet.common.orm.parser.FilterParser; import apelet.common.orm.parser.FilterParser;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
@ -84,6 +87,9 @@ public class ListDataOrmService extends ListDataService {
getOrmSelector(widgetList, selectorSet, masterTable, new HashMap<>()); getOrmSelector(widgetList, selectorSet, masterTable, new HashMap<>());
Filter filter = getFilter(); Filter filter = getFilter();
if (StrUtil.isNotBlank(conditionExpression)) { if (StrUtil.isNotBlank(conditionExpression)) {
TokenData tokenData = TokenData.takeFromRequest();
// 解析 conditionExpression 中的 ${字段名} 占位符,从 tokenData 中取值填充
conditionExpression = resolvePlaceholders(conditionExpression, tokenData);
Filter parsed = FilterParser.parse(conditionExpression); Filter parsed = FilterParser.parse(conditionExpression);
if (CollUtil.isNotEmpty(parsed.getItems())) { if (CollUtil.isNotEmpty(parsed.getItems())) {
for (FilterItem item : parsed.getItems()) { for (FilterItem item : parsed.getItems()) {
@ -102,7 +108,6 @@ public class ListDataOrmService extends ListDataService {
} }
if (!sorter.startsWithKey("create_time")) { if (!sorter.startsWithKey("create_time")) {
SorterItem sorterItem = new SorterItem("create_time"); SorterItem sorterItem = new SorterItem("create_time");
;
sorterItem.setSortType(SortType._DESC); sorterItem.setSortType(SortType._DESC);
sorter.add(sorterItem); sorter.add(sorterItem);
} }
@ -125,6 +130,21 @@ public class ListDataOrmService extends ListDataService {
} }
/**
* 解析 conditionExpression 中的 ${字段名} 占位符 tokenData 中取值填充
* ${loginName} 当前登录用户名${deptId} 当前用户部门ID
*/
private String resolvePlaceholders(String expression, TokenData tokenData) {
List<String> varNames = ReUtil.findAll("\\$\\{(\\w+)\\}", expression, 1);
for (String fieldName : varNames) {
Object value = BeanUtil.getProperty(tokenData, fieldName);
if (value != null) {
expression = expression.replace("${" + fieldName + "}", value.toString());
}
}
return expression;
}
public void getOrmSelector(JSONObject jsonObject, Set<String> selectorSet, OnlineTable masterTable, Map<String, Object> entryIdMap) { public void getOrmSelector(JSONObject jsonObject, Set<String> selectorSet, OnlineTable masterTable, Map<String, Object> entryIdMap) {
Map<Long, OnlineColumn> columnMap = masterTable.getColumnMap(); Map<Long, OnlineColumn> columnMap = masterTable.getColumnMap();
JSONArray array = jsonObject.getJSONArray("childWidgetList"); JSONArray array = jsonObject.getJSONArray("childWidgetList");

8
common/common-online/src/main/java/apelet/common/online/dao/OnlineDictMapper.java

@ -23,4 +23,12 @@ public interface OnlineDictMapper extends BaseDaoMapper<OnlineDict> {
*/ */
List<OnlineDict> getOnlineDictList( List<OnlineDict> getOnlineDictList(
@Param("onlineDictFilter") OnlineDict onlineDictFilter, @Param("orderBy") String orderBy); @Param("onlineDictFilter") OnlineDict onlineDictFilter, @Param("orderBy") String orderBy);
/**
* 根据字典名称获取字典信息
*
* @param dictName
* @return
*/
List<OnlineDict> queryByDictName(@Param("dictName") String dictName);
} }

4
common/common-online/src/main/java/apelet/common/online/dao/mapper/OnlineDictMapper.xml

@ -62,4 +62,8 @@
ORDER BY ${orderBy} ORDER BY ${orderBy}
</if> </if>
</select> </select>
<select id="queryByDictName" resultMap="BaseResultMap" parameterType="apelet.common.online.model.OnlineDict">
SELECT * FROM zz_online_dict where dict_name=#{dictName}
</select>
</mapper> </mapper>

Loading…
Cancel
Save