tansci/.claude/skills/magic-script/references/script-syntax.md
xuewuerduo f468d532b1 feat: 初始化tansci资产管理项目
包含以下模块:
- 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>
2026-05-17 21:41:22 +08:00

3.7 KiB
Raw Blame History

脚本语法详解

for循环

循环集合

var list = [1,2,3];
for(index,item in list){    //如果不需要index也可以写成for(item in list)
    println(index + ":" + item);
}
// 结果0:1, 1:2, 2:3

循环指定次数

var sum = 0;
for(value in range(0,100)){    //包括0包括100
    sum = sum + value; //不支持+= -= *= /= ++ -- 这种运算
}
return sum; // 5050

while循环

var count = 100;
var sum = 0;
while(count){
    sum = sum + count;
    count = count - 1;
}
return sum; // 5050

循环map

var map = {
    key1 : 123,
    key2 : 456
};
for(key,value in map){    //如果不需要key也可以写成for(value in map)
    println(key + ":" + value);
}
// 结果key1:123, key2:456

Import导入

导入Java类

import 'java.lang.System' as System;
import 'javax.sql.DataSource' as ds;
import 'org.apache.commons.lang3.StringUtils' as string;
import 'java.text.*'    // 此写法跟Java一致

System.out.println('调用System打印');
System.out.println(ds);
System.out.println(string.isBlank(''));
System.out.println(new SimpleDateFormat('yyyy-MM-dd').format(new Date()));

导入已定义的模块

import log; //导入log模块并定义一个与模块名相同的变量名
//import log as logger; //导入log模块并赋值给变量 logger
log.info('Hello {}','Magic API!')

new创建对象

import 'java.util.Date' as Date;//创建之前先导包,不支持.*的操作
return new Date();

异步调用

异步调用方法

var val = async db.select('.....'); // 异步调用返回Future类型
return val.get();   //调用Future的get方法

异步调用lambda

var list = [];
for(index in range(1,10)){
    list.add(async (index)=>db.selectInt('select #{index}'));
}
return list.map(item=>item.get());  // 循环获取结果

exit

语法格式为 exit expr[,expr][,expr]....

magic-api中只取前三个值,分别对应codemessagedata

如:exit 400,'参数填写有误'

assert

语法格式为 assert expr : expr[,expr][,expr]....

如:assert a == 1 : 400, 'a的值应为1' 相当于

if(a != 1){
    exit 400, 'a的值应为1'
}

类型转换

通过::进行类型转换,如xxx::intxxx::double等,当前支持转换类型有intdoublelongbyteshortfloatdate

var a = "1";
return {
    v1: a::int,
    v2: a::int(0),  //转换失败时值为0
    v3: "2020-01-01"::date('yyyy-MM-dd') //转为Date
}

::sql支持将数据转换为对应的sql类型比如

img::sql('blob')

可传入的参数请参考java.sql.Types中定义的常量,不区分大小写。

嵌入其它脚本语言

var name = "hello";
var test = ```javascript
    name + ' ~ world'
```;
return test();

可选链操作符

可选链操作符(?.)允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。

var a = null;
var b = a?.name;    // b = null;
var c = a?.getName();   // c = null;

扩展运算符

扩展运算符,又叫展开语法(Spread syntax)是用于将list或map在语法层面展开

lambda 调用

var sum = (a,b,c) => a + b + c;
System.out.println(sum(...[1,2,3])) // 结果6

list 展开

var arr = [3,4,5];
System.out.println([1,2,...arr,6,7]) // 结果:[1, 2, 3, 4, 5, 6, 7]

map 展开

var map = {key2:2}
System.out.println({key1:1,...map,key3:3}) // 结果:{key1=1, key2=2, key3=3}