编码规则包括编码生成规则和编码校验规则,编码生成规则用于生成固定规则的编码,比如发文号、订单号等,编码校验规则用于对控件值进行规则校验。
生成编码规则首选需要实现接口,然后在自动编码模块配置实现类和编码。
编码规则接口:com.yuncheng.system.api.CodeRuleAPI
接口代码如下:
import com.alibaba.fastjson.JSONObject;
/**
* 填值规则接口
* 如需使用填值规则功能,规则实现类必须实现此接口
*/
public interface CodeRuleAPI {
/**
* @param params 页面配置固定参数
* @param formData 动态表单参数
* @return
*/
public Object execute(JSONObject params, JSONObject formData);
}
参数说明:
【params】:编码规则配置模块维护的规则参数
【formData】:表单参数
返回值:编码值
示例代码如下:
import com.alibaba.fastjson.JSONObject;
import com.yuncheng.system.api.CodeRuleAPI;
import org.springframework.util.StringUtils;
/**
* 发文号编码生成类
*/
public class PostNumRule implements CodeRuleAPI {
@Override
public Object execute(JSONObject params, JSONObject formData) {
String year = params.getString("year");
String fwh = formData.getString("fwh");
if(StringUtils.isEmpty(fwh)){
//查询历史发文号
//省略查询代码....
String oldFwh = "001";
fwh = oldFwh;
}
return "XXX单位〔 "+year+"〕"+fwh+"号";
}
}
位置:配置管理>编码管理>编码生成规则
规则配置如下图所示:
配置说明:
【规则Code】:规则编码,唯一,使用规则时传入该编码
【规则实现类】:规则编码生成逻辑实现类
【规则参数】:非必填项,格式为json串,可以传入规则实现类
规则编码前后端都可以使用。
单个编码规则生成接口:
接口地址:/api/system/fillRule/executeRuleByCode/{ruleCode}
参数:
【ruleCode】:规则编码
【formData】:表单数据JSON
批量编码规则生成接口:
接口地址:/api/system/fillRule/ executeRuleByCodeBatch
参数:
【ruleData】:规则数据JSON
ruleData示例:
{
"commonFormData": {
"data1": "1"
},
"rules": [{
"ruleCode": "code1",
"formData": {
"code1Data1": "1"
}
},
{
"ruleCode": "code2",
"formData": {
"code2Data1": "1"
}
}
]
}
后端代码调用FillRuleUtil.executeRule方法生成规则编码。
示例如下:
String ruleCode=”code1”;
JSONObject formData = new JSONObject();
Object result = FillRuleUtil.executeRule(ruleCode, formData);
executeRule方法参数:
【ruleCode】:规则编码
【formData】:表单JSON对象
位置:配置管理>编码管理>编码校验规则
局部规则配置如下图所示:
全局规则配置如下图所示:
规则code必须唯一
局部规则:针对编码每一位单独校验
【位数】:对编码哪一位进行校验,从1开始
【规则】:校验的正则表达式
【提示文本】:验证不通过的提示信息
全局规则:针对整个编码校验,全局规则优先级比局部规则高。
【优先级】:规则的优先级
【规则】:校验的正则表达式
【提示文本】:校验不通过的提示信息
对编码校验规则进行验证,在编码校验规则列表操作列中单击“功能测试”超链接,在弹出的功能测试界面录入要测试的编码,单击“确定”按钮显示校验结果。
第一步、引入工具类
import { validateCheckRule } from '@/utils/util'
第二步、使用工具类实现校验规则
validatorRules: {
code: {
rules: [
{required: true, message: '请输入编码'},
{validator: (ruleCode, value, callback) => validateCheckRule(‘common’, value, callback)}
]
}
},
validateCheckRule方法参数:
【ruleCode】:校验规则编码
【value】:表单控件值
【callback】:回调函数
第三步、在页面上调用
<a-form-item label=”编码”>
<a-input v-decorator=”[‘code’,validatorRules.code]”/>
</a-form-item>
第四步、查看效果
未通过效果:
验证通过效果: