centaline-data-driven 1.2.71 → 1.2.74

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.
Files changed (33) hide show
  1. package/build/centaline/centaline.path.js +1 -0
  2. package/package.json +1 -1
  3. package/src/Form.vue +2 -2
  4. package/src/SearchList.vue +4 -4
  5. package/src/assets/more.png +0 -0
  6. package/src/centaline/dynamicBtn/src/dynamicBtn.vue +1 -1
  7. package/src/centaline/dynamicContact/src/dynamicContact.vue +4 -4
  8. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailOFI.vue +8 -1
  9. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailRET.vue +29 -19
  10. package/src/centaline/dynamicDetail/src/dynamicPropertySimpleDetailRET.vue +52 -22
  11. package/src/centaline/dynamicForm/src/dynamicForm.vue +50 -11
  12. package/src/centaline/dynamicInputNumber/src/dynamicInputNumber.vue +2 -6
  13. package/src/centaline/dynamicLayout/index.js +11 -0
  14. package/src/centaline/dynamicLayout/src/dynamicLayout.vue +311 -0
  15. package/src/centaline/dynamicLayout/src/dynamicLayoutChildren.vue +44 -0
  16. package/src/centaline/dynamicLayout/src/dynamicLayoutImage.vue +39 -0
  17. package/src/centaline/dynamicLayout/src/dynamicLayoutLabel.vue +55 -0
  18. package/src/centaline/dynamicLayout/src/dynamicLayoutLine.vue +29 -0
  19. package/src/centaline/dynamicSearchList/src/dynamicSearchList.vue +21 -5
  20. package/src/centaline/dynamicSearchList/src/dynamicSearchTable.vue +60 -37
  21. package/src/centaline/dynamicSearchList/src/dynamicTableStats.vue +4 -0
  22. package/src/centaline/dynamicT/src/dynamicT.vue +2 -0
  23. package/src/centaline/formData/index.js +46 -28
  24. package/src/centaline/loader/src/ctl/Button.js +3 -0
  25. package/src/centaline/loader/src/ctl/CellLayout.js +135 -0
  26. package/src/centaline/loader/src/ctl/Form.js +318 -3
  27. package/src/centaline/loader/src/ctl/FormList.js +69 -11
  28. package/src/centaline/loader/src/ctl/SearchTable.js +132 -127
  29. package/src/centaline/loader/src/ctl.js +1 -0
  30. package/src/centaline/selectOption/src/selectOptionVertical.vue +8 -0
  31. package/src/main.js +6 -6
  32. package/wwwroot/static/centaline/centaline-data-driven.js +3 -3
  33. package/wwwroot/static/centaline/centaline-data-driven.js.map +1 -1
@@ -0,0 +1,311 @@
1
+ <template>
2
+ <div v-loading="loading" class="ct-Layout" v-if="Layout !== null && !loading">
3
+ <ct-layoutchildren v-for="(item, index) in Layout.fields" :key="index":vmodel="item" :rowindex="index" @click="rolRouterClickHandler"></ct-layoutchildren>
4
+ </div>
5
+ </template>
6
+ <script>
7
+ import dynamicElement from '../../mixins/dynamicElement'
8
+ import dynamicLayoutChildren from './dynamicLayoutChildren.vue';
9
+ import common from '../../common';
10
+ export default {
11
+ name: 'ct-layout',
12
+ mixins: [dynamicElement],
13
+ components: {
14
+ 'ct-layoutchildren': dynamicLayoutChildren
15
+ },
16
+ props: {
17
+ api: String,
18
+ cellLayout: String,
19
+ vmodel: Object,
20
+ listData: Array,
21
+ apiParam: Object
22
+ },
23
+ data() {
24
+ return {
25
+ Layout:[]
26
+ };
27
+ },
28
+ created() {
29
+ this.init();
30
+ },
31
+ methods: {
32
+ init() {
33
+ var self = this;
34
+ //初始化
35
+ this.loading = true;
36
+ this.$nextTick(function () {
37
+ if (typeof self.api !== 'undefined') {
38
+ self.loaderObj.CellLayout(self.api, self.load, this.apiParam, self.failLoad);
39
+ }
40
+ else if (typeof self.vmodel !== 'undefined') {
41
+ self.load(self.vmodel);
42
+ }
43
+
44
+ });
45
+
46
+ },
47
+ failLoad() {
48
+ this.$emit('failLoad', this.model);
49
+ },
50
+ load(data) {
51
+ this.model = data;
52
+ if (data.rows.length > 0) {
53
+ var str = '<Layout orientation="vertical">';
54
+ for (var i = 0; i < data.rows.length; i++) {
55
+ str += data.cellLayout.replace(/\{\{(.+?)\}\}/g, (...args) => {
56
+ return this.getValue(data.rows[i], args[1])
57
+ });
58
+ }
59
+ str += '</Layout>';
60
+ }
61
+ var xmlDOM = this.loadXML(str);
62
+ this.Layout = this.xmlToJson(xmlDOM.childNodes[0]);
63
+ this.loading = false;
64
+ this.$emit('loaded', this.model);
65
+ },
66
+ getValue(data,val) {
67
+ return val.split('.').reduce((data, currentVal) => {
68
+ return data[currentVal]
69
+ }, data)
70
+ },
71
+ loadXML(xmlString) {
72
+ if (document.all) {
73
+ var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
74
+ xmlDom.loadXML(xmlString)
75
+ return xmlDom
76
+ }
77
+ else {
78
+ return new DOMParser().parseFromString(xmlString, "text/xml");
79
+ }
80
+ },
81
+
82
+ xmlToJson(xml) {
83
+ // Create the return object
84
+ var obj = {};
85
+ var buffer = [];
86
+ if (xml.nodeType == 1) { // element
87
+ // do attributes
88
+ if (xml.attributes.length > 0) {
89
+ for (var j = 0; j < xml.attributes.length; j++) {
90
+ var attribute = xml.attributes.item(j);
91
+ obj[attribute.nodeName] = attribute.nodeValue;
92
+ }
93
+ }
94
+ }
95
+ if (xml.nodeName.toLowerCase() == "Layout".toLowerCase() || xml.nodeName.toLowerCase() == "StackLayout".toLowerCase()) {
96
+ obj["is"] = "ct-layoutchildren";
97
+ }
98
+ else if (xml.nodeName.toLowerCase() == "Label".toLowerCase()) {
99
+ obj["is"] = "ct-layoutlabel";
100
+ }
101
+ else if (xml.nodeName.toLowerCase() == "Line".toLowerCase()) {
102
+ obj["is"] = "ct-layoutline";
103
+ }
104
+ else if (xml.nodeName.toLowerCase() == "Image".toLowerCase()) {
105
+ obj["is"] = "ct-layoutimage";
106
+ }
107
+ obj["type"] = xml.nodeName;
108
+ // do children
109
+ if (xml.hasChildNodes()) {
110
+ for (var i = 0; i < xml.childNodes.length; i++) {
111
+ var item = xml.childNodes.item(i);
112
+ var nodeName = item.nodeName;
113
+ if (typeof (obj["fields"]) == "undefined") {
114
+ obj["fields"] = [];
115
+ obj["fields"].push(this.xmlToJson(item));
116
+ } else {
117
+ if (typeof (obj["fields"].push) == "undefined") {
118
+ var old = obj["fields"];
119
+ obj["fields"] = [];
120
+ obj["fields"].push(old);
121
+ }
122
+ obj["fields"].push(this.xmlToJson(item));
123
+ }
124
+ }
125
+ }
126
+ return obj;
127
+ },
128
+ rolRouterClickHandler(routerKey, rowindex) {
129
+ var self = this;
130
+ var submitData = {};
131
+ var rowData = self.model.rows[rowindex];
132
+ var actionRouter = [];
133
+ if (self.model.actionRouters) {
134
+ self.model.actionRouters.forEach((v) => {
135
+ var field = self.loaderObj.Router(v);
136
+ actionRouter.push(field);
137
+ });
138
+ }
139
+ let field = actionRouter.find(b => {
140
+ return b.id === routerKey;
141
+ });
142
+ field.submitListField.forEach((k) => {
143
+ submitData[k] = rowData[k];
144
+ });
145
+
146
+ let action = field.action;
147
+ if (field.actionField) {
148
+ action = rowData[field.actionField];
149
+ }
150
+ this.routerClickHandler(field, submitData, action);
151
+ },
152
+ routerClickHandler(field, submitData, action) {
153
+ let self = this;
154
+ action = action || field.action;
155
+
156
+ var clickAcion = function () {
157
+ //若不是客户端方法,则直接访问接口
158
+ if (!field.isClientFuntion) {
159
+ // 外部框架tab页打开
160
+ if (field.isFormPageInTab || field.isSearchPageInTab) {
161
+ submitData = field.getActionPara(submitData).para;
162
+ if (field.pageStyle) {
163
+ submitData.pageStyle = field.pageStyle;
164
+ }
165
+ self.$common.getDataDrivenOpts().handler.openTab(action, submitData, field.pageTitle, self.model, field.dialogWidth);
166
+ }
167
+ else if (field.isBrowserNewTab) {// 浏览器打开
168
+ submitData = field.getActionPara(submitData).para;
169
+ let query = self.$common.objectToQueryStr(submitData);
170
+ window.open(action + query, "_blank");
171
+ }
172
+ else {
173
+ //self.operationLoading = true;
174
+
175
+ //Form
176
+ if (field.isOpenForm) {
177
+ var dialogOption = {
178
+ title: field.pageTitle,
179
+ pane: self.$common.getParentPane(self),
180
+ content: [{
181
+ component: field.navToNewPageName,
182
+ attrs: {
183
+ //source: data.content,
184
+ api: action,
185
+ apiParam: field.getActionPara(submitData).para,
186
+ showTitle: false,
187
+ width: field.dialogWidth + 'px',
188
+ height: field.dialogHeight + 'px'
189
+ },
190
+ on: {
191
+ submit(ev) {
192
+ if (!field.flagFreshCurrentRow && !field.flagAddRowAfterAction) {
193
+ self.model.doAction(ev);
194
+ }
195
+ self.$forceUpdate();
196
+ self.$refs.footer.$forceUpdate();
197
+ self.$common.closeDialog(dialogOption.dialog);
198
+ self.updateCurrentRow(field, ev);
199
+ },
200
+ refreshParent() {
201
+ self.getPage(1);
202
+ self.$common.closeDialog(dialogOption.dialog);
203
+ },
204
+ closeDialog() {
205
+ self.updateCurrentRow(field);
206
+ }
207
+ }
208
+ }]
209
+ };
210
+ self.$common.openDialog(dialogOption);
211
+ }
212
+ //SearchList
213
+ else if (field.isOpenList) {
214
+ var dialogOption = {
215
+ title: field.pageTitle,
216
+ pane: self.$common.getParentPane(self),
217
+ content: [{
218
+ component: field.navToNewPageName,
219
+ attrs: {
220
+ searchConditionApi: field.actionForSearchLayout,
221
+ searchDataApi: field.actionForSearch,
222
+ apiParam: submitData,
223
+ width: field.dialogWidth + 'px',
224
+ height: field.dialogHeight + 'px'
225
+ },
226
+ on: {
227
+ refreshParent() {
228
+ self.getPage(1);
229
+ self.$common.closeDialog(dialogOption.dialog);
230
+ },
231
+ closeDialog() {
232
+ self.updateCurrentRow(field);
233
+ }
234
+ }
235
+ }]
236
+ };
237
+ self.$common.openDialog(dialogOption);
238
+ }
239
+ //Tabs
240
+ else if (field.isOpenTabs) {
241
+ var dialogOption = {
242
+ title: field.pageTitle,
243
+ pane: self.$common.getParentPane(self),
244
+ content: [{
245
+ component: field.navToNewPageName,
246
+ attrs: {
247
+ searchConditionApi: field.actionForSearchLayout,
248
+ searchDataApi: field.actionForSearch,
249
+ apiParam: submitData,
250
+ width: field.dialogWidth + 'px',
251
+ height: field.dialogHeight + 'px'
252
+ },
253
+ on: {
254
+ }
255
+ }]
256
+ };
257
+ self.$common.openDialog(dialogOption);
258
+ }
259
+ else {
260
+ self.operationLoading = true;
261
+ field.doAction(submitData, (data) => {
262
+ self.operationLoading = false;
263
+ if (!field.flagFreshCurrentRow && !field.flagAddRowAfterAction) {
264
+ self.model.doAction({ responseData: data });
265
+ }
266
+ self.$forceUpdate();
267
+ self.$refs.footer.$forceUpdate();
268
+ self.updateCurrentRow(field, data);
269
+ })
270
+ }
271
+ }
272
+ }
273
+ //执行客户端脚本
274
+ else {
275
+ // let parm={submitData:submitData,field:field}
276
+ // self.$common.excuteFunStr.call(self.model.scripts, field.action,parm);
277
+ let title = field.pageTitle == undefined ? field.label : field.pageTitle;
278
+ submitData.actionType = field.actionType;
279
+ var fun = self.$common.getDataDrivenOpts().handler[action];
280
+ fun(submitData, title, self.model);
281
+ // var fun = self.model.scripts.formData[action];
282
+ // fun(submitData,field);
283
+ }
284
+ }
285
+
286
+ if (field.alert) {
287
+ self.$common.confirm(field.alertMsg, field.alertCaption, {
288
+ confirmButtonText: field.alertOKButtonText,
289
+ cancelButtonText: field.alertCancelButtonText,
290
+ //type: 'warning'
291
+ center: field.alertCenter
292
+ }).then(() => {
293
+ clickAcion();
294
+ }).catch(() => {
295
+ });
296
+ }
297
+ else {
298
+ clickAcion();
299
+ }
300
+ },
301
+ },
302
+ mounted() {
303
+
304
+ }
305
+ }
306
+ </script>
307
+ <style>
308
+ .ct-Layout {
309
+ font-size: 12px;
310
+ }
311
+ </style>
@@ -0,0 +1,44 @@
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" @click="clickHandler"></component>
4
+ </el-container>
5
+ </template>
6
+ <script>
7
+ import dynamicElement from '../../mixins/dynamicElement'
8
+ import dynamicLayoutLabel from './dynamicLayoutLabel.vue';
9
+ import dynamicLayoutLine from './dynamicLayoutLine.vue';
10
+ import dynamicLayoutImage from './dynamicLayoutImage.vue';
11
+ export default {
12
+ name: 'ct-layoutchildren',
13
+ mixins: [dynamicElement],
14
+ components: {
15
+ 'ct-layoutlabel': dynamicLayoutLabel,
16
+ 'ct-layoutline': dynamicLayoutLine,
17
+ 'ct-layoutimage': dynamicLayoutImage
18
+ },
19
+ props: {
20
+ vmodel: Object,
21
+ rowindex: Number
22
+ },
23
+ data() {
24
+ return {
25
+
26
+ };
27
+ },
28
+ created() {
29
+ this.model = this.loaderObj.CellLayout(this.vmodel);
30
+
31
+ },
32
+ methods: {
33
+ clickHandler(routerKey, rowindex) {
34
+ this.$emit('click', routerKey, rowindex);
35
+ }
36
+ },
37
+ mounted() {
38
+
39
+ }
40
+ }
41
+ </script>
42
+ <style>
43
+
44
+ </style>
@@ -0,0 +1,39 @@
1
+ <template>
2
+ <div v-if="model.routerKey" :style="model.styleObject">
3
+ <img class="ct-tablecurrencyImg ct-tablecurrencyItem" :src="model.value" @click="clickHandler($event)" />
4
+ </div>
5
+ <div v-else :style="model.styleObject">
6
+ <el-image :src="model.value"
7
+ fit="fit"></el-image>
8
+ </div>
9
+ </template>
10
+
11
+ <script>
12
+ import dynamicElement from '../../mixins/dynamicElement'
13
+ export default {
14
+ name: 'ct-layoutimage',
15
+ mixins: [dynamicElement],
16
+ props: {
17
+ vmodel: Object,
18
+ rowindex: Number
19
+ },
20
+ data() {
21
+ return {
22
+ }
23
+ },
24
+ created() {
25
+ if (typeof this.vmodel !== 'undefined') {
26
+ this.model = this.loaderObj.CellLayout(this.vmodel);
27
+ }
28
+ },
29
+
30
+ methods: {
31
+ clickHandler(ev) {
32
+ this.$emit('click', this.model.routerKey, this.rowindex);
33
+ }
34
+ },
35
+ computed: {
36
+
37
+ }
38
+ }
39
+ </script>
@@ -0,0 +1,55 @@
1
+ <template>
2
+ <div v-if="model.routerKey" :style="model.styleObject">
3
+ <a href="javascript:void(0);" @click="clickHandler($event)" class="ct-tablecurrencyItem">
4
+ {{model.value}}
5
+ </a>
6
+ </div>
7
+ <div v-else :style="model.styleObject" v-html="model.value">
8
+ </div>
9
+ </template>
10
+
11
+ <script>
12
+ import dynamicElement from '../../mixins/dynamicElement'
13
+ export default {
14
+ name: 'ct-layoutlabel',
15
+ mixins: [dynamicElement],
16
+ props: {
17
+ vmodel: Object,
18
+ rowindex: Number
19
+ },
20
+ data() {
21
+ return {
22
+ }
23
+ },
24
+ created() {
25
+ this.model = this.loaderObj.CellLayout(this.vmodel);
26
+ },
27
+
28
+ methods: {
29
+ clickHandler(ev) {
30
+ this.$emit('click', this.model.routerKey, this.rowindex);
31
+ }
32
+ },
33
+ computed: {
34
+
35
+ }
36
+ }
37
+ </script>
38
+ <style>
39
+ .ct-tablecurrencyItem {
40
+ text-decoration: none;
41
+ padding-left: 0px;
42
+ padding-right: 4px;
43
+ cursor: pointer;
44
+ color: #388cd3;
45
+ }
46
+
47
+ .ct-tablecurrencyItem:hover {
48
+ color: #23527c;
49
+ }
50
+
51
+ .ct-tablecurrencyImg {
52
+ width: 24px;
53
+ margin-top: 2px;
54
+ }
55
+ </style>
@@ -0,0 +1,29 @@
1
+ <template>
2
+ <div :style="model.styleObject"></div>
3
+ </template>
4
+
5
+ <script>
6
+ import dynamicElement from '../../mixins/dynamicElement'
7
+ export default {
8
+ name: 'ct-layoutline',
9
+ mixins: [dynamicElement],
10
+ props: {
11
+ vmodel: Object,
12
+ rowindex: Number
13
+ },
14
+ data() {
15
+ return {
16
+ }
17
+ },
18
+ created() {
19
+ this.model = this.loaderObj.CellLayout(this.vmodel);
20
+ },
21
+
22
+ methods: {
23
+
24
+ },
25
+ computed: {
26
+
27
+ }
28
+ }
29
+ </script>
@@ -14,7 +14,7 @@
14
14
 
15
15
  <ct-searchtable ref="table" :api="searchDataApi" :searchStatsApi="searchStatsApi" :from="from" @loaded="tableLoaded"
16
16
  @toolbarClick="toolbarClickHandler" @refreshParent="refreshParentHandler" :key="reloadKeyTable" @searchComplate="searchComplate"
17
- @rowClickHandle="rowClickHandle"
17
+ @rowClickHandle="rowClickHandle"
18
18
  @showTitle="showTitleHandler"></ct-searchtable>
19
19
  </div>
20
20
  <div v-if="flagSideBar && flagSideBarOfData"
@@ -72,6 +72,15 @@
72
72
  },
73
73
  computed: {
74
74
  },
75
+ activated() {
76
+ this.$nextTick(() => {
77
+ if(this.$refs.detail){
78
+ if(this.$refs.detail.$children && this.$refs.detail.$children.length>0){
79
+ this.$refs.detail.$children[0].refreshPage();
80
+ }
81
+ }
82
+ })
83
+ },
75
84
  data() {
76
85
  return {
77
86
  loaded: {
@@ -203,13 +212,15 @@
203
212
  },
204
213
  rowClickHandle() {
205
214
  var self = this;
206
- if(self.selectIndex!==self.$refs.table.model.selectIndex){
215
+ if(self.selectIndex!==self.$refs.table.model.selectIndex && self.$refs.table.model.rowSelectRouter){
207
216
  self.selectIndex=self.$refs.table.model.selectIndex;
208
217
  self.rowCount=self.$refs.table.model.listData.length;
209
218
  self.sideBarApiParam = {};
210
- self.$refs.table.model.rowSelectRouter.submitListField.forEach((k) => {
211
- self.sideBarApiParam[k] = self.$refs.table.model.listData[self.selectIndex][k];
212
- });
219
+ if(self.$refs.table.model.rowSelectRouter.submitListField){
220
+ self.$refs.table.model.rowSelectRouter.submitListField.forEach((k) => {
221
+ self.sideBarApiParam[k] = self.$refs.table.model.listData[self.selectIndex][k];
222
+ });
223
+ }
213
224
  self.sideBarApiParam.actionType = self.$refs.table.model.rowSelectRouter.actionType;
214
225
  self.detailKey = self.detailKey+1;
215
226
  }
@@ -236,6 +247,11 @@
236
247
  for(var i=0;i<popoverCallTels.length;i++){
237
248
  popoverCallTels[i].style.display='block';
238
249
  }
250
+ if(this.$refs.detail){
251
+ if(this.$refs.detail.$children && this.$refs.detail.$children.length>0){
252
+ this.$refs.detail.$children[0].refreshPage();
253
+ }
254
+ }
239
255
  }
240
256
  },
241
257
  closeSideHandler() {