feat: 脑图保存临时节点
This commit is contained in:
parent
a61aaf52b6
commit
f6ddef4544
|
@ -0,0 +1,19 @@
|
|||
package io.metersphere.base.domain;
|
||||
|
||||
import java.io.Serializable;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class MinderExtraNode implements Serializable {
|
||||
private String id;
|
||||
|
||||
private String parentId;
|
||||
|
||||
private String groupId;
|
||||
|
||||
private String type;
|
||||
|
||||
private String nodeData;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
|
@ -0,0 +1,480 @@
|
|||
package io.metersphere.base.domain;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class MinderExtraNodeExample {
|
||||
protected String orderByClause;
|
||||
|
||||
protected boolean distinct;
|
||||
|
||||
protected List<Criteria> oredCriteria;
|
||||
|
||||
public MinderExtraNodeExample() {
|
||||
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 andParentIdIsNull() {
|
||||
addCriterion("parent_id is null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdIsNotNull() {
|
||||
addCriterion("parent_id is not null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdEqualTo(String value) {
|
||||
addCriterion("parent_id =", value, "parentId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdNotEqualTo(String value) {
|
||||
addCriterion("parent_id <>", value, "parentId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdGreaterThan(String value) {
|
||||
addCriterion("parent_id >", value, "parentId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdGreaterThanOrEqualTo(String value) {
|
||||
addCriterion("parent_id >=", value, "parentId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdLessThan(String value) {
|
||||
addCriterion("parent_id <", value, "parentId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdLessThanOrEqualTo(String value) {
|
||||
addCriterion("parent_id <=", value, "parentId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdLike(String value) {
|
||||
addCriterion("parent_id like", value, "parentId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdNotLike(String value) {
|
||||
addCriterion("parent_id not like", value, "parentId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdIn(List<String> values) {
|
||||
addCriterion("parent_id in", values, "parentId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdNotIn(List<String> values) {
|
||||
addCriterion("parent_id not in", values, "parentId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdBetween(String value1, String value2) {
|
||||
addCriterion("parent_id between", value1, value2, "parentId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andParentIdNotBetween(String value1, String value2) {
|
||||
addCriterion("parent_id not between", value1, value2, "parentId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdIsNull() {
|
||||
addCriterion("group_id is null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdIsNotNull() {
|
||||
addCriterion("group_id is not null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdEqualTo(String value) {
|
||||
addCriterion("group_id =", value, "groupId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdNotEqualTo(String value) {
|
||||
addCriterion("group_id <>", value, "groupId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdGreaterThan(String value) {
|
||||
addCriterion("group_id >", value, "groupId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdGreaterThanOrEqualTo(String value) {
|
||||
addCriterion("group_id >=", value, "groupId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdLessThan(String value) {
|
||||
addCriterion("group_id <", value, "groupId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdLessThanOrEqualTo(String value) {
|
||||
addCriterion("group_id <=", value, "groupId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdLike(String value) {
|
||||
addCriterion("group_id like", value, "groupId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdNotLike(String value) {
|
||||
addCriterion("group_id not like", value, "groupId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdIn(List<String> values) {
|
||||
addCriterion("group_id in", values, "groupId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdNotIn(List<String> values) {
|
||||
addCriterion("group_id not in", values, "groupId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdBetween(String value1, String value2) {
|
||||
addCriterion("group_id between", value1, value2, "groupId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andGroupIdNotBetween(String value1, String value2) {
|
||||
addCriterion("group_id not between", value1, value2, "groupId");
|
||||
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 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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package io.metersphere.base.mapper;
|
||||
|
||||
import io.metersphere.base.domain.MinderExtraNode;
|
||||
import io.metersphere.base.domain.MinderExtraNodeExample;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
public interface MinderExtraNodeMapper {
|
||||
long countByExample(MinderExtraNodeExample example);
|
||||
|
||||
int deleteByExample(MinderExtraNodeExample example);
|
||||
|
||||
int deleteByPrimaryKey(String id);
|
||||
|
||||
int insert(MinderExtraNode record);
|
||||
|
||||
int insertSelective(MinderExtraNode record);
|
||||
|
||||
List<MinderExtraNode> selectByExampleWithBLOBs(MinderExtraNodeExample example);
|
||||
|
||||
List<MinderExtraNode> selectByExample(MinderExtraNodeExample example);
|
||||
|
||||
MinderExtraNode selectByPrimaryKey(String id);
|
||||
|
||||
int updateByExampleSelective(@Param("record") MinderExtraNode record, @Param("example") MinderExtraNodeExample example);
|
||||
|
||||
int updateByExampleWithBLOBs(@Param("record") MinderExtraNode record, @Param("example") MinderExtraNodeExample example);
|
||||
|
||||
int updateByExample(@Param("record") MinderExtraNode record, @Param("example") MinderExtraNodeExample example);
|
||||
|
||||
int updateByPrimaryKeySelective(MinderExtraNode record);
|
||||
|
||||
int updateByPrimaryKeyWithBLOBs(MinderExtraNode record);
|
||||
|
||||
int updateByPrimaryKey(MinderExtraNode record);
|
||||
}
|
|
@ -0,0 +1,251 @@
|
|||
<?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.MinderExtraNodeMapper">
|
||||
<resultMap id="BaseResultMap" type="io.metersphere.base.domain.MinderExtraNode">
|
||||
<id column="id" jdbcType="VARCHAR" property="id" />
|
||||
<result column="parent_id" jdbcType="VARCHAR" property="parentId" />
|
||||
<result column="group_id" jdbcType="VARCHAR" property="groupId" />
|
||||
<result column="type" jdbcType="VARCHAR" property="type" />
|
||||
</resultMap>
|
||||
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="io.metersphere.base.domain.MinderExtraNode">
|
||||
<result column="node_data" jdbcType="LONGVARCHAR" property="nodeData" />
|
||||
</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, parent_id, group_id, `type`
|
||||
</sql>
|
||||
<sql id="Blob_Column_List">
|
||||
node_data
|
||||
</sql>
|
||||
<select id="selectByExampleWithBLOBs" parameterType="io.metersphere.base.domain.MinderExtraNodeExample" resultMap="ResultMapWithBLOBs">
|
||||
select
|
||||
<if test="distinct">
|
||||
distinct
|
||||
</if>
|
||||
<include refid="Base_Column_List" />
|
||||
,
|
||||
<include refid="Blob_Column_List" />
|
||||
from minder_extra_node
|
||||
<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.MinderExtraNodeExample" resultMap="BaseResultMap">
|
||||
select
|
||||
<if test="distinct">
|
||||
distinct
|
||||
</if>
|
||||
<include refid="Base_Column_List" />
|
||||
from minder_extra_node
|
||||
<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 minder_extra_node
|
||||
where id = #{id,jdbcType=VARCHAR}
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
|
||||
delete from minder_extra_node
|
||||
where id = #{id,jdbcType=VARCHAR}
|
||||
</delete>
|
||||
<delete id="deleteByExample" parameterType="io.metersphere.base.domain.MinderExtraNodeExample">
|
||||
delete from minder_extra_node
|
||||
<if test="_parameter != null">
|
||||
<include refid="Example_Where_Clause" />
|
||||
</if>
|
||||
</delete>
|
||||
<insert id="insert" parameterType="io.metersphere.base.domain.MinderExtraNode">
|
||||
insert into minder_extra_node (id, parent_id, group_id,
|
||||
`type`, node_data)
|
||||
values (#{id,jdbcType=VARCHAR}, #{parentId,jdbcType=VARCHAR}, #{groupId,jdbcType=VARCHAR},
|
||||
#{type,jdbcType=VARCHAR}, #{nodeData,jdbcType=LONGVARCHAR})
|
||||
</insert>
|
||||
<insert id="insertSelective" parameterType="io.metersphere.base.domain.MinderExtraNode">
|
||||
insert into minder_extra_node
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">
|
||||
id,
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
parent_id,
|
||||
</if>
|
||||
<if test="groupId != null">
|
||||
group_id,
|
||||
</if>
|
||||
<if test="type != null">
|
||||
`type`,
|
||||
</if>
|
||||
<if test="nodeData != null">
|
||||
node_data,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null">
|
||||
#{id,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="parentId != null">
|
||||
#{parentId,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="groupId != null">
|
||||
#{groupId,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="type != null">
|
||||
#{type,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="nodeData != null">
|
||||
#{nodeData,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<select id="countByExample" parameterType="io.metersphere.base.domain.MinderExtraNodeExample" resultType="java.lang.Long">
|
||||
select count(*) from minder_extra_node
|
||||
<if test="_parameter != null">
|
||||
<include refid="Example_Where_Clause" />
|
||||
</if>
|
||||
</select>
|
||||
<update id="updateByExampleSelective" parameterType="map">
|
||||
update minder_extra_node
|
||||
<set>
|
||||
<if test="record.id != null">
|
||||
id = #{record.id,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="record.parentId != null">
|
||||
parent_id = #{record.parentId,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="record.groupId != null">
|
||||
group_id = #{record.groupId,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="record.type != null">
|
||||
`type` = #{record.type,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="record.nodeData != null">
|
||||
node_data = #{record.nodeData,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
<if test="_parameter != null">
|
||||
<include refid="Update_By_Example_Where_Clause" />
|
||||
</if>
|
||||
</update>
|
||||
<update id="updateByExampleWithBLOBs" parameterType="map">
|
||||
update minder_extra_node
|
||||
set id = #{record.id,jdbcType=VARCHAR},
|
||||
parent_id = #{record.parentId,jdbcType=VARCHAR},
|
||||
group_id = #{record.groupId,jdbcType=VARCHAR},
|
||||
`type` = #{record.type,jdbcType=VARCHAR},
|
||||
node_data = #{record.nodeData,jdbcType=LONGVARCHAR}
|
||||
<if test="_parameter != null">
|
||||
<include refid="Update_By_Example_Where_Clause" />
|
||||
</if>
|
||||
</update>
|
||||
<update id="updateByExample" parameterType="map">
|
||||
update minder_extra_node
|
||||
set id = #{record.id,jdbcType=VARCHAR},
|
||||
parent_id = #{record.parentId,jdbcType=VARCHAR},
|
||||
group_id = #{record.groupId,jdbcType=VARCHAR},
|
||||
`type` = #{record.type,jdbcType=VARCHAR}
|
||||
<if test="_parameter != null">
|
||||
<include refid="Update_By_Example_Where_Clause" />
|
||||
</if>
|
||||
</update>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="io.metersphere.base.domain.MinderExtraNode">
|
||||
update minder_extra_node
|
||||
<set>
|
||||
<if test="parentId != null">
|
||||
parent_id = #{parentId,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="groupId != null">
|
||||
group_id = #{groupId,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="type != null">
|
||||
`type` = #{type,jdbcType=VARCHAR},
|
||||
</if>
|
||||
<if test="nodeData != null">
|
||||
node_data = #{nodeData,jdbcType=LONGVARCHAR},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=VARCHAR}
|
||||
</update>
|
||||
<update id="updateByPrimaryKeyWithBLOBs" parameterType="io.metersphere.base.domain.MinderExtraNode">
|
||||
update minder_extra_node
|
||||
set parent_id = #{parentId,jdbcType=VARCHAR},
|
||||
group_id = #{groupId,jdbcType=VARCHAR},
|
||||
`type` = #{type,jdbcType=VARCHAR},
|
||||
node_data = #{nodeData,jdbcType=LONGVARCHAR}
|
||||
where id = #{id,jdbcType=VARCHAR}
|
||||
</update>
|
||||
<update id="updateByPrimaryKey" parameterType="io.metersphere.base.domain.MinderExtraNode">
|
||||
update minder_extra_node
|
||||
set parent_id = #{parentId,jdbcType=VARCHAR},
|
||||
group_id = #{groupId,jdbcType=VARCHAR},
|
||||
`type` = #{type,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=VARCHAR}
|
||||
</update>
|
||||
</mapper>
|
|
@ -0,0 +1,31 @@
|
|||
package io.metersphere.controller;
|
||||
|
||||
import io.metersphere.base.domain.MinderExtraNode;
|
||||
import io.metersphere.commons.constants.PermissionConstants;
|
||||
import io.metersphere.service.MinderExtraNodeService;
|
||||
import io.metersphere.track.request.MinderExtraNodeEditRequest;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping(value = "/minder/extra/node")
|
||||
public class MinderExtraNodeController {
|
||||
|
||||
@Resource
|
||||
MinderExtraNodeService minderExtraNodeService;
|
||||
|
||||
@PostMapping("/batch/edit")
|
||||
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT)
|
||||
public void minderEdit(@RequestBody MinderExtraNodeEditRequest request) {
|
||||
minderExtraNodeService.batchEdit(request);
|
||||
}
|
||||
|
||||
@GetMapping("/list/{groupId}/{parentId}")
|
||||
public List<MinderExtraNode> list(@PathVariable String groupId, @PathVariable String parentId) {
|
||||
return minderExtraNodeService.selectByParentId(parentId, groupId);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
package io.metersphere.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.metersphere.base.domain.MinderExtraNode;
|
||||
import io.metersphere.base.domain.MinderExtraNodeExample;
|
||||
import io.metersphere.base.mapper.MinderExtraNodeMapper;
|
||||
import io.metersphere.track.request.MinderExtraNodeEditRequest;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
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.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public class MinderExtraNodeService {
|
||||
|
||||
@Resource
|
||||
MinderExtraNodeMapper minderExtraNodeMapper;
|
||||
|
||||
public void batchEdit(MinderExtraNodeEditRequest request) {
|
||||
Map<String, List<String>> data = request.getData();
|
||||
if (data != null) {
|
||||
data.forEach((parentId, nodes) -> {
|
||||
nodes.forEach(node -> {
|
||||
MinderExtraNode minderExtraNode = new MinderExtraNode();
|
||||
minderExtraNode.setNodeData(node);
|
||||
minderExtraNode.setParentId(parentId);
|
||||
JSONObject nodeObj = JSONObject.parseObject(node);
|
||||
String id = nodeObj.getString("id");
|
||||
if (StringUtils.isBlank(id) || id.length() < 20) {
|
||||
minderExtraNode.setId(UUID.randomUUID().toString());
|
||||
minderExtraNode.setGroupId(request.getGroupId());
|
||||
minderExtraNode.setType(request.getType());
|
||||
nodeObj.put("id", minderExtraNode.getId());
|
||||
minderExtraNode.setNodeData(nodeObj.toJSONString());
|
||||
minderExtraNodeMapper.insert(minderExtraNode);
|
||||
} else {
|
||||
minderExtraNode.setId(id);
|
||||
minderExtraNodeMapper.updateByPrimaryKeySelective(minderExtraNode);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
List<String> ids = request.getIds();
|
||||
if (CollectionUtils.isNotEmpty(ids)) {
|
||||
MinderExtraNodeExample example = new MinderExtraNodeExample();
|
||||
example.createCriteria().andIdIn(ids);
|
||||
minderExtraNodeMapper.deleteByExample(example);
|
||||
}
|
||||
}
|
||||
|
||||
public List<MinderExtraNode> selectByParentId(String parentId, String groupId) {
|
||||
MinderExtraNodeExample example = new MinderExtraNodeExample();
|
||||
example.createCriteria().andParentIdEqualTo(parentId).andGroupIdEqualTo(groupId);
|
||||
return minderExtraNodeMapper.selectByExampleWithBLOBs(example);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package io.metersphere.track.request;
|
||||
|
||||
import io.metersphere.base.domain.MinderExtraNode;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class MinderExtraNodeEditRequest extends MinderExtraNode {
|
||||
private String projectId;
|
||||
// 删除的id
|
||||
private List<String> ids;
|
||||
// key 为父节点id
|
||||
private Map<String, List<String>> data;
|
||||
}
|
|
@ -45,7 +45,6 @@ ALTER TABLE test_plan_api_case ADD `order` bigint(20) NOT NULL COMMENT '自定
|
|||
ALTER TABLE test_plan_api_scenario ADD `order` bigint(20) NOT NULL COMMENT '自定义排序,间隔5000';
|
||||
ALTER TABLE test_plan_load_case ADD `order` bigint(20) NOT NULL COMMENT '自定义排序,间隔5000';
|
||||
|
||||
|
||||
create table if not exists custom_function
|
||||
(
|
||||
id varchar(50) not null
|
||||
|
@ -67,3 +66,13 @@ create table if not exists custom_function
|
|||
COLLATE utf8mb4_general_ci;
|
||||
|
||||
|
||||
CREATE table if not exists `minder_config` (
|
||||
`id` varchar(50) NOT NULL,
|
||||
`resource_id` varchar(50) NOT NULL COMMENT '所属的项目或测试计划',
|
||||
`type` varchar(30) NOT NULL COMMENT '类型,如:用例编辑脑图',
|
||||
`extra_node` longtext COMMENT '存储脑图节点额外信息',
|
||||
PRIMARY KEY (`id`)
|
||||
index(id)
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4
|
||||
COLLATE utf8mb4_general_ci;
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
<template>
|
||||
<ms-edit-dialog
|
||||
:visible.sync="visible"
|
||||
width="30%"
|
||||
:title="$t('请保存')"
|
||||
width="20%"
|
||||
:title="title"
|
||||
:with-footer="false"
|
||||
:close-on-click-modal="false">
|
||||
{{tip}}
|
||||
<template v-slot:footer>
|
||||
<el-button type="primary" @click="save" @keydown.enter.native.prevent>{{$t('保存')}}</el-button>
|
||||
<el-button @click="cancel">{{$t('不保存')}}</el-button>
|
||||
|
@ -23,6 +24,7 @@ export default {
|
|||
data: {}
|
||||
}
|
||||
},
|
||||
props: ['title','tip'],
|
||||
methods: {
|
||||
open(item) {
|
||||
this.visible = true;
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
@save="save"
|
||||
/>
|
||||
<is-change-confirm
|
||||
:title="'请保存脑图'"
|
||||
:tip="'脑图未保存,确认保存脑图吗?'"
|
||||
@confirm="changeConfirm"
|
||||
ref="isChangeConfirm"/>
|
||||
</div>
|
||||
|
@ -66,7 +68,8 @@ export default {
|
|||
tagEditCheck: Function,
|
||||
priorityDisableCheck: Function,
|
||||
disabled: Boolean,
|
||||
ignoreNum: Boolean
|
||||
ignoreNum: Boolean,
|
||||
showModuleTag: Boolean
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
@ -77,6 +80,7 @@ export default {
|
|||
disable: true,
|
||||
id: "root",
|
||||
type: 'node',
|
||||
resource: this.showModuleTag ? ['模块'] : [],
|
||||
path: "",
|
||||
tagEnable: this.tagEnable
|
||||
},
|
||||
|
@ -148,6 +152,7 @@ export default {
|
|||
id: item.id,
|
||||
disable: true,
|
||||
type: 'node',
|
||||
resource: this.showModuleTag ? ['模块'] : [],
|
||||
caseNum: item.caseNum,
|
||||
path: root.data.path + "/" + item.name,
|
||||
expandState:"collapse"
|
||||
|
@ -203,7 +208,8 @@ export default {
|
|||
id: nodeData.id,
|
||||
disable: true,
|
||||
tagEnable: this.tagEnable,
|
||||
type: 'node'
|
||||
type: 'node',
|
||||
resource: this.showModuleTag ? ['模块'] : [],
|
||||
},
|
||||
children: []
|
||||
},
|
||||
|
|
|
@ -112,6 +112,8 @@
|
|||
</el-tabs>
|
||||
|
||||
<is-change-confirm
|
||||
:title="'请保存脑图'"
|
||||
:tip="'脑图未保存,确认保存脑图吗?'"
|
||||
@confirm="changeConfirm"
|
||||
ref="isChangeConfirm"/>
|
||||
</ms-main-container>
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
minder-key="testCase"
|
||||
:select-node="selectNode"
|
||||
:distinct-tags="tags"
|
||||
:show-module-tag="true"
|
||||
:tag-edit-check="tagEditCheck()"
|
||||
@afterMount="handleAfterMount"
|
||||
:priority-disable-check="priorityDisableCheck()"
|
||||
|
@ -27,7 +28,7 @@ import {
|
|||
tagEditCheck,
|
||||
} from "@/business/components/track/common/minder/minderUtils";
|
||||
import {getNodePath, hasPermission} from "@/common/js/utils";
|
||||
import {getTestCasesForMinder} from "@/network/testCase";
|
||||
import {getTestCasesForMinder, getMinderExtraNode} from "@/network/testCase";
|
||||
export default {
|
||||
name: "TestCaseMinder",
|
||||
components: {MsModuleMinder},
|
||||
|
@ -35,7 +36,7 @@ name: "TestCaseMinder",
|
|||
return{
|
||||
testCase: [],
|
||||
dataMap: new Map(),
|
||||
tags: [this.$t('api_test.definition.request.case'), this.$t('test_track.case.prerequisite'), this.$t('commons.remark')],
|
||||
tags: [this.$t('api_test.definition.request.case'), this.$t('test_track.case.prerequisite'), this.$t('commons.remark'), '模块'],
|
||||
result: {loading: false},
|
||||
needRefresh: false,
|
||||
}
|
||||
|
@ -63,21 +64,12 @@ name: "TestCaseMinder",
|
|||
disabled() {
|
||||
return !hasPermission('PROJECT_TRACK_CASE:READ+EDIT');
|
||||
},
|
||||
isChanged() {
|
||||
return this.$store.state.isTestCaseMinderChanged;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
selectNode() {
|
||||
if (this.$refs.minder) {
|
||||
this.$refs.minder.handleNodeSelect(this.selectNode);
|
||||
}
|
||||
},
|
||||
'$route'(to) {
|
||||
if (to.name !== 'testCaseCreate' || to.name !== 'testCase' || to.name !== 'testCaseEdit') {
|
||||
this.$warning('请保存用例');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
@ -92,7 +84,8 @@ name: "TestCaseMinder",
|
|||
methods: {
|
||||
handleAfterMount() {
|
||||
listenNodeSelected(() => {
|
||||
loadSelectNodes(this.getParam(), getTestCasesForMinder);
|
||||
// 展开模块下的用例
|
||||
loadSelectNodes(this.getParam(), getTestCasesForMinder, null, getMinderExtraNode);
|
||||
});
|
||||
|
||||
listenDblclick(() => {
|
||||
|
@ -137,32 +130,64 @@ name: "TestCaseMinder",
|
|||
save(data) {
|
||||
let saveCases = [];
|
||||
let deleteCases = [];
|
||||
this.buildSaveCase(data.root, saveCases, deleteCases, undefined);
|
||||
let saveExtraNode = {};
|
||||
this.buildSaveCase(data.root, saveCases, deleteCases, saveExtraNode, undefined);
|
||||
|
||||
let param = {
|
||||
projectId: this.projectId,
|
||||
data: saveCases,
|
||||
ids: deleteCases.map(item => item.id)
|
||||
}
|
||||
|
||||
let saveCase = new Promise((resolve) => {
|
||||
this.result = this.$post('/test/case/minder/edit', param, () => {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
let extraNodeParam = {
|
||||
groupId: this.projectId,
|
||||
type: "TEST_CASE",
|
||||
data: saveExtraNode,
|
||||
ids: deleteCases.map(item => item.id)
|
||||
}
|
||||
|
||||
let saveExtraNodePromise = new Promise((resolve) => {
|
||||
this.result = this.$post('/minder/extra/node/batch/edit', extraNodeParam, () => {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
Promise.all([saveCase, saveExtraNodePromise])
|
||||
.then(() => {
|
||||
this.$success(this.$t('commons.save_success'));
|
||||
handleAfterSave(window.minder.getRoot(), this.getParam());
|
||||
this.setIsChange(false);
|
||||
});
|
||||
},
|
||||
buildSaveCase(root, saveCases, deleteCases, parent) {
|
||||
buildSaveCase(root, saveCases, deleteCases, saveExtraNode, parent) {
|
||||
let data = root.data;
|
||||
if (data.resource && data.resource.indexOf(this.$t('api_test.definition.request.case')) > -1) {
|
||||
this._buildSaveCase(root, saveCases, parent);
|
||||
} else {
|
||||
let deleteChild = data.deleteChild;
|
||||
if (deleteChild && deleteChild.length > 0) {
|
||||
if (deleteChild && deleteChild.length > 0
|
||||
&& data.type === 'node') {
|
||||
deleteCases.push(...deleteChild);
|
||||
}
|
||||
if (data.type !== 'node' && data.type !== 'tmp') {
|
||||
let tip = '用例(' + data.text + ')未添加用例标签!';
|
||||
this.$error(tip)
|
||||
throw new Error(tip);
|
||||
|
||||
if (data.type !== 'node' && data.type !== 'tmp'
|
||||
&& parent && parent.type === 'node' && data.changed === true) {
|
||||
// 保存额外信息,只保存模块下的一级子节点
|
||||
let nodes = saveExtraNode[parent.id];
|
||||
if (!nodes) {
|
||||
nodes = [];
|
||||
}
|
||||
nodes.push(JSON.stringify(this.buildExtraNode(root)));
|
||||
saveExtraNode[parent.id] = nodes;
|
||||
}
|
||||
|
||||
if (data.id === null) {
|
||||
let tip = '脑图编辑无法创建模块:' + data.text + '';
|
||||
this.$error(tip)
|
||||
|
@ -170,7 +195,7 @@ name: "TestCaseMinder",
|
|||
}
|
||||
if (root.children) {
|
||||
root.children.forEach((childNode) => {
|
||||
this.buildSaveCase(childNode, saveCases, deleteCases, root.data);
|
||||
this.buildSaveCase(childNode, saveCases, deleteCases, saveExtraNode, root.data);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -239,6 +264,21 @@ name: "TestCaseMinder",
|
|||
throw new Error(tip);
|
||||
}
|
||||
},
|
||||
buildExtraNode(node) {
|
||||
let data = node.data;
|
||||
let nodeData = {
|
||||
text: data.text,
|
||||
id: data.id,
|
||||
resource: data.resource,
|
||||
};
|
||||
if (node.children) {
|
||||
nodeData.children = [];
|
||||
node.children.forEach(item => {
|
||||
nodeData.children.push(this.buildExtraNode(item));
|
||||
});
|
||||
}
|
||||
return nodeData;
|
||||
},
|
||||
tagEditCheck() {
|
||||
return tagEditCheck;
|
||||
},
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
import i18n from "@/i18n/i18n";
|
||||
import {getTestCasesForMinder} from "@/network/testCase";
|
||||
import {getMinderExtraNode} from "@/network/testCase";
|
||||
import {getCurrentProjectID} from "../../../../../common/js/utils";
|
||||
|
||||
export function listenNodeSelected(callback) {
|
||||
let minder = window.minder;
|
||||
|
@ -42,7 +44,7 @@ export function listenBeforeExecCommand(callback) {
|
|||
* @param projectId
|
||||
* @param result
|
||||
*/
|
||||
export function loadNode(node, param, getCaseFuc, setParamCallback) {
|
||||
export function loadNode(node, param, getCaseFuc, setParamCallback, getExtraNodeFuc) {
|
||||
let data = node.data;
|
||||
if (!data.loaded && data.type === 'node') {
|
||||
if (param.result) {
|
||||
|
@ -56,6 +58,15 @@ export function loadNode(node, param, getCaseFuc, setParamCallback) {
|
|||
if (getCaseFuc) {
|
||||
getCaseFuc(request, (testCases) => {
|
||||
appendCaseNodes(node, testCases, param, setParamCallback);
|
||||
|
||||
if (getExtraNodeFuc) {
|
||||
param.result.loading = true;
|
||||
getExtraNodeFuc(getCurrentProjectID(), data.id, (nodes) => {
|
||||
appendExtraNodes(node, nodes);
|
||||
param.result.loading = false;
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -67,11 +78,11 @@ export function loadNode(node, param, getCaseFuc, setParamCallback) {
|
|||
* @param projectId
|
||||
* @param result
|
||||
*/
|
||||
export function loadSelectNodes(param, getCaseFuc, setParamCallback) {
|
||||
export function loadSelectNodes(param, getCaseFuc, setParamCallback, getExtraNodeFuc) {
|
||||
let minder = window.minder;
|
||||
let selectNodes = minder.getSelectedNodes();
|
||||
selectNodes.forEach(node => {
|
||||
loadNode(node, param, getCaseFuc, setParamCallback);
|
||||
loadNode(node, param, getCaseFuc, setParamCallback, getExtraNodeFuc);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -244,6 +255,29 @@ export function appendCaseNodes(parent, testCases, param, setParamCallback) {
|
|||
}
|
||||
}
|
||||
|
||||
export function appendExtraNodes(parent, nodes) {
|
||||
if (nodes) {
|
||||
if (!parent.children) {
|
||||
parent.children = [];
|
||||
}
|
||||
nodes.forEach(i => {
|
||||
if (i.nodeData) {
|
||||
let dataObj = JSON.parse(i.nodeData);
|
||||
_appendExtraNodes(parent, dataObj);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function _appendExtraNodes(parent, data) {
|
||||
let node = appendChildNode(parent, data, true);
|
||||
if (data.children && data.children.length > 0) {
|
||||
data.children.forEach(child => {
|
||||
_appendExtraNodes(node, child);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 去掉已有节点
|
||||
* @param parent
|
||||
|
@ -325,8 +359,12 @@ export function tagEditCheck(resourceName) {
|
|||
let minder = window.minder;
|
||||
let selectNodes = minder.getSelectedNodes();
|
||||
if (selectNodes && selectNodes.length > 0) {
|
||||
let resource = selectNodes[0].getParent().data.resource;
|
||||
if (resource && resource.indexOf('用例') > -1 && resourceName === '用例') {
|
||||
let lastNodeResource = selectNodes[0].getParent().data.resource;
|
||||
if ( resourceName === '模块') {
|
||||
// 模块不能编辑
|
||||
return false;
|
||||
}
|
||||
if (lastNodeResource && lastNodeResource.indexOf('用例') > -1 && resourceName === '用例') {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -353,7 +391,7 @@ export function handleAfterSave(pNode, param) {
|
|||
let item = children[i];
|
||||
if (item.data.id === null || (item.data.id && item.data.id.length < 20)) {
|
||||
pNode.data.loaded = false;
|
||||
loadNode(pNode, param, getTestCasesForMinder);
|
||||
loadNode(pNode, param, getTestCasesForMinder, null, getMinderExtraNode);
|
||||
return;
|
||||
}
|
||||
if (item.data.changed) {
|
||||
|
|
|
@ -2,6 +2,7 @@ import {post, get} from "@/common/js/ajax";
|
|||
import {success} from "@/common/js/message";
|
||||
import i18n from "@/i18n/i18n";
|
||||
import {basePost} from "@/network/base-network";
|
||||
import {baseGet} from "./base-network";
|
||||
|
||||
export function getTestCasesForMinder(request, callback) {
|
||||
return post('/test/case/list/minder', request, (response) => {
|
||||
|
@ -53,3 +54,8 @@ export function deleteRelateTest(caseId, testId, callback) {
|
|||
export function editTestCaseOrder(request, callback) {
|
||||
return basePost('/test/case/edit/order', request, callback);
|
||||
}
|
||||
|
||||
export function getMinderExtraNode(groupId, nodeId, callback) {
|
||||
return baseGet('/minder/extra/node/list/' + groupId + '/' + nodeId, callback);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue