Selaa lähdekoodia

自助检索修改

xiaoqiao 1 vuosi sitten
vanhempi
commit
fa8e1b5a91
25 muutettua tiedostoa jossa 2721 lisäystä ja 1299 poistoa
  1. 698 526
      lib/华北油田Ai检索.PDM
  2. 822 527
      lib/华北油田Ai检索.pdb
  3. 3 2
      src/main/java/com/bowintek/practice/controller/TempController.java
  4. 30 0
      src/main/java/com/bowintek/practice/mapper/SrTagfixedfieldMapper.java
  5. 1 0
      src/main/java/com/bowintek/practice/mapper/cquery/SubjectCQuery.java
  6. 9 0
      src/main/java/com/bowintek/practice/mapper/cquery/TagCQuery.java
  7. 10 0
      src/main/java/com/bowintek/practice/model/SrSaerchtemp.java
  8. 70 0
      src/main/java/com/bowintek/practice/model/SrSaerchtempExample.java
  9. 43 0
      src/main/java/com/bowintek/practice/model/SrTagfixedfield.java
  10. 469 0
      src/main/java/com/bowintek/practice/model/SrTagfixedfieldExample.java
  11. 28 31
      src/main/java/com/bowintek/practice/services/impl/TempServiceImpl.java
  12. 3 2
      src/main/java/com/bowintek/practice/services/service/TempService.java
  13. 33 0
      src/main/java/com/bowintek/practice/vo/TagVo.java
  14. 1 1
      src/main/resources/generatorConfig.xml
  15. 22 5
      src/main/resources/mapping/SrSaerchtempMapper.xml
  16. 196 0
      src/main/resources/mapping/SrTagfixedfieldMapper.xml
  17. 8 0
      src/main/resources/mapping/cquery/SubjectCQuery.xml
  18. 20 0
      src/main/resources/mapping/cquery/TagCQuery.xml
  19. 1 1
      target/classes/generatorConfig.xml
  20. 1 1
      vue/src/components/basic/query/drag-where.vue
  21. 46 31
      vue/src/components/basic/query/select-column.vue
  22. 31 16
      vue/src/components/basic/query/select-field.vue
  23. 47 35
      vue/src/views/query/index.vue
  24. 9 6
      vue/src/views/query/table.vue
  25. 120 115
      vue/src/views/subject/edit.vue

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 698 - 526
lib/华北油田Ai检索.PDM


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 822 - 527
lib/华北油田Ai检索.pdb


+ 3 - 2
src/main/java/com/bowintek/practice/controller/TempController.java

@@ -15,6 +15,7 @@ import com.bowintek.practice.services.service.GenSqlStringService;
 import com.bowintek.practice.services.service.TempService;
 import com.bowintek.practice.services.service.system.RoleService;
 import com.bowintek.practice.vo.SaerchtempVo;
+import com.bowintek.practice.vo.TagVo;
 import com.bowintek.practice.vo.system.FunctionCodeModel;
 import com.bowintek.practice.vo.system.RoleFunctionCodeModel;
 import com.bowintek.practice.vo.system.RoleModel;
@@ -156,7 +157,7 @@ public class TempController {
     }
 
     @GetMapping("/getSubjectFieldList")
-    public BaseResponse<List<HashMap<String, Object>>> getSubjectFieldList(String subId) {
-        return RespGenerstor.success(tempService.getSubjectFieldList(subId));
+    public BaseResponse<List<HashMap<String, Object>>> getSubjectFieldList(String subId,String tagId,Integer fixedType) {
+        return RespGenerstor.success(tempService.getSubjectFieldList(subId,tagId,fixedType));
     }
 }

+ 30 - 0
src/main/java/com/bowintek/practice/mapper/SrTagfixedfieldMapper.java

@@ -0,0 +1,30 @@
+package com.bowintek.practice.mapper;
+
+import com.bowintek.practice.model.SrTagfixedfield;
+import com.bowintek.practice.model.SrTagfixedfieldExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface SrTagfixedfieldMapper {
+    long countByExample(SrTagfixedfieldExample example);
+
+    int deleteByExample(SrTagfixedfieldExample example);
+
+    int deleteByPrimaryKey(String fixedId);
+
+    int insert(SrTagfixedfield row);
+
+    int insertSelective(SrTagfixedfield row);
+
+    List<SrTagfixedfield> selectByExample(SrTagfixedfieldExample example);
+
+    SrTagfixedfield selectByPrimaryKey(String fixedId);
+
+    int updateByExampleSelective(@Param("row") SrTagfixedfield row, @Param("example") SrTagfixedfieldExample example);
+
+    int updateByExample(@Param("row") SrTagfixedfield row, @Param("example") SrTagfixedfieldExample example);
+
+    int updateByPrimaryKeySelective(SrTagfixedfield row);
+
+    int updateByPrimaryKey(SrTagfixedfield row);
+}

+ 1 - 0
src/main/java/com/bowintek/practice/mapper/cquery/SubjectCQuery.java

@@ -12,4 +12,5 @@ public interface SubjectCQuery {
     List<HashMap<String,Object>> getListToHashMap(String tabName);
     List<HashMap<String,Object>> getSubjectFieldToHashMapList(List<String> subIdList);
     List<SubjectfieldVo> getFieldList(String subId);
+    List<HashMap<String,Object>> getSubjectField(String subId,String tagId,Integer fixedType);
 }

+ 9 - 0
src/main/java/com/bowintek/practice/mapper/cquery/TagCQuery.java

@@ -0,0 +1,9 @@
+package com.bowintek.practice.mapper.cquery;
+
+import com.bowintek.practice.vo.TagVo;
+
+import java.util.List;
+
+public interface TagCQuery {
+    List<TagVo> selectTagList();
+}

+ 10 - 0
src/main/java/com/bowintek/practice/model/SrSaerchtemp.java

@@ -25,6 +25,8 @@ public class SrSaerchtemp {
 
     private String createdName;
 
+    private String tagId;
+
     public String getTempId() {
         return tempId;
     }
@@ -112,4 +114,12 @@ public class SrSaerchtemp {
     public void setCreatedName(String createdName) {
         this.createdName = createdName == null ? null : createdName.trim();
     }
+
+    public String getTagId() {
+        return tagId;
+    }
+
+    public void setTagId(String tagId) {
+        this.tagId = tagId == null ? null : tagId.trim();
+    }
 }

+ 70 - 0
src/main/java/com/bowintek/practice/model/SrSaerchtempExample.java

@@ -844,6 +844,76 @@ public class SrSaerchtempExample {
             addCriterion("createdName not between", value1, value2, "createdName");
             return (Criteria) this;
         }
+
+        public Criteria andTagIdIsNull() {
+            addCriterion("tagId is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdIsNotNull() {
+            addCriterion("tagId is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdEqualTo(String value) {
+            addCriterion("tagId =", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotEqualTo(String value) {
+            addCriterion("tagId <>", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdGreaterThan(String value) {
+            addCriterion("tagId >", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdGreaterThanOrEqualTo(String value) {
+            addCriterion("tagId >=", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdLessThan(String value) {
+            addCriterion("tagId <", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdLessThanOrEqualTo(String value) {
+            addCriterion("tagId <=", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdLike(String value) {
+            addCriterion("tagId like", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotLike(String value) {
+            addCriterion("tagId not like", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdIn(List<String> values) {
+            addCriterion("tagId in", values, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotIn(List<String> values) {
+            addCriterion("tagId not in", values, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdBetween(String value1, String value2) {
+            addCriterion("tagId between", value1, value2, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotBetween(String value1, String value2) {
+            addCriterion("tagId not between", value1, value2, "tagId");
+            return (Criteria) this;
+        }
     }
 
     public static class Criteria extends GeneratedCriteria {

+ 43 - 0
src/main/java/com/bowintek/practice/model/SrTagfixedfield.java

@@ -0,0 +1,43 @@
+package com.bowintek.practice.model;
+
+public class SrTagfixedfield {
+    private String fixedId;
+
+    private String tagId;
+
+    private String fieldName;
+
+    private Integer fixedType;
+
+    public String getFixedId() {
+        return fixedId;
+    }
+
+    public void setFixedId(String fixedId) {
+        this.fixedId = fixedId == null ? null : fixedId.trim();
+    }
+
+    public String getTagId() {
+        return tagId;
+    }
+
+    public void setTagId(String tagId) {
+        this.tagId = tagId == null ? null : tagId.trim();
+    }
+
+    public String getFieldName() {
+        return fieldName;
+    }
+
+    public void setFieldName(String fieldName) {
+        this.fieldName = fieldName == null ? null : fieldName.trim();
+    }
+
+    public Integer getFixedType() {
+        return fixedType;
+    }
+
+    public void setFixedType(Integer fixedType) {
+        this.fixedType = fixedType;
+    }
+}

+ 469 - 0
src/main/java/com/bowintek/practice/model/SrTagfixedfieldExample.java

@@ -0,0 +1,469 @@
+package com.bowintek.practice.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SrTagfixedfieldExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public SrTagfixedfieldExample() {
+        oredCriteria = new ArrayList<>();
+    }
+
+    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<>();
+        }
+
+        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 andFixedIdIsNull() {
+            addCriterion("fixedId is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdIsNotNull() {
+            addCriterion("fixedId is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdEqualTo(String value) {
+            addCriterion("fixedId =", value, "fixedId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdNotEqualTo(String value) {
+            addCriterion("fixedId <>", value, "fixedId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdGreaterThan(String value) {
+            addCriterion("fixedId >", value, "fixedId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdGreaterThanOrEqualTo(String value) {
+            addCriterion("fixedId >=", value, "fixedId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdLessThan(String value) {
+            addCriterion("fixedId <", value, "fixedId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdLessThanOrEqualTo(String value) {
+            addCriterion("fixedId <=", value, "fixedId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdLike(String value) {
+            addCriterion("fixedId like", value, "fixedId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdNotLike(String value) {
+            addCriterion("fixedId not like", value, "fixedId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdIn(List<String> values) {
+            addCriterion("fixedId in", values, "fixedId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdNotIn(List<String> values) {
+            addCriterion("fixedId not in", values, "fixedId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdBetween(String value1, String value2) {
+            addCriterion("fixedId between", value1, value2, "fixedId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedIdNotBetween(String value1, String value2) {
+            addCriterion("fixedId not between", value1, value2, "fixedId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdIsNull() {
+            addCriterion("tagId is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdIsNotNull() {
+            addCriterion("tagId is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdEqualTo(String value) {
+            addCriterion("tagId =", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotEqualTo(String value) {
+            addCriterion("tagId <>", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdGreaterThan(String value) {
+            addCriterion("tagId >", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdGreaterThanOrEqualTo(String value) {
+            addCriterion("tagId >=", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdLessThan(String value) {
+            addCriterion("tagId <", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdLessThanOrEqualTo(String value) {
+            addCriterion("tagId <=", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdLike(String value) {
+            addCriterion("tagId like", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotLike(String value) {
+            addCriterion("tagId not like", value, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdIn(List<String> values) {
+            addCriterion("tagId in", values, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotIn(List<String> values) {
+            addCriterion("tagId not in", values, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdBetween(String value1, String value2) {
+            addCriterion("tagId between", value1, value2, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTagIdNotBetween(String value1, String value2) {
+            addCriterion("tagId not between", value1, value2, "tagId");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameIsNull() {
+            addCriterion("fieldName is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameIsNotNull() {
+            addCriterion("fieldName is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameEqualTo(String value) {
+            addCriterion("fieldName =", value, "fieldName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameNotEqualTo(String value) {
+            addCriterion("fieldName <>", value, "fieldName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameGreaterThan(String value) {
+            addCriterion("fieldName >", value, "fieldName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameGreaterThanOrEqualTo(String value) {
+            addCriterion("fieldName >=", value, "fieldName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameLessThan(String value) {
+            addCriterion("fieldName <", value, "fieldName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameLessThanOrEqualTo(String value) {
+            addCriterion("fieldName <=", value, "fieldName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameLike(String value) {
+            addCriterion("fieldName like", value, "fieldName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameNotLike(String value) {
+            addCriterion("fieldName not like", value, "fieldName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameIn(List<String> values) {
+            addCriterion("fieldName in", values, "fieldName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameNotIn(List<String> values) {
+            addCriterion("fieldName not in", values, "fieldName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameBetween(String value1, String value2) {
+            addCriterion("fieldName between", value1, value2, "fieldName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFieldNameNotBetween(String value1, String value2) {
+            addCriterion("fieldName not between", value1, value2, "fieldName");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedTypeIsNull() {
+            addCriterion("fixedType is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedTypeIsNotNull() {
+            addCriterion("fixedType is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedTypeEqualTo(Integer value) {
+            addCriterion("fixedType =", value, "fixedType");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedTypeNotEqualTo(Integer value) {
+            addCriterion("fixedType <>", value, "fixedType");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedTypeGreaterThan(Integer value) {
+            addCriterion("fixedType >", value, "fixedType");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedTypeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("fixedType >=", value, "fixedType");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedTypeLessThan(Integer value) {
+            addCriterion("fixedType <", value, "fixedType");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedTypeLessThanOrEqualTo(Integer value) {
+            addCriterion("fixedType <=", value, "fixedType");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedTypeIn(List<Integer> values) {
+            addCriterion("fixedType in", values, "fixedType");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedTypeNotIn(List<Integer> values) {
+            addCriterion("fixedType not in", values, "fixedType");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedTypeBetween(Integer value1, Integer value2) {
+            addCriterion("fixedType between", value1, value2, "fixedType");
+            return (Criteria) this;
+        }
+
+        public Criteria andFixedTypeNotBetween(Integer value1, Integer value2) {
+            addCriterion("fixedType not between", value1, value2, "fixedType");
+            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);
+        }
+    }
+}

+ 28 - 31
src/main/java/com/bowintek/practice/services/impl/TempServiceImpl.java

@@ -4,6 +4,7 @@ import com.bowintek.practice.AppConfig;
 import com.bowintek.practice.enums.DataRangeEnum;
 import com.bowintek.practice.mapper.*;
 import com.bowintek.practice.mapper.cquery.SubjectCQuery;
+import com.bowintek.practice.mapper.cquery.TagCQuery;
 import com.bowintek.practice.mapper.cquery.TempCQuery;
 import com.bowintek.practice.model.*;
 import com.bowintek.practice.services.service.AccountService;
@@ -13,6 +14,7 @@ import com.bowintek.practice.services.service.UserService;
 import com.bowintek.practice.util.DateUtils;
 import com.bowintek.practice.util.StringUtils;
 import com.bowintek.practice.vo.SaerchtempVo;
+import com.bowintek.practice.vo.TagVo;
 import com.bowintek.practice.vo.temp.*;
 import com.bowintek.practice.vo.user.DataRange;
 import com.bowintek.practice.vo.user.UserInfoModel;
@@ -46,6 +48,12 @@ public class TempServiceImpl implements TempService {
     @Autowired
     private GenSqlStringService genSqlStringService;
     @Autowired
+    private SrTagMapper tagMapper;
+    @Autowired
+    private SrTagfixedfieldMapper tagfixedfieldMapper;
+    @Autowired
+    private TagCQuery tagCQuery;
+    @Autowired
     private StringUtils stringUtils;
     @Autowired
     private AppConfig appConfig;
@@ -235,38 +243,27 @@ public class TempServiceImpl implements TempService {
 
     @Override
     public List<HashMap<String, Object>> getSubjectTree(String likeName) {
+        List<TagVo> tagList = tagCQuery.selectTagList();
         List<HashMap<String, Object>> subjectTrees = subjectCQuery.getListToHashMap(likeName);
-        List<String> subIdList = subjectTrees.stream()
-                .map(m -> m.get("subId").toString())
-                .collect(Collectors.toList());
-        List<HashMap<String, Object>> subFields = subjectCQuery.getSubjectFieldToHashMapList(subIdList);
 
-        //生成树标题,key
-        subjectTrees.stream().forEach(sub -> {
-            String subId = sub.get("subId").toString();
-            String subjectName = sub.get("subjectName").toString();
-            sub.put("title", sub.get("tabName").toString());
-            sub.put("key", subId);
-
-            List<HashMap<String, Object>> groups = new ArrayList<>();
-            //生成维度
-            HashMap<String, Object> dimension = new HashMap<>();
-            dimension.put("title", "维度");
-            dimension.put("key", sub.get("subId").toString() + "-维度");
-            dimension.put("children", findSubjectFields(subFields, subId, Arrays.asList(new Integer[]{1}), subjectName, "维度"));
-            groups.add(dimension);
-
-            //生成度量
-            HashMap<String, Object> measure = new HashMap<>();
-            measure.put("title", "度量");
-            measure.put("key", sub.get("subId").toString() + "-度量");
-            measure.put("children", findSubjectFields(subFields, subId, Arrays.asList(new Integer[]{2}), subjectName, "度量"));
-            groups.add(measure);
-
-            sub.put("children", groups);
+        List<HashMap<String, Object>> tagTree = new ArrayList<>();
+        tagList.stream().forEach(tag -> {
+            List<HashMap<String, Object>> tagSubList = subjectTrees.stream().filter(sub -> Arrays.stream(tag.getSubIdList()).anyMatch(e -> e.equals(sub.get("subId").toString()))).map(x ->
+            {
+                x.put("title", x.get("subjectName"));
+                x.put("key", x.get("subId"));
+                return x;
+            }).collect(Collectors.toList());
+
+            HashMap<String, Object> treeNode = new HashMap<>();
+            treeNode.put("title", tag.getTagName());
+            treeNode.put("key", tag.getTagId());
+            treeNode.put("children", tagSubList);
+            treeNode.put("columnList", tag.getColumnList());
+            treeNode.put("filterFields", tag.getFilterFieldList());
+            tagTree.add(treeNode);
         });
-
-        return subjectTrees;
+        return tagTree;
     }
 
     public List<HashMap<String, Object>> findSubjectFields(List<HashMap<String, Object>> subFields,
@@ -303,7 +300,7 @@ public class TempServiceImpl implements TempService {
     }
 
     @Override
-    public List<HashMap<String, Object>> getSubjectFieldList(String subId) {
-        return subjectCQuery.getSubjectFieldToHashMapList(Arrays.asList(subId));
+    public List<HashMap<String, Object>> getSubjectFieldList(String subId,String tagId,Integer fixedType) {
+        return subjectCQuery.getSubjectField(subId,tagId,fixedType);
     }
 }

+ 3 - 2
src/main/java/com/bowintek/practice/services/service/TempService.java

@@ -4,6 +4,7 @@ import com.bowintek.practice.model.SrSaerchtemp;
 import com.bowintek.practice.model.SrTempData;
 import com.bowintek.practice.model.SysMenu;
 import com.bowintek.practice.vo.SaerchtempVo;
+import com.bowintek.practice.vo.TagVo;
 import com.bowintek.practice.vo.temp.TempObjectModel;
 import com.bowintek.practice.vo.temp.TempSaveResult;
 import com.github.pagehelper.PageInfo;
@@ -14,11 +15,11 @@ import java.util.List;
 public interface TempService {
     PageInfo<SaerchtempVo> getList(Integer page, Integer rows,
                                    String tempNo, String tempName, String beiginDate,String endDate,List<String> idList);
-    List<HashMap<String,Object>> getSubjectTree(String likeName);
+    List<HashMap<String, Object>> getSubjectTree(String likeName);
     TempSaveResult saveTemp(TempObjectModel data, String userID);
     TempObjectModel getTemp(String tempId);
     int deleteTemp(List<String> idList);
     HashMap<String, Object> getDictionaryToHashMap(List<String> codeList);
     SrTempData startTempDataToExcel(String tempId, String userId);
-    List<HashMap<String, Object>> getSubjectFieldList(String subId);
+    List<HashMap<String, Object>> getSubjectFieldList(String subId,String tagId,Integer fixedType);
 }

+ 33 - 0
src/main/java/com/bowintek/practice/vo/TagVo.java

@@ -0,0 +1,33 @@
+package com.bowintek.practice.vo;
+
+import com.bowintek.practice.model.SrTag;
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.List;
+
+@Data
+public class TagVo extends SrTag {
+    private String columns;
+    private String[] columnList;
+
+    public String[] getColumnList() {
+        return columns == null ? columnList == null ? new String[]{} : columnList : columns.split("[,,]");
+    }
+
+    private String filterFields;
+    private String[] filterFieldList;
+
+    public String[] getFilterFieldList() {
+        return filterFields == null ? filterFieldList == null ? new String[]{} : filterFieldList : filterFields.split("[,,]");
+    }
+
+    private String subIds;
+    private String[] subIdList;
+
+    public String[] getSubIdList() {
+        return subIds == null ? subIdList == null ? new String[]{} : subIdList : subIds.split("[,,]");
+    }
+
+    List<HashMap<String, Object>> tagSubList;
+}

+ 1 - 1
src/main/resources/generatorConfig.xml

@@ -120,6 +120,6 @@
             <columnOverride column="StandardMajorID" javaType="java.lang.Integer" jdbcType="INTEGER" />
             <table schema="" tableName="Sys_Log"><property name="useActualColumnNames" value="true"/></table>
         </table>-->
-        <table schema="" tableName="sr_subjectTag"><property name="useActualColumnNames" value="true"/></table>
+        <table schema="" tableName="sr_saerchTemp"><property name="useActualColumnNames" value="true"/></table>
     </context>
 </generatorConfiguration>

+ 22 - 5
src/main/resources/mapping/SrSaerchtempMapper.xml

@@ -13,6 +13,7 @@
     <result column="modifyBy" jdbcType="VARCHAR" property="modifyBy" />
     <result column="status" jdbcType="INTEGER" property="status" />
     <result column="createdName" jdbcType="VARCHAR" property="createdName" />
+    <result column="tagId" jdbcType="VARCHAR" property="tagId" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <where>
@@ -74,7 +75,7 @@
   </sql>
   <sql id="Base_Column_List">
     tempId, tempName, tempNo, subId, remark, createTime, modifyTime, createdBy, modifyBy, 
-    status, createdName
+    status, createdName, tagId
   </sql>
   <select id="selectByExample" parameterType="com.bowintek.practice.model.SrSaerchtempExample" resultMap="BaseResultMap">
     select
@@ -110,11 +111,13 @@
     insert into sr_saerchtemp (tempId, tempName, tempNo, 
       subId, remark, createTime, 
       modifyTime, createdBy, modifyBy, 
-      status, createdName)
+      status, createdName, tagId
+      )
     values (#{tempId,jdbcType=VARCHAR}, #{tempName,jdbcType=VARCHAR}, #{tempNo,jdbcType=VARCHAR}, 
       #{subId,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, 
       #{modifyTime,jdbcType=TIMESTAMP}, #{createdBy,jdbcType=VARCHAR}, #{modifyBy,jdbcType=VARCHAR}, 
-      #{status,jdbcType=INTEGER}, #{createdName,jdbcType=VARCHAR})
+      #{status,jdbcType=INTEGER}, #{createdName,jdbcType=VARCHAR}, #{tagId,jdbcType=VARCHAR}
+      )
   </insert>
   <insert id="insertSelective" parameterType="com.bowintek.practice.model.SrSaerchtemp">
     insert into sr_saerchtemp
@@ -152,6 +155,9 @@
       <if test="createdName != null">
         createdName,
       </if>
+      <if test="tagId != null">
+        tagId,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="tempId != null">
@@ -187,6 +193,9 @@
       <if test="createdName != null">
         #{createdName,jdbcType=VARCHAR},
       </if>
+      <if test="tagId != null">
+        #{tagId,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.bowintek.practice.model.SrSaerchtempExample" resultType="java.lang.Long">
@@ -231,6 +240,9 @@
       <if test="row.createdName != null">
         createdName = #{row.createdName,jdbcType=VARCHAR},
       </if>
+      <if test="row.tagId != null">
+        tagId = #{row.tagId,jdbcType=VARCHAR},
+      </if>
     </set>
     <if test="example != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -248,7 +260,8 @@
       createdBy = #{row.createdBy,jdbcType=VARCHAR},
       modifyBy = #{row.modifyBy,jdbcType=VARCHAR},
       status = #{row.status,jdbcType=INTEGER},
-      createdName = #{row.createdName,jdbcType=VARCHAR}
+      createdName = #{row.createdName,jdbcType=VARCHAR},
+      tagId = #{row.tagId,jdbcType=VARCHAR}
     <if test="example != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -286,6 +299,9 @@
       <if test="createdName != null">
         createdName = #{createdName,jdbcType=VARCHAR},
       </if>
+      <if test="tagId != null">
+        tagId = #{tagId,jdbcType=VARCHAR},
+      </if>
     </set>
     where tempId = #{tempId,jdbcType=VARCHAR}
   </update>
@@ -300,7 +316,8 @@
       createdBy = #{createdBy,jdbcType=VARCHAR},
       modifyBy = #{modifyBy,jdbcType=VARCHAR},
       status = #{status,jdbcType=INTEGER},
-      createdName = #{createdName,jdbcType=VARCHAR}
+      createdName = #{createdName,jdbcType=VARCHAR},
+      tagId = #{tagId,jdbcType=VARCHAR}
     where tempId = #{tempId,jdbcType=VARCHAR}
   </update>
 </mapper>

+ 196 - 0
src/main/resources/mapping/SrTagfixedfieldMapper.xml

@@ -0,0 +1,196 @@
+<?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="com.bowintek.practice.mapper.SrTagfixedfieldMapper">
+  <resultMap id="BaseResultMap" type="com.bowintek.practice.model.SrTagfixedfield">
+    <id column="fixedId" jdbcType="VARCHAR" property="fixedId" />
+    <result column="tagId" jdbcType="VARCHAR" property="tagId" />
+    <result column="fieldName" jdbcType="VARCHAR" property="fieldName" />
+    <result column="fixedType" jdbcType="INTEGER" property="fixedType" />
+  </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">
+    fixedId, tagId, fieldName, fixedType
+  </sql>
+  <select id="selectByExample" parameterType="com.bowintek.practice.model.SrTagfixedfieldExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from sr_tagfixedfield
+    <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="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from sr_tagfixedfield
+    where fixedId = #{fixedId,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    delete from sr_tagfixedfield
+    where fixedId = #{fixedId,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.bowintek.practice.model.SrTagfixedfieldExample">
+    delete from sr_tagfixedfield
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.bowintek.practice.model.SrTagfixedfield">
+    insert into sr_tagfixedfield (fixedId, tagId, fieldName, 
+      fixedType)
+    values (#{fixedId,jdbcType=VARCHAR}, #{tagId,jdbcType=VARCHAR}, #{fieldName,jdbcType=VARCHAR}, 
+      #{fixedType,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="com.bowintek.practice.model.SrTagfixedfield">
+    insert into sr_tagfixedfield
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="fixedId != null">
+        fixedId,
+      </if>
+      <if test="tagId != null">
+        tagId,
+      </if>
+      <if test="fieldName != null">
+        fieldName,
+      </if>
+      <if test="fixedType != null">
+        fixedType,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="fixedId != null">
+        #{fixedId,jdbcType=VARCHAR},
+      </if>
+      <if test="tagId != null">
+        #{tagId,jdbcType=VARCHAR},
+      </if>
+      <if test="fieldName != null">
+        #{fieldName,jdbcType=VARCHAR},
+      </if>
+      <if test="fixedType != null">
+        #{fixedType,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.bowintek.practice.model.SrTagfixedfieldExample" resultType="java.lang.Long">
+    select count(*) from sr_tagfixedfield
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update sr_tagfixedfield
+    <set>
+      <if test="row.fixedId != null">
+        fixedId = #{row.fixedId,jdbcType=VARCHAR},
+      </if>
+      <if test="row.tagId != null">
+        tagId = #{row.tagId,jdbcType=VARCHAR},
+      </if>
+      <if test="row.fieldName != null">
+        fieldName = #{row.fieldName,jdbcType=VARCHAR},
+      </if>
+      <if test="row.fixedType != null">
+        fixedType = #{row.fixedType,jdbcType=INTEGER},
+      </if>
+    </set>
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update sr_tagfixedfield
+    set fixedId = #{row.fixedId,jdbcType=VARCHAR},
+      tagId = #{row.tagId,jdbcType=VARCHAR},
+      fieldName = #{row.fieldName,jdbcType=VARCHAR},
+      fixedType = #{row.fixedType,jdbcType=INTEGER}
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.bowintek.practice.model.SrTagfixedfield">
+    update sr_tagfixedfield
+    <set>
+      <if test="tagId != null">
+        tagId = #{tagId,jdbcType=VARCHAR},
+      </if>
+      <if test="fieldName != null">
+        fieldName = #{fieldName,jdbcType=VARCHAR},
+      </if>
+      <if test="fixedType != null">
+        fixedType = #{fixedType,jdbcType=INTEGER},
+      </if>
+    </set>
+    where fixedId = #{fixedId,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.bowintek.practice.model.SrTagfixedfield">
+    update sr_tagfixedfield
+    set tagId = #{tagId,jdbcType=VARCHAR},
+      fieldName = #{fieldName,jdbcType=VARCHAR},
+      fixedType = #{fixedType,jdbcType=INTEGER}
+    where fixedId = #{fixedId,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 8 - 0
src/main/resources/mapping/cquery/SubjectCQuery.xml

@@ -20,6 +20,14 @@
         </foreach>
         order by sf.disOrder
     </select>
+    <select id="getSubjectField" resultType="java.util.HashMap">
+        select sf.*,IF(st.tagId IS NULL, 0,1) AS isFixed
+        from sr_subjectfield sf
+        left join sr_tagfixedfield st on sf.fieldName = st.fieldName and st.tagId=#{tagId} and fixedType=#{fixedType}
+        where 1=1
+        and subId =#{subId}
+        order by sf.disOrder
+    </select>
     <select id="getList" resultType="com.bowintek.practice.vo.SubjectVo">
         select *
         from sr_subject sub

+ 20 - 0
src/main/resources/mapping/cquery/TagCQuery.xml

@@ -0,0 +1,20 @@
+<?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="com.bowintek.practice.mapper.cquery.TagCQuery">
+    <select id="selectTagList" resultType="com.bowintek.practice.vo.TagVo">
+        select tag.*,columns, filterFields,stag.subIds from sr_tag tag
+                                                                left join (
+            select ff.tagId, GROUP_CONCAT(CASE WHEN ff.fixedType = 1 THEN ff.fieldName END) columns,
+                   GROUP_CONCAT(CASE WHEN ff.fixedType = 2 THEN ff.fieldName END) filterFields
+            from sr_tagfixedfield ff
+            group by ff.tagId
+        ) ftag on tag.tagId = ftag.tagId
+                                                                left join (
+            select sf.tagId, GROUP_CONCAT(sf.subId) subIds
+            from sr_subjecttag sf
+            group by sf.tagId
+        )stag on tag.tagId=stag.tagId
+        where 1=1
+        order by tag.tagName
+    </select>
+</mapper>

+ 1 - 1
target/classes/generatorConfig.xml

@@ -120,6 +120,6 @@
             <columnOverride column="StandardMajorID" javaType="java.lang.Integer" jdbcType="INTEGER" />
             <table schema="" tableName="Sys_Log"><property name="useActualColumnNames" value="true"/></table>
         </table>-->
-        <table schema="" tableName="sr_subjectTag"><property name="useActualColumnNames" value="true"/></table>
+        <table schema="" tableName="sr_saerchTemp"><property name="useActualColumnNames" value="true"/></table>
     </context>
 </generatorConfiguration>

+ 1 - 1
vue/src/components/basic/query/drag-where.vue

@@ -16,7 +16,7 @@
           <div class="query-area-item-title" @click="handleDisplay(index)">
             {{ it.displayName ? it.displayName : it.fieldName }}
           </div>
-          <div class="query-area-item-close" @click="childDelete(index)">
+          <div class="query-area-item-close" @click="childDelete(index)" v-show="it.isFixed!=1">
             <CloseOutlined style="color: white;"/>
           </div>
         </div>

+ 46 - 31
vue/src/components/basic/query/select-column.vue

@@ -16,24 +16,28 @@
           </a-checkbox>
         </div>
         <a-checkbox-group style="display: flex;flex-flow: column;overflow-y: scroll" v-model:value="checkedList">
-          <a-checkbox :value="it.fieldId" v-for="it in fieldList">
-            <a-dropdown v-if="it.settingTypeId==2">
-              <a>
-                <CalculatorOutlined/>
-                {{ it.fieldName }}<span class="lable-operation" v-if="it.operation">({{ getFunctionName(it.operation) }})</span>
-                <DownOutlined/>
-              </a>
-              <template #overlay>
-                <a-menu @click="(e)=>{it.operation=e.key;changeColumn();}">
-                  <a-menu-item v-for="menu in OperationList" :key="menu.value">{{ menu.label }}</a-menu-item>
-                </a-menu>
-              </template>
-            </a-dropdown>
-            <div v-else>
-              <FileSearchOutlined/>
-              {{ it.fieldName }}
-            </div>
-          </a-checkbox>
+          <template v-for="it in fieldList">
+            <a-checkbox :value="it.fieldId" v-show="it.isFixed!=1">
+              <a-dropdown v-if="it.settingTypeId==2">
+                <a>
+                  <CalculatorOutlined/>
+                  {{ it.fieldName }}<span class="lable-operation" v-if="it.operation">({{
+                    getFunctionName(it.operation)
+                  }})</span>
+                  <DownOutlined/>
+                </a>
+                <template #overlay>
+                  <a-menu @click="(e)=>{it.operation=e.key;changeColumn();}">
+                    <a-menu-item v-for="menu in OperationList" :key="menu.value">{{ menu.label }}</a-menu-item>
+                  </a-menu>
+                </template>
+              </a-dropdown>
+              <div v-else>
+                <FileSearchOutlined/>
+                {{ it.fieldName }}
+              </div>
+            </a-checkbox>
+          </template>
         </a-checkbox-group>
       </div>
     </div>
@@ -49,6 +53,7 @@ import {OperationList} from '@/enums/dictions';
 export default defineComponent({
   name: 'SelectColumn',
   props: {
+    tagId: String,
     subId: String,
     options: {type: Object, default: {}}
   },
@@ -67,9 +72,14 @@ export default defineComponent({
     const fieldList = ref<any[]>([]);
 
     const getFieldList = async function () {
-      const result = await get('/temp/getSubjectFieldList', {subId: props.subId})
+      const result = await get('/temp/getSubjectFieldList', {
+        subId: props.subId,
+        tagId: props.tagId,
+        fixedType: 1
+      })
 
       fieldList.value = result;
+      setFexidColumn();
       basesListChange();
       measuresListChange();
     }
@@ -91,6 +101,10 @@ export default defineComponent({
       () => props.options.basesList,
       () => measuresListChange, {deep: true}
     );
+    const setFexidColumn = () => {
+      state.checkedList = fieldList.value.filter(x => x.isFixed == 1).map(x => x.fieldId);
+      changeColumn();
+    }
     const basesListChange = () => {
       props.options.basesList?.forEach(x => {
         if (state.checkedList.indexOf(x.fieldId) < 0) {
@@ -112,35 +126,35 @@ export default defineComponent({
     }
     const onCheckAllChange = (e) => {
       let ckList = fieldList.value.map(it => it.fieldId);
+      let fixedList= fieldList.value.filter(x => x.isFixed == 1).map(x => x.fieldId);
       Object.assign(state, {
-        checkedList: e.target.checked ? ckList : [],
+        checkedList: e.target.checked ? ckList : fixedList,
         indeterminate: false,
       });
     };
     watch(
       () => state.checkedList,
-      val =>{
+      val => {
         state.indeterminate = !!val.length && val.length < fieldList.value.length;
         state.checkAll = val.length === fieldList.value.length;
         changeColumn();
       }
     );
-    const changeColumn =()=>{
-      let selectList =Object.assign( fieldList.value.filter(x => state.checkedList.findIndex(ck => ck == x.fieldId) > -1));
+    const changeColumn = () => {
+      let selectList = Object.assign(fieldList.value.filter(x => state.checkedList.findIndex(ck => ck == x.fieldId) > -1));
       selectList.forEach(it => it.tempFeildId = new Date().getTime() + '');
-      let basesList= selectList.filter(x=>x.settingTypeId==1);
-      let measuresList= selectList.filter(x=>x.settingTypeId==2);
-      emit('checked', basesList,measuresList);
+      let basesList = selectList.filter(x => x.settingTypeId == 1);
+      let measuresList = selectList.filter(x => x.settingTypeId == 2);
+      emit('checked', basesList, measuresList);
     }
-    const getFunctionName = (operation: string)=>
-    {
+    const getFunctionName = (operation: string) => {
       let op = OperationList.filter(x => x.value == operation)[0];
       return op?.label;
     }
     return {
       ...toRefs(state),
       fieldList, OperationList,
-      onCheckAllChange, getFunctionName,changeColumn,
+      onCheckAllChange, getFunctionName, changeColumn,
       showColumns
     }
   }
@@ -160,8 +174,9 @@ export default defineComponent({
     .ant-checkbox-wrapper:first-child {
       margin-left: 8px;
     }
-    .lable-operation{
-      color:#2f54eb;
+
+    .lable-operation {
+      color: #2f54eb;
     }
   }
 }

+ 31 - 16
vue/src/components/basic/query/select-field.vue

@@ -15,14 +15,16 @@
     />
     <a-divider orientation="left">筛选条件</a-divider>
     <div class="field-content">
-      <div class="field-item" v-for="it in search()" :key="it.field"
-           @click="it.checked=!it.checked"
-           :style="{ borderColor: it.checked?'#50a14f':'#eef0f4'}">
-        <CheckCircleOutlined :style="{fontSize: '16px',color:it.checked?'#50a14f':'#eef0f4'}"/>
-        <FileSearchOutlined v-show="it.settingTypeId==1"/>
-        <CalculatorOutlined v-show="it.settingTypeId==2"/>
-        {{ it.fieldName }}
-      </div>
+      <template v-for="it in search()"  :key="it.field">
+        <div class="field-item"
+             @click="it.checked=!it.checked" v-show="it.isFixed!=1"
+             :style="{ borderColor: it.checked?'#50a14f':'#eef0f4'}">
+          <CheckCircleOutlined :style="{fontSize: '16px',color:it.checked?'#50a14f':'#eef0f4'}"/>
+          <FileSearchOutlined v-show="it.settingTypeId==1"/>
+          <CalculatorOutlined v-show="it.settingTypeId==2"/>
+          {{ it.fieldName }}
+        </div>
+      </template>
     </div>
   </a-modal>
 </template>
@@ -34,6 +36,8 @@ import {get} from '@/api/common';
 export default defineComponent({
   name: 'SelectField',
   props: {
+    tagId: String,
+    subId: String,
     options: {type: Object, default: {}}
   },
   emits: [
@@ -45,27 +49,38 @@ export default defineComponent({
     const fieldList = ref<any[]>([]);
 
     const getFieldList = async function () {
-      const result = await get('/temp/getSubjectFieldList', {subId: props.options.subId})
+      const result = await get('/temp/getSubjectFieldList', {
+        subId: props.subId,
+        tagId: props.tagId,
+        fixedType: 2
+      })
 
       fieldList.value = result;
+      setFexidField();
       changeList();
     }
     watch(
-      () => props.options.subId,
+      () => props.subId,
       () => {
-        fieldList.value=[];
-        if(props.options.subId!=undefined) {
+        fieldList.value = [];
+        if (props.subId != undefined) {
           getFieldList();
         }
       }
     );
     watch(
       () => props.options.tagList,
-      () =>changeList, {deep: true}
+      () => changeList, {deep: true}
     );
-    const changeList= ()=>{
+    const setFexidField = () => {
+      fieldList.value.filter(x => x.isFixed == 1).forEach(x => x.checked = true);
+      let selectList = Object.assign(fieldList.value.filter(x => x.checked));
+      emit('ok', selectList);
+    }
+    //已选择字段变化时
+    const changeList = () => {
       fieldList.value.map(it => {
-        it.checked = props.options.tagList.filter(tag => tag.fieldId == it.fieldId).length > 0;
+        it.checked = props.options.tagList.filter(tag => tag.fieldId == it.fieldId).length > 0 || it.isFixed == 1;
       })
     }
     const search = () => {
@@ -76,7 +91,7 @@ export default defineComponent({
     }
     const ok = () => {
       closing();
-      let selectList =  Object.assign(fieldList.value.filter(x => x.checked));
+      let selectList = Object.assign(fieldList.value.filter(x => x.checked));
       emit('ok', selectList);
     };
     const closing = () => {

+ 47 - 35
vue/src/views/query/index.vue

@@ -14,7 +14,8 @@
           :show-line="true"
           v-model:expandedKeys="subjectTrees.expandedKeys"
           :tree-data="subjectTrees.data"
-          @expand="treeOnExpand">
+          @expand="treeOnExpand"
+          @select="treeOnSelect">
           <template
             #title="{ title, key, subId, fieldCode, fieldId, fieldName, fieldAlias, dataType, subjectName, queryTypeId, dictionaryCode }">
             <div v-if="(fieldAlias)" class="query-index-tree-item"
@@ -116,31 +117,35 @@
           </a-row>
         </a-form>
       </div>
-      <div class="query-index-table">
-        <SelectColumn v-model:subId="formState.temp.subId" :options="selectColumnOptions" @checked="onColumnChecked"></SelectColumn>
-
-        <a-tabs v-model:activeKey="activeTab" class="query-index-tabs" @change="tabChange">
-          <a-tab-pane key="1" tab="列表视图">
-            <DisplayTable ref="display" :bases="formState.bases" :measures="formState.measures"
-                          @displayChange="onDisplayChange"></DisplayTable>
-          </a-tab-pane>
-          <a-tab-pane key="2" tab="柱状图" forceRender="true" style="width: 100%;">
-            <DisplayChartBar ref="displayChartBar" :bases="formState.bases"
-                             :measures="formState.measures"></DisplayChartBar>
-          </a-tab-pane>
-          <a-tab-pane key="3" tab="曲线图" forceRender="true" style="width: 100%;">
-            <DisplayChartLine ref="displayChartLine" :bases="formState.bases"
-                              :measures="formState.measures"></DisplayChartLine>
-          </a-tab-pane>
-          <a-tab-pane key="4" tab="条形图" forceRender="true" style="width: 100%;">
-            <DisplayChartYbar ref="displayChartYbar" :bases="formState.bases"
-                              :measures="formState.measures"></DisplayChartYbar>
-          </a-tab-pane>
-        </a-tabs>
-      </div>
+      <a-spin :spinning="loading">
+        <div class="query-index-table">
+          <SelectColumn :tagId="formState.temp.tagId" :subId="formState.temp.subId"
+                        :options="selectColumnOptions"
+                        @checked="onColumnChecked"></SelectColumn>
+          <a-tabs v-model:activeKey="activeTab" class="query-index-tabs" @change="tabChange">
+            <a-tab-pane key="1" tab="列表视图">
+              <DisplayTable ref="display" :bases="formState.bases" :measures="formState.measures"
+                            @displayChange="onDisplayChange"></DisplayTable>
+            </a-tab-pane>
+            <a-tab-pane key="2" tab="柱状图" forceRender="true" style="width: 100%;">
+              <DisplayChartBar ref="displayChartBar" :bases="formState.bases"
+                               :measures="formState.measures"></DisplayChartBar>
+            </a-tab-pane>
+            <a-tab-pane key="3" tab="曲线图" forceRender="true" style="width: 100%;">
+              <DisplayChartLine ref="displayChartLine" :bases="formState.bases"
+                                :measures="formState.measures"></DisplayChartLine>
+            </a-tab-pane>
+            <a-tab-pane key="4" tab="条形图" forceRender="true" style="width: 100%;">
+              <DisplayChartYbar ref="displayChartYbar" :bases="formState.bases"
+                                :measures="formState.measures"></DisplayChartYbar>
+            </a-tab-pane>
+          </a-tabs>
+        </div>
+      </a-spin>
     </div>
     <ExportData ref="exportData"></ExportData>
-    <SelectField @ok="selectOk" v-model:options="selectOptions"></SelectField>
+    <SelectField @ok="selectOk" :tagId="formState.temp.tagId" :subId="formState.temp.subId"
+                 v-model:options="selectOptions"></SelectField>
 
     <a-modal v-model:visible="modal.open" title="生成Sql语句成功,调试窗口" width="60%">
       <a-textarea v-model:value="modal.sqlString" placeholder="Basic usage" :rows="20"/>
@@ -188,20 +193,20 @@ export default defineComponent({
 
     const activeTab = ref('1');
     const showTree = ref(true);
+    const loading = ref(false);
 
-    const selectOptions = ref({visible: false, subId: null, tagList: []});
+    const selectOptions = ref({visible: false, tagList: []});
     const onSelectField = () => {
       selectOptions.value.visible = true;
-      selectOptions.value.subId = formState.value.temp.subId;
       selectOptions.value.tagList = Object.assign((where.value as any).getTagList());
     }
     const selectOk = (fieldList) => {
       console.log(fieldList);
       (where.value as any).setTagList(fieldList);
     }
-    const selectColumnOptions=ref({basesList:[],measuresList:[]});
-    const onColumnChecked = (basesList,measuresList) => {
-      console.log(basesList,measuresList);
+    const selectColumnOptions = ref({basesList: [], measuresList: []});
+    const onColumnChecked = (basesList, measuresList) => {
+      console.log(basesList, measuresList);
       formState.value.bases = basesList;
       formState.value.measures = measuresList;
       setTimeout(function () {
@@ -220,6 +225,7 @@ export default defineComponent({
         tempName: '',
         tempNo: '',
         subId: null,
+        tagId: '',
         remark: '',
       },
       sub: {
@@ -285,6 +291,7 @@ export default defineComponent({
     };
 
     const getQuery = () => {
+      loading.value = true
       postData('temp/genQuery', formStateGet()).then(result => {
         console.log(result);
         if (result["code"] != 0) {
@@ -296,6 +303,7 @@ export default defineComponent({
         (displayChartBar.value as any).setData(result);
         (displayChartLine.value as any).setData(result);
         (displayChartYbar.value as any).setData(result);
+        loading.value = false;
       });
     }
 
@@ -312,9 +320,6 @@ export default defineComponent({
       subjectTrees.value.expandedKeys = [];
       if (subjectTrees.value.data && subjectTrees.value.data.length > 0) {
         subjectTrees.value.expandedKeys.push(subjectTrees.value.data[0].key + "");
-        subjectTrees.value.data[0].children?.forEach((it) => {
-          subjectTrees.value.expandedKeys.push(it.key + "");
-        });
       }
       console.log("getSubjectTree", subjectTrees.value, subjectTrees.value.expandedKeys);
     }
@@ -326,6 +331,13 @@ export default defineComponent({
         subjectTrees.value.expandedKeys = [args.node.key];
       }
     }
+    const treeOnSelect = function (selected, selectedNodes, node) {
+      console.log(selected, selectedNodes, node);
+      if (selected && selectedNodes.node.parent != undefined) {
+        formState.value.temp.subId = selectedNodes.node.subId;
+        formState.value.temp.tagId = subjectTrees.value.expandedKeys[0];
+      }
+    }
     const getTemp = async function (tempId) {
       const rtn = await get('temp/get', {tempId: tempId});
       console.log(rtn);
@@ -341,8 +353,8 @@ export default defineComponent({
       (where.value as any).setTagList(rtn.wheres);
       (base.value as any).setTagList(rtn.bases);
 
-      selectColumnOptions.value.basesList= rtn.bases;
-      selectColumnOptions.value.measuresList= rtn.measures;
+      selectColumnOptions.value.basesList = rtn.bases;
+      selectColumnOptions.value.measuresList = rtn.measures;
 
       subjectTrees.value.expandedKeys = [];
       subjectTrees.value.expandedKeys.push(rtn.sub.subId);
@@ -431,7 +443,7 @@ export default defineComponent({
       modal,
       displayReader,
       onDisplayChange,
-      selectOptions, onSelectField, selectOk, onColumnChecked,selectColumnOptions
+      selectOptions, onSelectField, selectOk, onColumnChecked, treeOnSelect, selectColumnOptions, loading
     };
   },
   created() {

+ 9 - 6
vue/src/views/query/table.vue

@@ -82,17 +82,17 @@
               </template>
               <a-popover title="详细信息" :visible="item.visible">
                 <template #content>
-                  <p>维度:{{ item.dimensionName }}</p>
-                  <p>度量:{{ item.measurName }}</p>
+                  <p class="tip-detail">维度:{{ item.dimensionName }}</p>
+                  <p class="tip-detail">度量:{{ item.measurName }}</p>
                 </template>
               </a-popover>
-              <a-row :gutter="[24,4]" @mouseover="item.visible=true" @mouseout="item.visible=false">
+              <a-row :gutter="[24,4]">
                 <a-col :span="10" class="col-text">模板编号:</a-col>
                 <a-col :span="12" class="col-content">{{ item.tempNo }}</a-col>
                 <a-col :span="10" class="col-text">维度:</a-col>
-                <a-col :span="12" class="col-content">{{ item.dimensionName }}</a-col>
+                <a-col :span="12" class="col-content" @mouseover="item.visible=true" @mouseout="item.visible=false">{{ item.dimensionName }}</a-col>
                 <a-col :span="10" class="col-text">度量:</a-col>
-                <a-col :span="12" class="col-content">{{ item.measurName }}</a-col>
+                <a-col :span="12" class="col-content" @mouseover="item.visible=true" @mouseout="item.visible=false">{{ item.measurName }}</a-col>
                 <a-col :span="10" class="col-text">创建人:</a-col>
                 <a-col :span="12">{{ item.createdName }}</a-col>
                 <a-col :span="10" class="col-text">创建/更新日期:</a-col>
@@ -275,7 +275,10 @@ export default defineComponent({
   background: #fafafa;
   border-top: 1px solid #f0f0f0;
 }
-
+.tip-detail{
+  flex-wrap: wrap;
+  max-width: 500px;
+}
 .col-text {
   padding-right: 0px !important;
   text-align: right;

+ 120 - 115
vue/src/views/subject/edit.vue

@@ -1,121 +1,123 @@
 <template>
   <div class="card-edit">
-    <a-form :model="dataModel" @finish="onFinish" autocomplete="off">
-      <a-divider orientation="left">主题定义</a-divider>
-      <a-row :gutter="24">
-        <a-col :span="8">
-          <a-form-item :label-col="{span:6}" label="主题名称" name="subjectName"
-                       :rules="[{ required: true, message: '请填写主题名称!' }]">
-            <a-input v-model:value="dataModel.subjectName" placeholder="">
-            </a-input>
-          </a-form-item>
-        </a-col>
-        <a-col :span="8">
-          <a-form-item :label-col="{span:6}" label="表编码" name="tabCode"
-                       :rules="[{ required: true, message: '请填写表编码!' }]">
-            <a-input v-model:value="dataModel.tabCode" placeholder="">
-            </a-input>
-          </a-form-item>
-        </a-col>
-        <a-col :span="8">
-          <a-form-item :label-col="{span:6}" label="表名称" name="tabName"
-                       :rules="[{ required: true, message: '请填表名称!' }]">
-            <a-input v-model:value="dataModel.tabName" placeholder="">
-            </a-input>
-          </a-form-item>
-        </a-col>
-      </a-row>
-      <a-row :gutter="24">
-        <a-col :span="8">
-          <a-form-item :label-col="{span:8}" label="是否有外键字段" name="isReferences"
-                       :rules="[{ required: true, message: '请填写是否有外键字段!' }]">
-            <a-radio-group v-model:value="dataModel.isReferences">
-              <a-radio :value="1">是</a-radio>
-              <a-radio :value="0">否</a-radio>
-            </a-radio-group>
-          </a-form-item>
-        </a-col>
-        <a-col :span="8">
-          <a-form-item label="标签" name="tagList" :label-col="{span:6}"
-                       :rules="[{ required: true, message: '请选择标签' }]">
-            <a-select
-              v-model:value="dataModel.tagList"
-              mode="tags"
-              style="width: 100%"
-              :options="tagOptions">
-            </a-select>
-          </a-form-item>
-        </a-col>
-        <a-col :span="8">
-          <a-form-item :label-col="{span:6}" label="描述" name="tabDesc">
-            <a-input v-model:value="dataModel.tabDesc" placeholder="">
-            </a-input>
-          </a-form-item>
-        </a-col>
-      </a-row>
-      <a-divider orientation="left">字段定义</a-divider>
-      <a-row>
-        <a-col :span="24" style="margin-right: 20px;">
-          <div style="float: right;">
-            <Space>
-              <BImportExcel :options="importOptions" @success="onImportSuccess"></BImportExcel>
-              &nbsp;
-              <a-button @click="add()">
-                <template #icon>
-                  <plus-circle-outlined/>
+    <a-spin :spinning="loading">
+      <a-form :model="dataModel" @finish="onFinish" autocomplete="off">
+        <a-divider orientation="left">主题定义</a-divider>
+        <a-row :gutter="24">
+          <a-col :span="8">
+            <a-form-item :label-col="{span:6}" label="主题名称" name="subjectName"
+                         :rules="[{ required: true, message: '请填写主题名称!' }]">
+              <a-input v-model:value="dataModel.subjectName" placeholder="">
+              </a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-item :label-col="{span:6}" label="表编码" name="tabCode"
+                         :rules="[{ required: true, message: '请填写表编码!' }]">
+              <a-input v-model:value="dataModel.tabCode" placeholder="">
+              </a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-item :label-col="{span:6}" label="表名称" name="tabName"
+                         :rules="[{ required: true, message: '请填表名称!' }]">
+              <a-input v-model:value="dataModel.tabName" placeholder="">
+              </a-input>
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="8">
+            <a-form-item :label-col="{span:8}" label="是否有外键字段" name="isReferences"
+                         :rules="[{ required: true, message: '请填写是否有外键字段!' }]">
+              <a-radio-group v-model:value="dataModel.isReferences">
+                <a-radio :value="1">是</a-radio>
+                <a-radio :value="0">否</a-radio>
+              </a-radio-group>
+            </a-form-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-item label="标签" name="tagList" :label-col="{span:6}"
+                         :rules="[{ required: true, message: '请选择标签' }]">
+              <a-select
+                v-model:value="dataModel.tagList"
+                mode="tags"
+                style="width: 100%"
+                :options="tagOptions">
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-item :label-col="{span:6}" label="描述" name="tabDesc">
+              <a-input v-model:value="dataModel.tabDesc" placeholder="">
+              </a-input>
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-divider orientation="left">字段定义</a-divider>
+        <a-row>
+          <a-col :span="24" style="margin-right: 20px;">
+            <div style="float: right;">
+              <Space>
+                <BImportExcel :options="importOptions" @success="onImportSuccess"></BImportExcel>
+                &nbsp;
+                <a-button @click="add()">
+                  <template #icon>
+                    <plus-circle-outlined/>
+                  </template>
+                  新增
+                </a-button>
+              </Space>
+            </div>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col style="margin-bottom: 20px;">
+            <a-table :columns="columns" :data-source="fieldData" :scroll="{ x:'100%', y: 500 }" :pagination="false"
+                     bordered>
+              <template #bodyCell="{ column ,record,index}">
+                <template v-if="column.key === 'operation'">
+                  <a-button type="link" size="small" @click="edit(record)">修改</a-button>
+                  <a-popconfirm placement="leftTop"
+                                title="是否删除数据?"
+                                @confirm="onDelete(index)">
+                    <a-button type="link" size="small">删除</a-button>
+                  </a-popconfirm>
                 </template>
-                新增
-              </a-button>
-            </Space>
-          </div>
-        </a-col>
-      </a-row>
-      <a-row>
-        <a-col style="margin-bottom: 20px;">
-          <a-table :columns="columns" :data-source="fieldData" :scroll="{ x:'100%', y: 500 }" :pagination="false"
-                   bordered>
-            <template #bodyCell="{ column ,record,index}">
-              <template v-if="column.key === 'operation'">
-                <a-button type="link" size="small" @click="edit(record)">修改</a-button>
-                <a-popconfirm placement="leftTop"
-                              title="是否删除数据?"
-                              @confirm="onDelete(index)">
-                  <a-button type="link" size="small">删除</a-button>
-                </a-popconfirm>
               </template>
-            </template>
-          </a-table>
-        </a-col>
-      </a-row>
-      <a-divider orientation="left">Sql预览</a-divider>
-      <a-row>
-        <a-col class="table-bottom-a1">
-          <a-form-item :label-col="{span:8}" label="" name="remark">
-            <codemirror
-              v-model="dataModel.execSql"
-              :style="{ height: '100px',width:'100%' ,fontSize:'16px'}"
-              :autofocus="true"
-              :indent-with-tab="true"
-              :lang="lang"
-              disabled="false"
-              tab-size="2"
-              :extensions="[sql(),solarizedLight]"
-            />
-          </a-form-item>
-        </a-col>
-      </a-row>
-      <a-row>
-        <a-col :span="24" style="text-align: right;margin: 20px;">
-          <Space>
-            <a-form-item class="buttom-btns">
-              <a-button @click="onClose">取消</a-button>
-              <a-button type="primary" html-type="submit">提交</a-button>
+            </a-table>
+          </a-col>
+        </a-row>
+        <a-divider orientation="left">Sql预览</a-divider>
+        <a-row>
+          <a-col class="table-bottom-a1">
+            <a-form-item :label-col="{span:8}" label="" name="remark">
+              <codemirror
+                v-model="dataModel.execSql"
+                :style="{ height: '100px',width:'100%' ,fontSize:'16px'}"
+                :autofocus="true"
+                :indent-with-tab="true"
+                :lang="lang"
+                disabled="false"
+                tab-size="2"
+                :extensions="[sql(),solarizedLight]"
+              />
             </a-form-item>
-          </Space>
-        </a-col>
-      </a-row>
-    </a-form>
-    <FieldEdit ref="modalRef" :onSave="onFieldSave"></FieldEdit>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :span="24" style="text-align: right;margin: 20px;">
+            <Space>
+              <a-form-item class="buttom-btns">
+                <a-button @click="onClose">取消</a-button>
+                <a-button type="primary" html-type="submit">提交</a-button>
+              </a-form-item>
+            </Space>
+          </a-col>
+        </a-row>
+      </a-form>
+      <FieldEdit ref="modalRef" :onSave="onFieldSave"></FieldEdit>
+    </a-spin>
   </div>
 </template>
 
@@ -161,6 +163,7 @@ export default defineComponent({
     const settingTypeList = ref([{name: '', value: ''}]);
     const queryTypeList = ref([{name: '', value: ''}]);
     const tagOptions = ref();
+    const loading = ref(false);
     let isEdit = false;
 
     get('subject/getTagList', {}).then((data: any[]) => {
@@ -172,7 +175,9 @@ export default defineComponent({
         message.warn("尚未添加任何字段定义。");
         return;
       }
+      loading.value = true;
       save('/subject/saveSubject', {dataModel: formState.dataModel, fieldList: fieldData.value}).then(result => {
+        loading.value = false;
         if (result) {
           onClose(1)
         }
@@ -311,8 +316,8 @@ export default defineComponent({
       edit, importOptions,
       onDelete,
       loadData, solarizedLight,
-      fieldData, columns, sql,
-      isEdit, data,  modalRef,tagOptions,
+      fieldData, columns, sql, loading,
+      isEdit, data, modalRef, tagOptions,
     };
   },
   created() {