centaline-data-driven 1.1.54 → 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 -32
  26. package/src/Form.vue +29 -29
  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 +748 -748
  35. package/src/centaline/css/max.css +207 -207
  36. package/src/centaline/dialogList/index.js +11 -11
  37. package/src/centaline/dialogList/src/dialog.vue +210 -210
  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 -1293
  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 -564
  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 -239
  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 -380
  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 -36
  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 -46
  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,564 +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
- 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>
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>