包含以下模块: - antdv-next-admin: Vue 3 + TypeScript + Ant Design Vue 管理后台 - 设备/许可证/配件/耗材 CRUD 管理页面 - 基础数据管理 (分类/位置/制造商/型号/供应商) - 业务管理 (故障报修/盘点/资产分配/资产申请/交易记录) - 下拉选项改造 (ID输入框 → 搜索下拉选择) - 资产状态字典化 (接入sys_dict系统) - 界面文案优化 (设备→资产, 在库/在用/维修中/已报废) - 修复 console 警告 (popupClassName, 重复组件注册) - our-itam: Java Spring Boot + magic-api 后端服务 - fantastic-admin: 前端底层框架 (pnpm monorepo) - ciyo-itasset: CIYO 资产模块 - magic-script-skill: Claude Code skill 定义 - .claude: 对话历史记录 Co-Authored-By: Claude Code <noreply@anthropic.com>
5.9 KiB
常见问题
如何配置JSON日期的格式
使用Jackson的配置如下(Spring Boot默认使用Jackson):
spring:
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
出现找不到db模块的错误
目前已知两种情况:
- 未配置数据源
- 未引用
spring-boot-starter-jdbc
如何获取RequestBody中的参数
脚本中使用body.xxx获取RequestBody中的参数
SQL中使用#{body.xxx}或${body.xxx}获取RequestBody中的参数
如何获取Header中的参数
脚本中使用header.xxx获取Header中的参数
SQL中使用#{header.xxx}或${header.xxx}获取Header中的参数
如何获取Cookie中的参数
脚本使用cookie.xxx获取Cookie中的参数
SQL中使用#{cookie.xxx}或${cookie.xxx}获取Cookie中的参数
如何获取Session中的参数
脚本中使用session.xxx获取Session中的参数
SQL中使用#{session.xxx}获取Session中的参数
如何获取PathVariable中的参数
脚本中使用PathVariableName或path.xxxx获取PathVariable中的参数
SQL中使用#{PathVariableName}或#{path.xxx}获取PathVariable中的参数
如何获取上传的文件
利用Request模块
import request;
request.getFile('name');
如何获取提交的数组参数
利用Request模块
import request;
return request.getValues('name');
如何给接口添加权限
一般情况采用拦截器实现。在接口选项中配置permisson或role或自定义选项,随后在拦截器中实现:
@Component
@Order(1)
public class PermissionInterceptor implements RequestInterceptor {
@Override
public Object preHandle(ApiInfo info, MagicScriptContext context, MagicHttpServletRequest request, MagicHttpServletResponse response) {
String permissionCode = info.getOptionValue(Options.PERMISSION);
// 执行自己的代码逻辑判断是否有权限
if(无权限){
return new JsonBean<>(403,"无权访问");
}
return null;
}
}
如何给UI添加权限
请参考自定义UI鉴权
${}和#{}的区别
主要区别在于${}用于拼接SQL(会产生SQL注入问题),#{}会替换成占位符(不会产生SQL注入问题),这里的区别与Mybatis一致
如何循环拼接参数
两种办法:
in (#{ids})的语法会自动对集合参数展开
var ids = [1,2,3,4,5,6];
return db.select('select * from sys_user where id in(#{ids})');
//会自动变成select * from sys_user where id in(?,?,?,?,?,?)
- 循环拼接SQL
var list = [1,2,3,4,5];
var sql = "select * from sys_user where ";
for(index,item in list){
sql = sql + 'id = #{list['+index+']}';
if(index + 1 < list.size()){
sql = sql + ' or ';
}
}
return db.select(sql);
多数据源如何配置
编写java代码如下:
@Bean
public MagicDynamicDataSource magicDynamicDataSource(){
MagicDynamicDataSource dynamicDataSource = new MagicDynamicDataSource();
dynamicDataSource.setDefault(ds1);
dynamicDataSource.add("slave",ds2);
return dynamicDataSource;
}
脚本中使用:
db.select('select * from sys_user'); //使用默认数据源
db.slave.select('select * from sys_user'); //使用slave数据源
SQL执行报错java.sql.SQLFeatureNotSupportedException: null
原因:druid版本过低,升级至最新版后即可。
如何自定义返回结果
- 通过配置文件进行配置,具体参考spring-boot配置
- 通过
自定义JSON结果,具体定义方法查看自定义JSON结果 - 通过
自定义拦截器拦截返回自己想要的格式,具体定义方法查看自定义拦截器 - 通过
spring的拦截器返回想要的格式,如ResponseBodyAdvice,HandlerMethodReturnValueHandler(这种方式目前会影响到UI,故不推荐使用)
页面加载缓慢
由于monaco-editor编辑器比较大,建议开启压缩静态资源
server.compression.enabled=true #启用压缩
server.compression.min-response-size=256 #大于256kb时压缩
脚本内容被转义
出现这种情况,请检查自身项目是否有XSS一类的过滤器,需要把UI界面对应的后台接口排除掉即可。
执行测试无响应
目前已知有两种情况:
- 使用了Spring Boot 2.3.5版本,升级至2.3.6解决
- 使用了
nginx代理,加一条配置proxy_buffering off;解决
访问UI404
- 请检查访问路径是否正确
- 请检查
magic-editor包是否被引入 - 如果是拉源码运行,则需要编译一下前端
- 如果以上确定没问题,请检查应用中是否有关于
mvc的配置,如果有请检查是否是extends WebMvcConfigurationSupport的形式,是的话,改成implements WebMvcConfigurer的形式 - 如以上问题均不存在,请提ISSUE 或加群700818216反馈
无法DEBUG或无法查看日志
由于DEBUG和日志是依赖于WebSocket实现的,所以需要WebSocket支持。
- 请检查
Web容器是否支持WebSocket,如果不支持需要引入对应依赖或更换支持WebSocket的Web容器 - 请检查是否使用了
nginx之类的代理,如果使用了,需要对配置其支持WebSocket,样例如下:
location /magic/web/console {
proxy_pass http://localhost:9999;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 900s;
}
保存图片(Blob)数据到数据库
假设将图片的二进制数据传输到body.img中, sql可以这么写
var sql = """
insert into img_table(img)
values(#{img::sql('blob')})
""";