feat(系统设置): 自定义函数基本操作

This commit is contained in:
shiziyuan9527 2021-09-10 17:40:09 +08:00 committed by 刘瑞斌
parent 25c2e08209
commit 02c7699ceb
12 changed files with 1981 additions and 0 deletions

View File

@ -0,0 +1,27 @@
package io.metersphere.base.domain;
import java.io.Serializable;
import lombok.Data;
@Data
public class CustomFunction implements Serializable {
private String id;
private String name;
private String tags;
private String description;
private String type;
private String createUser;
private Long createTime;
private Long updateTime;
private String projectId;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,810 @@
package io.metersphere.base.domain;
import java.util.ArrayList;
import java.util.List;
public class CustomFunctionExample {
protected String orderByClause;
protected boolean distinct;
protected List<Criteria> oredCriteria;
public CustomFunctionExample() {
oredCriteria = new ArrayList<Criteria>();
}
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
}
public String getOrderByClause() {
return orderByClause;
}
public void setDistinct(boolean distinct) {
this.distinct = distinct;
}
public boolean isDistinct() {
return distinct;
}
public List<Criteria> getOredCriteria() {
return oredCriteria;
}
public void or(Criteria criteria) {
oredCriteria.add(criteria);
}
public Criteria or() {
Criteria criteria = createCriteriaInternal();
oredCriteria.add(criteria);
return criteria;
}
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
}
protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
}
public void clear() {
oredCriteria.clear();
orderByClause = null;
distinct = false;
}
protected abstract static class GeneratedCriteria {
protected List<Criterion> criteria;
protected GeneratedCriteria() {
super();
criteria = new ArrayList<Criterion>();
}
public boolean isValid() {
return criteria.size() > 0;
}
public List<Criterion> getAllCriteria() {
return criteria;
}
public List<Criterion> getCriteria() {
return criteria;
}
protected void addCriterion(String condition) {
if (condition == null) {
throw new RuntimeException("Value for condition cannot be null");
}
criteria.add(new Criterion(condition));
}
protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
}
protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value1, value2));
}
public Criteria andIdIsNull() {
addCriterion("id is null");
return (Criteria) this;
}
public Criteria andIdIsNotNull() {
addCriterion("id is not null");
return (Criteria) this;
}
public Criteria andIdEqualTo(String value) {
addCriterion("id =", value, "id");
return (Criteria) this;
}
public Criteria andIdNotEqualTo(String value) {
addCriterion("id <>", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThan(String value) {
addCriterion("id >", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThanOrEqualTo(String value) {
addCriterion("id >=", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThan(String value) {
addCriterion("id <", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThanOrEqualTo(String value) {
addCriterion("id <=", value, "id");
return (Criteria) this;
}
public Criteria andIdLike(String value) {
addCriterion("id like", value, "id");
return (Criteria) this;
}
public Criteria andIdNotLike(String value) {
addCriterion("id not like", value, "id");
return (Criteria) this;
}
public Criteria andIdIn(List<String> values) {
addCriterion("id in", values, "id");
return (Criteria) this;
}
public Criteria andIdNotIn(List<String> values) {
addCriterion("id not in", values, "id");
return (Criteria) this;
}
public Criteria andIdBetween(String value1, String value2) {
addCriterion("id between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andIdNotBetween(String value1, String value2) {
addCriterion("id not between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andNameIsNull() {
addCriterion("`name` is null");
return (Criteria) this;
}
public Criteria andNameIsNotNull() {
addCriterion("`name` is not null");
return (Criteria) this;
}
public Criteria andNameEqualTo(String value) {
addCriterion("`name` =", value, "name");
return (Criteria) this;
}
public Criteria andNameNotEqualTo(String value) {
addCriterion("`name` <>", value, "name");
return (Criteria) this;
}
public Criteria andNameGreaterThan(String value) {
addCriterion("`name` >", value, "name");
return (Criteria) this;
}
public Criteria andNameGreaterThanOrEqualTo(String value) {
addCriterion("`name` >=", value, "name");
return (Criteria) this;
}
public Criteria andNameLessThan(String value) {
addCriterion("`name` <", value, "name");
return (Criteria) this;
}
public Criteria andNameLessThanOrEqualTo(String value) {
addCriterion("`name` <=", value, "name");
return (Criteria) this;
}
public Criteria andNameLike(String value) {
addCriterion("`name` like", value, "name");
return (Criteria) this;
}
public Criteria andNameNotLike(String value) {
addCriterion("`name` not like", value, "name");
return (Criteria) this;
}
public Criteria andNameIn(List<String> values) {
addCriterion("`name` in", values, "name");
return (Criteria) this;
}
public Criteria andNameNotIn(List<String> values) {
addCriterion("`name` not in", values, "name");
return (Criteria) this;
}
public Criteria andNameBetween(String value1, String value2) {
addCriterion("`name` between", value1, value2, "name");
return (Criteria) this;
}
public Criteria andNameNotBetween(String value1, String value2) {
addCriterion("`name` not between", value1, value2, "name");
return (Criteria) this;
}
public Criteria andTagsIsNull() {
addCriterion("tags is null");
return (Criteria) this;
}
public Criteria andTagsIsNotNull() {
addCriterion("tags is not null");
return (Criteria) this;
}
public Criteria andTagsEqualTo(String value) {
addCriterion("tags =", value, "tags");
return (Criteria) this;
}
public Criteria andTagsNotEqualTo(String value) {
addCriterion("tags <>", value, "tags");
return (Criteria) this;
}
public Criteria andTagsGreaterThan(String value) {
addCriterion("tags >", value, "tags");
return (Criteria) this;
}
public Criteria andTagsGreaterThanOrEqualTo(String value) {
addCriterion("tags >=", value, "tags");
return (Criteria) this;
}
public Criteria andTagsLessThan(String value) {
addCriterion("tags <", value, "tags");
return (Criteria) this;
}
public Criteria andTagsLessThanOrEqualTo(String value) {
addCriterion("tags <=", value, "tags");
return (Criteria) this;
}
public Criteria andTagsLike(String value) {
addCriterion("tags like", value, "tags");
return (Criteria) this;
}
public Criteria andTagsNotLike(String value) {
addCriterion("tags not like", value, "tags");
return (Criteria) this;
}
public Criteria andTagsIn(List<String> values) {
addCriterion("tags in", values, "tags");
return (Criteria) this;
}
public Criteria andTagsNotIn(List<String> values) {
addCriterion("tags not in", values, "tags");
return (Criteria) this;
}
public Criteria andTagsBetween(String value1, String value2) {
addCriterion("tags between", value1, value2, "tags");
return (Criteria) this;
}
public Criteria andTagsNotBetween(String value1, String value2) {
addCriterion("tags not between", value1, value2, "tags");
return (Criteria) this;
}
public Criteria andDescriptionIsNull() {
addCriterion("description is null");
return (Criteria) this;
}
public Criteria andDescriptionIsNotNull() {
addCriterion("description is not null");
return (Criteria) this;
}
public Criteria andDescriptionEqualTo(String value) {
addCriterion("description =", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionNotEqualTo(String value) {
addCriterion("description <>", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionGreaterThan(String value) {
addCriterion("description >", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionGreaterThanOrEqualTo(String value) {
addCriterion("description >=", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionLessThan(String value) {
addCriterion("description <", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionLessThanOrEqualTo(String value) {
addCriterion("description <=", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionLike(String value) {
addCriterion("description like", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionNotLike(String value) {
addCriterion("description not like", value, "description");
return (Criteria) this;
}
public Criteria andDescriptionIn(List<String> values) {
addCriterion("description in", values, "description");
return (Criteria) this;
}
public Criteria andDescriptionNotIn(List<String> values) {
addCriterion("description not in", values, "description");
return (Criteria) this;
}
public Criteria andDescriptionBetween(String value1, String value2) {
addCriterion("description between", value1, value2, "description");
return (Criteria) this;
}
public Criteria andDescriptionNotBetween(String value1, String value2) {
addCriterion("description not between", value1, value2, "description");
return (Criteria) this;
}
public Criteria andTypeIsNull() {
addCriterion("`type` is null");
return (Criteria) this;
}
public Criteria andTypeIsNotNull() {
addCriterion("`type` is not null");
return (Criteria) this;
}
public Criteria andTypeEqualTo(String value) {
addCriterion("`type` =", value, "type");
return (Criteria) this;
}
public Criteria andTypeNotEqualTo(String value) {
addCriterion("`type` <>", value, "type");
return (Criteria) this;
}
public Criteria andTypeGreaterThan(String value) {
addCriterion("`type` >", value, "type");
return (Criteria) this;
}
public Criteria andTypeGreaterThanOrEqualTo(String value) {
addCriterion("`type` >=", value, "type");
return (Criteria) this;
}
public Criteria andTypeLessThan(String value) {
addCriterion("`type` <", value, "type");
return (Criteria) this;
}
public Criteria andTypeLessThanOrEqualTo(String value) {
addCriterion("`type` <=", value, "type");
return (Criteria) this;
}
public Criteria andTypeLike(String value) {
addCriterion("`type` like", value, "type");
return (Criteria) this;
}
public Criteria andTypeNotLike(String value) {
addCriterion("`type` not like", value, "type");
return (Criteria) this;
}
public Criteria andTypeIn(List<String> values) {
addCriterion("`type` in", values, "type");
return (Criteria) this;
}
public Criteria andTypeNotIn(List<String> values) {
addCriterion("`type` not in", values, "type");
return (Criteria) this;
}
public Criteria andTypeBetween(String value1, String value2) {
addCriterion("`type` between", value1, value2, "type");
return (Criteria) this;
}
public Criteria andTypeNotBetween(String value1, String value2) {
addCriterion("`type` not between", value1, value2, "type");
return (Criteria) this;
}
public Criteria andCreateUserIsNull() {
addCriterion("create_user is null");
return (Criteria) this;
}
public Criteria andCreateUserIsNotNull() {
addCriterion("create_user is not null");
return (Criteria) this;
}
public Criteria andCreateUserEqualTo(String value) {
addCriterion("create_user =", value, "createUser");
return (Criteria) this;
}
public Criteria andCreateUserNotEqualTo(String value) {
addCriterion("create_user <>", value, "createUser");
return (Criteria) this;
}
public Criteria andCreateUserGreaterThan(String value) {
addCriterion("create_user >", value, "createUser");
return (Criteria) this;
}
public Criteria andCreateUserGreaterThanOrEqualTo(String value) {
addCriterion("create_user >=", value, "createUser");
return (Criteria) this;
}
public Criteria andCreateUserLessThan(String value) {
addCriterion("create_user <", value, "createUser");
return (Criteria) this;
}
public Criteria andCreateUserLessThanOrEqualTo(String value) {
addCriterion("create_user <=", value, "createUser");
return (Criteria) this;
}
public Criteria andCreateUserLike(String value) {
addCriterion("create_user like", value, "createUser");
return (Criteria) this;
}
public Criteria andCreateUserNotLike(String value) {
addCriterion("create_user not like", value, "createUser");
return (Criteria) this;
}
public Criteria andCreateUserIn(List<String> values) {
addCriterion("create_user in", values, "createUser");
return (Criteria) this;
}
public Criteria andCreateUserNotIn(List<String> values) {
addCriterion("create_user not in", values, "createUser");
return (Criteria) this;
}
public Criteria andCreateUserBetween(String value1, String value2) {
addCriterion("create_user between", value1, value2, "createUser");
return (Criteria) this;
}
public Criteria andCreateUserNotBetween(String value1, String value2) {
addCriterion("create_user not between", value1, value2, "createUser");
return (Criteria) this;
}
public Criteria andCreateTimeIsNull() {
addCriterion("create_time is null");
return (Criteria) this;
}
public Criteria andCreateTimeIsNotNull() {
addCriterion("create_time is not null");
return (Criteria) this;
}
public Criteria andCreateTimeEqualTo(Long value) {
addCriterion("create_time =", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotEqualTo(Long value) {
addCriterion("create_time <>", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeGreaterThan(Long value) {
addCriterion("create_time >", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeGreaterThanOrEqualTo(Long value) {
addCriterion("create_time >=", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeLessThan(Long value) {
addCriterion("create_time <", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeLessThanOrEqualTo(Long value) {
addCriterion("create_time <=", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeIn(List<Long> values) {
addCriterion("create_time in", values, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotIn(List<Long> values) {
addCriterion("create_time not in", values, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeBetween(Long value1, Long value2) {
addCriterion("create_time between", value1, value2, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotBetween(Long value1, Long value2) {
addCriterion("create_time not between", value1, value2, "createTime");
return (Criteria) this;
}
public Criteria andUpdateTimeIsNull() {
addCriterion("update_time is null");
return (Criteria) this;
}
public Criteria andUpdateTimeIsNotNull() {
addCriterion("update_time is not null");
return (Criteria) this;
}
public Criteria andUpdateTimeEqualTo(Long value) {
addCriterion("update_time =", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeNotEqualTo(Long value) {
addCriterion("update_time <>", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeGreaterThan(Long value) {
addCriterion("update_time >", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeGreaterThanOrEqualTo(Long value) {
addCriterion("update_time >=", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeLessThan(Long value) {
addCriterion("update_time <", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeLessThanOrEqualTo(Long value) {
addCriterion("update_time <=", value, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeIn(List<Long> values) {
addCriterion("update_time in", values, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeNotIn(List<Long> values) {
addCriterion("update_time not in", values, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeBetween(Long value1, Long value2) {
addCriterion("update_time between", value1, value2, "updateTime");
return (Criteria) this;
}
public Criteria andUpdateTimeNotBetween(Long value1, Long value2) {
addCriterion("update_time not between", value1, value2, "updateTime");
return (Criteria) this;
}
public Criteria andProjectIdIsNull() {
addCriterion("project_id is null");
return (Criteria) this;
}
public Criteria andProjectIdIsNotNull() {
addCriterion("project_id is not null");
return (Criteria) this;
}
public Criteria andProjectIdEqualTo(String value) {
addCriterion("project_id =", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdNotEqualTo(String value) {
addCriterion("project_id <>", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdGreaterThan(String value) {
addCriterion("project_id >", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdGreaterThanOrEqualTo(String value) {
addCriterion("project_id >=", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdLessThan(String value) {
addCriterion("project_id <", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdLessThanOrEqualTo(String value) {
addCriterion("project_id <=", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdLike(String value) {
addCriterion("project_id like", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdNotLike(String value) {
addCriterion("project_id not like", value, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdIn(List<String> values) {
addCriterion("project_id in", values, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdNotIn(List<String> values) {
addCriterion("project_id not in", values, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdBetween(String value1, String value2) {
addCriterion("project_id between", value1, value2, "projectId");
return (Criteria) this;
}
public Criteria andProjectIdNotBetween(String value1, String value2) {
addCriterion("project_id not between", value1, value2, "projectId");
return (Criteria) this;
}
}
public static class Criteria extends GeneratedCriteria {
protected Criteria() {
super();
}
}
public static class Criterion {
private String condition;
private Object value;
private Object secondValue;
private boolean noValue;
private boolean singleValue;
private boolean betweenValue;
private boolean listValue;
private String typeHandler;
public String getCondition() {
return condition;
}
public Object getValue() {
return value;
}
public Object getSecondValue() {
return secondValue;
}
public boolean isNoValue() {
return noValue;
}
public boolean isSingleValue() {
return singleValue;
}
public boolean isBetweenValue() {
return betweenValue;
}
public boolean isListValue() {
return listValue;
}
public String getTypeHandler() {
return typeHandler;
}
protected Criterion(String condition) {
super();
this.condition = condition;
this.typeHandler = null;
this.noValue = true;
}
protected Criterion(String condition, Object value, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.typeHandler = typeHandler;
if (value instanceof List<?>) {
this.listValue = true;
} else {
this.singleValue = true;
}
}
protected Criterion(String condition, Object value) {
this(condition, value, null);
}
protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.secondValue = secondValue;
this.typeHandler = typeHandler;
this.betweenValue = true;
}
protected Criterion(String condition, Object value, Object secondValue) {
this(condition, value, secondValue, null);
}
}
}

View File

@ -0,0 +1,19 @@
package io.metersphere.base.domain;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class CustomFunctionWithBLOBs extends CustomFunction implements Serializable {
private String params;
private String script;
private String result;
private static final long serialVersionUID = 1L;
}

View File

@ -0,0 +1,37 @@
package io.metersphere.base.mapper;
import io.metersphere.base.domain.CustomFunction;
import io.metersphere.base.domain.CustomFunctionExample;
import io.metersphere.base.domain.CustomFunctionWithBLOBs;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface CustomFunctionMapper {
long countByExample(CustomFunctionExample example);
int deleteByExample(CustomFunctionExample example);
int deleteByPrimaryKey(String id);
int insert(CustomFunctionWithBLOBs record);
int insertSelective(CustomFunctionWithBLOBs record);
List<CustomFunctionWithBLOBs> selectByExampleWithBLOBs(CustomFunctionExample example);
List<CustomFunction> selectByExample(CustomFunctionExample example);
CustomFunctionWithBLOBs selectByPrimaryKey(String id);
int updateByExampleSelective(@Param("record") CustomFunctionWithBLOBs record, @Param("example") CustomFunctionExample example);
int updateByExampleWithBLOBs(@Param("record") CustomFunctionWithBLOBs record, @Param("example") CustomFunctionExample example);
int updateByExample(@Param("record") CustomFunction record, @Param("example") CustomFunctionExample example);
int updateByPrimaryKeySelective(CustomFunctionWithBLOBs record);
int updateByPrimaryKeyWithBLOBs(CustomFunctionWithBLOBs record);
int updateByPrimaryKey(CustomFunction record);
}

View File

@ -0,0 +1,372 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.metersphere.base.mapper.CustomFunctionMapper">
<resultMap id="BaseResultMap" type="io.metersphere.base.domain.CustomFunction">
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="tags" jdbcType="VARCHAR" property="tags" />
<result column="description" jdbcType="VARCHAR" property="description" />
<result column="type" jdbcType="VARCHAR" property="type" />
<result column="create_user" jdbcType="VARCHAR" property="createUser" />
<result column="create_time" jdbcType="BIGINT" property="createTime" />
<result column="update_time" jdbcType="BIGINT" property="updateTime" />
<result column="project_id" jdbcType="VARCHAR" property="projectId" />
</resultMap>
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.CustomFunctionWithBLOBs">
<result column="params" jdbcType="LONGVARCHAR" property="params" />
<result column="script" jdbcType="LONGVARCHAR" property="script" />
<result column="result" jdbcType="LONGVARCHAR" property="result" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
<foreach collection="oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Update_By_Example_Where_Clause">
<where>
<foreach collection="example.oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List">
id, `name`, tags, description, `type`, create_user, create_time, update_time, project_id
</sql>
<sql id="Blob_Column_List">
params, script, `result`
</sql>
<select id="selectByExampleWithBLOBs" parameterType="io.metersphere.base.domain.CustomFunctionExample" resultMap="ResultMapWithBLOBs">
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List" />
,
<include refid="Blob_Column_List" />
from custom_function
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</select>
<select id="selectByExample" parameterType="io.metersphere.base.domain.CustomFunctionExample" resultMap="BaseResultMap">
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List" />
from custom_function
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</select>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="ResultMapWithBLOBs">
select
<include refid="Base_Column_List" />
,
<include refid="Blob_Column_List" />
from custom_function
where id = #{id,jdbcType=VARCHAR}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
delete from custom_function
where id = #{id,jdbcType=VARCHAR}
</delete>
<delete id="deleteByExample" parameterType="io.metersphere.base.domain.CustomFunctionExample">
delete from custom_function
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</delete>
<insert id="insert" parameterType="io.metersphere.base.domain.CustomFunctionWithBLOBs">
insert into custom_function (id, `name`, tags,
description, `type`, create_user,
create_time, update_time, project_id,
params, script, `result`
)
values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{tags,jdbcType=VARCHAR},
#{description,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{createUser,jdbcType=VARCHAR},
#{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT}, #{projectId,jdbcType=VARCHAR},
#{params,jdbcType=LONGVARCHAR}, #{script,jdbcType=LONGVARCHAR}, #{result,jdbcType=LONGVARCHAR}
)
</insert>
<insert id="insertSelective" parameterType="io.metersphere.base.domain.CustomFunctionWithBLOBs">
insert into custom_function
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
`name`,
</if>
<if test="tags != null">
tags,
</if>
<if test="description != null">
description,
</if>
<if test="type != null">
`type`,
</if>
<if test="createUser != null">
create_user,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
<if test="projectId != null">
project_id,
</if>
<if test="params != null">
params,
</if>
<if test="script != null">
script,
</if>
<if test="result != null">
`result`,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=VARCHAR},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="tags != null">
#{tags,jdbcType=VARCHAR},
</if>
<if test="description != null">
#{description,jdbcType=VARCHAR},
</if>
<if test="type != null">
#{type,jdbcType=VARCHAR},
</if>
<if test="createUser != null">
#{createUser,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
#{createTime,jdbcType=BIGINT},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=BIGINT},
</if>
<if test="projectId != null">
#{projectId,jdbcType=VARCHAR},
</if>
<if test="params != null">
#{params,jdbcType=LONGVARCHAR},
</if>
<if test="script != null">
#{script,jdbcType=LONGVARCHAR},
</if>
<if test="result != null">
#{result,jdbcType=LONGVARCHAR},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="io.metersphere.base.domain.CustomFunctionExample" resultType="java.lang.Long">
select count(*) from custom_function
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByExampleSelective" parameterType="map">
update custom_function
<set>
<if test="record.id != null">
id = #{record.id,jdbcType=VARCHAR},
</if>
<if test="record.name != null">
`name` = #{record.name,jdbcType=VARCHAR},
</if>
<if test="record.tags != null">
tags = #{record.tags,jdbcType=VARCHAR},
</if>
<if test="record.description != null">
description = #{record.description,jdbcType=VARCHAR},
</if>
<if test="record.type != null">
`type` = #{record.type,jdbcType=VARCHAR},
</if>
<if test="record.createUser != null">
create_user = #{record.createUser,jdbcType=VARCHAR},
</if>
<if test="record.createTime != null">
create_time = #{record.createTime,jdbcType=BIGINT},
</if>
<if test="record.updateTime != null">
update_time = #{record.updateTime,jdbcType=BIGINT},
</if>
<if test="record.projectId != null">
project_id = #{record.projectId,jdbcType=VARCHAR},
</if>
<if test="record.params != null">
params = #{record.params,jdbcType=LONGVARCHAR},
</if>
<if test="record.script != null">
script = #{record.script,jdbcType=LONGVARCHAR},
</if>
<if test="record.result != null">
`result` = #{record.result,jdbcType=LONGVARCHAR},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExampleWithBLOBs" parameterType="map">
update custom_function
set id = #{record.id,jdbcType=VARCHAR},
`name` = #{record.name,jdbcType=VARCHAR},
tags = #{record.tags,jdbcType=VARCHAR},
description = #{record.description,jdbcType=VARCHAR},
`type` = #{record.type,jdbcType=VARCHAR},
create_user = #{record.createUser,jdbcType=VARCHAR},
create_time = #{record.createTime,jdbcType=BIGINT},
update_time = #{record.updateTime,jdbcType=BIGINT},
project_id = #{record.projectId,jdbcType=VARCHAR},
params = #{record.params,jdbcType=LONGVARCHAR},
script = #{record.script,jdbcType=LONGVARCHAR},
`result` = #{record.result,jdbcType=LONGVARCHAR}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExample" parameterType="map">
update custom_function
set id = #{record.id,jdbcType=VARCHAR},
`name` = #{record.name,jdbcType=VARCHAR},
tags = #{record.tags,jdbcType=VARCHAR},
description = #{record.description,jdbcType=VARCHAR},
`type` = #{record.type,jdbcType=VARCHAR},
create_user = #{record.createUser,jdbcType=VARCHAR},
create_time = #{record.createTime,jdbcType=BIGINT},
update_time = #{record.updateTime,jdbcType=BIGINT},
project_id = #{record.projectId,jdbcType=VARCHAR}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByPrimaryKeySelective" parameterType="io.metersphere.base.domain.CustomFunctionWithBLOBs">
update custom_function
<set>
<if test="name != null">
`name` = #{name,jdbcType=VARCHAR},
</if>
<if test="tags != null">
tags = #{tags,jdbcType=VARCHAR},
</if>
<if test="description != null">
description = #{description,jdbcType=VARCHAR},
</if>
<if test="type != null">
`type` = #{type,jdbcType=VARCHAR},
</if>
<if test="createUser != null">
create_user = #{createUser,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=BIGINT},
</if>
<if test="updateTime != null">
update_time = #{updateTime,jdbcType=BIGINT},
</if>
<if test="projectId != null">
project_id = #{projectId,jdbcType=VARCHAR},
</if>
<if test="params != null">
params = #{params,jdbcType=LONGVARCHAR},
</if>
<if test="script != null">
script = #{script,jdbcType=LONGVARCHAR},
</if>
<if test="result != null">
`result` = #{result,jdbcType=LONGVARCHAR},
</if>
</set>
where id = #{id,jdbcType=VARCHAR}
</update>
<update id="updateByPrimaryKeyWithBLOBs" parameterType="io.metersphere.base.domain.CustomFunctionWithBLOBs">
update custom_function
set `name` = #{name,jdbcType=VARCHAR},
tags = #{tags,jdbcType=VARCHAR},
description = #{description,jdbcType=VARCHAR},
`type` = #{type,jdbcType=VARCHAR},
create_user = #{createUser,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT},
project_id = #{projectId,jdbcType=VARCHAR},
params = #{params,jdbcType=LONGVARCHAR},
script = #{script,jdbcType=LONGVARCHAR},
`result` = #{result,jdbcType=LONGVARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
<update id="updateByPrimaryKey" parameterType="io.metersphere.base.domain.CustomFunction">
update custom_function
set `name` = #{name,jdbcType=VARCHAR},
tags = #{tags,jdbcType=VARCHAR},
description = #{description,jdbcType=VARCHAR},
`type` = #{type,jdbcType=VARCHAR},
create_user = #{createUser,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=BIGINT},
project_id = #{projectId,jdbcType=VARCHAR}
where id = #{id,jdbcType=VARCHAR}
</update>
</mapper>

View File

@ -0,0 +1,57 @@
package io.metersphere.controller;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.metersphere.base.domain.CustomFunction;
import io.metersphere.base.domain.CustomFunctionWithBLOBs;
import io.metersphere.commons.utils.PageUtils;
import io.metersphere.commons.utils.Pager;
import io.metersphere.controller.request.CustomFunctionRequest;
import io.metersphere.service.CustomFunctionService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* @author lyh
*/
@RequestMapping("custom/func")
@RestController
public class CustomFunctionController {
@Resource
private CustomFunctionService customFunctionService;
@PostMapping("/save")
public CustomFunctionWithBLOBs save(@RequestBody CustomFunctionRequest request) {
return customFunctionService.save(request);
}
@GetMapping("/delete/{id}")
public void delete(@PathVariable String id) {
customFunctionService.delete(id);
}
@PostMapping("/update")
public void update(@RequestBody CustomFunctionRequest request) {
customFunctionService.update(request);
}
@PostMapping("/list/{goPage}/{pageSize}")
public Pager<List<CustomFunction>> query(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody CustomFunctionRequest request) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, customFunctionService.query(request));
}
@GetMapping("/copy/{id}")
public CustomFunctionWithBLOBs copy(@PathVariable String id) {
return customFunctionService.copy(id);
}
@GetMapping("/get/{id}")
public CustomFunctionWithBLOBs get(@PathVariable String id) {
return customFunctionService.get(id);
}
}

View File

@ -0,0 +1,12 @@
package io.metersphere.controller.request;
import io.metersphere.base.domain.CustomFunctionWithBLOBs;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CustomFunctionRequest extends CustomFunctionWithBLOBs {
}

View File

@ -0,0 +1,109 @@
package io.metersphere.service;
import io.metersphere.base.domain.CustomFunction;
import io.metersphere.base.domain.CustomFunctionExample;
import io.metersphere.base.domain.CustomFunctionWithBLOBs;
import io.metersphere.base.mapper.CustomFunctionMapper;
import io.metersphere.commons.exception.MSException;
import io.metersphere.commons.utils.BeanUtils;
import io.metersphere.commons.utils.SessionUtils;
import io.metersphere.controller.request.CustomFunctionRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.UUID;
/**
* @author lyh
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class CustomFunctionService {
@Resource
private CustomFunctionMapper customFunctionMapper;
public CustomFunctionWithBLOBs save(CustomFunctionRequest request) {
request.setId(UUID.randomUUID().toString());
request.setCreateUser(SessionUtils.getUserId());
request.setProjectId(SessionUtils.getCurrentProjectId());
checkFuncExist(request);
request.setCreateTime(System.currentTimeMillis());
request.setUpdateTime(System.currentTimeMillis());
customFunctionMapper.insert(request);
return request;
}
private void checkFuncExist(CustomFunctionRequest request) {
String id = request.getId();
String name = request.getName();
CustomFunctionExample example = new CustomFunctionExample();
CustomFunctionExample.Criteria criteria = example
.createCriteria()
.andProjectIdEqualTo(request.getProjectId())
.andNameEqualTo(name);
if (StringUtils.isNotBlank(id)) {
criteria.andIdNotEqualTo(id);
}
if (customFunctionMapper.countByExample(example) > 0) {
MSException.throwException("自定义函数名称已存在!");
}
}
public void delete(String id) {
if (StringUtils.isBlank(id)) {
return;
}
customFunctionMapper.deleteByPrimaryKey(id);
}
public List<CustomFunction> query(CustomFunctionRequest request) {
String projectId = request.getProjectId();
if (StringUtils.isBlank(projectId)) {
projectId = SessionUtils.getCurrentProjectId();
}
CustomFunctionExample example = new CustomFunctionExample();
example.createCriteria().andProjectIdEqualTo(projectId);
return customFunctionMapper.selectByExample(example);
}
public void update(CustomFunctionRequest request) {
checkFuncExist(request);
request.setUpdateTime(System.currentTimeMillis());
customFunctionMapper.updateByPrimaryKeyWithBLOBs(request);
}
public CustomFunctionWithBLOBs copy(String id) {
CustomFunctionWithBLOBs blob = customFunctionMapper.selectByPrimaryKey(id);
if (blob == null) {
MSException.throwException("copy fail, source obj is null.");
}
CustomFunctionWithBLOBs copyBlob = new CustomFunctionWithBLOBs();
BeanUtils.copyBean(copyBlob, blob);
String copyId = UUID.randomUUID().toString();
String copyNameId = copyId.substring(0, 3);
String copyName = blob.getName() + "_" + copyNameId + "_COPY";
copyBlob.setId(copyId);
copyBlob.setName(copyName);
copyBlob.setCreateUser(SessionUtils.getUserId());
copyBlob.setCreateTime(System.currentTimeMillis());
copyBlob.setUpdateTime(System.currentTimeMillis());
customFunctionMapper.insert(copyBlob);
return copyBlob;
}
public CustomFunctionWithBLOBs get(String id) {
if (StringUtils.isBlank(id)) {
return new CustomFunctionWithBLOBs();
}
return customFunctionMapper.selectByPrimaryKey(id);
}
}

View File

@ -0,0 +1,156 @@
<template>
<div v-loading="result.loading">
<el-card class="table-card">
<template v-slot:header>
<ms-table-header :show-create="false" :condition.sync="condition"
:title="'自定义函数'" @search="init">
<template v-slot:button>
<ms-table-button icon="el-icon-circle-plus-outline" :content="'创建函数'" @click="handleCreate"/>
</template>
</ms-table-header>
</template>
<el-table border class="adjust-table" :data="data" style="width: 100%"
@sort-change="sort"
@filter-change="filter"
:height="screenHeight" ref="table">
<el-table-column prop="name" :label="$t('commons.name')" show-overflow-tooltip/>
<el-table-column prop="description" :label="$t('commons.description')" show-overflow-tooltip>
<template v-slot:default="scope">
<pre>{{ scope.row.description }}</pre>
</template>
</el-table-column>
<el-table-column prop="tags" :label="$t('api_test.automation.tag')">
<template v-slot:default="scope">
<ms-tag v-for="(itemName,index) in scope.row.tags" :key="index" type="success" effect="plain"
:content="itemName" style="margin-left: 0; margin-right: 2px">
</ms-tag>
<span></span>
</template>
</el-table-column>
<el-table-column prop="type" :label="'脚本语言'" show-overflow-tooltip/>
<el-table-column prop="createTime"
:label="$t('commons.create_time')"
show-overflow-tooltip>
<template v-slot:default="scope">
<span>{{ scope.row.createTime | timestampFormatDate }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('commons.operating')">
<template v-slot:default="scope">
<div>
<ms-table-operator @editClick="handleEdit(scope.row)" @deleteClick="handleDelete(scope.row)">
<template v-slot:middle>
<ms-table-operator-button :tip="$t('commons.copy')" icon="el-icon-copy-document" type="info"
@exec="handleCopy(scope.row)"/>
</template>
</ms-table-operator>
</div>
</template>
</el-table-column>
</el-table>
<ms-table-pagination :change="init" :current-page.sync="currentPage" :page-size.sync="pageSize" :total="total"/>
</el-card>
<edit-function @refresh="init" ref="editFunction"/>
<ms-delete-confirm :title="'删除自定义函数'" @delete="_handleDel" ref="deleteConfirm"/>
</div>
</template>
<script>
import MsTableHeader from "@/business/components/common/components/MsTableHeader";
import MsTableButton from "@/business/components/common/components/MsTableButton";
import MsTablePagination from "@/business/components/common/pagination/TablePagination";
import MsTag from "@/business/components/common/components/MsTag";
import MsTableOperator from "@/business/components/common/components/MsTableOperator";
import MsTableOperatorButton from "@/business/components/common/components/MsTableOperatorButton";
import EditFunction from "@/business/components/settings/project/function/EditFunction";
import {getCurrentProjectID} from "@/common/js/utils";
import MsDeleteConfirm from "@/business/components/common/components/MsDeleteConfirm";
export default {
name: "CustomFunction",
components: {
EditFunction,
MsTableHeader,
MsTableButton,
MsTablePagination,
MsTag,
MsTableOperator,
MsTableOperatorButton,
MsDeleteConfirm
},
data() {
return {
condition: {},
result: {},
data: [],
currentPage: 1,
pageSize: 10,
total: 0,
screenHeight: 'calc(100vh - 195px)',
}
},
activated() {
this.init();
},
created() {
this.init();
},
methods: {
init() {
this.condition.projectId = getCurrentProjectID();
this.result = this.$post("/custom/func/list/" + this.currentPage + "/" + this.pageSize, this.condition, res => {
let tableData = res.data;
const {itemCount, listObject} = tableData;
this.total = itemCount;
this.data = listObject;
this.data.forEach(item => {
if (item.tags && item.tags.length > 0) {
item.tags = JSON.parse(item.tags);
}
if (item.params && item.params.length > 0) {
item.params = JSON.parse(item.params);
}
})
});
},
handleCreate() {
this.$refs.editFunction.open({});
},
sort() {
},
filter() {
},
handleEdit(row) {
this.$refs.editFunction.open(row);
},
handleDelete(row) {
this.$refs.deleteConfirm.open(row);
},
_handleDel(row) {
this.$get("/custom/func/delete/" + row.id, () => {
this.init();
this.$success(this.$t('commons.delete_success'));
})
},
handleCopy(row) {
this.$get("/custom/func/copy/" + row.id, () => {
this.init();
this.$success(this.$t('commons.copy_success'));
})
}
}
}
</script>
<style scoped>
pre {
margin: 0 0;
font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", Arial, sans-serif;
}
</style>

View File

@ -0,0 +1,285 @@
<template>
<el-dialog :close-on-click-modal="false" :title="dialogTitle" :visible.sync="visible" :destroy-on-close="true"
@close="close" width="65%" top="5vh" v-loading="result.loading">
<div style="height: 60vh; overflow-y: auto; overflow-x: hidden">
<el-form :model="form" label-position="right" label-width="80px" size="small" :rules="rules" v-if="isFormAlive">
<el-row type="flex" :gutter="20">
<el-col>
<el-form-item :label="$t('commons.name')" prop="name">
<el-input size="small" v-model="form.name" :maxlength="200" show-word-limit/>
</el-form-item>
</el-col>
<el-col style="margin-right: 10px;">
<el-form-item :label="$t('api_test.automation.tag')" prop="tags">
<ms-input-tag :currentScenario="form" ref="tag"/>
</el-form-item>
</el-col>
</el-row>
<el-row style="margin-right: 10px;">
<el-col>
<el-form-item :label="$t('commons.description')" prop="description">
<el-input class="ms-http-textarea"
v-model="form.description"
type="textarea"
:show-word-limit="true"
:maxlength="500"
:autosize="{ minRows: 2, maxRows: 10}"
:rows="3" size="small"/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-form-item :label="'参数列表'" prop="">
<function-params :items="form.params"/>
</el-form-item>
</el-row>
<el-row type="flex" :gutter="10" style="margin-right: 10px;">
<el-col :span="20">
<el-form-item>
<ms-code-edit
v-if="isCodeEditAlive"
:mode="codeEditModeMap[form.type]"
height="330px"
:data.sync="form.script"
theme="eclipse"
:modes="modes"
ref="codeEdit"/>
</el-form-item>
</el-col>
<el-col :span="4" class="script-index">
<ms-dropdown :default-command="form.type" :commands="languages" @command="languageChange"/>
<div class="template-title">{{ $t('api_test.request.processor.code_template') }}</div>
<div v-for="(template, index) in codeTemplates" :key="index" class="code-template">
<el-link :disabled="template.disabled" @click="addTemplate(template)">{{ template.title }}</el-link>
</div>
<el-link href="https://jmeter.apache.org/usermanual/component_reference.html#BeanShell_PostProcessor"
target="componentReferenceDoc" style="margin-top: 10px"
type="primary">{{ $t('commons.reference_documentation') }}
</el-link>
</el-col>
</el-row>
</el-form>
</div>
<template v-slot:footer>
<el-button @click="close" size="medium">{{ $t('commons.cancel') }}</el-button>
<el-button type="primary" @click="submit" size="medium" style="margin-left: 10px;">
{{ $t('commons.confirm') }}
</el-button>
</template>
</el-dialog>
</template>
<script>
import MsInputTag from "@/business/components/api/automation/scenario/MsInputTag";
import FunctionParams from "@/business/components/settings/project/function/FunctionParams";
import MsCodeEdit from "@/business/components/common/components/MsCodeEdit";
import MsDropdown from "@/business/components/common/components/MsDropdown";
export default {
name: "EditFunction",
components: {
MsCodeEdit,
FunctionParams,
MsInputTag,
MsDropdown
},
props: {
},
data() {
return {
visible: false,
result: {},
dialogCreateTitle: "创建函数",
dialogUpdateTitle: "更新函数",
dialogTitle: "",
isCodeEditAlive: true,
isFormAlive: true,
form: {
params: [],
script: "",
type: "beanshell",
},
rules: {
name: [
{required: true, message: this.$t('commons.input_name'), trigger: 'blur'},
{max: 300, message: this.$t('commons.input_limit', [0, 300]), trigger: 'blur'}
]
},
modes: ['java','python'],
languages: [
'beanshell', "python", "groovy", "nashornScript", "rhinoScript"
],
codeEditModeMap: {
beanshell: 'java',
python: 'python',
groovy: 'java',
nashornScript: 'javascript',
rhinoScript: 'javascript',
},
codeTemplates: [
{
title: this.$t('api_test.request.processor.code_template_get_variable'),
value: 'vars.get("variable_name")',
},
{
title: this.$t('api_test.request.processor.code_template_set_variable'),
value: 'vars.put("variable_name", "variable_value")',
},
{
title: this.$t('api_test.request.processor.param_environment_set_global_variable'),
value: 'vars.put(${__metersphere_env_id}+"key","value");\n'+'vars.put("key","value")',
},
{
title: this.$t('api_test.request.processor.code_add_report_length'),
value: 'String report = ctx.getCurrentSampler().getRequestData();\n' +
'if(report!=null){\n' +
' //补足8位长度前置补0\n' +
' String reportlengthStr = String.format("%08d",report.length());\n' +
' report = reportlengthStr+report;\n' +
' ctx.getCurrentSampler().setRequestData(report);\n' +
'}',
},
{
title: this.$t('api_test.request.processor.code_template_get_response_header'),
value: 'prev.getResponseHeaders()',
disabled: this.isPreProcessor
},
{
title: this.$t('api_test.request.processor.code_template_get_response_code'),
value: 'prev.getResponseCode()',
disabled: this.isPreProcessor
},
{
title: this.$t('api_test.request.processor.code_template_get_response_result'),
value: 'prev.getResponseDataAsString()',
disabled: this.isPreProcessor
},
{
title: this.$t('api_test.request.processor.code_hide_report_length'),
value: '//Get response data\n' +
'String returnData = prev.getResponseDataAsString();\n' +
'if(returnData!=null&&returnData.length()>8){\n' +
'//remove 8 report length \n' +
' String subStringData = returnData.substring(8,returnData.length());\n' +
' if(subStringData.startsWith("<")){\n' +
' returnData = subStringData;\n' +
' prev.setResponseData(returnData);\n' +
' }\n' +
'}',
disabled: this.isPreProcessor
}
],
}
},
methods: {
open(data) {
this.visible = true;
this.form.type = "beanshell";
if (data && data.id) {
//
this.initFunc(data.id);
this.dialogTitle = this.dialogUpdateTitle;
} else {
this.form.tags = [];
this.form.params = [{}];
this.dialogTitle = this.dialogCreateTitle;
}
},
initFunc(id) {
this.result = this.$get("/custom/func/get/" + id, res => {
this.form = res.data;
if (!this.form.tags) {
this.form.tags = [];
} else {
this.form.tags = JSON.parse(this.form.tags);
}
if (!this.form.params) {
this.form.params = [];
} else {
this.form.params = JSON.parse(this.form.params);
}
this.reload();
})
},
close() {
this.form = {};
this.visible = false;
},
languageChange(language) {
this.form.type = language;
this.$emit("languageChange");
},
addTemplate(template) {
if (!this.form.script) {
this.form.script = "";
}
this.form.script += template.value;
if (this.form.type === 'beanshell') {
this.form.script += ';';
}
this.reloadCodeEdit();
},
reload() {
this.isFormAlive = false;
this.$nextTick(() => {
this.isFormAlive = true;
})
},
reloadCodeEdit() {
this.isCodeEditAlive = false;
this.$nextTick(() => (this.isCodeEditAlive = true));
},
submit() {
let param = Object.assign({}, this.form);
param.params = JSON.stringify(this.form.params);
param.tags = JSON.stringify(this.form.tags);
if (this.form.id) {
this.update(param);
} else {
this.create(param);
}
},
create(obj) {
this.result = this.$post("/custom/func/save", obj, res => {
this.$emit("refresh");
if (res.data) {
this.form.id = res.data.id;
}
this.$success(this.$t('commons.save_success'));
})
},
update(obj) {
this.result = this.$post("/custom/func/update", obj, () => {
this.$emit("refresh");
this.$success(this.$t('commons.modify_success'));
})
}
}
}
</script>
<style scoped>
.template-title {
margin-bottom: 5px;
font-weight: bold;
font-size: 15px;
}
/* 滚动条样式 */
::-webkit-scrollbar{
width: 6px;
height: 6px;
position: fixed;
}
::-webkit-scrollbar-thumb{
border-radius: 1em;
background-color: rgba(50,50,50,.3);
position: fixed;
}
::-webkit-scrollbar-track{
border-radius: 1em;
background-color: transparent;
position: fixed;
}
</style>

View File

@ -0,0 +1,92 @@
<template>
<div>
<div class="kv-row" v-for="(item, index) in items" :key="index">
<el-row type="flex" :gutter="20" style="margin-top: 7px;">
<el-col :span="7">
<!-- todo 过滤中文 -->
<el-input :disabled="isReadOnly" v-model="item.name" size="small" maxlength="200"
@change="change"
:placeholder="'参数名称'" show-word-limit/>
</el-col>
<el-col :span="7">
<el-input :disabled="isReadOnly" v-model="item.value" size="small" @change="change"
:placeholder="'参数值'" show-word-limit/>
</el-col>
<el-col :span="7">
<el-input :disabled="isReadOnly" v-model="item.remark" size="small" @change="change"
:placeholder="'备注'" show-word-limit/>
</el-col>
<el-col class="kv-delete" :span="3">
<el-button size="mini" class="el-icon-delete-solid" circle @click="remove(index)"
:disabled="isDisable(index) || isReadOnly"/>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
export default {
name: "FunctionParams",
props: {
items: {
type: Array,
default() {
return [];
}
},
isReadOnly: {
type: Boolean,
default: false
},
},
data() {
return {
}
},
methods: {
remove: function (index) {
//
this.items.splice(index, 1);
this.$emit('change', this.items);
},
change: function () {
let isNeedCreate = true;
let removeIndex = -1;
this.items.forEach((item, index) => {
if (!item.name && !item.value) {
//
if (index !== this.items.length - 1) {
removeIndex = index;
}
//
isNeedCreate = false;
}
});
if (isNeedCreate) {
this.items.push({});
}
this.$emit('change', this.items);
// TODO key
},
isDisable: function (index) {
return this.items.length - 1 === index;
},
},
created() {
if (this.items.length === 0 || this.items[this.items.length - 1].name) {
this.items.push({});
}
}
}
</script>
<style scoped>
</style>

View File

@ -158,5 +158,10 @@ export default {
component: () => import('@/business/components/settings/plugin/PluginConfig'),
meta: {system: true, title: 'plugin.title', permissions: ['SYSTEM_USER:READ']}
},
{
path: 'function',
component: () => import('@/business/components/settings/project/function/CustomFunction'),
meta: {project: true, title: '自定义函数'}
}
]
};