unknown 5 лет назад
Родитель
Сommit
cbdc6a3a21

+ 48 - 3
o2web/source/x_component_process_DictionaryDesigner/Dictionary.js

@@ -71,6 +71,9 @@ MWF.xApplication.process.DictionaryDesigner.Dictionary = new Class({
                 try{
                     var value = _self.scriptEditor.getValue();
                     var v = JSON.parse(value);
+                    if( !this.checkValid(v) ){
+                        return;
+                    }
 
                     if (!this.isShow){
                         this.tab.pages.each(function(page){
@@ -108,7 +111,12 @@ MWF.xApplication.process.DictionaryDesigner.Dictionary = new Class({
             if( this.scriptEditor && this.isChanged){
                 try{
                     var value = this.scriptEditor.getValue();
-                    this.data.data = JSON.parse(value);
+                    var data = JSON.parse(value);
+                    if( this.checkValid(data) ){
+                        this.data.data = data;
+                    }else{
+                        return;
+                    }
                     this.reload();
                     this.isChanged = false;
                 }catch (e) {
@@ -118,6 +126,31 @@ MWF.xApplication.process.DictionaryDesigner.Dictionary = new Class({
             this.fireEvent("resize");
         }.bind(this));
     },
+    checkValid( obj, silence ){
+        if( typeOf(obj) !== "object" ){
+            return true;
+        }
+        var keys = Object.keys(obj);
+        if( keys.length !== keys.unique().length ){
+            if(!silence)this.designer.notice(this.designer.lp.notice.sameObjectKey, "error", this.node, {"x": "left", "y": "bottom"});
+            return false;
+        }
+        for (var key in obj) {
+            if( !key || key.trim() === "" ){
+                if(!silence)this.designer.notice(this.designer.lp.notice.emptyObjectKey, "error", this.node, {"x": "left", "y": "bottom"});
+                return false;
+            }
+            if (!isNaN(parseFloat(key))){
+                if(!silence)this.designer.notice(this.designer.lp.notice.numberObjectKey, "error", this.node, {"x": "left", "y": "bottom"});
+                return false;
+            }
+
+            if( typeOf(obj[key]) === "object" ){
+                if( !this.checkValidJson( obj[key] ) )return false;
+            }
+        }
+        return true;
+    },
     loadScriptEditor:function(){
         var value = JSON.stringify(this.data.data, null, "\t");
         this.scriptEditor = new MWF.widget.JavascriptEditor(this.scriptNode, {"option": {"value": value, "mode" : "json" }});
@@ -243,7 +276,13 @@ MWF.xApplication.process.DictionaryDesigner.Dictionary = new Class({
                 if( this.scriptEditor ){
                     try{
                         var value = this.scriptEditor.getValue();
-                        this.data.data = JSON.parse(value);
+                        var data = JSON.parse(value);
+                        if( this.checkValid(data, true) ){
+                            this.data.data = data;
+                        }else{
+                            return false;
+                        }
+
                     }catch (e) {
                         return false;
                     }
@@ -284,7 +323,13 @@ MWF.xApplication.process.DictionaryDesigner.Dictionary = new Class({
                     if( this.scriptEditor ){
                         try{
                             var value = this.scriptEditor.getValue();
-                            this.data.data = JSON.parse(value);
+                            var data = JSON.parse(value);
+                            if( this.checkValid(data) ){
+                                this.data.data = data;
+                            }else{
+                                return false;
+                            }
+
                         }catch (e) {
                             this.designer.notice( this.designer.lp.notice.jsonParseError, "error", this.node, {"x": "left", "y": "bottom"});
                             return false;

+ 4 - 0
o2web/source/x_component_process_DictionaryDesigner/lp/zh-cn.js

@@ -34,6 +34,10 @@ MWF.xApplication.process.DictionaryDesigner.LP = {
         "emptyKey": "项目名称不能为空,请重新输入",
         "numberKey": "项目名称不能为数字,请重新输入",
 
+        "sameObjectKey": "项目名称重复",
+        "emptyObjectKey": "项目名称不能为空",
+        "numberObjectKey": "项目名称不能为数字",
+
         "inputName": "请输入数据字典名称和别名",
         "noModifyName": "不能修改名称或者别名",
         "jsonParseError" : "json格式错误,请先修正"