centaline-data-driven 1.2.80 → 1.2.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -133,9 +133,9 @@
133
133
  </tbody>
134
134
  </table>
135
135
  </div>
136
- <div v-else>
137
- <div v-for="(row,rowindex) in model.listData" :key="rowindex">
138
- <ct-layout :vmodel="row" :cellLayout="model.cellLayout" :rowindex="rowindex" :actionRouter="model.actionRouter"></ct-layout>
136
+ <div class="ct-Layout" v-else>
137
+ <div v-for="(row,rowindex) in model.layoutData" :key="rowindex">
138
+ <ct-layout :ref="'layoutrows.'+rowindex" :vmodel="row" :rowindex="rowindex" @click="rolRouterCellClickHandler"></ct-layout>
139
139
  </div>
140
140
  </div>
141
141
  </div>
@@ -879,6 +879,193 @@
879
879
  clickAcion();
880
880
  }
881
881
  },
882
+ rolRouterCellClickHandler(routerKey, rowindex, forname, forrowindex) {
883
+ var self = this;
884
+ var submitData = {};
885
+ var rowData = self.model.listData[rowindex];
886
+ var actionRouter = self.model.actionRouter;
887
+ let field = actionRouter.find(b => {
888
+ return b.id === routerKey;
889
+ });
890
+ if (typeof forname !== "undefined") {
891
+ field.submitListField.forEach((k) => {
892
+ submitData[k] = rowData[forname][forrowindex][k];
893
+ });
894
+ }
895
+ else {
896
+ field.submitListField.forEach((k) => {
897
+ submitData[k] = rowData[k];
898
+ });
899
+ }
900
+ let action = field.action;
901
+ if (field.actionField) {
902
+ action = rowData[field.actionField];
903
+ }
904
+ this.routerCellClickHandler(field, submitData, action, rowindex, forname, forrowindex);
905
+ },
906
+ routerCellClickHandler(field, submitData, action, rowindex, forname, forrowindex) {
907
+ let self = this;
908
+ action = action || field.action;
909
+
910
+ var clickAcion = function () {
911
+ //若不是客户端方法,则直接访问接口
912
+ if (!field.isClientFuntion) {
913
+ // 外部框架tab页打开
914
+ if (field.isFormPageInTab) {
915
+ submitData = field.getActionPara(submitData).para;
916
+ if (field.pageStyle) {
917
+ submitData.pageStyle = field.pageStyle;
918
+ }
919
+ self.$common.getDataDrivenOpts().handler.openTab(action, submitData, field.pageTitle, self.model, field.dialogWidth);
920
+ }
921
+ else if (field.isSearchPageInTab) {// 外部框架tab页打开
922
+ submitData = field.getActionPara(submitData).para;
923
+ self.$common.getDataDrivenOpts().handler.openTabSearch(field, submitData);
924
+ }
925
+ else if (field.isBrowserNewTab) {// 浏览器打开
926
+ submitData = field.getActionPara(submitData).para;
927
+ let query = self.$common.objectToQueryStr(submitData);
928
+ window.open(action + query, "_blank");
929
+ }
930
+ else {
931
+ //self.operationLoading = true;
932
+
933
+ //Form
934
+ if (field.isOpenForm) {
935
+ var dialogOption = {
936
+ title: field.pageTitle,
937
+ pane: self.$common.getParentPane(self),
938
+ content: [{
939
+ component: field.navToNewPageName,
940
+ attrs: {
941
+ //source: data.content,
942
+ api: action,
943
+ apiParam: field.getActionPara(submitData).para,
944
+ showTitle: false,
945
+ width: field.dialogWidth + 'px',
946
+ height: field.dialogHeight + 'px'
947
+ },
948
+ on: {
949
+ submit(ev) {
950
+ if (!field.flagFreshCurrentRow && !field.flagAddRowAfterAction) {
951
+ self.model.doAction(ev);
952
+ }
953
+ self.$forceUpdate();
954
+ self.$common.closeDialog(dialogOption.dialog);
955
+ self.updateCurrentRow(field, ev);
956
+ },
957
+ refreshParent() {
958
+ self.getPage(1);
959
+ self.$common.closeDialog(dialogOption.dialog);
960
+ },
961
+ closeDialog() {
962
+ self.updateCurrentRow(field);
963
+ }
964
+ }
965
+ }]
966
+ };
967
+ self.$common.openDialog(dialogOption);
968
+ }
969
+ //SearchList
970
+ else if (field.isOpenList) {
971
+ var dialogOption = {
972
+ title: field.pageTitle,
973
+ pane: self.$common.getParentPane(self),
974
+ content: [{
975
+ component: field.navToNewPageName,
976
+ attrs: {
977
+ searchConditionApi: field.actionForSearchLayout,
978
+ searchDataApi: field.actionForSearch,
979
+ apiParam: submitData,
980
+ width: field.dialogWidth + 'px',
981
+ height: field.dialogHeight + 'px'
982
+ },
983
+ on: {
984
+ refreshParent() {
985
+ self.getPage(1);
986
+ self.$common.closeDialog(dialogOption.dialog);
987
+ },
988
+ closeDialog() {
989
+ self.updateCurrentRow(field);
990
+ }
991
+ }
992
+ }]
993
+ };
994
+ self.$common.openDialog(dialogOption);
995
+ }
996
+ //Tabs
997
+ else if (field.isOpenTabs) {
998
+ var dialogOption = {
999
+ title: field.pageTitle,
1000
+ pane: self.$common.getParentPane(self),
1001
+ content: [{
1002
+ component: field.navToNewPageName,
1003
+ attrs: {
1004
+ searchConditionApi: field.actionForSearchLayout,
1005
+ searchDataApi: field.actionForSearch,
1006
+ apiParam: submitData,
1007
+ width: field.dialogWidth + 'px',
1008
+ height: field.dialogHeight + 'px'
1009
+ },
1010
+ on: {
1011
+ }
1012
+ }]
1013
+ };
1014
+ self.$common.openDialog(dialogOption);
1015
+ }
1016
+ else {
1017
+ field.doAction(submitData, (data) => {
1018
+ self.model.doAction(data, field);
1019
+ if (field.actionType === 19) {
1020
+ self.callTelClick(self.$refs['layout' + rowindex].$refs.layoutchildren, data, forname, forrowindex)
1021
+ }
1022
+ })
1023
+ }
1024
+ }
1025
+ }
1026
+ //执行客户端脚本
1027
+ else {
1028
+ // let parm={submitData:submitData,field:field}
1029
+ // self.$common.excuteFunStr.call(self.model.scripts, field.action,parm);
1030
+ let title = field.pageTitle == undefined ? field.label : field.pageTitle;
1031
+ submitData.actionType = field.actionType;
1032
+ var fun = self.$common.getDataDrivenOpts().handler[action];
1033
+ fun(submitData, title, self.model);
1034
+ // var fun = self.model.scripts.formData[action];
1035
+ // fun(submitData,field);
1036
+ }
1037
+ }
1038
+
1039
+ if (field.alert) {
1040
+ self.$common.confirm(field.alertMsg, field.alertCaption, {
1041
+ confirmButtonText: field.alertOKButtonText,
1042
+ cancelButtonText: field.alertCancelButtonText,
1043
+ //type: 'warning'
1044
+ center: field.alertCenter
1045
+ }).then(() => {
1046
+ clickAcion();
1047
+ }).catch(() => {
1048
+ });
1049
+ }
1050
+ else {
1051
+ clickAcion();
1052
+ }
1053
+ },
1054
+ callTelClick(VueCom, data, forname, forrowindex) {
1055
+ if (typeof VueCom.$refs['router' + forname + forrowindex] !== "undefined") {
1056
+ VueCom.callTelClick(data);
1057
+ return true;
1058
+ }
1059
+ if (VueCom.$children.length > 0) {
1060
+ for (var i = 0; i < VueCom.$children.length; i++) {
1061
+ var item = VueCom.$children[i];
1062
+ var result = this.callTelClick(item, data, forname, forrowindex);
1063
+ if (result) {
1064
+ return result;
1065
+ }
1066
+ }
1067
+ }
1068
+ },
882
1069
  selectAll($ev) {
883
1070
  this.model.listData.forEach((ro) => {
884
1071
  if (!this.model.rightMulti || ro[this.model.rightMulti] == 1) {
@@ -1211,4 +1398,7 @@
1211
1398
  .el-popover1 {
1212
1399
  min-width: inherit !important;
1213
1400
  }
1401
+ .ct-Layout {
1402
+ font-size: 12px;
1403
+ }
1214
1404
  </style>
@@ -10,6 +10,13 @@ const CellLayout = function (source) {
10
10
  return source.is;
11
11
  },
12
12
  get value() {
13
+ if (source.scale) {
14
+ var reg = /\d+(\.\d+)?/;
15
+ if (reg.test(source.value)) {
16
+ return parseFloat(source.value).toFixed(source.scale); ;
17
+ }
18
+ return source.value;
19
+ }
13
20
  return source.value;
14
21
  },
15
22
  get routerKey() {
@@ -18,6 +25,15 @@ const CellLayout = function (source) {
18
25
  get orientation() {
19
26
  return source.orientation;
20
27
  },
28
+ get placeholder() {
29
+ return source.placeholder;
30
+ },
31
+ get errorPlaceholder() {
32
+ return source.errorPlaceholder;
33
+ },
34
+ get errorPlaceholder() {
35
+ return source.errorPlaceholder;
36
+ },
21
37
  get forname() {
22
38
  return source.for;
23
39
  },
@@ -77,7 +93,6 @@ const CellLayout = function (source) {
77
93
  self._styleObject.width = "100%";
78
94
  }
79
95
  else if (source.width == "-1") {
80
-
81
96
  }
82
97
  else {
83
98
  self._styleObject.width = source.width + "px";
@@ -89,6 +104,7 @@ const CellLayout = function (source) {
89
104
  self._styleObject.height = "100%";
90
105
  }
91
106
  else if (source.height == "-1") {
107
+
92
108
  }
93
109
  else {
94
110
  self._styleObject.height = source.height + "px";
@@ -133,11 +149,45 @@ const CellLayout = function (source) {
133
149
  }
134
150
 
135
151
  }
152
+ if (typeof source.shadowWidth !== 'undefined' && typeof source.shadowColor !== 'shadowColor') {
153
+ if (source.shadowWidth.trim().indexOf(" ") != -1) {
154
+ self._styleObject.boxShadow = source.shadowWidth.replace(/\s+/g, "px ") + 'px ' + source.shadowColor;
155
+ }
156
+ else {
157
+ self._styleObject.boxShadow = source.shadowWidth + 'px ' + source.shadowWidth + 'px ' + source.shadowColor;
158
+ }
159
+ }
160
+ if (typeof source.gradientColor !== 'undefined') {
161
+ if (typeof source.gradientDirection !== 'undefined') {
162
+ if (source.gradientDirection == 'vertical') {
163
+ self._styleObject.backgroundImage = 'linear-gradient(to right,' + source.gradientColor.replace(/-/g, ",") + ')';
164
+ }
165
+ else {
166
+ self._styleObject.backgroundImage = 'linear-gradient(' + source.gradientColor.replace(/-/g, ",") + ')';
167
+ }
168
+
169
+ }
170
+ else {
171
+ self._styleObject.backgroundImage = 'linear-gradient(' + source.gradientColor.replace(/-/g, ",") + ')';
172
+ }
173
+ }
174
+ if (typeof source.visibility !== 'undefined') {
175
+ self._styleObject.visibility = source.visibility;
176
+ }
177
+ if (typeof source.weight !== 'undefined') {
178
+ self._styleObject.flex = source.weight;
179
+ }
180
+ if (typeof source.maxLines !== 'undefined') {
181
+ self._styleObject.WebkitLineClamp = source.maxLines;
182
+ self._styleObject.WebkitBoxOrient = "vertical";
183
+ self._styleObject.display = "-webkit-box";
184
+ self._styleObject.overflow = "hidden";
185
+ }
136
186
  return self._styleObject;
137
187
  },
138
188
  getCurrentRowApiData(rtnData, router) {
139
189
  var self = this;
140
- var searchFields = self.apiRouter.getSearchPara();
190
+ var searchFields = router.getSearchPara();
141
191
  var searchValue1 = router.flagAddRowAfterAction ? rtnData.content : rtn.listData[rtn.selectIndex][self.primaryKey];
142
192
  if (self.primaryKey) {
143
193
  searchFields.fields.push({
@@ -190,7 +240,7 @@ const CellLayout = function (source) {
190
240
  break;
191
241
  case Enum.ActionType.Update://修改
192
242
  case Enum.ActionType.CloseTabThenUpdate://修改
193
-
243
+
194
244
  break;
195
245
  default:
196
246
  break;
@@ -466,38 +466,85 @@ const FormList = function (source, master) {
466
466
  insertOrUpdateRow(row) {
467
467
  if(row){
468
468
  if(rtn.primaryKeys && rtn.primaryKeys.length>0){
469
+ let iRow = this.initRow(row);
470
+ let flagAdd=true;
469
471
  rtn.rows.forEach((r,i) => {
470
- console.log(r)
471
-
472
+ let countKey=0;
473
+ rtn.primaryKeys.forEach((k) => {
474
+ let fieldOld=r.field.find((v) => {
475
+ return v.id === k;
476
+ });
477
+ let fieldNew=iRow.field.find((v) => {
478
+ return v.id === k;
479
+ });
480
+ if(fieldOld.code1===fieldNew.code1){
481
+ countKey++;
482
+ }
483
+ })
484
+ if(countKey===rtn.primaryKeys.length){
485
+ flagAdd=false;
486
+ if(iRow.deleted){
487
+ rtn.tableData.forEach((d,index) => {
488
+ if(d.$sourceIndex===r.$sourceIndex){
489
+ rtn.tableData.splice(index, 1);
490
+ }
491
+ });
492
+ if (r.isNewFlag) {
493
+ rtn.rows.splice(i, 1);
494
+ source.rows.splice(i, 1);
495
+ }
496
+ else {
497
+ rtn.rows[i].deleted = true;
498
+ }
499
+ }
500
+ else{
501
+ rtn.rows.splice(i, 1,iRow);
502
+ }
503
+ }
472
504
  });
505
+ if(flagAdd){
506
+ let rows=[];
507
+ rows.push(row);
508
+ rtn.insertRow(rows)
509
+ }
473
510
  }
474
511
  else{
475
512
  let rows=[];
476
513
  rows.push(row);
477
514
  rtn.insertRow(rows)
478
515
  }
479
- // source.rows.push(r);
480
- // let iRow = this.initRow(r);
481
- // iRow.isNewFlag = true;
482
- // rtn._rows.push(iRow);
483
- // Vue.set(r, 'edit', iRow.edit);
484
- // Vue.set(r, 'delete', iRow.delete);
485
- // r.$sourceIndex = rtn._rows.length - 1;
486
-
487
- // let rowData = rtn.rowsItemToTableData(iRow)
488
- // rowData.$sourceIndex = rtn._rows.length - 1;
489
- // rowData.edit = iRow.edit;
490
- // rowData.delete = iRow.delete;
491
- // rtn._tableData.push(rowData);
492
516
  }
493
517
  },
494
518
  delRow(row) {
495
- debugger
496
519
  if(row && rtn.primaryKeys && rtn.primaryKeys.length>0){
520
+ let iRow = this.initRow(row);
497
521
  rtn.rows.forEach((r,i) => {
498
- debugger
499
- console.log(r)
500
-
522
+ let countKey=0;
523
+ rtn.primaryKeys.forEach((k) => {
524
+ let fieldOld=r.field.find((v) => {
525
+ return v.id === k;
526
+ });
527
+ let fieldNew=iRow.field.find((v) => {
528
+ return v.id === k;
529
+ });
530
+ if(fieldOld.code1===fieldNew.code1){
531
+ countKey++;
532
+ }
533
+ })
534
+ if(countKey===rtn.primaryKeys.length){
535
+ rtn.tableData.forEach((d,index) => {
536
+ if(d.$sourceIndex===r.$sourceIndex){
537
+ rtn.tableData.splice(index, 1);
538
+ }
539
+ });
540
+ if (r.isNewFlag) {
541
+ rtn.rows.splice(i, 1);
542
+ source.rows.splice(i, 1);
543
+ }
544
+ else {
545
+ rtn.rows[i].deleted = true;
546
+ }
547
+ }
501
548
  });
502
549
  }
503
550
  },
@@ -236,6 +236,24 @@ const SearchTable = function (data, callBack, searchModel, flagSearch, defaultSe
236
236
  set listData(v) {
237
237
  source.content.rows = v;
238
238
  },
239
+ _LayoutData: null,
240
+ get layoutData() {
241
+ var cellLayout = source.content.cellLayout;
242
+ if (rtn._LayoutData !== null) {
243
+ return rtn._LayoutData;
244
+ }
245
+ else {
246
+ rtn._LayoutData = [];
247
+ if (cellLayout!='') {
248
+ source.content.rows.forEach((data) => {
249
+ var Layout = rtn.xmlToJsonCell(data,cellLayout);
250
+ rtn._LayoutData.push(Layout);
251
+ });
252
+ }
253
+ return rtn._LayoutData;
254
+ }
255
+
256
+ },
239
257
  get isMulti() {//是否多选
240
258
  if (this.isMergeTitle) {
241
259
  return false;//合并表头暂不支持多选
@@ -572,16 +590,17 @@ const SearchTable = function (data, callBack, searchModel, flagSearch, defaultSe
572
590
  console.error(error);
573
591
  });
574
592
  },
575
- getCurrentRowApiData(callback,rtnData,router) {
593
+ getCurrentRowApiData(callback, rtnData, router) {
576
594
  var self = this;
577
595
  var searchFields = this.searchModel ? this.searchModel.searchData : { fields: [] };
596
+ var searchValue1 = router.flagAddRowAfterAction ? rtnData.responseData.content : rtn.listData[rtn.selectIndex][self.primaryKey];
578
597
  if (self.primaryKey) {
579
598
  searchFields.fields.push({
580
599
  fieldName1: self.primaryFieldMappingDBName ? self.primaryFieldMappingDBName : self.primaryKey,
581
600
  groupName: self.primaryKey,
582
601
  operation: 2,
583
602
  searchDataType: 3,
584
- searchValue1: router.flagAddRowAfterAction? rtnData.responseData.content: rtn.listData[rtn.selectIndex][self.primaryKey],
603
+ searchValue1: searchValue1,
585
604
  });
586
605
  }
587
606
  Vue.prototype.$api.postHandler(common.globalUri(), {
@@ -605,12 +624,17 @@ const SearchTable = function (data, callBack, searchModel, flagSearch, defaultSe
605
624
  source.page.rows = source.page.rows + response.content.rows.length;
606
625
  rtn.$vue.calculatingRowHeight()
607
626
  }
608
- else{
609
- response.content.rows.forEach((row) => {
610
- for (var vkey in row) {
611
- rtn.dataDictionary[row[rtn.primaryKey]][vkey] = row[vkey];
612
- }
613
- });
627
+ else {
628
+ if (rtn.cellLayout != "") {
629
+ rtn.doUpdateCell(response.content, searchValue1);
630
+ }
631
+ else {
632
+ response.content.rows.forEach((row) => {
633
+ for (var vkey in row) {
634
+ rtn.dataDictionary[row[rtn.primaryKey]][vkey] = row[vkey];
635
+ }
636
+ });
637
+ }
614
638
  }
615
639
  }
616
640
 
@@ -778,6 +802,7 @@ const SearchTable = function (data, callBack, searchModel, flagSearch, defaultSe
778
802
  break;
779
803
  case Enum.ActionType.Update://修改
780
804
  case Enum.ActionType.CloseTabThenUpdate://修改
805
+ debugger
781
806
  response.content.forEach((row) => {
782
807
  for (var vkey in row) {
783
808
  rtn.dataDictionary[row[rtn.primaryKey]][vkey] = row[vkey];
@@ -868,12 +893,194 @@ const SearchTable = function (data, callBack, searchModel, flagSearch, defaultSe
868
893
  get sideBarWidth() {
869
894
  return source.content.sideBarWidth || 360;
870
895
  },
896
+ getValue(data, val) {
897
+ return val.split('.').reduce((data, currentVal) => {
898
+ var rtn = data[currentVal];
899
+ if (typeof rtn !== 'undefined') {
900
+ rtn = rtn.toString().replace(/"/g, "'");
901
+ rtn = rtn.replace(/>/g, "&gt;");
902
+ rtn = rtn.replace(/</g, "&lt;");
903
+ }
904
+ else {
905
+ rtn = "";
906
+ }
907
+ return rtn
908
+ }, data)
909
+ },
910
+ loadXML(xmlString) {
911
+ xmlString = xmlString.replace(/\n/g, '').trim()
912
+ let replacer = function (match, p1, p2, p3, offset) {
913
+ return p1 + p3
914
+ }
915
+ xmlString = xmlString.replace(/(>)(\s*)(<)/g, replacer)
916
+ if (document.all) {
917
+ var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
918
+ xmlDom.loadXML(xmlString)
919
+ return xmlDom
920
+ }
921
+ else {
922
+ return new DOMParser().parseFromString(xmlString, "text/xml");
923
+ }
924
+ },
925
+ xmlToString(xmlObj) {
926
+ if (document.all) //IE浏览器
927
+ {
928
+ return xmlObj.xml;
929
+ }
930
+ else //其他浏览器
931
+ {
932
+ return (new XMLSerializer()).serializeToString(xmlObj);
933
+ }
934
+ },
935
+ getxmlForStr(xml) {
936
+ if (xml.nodeType == 1) { // element
937
+ // do attributes
938
+ if (xml.attributes.length > 0) {
939
+ for (var j = 0; j < xml.attributes.length; j++) {
940
+ var attribute = xml.attributes.item(j);
941
+ if (attribute.nodeName.toLowerCase() == "for".toLowerCase()) {
942
+ return xml
943
+ }
944
+ }
945
+ }
946
+ }
947
+ if (xml.hasChildNodes()) {
948
+ for (var i = 0; i < xml.childNodes.length; i++) {
949
+ var item = xml.childNodes.item(i);
950
+ var result = rtn.getxmlForStr(item);
951
+ if (result) {
952
+ return result;
953
+ }
954
+ }
955
+ }
956
+ },
957
+
958
+ xmlToJson(xml) {
959
+ var self = this;
960
+ // Create the return object
961
+ var obj = {};
962
+ if (xml.nodeName.toLowerCase() == "Layout".toLowerCase() || xml.nodeName.toLowerCase() == "StackLayout".toLowerCase()) {
963
+ obj["is"] = "ct-layout";
964
+ }
965
+ else if (xml.nodeName.toLowerCase() == "Label".toLowerCase()) {
966
+ obj["is"] = "ct-layoutlabel";
967
+ }
968
+ else if (xml.nodeName.toLowerCase() == "Line".toLowerCase()) {
969
+ obj["is"] = "ct-layoutline";
970
+ }
971
+ else if (xml.nodeName.toLowerCase() == "Image".toLowerCase()) {
972
+ obj["is"] = "ct-layoutimage";
973
+ }
974
+ if (xml.nodeType == 1) { // element
975
+ // do attributes
976
+ if (xml.attributes.length > 0) {
977
+ for (var j = 0; j < xml.attributes.length; j++) {
978
+ var attribute = xml.attributes.item(j);
979
+ obj[attribute.nodeName] = attribute.nodeValue;
980
+ if (attribute.nodeName.toLowerCase() == "for".toLowerCase()) {
981
+ obj["is"] = "ct-layoutchildren";
982
+ }
983
+ if (attribute.nodeName.toLowerCase() == "routerKey".toLowerCase()) {
984
+ var actionRouter = self.actionRouter;
985
+ let field = actionRouter.find(b => {
986
+ return b.id === attribute.nodeValue;
987
+ });
988
+ if (typeof field !== "undefined") {
989
+ if (!field.rightField || self.listData[field.rightField] == 1) {
990
+ obj["rightRouter"] = true;
991
+ }
992
+ }
993
+ }
994
+ }
995
+ }
996
+ }
997
+
998
+ // do children
999
+ if (xml.hasChildNodes()) {
1000
+ for (var i = 0; i < xml.childNodes.length; i++) {
1001
+ var item = xml.childNodes.item(i);
1002
+ if (typeof (obj["fields"]) == "undefined") {
1003
+ obj["fields"] = [];
1004
+ obj["fields"].push(this.xmlToJson(item));
1005
+ } else {
1006
+ if (typeof (obj["fields"].push) == "undefined") {
1007
+ var old = obj["fields"];
1008
+ obj["fields"] = [];
1009
+ obj["fields"].push(old);
1010
+ }
1011
+ obj["fields"].push(rtn.xmlToJson(item));
1012
+ }
1013
+ }
1014
+ }
1015
+ return obj;
1016
+ },
1017
+ xmlToJsonCell(data,cellLayout) {
1018
+ var str = '';
1019
+ var cellLayoutNew = cellLayout;
1020
+ if (cellLayoutNew.indexOf("for=") != -1) {
1021
+ var cellxmlDOM = rtn.loadXML(cellLayoutNew);
1022
+ var listxml = rtn.getxmlForStr(cellxmlDOM);
1023
+
1024
+ if (typeof listxml !== 'undefined') {
1025
+ for (var j = 0; j < listxml.attributes.length; j++) {
1026
+ var attribute = listxml.attributes.item(j);
1027
+ if (attribute.nodeName.toLowerCase() == "for".toLowerCase()) {
1028
+ var liststr = "";
1029
+ var celllist = rtn.xmlToString(listxml)
1030
+
1031
+ var celllistNew = rtn.loadXML(celllist);
1032
+ var newAtt = celllistNew.createAttribute("forrowindex");
1033
+ newAtt.nodeValue = "{{forrowindex}}";
1034
+ var x = celllistNew.getElementsByTagName("Layout");
1035
+ x[0].setAttributeNode(newAtt);
1036
+ var cellstr = rtn.xmlToString(celllistNew)
1037
+ var list = data[attribute.nodeValue];
1038
+ if (typeof list !== 'undefined') {
1039
+ for (var i = 0; i < list.length; i++) {
1040
+ list[i].forrowindex = i;
1041
+ liststr += cellstr.replace(/\{\{(.+?)\}\}/g, (...args) => {
1042
+ return rtn.getValue(list[i], args[1])
1043
+ });
1044
+ }
1045
+ }
1046
+ cellLayoutNew = cellLayoutNew.replace(/\n/g, '').trim() //去除换行 和头尾空格
1047
+ let replacer = function (match, p1, p2, p3, offset) {
1048
+ return p1 + p3
1049
+ }
1050
+ cellLayoutNew = cellLayoutNew.replace(/(>)(\s*)(<)/g, replacer) //把 > 和 < 之间的空格去除
1051
+ cellLayoutNew = cellLayoutNew.replace(/ +/g, ' ')
1052
+ cellLayoutNew = cellLayoutNew.replace(celllist, liststr)
1053
+ }
1054
+ }
1055
+ }
1056
+ }
1057
+ if (typeof data !== 'undefined') {
1058
+ str = cellLayoutNew.replace(/\{\{(.+?)\}\}/g, (...args) => {
1059
+ return rtn.getValue(data, args[1])
1060
+ });
1061
+ }
1062
+ var xmlDOM = rtn.loadXML(str);
1063
+ return rtn.xmlToJson(xmlDOM);
1064
+ },
1065
+ doUpdateCell(data, searchValue1) {
1066
+ var self = this;
1067
+ var rowindex = 0;
1068
+ rtn.listData.forEach((v) => {
1069
+ if (v[rtn.primaryKey] == searchValue1) {
1070
+ return
1071
+ }
1072
+ rowindex++
1073
+ });
1074
+ rtn.layoutData[rowindex] = rtn.xmlToJsonCell(data.rows[0], data.cellLayout);
1075
+
1076
+ },
871
1077
  };
872
1078
  if (rtn.template) {
873
1079
  var tempLoader = template.loader(rtn.template).default;
874
1080
  tempLoader.init(rtn);
875
1081
  }
876
1082
  rtn.dataDictionary = rtn.listData;
1083
+
877
1084
  return rtn;
878
1085
  };
879
1086
  if (typeof data === 'string') {