apply-clients 4.1.80 → 4.1.84

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.
@@ -1,802 +1,802 @@
1
- <template>
2
- <div class="select-overspread" style="background-color: #ffffff;padding: 20px;overflow: scroll">
3
- <validator name="v">
4
- <form class="form-horizontal">
5
- <div class="form-group">
6
- <div v-for="(index,item) in data.fields" style="">
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'"
10
- v-show="!item.hidden"
11
- :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped ? item.bootstraped + ' form-group':'col-sm-4 form-group']">
12
- <label :style="item.label_style ? item.label_style : ''"
13
- :class="item.label_bootstraped ? item.label_bootstraped+' control-label-justify control-label' : 'control-label-justify control-label col-sm-6'">{{item.label}}</label>
14
- <div :style="item.value_style ? item.value_style:''"
15
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
16
- <input class="form-control input_view" style=""
17
- :type="item.type"
18
- v-model="data.fields[index].value"
19
- :placeholder="item.placeholder"
20
- :value="data.fields[index].value"
21
- :readonly="item.readonly"
22
- :disabled="item.disabled"
23
- @change="onchange(index)"
24
- @blur="onblur(index)"
25
- @input="oninput(index)"
26
- />
27
- <span
28
- v-if="item.error&&item.error.msg&&item.error.flag"
29
- style="color: red">{{item.error.msg}}</span>
30
- </div>
31
- </div>
32
- <!--时间datepicker-->
33
- <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
34
- v-if="item.type==='datepicker'"
35
- v-show="!item.hidden"
36
- :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped ? item.bootstraped+' form-group':'col-sm-4 form-group']">
37
- <label
38
- :class="item.label_bootstraped ? item.label_bootstraped+' control-label-justify control-label' : 'control-label control-label-justify col-sm-6'">{{item.label}}</label>
39
- <div :style="item.value_style ? item.value_style:''"
40
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
41
- <datepicker
42
- @change="onchange(index)"
43
- @blur="onblur(index)"
44
- :placeholder="item.placeholder"
45
- :value.sync="data.fields[index].value"
46
- :format="item.format ? item.format : 'yyyy-MM-dd'"
47
- v-model="data.fields[index].value"
48
- :readonly="item.readonly"
49
- :disabled="item.disabled"
50
- :show-reset-button="reset">
51
- </datepicker>
52
- </div>
53
- <span
54
- v-if="item.error&&item.error.msg&&item.error.flag"
55
- style="color: red">{{item.error.msg}}</span>
56
- </div>
57
-
58
- <!--textarea-->
59
- <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
60
- v-if="item.type==='textarea'" v-show="!item.hidden"
61
- :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-12 form-group']">
62
- <label :style="item.label_style ? item.label_style : ''"
63
- :class="item.label_bootstraped ? item.label_bootstraped + ' control-label-justify control-label' : 'control-label-justify control-label col-sm-3'">{{item.label}}</label>
64
- <div :style="item.value_style ? item.value_style:''"
65
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-10'">
66
- <textarea
67
- :readonly="item.readonly"
68
- :disabled="item.disabled"
69
- class="form-control input_view"
70
- style="width: 100%;height: 100%"
71
- :rows="item.rows"
72
- v-model="data.fields[index].value"
73
- :value="data.fields[index].value"
74
- @change="onchange(index)"
75
- @blur="onblur(index)"
76
- @input="oninput(index)"
77
- >
78
- </textarea>
79
- </div>
80
- <span
81
- v-if="item.error&&item.error.msg&&item.error.flag"
82
- style="color: red">{{item.error.msg}}</span>
83
- </div>
84
-
85
- <!--radio-->
86
- <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
87
- v-if="item.type==='radio'"
88
- :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-12 form-group']">
89
- <label v-if="item.label"
90
- :class="item.label_bootstraped?item.label_bootstraped+' control-label-justify control-label':'control-label-justify control-label col-sm-2'">{{item.label}}</label>
91
- <div
92
- :style="item.value_style ? item.value_style:''"
93
- :class="item.value_bootstraped?item.value_bootstraped:item.items.length%2 == 0?'col-sm-5': 'col-sm-3'"
94
- v-for="(index2,row) in item.items">
95
- <label :for="row.label"
96
- :class="item.items.length%2 == 0?'col-sm-3 control-label': 'col-sm-2 control-label'">{{row.label}}</label>
97
- <input @blur="onblur(index)"
98
- :class="item.items.length%2 == 0?'col-sm-3 control-label': 'col-sm-2 control-label'"
99
- :readonly="item.readonly" :disabled="item.disabled" style="margin-top: 10px" type="radio"
100
- :name="index" :id="row.label" v-bind:value="data.fields[index].items[index2].value"
101
- v-model="data.fields[index].value">
102
- </div>
103
- <span
104
- v-if="item.error&&item.error.msg&&item.error.flag"
105
- style="color: red">{{item.error.msg}}</span>
106
- </div>
107
-
108
- <!--select-->
109
- <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
110
- v-if="item.type==='select'" v-show="!item.hidden"
111
- :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-4 form-group']">
112
- <label
113
- :class="item.label_bootstraped ? item.label_bootstraped+' control-label control-label-justify':'control-label-justify control-label col-sm-6'">{{item.label}}</label>
114
- <div :style="item.value_style ? item.value_style:''"
115
- :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
116
- <input-select
117
- class="select select_list"
118
- @blur="onblur(index)"
119
- @change="onchange(index)"
120
- :readonly="item.readonly"
121
- :disable="item.disabled"
122
- :value.sync="data.fields[index].value"
123
- v-model="data.fields[index].value"
124
- :options='data.fields[index].options'
125
- :valueSingle="true"></input-select>
126
- </div>
127
- <span
128
- v-if="item.error&&item.error.msg&&item.error.flag"
129
- style="color: red">{{item.error.msg}}</span>
130
- </div>
131
-
132
- <!--checkbox-->
133
- <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
134
- v-if="item.type==='checkbox'"
135
- :class="[item.required&&!(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-12 form-group']">
136
- <label v-if="item.label"
137
- :class="item.label_bootstraped?item.label_bootstraped+' control-label ':'control-label col-sm-2'">{{item.label}}</label>
138
- <div style="margin-top: 6px"
139
- :class="item.value_bootstraped?item.value_bootstraped:'control-label col-sm-2'"
140
- v-for="(index2,row) in item.items">
141
- <label class="font-size form-group col-sm-6">{{row.label}}</label>
142
- <input :readonly="item.readonly" :disabled="item.disabled" type="checkbox" class="col-sm-6"
143
- :id="row.label" v-model="data.fields[index].items[index2].value" @blur="onblur(index)" >
144
- </div>
145
- </div>
146
- </div>
147
- </div>
148
- <!-- onetomany -->
149
- <div class="" v-for="(i,item) in data.onetomany" style="overflow:auto;width:100%">
150
- <table v-show="!item.hidden" class="table table-bordered table-striped table-hover" style="white-space:nowrap">
151
- <tr>
152
- <th>序号</th>
153
- <th v-for="field in item.fields" v-if="!field.displayPosition || field.displayPosition === '*' || field.displayPosition === 'list'">
154
- <nobr>{{field.label}}</nobr>
155
- </th>
156
- <th v-if="!item.hiddenOperate">
157
- <button type="button" @click="add(i)" class="btn btn-info"
158
- v-if="showprint && !item.addHidden">
159
- <span v-if="item.addText === 'default' || !item.addText" class="glyphicon glyphicon-plus" aria-hidden="true"></span>
160
- <span v-else :style="item.addStyle">{{item.addText}}</span>
161
- </button>
162
- </th>
163
- </tr>
164
- <tr v-for="(j,row) in item.rows" style="">
165
- <td style="text-align: center">{{$index+1}}</td>
166
- <td v-for="key in item.fields" v-if="!key.displayPosition || key.displayPosition === '*' || key.displayPosition === 'list'" style="text-align: center">
167
- {{row[key.field]}}
168
- </td>
169
- <td style="text-align: center" v-if="!item.hiddenOperate">
170
- <span @click="update(i,j)" v-if="showprint && !item.updateHidden">
171
- <span v-if="item.updateText === 'default' || !item.updateText" class="glyphicon glyphicon-wrench" aria-hidden="true"></span>
172
- <span v-else :style="item.updateStyle">{{item.updateText}}</span>
173
- </span>
174
- <span @click="delete(i,j)" v-if="showprint && !item.deleteHidden" style="margin-left: 10px">
175
- <span v-if="item.deleteText === 'default' || !item.deleteText" class="glyphicon glyphicon-trash" aria-hidden="true"></span>
176
- <span v-else :style="item.deleteStyle">{{item.deleteText}}</span>
177
- </span>
178
- </td>
179
- </tr>
180
- </table>
181
- </div>
182
-
183
- <div v-for="(i,item) in data.components">
184
- <component :is="item.name" :selectdata="data" :mark="item.mark" ></component>
185
- </div>
186
-
187
- <!--自定义组件-->
188
- <slot></slot>
189
- <!--公司等属性-->
190
- <div class="col-sm-12 form-group text-center" style="padding-top:8px">
191
- <div class="col-sm-3 form-group center-block">
192
- <label class="col-sm-5">所属公司:</label>
193
- <div class="col-sm-6" style="text-align: left">
194
- {{model.f_filiale}}
195
- </div>
196
- </div>
197
- <div class="col-sm-3 form-group center-block">
198
- <label class="col-sm-5">部门:</label>
199
- <div class="col-sm-6" style="text-align: left">
200
- {{model.f_parentname}}
201
- </div>
202
- </div>
203
- <div class="col-sm-3 form-group center-block">
204
- <label class="col-sm-5">操作人:</label>
205
- <div class="col-sm-6 " style="text-align: left">
206
- {{model.f_operator}}
207
- </div>
208
- </div>
209
- <div class="col-sm-3 form-group center-block">
210
- <label class="col-sm-5">操作日期:</label>
211
- <div class="col-sm-6" style="text-align: left">
212
- {{model.f_operate_date}}
213
- </div>
214
- </div>
215
- </div>
216
-
217
- </form>
218
- </validator>
219
-
220
- <!-- 按钮组 -->
221
- <div class="from-group col-sm-12" style="margin-top: 20px;height: 100px">
222
- <center>
223
- <!-- 按钮组 -->
224
- <button v-for="(index,button) in data.buttons"
225
- :disabled="(button.button_name==='提交'||button.button_name==='下发')&&disable_button" type="button"
226
- @click="clicked(index,button)"
227
- :class="(button.button_name==='提交'||button.button_name==='下发')&&disable_button?'btn btn-default':'btn btn-primary'"
228
- v-if="!button.hidden"
229
- style="min-width:100px; margin-right:50px;">
230
- {{button.button_name}}
231
- </button>
232
- </center>
233
- </div>
234
-
235
- <!-- onetomany模态框 -->
236
- <modal v-if="show" :show.sync="show" backdrop="false" :large="modalSize === 'large' ? true : false" :small="modalSize === 'small' ? true : false">
237
- <header slot="modal-header" class="modal-header">
238
- <button type="button" class="close" @click="closemodal(modeltitle)"><span>&times;</span></button>
239
- <span class="modal-title"><font
240
- size="3">{{modeltitle}}</font></span>
241
- </header>
242
- <article slot="modal-body" class="modal-body clearfix">
243
- <div
244
- :class="[item.required&&!(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped:'col-sm-12']"
245
- v-for="(index,item) in data.onetomany[onetomany_index].fields" v-if="!item.displayPosition || item.displayPosition === '*' || item.displayPosition === 'from'">
246
- <label v-show="!item.hidden" :class="item.label_bootstraped ? item.label_bootstraped + ' control-label' : 'control-label col-sm-3'" style="margin-top: 10px">{{item.label}}:</label>
247
- <div :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-7'" v-show="!item.hidden">
248
- <!--时间datepicker-->
249
- <datepicker
250
- v-if="item.type=='datepicker'"
251
- @change="onchange_modal(index)"
252
- @blur="onblur_modal(index)"
253
- :placeholder="item.placeholder"
254
- :value.sync="data.onetomany[onetomany_index].fields[index].value"
255
- :format="'yyyy-MM-dd'"
256
- v-model="data.onetomany[onetomany_index].fields[index].value"
257
- :readonly="item.readonly"
258
- :disabled="item.disabled"
259
- :show-reset-button="reset">
260
- </datepicker>
261
- <!--select-->
262
- <input-select
263
- @change="onchange_modal(index)"
264
- v-if="item.type=='select'"
265
- @blur="onblur_modal(index)"
266
- :value.sync="data.onetomany[onetomany_index].fields[index].value"
267
- v-model="data.onetomany[onetomany_index].fields[index].value"
268
- :options='data.onetomany[onetomany_index].fields[index].options'>
269
- </input-select>
270
- <!-- input -->
271
- <input v-if="item.type==='input' || item.type==='number'||item.type === 'tel'||item.type === 'email'"
272
- class="form-control"
273
- :type="item.type"
274
- v-model="data.onetomany[onetomany_index].fields[index].value"
275
- :placeholder="item.placeholder"
276
- :value="data.onetomany[onetomany_index].fields[index].value"
277
- :readonly="item.readonly"
278
- :disabled="item.disabled"
279
- @change="onchange_modal(index)"
280
- @blur="onblur_modal(index)"
281
- @input="oninput_modal(index)"
282
- />
283
- </div>
284
- </div>
285
- </article>
286
- <footer slot="modal-footer" class="modal-footer">
287
- <button :class="disable_button_onetomany?'btn btn-default':'btn btn-primary'"
288
- :disabled="disable_button_onetomany" type="button" @click="confirm_modal(modeltitle)">
289
- 确认
290
- </button>
291
- </footer>
292
- </modal>
293
-
294
- <!-- 按钮模态框 -->
295
- <modal v-if="showbutmodal" :show.sync="showbutmodal" v-ref:modal backdrop="false">
296
- <header slot="modal-header" class="modal-header">
297
- <button type="button" class="close" @click="closemodal('but')"><span>&times;</span></button>
298
- <h4 class="modal-title">{{model.button.button_name}}</h4>
299
- </header>
300
- <article slot="modal-body" class="modal-body">
301
- <div class="col-sm-12" v-for="(index,button) in data.buttons[model.button.button_index].button_fields">
302
- <label class="control-label col-sm-3" style="margin-top: 10px">{{button.label}}:</label>
303
- <div class="col-sm-7">
304
- <!--select-->
305
- <input-select v-if="button.type=='select'"
306
- :value.sync="data.buttons[model.button.button_index].button_fields[index].value"
307
- v-model="data.buttons[model.button.button_index].button_fields[index].value"
308
- :options='button.options'></input-select>
309
- <!-- input -->
310
- <input v-else type="text" class="form-control"
311
- v-model="data.buttons[model.button.button_index].button_fields[index].value"/>
312
- </div>
313
- </div>
314
- </article>
315
- <footer slot="modal-footer" style="border-top:none" class="modal-footer">
316
- <button type="button" class="btn btn-primary" :disabled="disable_button_but" @click='confirm_but_modal()'>确认</button>
317
- </footer>
318
- </modal>
319
- </div>
320
- </template>
321
- <script>
322
- import Vue from 'vue'
323
- import {HttpResetClass, PagedList} from "vue-client";
324
- // Date格式化
325
- Date.prototype.Format = function (fmt) {
326
- var o = {
327
- 'M+': this.getMonth() + 1, // 月份
328
- 'd+': this.getDate(), // 日
329
- 'H+': this.getHours(), // 小时
330
- 'm+': this.getMinutes(), // 分
331
- 's+': this.getSeconds(), // 秒
332
- 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
333
- 'S': this.getMilliseconds() // 毫秒
334
- }
335
- if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
336
- for (var k in o) {
337
- if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
338
- }
339
- return fmt
340
- }
341
-
342
- export default {
343
- title: '报建业务通用组件',
344
- props: {
345
- data: {
346
- type: Object
347
- },
348
- showprint: {
349
- type: Boolean,
350
- default: true
351
- }
352
- },
353
- data() {
354
- return {
355
- model: {}, // 公司等属性
356
- disable_button: true, // 控制按钮禁用
357
- show: false, // 控制onetomany模态框
358
- disable_button_onetomany: true, // 控制onetomany模态框按钮
359
- onetomany_index: null, // 当前选择的下标
360
- update_onetomany_index: null, // 当前需要修改的下标
361
- modeltitle: null, // 模态框标题
362
- modalSize: null, // 模态框大小
363
- showbutmodal: false,
364
- showcheck: false,
365
- back: '',
366
- }
367
- },
368
- ready() {
369
- console.log("7777777")
370
- console.log(this.data)
371
- },
372
- watch: {
373
- deep: true,
374
- },
375
- created() {
376
- // 初始化数据
377
- this.initializtion()
378
- this.$dispatch('initializtionView')
379
-
380
- this.disableButton()
381
- },
382
- methods: {
383
- // 按钮模态框确定
384
- confirm_but_modal() {
385
- for (const item of this.data.buttons[this.model.button.button_index].button_fields) {
386
- this.model.button.button_fields[item.field] = item.value
387
- }
388
- this.showbutmodal = false
389
- this.disable_button_but = true
390
- this.$dispatch('button', this.model)
391
- },
392
- // 点击按钮组按钮
393
- async clicked(index, button) {
394
- this.disable_button = true
395
- console.log("this.data")
396
- console.log(this.data)
397
- console.log(button)
398
- // 组织model.fields数据
399
- for (const item of this.data.fields) {
400
- // checkbox特殊处理
401
- if (item.type === 'checkbox') {
402
- for (let j = 0; j < item.items.length; j++) {
403
- this.model[item.items[j].field] = item.items[j].value
404
- }
405
- } else {
406
- this.model[item.field] = item.value
407
- }
408
- }
409
- this.model.f_process_id = this.data.f_process_id
410
-
411
- // 初始化model.button数据
412
- let buttondatas = {
413
- button_fields: {}
414
- }
415
- buttondatas.button_name = button.button_name
416
- buttondatas.button_index = index
417
- if (button.button_fields) {
418
- for (const item of button.button_fields) {
419
- buttondatas.button_fields[item.field] = item.value
420
- }
421
- }
422
- this.model.button = buttondatas
423
- this.model.title = this.data.title
424
- this.model.fields = this.data.fields
425
- this.model.onetomany = this.data.onetomany
426
- if (this.data.defname === '通气点火') {
427
- if (this.data.processname === '工商户报建流程' || this.data.processname === '开发商集体报建流程') {
428
- let http = new HttpResetClass()
429
- let condition = `f_blobid = '${this.data.f_process_id}'`
430
- let res = await http.load('POST', 'rs/sql/singleTable', {
431
- data: {
432
- tablename: 't_files',
433
- condition: condition
434
- }
435
- }, {resolveMsg: null, rejectMsg: null})
436
- console.log("res_________________")
437
- console.log(res)
438
- if (res.data.length === 0) {
439
- this.$showMessage("未上传图纸")
440
- return
441
- }
442
- }
443
- }
444
- // if (this.data.defname === '合同签订') {
445
- // console.log("ddddd",this.data)
446
- // }
447
- // if (this.data.defname === '竣工验收') {
448
- // // if (this.data.processname !== '工商户报建流程') {
449
- // // let t=this.selecteddd
450
- // // let diff = this.all.filter(function (val) {
451
- // // return t.indexOf(val) === -1
452
- // // })
453
- // // console.log("diff", diff)
454
- // // for(let index = 0;index < diff.length; index++){
455
- // // let data = {
456
- // // code:diff[index].f_userinfo_code
457
- // // }
458
- // // console.log("code", data.code)
459
- // // let http = new HttpResetClass()
460
- // // http.load('POST', 'rs/logic/batchcheck', {data:data}, {resolveMsg: null, rejectMsg: null})
461
- // //
462
- // // }
463
- // // }
464
- // }
465
- if (button.button_name === '退回') {
466
- this.showbutmodal = true
467
- } else if (button.button_name === '下发') {
468
- this.showbutmodal = true
469
- } else if (button.button_name === '验收') {
470
- this.showbutmodal = true
471
- } else if (button.event) {
472
- this.$dispatch(button.event)
473
- } else {
474
- this.$dispatch('button', this.model)
475
- }
476
- },
477
- // 初始化数据
478
- initializtion() {
479
- // 是否禁用按钮
480
- this.disableButton()
481
-
482
- // datepicker 没有值给当时值
483
- for (const item of this.data.fields) {
484
- if (item.type === 'datepicker' && !item.value) {
485
- item.value = new Date().Format('yyyy-MM-dd HH:mm:ss')
486
- }
487
- }
488
- // 公司等属性初始化
489
- if (this.data.filiale) {
490
- this.model.f_filiale = this.data.filiale
491
- } else {
492
- this.model.f_filiale = this.$login.f.orgs
493
- }
494
- if (this.data.f_parentname) {
495
- this.model.f_parentname = this.data.f_parentname
496
- } else {
497
- this.model.f_parentname = this.$login.f.f_department_name
498
- }
499
- if (this.data.operate_date) {
500
- this.model.f_operate_date = this.data.operate_date
501
- } else {
502
- this.model.f_operate_date = new Date().Format('yyyy-MM-dd')
503
- }
504
- if (this.data.operator) {
505
- this.model.f_operator = this.data.operator
506
- } else {
507
- this.model.f_operator = this.$login.f.name
508
- }
509
- },
510
- // 是否禁用按钮
511
- disableButton() {
512
- let fields = this.data.fields
513
-
514
- let flag = false
515
- for (const item of fields) {
516
- if (item.type !== 'checkbox' && item.required && !item.value) {
517
- if (item.value === 0) {
518
- flag = false
519
- } else {
520
- flag = true
521
- }
522
- }
523
- // 任何选择框只要是否都不能提交
524
- if (item.type === 'select' && (item.value === '否' || item.value === '未开工') && item.disabledButton) {
525
- flag = true
526
- }
527
- }
528
-
529
- let count = 0
530
- for (const item of fields) {
531
- if (item.type !== 'checkbox' && item.required) {
532
- count++
533
- }
534
- }
535
- if (count === 0) {
536
- flag = false
537
- }
538
-
539
- this.disable_button = flag
540
- },
541
- // 失去焦点触发,无论值是否发生变化
542
- onblur(index) {
543
- // 是否禁用按钮
544
- this.disableButton()
545
-
546
- this.$dispatch('onblur', index)
547
- // 如果有错误信息提示走错误信息判断处理
548
-
549
- if (this.data.fields[index].error || this.data.fields[index].type === 'datepicker') {
550
- this.$dispatch('error_check', index)
551
- }
552
- },
553
- // 失去焦点且值最终发生变化触发
554
- onchange(index) {
555
- // 是否禁用按钮
556
- this.disableButton()
557
-
558
- // this.data.fields[index].value = this.data.fields[index].value.trim()
559
-
560
- if (this.data.fields[index].prefix && this.data.fields[index].value !== '') {
561
- this.data.fields[index].value = this.data.fields[index].prefix + this.data.fields[index].value
562
- }
563
-
564
- this.data[this.data.fields[index].field] = this.data.fields[index].value
565
-
566
- if (this.data.fields[index].onchange) {
567
- this.$dispatch(this.data.fields[index].onchange, index)
568
- }
569
- this.$dispatch('onchange', index)
570
-
571
- // 如果有错误信息提示走错误信息判断处理
572
- if (this.data.fields[index].error || this.data.fields[index].type === 'datepicker') {
573
- this.$dispatch('error_check', index)
574
- }
575
- },
576
- oninput(index) {
577
- // 是否禁用按钮
578
- this.disableButton()
579
-
580
- this.$dispatch('oninput', index)
581
-
582
- // 如果有错误信息提示走错误信息判断处理
583
- if (this.data.fields[index].error || this.data.fields[index].type === 'datepicker') {
584
- this.$dispatch('error_check', index)
585
- }
586
- },
587
- // 模态框确认按钮
588
- confirm_modal(title) {
589
- if (title === '新增') {
590
- if (this.data.onetomany[this.onetomany_index].addEvent === 'default' || !this.data.onetomany[this.onetomany_index].addEvent) {
591
- this.$dispatch('onetomanyadd', this.onetomany_index)
592
- } else {
593
- this.$dispatch(this.data.onetomany[this.onetomany_index].addEvent, this.onetomany_index)
594
- }
595
- } else {
596
- if (this.data.onetomany[this.onetomany_index].updateEvent === 'default' || !this.data.onetomany[this.onetomany_index].updateEvent) {
597
- this.$dispatch('onetomanyupdate', this.onetomany_index, this.update_onetomany_index)
598
- } else {
599
- this.$dispatch(this.data.onetomany[this.onetomany_index].updateEvent, this.onetomany_index, this.update_onetomany_index)
600
- }
601
- }
602
-
603
- this.closemodal()
604
- },
605
- // 删除
606
- delete(i, j) {
607
- this.$showMessage((this.data.onetomany[i].deleteMessage === 'default' || !this.data.onetomany[i].deleteMessage) ? '您确定要删除这条记录吗?' : this.data.onetomany[i].deleteMessage, ['confirm']).then((res) => {
608
- if (res === 'confirm') {
609
- if (this.data.onetomany[i].deleteEvent === 'default' || !this.data.onetomany[i].deleteEvent) {
610
- this.$dispatch('onetomanydelete', i, j)
611
- } else {
612
- this.$dispatch(this.data.onetomany[i].deleteEvent, i, j)
613
- }
614
- }
615
- })
616
- },
617
- // 修改
618
- update(i, j) {
619
- let onetomany = this.data.onetomany[i]
620
- let item = this.data.onetomany[i].rows[j]
621
- let count = 0
622
- for (let k = 0; k < onetomany.fields.length; k++) {
623
- // 防止初始化的时候没有value
624
- Vue.set(this.data.onetomany[i].fields[k], 'value', item[this.data.onetomany[i].fields[k].field])
625
-
626
- if (onetomany.fields[j].required) {
627
- count++
628
- }
629
- }
630
- if (count === 0) {
631
- this.disable_button_onetomany = false
632
- }
633
- this.modeltitle = '修改'
634
- this.modalSize = this.data.onetomany[i].modalSize
635
- this.onetomany_index = i
636
- this.update_onetomany_index = j
637
-
638
- this.$dispatch('openUpdateModel', i, j)
639
-
640
- this.show = true
641
- },
642
- // 添加
643
- add(index) {
644
- let count = 0
645
- for (const item of this.data.onetomany[index].fields) {
646
- if (item.type === 'datepicker') {
647
- item.value = new Date().Format('yyyy-MM-dd')
648
- }
649
- if (item.required) {
650
- count++
651
- }
652
- }
653
-
654
- if (count === 0) {
655
- this.disable_button_onetomany = false
656
- }
657
- this.modeltitle = '新增'
658
- this.modalSize = this.data.onetomany[index].modalSize
659
- this.onetomany_index = index
660
-
661
- this.$dispatch('openAddModel', index)
662
-
663
- this.show = true
664
- },
665
- // 关闭模态框
666
- closemodal(val) {
667
- if (val === 'but') {
668
- this.disableButton()
669
- this.showbutmodal = false
670
- return
671
- }
672
- for (const item of this.data.onetomany[this.onetomany_index].fields) {
673
- item.value = ''
674
- }
675
- this.show = false
676
- this.disable_button_onetomany = true
677
- this.onetomany_index = null
678
- this.update_onetomany_index = null
679
- this.modeltitle = null
680
- this.modalSize = null
681
- },
682
- // 是否禁用模态框按钮
683
- disableModalButton() {
684
- let fields = this.data.onetomany[this.onetomany_index].fields
685
-
686
- let flag = false
687
- for (const item of fields) {
688
- if (item.type !== 'checkbox' && item.required && !item.value) {
689
- if (item.value === 0) {
690
- flag = false
691
- } else {
692
- flag = true
693
- }
694
- }
695
- }
696
-
697
- let count = 0
698
- for (const item of fields) {
699
- if (item.type !== 'checkbox' && item.required) {
700
- count++
701
- }
702
- }
703
- if (count === 0) {
704
- flag = false
705
- }
706
- this.disable_button_onetomany = flag
707
- },
708
- // 监听模态框属性失去焦点
709
- onchange_modal(index) {
710
- this.disableModalButton()
711
- this.$dispatch('onchange_modal', this.onetomany_index, index)
712
- },
713
- // 监听模态框属性失去焦点
714
- onblur_modal(index) {
715
- this.disableModalButton()
716
- this.$dispatch('onblur_modal', this.onetomany_index, index)
717
- },
718
- // input输入属性值发生变化监听
719
- oninput_modal(index) {
720
- this.disableModalButton()
721
- this.$dispatch('oninput_modal', this.onetomany_index, index)
722
- }
723
- }
724
- }
725
- </script>
726
- <style>
727
- .datepicker{
728
- width: 100%!important;
729
- }
730
- .datepicker-input{
731
- background-color: #ffffff!important;
732
- width: 100%!important;
733
- }
734
- .datepicker-input:disabled{
735
- border: 1px solid #DDD!important;
736
- color: #ACA899!important;
737
- width: 100%!important;
738
- }
739
- </style>
740
- <style scoped>
741
- th{
742
- font-size: 15px !important;
743
- text-align: center !important;
744
- background-color: #dfedfb!important;
745
- color: #666666 !important;
746
- font-family: PINGFANG-BOLD !important;
747
- font-weight: normal!important;
748
- }
749
- /*清除model中的浮动*/
750
- .clearfix:after,.clearfix:before{
751
- display: table;
752
- }
753
- .clearfix:after{
754
- clear: both;
755
- }
756
-
757
- .input_view{
758
- padding: 8px;
759
- background-color: #ffffff;
760
- border-radius: 2px;
761
- border: solid 1px #c7c7c7!important;
762
- color: #333333!important;
763
- font-size: 15px!important;
764
- }
765
-
766
- .input_view[readonly]{
767
- border: 1px solid #DDD!important;
768
- /*background-color: #F5F5F5;*/
769
- color:#ACA899!important;
770
- }
771
- .input_view:disabled{
772
- border: 1px solid #DDD!important;
773
- /*background-color: #F5F5F5;*/
774
- color:#ACA899!important;
775
- }
776
-
777
- .control-label-justify {
778
- display: inline-block;
779
- vertical-align: top;
780
- width: 110px;
781
- text-align: justify;
782
- font-family: PingFang-SC-Bold;
783
- }
784
-
785
- .control-label-justify::after {
786
- content: "";
787
- display: inline-block;
788
- width: 70px;
789
- overflow: hidden;
790
- height: 0;
791
- }
792
-
793
- input::-webkit-outer-spin-button,
794
- input::-webkit-inner-spin-button {
795
- -webkit-appearance: none;
796
- }
797
-
798
- input[type="number"] {
799
- -moz-appearance: textfield;
800
- }
801
-
802
- </style>
1
+ <template>
2
+ <div class="select-overspread" style="background-color: #ffffff;padding: 20px;overflow: scroll">
3
+ <validator name="v">
4
+ <form class="form-horizontal">
5
+ <div class="form-group">
6
+ <div v-for="(index,item) in data.fields" style="">
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'"
10
+ v-show="!item.hidden"
11
+ :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped ? item.bootstraped + ' form-group':'col-sm-4 form-group']">
12
+ <label :style="item.label_style ? item.label_style : ''"
13
+ :class="item.label_bootstraped ? item.label_bootstraped+' control-label-justify control-label' : 'control-label-justify control-label col-sm-6'">{{item.label}}</label>
14
+ <div :style="item.value_style ? item.value_style:''"
15
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
16
+ <input class="form-control input_view" style=""
17
+ :type="item.type"
18
+ v-model="data.fields[index].value"
19
+ :placeholder="item.placeholder"
20
+ :value="data.fields[index].value"
21
+ :readonly="item.readonly"
22
+ :disabled="item.disabled"
23
+ @change="onchange(index)"
24
+ @blur="onblur(index)"
25
+ @input="oninput(index)"
26
+ />
27
+ <span
28
+ v-if="item.error&&item.error.msg&&item.error.flag"
29
+ style="color: red">{{item.error.msg}}</span>
30
+ </div>
31
+ </div>
32
+ <!--时间datepicker-->
33
+ <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
34
+ v-if="item.type==='datepicker'"
35
+ v-show="!item.hidden"
36
+ :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped ? item.bootstraped+' form-group':'col-sm-4 form-group']">
37
+ <label
38
+ :class="item.label_bootstraped ? item.label_bootstraped+' control-label-justify control-label' : 'control-label control-label-justify col-sm-6'">{{item.label}}</label>
39
+ <div :style="item.value_style ? item.value_style:''"
40
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
41
+ <datepicker
42
+ @change="onchange(index)"
43
+ @blur="onblur(index)"
44
+ :placeholder="item.placeholder"
45
+ :value.sync="data.fields[index].value"
46
+ :format="item.format ? item.format : 'yyyy-MM-dd'"
47
+ v-model="data.fields[index].value"
48
+ :readonly="item.readonly"
49
+ :disabled="item.disabled"
50
+ :show-reset-button="reset">
51
+ </datepicker>
52
+ </div>
53
+ <span
54
+ v-if="item.error&&item.error.msg&&item.error.flag"
55
+ style="color: red">{{item.error.msg}}</span>
56
+ </div>
57
+
58
+ <!--textarea-->
59
+ <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
60
+ v-if="item.type==='textarea'" v-show="!item.hidden"
61
+ :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-12 form-group']">
62
+ <label :style="item.label_style ? item.label_style : ''"
63
+ :class="item.label_bootstraped ? item.label_bootstraped + ' control-label-justify control-label' : 'control-label-justify control-label col-sm-3'">{{item.label}}</label>
64
+ <div :style="item.value_style ? item.value_style:''"
65
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-10'">
66
+ <textarea
67
+ :readonly="item.readonly"
68
+ :disabled="item.disabled"
69
+ class="form-control input_view"
70
+ style="width: 100%;height: 100%"
71
+ :rows="item.rows"
72
+ v-model="data.fields[index].value"
73
+ :value="data.fields[index].value"
74
+ @change="onchange(index)"
75
+ @blur="onblur(index)"
76
+ @input="oninput(index)"
77
+ >
78
+ </textarea>
79
+ </div>
80
+ <span
81
+ v-if="item.error&&item.error.msg&&item.error.flag"
82
+ style="color: red">{{item.error.msg}}</span>
83
+ </div>
84
+
85
+ <!--radio-->
86
+ <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
87
+ v-if="item.type==='radio'"
88
+ :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-12 form-group']">
89
+ <label v-if="item.label"
90
+ :class="item.label_bootstraped?item.label_bootstraped+' control-label-justify control-label':'control-label-justify control-label col-sm-2'">{{item.label}}</label>
91
+ <div
92
+ :style="item.value_style ? item.value_style:''"
93
+ :class="item.value_bootstraped?item.value_bootstraped:item.items.length%2 == 0?'col-sm-5': 'col-sm-3'"
94
+ v-for="(index2,row) in item.items">
95
+ <label :for="row.label"
96
+ :class="item.items.length%2 == 0?'col-sm-3 control-label': 'col-sm-2 control-label'">{{row.label}}</label>
97
+ <input @blur="onblur(index)"
98
+ :class="item.items.length%2 == 0?'col-sm-3 control-label': 'col-sm-2 control-label'"
99
+ :readonly="item.readonly" :disabled="item.disabled" style="margin-top: 10px" type="radio"
100
+ :name="index" :id="row.label" v-bind:value="data.fields[index].items[index2].value"
101
+ v-model="data.fields[index].value">
102
+ </div>
103
+ <span
104
+ v-if="item.error&&item.error.msg&&item.error.flag"
105
+ style="color: red">{{item.error.msg}}</span>
106
+ </div>
107
+
108
+ <!--select-->
109
+ <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
110
+ v-if="item.type==='select'" v-show="!item.hidden"
111
+ :class="[item.required && !(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-4 form-group']">
112
+ <label
113
+ :class="item.label_bootstraped ? item.label_bootstraped+' control-label control-label-justify':'control-label-justify control-label col-sm-6'">{{item.label}}</label>
114
+ <div :style="item.value_style ? item.value_style:''"
115
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-6'">
116
+ <input-select
117
+ class="select select_list"
118
+ @blur="onblur(index)"
119
+ @change="onchange(index)"
120
+ :readonly="item.readonly"
121
+ :disable="item.disabled"
122
+ :value.sync="data.fields[index].value"
123
+ v-model="data.fields[index].value"
124
+ :options='data.fields[index].options'
125
+ :valueSingle="true"></input-select>
126
+ </div>
127
+ <span
128
+ v-if="item.error&&item.error.msg&&item.error.flag"
129
+ style="color: red">{{item.error.msg}}</span>
130
+ </div>
131
+
132
+ <!--checkbox-->
133
+ <div :style="item.style ? item.style+';height: 40px;margin-bottom: 20px':'height: 40px;margin-bottom: 20px'"
134
+ v-if="item.type==='checkbox'"
135
+ :class="[item.required&&!(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped+' form-group':'col-sm-12 form-group']">
136
+ <label v-if="item.label"
137
+ :class="item.label_bootstraped?item.label_bootstraped+' control-label ':'control-label col-sm-2'">{{item.label}}</label>
138
+ <div style="margin-top: 6px"
139
+ :class="item.value_bootstraped?item.value_bootstraped:'control-label col-sm-2'"
140
+ v-for="(index2,row) in item.items">
141
+ <label class="font-size form-group col-sm-6">{{row.label}}</label>
142
+ <input :readonly="item.readonly" :disabled="item.disabled" type="checkbox" class="col-sm-6"
143
+ :id="row.label" v-model="data.fields[index].items[index2].value" @blur="onblur(index)" >
144
+ </div>
145
+ </div>
146
+ </div>
147
+ </div>
148
+ <!-- onetomany -->
149
+ <div class="" v-for="(i,item) in data.onetomany" style="overflow:auto;width:100%">
150
+ <table v-show="!item.hidden" class="table table-bordered table-striped table-hover" style="white-space:nowrap">
151
+ <tr>
152
+ <th>序号</th>
153
+ <th v-for="field in item.fields" v-if="!field.displayPosition || field.displayPosition === '*' || field.displayPosition === 'list'">
154
+ <nobr>{{field.label}}</nobr>
155
+ </th>
156
+ <th v-if="!item.hiddenOperate">
157
+ <button type="button" @click="add(i)" class="btn btn-info"
158
+ v-if="showprint && !item.addHidden">
159
+ <span v-if="item.addText === 'default' || !item.addText" class="glyphicon glyphicon-plus" aria-hidden="true"></span>
160
+ <span v-else :style="item.addStyle">{{item.addText}}</span>
161
+ </button>
162
+ </th>
163
+ </tr>
164
+ <tr v-for="(j,row) in item.rows" style="">
165
+ <td style="text-align: center">{{$index+1}}</td>
166
+ <td v-for="key in item.fields" v-if="!key.displayPosition || key.displayPosition === '*' || key.displayPosition === 'list'" style="text-align: center">
167
+ {{row[key.field]}}
168
+ </td>
169
+ <td style="text-align: center" v-if="!item.hiddenOperate">
170
+ <span @click="update(i,j)" v-if="showprint && !item.updateHidden">
171
+ <span v-if="item.updateText === 'default' || !item.updateText" class="glyphicon glyphicon-wrench" aria-hidden="true"></span>
172
+ <span v-else :style="item.updateStyle">{{item.updateText}}</span>
173
+ </span>
174
+ <span @click="delete(i,j)" v-if="showprint && !item.deleteHidden" style="margin-left: 10px">
175
+ <span v-if="item.deleteText === 'default' || !item.deleteText" class="glyphicon glyphicon-trash" aria-hidden="true"></span>
176
+ <span v-else :style="item.deleteStyle">{{item.deleteText}}</span>
177
+ </span>
178
+ </td>
179
+ </tr>
180
+ </table>
181
+ </div>
182
+
183
+ <div v-for="(i,item) in data.components">
184
+ <component :is="item.name" :selectdata="data" :mark="item.mark" ></component>
185
+ </div>
186
+
187
+ <!--自定义组件-->
188
+ <slot></slot>
189
+ <!--公司等属性-->
190
+ <div class="col-sm-12 form-group text-center" style="padding-top:8px">
191
+ <div class="col-sm-3 form-group center-block">
192
+ <label class="col-sm-5">所属公司:</label>
193
+ <div class="col-sm-6" style="text-align: left">
194
+ {{model.f_filiale}}
195
+ </div>
196
+ </div>
197
+ <div class="col-sm-3 form-group center-block">
198
+ <label class="col-sm-5">部门:</label>
199
+ <div class="col-sm-6" style="text-align: left">
200
+ {{model.f_parentname}}
201
+ </div>
202
+ </div>
203
+ <div class="col-sm-3 form-group center-block">
204
+ <label class="col-sm-5">操作人:</label>
205
+ <div class="col-sm-6 " style="text-align: left">
206
+ {{model.f_operator}}
207
+ </div>
208
+ </div>
209
+ <div class="col-sm-3 form-group center-block">
210
+ <label class="col-sm-5">操作日期:</label>
211
+ <div class="col-sm-6" style="text-align: left">
212
+ {{model.f_operate_date}}
213
+ </div>
214
+ </div>
215
+ </div>
216
+
217
+ </form>
218
+ </validator>
219
+
220
+ <!-- 按钮组 -->
221
+ <div class="from-group col-sm-12" style="margin-top: 20px;height: 100px">
222
+ <center>
223
+ <!-- 按钮组 -->
224
+ <button v-for="(index,button) in data.buttons"
225
+ :disabled="(button.button_name==='提交'||button.button_name==='下发')&&disable_button" type="button"
226
+ @click="clicked(index,button)"
227
+ :class="(button.button_name==='提交'||button.button_name==='下发')&&disable_button?'btn btn-default':'btn btn-primary'"
228
+ v-if="!button.hidden"
229
+ style="min-width:100px; margin-right:50px;">
230
+ {{button.button_name}}
231
+ </button>
232
+ </center>
233
+ </div>
234
+
235
+ <!-- onetomany模态框 -->
236
+ <modal v-if="show" :show.sync="show" backdrop="false" :large="modalSize === 'large' ? true : false" :small="modalSize === 'small' ? true : false">
237
+ <header slot="modal-header" class="modal-header">
238
+ <button type="button" class="close" @click="closemodal(modeltitle)"><span>&times;</span></button>
239
+ <span class="modal-title"><font
240
+ size="3">{{modeltitle}}</font></span>
241
+ </header>
242
+ <article slot="modal-body" class="modal-body clearfix">
243
+ <div
244
+ :class="[item.required&&!(item.value) ? 'has-error' : '',item.bootstraped?item.bootstraped:'col-sm-12']"
245
+ v-for="(index,item) in data.onetomany[onetomany_index].fields" v-if="!item.displayPosition || item.displayPosition === '*' || item.displayPosition === 'from'">
246
+ <label v-show="!item.hidden" :class="item.label_bootstraped ? item.label_bootstraped + ' control-label' : 'control-label col-sm-3'" style="margin-top: 10px">{{item.label}}:</label>
247
+ <div :class="item.value_bootstraped ? item.value_bootstraped : 'col-sm-7'" v-show="!item.hidden">
248
+ <!--时间datepicker-->
249
+ <datepicker
250
+ v-if="item.type=='datepicker'"
251
+ @change="onchange_modal(index)"
252
+ @blur="onblur_modal(index)"
253
+ :placeholder="item.placeholder"
254
+ :value.sync="data.onetomany[onetomany_index].fields[index].value"
255
+ :format="'yyyy-MM-dd'"
256
+ v-model="data.onetomany[onetomany_index].fields[index].value"
257
+ :readonly="item.readonly"
258
+ :disabled="item.disabled"
259
+ :show-reset-button="reset">
260
+ </datepicker>
261
+ <!--select-->
262
+ <input-select
263
+ @change="onchange_modal(index)"
264
+ v-if="item.type=='select'"
265
+ @blur="onblur_modal(index)"
266
+ :value.sync="data.onetomany[onetomany_index].fields[index].value"
267
+ v-model="data.onetomany[onetomany_index].fields[index].value"
268
+ :options='data.onetomany[onetomany_index].fields[index].options'>
269
+ </input-select>
270
+ <!-- input -->
271
+ <input v-if="item.type==='input' || item.type==='number'||item.type === 'tel'||item.type === 'email'"
272
+ class="form-control"
273
+ :type="item.type"
274
+ v-model="data.onetomany[onetomany_index].fields[index].value"
275
+ :placeholder="item.placeholder"
276
+ :value="data.onetomany[onetomany_index].fields[index].value"
277
+ :readonly="item.readonly"
278
+ :disabled="item.disabled"
279
+ @change="onchange_modal(index)"
280
+ @blur="onblur_modal(index)"
281
+ @input="oninput_modal(index)"
282
+ />
283
+ </div>
284
+ </div>
285
+ </article>
286
+ <footer slot="modal-footer" class="modal-footer">
287
+ <button :class="disable_button_onetomany?'btn btn-default':'btn btn-primary'"
288
+ :disabled="disable_button_onetomany" type="button" @click="confirm_modal(modeltitle)">
289
+ 确认
290
+ </button>
291
+ </footer>
292
+ </modal>
293
+
294
+ <!-- 按钮模态框 -->
295
+ <modal v-if="showbutmodal" :show.sync="showbutmodal" v-ref:modal backdrop="false">
296
+ <header slot="modal-header" class="modal-header">
297
+ <button type="button" class="close" @click="closemodal('but')"><span>&times;</span></button>
298
+ <h4 class="modal-title">{{model.button.button_name}}</h4>
299
+ </header>
300
+ <article slot="modal-body" class="modal-body">
301
+ <div class="col-sm-12" v-for="(index,button) in data.buttons[model.button.button_index].button_fields">
302
+ <label class="control-label col-sm-3" style="margin-top: 10px">{{button.label}}:</label>
303
+ <div class="col-sm-7">
304
+ <!--select-->
305
+ <input-select v-if="button.type=='select'"
306
+ :value.sync="data.buttons[model.button.button_index].button_fields[index].value"
307
+ v-model="data.buttons[model.button.button_index].button_fields[index].value"
308
+ :options='button.options'></input-select>
309
+ <!-- input -->
310
+ <input v-else type="text" class="form-control"
311
+ v-model="data.buttons[model.button.button_index].button_fields[index].value"/>
312
+ </div>
313
+ </div>
314
+ </article>
315
+ <footer slot="modal-footer" style="border-top:none" class="modal-footer">
316
+ <button type="button" class="btn btn-primary" :disabled="disable_button_but" @click='confirm_but_modal()'>确认</button>
317
+ </footer>
318
+ </modal>
319
+ </div>
320
+ </template>
321
+ <script>
322
+ import Vue from 'vue'
323
+ import {HttpResetClass, PagedList} from "vue-client";
324
+ // Date格式化
325
+ Date.prototype.Format = function (fmt) {
326
+ var o = {
327
+ 'M+': this.getMonth() + 1, // 月份
328
+ 'd+': this.getDate(), // 日
329
+ 'H+': this.getHours(), // 小时
330
+ 'm+': this.getMinutes(), // 分
331
+ 's+': this.getSeconds(), // 秒
332
+ 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
333
+ 'S': this.getMilliseconds() // 毫秒
334
+ }
335
+ if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
336
+ for (var k in o) {
337
+ if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
338
+ }
339
+ return fmt
340
+ }
341
+
342
+ export default {
343
+ title: '报建业务通用组件',
344
+ props: {
345
+ data: {
346
+ type: Object
347
+ },
348
+ showprint: {
349
+ type: Boolean,
350
+ default: true
351
+ }
352
+ },
353
+ data() {
354
+ return {
355
+ model: {}, // 公司等属性
356
+ disable_button: true, // 控制按钮禁用
357
+ show: false, // 控制onetomany模态框
358
+ disable_button_onetomany: true, // 控制onetomany模态框按钮
359
+ onetomany_index: null, // 当前选择的下标
360
+ update_onetomany_index: null, // 当前需要修改的下标
361
+ modeltitle: null, // 模态框标题
362
+ modalSize: null, // 模态框大小
363
+ showbutmodal: false,
364
+ showcheck: false,
365
+ back: '',
366
+ }
367
+ },
368
+ ready() {
369
+ console.log("7777777")
370
+ console.log(this.data)
371
+ },
372
+ watch: {
373
+ deep: true,
374
+ },
375
+ created() {
376
+ // 初始化数据
377
+ this.initializtion()
378
+ this.$dispatch('initializtionView')
379
+
380
+ this.disableButton()
381
+ },
382
+ methods: {
383
+ // 按钮模态框确定
384
+ confirm_but_modal() {
385
+ for (const item of this.data.buttons[this.model.button.button_index].button_fields) {
386
+ this.model.button.button_fields[item.field] = item.value
387
+ }
388
+ this.showbutmodal = false
389
+ this.disable_button_but = true
390
+ this.$dispatch('button', this.model)
391
+ },
392
+ // 点击按钮组按钮
393
+ async clicked(index, button) {
394
+ this.disable_button = true
395
+ console.log("this.data")
396
+ console.log(this.data)
397
+ console.log(button)
398
+ // 组织model.fields数据
399
+ for (const item of this.data.fields) {
400
+ // checkbox特殊处理
401
+ if (item.type === 'checkbox') {
402
+ for (let j = 0; j < item.items.length; j++) {
403
+ this.model[item.items[j].field] = item.items[j].value
404
+ }
405
+ } else {
406
+ this.model[item.field] = item.value
407
+ }
408
+ }
409
+ this.model.f_process_id = this.data.f_process_id
410
+
411
+ // 初始化model.button数据
412
+ let buttondatas = {
413
+ button_fields: {}
414
+ }
415
+ buttondatas.button_name = button.button_name
416
+ buttondatas.button_index = index
417
+ if (button.button_fields) {
418
+ for (const item of button.button_fields) {
419
+ buttondatas.button_fields[item.field] = item.value
420
+ }
421
+ }
422
+ this.model.button = buttondatas
423
+ this.model.title = this.data.title
424
+ this.model.fields = this.data.fields
425
+ this.model.onetomany = this.data.onetomany
426
+ if (this.data.defname === '通气点火') {
427
+ if (this.data.processname === '工商户报建流程' || this.data.processname === '开发商集体报建流程') {
428
+ let http = new HttpResetClass()
429
+ let condition = `f_blobid = '${this.data.f_process_id}'`
430
+ let res = await http.load('POST', 'rs/sql/singleTable', {
431
+ data: {
432
+ tablename: 't_files',
433
+ condition: condition
434
+ }
435
+ }, {resolveMsg: null, rejectMsg: null})
436
+ console.log("res_________________")
437
+ console.log(res)
438
+ if (res.data.length === 0) {
439
+ this.$showMessage("未上传图纸")
440
+ return
441
+ }
442
+ }
443
+ }
444
+ // if (this.data.defname === '合同签订') {
445
+ // console.log("ddddd",this.data)
446
+ // }
447
+ // if (this.data.defname === '竣工验收') {
448
+ // // if (this.data.processname !== '工商户报建流程') {
449
+ // // let t=this.selecteddd
450
+ // // let diff = this.all.filter(function (val) {
451
+ // // return t.indexOf(val) === -1
452
+ // // })
453
+ // // console.log("diff", diff)
454
+ // // for(let index = 0;index < diff.length; index++){
455
+ // // let data = {
456
+ // // code:diff[index].f_userinfo_code
457
+ // // }
458
+ // // console.log("code", data.code)
459
+ // // let http = new HttpResetClass()
460
+ // // http.load('POST', 'rs/logic/batchcheck', {data:data}, {resolveMsg: null, rejectMsg: null})
461
+ // //
462
+ // // }
463
+ // // }
464
+ // }
465
+ if (button.button_name === '退回') {
466
+ this.showbutmodal = true
467
+ } else if (button.button_name === '下发') {
468
+ this.showbutmodal = true
469
+ } else if (button.button_name === '验收') {
470
+ this.showbutmodal = true
471
+ } else if (button.event) {
472
+ this.$dispatch(button.event)
473
+ } else {
474
+ this.$dispatch('button', this.model)
475
+ }
476
+ },
477
+ // 初始化数据
478
+ initializtion() {
479
+ // 是否禁用按钮
480
+ this.disableButton()
481
+
482
+ // datepicker 没有值给当时值
483
+ for (const item of this.data.fields) {
484
+ if (item.type === 'datepicker' && !item.value) {
485
+ item.value = new Date().Format('yyyy-MM-dd HH:mm:ss')
486
+ }
487
+ }
488
+ // 公司等属性初始化
489
+ if (this.data.filiale) {
490
+ this.model.f_filiale = this.data.filiale
491
+ } else {
492
+ this.model.f_filiale = this.$login.f.orgs
493
+ }
494
+ if (this.data.f_parentname) {
495
+ this.model.f_parentname = this.data.f_parentname
496
+ } else {
497
+ this.model.f_parentname = this.$login.f.f_department_name
498
+ }
499
+ if (this.data.operate_date) {
500
+ this.model.f_operate_date = this.data.operate_date
501
+ } else {
502
+ this.model.f_operate_date = new Date().Format('yyyy-MM-dd')
503
+ }
504
+ if (this.data.operator) {
505
+ this.model.f_operator = this.data.operator
506
+ } else {
507
+ this.model.f_operator = this.$login.f.name
508
+ }
509
+ },
510
+ // 是否禁用按钮
511
+ disableButton() {
512
+ let fields = this.data.fields
513
+
514
+ let flag = false
515
+ for (const item of fields) {
516
+ if (item.type !== 'checkbox' && item.required && !item.value) {
517
+ if (item.value === 0) {
518
+ flag = false
519
+ } else {
520
+ flag = true
521
+ }
522
+ }
523
+ // 任何选择框只要是否都不能提交
524
+ if (item.type === 'select' && (item.value === '否' || item.value === '未开工') && item.disabledButton) {
525
+ flag = true
526
+ }
527
+ }
528
+
529
+ let count = 0
530
+ for (const item of fields) {
531
+ if (item.type !== 'checkbox' && item.required) {
532
+ count++
533
+ }
534
+ }
535
+ if (count === 0) {
536
+ flag = false
537
+ }
538
+
539
+ this.disable_button = flag
540
+ },
541
+ // 失去焦点触发,无论值是否发生变化
542
+ onblur(index) {
543
+ // 是否禁用按钮
544
+ this.disableButton()
545
+
546
+ this.$dispatch('onblur', index)
547
+ // 如果有错误信息提示走错误信息判断处理
548
+
549
+ if (this.data.fields[index].error && this.data.fields[index].type === 'datepicker') {
550
+ this.$dispatch('error_check', index)
551
+ }
552
+ },
553
+ // 失去焦点且值最终发生变化触发
554
+ onchange(index) {
555
+ // 是否禁用按钮
556
+ this.disableButton()
557
+
558
+ // this.data.fields[index].value = this.data.fields[index].value.trim()
559
+
560
+ if (this.data.fields[index].prefix && this.data.fields[index].value !== '') {
561
+ this.data.fields[index].value = this.data.fields[index].prefix + this.data.fields[index].value
562
+ }
563
+
564
+ this.data[this.data.fields[index].field] = this.data.fields[index].value
565
+
566
+ if (this.data.fields[index].onchange) {
567
+ this.$dispatch(this.data.fields[index].onchange, index)
568
+ }
569
+ this.$dispatch('onchange', index)
570
+
571
+ // 如果有错误信息提示走错误信息判断处理
572
+ if (this.data.fields[index].error && this.data.fields[index].type === 'datepicker') {
573
+ this.$dispatch('error_check', index)
574
+ }
575
+ },
576
+ oninput(index) {
577
+ // 是否禁用按钮
578
+ this.disableButton()
579
+
580
+ this.$dispatch('oninput', index)
581
+
582
+ // 如果有错误信息提示走错误信息判断处理
583
+ if (this.data.fields[index].error && this.data.fields[index].type === 'datepicker') {
584
+ this.$dispatch('error_check', index)
585
+ }
586
+ },
587
+ // 模态框确认按钮
588
+ confirm_modal(title) {
589
+ if (title === '新增') {
590
+ if (this.data.onetomany[this.onetomany_index].addEvent === 'default' || !this.data.onetomany[this.onetomany_index].addEvent) {
591
+ this.$dispatch('onetomanyadd', this.onetomany_index)
592
+ } else {
593
+ this.$dispatch(this.data.onetomany[this.onetomany_index].addEvent, this.onetomany_index)
594
+ }
595
+ } else {
596
+ if (this.data.onetomany[this.onetomany_index].updateEvent === 'default' || !this.data.onetomany[this.onetomany_index].updateEvent) {
597
+ this.$dispatch('onetomanyupdate', this.onetomany_index, this.update_onetomany_index)
598
+ } else {
599
+ this.$dispatch(this.data.onetomany[this.onetomany_index].updateEvent, this.onetomany_index, this.update_onetomany_index)
600
+ }
601
+ }
602
+
603
+ this.closemodal()
604
+ },
605
+ // 删除
606
+ delete(i, j) {
607
+ this.$showMessage((this.data.onetomany[i].deleteMessage === 'default' || !this.data.onetomany[i].deleteMessage) ? '您确定要删除这条记录吗?' : this.data.onetomany[i].deleteMessage, ['confirm']).then((res) => {
608
+ if (res === 'confirm') {
609
+ if (this.data.onetomany[i].deleteEvent === 'default' || !this.data.onetomany[i].deleteEvent) {
610
+ this.$dispatch('onetomanydelete', i, j)
611
+ } else {
612
+ this.$dispatch(this.data.onetomany[i].deleteEvent, i, j)
613
+ }
614
+ }
615
+ })
616
+ },
617
+ // 修改
618
+ update(i, j) {
619
+ let onetomany = this.data.onetomany[i]
620
+ let item = this.data.onetomany[i].rows[j]
621
+ let count = 0
622
+ for (let k = 0; k < onetomany.fields.length; k++) {
623
+ // 防止初始化的时候没有value
624
+ Vue.set(this.data.onetomany[i].fields[k], 'value', item[this.data.onetomany[i].fields[k].field])
625
+
626
+ if (onetomany.fields[j].required) {
627
+ count++
628
+ }
629
+ }
630
+ if (count === 0) {
631
+ this.disable_button_onetomany = false
632
+ }
633
+ this.modeltitle = '修改'
634
+ this.modalSize = this.data.onetomany[i].modalSize
635
+ this.onetomany_index = i
636
+ this.update_onetomany_index = j
637
+
638
+ this.$dispatch('openUpdateModel', i, j)
639
+
640
+ this.show = true
641
+ },
642
+ // 添加
643
+ add(index) {
644
+ let count = 0
645
+ for (const item of this.data.onetomany[index].fields) {
646
+ if (item.type === 'datepicker') {
647
+ item.value = new Date().Format('yyyy-MM-dd')
648
+ }
649
+ if (item.required) {
650
+ count++
651
+ }
652
+ }
653
+
654
+ if (count === 0) {
655
+ this.disable_button_onetomany = false
656
+ }
657
+ this.modeltitle = '新增'
658
+ this.modalSize = this.data.onetomany[index].modalSize
659
+ this.onetomany_index = index
660
+
661
+ this.$dispatch('openAddModel', index)
662
+
663
+ this.show = true
664
+ },
665
+ // 关闭模态框
666
+ closemodal(val) {
667
+ if (val === 'but') {
668
+ this.disableButton()
669
+ this.showbutmodal = false
670
+ return
671
+ }
672
+ for (const item of this.data.onetomany[this.onetomany_index].fields) {
673
+ item.value = ''
674
+ }
675
+ this.show = false
676
+ this.disable_button_onetomany = true
677
+ this.onetomany_index = null
678
+ this.update_onetomany_index = null
679
+ this.modeltitle = null
680
+ this.modalSize = null
681
+ },
682
+ // 是否禁用模态框按钮
683
+ disableModalButton() {
684
+ let fields = this.data.onetomany[this.onetomany_index].fields
685
+
686
+ let flag = false
687
+ for (const item of fields) {
688
+ if (item.type !== 'checkbox' && item.required && !item.value) {
689
+ if (item.value === 0) {
690
+ flag = false
691
+ } else {
692
+ flag = true
693
+ }
694
+ }
695
+ }
696
+
697
+ let count = 0
698
+ for (const item of fields) {
699
+ if (item.type !== 'checkbox' && item.required) {
700
+ count++
701
+ }
702
+ }
703
+ if (count === 0) {
704
+ flag = false
705
+ }
706
+ this.disable_button_onetomany = flag
707
+ },
708
+ // 监听模态框属性失去焦点
709
+ onchange_modal(index) {
710
+ this.disableModalButton()
711
+ this.$dispatch('onchange_modal', this.onetomany_index, index)
712
+ },
713
+ // 监听模态框属性失去焦点
714
+ onblur_modal(index) {
715
+ this.disableModalButton()
716
+ this.$dispatch('onblur_modal', this.onetomany_index, index)
717
+ },
718
+ // input输入属性值发生变化监听
719
+ oninput_modal(index) {
720
+ this.disableModalButton()
721
+ this.$dispatch('oninput_modal', this.onetomany_index, index)
722
+ }
723
+ }
724
+ }
725
+ </script>
726
+ <style>
727
+ .datepicker{
728
+ width: 100%!important;
729
+ }
730
+ .datepicker-input{
731
+ background-color: #ffffff!important;
732
+ width: 100%!important;
733
+ }
734
+ .datepicker-input:disabled{
735
+ border: 1px solid #DDD!important;
736
+ color: #ACA899!important;
737
+ width: 100%!important;
738
+ }
739
+ </style>
740
+ <style scoped>
741
+ th{
742
+ font-size: 15px !important;
743
+ text-align: center !important;
744
+ background-color: #dfedfb!important;
745
+ color: #666666 !important;
746
+ font-family: PINGFANG-BOLD !important;
747
+ font-weight: normal!important;
748
+ }
749
+ /*清除model中的浮动*/
750
+ .clearfix:after,.clearfix:before{
751
+ display: table;
752
+ }
753
+ .clearfix:after{
754
+ clear: both;
755
+ }
756
+
757
+ .input_view{
758
+ padding: 8px;
759
+ background-color: #ffffff;
760
+ border-radius: 2px;
761
+ border: solid 1px #c7c7c7!important;
762
+ color: #333333!important;
763
+ font-size: 15px!important;
764
+ }
765
+
766
+ .input_view[readonly]{
767
+ border: 1px solid #DDD!important;
768
+ /*background-color: #F5F5F5;*/
769
+ color:#ACA899!important;
770
+ }
771
+ .input_view:disabled{
772
+ border: 1px solid #DDD!important;
773
+ /*background-color: #F5F5F5;*/
774
+ color:#ACA899!important;
775
+ }
776
+
777
+ .control-label-justify {
778
+ display: inline-block;
779
+ vertical-align: top;
780
+ width: 110px;
781
+ text-align: justify;
782
+ font-family: PingFang-SC-Bold;
783
+ }
784
+
785
+ .control-label-justify::after {
786
+ content: "";
787
+ display: inline-block;
788
+ width: 70px;
789
+ overflow: hidden;
790
+ height: 0;
791
+ }
792
+
793
+ input::-webkit-outer-spin-button,
794
+ input::-webkit-inner-spin-button {
795
+ -webkit-appearance: none;
796
+ }
797
+
798
+ input[type="number"] {
799
+ -moz-appearance: textfield;
800
+ }
801
+
802
+ </style>