centaline-data-driven 1.2.77 → 1.2.80
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 +1 -1
- package/src/Detail.vue +1 -1
- package/src/Form.vue +8 -3
- package/src/SearchList.vue +9 -3
- package/src/centaline/dynamicBtn/src/dynamicBtn.vue +2 -2
- package/src/centaline/dynamicContact/src/dynamicContact.vue +5 -1
- package/src/centaline/dynamicDetail/src/dynamicContactList.vue +6 -1
- package/src/centaline/dynamicDetail/src/dynamicPropertyDetailRET.vue +5 -1
- package/src/centaline/dynamicDetail/src/dynamicPropertySimpleDetailRET.vue +5 -1
- package/src/centaline/dynamicForm/src/dynamicForm.vue +20 -19
- package/src/centaline/dynamicForm/src/dynamicFormListTable.vue +8 -5
- package/src/centaline/dynamicLayout/src/dynamicLayout.vue +149 -32
- package/src/centaline/dynamicLayout/src/dynamicLayoutChildren.vue +11 -8
- package/src/centaline/dynamicLayout/src/dynamicLayoutChildrenFor.vue +39 -0
- package/src/centaline/dynamicLayout/src/dynamicLayoutImage.vue +55 -5
- package/src/centaline/dynamicLayout/src/dynamicLayoutLabel.vue +6 -4
- package/src/centaline/dynamicSearchList/src/dynamicSearchTable.vue +13 -3
- package/src/centaline/loader/src/ctl/Base.js +6 -0
- package/src/centaline/loader/src/ctl/CellLayout.js +184 -115
- package/src/centaline/loader/src/ctl/Form.js +11 -4
- package/src/centaline/loader/src/ctl/FormList.js +33 -12
- package/src/centaline/loader/src/ctl/InputNumber.js +0 -3
- package/src/centaline/loader/src/ctl/RichText.js +3 -0
- package/src/centaline/loader/src/ctl/SearchScreen.js +22 -22
- package/src/centaline/loader/src/ctl/lib/LibFunction.js +6 -3
- package/src/main.js +7 -4
- package/wwwroot/static/centaline/centaline-data-driven.js +3 -3
- package/wwwroot/static/centaline/centaline-data-driven.js.map +1 -1
package/package.json
CHANGED
package/src/Detail.vue
CHANGED
package/src/Form.vue
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div id="app-form" class="data-driven" style="width:100%;height:100%;overflow:auto">
|
|
3
|
-
<!-- <ct-form :api="'/salematter/squareupload/readDetail'" :apiParam="apiParam"></ct-form> -->
|
|
4
3
|
<!-- <ct-form :api="'/PropertyRET/getLayoutOfNew'" :apiParam="apiParam"></ct-form> -->
|
|
5
4
|
<!-- <ct-form :source="formdata.content" :apiParam="apiParam"></ct-form> -->
|
|
6
|
-
<ct-form :api="'/
|
|
5
|
+
<ct-form :api="'/api/third-dept-tran/transaction/detail'" :apiParam="apiParam"></ct-form>
|
|
7
6
|
<!--<ct-form :api="'api/Form/formdata'"></ct-form>-->
|
|
8
7
|
<ct-dialog-list></ct-dialog-list>
|
|
9
8
|
</div>
|
|
@@ -18,7 +17,13 @@
|
|
|
18
17
|
// apiParam: {headerParam: {}, urlParam: {contractID: "06cad32e-4d0d-4b6f-bd24-16a28629a550", actionType: "0"}}
|
|
19
18
|
// apiParam: {originalTraId: "1475658732246241281", actionType: 2, chanceID: "1"} ,
|
|
20
19
|
// apiParam: {originalTraId: "1516290587463507969", actionType: "3", pageStyle: "2", pageTitle: "成交报告",pageOnly: "true"}
|
|
21
|
-
apiParam:{
|
|
20
|
+
apiParam:{
|
|
21
|
+
actionType: 3,
|
|
22
|
+
originalTraId: "1526048947277938690",
|
|
23
|
+
pageOnly: true,
|
|
24
|
+
pageStyle: 2,
|
|
25
|
+
pageTitle: "成交报告"
|
|
26
|
+
}
|
|
22
27
|
}
|
|
23
28
|
},
|
|
24
29
|
methods: {
|
package/src/SearchList.vue
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
<!-- <ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'" :searchDataApi="'/PropertyRETList/getListOfSearchModel'" :searchCategoryApi="'/PropertyRETList/getLayoutOfSearchCategory'"></ct-searchlist> -->
|
|
6
6
|
|
|
7
|
-
<ct-searchlist :searchConditionApi="'/
|
|
8
|
-
:searchDataApi="'/
|
|
7
|
+
<ct-searchlist :searchConditionApi="'/api/distribution/agentRelationProperty/getLayoutOfSearch'"
|
|
8
|
+
:searchDataApi="'/api/distribution/agentRelationProperty/list'" :apiParam="para"></ct-searchlist>
|
|
9
9
|
|
|
10
10
|
<!-- <ct-searchlist :searchConditionApi="'/PropertyRETList/getLayoutOfSearch'"
|
|
11
11
|
:searchDataApi="'/PropertyRETList/getListOfSearchModel'"
|
|
@@ -25,7 +25,13 @@
|
|
|
25
25
|
name: 'DataDrivenSearch',
|
|
26
26
|
data() {
|
|
27
27
|
return {
|
|
28
|
-
para:{
|
|
28
|
+
para:{
|
|
29
|
+
agentId: "1491335181504401409",
|
|
30
|
+
delegateType: "1",
|
|
31
|
+
estateId: "18721",
|
|
32
|
+
estateName: "凯旋路1798号"
|
|
33
|
+
|
|
34
|
+
},
|
|
29
35
|
// para: {searchFields: {fields: []}, pageAttribute: {pageIndex: 1}, flagSearch: true}
|
|
30
36
|
// para: {publishID: "1503900718229229568"}
|
|
31
37
|
// para: {paramKey: "PropertyStatusID", code: "002.001", name: "盘源状态", paramName: "盘源状态"}
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
</el-button>
|
|
54
54
|
<el-button v-else class="max"
|
|
55
55
|
:type="model.isHyperLink ? 'text' : 'primary'"
|
|
56
|
-
v-bind="model.attrs" @click="
|
|
56
|
+
v-bind="model.attrs" @click="clickHandle"
|
|
57
57
|
:style="{color:model.textColor,backgroundColor:model.imgUrl?'transparent':model.bgColor,borderColor:model.imgUrl?'transparent':model.borderColor,padding:model.imgUrl?'0px':null}"
|
|
58
58
|
:icon="model.icon"
|
|
59
59
|
:disabled="model.disabled || model.locked">
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
else{
|
|
152
|
-
this.$emit('click',this.model);
|
|
152
|
+
this.$emit('click',this.model,this.rowData,this.rowindex);
|
|
153
153
|
}
|
|
154
154
|
},
|
|
155
155
|
callTelClick(data){
|
|
@@ -245,10 +245,14 @@
|
|
|
245
245
|
};
|
|
246
246
|
self.$common.openDialog(dialogOption);
|
|
247
247
|
}
|
|
248
|
-
else if (field.isFormPageInTab
|
|
248
|
+
else if (field.isFormPageInTab) {// 外部框架tab页打开
|
|
249
249
|
submitData = field.getActionPara(submitData).para;
|
|
250
250
|
self.$common.getDataDrivenOpts().handler.openTab(field.action, submitData, field.pageTitle);
|
|
251
251
|
}
|
|
252
|
+
else if (field.isSearchPageInTab) {// 外部框架tab页打开
|
|
253
|
+
submitData = field.getActionPara(submitData).para;
|
|
254
|
+
self.$common.getDataDrivenOpts().handler.openTabSearch(field, submitData);
|
|
255
|
+
}
|
|
252
256
|
else if (field.isBrowserNewTab) {// 浏览器打开
|
|
253
257
|
submitData = field.getActionPara(submitData).para;
|
|
254
258
|
let query = self.$common.objectToQueryStr(submitData);
|
|
@@ -359,6 +359,7 @@
|
|
|
359
359
|
self.$common.openDialog(dialogOption);
|
|
360
360
|
}
|
|
361
361
|
else if (field.isOpenList) {
|
|
362
|
+
submitData = field.getActionPara(submitData).para;
|
|
362
363
|
var dialogOption = {
|
|
363
364
|
title: field.pageTitle,
|
|
364
365
|
pane: self.$common.getParentPane(self),
|
|
@@ -385,10 +386,14 @@
|
|
|
385
386
|
};
|
|
386
387
|
self.$common.openDialog(dialogOption);
|
|
387
388
|
}
|
|
388
|
-
else if (field.isFormPageInTab
|
|
389
|
+
else if (field.isFormPageInTab) {// 外部框架tab页打开
|
|
389
390
|
submitData = field.getActionPara(submitData).para;
|
|
390
391
|
self.$common.getDataDrivenOpts().handler.openTab(field.action, submitData, field.pageTitle);
|
|
391
392
|
}
|
|
393
|
+
else if (field.isSearchPageInTab) {// 外部框架tab页打开
|
|
394
|
+
submitData = field.getActionPara(submitData).para;
|
|
395
|
+
self.$common.getDataDrivenOpts().handler.openTabSearch(field, submitData);
|
|
396
|
+
}
|
|
392
397
|
else if (field.isBrowserNewTab) {// 浏览器打开
|
|
393
398
|
submitData = field.getActionPara(submitData).para;
|
|
394
399
|
let query = self.$common.objectToQueryStr(submitData);
|
|
@@ -556,10 +556,14 @@
|
|
|
556
556
|
};
|
|
557
557
|
self.$common.openDialog(dialogOption);
|
|
558
558
|
}
|
|
559
|
-
else if (field.isFormPageInTab
|
|
559
|
+
else if (field.isFormPageInTab) {// 外部框架tab页打开
|
|
560
560
|
submitData = field.getActionPara(submitData).para;
|
|
561
561
|
self.$common.getDataDrivenOpts().handler.openTab(field.action, submitData, field.pageTitle, self.model,field.dialogWidth);
|
|
562
562
|
}
|
|
563
|
+
else if (field.isSearchPageInTab) {// 外部框架tab页打开
|
|
564
|
+
submitData = field.getActionPara(submitData).para;
|
|
565
|
+
self.$common.getDataDrivenOpts().handler.openTabSearch(field, submitData);
|
|
566
|
+
}
|
|
563
567
|
else if (field.isBrowserNewTab) {// 浏览器打开
|
|
564
568
|
submitData = field.getActionPara(submitData).para;
|
|
565
569
|
let query = self.$common.objectToQueryStr(submitData);
|
|
@@ -365,10 +365,14 @@
|
|
|
365
365
|
};
|
|
366
366
|
self.$common.openDialog(dialogOption);
|
|
367
367
|
}
|
|
368
|
-
else if (field.isFormPageInTab
|
|
368
|
+
else if (field.isFormPageInTab) {// 外部框架tab页打开
|
|
369
369
|
submitData = field.getActionPara(submitData).para;
|
|
370
370
|
self.$common.getDataDrivenOpts().handler.openTab(field.action, submitData, field.pageTitle, self.model,field.dialogWidth);
|
|
371
371
|
}
|
|
372
|
+
else if (field.isSearchPageInTab) {// 外部框架tab页打开
|
|
373
|
+
submitData = field.getActionPara(submitData).para;
|
|
374
|
+
self.$common.getDataDrivenOpts().handler.openTabSearch(field, submitData);
|
|
375
|
+
}
|
|
372
376
|
else if (field.isBrowserNewTab) {// 浏览器打开
|
|
373
377
|
submitData = field.getActionPara(submitData).para;
|
|
374
378
|
let query = self.$common.objectToQueryStr(submitData);
|
|
@@ -328,21 +328,7 @@
|
|
|
328
328
|
}
|
|
329
329
|
|
|
330
330
|
if (!submitData) {
|
|
331
|
-
submitData =
|
|
332
|
-
var tempFormData = self.model.getFormObj();
|
|
333
|
-
if(field.flagAttachSearchCondition){
|
|
334
|
-
submitData.jsonData=tempFormData;
|
|
335
|
-
}
|
|
336
|
-
else{
|
|
337
|
-
field.submitFormField.forEach((v) => {
|
|
338
|
-
if(tempFormData[v]){
|
|
339
|
-
submitData[v] = tempFormData[v];
|
|
340
|
-
}
|
|
341
|
-
else{
|
|
342
|
-
submitData[v] = tempFormData[self.$common.initialsToUpperCase(v)];
|
|
343
|
-
}
|
|
344
|
-
});
|
|
345
|
-
}
|
|
331
|
+
submitData = self.getFileData(field);
|
|
346
332
|
}
|
|
347
333
|
|
|
348
334
|
if (field.isOpenForm) {
|
|
@@ -400,10 +386,14 @@
|
|
|
400
386
|
};
|
|
401
387
|
self.$common.openDialog(dialogOption);
|
|
402
388
|
}
|
|
403
|
-
else if (field.isFormPageInTab
|
|
389
|
+
else if (field.isFormPageInTab) {// 外部框架tab页打开
|
|
404
390
|
submitData = field.getActionPara(submitData).para;
|
|
405
391
|
self.$common.getDataDrivenOpts().handler.openTab(field.action, submitData, field.pageTitle,self.model,field.dialogWidth);
|
|
406
392
|
}
|
|
393
|
+
else if (field.isSearchPageInTab) {// 外部框架tab页打开
|
|
394
|
+
submitData = field.getActionPara(submitData).para;
|
|
395
|
+
self.$common.getDataDrivenOpts().handler.openTabSearch(field, submitData);
|
|
396
|
+
}
|
|
407
397
|
else if (field.isBrowserNewTab) {// 浏览器打开
|
|
408
398
|
submitData = field.getActionPara(submitData).para;
|
|
409
399
|
let query = self.$common.objectToQueryStr(submitData);
|
|
@@ -415,8 +405,13 @@
|
|
|
415
405
|
}
|
|
416
406
|
else {
|
|
417
407
|
submitData = field.getActionPara(submitData).para;
|
|
418
|
-
field.doAction(submitData, (data) => {
|
|
419
|
-
|
|
408
|
+
field.doAction(submitData, (data) => {
|
|
409
|
+
if(field && field.changeCallBackFunName){
|
|
410
|
+
self.changeCallBackHandler(field, field.changeCallBackFunName, data.content);
|
|
411
|
+
}
|
|
412
|
+
else{
|
|
413
|
+
self.model.doAction(data);
|
|
414
|
+
}
|
|
420
415
|
})
|
|
421
416
|
}
|
|
422
417
|
}
|
|
@@ -624,6 +619,7 @@
|
|
|
624
619
|
return formData;
|
|
625
620
|
},
|
|
626
621
|
getFileData(field) {
|
|
622
|
+
var self=this;
|
|
627
623
|
var submitData = {};
|
|
628
624
|
var tempFormData = this.model.getFormObj();
|
|
629
625
|
if(field.flagAttachSearchCondition){
|
|
@@ -632,7 +628,12 @@
|
|
|
632
628
|
else{
|
|
633
629
|
if(field.submitFormField){
|
|
634
630
|
field.submitFormField.forEach((v) => {
|
|
635
|
-
|
|
631
|
+
if(tempFormData[v]){
|
|
632
|
+
submitData[v] = tempFormData[v];
|
|
633
|
+
}
|
|
634
|
+
else{
|
|
635
|
+
submitData[v] = tempFormData[self.$common.initialsToUpperCase(v)];
|
|
636
|
+
}
|
|
636
637
|
});
|
|
637
638
|
}
|
|
638
639
|
}
|
|
@@ -22,9 +22,10 @@
|
|
|
22
22
|
</template>
|
|
23
23
|
<template slot-scope="scope">
|
|
24
24
|
<span v-if="scope.row.isSet">
|
|
25
|
-
<component ref="Fields" :is="v.
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
<component ref="Fields" :is="model.currentRow.data[v.id].locked || model.currentRow.data[v.id].is!==v.is?model.currentRow.data[v.id].is:v.is"
|
|
26
|
+
:vmodel="model.currentRow.data[v.id]" :api="model.OptApi"
|
|
27
|
+
@change="changeHandler(model.currentRow.data[v.id], model.currentRow.data.$sourceIndex)"
|
|
28
|
+
@input="inputHandler(model.currentRow.data[v.id], model.currentRow.data.$sourceIndex)"></component>
|
|
28
29
|
</span>
|
|
29
30
|
<span v-else-if="v.is=='ct-sensitiveeye'">
|
|
30
31
|
<component v-if ref="Fields" :is="v.is" :vmodel="scope.row[v.id]" :vrowmodel="scope.row" :api="model.OptApi"></component>
|
|
@@ -308,7 +309,8 @@
|
|
|
308
309
|
const value = Number(curr);
|
|
309
310
|
if (!isNaN(value)) {
|
|
310
311
|
return Number(prev + curr);
|
|
311
|
-
}
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
312
314
|
return Number(prev);
|
|
313
315
|
}
|
|
314
316
|
}, 0);
|
|
@@ -316,7 +318,8 @@
|
|
|
316
318
|
if (data[0][column.property].decimals && data[0][column.property].decimals > 0) {
|
|
317
319
|
sums[index] = sums[index].toFixed(data[0][column.property].decimals);
|
|
318
320
|
}
|
|
319
|
-
}
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
320
323
|
sums[index] = 'N/A';
|
|
321
324
|
}
|
|
322
325
|
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
<div v-loading="loading" class="ct-Layout" v-if="Layout !== null && !loading">
|
|
3
|
+
<ct-layoutchildren :ref="'layout'+rowindex" :rowindex="rowindex" :vmodel="Layout" @click="rolRouterClickHandler"></ct-layoutchildren>
|
|
4
|
+
</div>
|
|
5
5
|
</template>
|
|
6
6
|
<script>
|
|
7
7
|
import dynamicElement from '../../mixins/dynamicElement'
|
|
8
8
|
import dynamicLayoutChildren from './dynamicLayoutChildren.vue';
|
|
9
|
-
import common from '../../common';
|
|
10
9
|
export default {
|
|
11
10
|
name: 'ct-layout',
|
|
12
11
|
mixins: [dynamicElement],
|
|
@@ -24,7 +23,7 @@
|
|
|
24
23
|
},
|
|
25
24
|
data() {
|
|
26
25
|
return {
|
|
27
|
-
Layout:[]
|
|
26
|
+
Layout: []
|
|
28
27
|
};
|
|
29
28
|
},
|
|
30
29
|
created() {
|
|
@@ -49,21 +48,71 @@
|
|
|
49
48
|
},
|
|
50
49
|
load(data, cellLayout) {
|
|
51
50
|
var str = '';
|
|
51
|
+
if (cellLayout.indexOf("for=") != -1) {
|
|
52
|
+
var cellxmlDOM = this.loadXML(cellLayout);
|
|
53
|
+
var listxml = this.getxmlForStr(cellxmlDOM);
|
|
54
|
+
|
|
55
|
+
if (typeof listxml !== 'undefined') {
|
|
56
|
+
for (var j = 0; j < listxml.attributes.length; j++) {
|
|
57
|
+
var attribute = listxml.attributes.item(j);
|
|
58
|
+
if (attribute.nodeName.toLowerCase() == "for".toLowerCase()) {
|
|
59
|
+
var liststr = "";
|
|
60
|
+
var celllist = this.xmlToString(listxml)
|
|
61
|
+
|
|
62
|
+
var celllistNew = this.loadXML(celllist);
|
|
63
|
+
var newAtt = celllistNew.createAttribute("forrowindex");
|
|
64
|
+
newAtt.nodeValue = "{{forrowindex}}";
|
|
65
|
+
var x = celllistNew.getElementsByTagName("Layout");
|
|
66
|
+
x[0].setAttributeNode(newAtt);
|
|
67
|
+
var cellstr = this.xmlToString(celllistNew)
|
|
68
|
+
var list = data[attribute.nodeValue];
|
|
69
|
+
if (typeof list !== 'undefined') {
|
|
70
|
+
for (var i = 0; i < list.length; i++) {
|
|
71
|
+
list[i].forrowindex = i;
|
|
72
|
+
liststr += cellstr.replace(/\{\{(.+?)\}\}/g, (...args) => {
|
|
73
|
+
return this.getValue(list[i], args[1])
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
cellLayout = cellLayout.replace(/\n/g, '').trim() //去除换行 和头尾空格
|
|
78
|
+
let replacer = function (match, p1, p2, p3, offset) {
|
|
79
|
+
return p1 + p3
|
|
80
|
+
}
|
|
81
|
+
cellLayout = cellLayout.replace(/(>)(\s*)(<)/g, replacer) //把 > 和 < 之间的空格去除
|
|
82
|
+
cellLayout = cellLayout.replace(/ +/g, ' ')
|
|
83
|
+
cellLayout = cellLayout.replace(celllist, liststr)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
52
88
|
if (typeof data !== 'undefined') {
|
|
53
89
|
str = cellLayout.replace(/\{\{(.+?)\}\}/g, (...args) => {
|
|
54
90
|
return this.getValue(data, args[1])
|
|
55
91
|
});
|
|
56
92
|
}
|
|
57
93
|
var xmlDOM = this.loadXML(str);
|
|
58
|
-
|
|
94
|
+
console.log(xmlDOM)
|
|
95
|
+
this.Layout = this.xmlToJson(xmlDOM);
|
|
96
|
+
this.model = this.loaderObj.CellLayout(this.Layout);
|
|
59
97
|
this.loading = false;
|
|
60
98
|
},
|
|
61
|
-
getValue(data,val) {
|
|
99
|
+
getValue(data, val) {
|
|
62
100
|
return val.split('.').reduce((data, currentVal) => {
|
|
63
|
-
|
|
101
|
+
var rtn = data[currentVal];
|
|
102
|
+
if (rtn.toString().indexOf('"') != -1) {
|
|
103
|
+
rtn = rtn.replace(/"/g, "'");
|
|
104
|
+
rtn = rtn.replace(/>/g, ">");
|
|
105
|
+
rtn = rtn.replace(/</g, "<");
|
|
106
|
+
}
|
|
107
|
+
return rtn
|
|
64
108
|
}, data)
|
|
65
109
|
},
|
|
66
110
|
loadXML(xmlString) {
|
|
111
|
+
xmlString = xmlString.replace(/\n/g, '').trim()
|
|
112
|
+
let replacer = function (match, p1, p2, p3, offset) {
|
|
113
|
+
return p1 + p3
|
|
114
|
+
}
|
|
115
|
+
xmlString = xmlString.replace(/(>)(\s*)(<)/g, replacer)
|
|
67
116
|
if (document.all) {
|
|
68
117
|
var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
|
|
69
118
|
xmlDom.loadXML(xmlString)
|
|
@@ -73,19 +122,43 @@
|
|
|
73
122
|
return new DOMParser().parseFromString(xmlString, "text/xml");
|
|
74
123
|
}
|
|
75
124
|
},
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
125
|
+
xmlToString(xmlObj) {
|
|
126
|
+
if (document.all) //IE浏览器
|
|
127
|
+
{
|
|
128
|
+
return xmlObj.xml;
|
|
129
|
+
}
|
|
130
|
+
else //其他浏览器
|
|
131
|
+
{
|
|
132
|
+
return (new XMLSerializer()).serializeToString(xmlObj);
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
getxmlForStr(xml) {
|
|
80
136
|
if (xml.nodeType == 1) { // element
|
|
81
137
|
// do attributes
|
|
82
138
|
if (xml.attributes.length > 0) {
|
|
83
139
|
for (var j = 0; j < xml.attributes.length; j++) {
|
|
84
140
|
var attribute = xml.attributes.item(j);
|
|
85
|
-
|
|
141
|
+
if (attribute.nodeName.toLowerCase() == "for".toLowerCase()) {
|
|
142
|
+
return xml
|
|
143
|
+
}
|
|
86
144
|
}
|
|
87
145
|
}
|
|
88
146
|
}
|
|
147
|
+
if (xml.hasChildNodes()) {
|
|
148
|
+
for (var i = 0; i < xml.childNodes.length; i++) {
|
|
149
|
+
var item = xml.childNodes.item(i);
|
|
150
|
+
var result = this.getxmlForStr(item);
|
|
151
|
+
if (result) {
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
|
|
158
|
+
xmlToJson(xml) {
|
|
159
|
+
var self = this;
|
|
160
|
+
// Create the return object
|
|
161
|
+
var obj = {};
|
|
89
162
|
if (xml.nodeName.toLowerCase() == "Layout".toLowerCase() || xml.nodeName.toLowerCase() == "StackLayout".toLowerCase()) {
|
|
90
163
|
obj["is"] = "ct-layoutchildren";
|
|
91
164
|
}
|
|
@@ -98,12 +171,35 @@
|
|
|
98
171
|
else if (xml.nodeName.toLowerCase() == "Image".toLowerCase()) {
|
|
99
172
|
obj["is"] = "ct-layoutimage";
|
|
100
173
|
}
|
|
101
|
-
|
|
174
|
+
if (xml.nodeType == 1) { // element
|
|
175
|
+
// do attributes
|
|
176
|
+
if (xml.attributes.length > 0) {
|
|
177
|
+
for (var j = 0; j < xml.attributes.length; j++) {
|
|
178
|
+
var attribute = xml.attributes.item(j);
|
|
179
|
+
obj[attribute.nodeName] = attribute.nodeValue;
|
|
180
|
+
if (attribute.nodeName.toLowerCase() == "for".toLowerCase()) {
|
|
181
|
+
obj["is"] = "ct-layoutchildrenfor";
|
|
182
|
+
}
|
|
183
|
+
if (attribute.nodeName.toLowerCase() == "routerKey".toLowerCase()) {
|
|
184
|
+
var actionRouter = self.actionRouter;
|
|
185
|
+
let field = actionRouter.find(b => {
|
|
186
|
+
return b.id === attribute.nodeValue;
|
|
187
|
+
});
|
|
188
|
+
if (typeof field !== "undefined") {
|
|
189
|
+
if (!field.rightField || self.vmodel[field.rightField] == 1) {
|
|
190
|
+
obj["rightRouter"] = true;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
102
199
|
// do children
|
|
103
200
|
if (xml.hasChildNodes()) {
|
|
104
201
|
for (var i = 0; i < xml.childNodes.length; i++) {
|
|
105
202
|
var item = xml.childNodes.item(i);
|
|
106
|
-
var nodeName = item.nodeName;
|
|
107
203
|
if (typeof (obj["fields"]) == "undefined") {
|
|
108
204
|
obj["fields"] = [];
|
|
109
205
|
obj["fields"].push(this.xmlToJson(item));
|
|
@@ -119,40 +215,49 @@
|
|
|
119
215
|
}
|
|
120
216
|
return obj;
|
|
121
217
|
},
|
|
122
|
-
rolRouterClickHandler(routerKey, rowindex) {
|
|
218
|
+
rolRouterClickHandler(routerKey, rowindex, forname, forrowindex) {
|
|
123
219
|
var self = this;
|
|
124
220
|
var submitData = {};
|
|
125
221
|
var rowData = self.vmodel;
|
|
126
222
|
var actionRouter = self.actionRouter;
|
|
127
|
-
debugger
|
|
128
223
|
let field = actionRouter.find(b => {
|
|
129
224
|
return b.id === routerKey;
|
|
130
225
|
});
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
226
|
+
if (typeof forname !== "undefined") {
|
|
227
|
+
field.submitListField.forEach((k) => {
|
|
228
|
+
submitData[k] = rowData[forname][forrowindex][k];
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
field.submitListField.forEach((k) => {
|
|
233
|
+
submitData[k] = rowData[k];
|
|
234
|
+
});
|
|
235
|
+
}
|
|
135
236
|
let action = field.action;
|
|
136
237
|
if (field.actionField) {
|
|
137
238
|
action = rowData[field.actionField];
|
|
138
239
|
}
|
|
139
|
-
this.routerClickHandler(field, submitData, action);
|
|
240
|
+
this.routerClickHandler(field, submitData, action, rowindex,forname, forrowindex);
|
|
140
241
|
},
|
|
141
|
-
routerClickHandler(field, submitData, action) {
|
|
242
|
+
routerClickHandler(field, submitData, action, rowindex, forname, forrowindex) {
|
|
142
243
|
let self = this;
|
|
143
244
|
action = action || field.action;
|
|
144
|
-
|
|
245
|
+
|
|
145
246
|
var clickAcion = function () {
|
|
146
247
|
//若不是客户端方法,则直接访问接口
|
|
147
248
|
if (!field.isClientFuntion) {
|
|
148
249
|
// 外部框架tab页打开
|
|
149
|
-
if (field.isFormPageInTab
|
|
250
|
+
if (field.isFormPageInTab) {
|
|
150
251
|
submitData = field.getActionPara(submitData).para;
|
|
151
252
|
if (field.pageStyle) {
|
|
152
253
|
submitData.pageStyle = field.pageStyle;
|
|
153
254
|
}
|
|
154
255
|
self.$common.getDataDrivenOpts().handler.openTab(action, submitData, field.pageTitle, self.model, field.dialogWidth);
|
|
155
256
|
}
|
|
257
|
+
else if (field.isSearchPageInTab) {// 外部框架tab页打开
|
|
258
|
+
submitData = field.getActionPara(submitData).para;
|
|
259
|
+
self.$common.getDataDrivenOpts().handler.openTabSearch(field, submitData);
|
|
260
|
+
}
|
|
156
261
|
else if (field.isBrowserNewTab) {// 浏览器打开
|
|
157
262
|
submitData = field.getActionPara(submitData).para;
|
|
158
263
|
let query = self.$common.objectToQueryStr(submitData);
|
|
@@ -246,15 +351,11 @@
|
|
|
246
351
|
self.$common.openDialog(dialogOption);
|
|
247
352
|
}
|
|
248
353
|
else {
|
|
249
|
-
self.operationLoading = true;
|
|
250
354
|
field.doAction(submitData, (data) => {
|
|
251
|
-
self.
|
|
252
|
-
if (
|
|
253
|
-
self.
|
|
355
|
+
self.model.doAction(data, field);
|
|
356
|
+
if (field.actionType === 19) {
|
|
357
|
+
self.callTelClick(self.$refs['layout' + rowindex].$refs.layoutchildren, data, forname, forrowindex)
|
|
254
358
|
}
|
|
255
|
-
self.$forceUpdate();
|
|
256
|
-
self.$refs.footer.$forceUpdate();
|
|
257
|
-
self.updateCurrentRow(field, data);
|
|
258
359
|
})
|
|
259
360
|
}
|
|
260
361
|
}
|
|
@@ -287,6 +388,22 @@
|
|
|
287
388
|
clickAcion();
|
|
288
389
|
}
|
|
289
390
|
},
|
|
391
|
+
callTelClick(VueCom, data, forname, forrowindex) {
|
|
392
|
+
if (typeof VueCom.$refs['router' + forname + forrowindex] !== "undefined") {
|
|
393
|
+
VueCom.callTelClick(data);
|
|
394
|
+
return true;
|
|
395
|
+
}
|
|
396
|
+
if (VueCom.$children.length>0) {
|
|
397
|
+
for (var i = 0; i < VueCom.$children.length; i++) {
|
|
398
|
+
var item = VueCom.$children[i];
|
|
399
|
+
var result = this.callTelClick(item, data,forname, forrowindex);
|
|
400
|
+
if (result) {
|
|
401
|
+
return result;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
},
|
|
406
|
+
|
|
290
407
|
},
|
|
291
408
|
mounted() {
|
|
292
409
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<el-container :direction="model.orientation" :style="model.styleObject">
|
|
3
|
-
<component v-for="(item, index) in model.fields" :key="index" :is="item.is" :vmodel="item" :rowindex="rowindex"
|
|
2
|
+
<el-container :direction="model.orientation" :style="model.styleObject" ref="layoutchildren">
|
|
3
|
+
<component v-for="(item, index) in model.fields" :key="index" :is="item.is" :vmodel="item" :rowindex="rowindex" :forname="forname" :forrowindex="forrowindex" @click="clickHandler"></component>
|
|
4
4
|
</el-container>
|
|
5
5
|
</template>
|
|
6
6
|
<script>
|
|
@@ -8,30 +8,33 @@
|
|
|
8
8
|
import dynamicLayoutLabel from './dynamicLayoutLabel.vue';
|
|
9
9
|
import dynamicLayoutLine from './dynamicLayoutLine.vue';
|
|
10
10
|
import dynamicLayoutImage from './dynamicLayoutImage.vue';
|
|
11
|
+
import dynamicLayoutChildrenFor from './dynamicLayoutChildrenFor.vue';
|
|
11
12
|
export default {
|
|
12
13
|
name: 'ct-layoutchildren',
|
|
13
14
|
mixins: [dynamicElement],
|
|
14
15
|
components: {
|
|
15
16
|
'ct-layoutlabel': dynamicLayoutLabel,
|
|
16
17
|
'ct-layoutline': dynamicLayoutLine,
|
|
17
|
-
'ct-layoutimage': dynamicLayoutImage
|
|
18
|
+
'ct-layoutimage': dynamicLayoutImage,
|
|
19
|
+
'ct-layoutchildrenfor': dynamicLayoutChildrenFor
|
|
18
20
|
},
|
|
19
21
|
props: {
|
|
20
22
|
vmodel: Object,
|
|
21
|
-
rowindex: Number
|
|
23
|
+
rowindex: Number,
|
|
24
|
+
forname: String,
|
|
25
|
+
forrowindex: String
|
|
22
26
|
},
|
|
23
27
|
data() {
|
|
24
28
|
return {
|
|
25
|
-
|
|
29
|
+
forindex:0
|
|
26
30
|
};
|
|
27
31
|
},
|
|
28
32
|
created() {
|
|
29
33
|
this.model = this.loaderObj.CellLayout(this.vmodel);
|
|
30
|
-
|
|
31
34
|
},
|
|
32
35
|
methods: {
|
|
33
|
-
clickHandler(routerKey, rowindex) {
|
|
34
|
-
this.$emit('click', routerKey, rowindex);
|
|
36
|
+
clickHandler(routerKey, rowindex, forname, forrowindex) {
|
|
37
|
+
this.$emit('click', routerKey, rowindex, forname, forrowindex);
|
|
35
38
|
}
|
|
36
39
|
},
|
|
37
40
|
mounted() {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-container :direction="model.orientation" :style="model.styleObject">
|
|
3
|
+
<ct-layoutchildren v-for="(item, index) in model.fields" :key="index" :rowindex="rowindex" :forrowindex="model.forrowindex" :vmodel="item" :forname="model.forname" @click="clickHandler"></ct-layoutchildren>
|
|
4
|
+
</el-container>
|
|
5
|
+
</template>
|
|
6
|
+
<script>
|
|
7
|
+
import dynamicElement from '../../mixins/dynamicElement'
|
|
8
|
+
export default {
|
|
9
|
+
name: 'ct-layoutchildrenfor',
|
|
10
|
+
mixins: [dynamicElement],
|
|
11
|
+
components: {
|
|
12
|
+
'ct-layoutchildren': () => import('./dynamicLayoutChildren.vue'),
|
|
13
|
+
},
|
|
14
|
+
props: {
|
|
15
|
+
vmodel: Object,
|
|
16
|
+
rowindex: Number
|
|
17
|
+
},
|
|
18
|
+
data() {
|
|
19
|
+
return {
|
|
20
|
+
forname: '',
|
|
21
|
+
forwindex:0
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
created() {
|
|
25
|
+
this.model = this.loaderObj.CellLayout(this.vmodel);
|
|
26
|
+
},
|
|
27
|
+
methods: {
|
|
28
|
+
clickHandler(routerKey, rowindex, forname, forrowindex) {
|
|
29
|
+
this.$emit('click', routerKey, rowindex, forname, forrowindex);
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
mounted() {
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
</script>
|
|
37
|
+
<style>
|
|
38
|
+
|
|
39
|
+
</style>
|