centaline-data-driven 1.3.31 → 1.3.34

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "centaline-data-driven",
3
- "version": "1.3.31",
3
+ "version": "1.3.34",
4
4
  "description": "ccai",
5
5
  "author": "hjc <3226136347@qq.com>",
6
6
  "private": false,
package/src/Form.vue CHANGED
@@ -2,7 +2,7 @@
2
2
  <div id="form-app" class="data-driven" style="width:100%;height:100%;overflow:auto">
3
3
  <!-- <ct-form :api="'/PropertyRET/getLayoutOfNew'" :apiParam="apiParam"></ct-form> -->
4
4
  <!-- <ct-form :source="formdata.content" :apiParam="apiParam"></ct-form> -->
5
- <ct-form :api="'/api/third-dept-tran/transaction/detail'" :apiParam="apiParam"></ct-form>
5
+ <ct-form :api="'/api/third-dept-tran/transaction/task'" :apiParam="apiParam"></ct-form>
6
6
  <!--<ct-form :api="'api/Form/formdata'"></ct-form>-->
7
7
  <ct-dialog-list></ct-dialog-list>
8
8
  </div>
@@ -14,11 +14,11 @@
14
14
  data() {
15
15
  return {
16
16
  apiParam:{
17
- actionType: 3,
18
- originalTraId: "1547488795469586434",
19
- pageOnly: true,
20
- pageStyle: 2,
21
- pageTitle: "成交报告"
17
+ actionType: "1",
18
+ businessId: "1550013042447081473",
19
+ pageOnly: "true",
20
+ pageStyle: "2",
21
+ stepId: "1550014106894327810"
22
22
  }
23
23
  }
24
24
  },
@@ -8,15 +8,15 @@
8
8
  :searchCategoryApi="'/ProfileWorklistList/getLayoutOfSearchCategory'"
9
9
  :searchDataApi="'/ProfileWorklistList/getListOfSearchModel'" :apiParam="para"></ct-searchlist> -->
10
10
 
11
- <!-- <ct-searchlist :searchConditionApi="'/PropertyContactImportList/getLayoutOfSearch'"
11
+ <ct-searchlist :searchConditionApi="'/PropertyContactImportList/getLayoutOfSearch'"
12
12
  :searchDataApi="'/PropertyContactImportList/getListOfSearchModel'">
13
- </ct-searchlist> -->
13
+ </ct-searchlist>
14
14
 
15
- <ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'"
15
+ <!-- <ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'"
16
16
  :searchDataApi="'/PropertyRETList/getListOfSearchModel'"
17
17
  :searchCategoryApi="'/PropertyRETList/getLayoutOfSearchCategory'"
18
18
  :searchStatsApi="'/exampleList/getListStats'">
19
- </ct-searchlist>
19
+ </ct-searchlist> -->
20
20
 
21
21
  <ct-dialog-list></ct-dialog-list>
22
22
  </div>
@@ -200,12 +200,20 @@ const api = {
200
200
  attrs: {
201
201
  progressAction: data.content.action,
202
202
  progressKey: data.content.key,
203
- width: '300px',
204
- height: '60px'
203
+ progressType:'export',
204
+ width: '350px',
205
+ height: '165px'
205
206
  },
206
207
  on: {
207
208
  finished() {
208
209
  Vue.prototype.$common.closeDialog(dialogOption.dialog);
210
+ },
211
+ error(data) {
212
+ Vue.prototype.$common.closeDialog(dialogOption.dialog);
213
+ Vue.prototype.$message({
214
+ message: data.rtnMsg,
215
+ type: 'info'
216
+ });
209
217
  }
210
218
  }
211
219
  }]
@@ -74,6 +74,7 @@
74
74
  <component v-for="(btn, index) in model.buttons" :key="index" :is="btn.is" :vmodel="btn" @click="clickHandler" v-if="btn.show"></component>
75
75
  </el-col>
76
76
  </el-row>
77
+ <div v-if="isScroll" style="height: 34px;"></div>
77
78
  </component>
78
79
  </div>
79
80
  <div style="min-height:200px" v-if="loading"></div>
@@ -426,6 +427,36 @@
426
427
  });
427
428
  }
428
429
  }
430
+ else if (field.flagAsync) {
431
+ field.doAction(submitData, (res) => {
432
+ if(res.content && res.content.action){
433
+ var dialogOption = {
434
+ title: field.pageTitle == undefined ? field.label : field.pageTitle,
435
+ content: [{
436
+ component: 'ct-progress',
437
+ attrs: {
438
+ progressAction: res.content.action,
439
+ progressKey: res.content.key,
440
+ progressType:'import',
441
+ width: '350px',
442
+ height: '165px'
443
+ },
444
+ on: {
445
+ finished() {
446
+ self.$common.closeDialog(dialogOption.dialog);
447
+ self.getPage(1);
448
+ },
449
+ error(data) {
450
+ self.$common.closeDialog(dialogOption.dialog);
451
+ self.$message.warning(data.rtnMsg);
452
+ }
453
+ }
454
+ }]
455
+ };
456
+ self.$common.openDialog(dialogOption);
457
+ }
458
+ });
459
+ }
429
460
  else {
430
461
  submitData = field.getActionPara(submitData).para;
431
462
  field.doAction(submitData, (data) => {
@@ -484,11 +515,47 @@
484
515
  }
485
516
  },
486
517
  importComplete(res,field) {
487
- if(field && field.changeCallBackFunName){
488
- this.changeCallBackHandler(field, field.changeCallBackFunName, res.content);
518
+ var self=this;
519
+ if(field.flagAsync){
520
+ if(res.content && res.content.action){
521
+ var dialogOption = {
522
+ title: "导入",
523
+ content: [{
524
+ component: 'ct-progress',
525
+ attrs: {
526
+ progressAction: res.content.action,
527
+ progressKey: res.content.key,
528
+ progressType:'import',
529
+ width: '350px',
530
+ height: '165px'
531
+ },
532
+ on: {
533
+ finished(data) {
534
+ self.$common.closeDialog(dialogOption.dialog);
535
+ if(field && field.changeCallBackFunName){
536
+ self.changeCallBackHandler(field, field.changeCallBackFunName, data.content);
537
+ }
538
+ else{
539
+ self.model.doAction(data);
540
+ }
541
+ },
542
+ error(data) {
543
+ self.$common.closeDialog(dialogOption.dialog);
544
+ self.$message.warning(data.rtnMsg);
545
+ }
546
+ }
547
+ }]
548
+ };
549
+ self.$common.openDialog(dialogOption);
550
+ }
489
551
  }
490
552
  else{
491
- this.model.doAction(res);
553
+ if(field && field.changeCallBackFunName){
554
+ this.changeCallBackHandler(field, field.changeCallBackFunName, res.content);
555
+ }
556
+ else{
557
+ this.model.doAction(res);
558
+ }
492
559
  }
493
560
  },
494
561
  changeHandler(field) {
@@ -71,7 +71,7 @@
71
71
  var ctSpan = {//临时的span组件对象,用于vue双向绑定,强制更新
72
72
  props: {
73
73
  vmodel: Object,
74
- rowNum: Number,
74
+ rowNum: String,
75
75
  },
76
76
  data: function () {
77
77
  return {
@@ -105,6 +105,7 @@
105
105
  }
106
106
  },
107
107
  created() {
108
+
108
109
  let self = this;
109
110
  this.model = this.vmodel;
110
111
  this.model.OptApi = this.api;
@@ -843,11 +843,22 @@ export default {
843
843
  self.$common.browseVideo(field, submitData);
844
844
  }
845
845
  else if (field.isBrowseAttachment) {//浏览附件
846
- var MediaAlbum = [{ albumName: self.model.title || "媒体", medias: [] },];
847
- submitData.mediaData.forEach((v) => {
848
- MediaAlbum[0].medias.push(v);
849
- });
850
- self.$common.viewerfile(field, MediaAlbum, 0, 0);
846
+ var MediaAlbum = [
847
+ { albumName: self.model.title || "媒体", medias: [] },
848
+ ];
849
+ if (field.action) {
850
+ var callback = function (data) {
851
+ MediaAlbum[0].medias = data;
852
+ self.$common.viewerfile(field, MediaAlbum, 0, 0);
853
+ }
854
+ self.model.getAction(field.action, submitData, callback);
855
+ }
856
+ else {
857
+ submitData.mediaData.forEach((v) => {
858
+ MediaAlbum[0].medias.push(v);
859
+ });
860
+ self.$common.viewerfile(field, MediaAlbum, 0, 0);
861
+ }
851
862
  }
852
863
  else if (field.isUrlInLayer) {//URL页面(弹层)
853
864
  var dialogOption = {
@@ -902,13 +913,52 @@ export default {
902
913
  self.model.export(field, submitData);
903
914
  }
904
915
  else{
905
- field.doAction(submitData, (data) => {
906
- if(data.content){
907
- window.open(data.content, "_blank");
908
- }
909
- });
916
+ if(field.action.indexOf("http://")===0 || field.action.indexOf("https://")===0){
917
+ window.open(field.action, "_blank");
918
+ }
919
+ else{
920
+ field.doAction(submitData, (data) => {
921
+ if(data.content){
922
+ if(data.content.indexOf("http://")===0 || data.content.indexOf("https://")===0){
923
+ window.open(data.content, "_blank");
924
+ }
925
+ else{
926
+ }
927
+ }
928
+ });
929
+ }
910
930
  }
911
931
  }
932
+ else if (field.flagAsync) {
933
+ field.doAction(submitData, (res) => {
934
+ if(res.content && res.content.action){
935
+ var dialogOption = {
936
+ title: field.pageTitle == undefined ? field.label : field.pageTitle,
937
+ content: [{
938
+ component: 'ct-progress',
939
+ attrs: {
940
+ progressAction: res.content.action,
941
+ progressKey: res.content.key,
942
+ progressType:'import',
943
+ width: '350px',
944
+ height: '165px'
945
+ },
946
+ on: {
947
+ finished() {
948
+ self.$common.closeDialog(dialogOption.dialog);
949
+ self.getPage(1);
950
+ },
951
+ error(data) {
952
+ self.$common.closeDialog(dialogOption.dialog);
953
+ self.$message.warning(data.rtnMsg);
954
+ }
955
+ }
956
+ }]
957
+ };
958
+ self.$common.openDialog(dialogOption);
959
+ }
960
+ });
961
+ }
912
962
  else {
913
963
  //self.operationLoading = true;
914
964
 
@@ -932,42 +982,40 @@ export default {
932
982
  submit(ev) {
933
983
  if (ev.responseData.notification == 24) {
934
984
  //更新列
935
- self.model.selectIndex=0;
936
- if (self.currentRow !== null) {
937
- for (var i = 0; i < self.currentRow.children.length; i++) {
938
- self.currentRow.children[i].classList.remove("select");
939
- }
985
+ self.model.selectIndex=0;
986
+ if (self.currentRow !== null) {
987
+ for (var i = 0; i < self.currentRow.children.length; i++) {
988
+ self.currentRow.children[i].classList.remove("select");
940
989
  }
941
- if (typeof self.$refs.tableParent !== "undefined") {
942
- self.$refs.tableParent.scrollTop = 0;
943
- self.$refs.tableParent.scrollLeft = 0;
944
- self.scrollTop = 0;
945
- self.scrollLeft = 0;
946
- }
947
- self.$forceUpdate();
948
- self.$nextTick(() => {
949
- if (
950
- self.$refs.tableParent.scrollHeight <=
951
- self.$refs.tableParent.offsetHeight
952
- ) {
953
- self.tableLoading = true;
954
- self.model.nextPage(next);
955
- } else {
956
- self.tableLoading = false;
957
- self.rowColorChange();
958
- self.resetScroll();
959
- self.calculatingRowHeight();
960
- self.getScrollAttr();
961
- }
962
- self.setfixedSize();
963
- });
990
+ }
991
+ if (typeof self.$refs.tableParent !== "undefined") {
992
+ self.$refs.tableParent.scrollTop = 0;
993
+ self.$refs.tableParent.scrollLeft = 0;
994
+ self.scrollTop = 0;
995
+ self.scrollLeft = 0;
996
+ }
997
+ self.$forceUpdate();
998
+ self.$nextTick(() => {
999
+ if (
1000
+ self.$refs.tableParent.scrollHeight <=
1001
+ self.$refs.tableParent.offsetHeight
1002
+ ) {
1003
+ self.tableLoading = true;
1004
+ self.model.nextPage(next);
1005
+ } else {
1006
+ self.tableLoading = false;
1007
+ self.rowColorChange();
1008
+ self.resetScroll();
1009
+ self.calculatingRowHeight();
1010
+ self.getScrollAttr();
1011
+ }
1012
+ self.setfixedSize();
1013
+ });
964
1014
  self.loaderObj.SearchTable(self.api,self.load,self.model.searchModel,true);
965
1015
  self.$common.closeDialog(dialogOption.dialog);
966
- } else {
967
- if (
968
- !field.flagFreshCurrentRow &&
969
- !field.flagAddRowAfterAction
970
- ) {
1016
+ }
1017
+ else {
1018
+ if (!field.flagFreshCurrentRow &&!field.flagAddRowAfterAction) {
971
1019
  self.model.doAction(ev);
972
1020
  }
973
1021
  self.$forceUpdate();
@@ -1043,10 +1091,7 @@ export default {
1043
1091
  self.operationLoading = true;
1044
1092
  field.doAction(submitData, (data) => {
1045
1093
  self.operationLoading = false;
1046
- if (
1047
- !field.flagFreshCurrentRow &&
1048
- !field.flagAddRowAfterAction
1049
- ) {
1094
+ if (!field.flagFreshCurrentRow && !field.flagAddRowAfterAction) {
1050
1095
  self.model.doAction({ responseData: data });
1051
1096
  self.$emit("refreshRowHandle");
1052
1097
  }
@@ -1389,8 +1434,44 @@ export default {
1389
1434
  );
1390
1435
  }
1391
1436
  },
1392
- importComplete(res) {
1393
- this.model.doAction(res);
1437
+ importComplete(res,field) {
1438
+ var self=this;
1439
+ if(field.flagAsync){
1440
+ if(res.content && res.content.action){
1441
+ var dialogOption = {
1442
+ title: "导入",
1443
+ content: [{
1444
+ component: 'ct-progress',
1445
+ attrs: {
1446
+ progressAction: res.content.action,
1447
+ progressKey: res.content.key,
1448
+ progressType:'import',
1449
+ width: '350px',
1450
+ height: '165px'
1451
+ },
1452
+ on: {
1453
+ finished() {
1454
+ self.$common.closeDialog(dialogOption.dialog);
1455
+ self.getPage(1);
1456
+ },
1457
+ error(data) {
1458
+ self.$common.closeDialog(dialogOption.dialog);
1459
+ self.$message.warning(data.rtnMsg);
1460
+ }
1461
+ }
1462
+ }]
1463
+ };
1464
+ self.$common.openDialog(dialogOption);
1465
+ }
1466
+ }
1467
+ else{
1468
+ if(field && field.changeCallBackFunName){
1469
+ this.changeCallBackHandler(field, field.changeCallBackFunName, res.content);
1470
+ }
1471
+ else{
1472
+ this.model.doAction(res);
1473
+ }
1474
+ }
1394
1475
  },
1395
1476
  tdRowspan(column, row) {
1396
1477
  if (!column.show) {
@@ -62,8 +62,8 @@ export default {
62
62
  }
63
63
  return this.searchModel ? this.searchModel.searchData : {};
64
64
  },
65
- importComplete(res) {
66
- this.$emit("importComplete", res);
65
+ importComplete(res,field) {
66
+ this.$emit("importComplete", res,field);
67
67
  }
68
68
  }
69
69
  };
@@ -116,9 +116,10 @@ const FormList = function (source, master) {
116
116
  this._rows = [];
117
117
  //遍历每一行
118
118
  source.rows.forEach((r) => {
119
+ var gid = rtn.guid();
120
+ r.$sourceIndex = gid;
119
121
  var row = rtn.initRow(r);
120
- this._rows.push(row);
121
- rtn._rows[rtn._rows.length - 1].$sourceIndex = rtn._rows.length - 1;
122
+ this._rows.push(row);
122
123
  });
123
124
  return this._rows;
124
125
  }
@@ -135,6 +136,8 @@ const FormList = function (source, master) {
135
136
  },
136
137
  get deleted() {//是否已删除
137
138
  return r.flagDeleted === true;
139
+ }, get deleted() {//是否已删除
140
+ return r.flagDeleted === true;
138
141
  },
139
142
  set deleted(v) {
140
143
  if (v) {
@@ -143,7 +146,13 @@ const FormList = function (source, master) {
143
146
  else {
144
147
  r.flagDeleted = false;
145
148
  }
149
+ }, get $sourceIndex() {//GID
150
+ return r.$sourceIndex||"";
151
+ },
152
+ set $sourceIndex(v) {//GID
153
+ return r.$sourceIndex=v;
146
154
  }
155
+ ,
147
156
  };
148
157
  //遍历每一列
149
158
  let rowIndex = 0;
@@ -179,8 +188,8 @@ const FormList = function (source, master) {
179
188
  var row = {};
180
189
  for (let i = 1; i < rows.length; i++) {//遍历每一行
181
190
  if (!rows[i].deleted) {
182
- row = {};
183
- Vue.set(row, '$sourceIndex', i);
191
+ row = {};
192
+ Vue.set(row, '$sourceIndex', rows[i].$sourceIndex);
184
193
  for (let j = 0; j < rows[i].field.length; j++) {//遍历每一列
185
194
  Vue.set(row, field[j].id, rows[i].field[j]);
186
195
  }
@@ -208,12 +217,20 @@ const FormList = function (source, master) {
208
217
  },
209
218
  getCloneRowData(index) {
210
219
  let row = {};
211
- let sourceRow = source.rows[index];
220
+ let sourceRow = {};
221
+ if (typeof index == "number") {
222
+ sourceRow = source.rows[index];
223
+ }
224
+ else {
225
+ let i = source.rows.findIndex(v => v.$sourceIndex ===index);
226
+ sourceRow = source.rows[i];
227
+ }
228
+
212
229
  let rowData = rtn.initRow(JSON.parse(JSON.stringify(sourceRow)));
213
230
  for (let j = 0; j < rowData.field.length; j++) {//遍历每一列
214
231
  row[rowData.field[j].id] = rowData.field[j];
215
232
  }
216
- row.$sourceIndex = index;
233
+ row.$sourceIndex = sourceRow.$sourceIndex+"";
217
234
  return row;
218
235
  },
219
236
  fieldsToTableData(fields) {
@@ -235,7 +252,11 @@ const FormList = function (source, master) {
235
252
  updateListField(refs, rowNum, fiedlId) {
236
253
  if (refs) {
237
254
  let ref = refs.find((v) => {
238
- return v.rowNum === rowNum && v.vmodel.id === fiedlId;
255
+ try {
256
+ return v.rowNum === rowNum && v.vmodel.id === fiedlId;
257
+ }
258
+ catch (e) {
259
+ }
239
260
  });
240
261
  if (ref) {
241
262
  ref.$forceUpdate();
@@ -250,12 +271,11 @@ const FormList = function (source, master) {
250
271
  //是否是复制的
251
272
  isDuplicated(row, index) {
252
273
  let isDuplicated = false;
253
-
254
274
  if (rtn.primaryKeys && rtn.primaryKeys.length > 0) {
255
275
  for (let i = 1; i < source.rows.length; i++) {//遍历数据源的每一行
256
276
  let srow = source.rows[i].columns;
257
277
  if (!source.rows[i].flagDeleted) {//该行已删除,跳过
258
- if (index === -1 || i !== index) {
278
+ if (index === -1 || source.rows[i].$sourceIndex !== index) {
259
279
  let temp = 0;
260
280
  let tempLabel = '';
261
281
  for (let j = 0; j < srow.length; j++) {//遍历数据源每一列
@@ -358,7 +378,7 @@ const FormList = function (source, master) {
358
378
  setValueByFieldName:function(id, attrKey, attrValue){
359
379
  return self.$self.parentModel.setValueByFieldName(id, attrKey, attrValue);
360
380
  },
361
- getListFieldValue:function(tableName, rowNum, fiedlId, attrName, defaultValue){
381
+ getListFieldValue: function (tableName, rowNum, fiedlId, attrName, defaultValue) {
362
382
  return self.$self.parentModel.getListFieldValue(tableName, rowNum, fiedlId, attrName, defaultValue);
363
383
  },
364
384
  }
@@ -367,18 +387,20 @@ const FormList = function (source, master) {
367
387
  common.openDialog(dialogOption);
368
388
  },
369
389
  addSourceRow(row) {
390
+ var gid = rtn.guid();
370
391
  let sourceRow = JSON.parse(JSON.stringify(source.rows[0]));
371
392
  for (let k in sourceRow.columns) {
372
393
  sourceRow.columns[k] = row[sourceRow.columns[k].fieldName1].source;
373
394
  };
395
+ sourceRow.$sourceIndex = gid;
374
396
  source.rows.push(sourceRow);
375
397
  let iRow = this.initRow(sourceRow);
376
398
  iRow.isNewFlag = true;
377
- rtn._rows.push(iRow);
378
- rtn._rows[rtn._rows.length - 1].$sourceIndex = rtn._rows.length - 1;
399
+ rtn._rows.push(iRow);
379
400
  Vue.set(row, 'edit', iRow.edit);
380
401
  Vue.set(row, 'delete', iRow.delete);
381
- row.$sourceIndex = rtn._rows.length - 1;
402
+ row.$sourceIndex =gid;
403
+
382
404
  },
383
405
  addRow(callback) {
384
406
  var self = this;
@@ -419,8 +441,9 @@ const FormList = function (source, master) {
419
441
  if (!isRepeat) {
420
442
  source.rows.push(row);
421
443
  rtn.rows.push(rowItem);
422
- rtn._rows[rtn._rows.length - 1].$sourceIndex = rtn._rows.length - 1;
423
- rowData.$sourceIndex = source.rows.length - 1;
444
+ var gid = rtn.guid();
445
+ rtn._rows[rtn._rows.length - 1].$sourceIndex =gid;
446
+ rowData.$sourceIndex =gid;
424
447
  rowData.edit = rowItem.edit;
425
448
  rowData.delete = rowItem.delete;
426
449
  rowItem.isNewFlag = true;
@@ -435,7 +458,7 @@ const FormList = function (source, master) {
435
458
  setValueByFieldName:function(id, attrKey, attrValue){
436
459
  return self.$self.parentModel.setValueByFieldName(id, attrKey, attrValue);
437
460
  },
438
- getListFieldValue:function(tableName, rowNum, fiedlId, attrName, defaultValue){
461
+ getListFieldValue: function (tableName, rowNum, fiedlId, attrName, defaultValue) {
439
462
  return self.$self.parentModel.getListFieldValue(tableName, rowNum, fiedlId, attrName, defaultValue);
440
463
  },
441
464
  }
@@ -472,11 +495,12 @@ const FormList = function (source, master) {
472
495
  rtn._rows.push(iRow);
473
496
  Vue.set(r, 'edit', iRow.edit);
474
497
  Vue.set(r, 'delete', iRow.delete);
475
- rtn._rows[rtn._rows.length - 1].$sourceIndex = rtn._rows.length - 1;
476
- r.$sourceIndex = rtn._rows.length - 1;
498
+ var gid = rtn.guid();
499
+ rtn._rows[rtn._rows.length - 1].$sourceIndex = gid;
500
+ r.$sourceIndex = gid;
477
501
 
478
502
  let rowData = rtn.rowsItemToTableData(iRow)
479
- rowData.$sourceIndex = rtn._rows.length - 1;
503
+ rowData.$sourceIndex = gid;
480
504
  rowData.edit = iRow.edit;
481
505
  rowData.delete = iRow.delete;
482
506
  rtn._tableData.push(rowData);
@@ -484,7 +508,7 @@ const FormList = function (source, master) {
484
508
  }
485
509
  },
486
510
  insertOrUpdateRow(row) {
487
- if(row){
511
+ if (row) {
488
512
  if(rtn.primaryKeys && rtn.primaryKeys.length>0){
489
513
  let iRow = rtn.initRow(row);
490
514
  let flagAdd=true;
@@ -520,13 +544,18 @@ const FormList = function (source, master) {
520
544
  }
521
545
  else{
522
546
  let rowData = rtn.rowsItemToTableData(iRow)
523
- iRow.$sourceIndex=r.$sourceIndex;
547
+ iRow.$sourceIndex = r.$sourceIndex;
548
+ row.$sourceIndex = r.$sourceIndex;
524
549
  rowData.$sourceIndex=r.$sourceIndex;
525
550
  rowData.edit = iRow.edit;
526
551
  rowData.delete = iRow.delete;
527
552
  source.rows.splice(i, 1,row);
528
553
  rtn._rows.splice(i, 1,iRow);
529
- rtn._tableData.splice(i-1, 1,rowData);
554
+ rtn.tableData.forEach((d,index) => {
555
+ if(d.$sourceIndex===r.$sourceIndex){
556
+ rtn.tableData.splice(index, 1,rowData);
557
+ }
558
+ });
530
559
  }
531
560
  }
532
561
  }
@@ -577,6 +606,13 @@ const FormList = function (source, master) {
577
606
  });
578
607
  }
579
608
  },
609
+ guid() {
610
+ return (rtn.S4() + rtn.S4() + '-' + rtn.S4() + '-' + rtn.S4() + '-' + rtn.S4() + '-' + rtn.S4() + rtn.S4() + rtn.S4()
611
+ );
612
+ },
613
+ S4() {
614
+ return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
615
+ }
580
616
  };
581
617
  return rtn;
582
618
  };