centaline-data-driven 1.1.51 → 1.1.55

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 (193) hide show
  1. package/.babelrc +12 -12
  2. package/.editorconfig +9 -9
  3. package/.gitattributes +63 -63
  4. package/.postcssrc.js +10 -10
  5. package/Centaline.Front_End.DataDriven.csproj +37 -37
  6. package/Centaline.Front_End.DataDriven.sln +25 -25
  7. package/Properties/launchSettings.json +26 -26
  8. package/README.md +140 -140
  9. package/build/build.js +41 -41
  10. package/build/centaline/centaline.path.js +59 -59
  11. package/build/centaline/webpack.centaline.conf.js +106 -106
  12. package/build/check-versions.js +54 -54
  13. package/build/utils.js +102 -102
  14. package/build/vue-loader.conf.js +22 -22
  15. package/build/webpack.base.conf.js +82 -82
  16. package/build/webpack.dev.conf.js +111 -111
  17. package/build/webpack.prod.conf.js +145 -145
  18. package/config/dev.env.js +12 -12
  19. package/config/index.js +73 -73
  20. package/config/prod.env.js +4 -4
  21. package/index.html +14 -14
  22. package/package.json +75 -75
  23. package/src/App.vue +10 -10
  24. package/src/Detail.vue +26 -26
  25. package/src/Edit.vue +32 -66
  26. package/src/Form.vue +29 -30
  27. package/src/SearchList.vue +40 -40
  28. package/src/SearchTree.vue +51 -51
  29. package/src/Tabs.vue +19 -19
  30. package/src/centaline/api/index.js +249 -249
  31. package/src/centaline/comfirm/index.js +11 -11
  32. package/src/centaline/comfirm/src/comfirm.vue +44 -44
  33. package/src/centaline/common/index.js +738 -738
  34. package/src/centaline/css/common.css +749 -738
  35. package/src/centaline/css/max.css +208 -204
  36. package/src/centaline/dialogList/index.js +11 -11
  37. package/src/centaline/dialogList/src/dialog.vue +210 -207
  38. package/src/centaline/dialogList/src/dialogList.vue +65 -65
  39. package/src/centaline/dialogList/src/dialogNew.vue +78 -78
  40. package/src/centaline/dialogList/src/drag.js +77 -77
  41. package/src/centaline/directives/index.js +23 -23
  42. package/src/centaline/dynamicBtn/index.js +11 -11
  43. package/src/centaline/dynamicBtn/src/dynamicBtn.vue +100 -100
  44. package/src/centaline/dynamicCb/index.js +11 -11
  45. package/src/centaline/dynamicCb/src/dynamicCb.vue +72 -72
  46. package/src/centaline/dynamicCheckbox/index.js +11 -11
  47. package/src/centaline/dynamicCheckbox/src/dynamicCheckbox.vue +128 -128
  48. package/src/centaline/dynamicComboBoxWithTextBox/index.js +11 -11
  49. package/src/centaline/dynamicComboBoxWithTextBox/src/dynamicComboBoxWithTextBox.vue +240 -240
  50. package/src/centaline/dynamicD/index.js +11 -11
  51. package/src/centaline/dynamicD/src/dynamicD.vue +92 -92
  52. package/src/centaline/dynamicDetail/index.js +10 -10
  53. package/src/centaline/dynamicDetail/src/dynamicDetail.vue +40 -40
  54. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailOFI.vue +1280 -1280
  55. package/src/centaline/dynamicDetail/src/dynamicPropertyDetailRET.vue +1293 -1295
  56. package/src/centaline/dynamicDrop/index.js +11 -11
  57. package/src/centaline/dynamicDrop/src/dynamicDrop.vue +54 -54
  58. package/src/centaline/dynamicDtd/index.js +11 -11
  59. package/src/centaline/dynamicDtd/src/dynamicDtd.vue +125 -125
  60. package/src/centaline/dynamicDtd/src/dynamicDtdOld.vue +93 -93
  61. package/src/centaline/dynamicFile/index.js +11 -11
  62. package/src/centaline/dynamicFile/src/dynamicFile.vue +288 -283
  63. package/src/centaline/dynamicForm/index.js +24 -24
  64. package/src/centaline/dynamicForm/src/dynamicForm.vue +564 -536
  65. package/src/centaline/dynamicForm/src/dynamicFormList.vue +209 -209
  66. package/src/centaline/dynamicForm/src/dynamicFormListTable.vue +376 -376
  67. package/src/centaline/dynamicGp/index.js +11 -11
  68. package/src/centaline/dynamicGp/src/dynamicGp.vue +27 -27
  69. package/src/centaline/dynamicHyperLink/index.js +11 -11
  70. package/src/centaline/dynamicHyperLink/src/dynamicHyperLink.vue +54 -54
  71. package/src/centaline/dynamicInput/index.js +35 -35
  72. package/src/centaline/dynamicInput/src/dynamicInput.vue +35 -35
  73. package/src/centaline/dynamicInputNumber/index.js +11 -11
  74. package/src/centaline/dynamicInputNumber/src/dynamicInputNumber.vue +157 -157
  75. package/src/centaline/dynamicIti/index.js +11 -11
  76. package/src/centaline/dynamicIti/src/dynamicIti.vue +148 -148
  77. package/src/centaline/dynamicL/index.js +11 -11
  78. package/src/centaline/dynamicL/src/dynamicL.vue +37 -37
  79. package/src/centaline/dynamicLabel/index.js +11 -11
  80. package/src/centaline/dynamicLabel/src/dynamicLabel.vue +73 -73
  81. package/src/centaline/dynamicLs/index.js +22 -22
  82. package/src/centaline/dynamicLs/src/dynamicLs.vue +233 -233
  83. package/src/centaline/dynamicMo/index.js +13 -13
  84. package/src/centaline/dynamicMo/src/dynamicMo.vue +421 -421
  85. package/src/centaline/dynamicMt/index.js +11 -11
  86. package/src/centaline/dynamicMt/src/dynamicMt.vue +44 -44
  87. package/src/centaline/dynamicPlaceHolder/index.js +11 -11
  88. package/src/centaline/dynamicPlaceHolder/src/dynamicPlaceHolder.vue +29 -29
  89. package/src/centaline/dynamicPopupSearchList/index.js +11 -11
  90. package/src/centaline/dynamicPopupSearchList/src/dynamicPopupSearchList.vue +157 -157
  91. package/src/centaline/dynamicPopupSearchList/src/dynamicPopupSearchListTable.vue +239 -237
  92. package/src/centaline/dynamicRichText/index.js +11 -11
  93. package/src/centaline/dynamicRichText/src/dynamicRichText.vue +33 -33
  94. package/src/centaline/dynamicSearchList/index.js +11 -11
  95. package/src/centaline/dynamicSearchList/src/dynamicSearchCategory.vue +121 -121
  96. package/src/centaline/dynamicSearchList/src/dynamicSearchList.vue +135 -135
  97. package/src/centaline/dynamicSearchList/src/dynamicSearchScreen.vue +206 -206
  98. package/src/centaline/dynamicSearchList/src/dynamicSearchTable.vue +1069 -1069
  99. package/src/centaline/dynamicSearchList/src/dynamicTableStatistics.vue +41 -41
  100. package/src/centaline/dynamicSearchList/src/dynamicTableTip.vue +46 -46
  101. package/src/centaline/dynamicSearchList/src/dynamicTableToolbar.vue +61 -61
  102. package/src/centaline/dynamicSeg/index.js +11 -11
  103. package/src/centaline/dynamicSeg/src/dynamicSeg.vue +100 -100
  104. package/src/centaline/dynamicSensitiveEye/index.js +11 -11
  105. package/src/centaline/dynamicSensitiveEye/src/dynamicSensitiveEye.vue +74 -74
  106. package/src/centaline/dynamicSo/index.js +14 -14
  107. package/src/centaline/dynamicSo/src/dynamicSo.vue +328 -328
  108. package/src/centaline/dynamicSo/src/dynamicSo/345/211/257/346/234/254.vue +69 -69
  109. package/src/centaline/dynamicSos/index.js +14 -14
  110. package/src/centaline/dynamicSos/src/dynamicSos - /345/244/215/345/210/266.vue" +223 -223
  111. package/src/centaline/dynamicSos/src/dynamicSos.vue +260 -260
  112. package/src/centaline/dynamicSw/index.js +11 -11
  113. package/src/centaline/dynamicSw/src/dynamicSw.vue +74 -74
  114. package/src/centaline/dynamicT/index.js +11 -11
  115. package/src/centaline/dynamicT/src/dynamicT.vue +79 -79
  116. package/src/centaline/dynamicTab/index.js +11 -11
  117. package/src/centaline/dynamicTab/src/dynamicTab.vue +49 -49
  118. package/src/centaline/dynamicTabs/index.js +11 -11
  119. package/src/centaline/dynamicTabs/src/dynamicTabs.vue +69 -69
  120. package/src/centaline/dynamicTags/index.js +13 -13
  121. package/src/centaline/dynamicTags/src/dynamicTags - /345/244/215/345/210/266.vue" +391 -391
  122. package/src/centaline/dynamicTags/src/dynamicTags.vue +427 -427
  123. package/src/centaline/dynamicTimeSelect/index.js +11 -11
  124. package/src/centaline/dynamicTimeSelect/src/dynamicTimeSelect.vue +141 -141
  125. package/src/centaline/dynamicTree/index.js +11 -11
  126. package/src/centaline/dynamicTree/src/dynamicSearchTree.vue +66 -66
  127. package/src/centaline/dynamicTree/src/dynamicTree.vue +233 -233
  128. package/src/centaline/dynamicTree/src/dynamicTreeList.vue +74 -74
  129. package/src/centaline/formData/index.js +290 -290
  130. package/src/centaline/imgPreview/index.js +42 -42
  131. package/src/centaline/imgPreview/src/imgPreview.vue +26 -26
  132. package/src/centaline/index.js +51 -51
  133. package/src/centaline/loader/index.js +157 -157
  134. package/src/centaline/loader/src/ctl/Base.js +261 -261
  135. package/src/centaline/loader/src/ctl/Button.js +44 -44
  136. package/src/centaline/loader/src/ctl/Cb.js +27 -27
  137. package/src/centaline/loader/src/ctl/Checkbox.js +107 -107
  138. package/src/centaline/loader/src/ctl/ComboBoxWithTextBox.js +162 -162
  139. package/src/centaline/loader/src/ctl/D.js +31 -31
  140. package/src/centaline/loader/src/ctl/Detail.js +175 -175
  141. package/src/centaline/loader/src/ctl/Dtd.js +115 -115
  142. package/src/centaline/loader/src/ctl/DtdOld.js +129 -129
  143. package/src/centaline/loader/src/ctl/File.js +292 -292
  144. package/src/centaline/loader/src/ctl/Form.js +380 -363
  145. package/src/centaline/loader/src/ctl/FormList.js +428 -428
  146. package/src/centaline/loader/src/ctl/GM.js +20 -20
  147. package/src/centaline/loader/src/ctl/Gp.js +9 -9
  148. package/src/centaline/loader/src/ctl/Hd.js +13 -13
  149. package/src/centaline/loader/src/ctl/HyperLink.js +24 -24
  150. package/src/centaline/loader/src/ctl/InputNumber.js +51 -51
  151. package/src/centaline/loader/src/ctl/Iti.js +108 -108
  152. package/src/centaline/loader/src/ctl/L.js +18 -18
  153. package/src/centaline/loader/src/ctl/Mo.js +183 -183
  154. package/src/centaline/loader/src/ctl/Mt.js +20 -20
  155. package/src/centaline/loader/src/ctl/PlaceHolder.js +17 -17
  156. package/src/centaline/loader/src/ctl/Router.js +273 -273
  157. package/src/centaline/loader/src/ctl/SearchCategory.js +54 -54
  158. package/src/centaline/loader/src/ctl/SearchScreen.js +236 -236
  159. package/src/centaline/loader/src/ctl/SearchTable.js +772 -772
  160. package/src/centaline/loader/src/ctl/Seg.js +37 -37
  161. package/src/centaline/loader/src/ctl/SensitiveEye.js +65 -65
  162. package/src/centaline/loader/src/ctl/So.js +117 -117
  163. package/src/centaline/loader/src/ctl/Sos.js +128 -128
  164. package/src/centaline/loader/src/ctl/Sw.js +27 -27
  165. package/src/centaline/loader/src/ctl/T.js +65 -65
  166. package/src/centaline/loader/src/ctl/Tabs.js +57 -57
  167. package/src/centaline/loader/src/ctl/Tags.js +191 -191
  168. package/src/centaline/loader/src/ctl/TimeSelect.js +87 -87
  169. package/src/centaline/loader/src/ctl/Tree.js +151 -151
  170. package/src/centaline/loader/src/ctl/Ttts.js +78 -78
  171. package/src/centaline/loader/src/ctl/lib/Enum.js +563 -563
  172. package/src/centaline/loader/src/ctl/lib/LibFunction.js +364 -364
  173. package/src/centaline/loader/src/ctl.js +36 -35
  174. package/src/centaline/mixins/dynamicElement.js +151 -151
  175. package/src/centaline/mixins/dynamicSelect.js +84 -84
  176. package/src/centaline/mixins/emitter.js +33 -33
  177. package/src/centaline/progress/index.js +11 -11
  178. package/src/centaline/progress/src/progress.vue +70 -70
  179. package/src/centaline/quickInput/src/quickInput.vue +64 -64
  180. package/src/centaline/selectOption/src/selectOption.vue +61 -61
  181. package/src/centaline/selectOption/src/selectOptionVertical.vue +80 -80
  182. package/src/centaline/templateControls/index.js +17 -17
  183. package/src/centaline/templateControls/src/dynamicTableA.vue +20 -20
  184. package/src/centaline/templateControls/src/dynamicTableCurrency.vue +62 -62
  185. package/src/centaline/templateControls/src/dynamicTableImg.vue +25 -25
  186. package/src/centaline/templates/index.js +34 -34
  187. package/src/centaline/templates/src/ContractSearch.js +67 -67
  188. package/src/centaline/templates/src/test.js +44 -44
  189. package/src/centaline/validate/index.js +332 -332
  190. package/src/main.js +46 -48
  191. package/src/router/index.js +44 -44
  192. package/wwwroot/static/centaline/centaline-data-driven.js +1 -1
  193. package/wwwroot/static/centaline/centaline-data-driven.js.map +1 -1
@@ -1,536 +1,564 @@
1
- <template>
2
- <div v-loading="loading" style="width:100%">
3
- <div v-if="model !== null && !loading" class="ct-form" :class="{'domDisabled':model.pageDisabled}">
4
- <!--可根据场景判断显示el-card还是el-main-->
5
- <component :is="model.showTitle?'el-main':'el-card'">
6
- <div slot="header" class="clearfix" v-if="typeof model.title !== 'undefined' && model.flagShowTitle">
7
- <span style="font-weight:bold">{{model.title}}</span>
8
- </div>
9
- <!--头部元素-->
10
- <el-row v-if="collapseFieldsRow.length > 0">
11
- <el-col v-for="(col, index) in collapseFieldsRow[0]" :key="index" v-if="col.show !== false" :span="col.colspan" style="padding:5px">
12
- <component ref="Fields" :is="col.is" :vmodel="col" :api="model.optionApi" v-bind="col.bindPara"
13
- @click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)"
14
- @input="inputHandler(col,$event)"
15
- @popupSearchList="popupSearchListHandler"
16
- @tableButtonClick="clickHandler"></component>
17
- </el-col>
18
- </el-row>
19
- <!--tabs-->
20
- <el-tabs v-if="model.isHorizontalLayout" v-model="activeName">
21
- <el-tab-pane :label="item.label" :name="index.toString()"
22
- v-for="(item, index) in collapse" v-if="item.show !== false" :key="index">
23
- <el-row>
24
- <el-col v-for="(col, index) in collapseFieldsRow[index + 1]" :key="index" :span="col.colspan" v-if="col.show !== false" style="padding:5px">
25
- <component ref="Fields" :is="col.is" :vmodel="col" :api="model.optionApi" v-bind="col.bindPara"
26
- @click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)"
27
- @input="inputHandler(col,$event)"
28
- @popupSearchList="popupSearchListHandler"
29
- @tableButtonClick="clickHandler"></component>
30
- </el-col>
31
- </el-row>
32
- </el-tab-pane>
33
- </el-tabs>
34
- <!--分组-->
35
- <el-collapse v-else v-model="collapseActiveNames" @change="collapseHandleChange">
36
- <el-collapse-item v-for="(item, index) in collapse" v-if="item.show !== false" :key="index" :title="item.label" :name="index">
37
- <template slot="title">
38
- <i class="sign"></i>
39
- {{item.label}}
40
- </template>
41
- <el-row>
42
- <el-col v-for="(col, index) in collapseFieldsRow[index + 1]" :key="index" :span="col.colspan" v-if="col.show !== false" style="padding:5px">
43
- <component ref="Fields" :is="col.is" :vmodel="col" :api="model.optionApi" v-bind="col.bindPara"
44
- @click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)"
45
- @input="inputHandler(col,$event)"
46
- @popupSearchList="popupSearchListHandler"
47
- @tableButtonClick="clickHandler"></component>
48
- </el-col>
49
- </el-row>
50
- </el-collapse-item>
51
- </el-collapse>
52
- <!--尾部元素-->
53
- <el-row v-if="independentItem.length > 0" style="margin-top: 20px;">
54
- <el-col v-for="(col, index) in independentItem" :key="index" v-if="col.show !== false" :span="col.colspan" style="padding:5px">
55
- <component ref="Fields" :is="col.is" :vmodel="col" :api="model.optionApi" v-bind="col.bindPara"
56
- @click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)"
57
- @input="inputHandler(col,$event)"
58
- @popupSearchList="popupSearchListHandler"
59
- @tableButtonClick="clickHandler"></component>
60
- </el-col>
61
- </el-row>
62
- <el-row v-if="model.links.length > -1" style="margin-top: 8px;">
63
- <el-col :span="24" style="text-align:left">
64
- <component v-for="(btn, index) in model.links" :key="index" :is="btn.is" :vmodel="btn" @click="clickHandler" v-if="btn.show"></component>
65
- </el-col>
66
- </el-row>
67
- <el-row v-if="model.buttons.findIndex((v)=>{return v.show}) > -1" style="margin-top: 8px;">
68
- <el-col :span="24" style="text-align:center">
69
- <component v-for="(btn, index) in model.buttons" :key="index" :is="btn.is" :vmodel="btn" @click="clickHandler" v-if="btn.show"></component>
70
- </el-col>
71
- </el-row>
72
- </component>
73
- </div>
74
- <div style="min-height:200px" v-if="loading"></div>
75
- </div>
76
- </template>
77
- <script>
78
- import dynamicElement from '../../mixins/dynamicElement'
79
- import dynamicFormListTalbe from './dynamicFormListTable'
80
- import { setTimeout } from 'timers';
81
- //import dynamicFormList from './dynamicFormList'
82
- export default {
83
- name: 'ct-form',
84
- mixins: [dynamicElement],
85
- components: {
86
- 'ct-form-list-table': dynamicFormListTalbe
87
- },
88
- props: {
89
- api: String,
90
- vmodel: Object,
91
- source: Object,
92
- apiParam: Object,
93
- parentModel: Object,
94
- showTitle: {
95
- type: Boolean,
96
- default: false
97
- }
98
- },
99
- data() {
100
- var self = this;
101
- return {
102
- loading: true,
103
- activeName: '0',
104
- collapse: [],//分组数组
105
- collapseActiveNames: [],//默认展开的分组name
106
- collapseFieldsRow: [],//分组数组对应的行列布局
107
- independentItem: []//最后一个独立分组的行列布局
108
- };
109
- },
110
- mounted() {
111
- this.init();
112
- },
113
- methods: {
114
- init() {
115
- var self = this;
116
- //初始化
117
- this.loading = true;
118
- this.collapse.splice(0, this.collapse.length);
119
- this.collapseActiveNames.splice(0, this.collapseActiveNames.length);
120
- this.collapseFieldsRow.splice(0, this.collapseFieldsRow.length);
121
- this.independentItem.splice(0, this.independentItem.length);
122
-
123
- this.$nextTick(function () {
124
- if (typeof self.api !== 'undefined') {
125
- self.loaderObj.Form(self.api, self.load, this.apiParam, self.failLoad);
126
- }
127
- else if (typeof self.source !== 'undefined') {
128
- self.load(self.loaderObj.Form(self.source));
129
- }
130
- else if (self.vmodel) {
131
- self.load(self.vmodel);
132
- }
133
- });
134
- },
135
- failLoad() {
136
- this.$emit('failLoad', this.model);
137
- },
138
- load(data) {
139
- this.$set(this, 'model', data);
140
- this.model.self = this;
141
- if (typeof this.model.scripts !== 'undefined') {
142
- this.model.scripts.formData = this.model.formData;
143
- this.model.scripts.formData.form = this.model;
144
- this.model.scripts.formData.excuteData = this.model.fields;
145
- this.model.scripts.formData.fieldsDic = this.model.fieldsDic;
146
- }
147
- this.loadFields();
148
- this.loading = false;
149
- //通知父组件加载完成
150
- this.$emit('loaded', this.model);
151
- },
152
- loadFields() {
153
- var self = this;
154
-
155
- var collapseItemArr = [];//分组对应元素二维数组
156
- var collapseItem = [];//分组对应元素数组
157
- let realCollapseActiveNames = [];//真实的默认展开的分组name
158
- let isIndependent = false;
159
- self.model.fields.forEach((v, index) => {
160
- v.index = index;
161
- if (v.is === 'ct-independentGroup') {
162
- isIndependent = true;
163
- return true; //continue
164
- }
165
- if (isIndependent) {
166
- this.independentItem.push(v);
167
- }
168
- else if (v.is === 'ct-group') {
169
- self.collapse.push(v);
170
- if (v.isExpand) {
171
- realCollapseActiveNames.push(self.collapse.length - 1);
172
- }
173
- self.collapseActiveNames.push(self.collapse.length - 1);
174
-
175
- collapseItemArr.push(collapseItem);
176
- v.collapseName = collapseItemArr.length - 1;
177
- collapseItem = [];
178
- }
179
- else {
180
- v.collapseName = collapseItemArr.length - 1;
181
- collapseItem.push(v);
182
- }
183
- });
184
- if (collapseItem.length > 0) {
185
- collapseItemArr.push(collapseItem);
186
- }
187
-
188
- //遍历分组里的组件,计算行列布局
189
- for (var i = 0; i < collapseItemArr.length; i++) {
190
- var myFilter = collapseItemArr[i];
191
-
192
- self.collapseFieldsRow.push(myFilter);
193
- }
194
-
195
- //因有一些子组件需要计算宽度及高度,故要先全部展开在缩起来
196
- //也可采用方案二:子组件中,找不到高度,产生一个定时器,找到为止
197
- //方案三:在显示分组时,主动触发resize方法
198
- self.$nextTick(() => {
199
- self.$set(self, 'collapseActiveNames', realCollapseActiveNames);
200
- });
201
-
202
- //联动组件处理 todo:去掉,使用form方式
203
- var hasParent = self.model.fields.filter((v) => {
204
- return typeof v.parentName !== 'undefined';
205
- });
206
- hasParent.forEach((v, index) => {
207
- var parent = self.model.fields.find((v1) => {
208
- return v1.id === v.parentName;
209
- });
210
- if (parent) {
211
- parent.child = v;
212
- v.parent = parent;
213
- }
214
- });
215
- },
216
- fieldClickHandler(field) {
217
- var router = this.model.buttons.find((v) => {
218
- return v.id === field.id;
219
- });
220
- this.clickHandler(router);
221
- },
222
- clickHandler(field, submitData) {
223
- var self = this;
224
- this.model.scripts.$fd = field.id;
225
- this.model.scripts.$result = [];
226
-
227
- var clickAcion = function (field) {
228
- if (field.isSubmit) {
229
- let verified = true;
230
- if (self.validExcute()) {
231
- if (typeof field.onClick !== 'undefined') {
232
- verified = self.$common.excute.call(self.model.scripts, field.onClick);
233
- }
234
-
235
- if (verified) {
236
- //action有值,提交到后台
237
- if (field.action) {
238
- field.disabled = true;//提交按钮禁用
239
- self.model.pageDisabled= true;
240
- field.doAction(self.getFormObj(), (data) => {
241
- if (data.rtnCode === 200) {
242
- if (self.model.flagAlertClose) {
243
- self.$common.confirm('操作成功,是否关闭本页面?', '提示', {
244
- confirmButtonText: '确定',
245
- cancelButtonText: '取消',
246
- type: 'warning'
247
- }).then(() => {
248
- //如果没有弹框 则关闭tab页
249
- if (self.$common.dialogList && self.$common.dialogList.List.length === 0) {
250
- if (typeof self.$common.getDataDrivenOpts().handler.closeTab === 'function') {
251
- self.$common.getDataDrivenOpts().handler.closeTab();
252
- }
253
- }
254
- self.$emit('submit', { formData: self.model, responseData: data });
255
- }).catch(() => {
256
- self.init();
257
- });
258
- }
259
- else {
260
- self.$emit('submit', { formData: self.model, responseData: data });
261
- }
262
- if (self.parentModel) {
263
- self.parentModel.$vue.closeTabThen(data);
264
- }
265
- }
266
- field.disabled = false;
267
- self.model.pageDisabled= false;
268
- });
269
- }
270
- //无值,触发submit事件
271
- else {
272
- self.$emit('submit', { formData: self.model, responseData: {} });
273
- }
274
- }
275
- }
276
- }
277
- else {
278
- if (typeof field.onClick !== 'undefined') {
279
- verified = self.$common.excute.call(self.model.scripts, field.onClick);
280
- }
281
-
282
- if (!submitData) {
283
- submitData = {};
284
- var tempFormData = self.model.getFormObj();
285
- field.submitFormField.forEach((v) => {
286
- submitData[v] = tempFormData[v];
287
- });
288
- }
289
-
290
- if (field.isOpenForm) {
291
- var dialogOption = {
292
- title: field.pageTitle,
293
- pane: self.$common.getParentPane(self),
294
- content: [{
295
- component: 'ct-form',
296
- attrs: {
297
- //ssource: data.content,
298
- api: field.action,
299
- apiParam: field.getActionPara(submitData).para,
300
- showTitle: false,
301
- width: field.dialogWidth + 'px',
302
- height: field.dialogHeight + 'px'
303
- },
304
- on: {
305
- submit(ev) {
306
- self.model.updateFields(ev, () => {
307
- self.$refs.Fields.forEach((fd) => {
308
- fd.$forceUpdate();
309
- });
310
- });
311
- self.$common.closeDialog(dialogOption.dialog);
312
- }
313
- }
314
- }]
315
- };
316
- self.$common.openDialog(dialogOption);
317
- }
318
- else if (field.isOpenList) {
319
- var dialogOption = {
320
- title: field.pageTitle,
321
- pane: self.$common.getParentPane(self),
322
- content: [{
323
- component: 'ct-searchlist',
324
- attrs: {
325
- searchConditionApi: field.actionForSearchLayout,
326
- searchDataApi: field.actionForSearch,
327
- apiParam: submitData,
328
- width: field.dialogWidth + 'px',
329
- height: field.dialogHeight + 'px'
330
- },
331
- on: {
332
- submit(ev) {
333
- self.model.updateFields(ev, () => {
334
- self.$refs.Fields.forEach((fd) => {
335
- fd.$forceUpdate();
336
- });
337
- });
338
- self.$common.closeDialog(dialogOption.dialog);
339
- }
340
- }
341
- }]
342
- };
343
- self.$common.openDialog(dialogOption);
344
- }
345
- else if (field.isFormPageInTab || field.isSearchPageInTab) {// 外部框架tab页打开
346
- submitData = field.getActionPara(submitData).para;
347
- self.$common.getDataDrivenOpts().handler.openTab(field.action, submitData, field.pageTitle);
348
- }
349
- else if (field.isBrowserNewTab) {// 浏览器打开
350
- submitData = field.getActionPara(submitData).para;
351
- let query = self.$common.objectToQueryStr(submitData);
352
- window.open(field.action + query, "_blank");
353
- }
354
- }
355
- }
356
-
357
- if (field.isSubmit && !self.validExcute()) {
358
- return;
359
- }
360
-
361
- if (field.alert) {
362
- self.$common.confirm(field.alertMsg, field.alertCaption, {
363
- confirmButtonText: field.alertOKButtonText,
364
- cancelButtonText: field.alertCancelButtonText,
365
- //type: 'warning'
366
- center: field.alertCenter
367
- }).then(() => {
368
- clickAcion(field);
369
- }).catch(() => {
370
- });
371
- }
372
- else {
373
- clickAcion(field);
374
- }
375
- },
376
- changeHandler(field) {
377
- var self = this;
378
- if (typeof field.change !== 'undefined') {
379
- if (typeof this.model.scripts !== 'undefined') {
380
- this.model.scripts.formData.setExcuteListData(this.model.fields);
381
- }
382
- this.model.scripts.$fd = field.id;
383
- this.$common.excute.call(this.model.scripts, field.change);
384
- }
385
-
386
- self.model.isChanged = true;
387
- self.model.hiddenHandle(field);
388
- self.model.requiredHandle(field);
389
- //self.model.validMrf(field);
390
- self.$forceUpdate();
391
- },
392
- changeCallBackHandler(field, callBackFunName, callBackPara) {
393
- var self = this;
394
- if(callBackFunName){
395
- this.model.scripts.$fd = field.id;
396
- this.$common.excuteFunStr.call(this.model.scripts, callBackFunName, callBackPara);
397
- }
398
- self.$forceUpdate();
399
- },
400
- inputHandler(field) {
401
- if (typeof field.input !== 'undefined') {
402
- if (typeof this.model.scripts !== 'undefined') {
403
- this.model.scripts.formData.setExcuteListData(this.model.fields);
404
- }
405
- this.model.scripts.$fd = field.id;
406
- this.$common.excute.call(this.model.scripts, field.input);
407
- }
408
- },
409
- popupSearchListHandler(singleSelectio, field, router, callBack) {
410
- var self = this;
411
- var submitData = {};
412
- var tempFormData = self.model.getFormObj();
413
-
414
- var check = true;
415
- var checkMsg;
416
- router.submitFormField.forEach((v) => {
417
- submitData[v] = tempFormData[v];
418
- if (typeof tempFormData[v] === "undefined") {
419
- if (self.model.fieldsDic[v]) {
420
- checkMsg = "请先录入" + self.model.fieldsDic[v].label;
421
- }
422
- else {
423
- checkMsg = "未配置:" + v;
424
- }
425
- check = false;
426
- }
427
- });
428
-
429
- if (!check) {
430
- self.$message.warning(checkMsg);
431
- return;
432
- }
433
-
434
- var dialogOption = {
435
- title: router.pageTitle,
436
- pane: self.$common.getParentPane(self),
437
- content: [{
438
- component: 'ct-popupSearchList',
439
- attrs: {
440
- searchFormApi: router.actionForSearchLayout,
441
- searchDataApi: router.actionForSearch,
442
- apiParam: submitData,
443
- singleSelectio: singleSelectio,
444
- width: router.dialogWidth + 'px',
445
- height: (router.dialogHeight || 500) + 'px'
446
- },
447
- on: {
448
- submit(option) {
449
- if (typeof callBack === "function" && !router.callBackFunName) {
450
- callBack(option);
451
- }
452
-
453
- self.changeCallBackHandler(field, router.changeCallBackFunName, option);
454
- }
455
- }
456
- }]
457
- };
458
- this.$common.openDialog(dialogOption);
459
- },
460
- validExcute() {
461
- var self = this;
462
- var rtnBool = true;
463
- var jump = false;
464
- self.$refs.Fields.forEach((f) => {
465
- if (f.model && typeof f.validExcute !== 'undefined') {
466
- if (!f.validExcute()) {
467
- if (!jump) {
468
- if (this.model.isHorizontalLayout) {//水平布局
469
- this.activeName = f.model.collapseName.toString();
470
- jump = true;
471
- }
472
- else {//垂直布局
473
- let timeOut = 0;
474
- //展开折叠
475
- if (f.collapseName != -1 && self.collapseActiveNames.indexOf(f.model.collapseName) == -1) {
476
- self.collapseActiveNames.push(f.model.collapseName);
477
- timeOut = 300;//展开折叠有个时间并影响滚动条位置,故需要延迟
478
- }
479
-
480
- setTimeout(function () {
481
- if (f.$el.offsetParent && f.$el.offsetParent.offsetParent) {
482
- let total = f.$el.offsetParent.offsetParent.offsetTop;
483
- //this.$common.setScrollTop(total);
484
-
485
- if (f.$el.offsetParent.offsetParent.offsetParent === null || f.$el.offsetParent.offsetParent.classList[0] === 'app-main') {
486
- total = f.$el.offsetParent.offsetTop;
487
- this.$common.setScrollTop(total);
488
- }
489
- else if (f.$el.offsetParent.offsetParent.offsetParent.localName === "body") {
490
- this.$common.setScrollTop(total);
491
- }
492
- else {
493
- f.$el.offsetParent.offsetParent.offsetParent.scrollTop = total;
494
- }
495
- }
496
- //let input = f.$el.querySelector('input');
497
- //if (input) {
498
- // input.focus();
499
- //}
500
- }, timeOut);
501
- jump = true;
502
- }
503
- }
504
- rtnBool = false;
505
- }
506
- }
507
- });
508
- return rtnBool;
509
- },
510
- collapseHandleChange(itemArr) {
511
- let fieldTarget = this.model.fields.filter((v) => {
512
- return itemArr.indexOf(v.collapseName) > 0;
513
- });
514
- fieldTarget.forEach((f) => {
515
- if (f.self && f.self.resize) {
516
- f.self.resize();
517
- }
518
- });
519
- },
520
- getFormObj(){
521
- let formData=this.model.getFormObj();
522
- if(this.$route && this.$route.query && this.$route.query.pageStyle)
523
- {
524
- return Object.assign(formData,{'pageStyle':this.$route.query.pageStyle});
525
- }
526
- return formData;
527
- },
528
-
529
- }
530
- }
531
- </script>
532
- <style scoped>
533
- .el-collapse{
534
- border-top: none;
535
- }
536
- </style>
1
+ <template>
2
+ <div v-loading="loading" style="width:100%">
3
+ <div v-if="model !== null && !loading" class="ct-form" :class="{'domDisabled':model.pageDisabled}">
4
+ <!--可根据场景判断显示el-card还是el-main-->
5
+ <component :is="model.showTitle?'el-main':'el-card'">
6
+ <div slot="header" class="clearfix" v-if="typeof model.title !== 'undefined' && model.flagShowTitle">
7
+ <span style="font-weight:bold">{{model.title}}</span>
8
+ </div>
9
+ <!--头部元素-->
10
+ <el-row v-if="collapseFieldsRow.length > 0">
11
+ <el-col v-for="(col, index) in collapseFieldsRow[0]" :key="index" v-if="col.show !== false" :span="col.colspan" style="padding:5px">
12
+ <component ref="Fields" :is="col.is" :vmodel="col" :api="model.optionApi" v-bind="col.bindPara"
13
+ @click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)"
14
+ @input="inputHandler(col,$event)"
15
+ @popupSearchList="popupSearchListHandler"
16
+ @tableButtonClick="clickHandler"></component>
17
+ </el-col>
18
+ </el-row>
19
+ <!--tabs-->
20
+ <el-tabs v-if="model.isHorizontalLayout" v-model="activeName">
21
+ <el-tab-pane :label="item.label" :name="index.toString()"
22
+ v-for="(item, index) in collapse" v-if="item.show !== false" :key="index">
23
+ <el-row>
24
+ <el-col v-for="(col, index) in collapseFieldsRow[index + 1]" :key="index" :span="col.colspan" v-if="col.show !== false" style="padding:5px">
25
+ <component ref="Fields" :is="col.is" :vmodel="col" :api="model.optionApi" v-bind="col.bindPara"
26
+ @click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)"
27
+ @input="inputHandler(col,$event)"
28
+ @popupSearchList="popupSearchListHandler"
29
+ @tableButtonClick="clickHandler"></component>
30
+ </el-col>
31
+ </el-row>
32
+ </el-tab-pane>
33
+ </el-tabs>
34
+ <!--分组-->
35
+ <el-collapse v-else v-model="collapseActiveNames" @change="collapseHandleChange">
36
+ <el-collapse-item v-for="(item, index) in collapse" v-if="item.show !== false" :key="index" :title="item.label" :name="index" :disabled="item.lock">
37
+ <template slot="title">
38
+ <i class="sign"></i>
39
+ {{item.label}}
40
+ </template>
41
+ <el-row>
42
+ <el-col v-for="(col, index) in collapseFieldsRow[index + 1]" :key="index" :span="col.colspan" v-if="col.show !== false" style="padding:5px">
43
+ <component ref="Fields" :is="col.is" :vmodel="col" :api="model.optionApi" v-bind="col.bindPara"
44
+ @click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)"
45
+ @input="inputHandler(col,$event)"
46
+ @popupSearchList="popupSearchListHandler"
47
+ @tableButtonClick="clickHandler"></component>
48
+ </el-col>
49
+ </el-row>
50
+ </el-collapse-item>
51
+ </el-collapse>
52
+ <!--尾部元素-->
53
+ <el-row v-if="independentItem.length > 0" style="margin-top: 20px;">
54
+ <el-col v-for="(col, index) in independentItem" :key="index" v-if="col.show !== false" :span="col.colspan" style="padding:5px">
55
+ <component ref="Fields" :is="col.is" :vmodel="col" :api="model.optionApi" v-bind="col.bindPara"
56
+ @click="fieldClickHandler(col,$event)" @change="changeHandler(col,$event)"
57
+ @input="inputHandler(col,$event)"
58
+ @popupSearchList="popupSearchListHandler"
59
+ @tableButtonClick="clickHandler"></component>
60
+ </el-col>
61
+ </el-row>
62
+ <el-row v-if="model.links.length > -1" style="margin-top: 8px;">
63
+ <el-col :span="24" style="text-align:left">
64
+ <component v-for="(btn, index) in model.links" :key="index" :is="btn.is" :vmodel="btn" @click="clickHandler" v-if="btn.show"></component>
65
+ </el-col>
66
+ </el-row>
67
+ <el-row v-if="model.buttons.findIndex((v)=>{return v.show}) > -1" style="margin-top: 8px;">
68
+ <el-col :span="24" style="text-align:center">
69
+ <component v-for="(btn, index) in model.buttons" :key="index" :is="btn.is" :vmodel="btn" @click="clickHandler" v-if="btn.show"></component>
70
+ </el-col>
71
+ </el-row>
72
+ </component>
73
+ </div>
74
+ <div style="min-height:200px" v-if="loading"></div>
75
+ </div>
76
+ </template>
77
+ <script>
78
+ import dynamicElement from '../../mixins/dynamicElement'
79
+ import dynamicFormListTalbe from './dynamicFormListTable'
80
+ import { setTimeout } from 'timers';
81
+ //import dynamicFormList from './dynamicFormList'
82
+ export default {
83
+ name: 'ct-form',
84
+ mixins: [dynamicElement],
85
+ components: {
86
+ 'ct-form-list-table': dynamicFormListTalbe
87
+ },
88
+ props: {
89
+ api: String,
90
+ vmodel: Object,
91
+ source: Object,
92
+ apiParam: Object,
93
+ parentModel: Object,
94
+ showTitle: {
95
+ type: Boolean,
96
+ default: false
97
+ }
98
+ },
99
+ data() {
100
+ var self = this;
101
+ return {
102
+ loading: true,
103
+ activeName: '0',
104
+ collapse: [],//分组数组
105
+ collapseActiveNames: [],//默认展开的分组name
106
+ collapseFieldsRow: [],//分组数组对应的行列布局
107
+ independentItem: []//最后一个独立分组的行列布局
108
+ };
109
+ },
110
+ mounted() {
111
+ this.init();
112
+ },
113
+ methods: {
114
+ init() {
115
+ var self = this;
116
+ //初始化
117
+ this.loading = true;
118
+ this.collapse.splice(0, this.collapse.length);
119
+ this.collapseActiveNames.splice(0, this.collapseActiveNames.length);
120
+ this.collapseFieldsRow.splice(0, this.collapseFieldsRow.length);
121
+ this.independentItem.splice(0, this.independentItem.length);
122
+
123
+ this.$nextTick(function () {
124
+ if (typeof self.api !== 'undefined') {
125
+ self.loaderObj.Form(self.api, self.load, this.apiParam, self.failLoad);
126
+ }
127
+ else if (typeof self.source !== 'undefined') {
128
+ self.load(self.loaderObj.Form(self.source));
129
+ }
130
+ else if (self.vmodel) {
131
+ self.load(self.vmodel);
132
+ }
133
+ });
134
+ },
135
+ failLoad() {
136
+ this.$emit('failLoad', this.model);
137
+ },
138
+ load(data) {
139
+ this.$set(this, 'model', data);
140
+ this.model.self = this;
141
+ if (typeof this.model.scripts !== 'undefined') {
142
+ this.model.scripts.formData = this.model.formData;
143
+ this.model.scripts.formData.form = this.model;
144
+ this.model.scripts.formData.excuteData = this.model.fields;
145
+ this.model.scripts.formData.fieldsDic = this.model.fieldsDic;
146
+ }
147
+ this.loadFields();
148
+ this.loading = false;
149
+ //通知父组件加载完成
150
+ this.$emit('loaded', this.model);
151
+ },
152
+ loadFields() {
153
+ var self = this;
154
+
155
+ var collapseItemArr = [];//分组对应元素二维数组
156
+ var collapseItem = [];//分组对应元素数组
157
+ let realCollapseActiveNames = [];//真实的默认展开的分组name
158
+ let isIndependent = false;
159
+ self.model.fields.forEach((v, index) => {
160
+ v.index = index;
161
+ if (v.is === 'ct-independentGroup') {
162
+ isIndependent = true;
163
+ return true; //continue
164
+ }
165
+ if (isIndependent) {
166
+ this.independentItem.push(v);
167
+ }
168
+ else if (v.is === 'ct-group') {
169
+ self.collapse.push(v);
170
+ if (v.lock || v.isExpand) {
171
+ realCollapseActiveNames.push(self.collapse.length - 1);
172
+ }
173
+ self.collapseActiveNames.push(self.collapse.length - 1);
174
+
175
+ collapseItemArr.push(collapseItem);
176
+ v.collapseName = collapseItemArr.length - 1;
177
+ collapseItem = [];
178
+ }
179
+ else {
180
+ v.collapseName = collapseItemArr.length - 1;
181
+ collapseItem.push(v);
182
+ }
183
+ });
184
+ if (collapseItem.length > 0) {
185
+ collapseItemArr.push(collapseItem);
186
+ }
187
+
188
+ //遍历分组里的组件,计算行列布局
189
+ for (var i = 0; i < collapseItemArr.length; i++) {
190
+ var myFilter = collapseItemArr[i];
191
+
192
+ self.collapseFieldsRow.push(myFilter);
193
+ }
194
+
195
+ //因有一些子组件需要计算宽度及高度,故要先全部展开在缩起来
196
+ //也可采用方案二:子组件中,找不到高度,产生一个定时器,找到为止
197
+ //方案三:在显示分组时,主动触发resize方法
198
+ self.$nextTick(() => {
199
+ self.$set(self, 'collapseActiveNames', realCollapseActiveNames);
200
+ });
201
+
202
+ //联动组件处理 todo:去掉,使用form方式
203
+ var hasParent = self.model.fields.filter((v) => {
204
+ return typeof v.parentName !== 'undefined';
205
+ });
206
+ hasParent.forEach((v, index) => {
207
+ var parent = self.model.fields.find((v1) => {
208
+ return v1.id === v.parentName;
209
+ });
210
+ if (parent) {
211
+ parent.child = v;
212
+ v.parent = parent;
213
+ }
214
+ });
215
+ },
216
+ fieldClickHandler(field) {
217
+ var router = this.model.buttons.find((v) => {
218
+ return v.id === field.id;
219
+ });
220
+ if(router==undefined){
221
+ router = this.model.links.find((v) => {
222
+ return v.id === field.id;
223
+ });
224
+ }
225
+ if(router==undefined){
226
+ router = this.model.actionRouters.find((v) => {
227
+ return v.id === field.id;
228
+ });
229
+ }
230
+ this.clickHandler(router);
231
+ },
232
+ clickHandler(field, submitData) {
233
+ var self = this;
234
+ this.model.scripts.$fd = field.id;
235
+ this.model.scripts.$result = [];
236
+
237
+ var clickAcion = function (field) {
238
+ //若不是客户端方法,则直接访问接口
239
+ if (!field.isClientFuntion) {
240
+ if (field.isSubmit) {
241
+ let verified = true;
242
+ if (self.validExcute()) {
243
+ if (typeof field.onClick !== 'undefined') {
244
+ verified = self.$common.excute.call(self.model.scripts, field.onClick);
245
+ }
246
+
247
+ if (verified) {
248
+ //action有值,提交到后台
249
+ if (field.action) {
250
+ field.disabled = true;//提交按钮禁用
251
+ self.model.pageDisabled= true;
252
+ field.doAction(self.getFormObj(), (data) => {
253
+ if (data.rtnCode === 200) {
254
+ if (self.model.flagAlertClose) {
255
+ self.$common.confirm('操作成功,是否关闭本页面?', '提示', {
256
+ confirmButtonText: '确定',
257
+ cancelButtonText: '取消',
258
+ type: 'warning'
259
+ }).then(() => {
260
+ //如果没有弹框 则关闭tab页
261
+ if (self.$common.dialogList && self.$common.dialogList.List.length === 0) {
262
+ if (typeof self.$common.getDataDrivenOpts().handler.closeTab === 'function') {
263
+ self.$common.getDataDrivenOpts().handler.closeTab();
264
+ }
265
+ }
266
+ self.$emit('submit', { formData: self.model, responseData: data });
267
+ }).catch(() => {
268
+ self.init();
269
+ });
270
+ }
271
+ else {
272
+ self.$emit('submit', { formData: self.model, responseData: data });
273
+ }
274
+ if (self.parentModel) {
275
+ self.parentModel.$vue.closeTabThen(data);
276
+ }
277
+ }
278
+ field.disabled = false;
279
+ self.model.pageDisabled= false;
280
+ });
281
+ }
282
+ //无值,触发submit事件
283
+ else {
284
+ self.$emit('submit', { formData: self.model, responseData: {} });
285
+ }
286
+ }
287
+ }
288
+ }
289
+ else {
290
+ if (typeof field.onClick !== 'undefined') {
291
+ verified = self.$common.excute.call(self.model.scripts, field.onClick);
292
+ }
293
+
294
+ if (!submitData) {
295
+ submitData = {};
296
+ var tempFormData = self.model.getFormObj();
297
+ field.submitFormField.forEach((v) => {
298
+ submitData[v] = tempFormData[v];
299
+ });
300
+ }
301
+
302
+ if (field.isOpenForm) {
303
+ var dialogOption = {
304
+ title: field.pageTitle,
305
+ pane: self.$common.getParentPane(self),
306
+ content: [{
307
+ component: 'ct-form',
308
+ attrs: {
309
+ //ssource: data.content,
310
+ api: field.action,
311
+ apiParam: field.getActionPara(submitData).para,
312
+ showTitle: false,
313
+ width: field.dialogWidth + 'px',
314
+ height: field.dialogHeight + 'px'
315
+ },
316
+ on: {
317
+ submit(ev) {
318
+ self.model.updateFields(ev, () => {
319
+ self.$refs.Fields.forEach((fd) => {
320
+ fd.$forceUpdate();
321
+ });
322
+ });
323
+ self.$common.closeDialog(dialogOption.dialog);
324
+ }
325
+ }
326
+ }]
327
+ };
328
+ self.$common.openDialog(dialogOption);
329
+ }
330
+ else if (field.isOpenList) {
331
+ var dialogOption = {
332
+ title: field.pageTitle,
333
+ pane: self.$common.getParentPane(self),
334
+ content: [{
335
+ component: 'ct-searchlist',
336
+ attrs: {
337
+ searchConditionApi: field.actionForSearchLayout,
338
+ searchDataApi: field.actionForSearch,
339
+ apiParam: submitData,
340
+ width: field.dialogWidth + 'px',
341
+ height: field.dialogHeight + 'px'
342
+ },
343
+ on: {
344
+ submit(ev) {
345
+ self.model.updateFields(ev, () => {
346
+ self.$refs.Fields.forEach((fd) => {
347
+ fd.$forceUpdate();
348
+ });
349
+ });
350
+ self.$common.closeDialog(dialogOption.dialog);
351
+ }
352
+ }
353
+ }]
354
+ };
355
+ self.$common.openDialog(dialogOption);
356
+ }
357
+ else if (field.isFormPageInTab || field.isSearchPageInTab) {// 外部框架tab页打开
358
+ submitData = field.getActionPara(submitData).para;
359
+ self.$common.getDataDrivenOpts().handler.openTab(field.action, submitData, field.pageTitle);
360
+ }
361
+ else if (field.isBrowserNewTab) {// 浏览器打开
362
+ submitData = field.getActionPara(submitData).para;
363
+ let query = self.$common.objectToQueryStr(submitData);
364
+ window.open(field.action + query, "_blank");
365
+ }
366
+ }
367
+ }
368
+ //执行客户端脚本
369
+ else {
370
+ if (!submitData) {
371
+ submitData = {};
372
+ var tempFormData = self.model.getFormObj();
373
+ field.submitFormField.forEach((v) => {
374
+ submitData[v] = tempFormData[v];
375
+ });
376
+ }
377
+ submitData = field.getActionPara(submitData).para;
378
+ let title=field.pageTitle==undefined ?field.label:field.pageTitle;
379
+ submitData.actionType=field.actionType;
380
+ var fun =self.$common.getDataDrivenOpts().handler[field.action];
381
+ fun(submitData,title,self.model);
382
+ }
383
+ }
384
+
385
+ if (field.isSubmit && !self.validExcute()) {
386
+ return;
387
+ }
388
+
389
+ if (field.alert) {
390
+ self.$common.confirm(field.alertMsg, field.alertCaption, {
391
+ confirmButtonText: field.alertOKButtonText,
392
+ cancelButtonText: field.alertCancelButtonText,
393
+ //type: 'warning'
394
+ center: field.alertCenter
395
+ }).then(() => {
396
+ clickAcion(field);
397
+ }).catch(() => {
398
+ });
399
+ }
400
+ else {
401
+ clickAcion(field);
402
+ }
403
+ },
404
+ changeHandler(field) {
405
+ var self = this;
406
+ if (typeof field.change !== 'undefined') {
407
+ if (typeof this.model.scripts !== 'undefined') {
408
+ this.model.scripts.formData.setExcuteListData(this.model.fields);
409
+ }
410
+ this.model.scripts.$fd = field.id;
411
+ this.$common.excute.call(this.model.scripts, field.change);
412
+ }
413
+
414
+ self.model.isChanged = true;
415
+ self.model.hiddenHandle(field);
416
+ self.model.requiredHandle(field);
417
+ //self.model.validMrf(field);
418
+ self.$forceUpdate();
419
+ },
420
+ changeCallBackHandler(field, callBackFunName, callBackPara) {
421
+ var self = this;
422
+ if(callBackFunName){
423
+ this.model.scripts.$fd = field.id;
424
+ this.$common.excuteFunStr.call(this.model.scripts, callBackFunName, callBackPara);
425
+ }
426
+ self.$forceUpdate();
427
+ },
428
+ inputHandler(field) {
429
+ if (typeof field.input !== 'undefined') {
430
+ if (typeof this.model.scripts !== 'undefined') {
431
+ this.model.scripts.formData.setExcuteListData(this.model.fields);
432
+ }
433
+ this.model.scripts.$fd = field.id;
434
+ this.$common.excute.call(this.model.scripts, field.input);
435
+ }
436
+ },
437
+ popupSearchListHandler(singleSelectio, field, router, callBack) {
438
+ var self = this;
439
+ var submitData = {};
440
+ var tempFormData = self.model.getFormObj();
441
+
442
+ var check = true;
443
+ var checkMsg;
444
+ router.submitFormField.forEach((v) => {
445
+ submitData[v] = tempFormData[v];
446
+ if (typeof tempFormData[v] === "undefined") {
447
+ if (self.model.fieldsDic[v]) {
448
+ checkMsg = "请先录入" + self.model.fieldsDic[v].label;
449
+ }
450
+ else {
451
+ checkMsg = "未配置:" + v;
452
+ }
453
+ check = false;
454
+ }
455
+ });
456
+
457
+ if (!check) {
458
+ self.$message.warning(checkMsg);
459
+ return;
460
+ }
461
+
462
+ var dialogOption = {
463
+ title: router.pageTitle,
464
+ pane: self.$common.getParentPane(self),
465
+ content: [{
466
+ component: 'ct-popupSearchList',
467
+ attrs: {
468
+ searchFormApi: router.actionForSearchLayout,
469
+ searchDataApi: router.actionForSearch,
470
+ apiParam: submitData,
471
+ singleSelectio: singleSelectio,
472
+ width: router.dialogWidth + 'px',
473
+ height: (router.dialogHeight || 500) + 'px'
474
+ },
475
+ on: {
476
+ submit(option) {
477
+ if (typeof callBack === "function" && !router.callBackFunName) {
478
+ callBack(option);
479
+ }
480
+
481
+ self.changeCallBackHandler(field, router.changeCallBackFunName, option);
482
+ }
483
+ }
484
+ }]
485
+ };
486
+ this.$common.openDialog(dialogOption);
487
+ },
488
+ validExcute() {
489
+ var self = this;
490
+ var rtnBool = true;
491
+ var jump = false;
492
+ self.$refs.Fields.forEach((f) => {
493
+ if (f.model && typeof f.validExcute !== 'undefined') {
494
+ if (!f.validExcute()) {
495
+ if (!jump) {
496
+ if (this.model.isHorizontalLayout) {//水平布局
497
+ this.activeName = f.model.collapseName.toString();
498
+ jump = true;
499
+ }
500
+ else {//垂直布局
501
+ let timeOut = 0;
502
+ //展开折叠
503
+ if (f.collapseName != -1 && self.collapseActiveNames.indexOf(f.model.collapseName) == -1) {
504
+ self.collapseActiveNames.push(f.model.collapseName);
505
+ timeOut = 300;//展开折叠有个时间并影响滚动条位置,故需要延迟
506
+ }
507
+
508
+ setTimeout(function () {
509
+ if (f.$el.offsetParent && f.$el.offsetParent.offsetParent) {
510
+ let total = f.$el.offsetParent.offsetParent.offsetTop;
511
+ //this.$common.setScrollTop(total);
512
+
513
+ if (f.$el.offsetParent.offsetParent.offsetParent === null || f.$el.offsetParent.offsetParent.classList[0] === 'app-main') {
514
+ total = f.$el.offsetParent.offsetTop;
515
+ this.$common.setScrollTop(total);
516
+ }
517
+ else if (f.$el.offsetParent.offsetParent.offsetParent.localName === "body") {
518
+ this.$common.setScrollTop(total);
519
+ }
520
+ else {
521
+ f.$el.offsetParent.offsetParent.offsetParent.scrollTop = total;
522
+ }
523
+ }
524
+ //let input = f.$el.querySelector('input');
525
+ //if (input) {
526
+ // input.focus();
527
+ //}
528
+ }, timeOut);
529
+ jump = true;
530
+ }
531
+ }
532
+ rtnBool = false;
533
+ }
534
+ }
535
+ });
536
+ return rtnBool;
537
+ },
538
+ collapseHandleChange(itemArr) {
539
+ let fieldTarget = this.model.fields.filter((v) => {
540
+ return itemArr.indexOf(v.collapseName) > 0;
541
+ });
542
+ fieldTarget.forEach((f) => {
543
+ if (f.self && f.self.resize) {
544
+ f.self.resize();
545
+ }
546
+ });
547
+ },
548
+ getFormObj(){
549
+ let formData=this.model.getFormObj();
550
+ if(this.$route && this.$route.query && this.$route.query.pageStyle)
551
+ {
552
+ return Object.assign(formData,{'pageStyle':this.$route.query.pageStyle});
553
+ }
554
+ return formData;
555
+ },
556
+
557
+ }
558
+ }
559
+ </script>
560
+ <style scoped>
561
+ .el-collapse{
562
+ border-top: none;
563
+ }
564
+ </style>