apply-clients 3.3.216 → 3.4.1

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 (96) hide show
  1. package/android.html +23 -23
  2. package/index.html +33 -33
  3. package/package.json +3 -3
  4. package/src/AndroidApp.vue +35 -30
  5. package/src/App.vue +20 -20
  6. package/src/android.js +21 -21
  7. package/src/apply.js +81 -90
  8. package/src/applyAndroid.js +1 -23
  9. package/src/components/android/AppOnetomany.vue +301 -285
  10. package/src/components/android/AppServiceView.vue +566 -570
  11. package/src/components/android/AppSign.vue +142 -142
  12. package/src/components/android/AppTakePic.vue +143 -144
  13. package/src/components/android/Process/AppExplorationUser.vue +320 -270
  14. package/src/components/android/Process/AppServiceControl.vue +757 -686
  15. package/src/components/android/Process/Processes/AppInstallationDetails.vue +456 -466
  16. package/src/components/android/ProgressReport/ProgressReportDetail.vue +64 -0
  17. package/src/components/android/ProgressReport/ProgressReportList.vue +209 -0
  18. package/src/components/android/Supervisory/AppProcessSupervisory.vue +73 -152
  19. package/src/components/android/Supervisory/AppSupervisoryCart.vue +121 -115
  20. package/src/components/android/TaskGraph.vue +125 -0
  21. package/src/components/product/ApplyCharge/ApplyChargeList.vue +36 -50
  22. package/src/components/product/ApplyCharge/ApplyChargeSearch.vue +3 -3
  23. package/src/components/product/Function/InstallFunction.vue +125 -122
  24. package/src/components/product/Function/InstallInfoSelect.vue +292 -318
  25. package/src/components/product/Function/Service/FunctionServiceControl.vue +222 -254
  26. package/src/components/product/Function/StopApplyCrrdList.vue +176 -0
  27. package/src/components/product/Function/functions/ApplyRecordCancel.vue +102 -0
  28. package/src/components/product/Function/functions/StopInstall.vue +106 -0
  29. package/src/components/product/Onetomany.vue +377 -296
  30. package/src/components/product/Order/OrderApply.vue +30 -30
  31. package/src/components/product/Order/OrderApplyList.vue +78 -67
  32. package/src/components/product/Order/OrderMessage.vue +11 -87
  33. package/src/components/product/Process/ExplorationSelect.vue +410 -369
  34. package/src/components/product/Process/ExplorationUser.vue +138 -128
  35. package/src/components/product/Process/Processes/InstallationDetails.vue +592 -504
  36. package/src/components/product/Process/Processes/Print/img/10101.png +0 -0
  37. package/src/components/product/Process/Processes/Print/img/1010109.png +0 -0
  38. package/src/components/product/Process/Processes/Print/img/1010110.png +0 -0
  39. package/src/components/product/Process/Processes/Print/img/1010111.png +0 -0
  40. package/src/components/product/Process/Processes/Print/img/1010112.png +0 -0
  41. package/src/components/product/Process/Processes/Print/printCharge.vue +142 -0
  42. package/src/components/product/Process/Processes/addressAndUserinfoManagement.vue +207 -181
  43. package/src/components/product/Process/Processes/chargeManagement.vue +639 -638
  44. package/src/components/product/Process/Processes/devicesManagement.vue +22 -2
  45. package/src/components/product/Process/Processes/selectApply.vue +1 -1
  46. package/src/components/product/Process/Service/ServiceControl.vue +1254 -883
  47. package/src/components/product/Process/Service/ShowBackReason.vue +33 -0
  48. package/src/components/product/ServiceView.vue +631 -741
  49. package/src/components/product/Stop/StopApply.vue +103 -103
  50. package/src/components/product/Stop/StopApplyList.vue +269 -254
  51. package/src/components/product/Supervisory/Service/SupervisoryServiceControl.vue +186 -517
  52. package/src/components/product/Supervisory/SupervisoryControl.vue +100 -108
  53. package/src/components/product/Supervisory/SupervisoryList.vue +233 -253
  54. package/src/components/product/Supervisory/SupervisoryhCart.vue +107 -124
  55. package/src/components/product/VueUtils/ApplyUpload.vue +273 -264
  56. package/src/components/product/VueUtils/HighMeter.vue +208 -0
  57. package/src/expandcssAndroid.less +1034 -517
  58. package/src/filiale/yuchuan/android/Process/AppServiceControl.vue +548 -414
  59. package/src/filiale/yuchuan/android/Process/Processes/AppInstallationDetails.vue +754 -456
  60. package/src/filiale/yuchuan/android/Task/Survey/SurveyTsak.vue +60 -0
  61. package/src/filiale/yuchuan/android.js +7 -8
  62. package/src/filiale/yuchuan/pc/Order/OrderApply.vue +528 -517
  63. package/src/filiale/yuchuan/pc/Order/OrderApplyList.vue +343 -343
  64. package/src/filiale/yuchuan/pc/Process/ExplorationSelect.vue +270 -231
  65. package/src/filiale/yuchuan/pc/Process/ExplorationUser.vue +147 -131
  66. package/src/filiale/yuchuan/pc/Process/Processes/ApplyMapCom.vue +66 -0
  67. package/src/filiale/yuchuan/pc/Process/Processes/InstallationDetails.vue +759 -0
  68. package/src/filiale/yuchuan/pc/Process/Processes/chargeManagement.vue +470 -0
  69. package/src/filiale/yuchuan/pc/Process/Service/ServiceControl.vue +879 -517
  70. package/src/filiale/yuchuan/pc.js +11 -13
  71. package/src/main.js +23 -23
  72. package/src/components/android/Function/AppFunctionServiceControl.vue +0 -329
  73. package/src/components/android/Function/AppInstallFunction.vue +0 -330
  74. package/src/components/android/Process/Processes/AppBuildSign.vue +0 -47
  75. package/src/components/android/Process/Processes/AppChargeManagement.vue +0 -468
  76. package/src/components/android/Process/Processes/AppDevicesManagement.vue +0 -490
  77. package/src/components/android/Process/Processes/AppSupplementalAgreement.vue +0 -297
  78. package/src/components/android/Process/Processes/AppjiaSign.vue +0 -47
  79. package/src/components/android/Process/Processes/AppjiafangSign.vue +0 -47
  80. package/src/components/android/Process/Processes/ApptechnologySign.vue +0 -47
  81. package/src/components/image/dwg.jpg +0 -0
  82. package/src/components/image/yasuobao.jpg +0 -0
  83. package/src/components/product/Function/Inform.vue +0 -73
  84. package/src/components/product/Function/MarketSurvey.vue +0 -81
  85. package/src/components/product/Process/Processes/printCharge.vue +0 -121
  86. package/src/components/product/Process/ShowBackReason.vue +0 -33
  87. package/src/components/product/Supervisory/Service/printChargeNode.vue +0 -873
  88. package/src/components/product/VueUtils/GaoPaiYi/HighMeter.vue +0 -1090
  89. package/src/components/product/VueUtils/ToolsPage.vue +0 -51
  90. package/src/components/product/VueUtils/Tree.vue +0 -330
  91. package/src/filiale/wuan/android.js +0 -0
  92. package/src/filiale/wuan/pc.js +0 -4
  93. package/src/filiale/yuchuan/android/AppServiceView.vue +0 -599
  94. package/src/filiale/yuchuan/android/Reserve/ApplyReserve.vue +0 -200
  95. package/src/filiale/yuchuan/android/SiteSurvey/TaskGraph.vue +0 -137
  96. package/src/filiale/yuchuan/pc/Process/Processes/MapCom.vue +0 -51
@@ -1,741 +1,631 @@
1
- <template>
2
-
3
- <div class="select-overspread" style="background-color: #ffffff;padding: 20px;overflow: scroll">
4
- <form class="form-horizontal">
5
- <div class="form-group">
6
- <div v-for="(index,item) in data.fields">
7
- <!--input-->
8
- <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
9
- v-if="(item.type==='input' || item.type==='number'||item.type === 'tel'||item.type === 'email') && !item.hidden && (item.device === 'pc' || !item.device)"
10
- :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped ? item.bootstraped + ' form-group':'col-sm-4 form-group']">
11
- <label :style="item.label_style ? item.label_style : ''"
12
- :class="item.label_bootstraped ? item.label_bootstraped+' control-label-justify control-label' : 'control-label-justify control-label col-sm-6'">{{item.label}}</label>
13
- <div :style="item.value_style ? item.value_style:''"
14
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
15
- <input class="form-control input_view" style=""
16
- :type="item.type"
17
- v-model="data.fields[index].value"
18
- :placeholder="item.placeholder"
19
- :value="data.fields[index].value"
20
- :readonly="item.readonly"
21
- :disabled="item.disabled"
22
- @change="onchange(index)"
23
- @blur="onblur(index)"
24
- @input="oninput(index)"
25
- />
26
- </div>
27
- </div>
28
-
29
- <!--时间datepicker-->
30
- <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
31
- v-if="item.type==='datepicker' && !item.hidden && (item.device === 'pc' || !item.device)"
32
- :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped ? item.bootstraped+' form-group':'col-sm-4 form-group']">
33
- <label
34
- :class="item.label_bootstraped ? item.label_bootstraped+' control-label-justify control-label' : 'control-label control-label-justify col-sm-6'">{{item.label}}</label>
35
- <div :style="item.value_style ? item.value_style:''"
36
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
37
- <datepicker
38
- @change="onchange(index)"
39
- @blur="onblur(index)"
40
- :placeholder="item.placeholder"
41
- :value.sync="data.fields[index].value"
42
- :format="item.format ? item.format : 'yyyy-MM-dd'"
43
- v-model="data.fields[index].value"
44
- :readonly="item.readonly"
45
- :disabled="item.disabled"
46
- :show-reset-button="reset">
47
- </datepicker>
48
- </div>
49
- </div>
50
-
51
- <!--textarea-->
52
- <div :style="item.style ? item.style+';margin-bottom: 20px':'margin-bottom: 20px'"
53
- v-if="item.type==='textarea' && !item.hidden && (item.device === 'pc' || !item.device)"
54
- :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-12 form-group']">
55
- <label :style="item.label_style ? item.label_style : ''"
56
- :class="item.label_bootstraped ? item.label_bootstraped + ' control-label-justify control-label' : 'control-label-justify control-label col-sm-3'">{{item.label}}</label>
57
- <div :style="item.value_style ? item.value_style:''"
58
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-10'">
59
- <textarea
60
- :readonly="item.readonly"
61
- :disabled="item.disabled"
62
- class="form-control input_view"
63
- style="width: 100%;height: 100%"
64
- :rows="item.rows"
65
- v-model="data.fields[index].value"
66
- :value="data.fields[index].value"
67
- @change="onchange(index)"
68
- @blur="onblur(index)"
69
- @input="oninput(index)"
70
- >
71
- </textarea>
72
- </div>
73
- </div>
74
-
75
- <!--select-->
76
- <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
77
- v-if="item.type==='select' && !item.hidden && (item.device === 'pc' || !item.device)"
78
- :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-4 form-group']">
79
- <label
80
- :class="item.label_bootstraped ? item.label_bootstraped+' control-label control-label-justify':'control-label-justify control-label col-sm-6'">{{item.label}}</label>
81
- <div :style="item.value_style ? item.value_style:''"
82
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
83
- <input-select
84
- class="select select_list"
85
- @blur="onblur(index)"
86
- @change="onchange(index)"
87
- :readonly="item.readonly"
88
- :disable="item.disabled"
89
- :value.sync="data.fields[index].value"
90
- v-model="data.fields[index].value"
91
- :options='data.fields[index].options'
92
- :valueSingle="true"></input-select>
93
- </div>
94
- </div>
95
-
96
- <!--checkbox-->
97
- <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
98
- v-if="item.type==='checkbox' && !item.hidden && (item.device === 'pc' || !item.device)"
99
- :class="[item.required && item.value.length === 0 ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-4 form-group']">
100
- <label v-if="item.label"
101
- :class="item.label_bootstraped?item.label_bootstraped+' control-label control-label-justify':'control-label-justify control-label col-sm-6'">{{item.label}}</label>
102
- <div :style="item.value_style ? item.value_style:''"
103
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
104
- <label class="checkbox-inline" v-for="(index2,row) in item.options">
105
- <input type="checkbox" class=""
106
- :readonly="data.fields[index].readonly"
107
- :disabled="data.fields[index].disabled"
108
- v-model="data.fields[index].value"
109
- :value="data.fields[index].options[index2].value"
110
- @change="onchange(index)"
111
- @blur="onblur(index)">
112
- {{row.label}}
113
- </label>
114
- </div>
115
- </div>
116
- </div>
117
- </div>
118
-
119
- <!-- onetomany -->
120
- <div class="" v-for="(index,item) in data.onetomany">
121
- <onetomany :onetomany="item" :index="index" v-if="item.device === 'pc' || !item.device"></onetomany>
122
- </div>
123
-
124
- <div v-for="(i,item) in data.components">
125
- <component v-if="item.device === 'pc' || !item.device" :is="item.name" :selectdata="data" :mark="item.mark"></component>
126
- </div>
127
-
128
- <!--自定义组件-->
129
- <slot></slot>
130
- <!--公司等属性-->
131
- <div class="col-sm-12 form-group text-center" style="padding-top:8px">
132
- <div class="col-sm-3 form-group center-block">
133
- <label class="col-sm-5">所属公司:</label>
134
- <div class="col-sm-6" style="text-align: left">
135
- {{model.orgs}}
136
- </div>
137
- </div>
138
- <div class="col-sm-3 form-group center-block">
139
- <label class="col-sm-5">部门:</label>
140
- <div class="col-sm-6" style="text-align: left">
141
- {{model.parentname}}
142
- </div>
143
- </div>
144
- <div class="col-sm-3 form-group center-block">
145
- <label class="col-sm-5">操作人:</label>
146
- <div class="col-sm-6 " style="text-align: left">
147
- {{model.operator}}
148
- </div>
149
- </div>
150
- <div class="col-sm-3 form-group center-block">
151
- <label class="col-sm-5">操作日期:</label>
152
- <div class="col-sm-6" style="text-align: left">
153
- {{model.operate_date}}
154
- </div>
155
- </div>
156
- </div>
157
- <!-- 按钮组 -->
158
- <div class="from-group col-sm-12 text-center">
159
- <!-- 按钮组 -->
160
- <button v-for="(index,button) in data.buttons"
161
- :disabled="button.disabled && disable_button"
162
- style="min-width:100px"
163
- :class="button.disabled && disable_button ? 'btn btn-default button_spacing' : 'btn btn-primary button_spacing'"
164
- v-if="!button.hidden"
165
- @click.prevent="click_but(button)"
166
- >
167
- {{button.button_name}}
168
- </button>
169
- </div>
170
-
171
- <!-- 按钮模态框 -->
172
- <modal v-if="showButModal" :show.sync="showButModal" backdrop="false" large>
173
- <header slot="modal-header" class="modal-header">
174
- <button type="button" class="close" @click="closeModal()"><span>&times;</span></button>
175
- <span class="modal-title"><font
176
- size="3">{{data.button.button_name}}</font></span>
177
- </header>
178
- <article slot="modal-body" class="modal-body clearfix">
179
- <div class="form-group" style="padding: 0 150px">
180
- <div v-for="(index,item) in data.button.button_fields">
181
- <div :style="item.style ? item.style : ''" :class="[item.required && !(item.value) ? 'has-error' : '', item.bootstraped ? item.bootstraped + ' form-group' : 'form-group']"
182
- v-if="(item.type==='input' || item.type==='number'||item.type === 'tel'||item.type === 'email') && !item.hidden && (item.device === 'pc' || !item.device)">
183
- <label :style="item.label_style ? item.label_style : ''"
184
- :class="item.label_bootstraped ? item.label_bootstraped + ' control-label-justify control-label' : 'control-label-justify control-label col-sm-6'">{{item.label}}</label>
185
- <div :style="item.value_style ? item.value_style : ''"
186
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-9'">
187
- <input class="form-control input_view"
188
- :placeholder="item.placeholder"
189
- :type="item.type"
190
- v-model="item.value"
191
- :value="item.value"
192
- :readonly="item.readonly"
193
- :disabled="item.disabled"
194
- @change="onbutchange(index)"
195
- @blur="onbutblur(index)"
196
- @input="onbutinput(index)"
197
- />
198
- </div>
199
- </div>
200
-
201
- <!--时间datepicker-->
202
- <div :style="item.style ? item.style : ''" :class="[item.required && !(item.value) ? 'has-error' : '', item.bootstraped ? item.bootstraped + ' form-group':'form-group']"
203
- v-if="item.type==='datepicker' && !item.hidden && (item.device === 'pc' || !item.device)">
204
- <label :style="item.label_style ? item.label_style : ''"
205
- :class="item.label_bootstraped ? item.label_bootstraped + ' control-label-justify control-label' : 'control-label-justify control-label col-sm-6'">{{item.label}}</label>
206
- <div :style="item.value_style ? item.value_style : ''"
207
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-9'">
208
- <datepicker
209
- :placeholder="item.placeholder"
210
- :value.sync="item.value"
211
- v-model="item.value"
212
- :readonly="item.readonly"
213
- :disabled="item.disabled"
214
- :format="item.format ? item.format : 'yyyy-MM-dd'"
215
- :show-reset-button="true"
216
- @change="onbutchange(index)"
217
- @blur="onbutblur(index)"
218
- ></datepicker>
219
- </div>
220
- </div>
221
-
222
- <!--select-->
223
- <div :style="item.style ? item.style : ''" :class="[item.required && !(item.value) ? 'has-error' : '', item.bootstraped ? item.bootstraped + ' form-group':'form-group']"
224
- v-if="item.type==='select' && !item.hidden && (item.device === 'pc' || !item.device)">
225
- <label :style="item.label_style ? item.label_style : ''"
226
- :class="item.label_bootstraped ? item.label_bootstraped + ' control-label-justify control-label' : 'control-label-justify control-label col-sm-6'">{{item.label}}</label>
227
- <div :style="item.value_style ? item.value_style : ''"
228
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-9'">
229
- <input-select
230
- class="select select_list"
231
- :value.sync="item.value"
232
- v-model="item.value"
233
- :options='item.options'
234
- :readonly="item.readonly"
235
- :disable="item.disabled"
236
- :valueSingle="true"
237
- @blur="onbutblur(index)"
238
- @change="onbutchange(index)"
239
- ></input-select>
240
- </div>
241
- </div>
242
-
243
- <!--textarea-->
244
- <div :style="item.style ? item.style : ''" :class="[item.required && !(item.value) ? 'has-error' : '', item.bootstraped ? item.bootstraped + ' form-group':'form-group']"
245
- v-if="item.type==='textarea' && !item.hidden && (item.device === 'pc' || !item.device)">
246
- <label :style="item.label_style ? item.label_style : ''"
247
- :class="item.label_bootstraped ? item.label_bootstraped + ' control-label-justify control-label' : 'control-label-justify control-label col-sm-6'">{{item.label}}</label>
248
- <div :style="item.value_style ? item.value_style : ''"
249
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-9'">
250
- <textarea
251
- class="form-control input_view"
252
- style="width: 100%;height: 100%"
253
- v-model="item.value"
254
- :value="item.value"
255
- :rows="item.rows"
256
- :readonly="item.readonly"
257
- :disabled="item.disabled"
258
- @change="onbutchange(index)"
259
- @blur="onbutblur(index)"
260
- @input="onbutinput(index)"
261
- ></textarea>
262
- </div>
263
- </div>
264
- </div>
265
- </div>
266
- </article>
267
- <footer slot="modal-footer" class="modal-footer">
268
- <button :class="disable_modal_button ? 'btn btn-default':'btn btn-primary'"
269
- :disabled="disable_modal_button" type="button" @click="confirmModal()">
270
- 确认
271
- </button>
272
- </footer>
273
- </modal>
274
- </form>
275
- </div>
276
-
277
- </template>
278
- <script>
279
- import Vue from 'vue'
280
- import {isEmpty} from '../Util'
281
- // Date格式化
282
- Date.prototype.Format = function (fmt) {
283
- var o = {
284
- 'M+': this.getMonth() + 1, // 月份
285
- 'd+': this.getDate(), //
286
- 'H+': this.getHours(), // 小时
287
- 'm+': this.getMinutes(), //
288
- 's+': this.getSeconds(), //
289
- 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
290
- 'S': this.getMilliseconds() // 毫秒
291
- }
292
- if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
293
- for (var k in o) {
294
- if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
295
- }
296
- return fmt
297
- }
298
-
299
- export default {
300
- title: '报建业务通用组件',
301
- props: {
302
- data: {
303
- type: Object
304
- }
305
- },
306
- data () {
307
- return {
308
- model: {}, // 公司等属性
309
- disable_button: true, // 控制按钮禁用
310
- disable_modal_button: true, // 控制按钮禁用
311
- showButModal: false
312
- }
313
- },
314
- watch: {
315
- deep: true
316
- },
317
- computed: {
318
-
319
- },
320
- created () {
321
- // 初始化数据
322
- this.initializtion()
323
- if (this.data.readyEvent) {
324
- this.$dispatch(this.data.readyEvent)
325
- }
326
- this.$dispatch('initializtionView')
327
- },
328
- ready(){
329
- this.diaoguo()
330
- this.diaoguo1()
331
- this.diaoguo2()
332
- },
333
- methods: {
334
- diaoguo(){
335
- if (this.model.parentname == '经理部') {
336
- if(this.data.f_budget_no != '否'){
337
- for (const item of this.data.fields) {
338
- if (item.label === '跳过预算审核结果') {
339
- item.disabled = false
340
- item.readonly = false
341
- item.required = true
342
- }
343
- }
344
- }
345
- }
346
- },
347
- diaoguo1(){
348
- if (this.model.parentname == '经理部') {
349
- if(this.data.f_toll_no != '否'){
350
- for (const item of this.data.fields) {
351
- if ( item.label==='跳过收费审核结果' ) {
352
- item.disabled = false
353
- item.readonly = false
354
- item.required = true
355
- }
356
- }
357
- }
358
- }
359
- },
360
- diaoguo2(){
361
- if (this.model.parentname == '经理部') {
362
- if(this.data.f_drawing_issuance_no != '否'){
363
- for (const item of this.data.fields) {
364
- if ( item.label==='跳过图纸下发审核结果') {
365
- item.disabled = false
366
- item.readonly = false
367
- item.required = true
368
- }
369
- }
370
- }
371
- }
372
- },
373
- // 初始化数据
374
- initializtion () {
375
- for (const item of this.data.fields) {
376
- this.data[item.field] = item.value
377
- }
378
-
379
- // 是否禁用按钮
380
- this.disableButton()
381
-
382
- console.log("----------"+this.$login.f)
383
- // 公司等属性初始化
384
- if (this.data.orgs) {
385
- this.model.orgs = this.data.orgs
386
- } else {
387
- this.model.orgs = this.$login.f.orgs
388
- }
389
- if (this.data.parentname) {
390
- this.model.parentname = this.data.parentname
391
- } else {
392
- this.model.parentname = this.$login.f.f_department_name
393
- }
394
- if (this.data.operate_date) {
395
- this.model.operate_date = this.data.operate_date
396
- } else {
397
- this.model.operate_date = new Date().Format('yyyy-MM-dd')
398
- }
399
- if (this.data.operator) {
400
- this.model.operator = this.data.operator
401
- } else {
402
- this.model.operator = this.$login.f.name
403
- }
404
- },
405
- // 是否禁用按钮
406
- disableButton () {
407
- let flag = false
408
- for (const field of this.data.fields) {
409
- if (field.required && !field.value) {
410
- if (field.value === 0) {
411
- flag = false
412
- } else {
413
- flag = true
414
- }
415
- }
416
- // 任何选择框只要是否都不能提交
417
- if (field.type === 'select' && field.value === '否' && field.value_no_disable) {
418
- flag = true
419
- }
420
-
421
- if (field.type === 'checkbox' && field.required && field.value.length === 0) {
422
- flag = true
423
- }
424
- }
425
-
426
- if(this.data.defname==='方案确定'){
427
- if( this.data.onetomany && this.data.onetomany[0].rows.length==0 && this.data.onetomany[1].rows.length==0) {
428
- flag = true
429
- }
430
- }
431
- this.disable_button = flag
432
- },
433
- // 失去焦点且值最终发生变化触发
434
- async onchange (index) {
435
- // 是否禁用按钮
436
- this.disableButton()
437
-
438
- if (!isEmpty(this.data.fields[index].value)) {
439
- // 前缀、后缀
440
- if (this.data.fields[index].prefix) {
441
- this.data.fields[index].value = this.data.fields[index].prefix + this.data.fields[index].value
442
- }
443
- if (this.data.fields[index].suffix) {
444
- this.data.fields[index].value = this.data.fields[index].value + this.data.fields[index].suffix
445
- }
446
- }
447
-
448
- // data赋值
449
- this.data[this.data.fields[index].field] = this.data.fields[index].value
450
-
451
- if (this.data.fields[index].type === 'datepicker') {
452
- this.check_datepicker(index)
453
- }
454
-
455
- if (this.data.fields[index].onchange) {
456
- this.$dispatch(this.data.fields[index].onchange, index)
457
- }
458
- this.$dispatch('onchange', index)
459
-
460
-
461
- },
462
- // 失去焦点触发,无论值是否发生变化
463
- onblur (index) {
464
- this.disableButton()
465
-
466
- if (this.data.fields[index].onblur) {
467
- this.$dispatch(this.data.fields[index].onblur, index)
468
- }
469
-
470
- this.$dispatch('onblur', index)
471
- },
472
- oninput (index) {
473
- // 是否禁用按钮
474
- this.disableButton()
475
-
476
- if (this.data.fields[index].oninput) {
477
- this.$dispatch(this.data.fields[index].oninput, index)
478
- }
479
- this.$dispatch('oninput', index)
480
- },
481
- // 点击按钮组按钮
482
- async click_but (button) {
483
- this.disable_button = true
484
-
485
- this.data.fields.forEach(item => {
486
- this.data[item.field] = item.value
487
- })
488
-
489
- this.data.button = button
490
-
491
- if (button.button_fields && button.button_fields.length > 0) {
492
- this.showButModal = true
493
- return
494
- }
495
-
496
- if (this.data.button.event) {
497
- this.$dispatch(this.data.button.event)
498
- } else {
499
- this.$dispatch('button')
500
- }
501
- },
502
- confirmModal () {
503
- this.closeModal()
504
-
505
- this.data.button.button_fields.forEach(item => {
506
- this.data.button[item.field] = item.value
507
- })
508
-
509
- if (this.data.button.event) {
510
- this.$dispatch(this.data.button.event)
511
- } else {
512
- this.$dispatch('button')
513
- }
514
- },
515
- // 关闭模态框
516
- closeModal () {
517
- this.showButModal = false
518
- this.disable_modal_button = false
519
- },
520
- onbutchange (index) {
521
- // 是否禁用按钮
522
- this.disableModalButton()
523
-
524
- if (this.data.button.button_fields[index].onchange) {
525
- this.$dispatch(this.data.button.button_fields[index].onchange, index)
526
- } else {
527
- this.$dispatch('onbutchange', index)
528
- }
529
-
530
- },
531
- onbutblur (index) {
532
- this.disableModalButton()
533
-
534
- if (this.data.button.button_fields[index].onblur) {
535
- this.$dispatch(this.data.button.button_fields[index].onblur, index)
536
- } else {
537
- this.$dispatch('onbutblur', index)
538
- }
539
- },
540
- onbutinput (index) {
541
- // 是否禁用按钮
542
- this.disableModalButton()
543
-
544
- if (this.data.button.button_fields[index].oninput) {
545
- this.$dispatch(this.data.button.button_fields[index].oninput, index)
546
- } else {
547
- this.$dispatch('onbutinput', index)
548
- }
549
- },
550
- disableModalButton () {
551
- let flag = false
552
-
553
-
554
- for (const item of this.data.button.button_fields) {
555
- if (item.required && !item.value) {
556
- if (item.value === 0) {
557
- flag = false
558
- } else {
559
- flag = true
560
- }
561
- }
562
- }
563
-
564
- this.disable_modal_button = flag
565
- },
566
- check_datepicker (index) {
567
- // 时间格式检测
568
- if (!isEmpty(this.data.fields[index].value)) {
569
-
570
- let dateReg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/
571
- let timeReg = /^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/
572
- let datetimeReg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/
573
- if (this.data.fields[index].format) {
574
- if (this.data.fields[index].format === 'yyyy-MM-dd') {
575
- if (!dateReg.test(this.data.fields[index].value)) {
576
- this.data.fields[index].value = ''
577
- this.$showAlert(this.data.fields[index].label + '格式错误如:2021-01-01', 'warning', 2000)
578
- }
579
- }
580
- if (this.data.fields[index].format === 'HH:mm:ss') {
581
- if (!timeReg.test(this.data.fields[index].value)) {
582
- this.data.fields[index].value = ''
583
- this.$showAlert(this.data.fields[index].label + '格式错误如:00:00:00', 'warning', 2000)
584
- }
585
- }
586
- if (this.data.fields[index].format === 'yyyy-MM-dd HH:mm:ss') {
587
- if (!datetimeReg.test(this.data.fields[index].value)) {
588
- this.data.fields[index].value = ''
589
- this.$showAlert(this.data.fields[index].label + '格式错误如:2021-01-01 00:00:00', 'warning', 2000)
590
- }
591
- }
592
- } else {
593
- if (!dateReg.test(this.data.fields[index].value)) {
594
- this.data.fields[index].value = ''
595
- this.$showAlert(this.data.fields[index].label + '格式错误如:2021-01-01', 'warning', 2000)
596
- }
597
- }
598
- }
599
- }
600
- },
601
- events: {
602
- 'jumpover'(index){
603
- if(this.data.f_budget_no == '否') {
604
- for (const item of this.data.fields) {
605
- if (item.label === '跳过预算审核结果') {
606
- item.disabled = false
607
- item.readonly = false
608
- item.required = false
609
- }
610
- }
611
- }
612
- if(this.data.f_budget_no == '是') {
613
- for (const item of this.data.fields) {
614
- if (item.label === '跳过预算审核结果') {
615
- item.disabled = true
616
- item.readonly = true
617
- item.required = true
618
- }
619
- }
620
- }
621
- this.diaoguo()
622
- },
623
- 'jumpover2'(index){
624
- if(this.data.f_toll_no == '否') {
625
- for (const item of this.data.fields) {
626
- if (item.label === '跳过收费审核结果') {
627
- item.disabled = false
628
- item.readonly = false
629
- item.required = false
630
- }
631
- }
632
- }else{
633
- for (const item of this.data.fields) {
634
- if ( item.label=== '跳过收费审核结果') {
635
- item.disabled = true
636
- item.readonly = true
637
- item.required = true
638
- }
639
- }
640
- }
641
- this.diaoguo1()
642
- },
643
- 'jumpover3'(index){
644
- if(this.data.f_drawing_issuance_no == '否') {
645
- for (const item of this.data.fields) {
646
- if ( item.label === '跳过图纸下发审核结果') {
647
- item.disabled = false
648
- item.readonly = false
649
- item.required = false
650
- }
651
- }
652
- }else{
653
- for (const item of this.data.fields) {
654
- if (item.label==='跳过图纸下发审核结果') {
655
- item.disabled = true
656
- item.readonly = true
657
- item.required = true
658
- }
659
- }
660
- }
661
- this.diaoguo2()
662
- }
663
-
664
- }
665
- }
666
- </script>
667
- <style>
668
- .datepicker{
669
- width: 100%!important;
670
- }
671
- .datepicker-input{
672
- background-color: #ffffff!important;
673
- width: 100%!important;
674
- }
675
- .datepicker-input:disabled{
676
- border: 1px solid #DDD!important;
677
- color: #ACA899!important;
678
- width: 100%!important;
679
- }
680
- </style>
681
- <style scoped>
682
- th{
683
- font-size: 15px !important;
684
- text-align: center !important;
685
- background-color: #dfedfb!important;
686
- color: #666666 !important;
687
- font-family: PINGFANG-BOLD !important;
688
- font-weight: normal!important;
689
- }
690
- /*清除model中的浮动*/
691
- .clearfix:after,.clearfix:before{
692
- display: table;
693
- }
694
- .clearfix:after{
695
- clear: both;
696
- }
697
-
698
- .input_view{
699
- padding: 8px;
700
- background-color: #ffffff;
701
- border-radius: 2px;
702
- border: solid 1px #c7c7c7!important;
703
- color: #333333!important;
704
- font-size: 15px!important;
705
- }
706
-
707
- .input_view[readonly]{
708
- border: 1px solid #DDD!important;
709
- color:#ACA899!important;
710
- }
711
- .input_view:disabled{
712
- border: 1px solid #DDD!important;
713
- color:#ACA899!important;
714
- }
715
-
716
- .control-label-justify {
717
- display: inline-block;
718
- vertical-align: top;
719
- width: 110px;
720
- text-align: justify;
721
- font-family: PingFang-SC-Bold;
722
- }
723
-
724
- .control-label-justify::after {
725
- content: "";
726
- display: inline-block;
727
- width: 100%;
728
- overflow: hidden;
729
- height: 0;
730
- }
731
-
732
- input::-webkit-outer-spin-button,
733
- input::-webkit-inner-spin-button {
734
- -webkit-appearance: none;
735
- }
736
-
737
- input[type="number"] {
738
- -moz-appearance: textfield;
739
- }
740
-
741
- </style>
1
+ <template>
2
+ <div class="select-overspread" style="background-color: #ffffff;padding: 20px;overflow: scroll">
3
+ <form class="form-horizontal">
4
+ <div class="form-group">
5
+ <div v-for="(index,item) in data.fields">
6
+ <!--input-->
7
+ <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
8
+ v-if="(item.type==='input' || item.type==='number'||item.type === 'tel'||item.type === 'email') && !item.hidden && (item.device === 'pc' || !item.device)"
9
+ :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped ? item.bootstraped + ' form-group':'col-sm-4 form-group']">
10
+ <label :style="item.label_style ? item.label_style : ''"
11
+ :class="item.label_bootstraped ? item.label_bootstraped+' control-label-justify control-label' : 'control-label-justify control-label col-sm-6'">{{item.label}}</label>
12
+ <div :style="item.value_style ? item.value_style:''"
13
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
14
+ <input class="form-control input_view" style=""
15
+ :type="item.type"
16
+ v-model="data.fields[index].value"
17
+ :placeholder="item.placeholder"
18
+ :value="data.fields[index].value"
19
+ :readonly="item.readonly"
20
+ :disabled="item.disabled"
21
+ @change="onchange(index)"
22
+ @blur="onblur(index)"
23
+ @input="oninput(index)"
24
+ />
25
+ </div>
26
+ </div>
27
+
28
+ <!--时间datepicker-->
29
+ <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
30
+ v-if="item.type==='datepicker' && !item.hidden && (item.device === 'pc' || !item.device)"
31
+ :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped ? item.bootstraped+' form-group':'col-sm-4 form-group']">
32
+ <label
33
+ :class="item.label_bootstraped ? item.label_bootstraped+' control-label-justify control-label' : 'control-label control-label-justify col-sm-6'">{{item.label}}</label>
34
+ <div :style="item.value_style ? item.value_style:''"
35
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
36
+ <datepicker
37
+ @change="onchange(index)"
38
+ @blur="onblur(index)"
39
+ :placeholder="item.placeholder"
40
+ :value.sync="data.fields[index].value"
41
+ :format="item.format ? item.format : 'yyyy-MM-dd'"
42
+ v-model="data.fields[index].value"
43
+ :readonly="item.readonly"
44
+ :disabled="item.disabled"
45
+ :show-reset-button="reset">
46
+ </datepicker>
47
+ </div>
48
+ </div>
49
+
50
+ <!--textarea-->
51
+ <div :style="item.style ? item.style+';margin-bottom: 20px':'margin-bottom: 20px'"
52
+ v-if="item.type==='textarea' && !item.hidden && (item.device === 'pc' || !item.device)"
53
+ :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-12 form-group']">
54
+ <label :style="item.label_style ? item.label_style : ''"
55
+ :class="item.label_bootstraped ? item.label_bootstraped + ' control-label-justify control-label' : 'control-label-justify control-label col-sm-3'">{{item.label}}</label>
56
+ <div :style="item.value_style ? item.value_style:''"
57
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-10'">
58
+ <textarea
59
+ :readonly="item.readonly"
60
+ :disabled="item.disabled"
61
+ class="form-control input_view"
62
+ style="width: 100%;height: 100%"
63
+ :rows="item.rows"
64
+ v-model="data.fields[index].value"
65
+ :value="data.fields[index].value"
66
+ @change="onchange(index)"
67
+ @blur="onblur(index)"
68
+ @input="oninput(index)"
69
+ >
70
+ </textarea>
71
+ </div>
72
+ </div>
73
+
74
+ <!--select-->
75
+ <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
76
+ v-if="item.type==='select' && !item.hidden && (item.device === 'pc' || !item.device)"
77
+ :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-4 form-group']">
78
+ <label
79
+ :class="item.label_bootstraped ? item.label_bootstraped+' control-label control-label-justify':'control-label-justify control-label col-sm-6'">{{item.label}}</label>
80
+ <div :style="item.value_style ? item.value_style:''"
81
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
82
+ <input-select
83
+ class="select select_list"
84
+ @blur="onblur(index)"
85
+ @change="onchange(index)"
86
+ @select-search="selectSearch($arguments,index)"
87
+ :readonly="item.readonly"
88
+ :disable="item.disabled"
89
+ :value.sync="data.fields[index].value"
90
+ v-model="data.fields[index].value"
91
+ :options='data.fields[index].options'
92
+ :valueSingle="true"></input-select>
93
+ </div>
94
+ </div>
95
+
96
+ <!--checkbox-->
97
+ <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
98
+ v-if="item.type==='checkbox' && !item.hidden && (item.device === 'pc' || !item.device)"
99
+ :class="[item.required && item.value.length === 0 ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-4 form-group']">
100
+ <label v-if="item.label"
101
+ :class="item.label_bootstraped?item.label_bootstraped+' control-label control-label-justify':'control-label-justify control-label col-sm-6'">{{item.label}}</label>
102
+ <div :style="item.value_style ? item.value_style:''"
103
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
104
+ <label class="checkbox-inline" v-for="(index2,row) in item.options">
105
+ <input type="checkbox" class=""
106
+ :readonly="data.fields[index].readonly"
107
+ :disabled="data.fields[index].disabled"
108
+ v-model="data.fields[index].value"
109
+ :value="data.fields[index].options[index2].value"
110
+ @change="onchange(index)"
111
+ @blur="onblur(index)">
112
+ {{row.label}}
113
+ </label>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ </div>
118
+
119
+ <!-- onetomany -->
120
+ <div class="" v-for="(index,item) in data.onetomany">
121
+ <onetomany :selectdata="data" :onetomany="item" :index="index" v-if="item.device === 'pc' || !item.device"></onetomany>
122
+ </div>
123
+
124
+ <div v-for="(i,item) in data.components">
125
+ <component v-if="item.device === 'pc' || !item.device" :is="item.name" :selectdata="data" :mark="item.mark"></component>
126
+ </div>
127
+
128
+ <!--自定义组件-->
129
+ <slot></slot>
130
+ <!--公司等属性-->
131
+ <div class="col-sm-12 form-group text-center" style="padding-top:8px">
132
+ <div class="col-sm-3 form-group center-block">
133
+ <label class="col-sm-5">所属公司:</label>
134
+ <div class="col-sm-6" style="text-align: left">
135
+ {{model.orgs}}
136
+ </div>
137
+ </div>
138
+ <div class="col-sm-3 form-group center-block">
139
+ <label class="col-sm-5">部门:</label>
140
+ <div class="col-sm-6" style="text-align: left">
141
+ {{model.parentname}}
142
+ </div>
143
+ </div>
144
+ <div class="col-sm-3 form-group center-block">
145
+ <label class="col-sm-5">操作人:</label>
146
+ <div class="col-sm-6 " style="text-align: left">
147
+ {{model.operator}}
148
+ </div>
149
+ </div>
150
+ <div class="col-sm-3 form-group center-block">
151
+ <label class="col-sm-5">操作日期:</label>
152
+ <div class="col-sm-6" style="text-align: left">
153
+ {{model.operate_date}}
154
+ </div>
155
+ </div>
156
+ </div>
157
+ <!-- 按钮组 -->
158
+ <div class="from-group col-sm-12 text-center">
159
+ <!-- 按钮组 -->
160
+ <button v-for="(index,button) in data.buttons"
161
+ :disabled="button.disabled && disable_button"
162
+ style="min-width:100px"
163
+ :class="button.disabled && disable_button ? 'btn btn-default button_spacing' : 'btn btn-primary button_spacing'"
164
+ v-if="!button.hidden"
165
+ @click.prevent="click_but(button)"
166
+ >
167
+ {{button.button_name}}
168
+ </button>
169
+ </div>
170
+
171
+ <!-- 按钮模态框 -->
172
+ <modal v-if="showButModal" :show.sync="showButModal" backdrop="false" large>
173
+ <header slot="modal-header" class="modal-header">
174
+ <button type="button" class="close" @click="closeModal()"><span>&times;</span></button>
175
+ <span class="modal-title"><font
176
+ size="3">{{data.button.button_name}}</font></span>
177
+ </header>
178
+ <article slot="modal-body" class="modal-body clearfix">
179
+ <div class="form-group" style="padding: 0 150px">
180
+ <div v-for="(index,item) in data.button.button_fields">
181
+ <div :style="item.style ? item.style : ''" :class="[item.required && !(item.value) ? 'has-error' : '', item.bootstraped ? item.bootstraped + ' form-group' : 'form-group']"
182
+ v-if="(item.type==='input' || item.type==='number'||item.type === 'tel'||item.type === 'email') && !item.hidden && (item.device === 'pc' || !item.device)">
183
+ <label :style="item.label_style ? item.label_style : ''"
184
+ :class="item.label_bootstraped ? item.label_bootstraped + ' control-label-justify control-label' : 'control-label-justify control-label col-sm-6'">{{item.label}}</label>
185
+ <div :style="item.value_style ? item.value_style : ''"
186
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-9'">
187
+ <input class="form-control input_view"
188
+ :placeholder="item.placeholder"
189
+ :type="item.type"
190
+ v-model="item.value"
191
+ :value="item.value"
192
+ :readonly="item.readonly"
193
+ :disabled="item.disabled"
194
+ @change="onbutchange(index)"
195
+ @blur="onbutblur(index)"
196
+ @input="onbutinput(index)"
197
+ />
198
+ </div>
199
+ </div>
200
+
201
+ <!--时间datepicker-->
202
+ <div :style="item.style ? item.style : ''" :class="[item.required && !(item.value) ? 'has-error' : '', item.bootstraped ? item.bootstraped + ' form-group':'form-group']"
203
+ v-if="item.type==='datepicker' && !item.hidden && (item.device === 'pc' || !item.device)">
204
+ <label :style="item.label_style ? item.label_style : ''"
205
+ :class="item.label_bootstraped ? item.label_bootstraped + ' control-label-justify control-label' : 'control-label-justify control-label col-sm-6'">{{item.label}}</label>
206
+ <div :style="item.value_style ? item.value_style : ''"
207
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-9'">
208
+ <datepicker
209
+ :placeholder="item.placeholder"
210
+ :value.sync="item.value"
211
+ v-model="item.value"
212
+ :readonly="item.readonly"
213
+ :disabled="item.disabled"
214
+ :format="item.format ? item.format : 'yyyy-MM-dd'"
215
+ :show-reset-button="true"
216
+ @change="onbutchange(index)"
217
+ @blur="onbutblur(index)"
218
+ ></datepicker>
219
+ </div>
220
+ </div>
221
+
222
+ <!--select-->
223
+ <div :style="item.style ? item.style : ''" :class="[item.required && !(item.value) ? 'has-error' : '', item.bootstraped ? item.bootstraped + ' form-group':'form-group']"
224
+ v-if="item.type==='select' && !item.hidden && (item.device === 'pc' || !item.device)">
225
+ <label :style="item.label_style ? item.label_style : ''"
226
+ :class="item.label_bootstraped ? item.label_bootstraped + ' control-label-justify control-label' : 'control-label-justify control-label col-sm-6'">{{item.label}}</label>
227
+ <div :style="item.value_style ? item.value_style : ''"
228
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-9'">
229
+ <input-select
230
+ class="select select_list"
231
+ :value.sync="item.value"
232
+ v-model="item.value"
233
+ :options='item.options'
234
+ :readonly="item.readonly"
235
+ :disable="item.disabled"
236
+ :valueSingle="true"
237
+ @blur="onbutblur(index)"
238
+ @change="onbutchange(index)"
239
+ ></input-select>
240
+ </div>
241
+ </div>
242
+
243
+ <!--textarea-->
244
+ <div :style="item.style ? item.style : ''" :class="[item.required && !(item.value) ? 'has-error' : '', item.bootstraped ? item.bootstraped + ' form-group':'form-group']"
245
+ v-if="item.type==='textarea' && !item.hidden && (item.device === 'pc' || !item.device)">
246
+ <label :style="item.label_style ? item.label_style : ''"
247
+ :class="item.label_bootstraped ? item.label_bootstraped + ' control-label-justify control-label' : 'control-label-justify control-label col-sm-6'">{{item.label}}</label>
248
+ <div :style="item.value_style ? item.value_style : ''"
249
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-9'">
250
+ <textarea
251
+ class="form-control input_view"
252
+ style="width: 100%;height: 100%"
253
+ v-model="item.value"
254
+ :value="item.value"
255
+ :rows="item.rows"
256
+ :readonly="item.readonly"
257
+ :disabled="item.disabled"
258
+ @change="onbutchange(index)"
259
+ @blur="onbutblur(index)"
260
+ @input="onbutinput(index)"
261
+ ></textarea>
262
+ </div>
263
+ </div>
264
+ </div>
265
+ </div>
266
+ </article>
267
+ <footer slot="modal-footer" class="modal-footer">
268
+ <button :class="disable_modal_button ? 'btn btn-default':'btn btn-primary'"
269
+ :disabled="disable_modal_button" type="button" @click="confirmModal()">
270
+ 确认
271
+ </button>
272
+ </footer>
273
+ </modal>
274
+ </form>
275
+ </div>
276
+ </template>
277
+ <script>
278
+ import Vue from 'vue'
279
+ import {isEmpty} from '../Util'
280
+ // Date格式化
281
+ Date.prototype.Format = function (fmt) {
282
+ var o = {
283
+ 'M+': this.getMonth() + 1, // 月份
284
+ 'd+': this.getDate(), //
285
+ 'H+': this.getHours(), // 小时
286
+ 'm+': this.getMinutes(), //
287
+ 's+': this.getSeconds(), //
288
+ 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
289
+ 'S': this.getMilliseconds() // 毫秒
290
+ }
291
+ if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
292
+ for (var k in o) {
293
+ if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
294
+ }
295
+ return fmt
296
+ }
297
+
298
+ export default {
299
+ title: '报建业务通用组件',
300
+ props: {
301
+ data: {
302
+ type: Object
303
+ }
304
+ },
305
+ data () {
306
+ return {
307
+ model: {}, // 公司等属性
308
+ disable_button: true, // 控制按钮禁用
309
+ disable_modal_button: true, // 控制按钮禁用
310
+ showButModal: false
311
+ }
312
+ },
313
+ watch: {
314
+ deep: true
315
+ },
316
+ computed: {
317
+
318
+ },
319
+ created () {
320
+ // 初始化数据
321
+ this.initializtion()
322
+ if (this.data.readyEvent) {
323
+ this.$dispatch(this.data.readyEvent)
324
+ }
325
+ this.$dispatch('initializtionView')
326
+ },
327
+ methods: {
328
+ // 初始化数据
329
+ initializtion () {
330
+ for (const item of this.data.fields) {
331
+ this.data[item.field] = item.value
332
+ }
333
+
334
+ // 是否禁用按钮
335
+ this.disableButton()
336
+
337
+ // 公司等属性初始化
338
+ if (this.data.orgs) {
339
+ this.model.orgs = this.data.orgs
340
+ } else {
341
+ this.model.orgs = this.$login.f.orgs
342
+ }
343
+ if (this.data.parentname) {
344
+ this.model.parentname = this.data.parentname
345
+ } else {
346
+ this.model.parentname = this.$login.f.f_department_name
347
+ }
348
+ if (this.data.operate_date) {
349
+ this.model.operate_date = this.data.operate_date
350
+ } else {
351
+ this.model.operate_date = new Date().Format('yyyy-MM-dd')
352
+ }
353
+ if (this.data.operator) {
354
+ this.model.operator = this.data.operator
355
+ } else {
356
+ this.model.operator = this.$login.f.name
357
+ }
358
+ },
359
+ // 是否禁用按钮
360
+ disableButton () {
361
+ let flag = false
362
+
363
+ for (const field of this.data.fields) {
364
+ if (field.required && !field.value && !field.hidden && field.value !== 0) {
365
+ flag = true
366
+ }
367
+
368
+ // 任何选择框只要是否都不能提交
369
+ if (field.type === 'select' && field.value === '否' && field.value_no_disable) {
370
+ flag = true
371
+ }
372
+
373
+ if (field.type === 'checkbox' && field.required && field.value.length === 0) {
374
+ flag = true
375
+ }
376
+ }
377
+
378
+ this.disable_button = flag
379
+ },
380
+ // 失去焦点且值最终发生变化触发
381
+ async onchange (index) {
382
+ // 是否禁用按钮
383
+ this.disableButton()
384
+
385
+ if (!isEmpty(this.data.fields[index].value)) {
386
+ // 前缀、后缀
387
+ if (this.data.fields[index].prefix) {
388
+ this.data.fields[index].value = this.data.fields[index].prefix + this.data.fields[index].value
389
+ }
390
+ if (this.data.fields[index].suffix) {
391
+ this.data.fields[index].value = this.data.fields[index].value + this.data.fields[index].suffix
392
+ }
393
+ }
394
+
395
+ // data赋值
396
+ this.data[this.data.fields[index].field] = this.data.fields[index].value
397
+
398
+ if (this.data.fields[index].type === 'datepicker') {
399
+ this.check_datepicker(index)
400
+ }
401
+
402
+ if (this.data.fields[index].onchange) {
403
+ this.$dispatch(this.data.fields[index].onchange, index)
404
+ }
405
+ this.$dispatch('onchange', index)
406
+ },
407
+ // 失去焦点触发,无论值是否发生变化
408
+ onblur (index) {
409
+ this.disableButton()
410
+
411
+ if (this.data.fields[index].onblur) {
412
+ this.$dispatch(this.data.fields[index].onblur, index)
413
+ }
414
+
415
+ this.$dispatch('onblur', index)
416
+ },
417
+ oninput (index) {
418
+ // 是否禁用按钮
419
+ this.disableButton()
420
+
421
+ if (this.data.fields[index].oninput) {
422
+ this.$dispatch(this.data.fields[index].oninput, index)
423
+ }
424
+ this.$dispatch('oninput', index)
425
+ },
426
+ selectSearch(event, index) {
427
+ if (this.data.fields[index].selectSearch) {
428
+ this.$dispatch(this.data.fields[index].selectSearch, event[0], index)
429
+ }
430
+ this.$dispatch('selectSearch', event[0], index)
431
+ },
432
+ // 点击按钮组按钮
433
+ async click_but (button) {
434
+ this.disable_button = true
435
+
436
+ this.data.fields.forEach(item => {
437
+ this.data[item.field] = item.value
438
+ })
439
+
440
+ this.data.button = button
441
+
442
+ if (button.button_fields && button.button_fields.length > 0) {
443
+ this.showButModal = true
444
+ return
445
+ }
446
+
447
+ if (this.data.button.event) {
448
+ this.$dispatch(this.data.button.event)
449
+ } else {
450
+ this.$dispatch('button')
451
+ }
452
+ },
453
+ confirmModal () {
454
+ this.closeModal()
455
+
456
+ this.data.button.button_fields.forEach(item => {
457
+ this.data.button[item.field] = item.value
458
+ })
459
+
460
+ if (this.data.button.event) {
461
+ this.$dispatch(this.data.button.event)
462
+ } else {
463
+ this.$dispatch('button')
464
+ }
465
+ },
466
+ // 关闭模态框
467
+ closeModal () {
468
+ this.showButModal = false
469
+ this.disable_modal_button = false
470
+ },
471
+ onbutchange (index) {
472
+ // 是否禁用按钮
473
+ this.disableModalButton()
474
+
475
+ if (this.data.button.button_fields[index].onchange) {
476
+ this.$dispatch(this.data.button.button_fields[index].onchange, index)
477
+ } else {
478
+ this.$dispatch('onbutchange', index)
479
+ }
480
+
481
+ },
482
+ onbutblur (index) {
483
+ this.disableModalButton()
484
+
485
+ if (this.data.button.button_fields[index].onblur) {
486
+ this.$dispatch(this.data.button.button_fields[index].onblur, index)
487
+ } else {
488
+ this.$dispatch('onbutblur', index)
489
+ }
490
+ },
491
+ onbutinput (index) {
492
+ // 是否禁用按钮
493
+ this.disableModalButton()
494
+
495
+ if (this.data.button.button_fields[index].oninput) {
496
+ this.$dispatch(this.data.button.button_fields[index].oninput, index)
497
+ } else {
498
+ this.$dispatch('onbutinput', index)
499
+ }
500
+ },
501
+ disableModalButton () {
502
+ let flag = false
503
+
504
+
505
+ for (const item of this.data.button.button_fields) {
506
+ if (item.required && !item.value) {
507
+ if (item.value === 0) {
508
+ flag = false
509
+ } else {
510
+ flag = true
511
+ }
512
+ }
513
+ }
514
+
515
+ this.disable_modal_button = flag
516
+ },
517
+ check_datepicker (index) {
518
+ // 时间格式检测
519
+ if (!isEmpty(this.data.fields[index].value)) {
520
+
521
+ let dateReg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/
522
+ let timeReg = /^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/
523
+ let datetimeReg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/
524
+ if (this.data.fields[index].format) {
525
+ if (this.data.fields[index].format === 'yyyy-MM-dd') {
526
+ if (!dateReg.test(this.data.fields[index].value)) {
527
+ this.data.fields[index].value = ''
528
+ this.$showAlert(this.data.fields[index].label + '格式错误如:2021-01-01', 'warning', 2000)
529
+ }
530
+ }
531
+ if (this.data.fields[index].format === 'HH:mm:ss') {
532
+ if (!timeReg.test(this.data.fields[index].value)) {
533
+ this.data.fields[index].value = ''
534
+ this.$showAlert(this.data.fields[index].label + '格式错误如:00:00:00', 'warning', 2000)
535
+ }
536
+ }
537
+ if (this.data.fields[index].format === 'yyyy-MM-dd HH:mm:ss') {
538
+ if (!datetimeReg.test(this.data.fields[index].value)) {
539
+ this.data.fields[index].value = ''
540
+ this.$showAlert(this.data.fields[index].label + '格式错误如:2021-01-01 00:00:00', 'warning', 2000)
541
+ }
542
+ }
543
+ } else {
544
+ if (!dateReg.test(this.data.fields[index].value)) {
545
+ this.data.fields[index].value = ''
546
+ this.$showAlert(this.data.fields[index].label + '格式错误如:2021-01-01', 'warning', 2000)
547
+ }
548
+ }
549
+ }
550
+ }
551
+ },
552
+ events: {
553
+
554
+ }
555
+ }
556
+ </script>
557
+ <style>
558
+ .datepicker{
559
+ width: 100%!important;
560
+ }
561
+ .datepicker-input{
562
+ background-color: #ffffff!important;
563
+ width: 100%!important;
564
+ }
565
+ .datepicker-input:disabled{
566
+ border: 1px solid #DDD!important;
567
+ color: #ACA899!important;
568
+ width: 100%!important;
569
+ }
570
+ </style>
571
+ <style scoped>
572
+ th{
573
+ font-size: 15px !important;
574
+ text-align: center !important;
575
+ background-color: #dfedfb!important;
576
+ color: #666666 !important;
577
+ font-family: PINGFANG-BOLD !important;
578
+ font-weight: normal!important;
579
+ }
580
+ /*清除model中的浮动*/
581
+ .clearfix:after,.clearfix:before{
582
+ display: table;
583
+ }
584
+ .clearfix:after{
585
+ clear: both;
586
+ }
587
+
588
+ .input_view{
589
+ padding: 8px;
590
+ background-color: #ffffff;
591
+ border-radius: 2px;
592
+ border: solid 1px #c7c7c7!important;
593
+ color: #333333!important;
594
+ font-size: 15px!important;
595
+ }
596
+
597
+ .input_view[readonly]{
598
+ border: 1px solid #DDD!important;
599
+ color:#ACA899!important;
600
+ }
601
+ .input_view:disabled{
602
+ border: 1px solid #DDD!important;
603
+ color:#ACA899!important;
604
+ }
605
+
606
+ .control-label-justify {
607
+ display: inline-block;
608
+ vertical-align: top;
609
+ width: 110px;
610
+ text-align: justify;
611
+ font-family: PingFang-SC-Bold;
612
+ }
613
+
614
+ .control-label-justify::after {
615
+ content: "";
616
+ display: inline-block;
617
+ width: 100%;
618
+ overflow: hidden;
619
+ height: 0;
620
+ }
621
+
622
+ input::-webkit-outer-spin-button,
623
+ input::-webkit-inner-spin-button {
624
+ -webkit-appearance: none;
625
+ }
626
+
627
+ input[type="number"] {
628
+ -moz-appearance: textfield;
629
+ }
630
+
631
+ </style>