apply-clients 5.0.35-ezhou-1 → 5.0.35-ezhou-3

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,800 +1,805 @@
1
- <template>
2
- <div class="auto select-overspread" v-if="refresh">
3
- <!--<div class="panel panel-info" v-if="!data.titlevisible">-->
4
- <!--<div class="panel-heading">-->
5
- <!--<h3 class="panel-title">-->
6
- <!--<span >{{data.title}}</span>-->
7
- <!--<span v-if="data.back_reason" style="color: red;font-family: 微软雅黑;font-weight: bold"> 请注意被退回原因为:{{data.back_reason}}</span>-->
8
- <!--</h3>-->
9
- <!--</div>-->
10
- <!--</div>-->
11
- <validator name="v">
12
- <form class="form-horizontal">
13
- <div class="col-sm-12 form-group">
14
- <div v-for="(index,item) in data.fields">
15
- <!--input-->
16
- <div :style="item.style+';height: 34px;'"
17
- v-if="item.type==='input' || item.type==='number'||item.type === 'tel'||item.type === 'email'"
18
- v-show="!item.hidden"
19
- :class="[data.fields[index].required&&!(data.fields[index].value) ? 'has-error' : '',data.fields[index].bootstraped?data.fields[index].bootstraped+' form-group':'col-sm-4 form-group']">
20
- <label :style="item.label_style? item.label_style:''+';width:85px;'"
21
- :class="item.label_bootstraped?item.label_bootstraped+' control-label-justify control-label':item.label_style?'':'control-label-justify control-label col-sm-6'">{{item.label}}</label>
22
- <div :style="item.value_style? item.value_style:''"
23
- :class="item.value_bootstraped?item.value_bootstraped:item.value_style?'':'col-sm-6'">
24
- <input class="form-control" style="background-color: #f7fbff;"
25
- :type="item.type"
26
- v-model="data.fields[index].value"
27
- :placeholder="item.placeholder"
28
- :value="data.fields[index].value"
29
- :readonly="item.readonly"
30
- :disabled="item.disabled"
31
- @change="select_change(index),disabled_check(data.fields[index].required,data.fields[index].value)"
32
- @blur="select_change(index),check_disable"
33
- />
34
- </div>
35
- </div>
36
- <!--时间datepicker-->
37
- <div :style="item.style? item.style+';height: 34px;':'height: 34px;'" v-if="item.type==='datepicker'"
38
- v-show="!item.hidden"
39
- :class="[data.fields[index].required&&!(data.fields[index].value) ? 'has-error' : '',data.fields[index].bootstraped?data.fields[index].bootstraped+' form-group':'col-sm-4 form-group']">
40
- <label style="width:85px"
41
- :class="item.label_bootstraped?item.label_bootstraped+' control-label-justify control-label':'control-label control-label-justify col-sm-6'">{{item.label}}</label>
42
- <div :class="item.value_bootstraped?item.value_bootstraped:'col-sm-6'">
43
- <datepicker
44
- :placeholder="item.placeholder"
45
- :value.sync="data.fields[index].value"
46
- :format="'yyyy-MM-dd HH:mm:ss'"
47
- v-model="data.fields[index].value"
48
- :readonly=true
49
- :disabled="item.disabled"
50
- @blur="check_disable"
51
- :show-reset-button="reset">
52
- </datepicker>
53
- </div>
54
- </div>
55
-
56
- <!--textarea-->
57
- <div :style="item.style? item.style:'height: 34px;'" v-if="item.type==='textarea'" v-show="!item.hidden"
58
- :class="[data.fields[index].required&&!(data.fields[index].value) ? 'has-error' : '',data.fields[index].bootstraped?data.fields[index].bootstraped+' form-group':'col-sm-12 form-group']">
59
- <label :style="item.label_style? item.label_style:''"
60
- :class="item.label_bootstraped?item.label_bootstraped+' control-label-justify control-label':item.label_style?'':'control-label-justify control-label col-sm-3'">{{item.label}}</label>
61
- <div :style="item.value_style? item.value_style:''"
62
- :class="item.value_bootstraped?item.value_bootstraped:item.value_style?'':'col-sm-10'">
63
- <textarea
64
- :readonly="item.readonly"
65
- :disabled="item.disabled"
66
- class="form-control"
67
- style="background-color: #f7fbff;margin-top: 7px"
68
- :rows="item.rows"
69
- v-model="data.fields[index].value"
70
- @change="disabled_check(data.fields[index].required,data.fields[index].value)"
71
- @blur="check_disable"
72
- >
73
- </textarea>
74
- </div>
75
- </div>
76
-
77
- <!--radio-->
78
- <div v-if="item.type==='radio'"
79
- :class="[data.fields[index].required&&!(data.fields[index].value) ? 'has-error' : '',data.fields[index].bootstraped?data.fields[index].bootstraped+' form-group':'col-sm-12 form-group']">
80
- <label v-if="item.label"
81
- :class="item.label_bootstraped?item.label_bootstraped+' control-label-justify control-label':'control-label-justify control-label col-sm-2'">{{item.label}}</label>
82
- <div
83
- :class="item.value_bootstraped?item.value_bootstraped:item.items.length%2 == 0?'col-sm-5': 'col-sm-3'"
84
- v-for="(index2,row) in item.items">
85
- <label for="row.label"
86
- :class="item.items.length%2 == 0?'col-sm-3 control-label': 'col-sm-2 control-label'">{{row.label}}</label>
87
- <input @blur="check_disable"
88
- :class="item.items.length%2 == 0?'col-sm-3 control-label': 'col-sm-2 control-label'"
89
- :readonly="item.readonly" :disabled="item.disabled" style="margin-top: 10px" type="radio"
90
- :name="index" :id="row.label" v-bind:value="data.fields[index].items[index2].value"
91
- v-model="data.fields[index].value">
92
- </div>
93
- </div>
94
-
95
- <!--select-->
96
- <div style="height: 34px" v-if="item.type==='select'" v-show="!item.hidden"
97
- :class="[data.fields[index].required&&!(data.fields[index].value) ? 'has-error' : '',data.fields[index].bootstraped?data.fields[index].bootstraped+' form-group':'col-sm-4 form-group']">
98
- <label style="width:85px;"
99
- :class="item.label_bootstraped?item.label_bootstraped+' control-label control-label-justify':'control-label-justify control-label col-sm-6'">{{item.label}}</label>
100
- <input-select :class="item.value_bootstraped?item.value_bootstraped:'col-sm-6'" @blur="check_disable"
101
- @change="select_change(index),disabled_check(data.fields[index].required,data.fields[index].value)"
102
- :readonly="item.readonly" :disabled="item.disabled" :value.sync="data.fields[index].value"
103
- v-model="data.fields[index].value"
104
- :search="true"
105
- :options='data.fields[index].options' :valueSingle="true"></input-select>
106
-
107
- </div>
108
-
109
- <!--checkbox-->
110
- <div v-if="item.type==='checkbox'"
111
- :class="[data.fields[index].required&&!(data.fields[index].value) ? 'has-error' : '',data.fields[index].bootstraped?data.fields[index].bootstraped+' form-group':'col-sm-12 form-group']">
112
- <label v-if="item.label"
113
- :class="item.label_bootstraped?item.label_bootstraped+' control-label ':'control-label col-sm-2'">{{item.label}}</label>
114
- <div style="margin-top: 6px"
115
- :class="item.value_bootstraped?item.value_bootstraped:'control-label col-sm-2'"
116
- v-for="(index2,row) in item.items">
117
- <label class="font-size form-group col-sm-6">{{row.label}}</label>
118
- <input :readonly="item.readonly" :disabled="item.disabled" type="checkbox" class="col-sm-6"
119
- :id="row.label" v-model="data.fields[index].items[index2].value" @click="checkboxSelect(index,index2)" >
120
- </div>
121
- </div>
122
- </div>
123
- <!-- onetomany -->
124
- <div class="col-sm-12" v-for="(i,datagrid) in data.onetomany">
125
- <table v-show="!datagrid.hidden" class="table table-bordered table-striped table-hover">
126
- <tr style="background-color: #00A3F0">
127
- <th style="text-align: center;border-color: #00A3F0"><font color="white">序号</font></th>
128
- <th v-for="labels in datagrid.fields" style="text-align: center;border-color: #00A3F0">
129
- <nobr><font color="white">{{labels.label}}</font></nobr>
130
- </th>
131
- <th style="text-align: center;border-color: #00A3F0;padding: 0px">
132
- <button type="button" @click="$dispatch('add',i)" class="btn btn-warning"
133
- v-if="!data.onetomany[i].nopower">
134
- +
135
- </button>
136
- </th>
137
- </tr>
138
- <tr v-for="(j,row) in model.rows[i]">
139
- <td style="text-align: center">{{$index+1}}</td>
140
- <td v-for="key in surBodyData[i]" style="text-align: center">
141
- {{row[key]}}
142
- </td>
143
- <td style="text-align: center">
144
- <a href="#" @click="delete(i,j)" v-if="!data.onetomany[i].nopower">删除</a>
145
- </td>
146
- </tr>
147
- </table>
148
- </div>
149
- </div>
150
- <div class="col-sm-12 form-group text-center" style="padding-top:20px">
151
- <div class="form-group col-sm-2 center-block">
152
- <label class=" col-sm-6 control-label control-label-justify">所属公司:</label>
153
- <div class="col-sm-6">
154
- <input class="form-control" type="text" v-model="model.f_filiale" disabled>
155
- </div>
156
- </div>
157
- <div class="col-sm-1 form-group center-block">
158
- </div>
159
- <div class="col-sm-2 form-group center-block">
160
- <label class="control-label control-label-justify col-sm-6">部门:</label>
161
- <div class="col-sm-6">
162
- <input type="text" class="form-control" disabled v-model="model.f_parentname"/>
163
- </div>
164
- </div>
165
- <div class="col-sm-1 form-group center-block">
166
- </div>
167
- <div class="col-sm-2 form-group center-block">
168
- <label class="control-label control-label-justify col-sm-6">操作人:</label>
169
- <div class="col-sm-6 ">
170
- <input type="text" class="form-control" disabled v-model="model.f_operator"/>
171
- </div>
172
- </div>
173
- <div class="col-sm-1 form-group center-block">
174
- </div>
175
- <div class="col-sm-2 form-group center-block">
176
- <label class="control-label control-label-justify col-sm-6">操作日期:</label>
177
- <div class="col-sm-6">
178
- <input type="text" class="form-control" disabled v-model="model.f_operate_date"/>
179
- </div>
180
- </div>
181
- </div>
182
- </form>
183
- </validator>
184
- <div class="from-group col-sm-11">
185
- <center>
186
- <!-- 按钮组 -->
187
- <button v-for="(index,button) in data.buttons"
188
- :disabled="(button.button_name==='提交'||button.button_name==='下发'||button.button_name==='打印回单')&&disable_button" type="button"
189
- @click="clicked(index,button)"
190
- :class="(button.button_name==='提交'||button.button_name==='下发'||button.button_name==='打印回单')&&disable_button?'btn btn-default':'btn btn-primary'"
191
- style="width:80px; margin-left:50px;">
192
- {{button.button_name}}
193
- </button>
194
- </center>
195
- </div>
196
- <!-- 按钮模态框 -->
197
- <modal v-if="showmodal" :show.sync="showmodal" v-ref:modal backdrop="false">
198
- <header slot="modal-header" class="modal-header">
199
- <button type="button" class="close" @click="closemodal"><span>&times;</span></button>
200
- <h4 class="modal-title">{{model.button.button_name}}</h4>
201
- </header>
202
- <article slot="modal-body" class="modal-body">
203
- <div class="col-sm-12" v-for="(index,button_field) in data.buttons[model.button.button_index].button_fields">
204
- <label class="control-label col-sm-3" style="margin-top: 10px">{{button_field.label}}:</label>
205
- <div class="col-sm-7">
206
- <!--select-->
207
- <input-select v-if="button_field.type=='select'"
208
- :value.sync="data.buttons[model.button.button_index].button_fields[index].value"
209
- v-model="data.buttons[model.button.button_index].button_fields[index].value"
210
- :options='button_field.options'></input-select>
211
- <!-- input -->
212
- <input v-else type="text" class="form-control"
213
- v-model="data.buttons[model.button.button_index].button_fields[index].value"/>
214
- </div>
215
- </div>
216
- </article>
217
- <footer slot="modal-footer" style="border-top:none" class="modal-footer">
218
- <button v-show="showmodal" type="button" class="btn btn-primary" @click='acknowledge'>确认</button>
219
- </footer>
220
- </modal>
221
-
222
-
223
- <!-- onetomany新增模态框 -->
224
- <div class="auto"
225
- style="background-color:white;max-width: 700px;max-hight:500px;z-index:9999;box-shadow: 0px 0px 100px 10px grey;position: fixed;margin-left: 20%;"
226
- v-if="showadd">
227
-
228
- <div class="auto">
229
-
230
- <div style="padding-top: 15px;padding-left: 15px;padding-right: 15px;">
231
- <button type="button" class="close" @click="closemodal(modeltitle)"><span>&times;</span></button>
232
- <span class="modal-title" style="border-bottom: 1px solid #e5e5e5;"><font
233
- size="3">{{modeltitle}}</font></span>
234
- </div>
235
-            
236
- <div style="padding-top: 15px;border-top: 0px solid #e5e5e5;border-bottom: 0px solid #e5e5e5;">
237
- <div class="col-sm-12" v-for="(index,showadd_field) in showadd_fields.fields" v-if="refresh_modal">
238
- <label v-show="!showadd_field.hidden" class="control-label col-sm-3" style="margin-top: 10px">{{showadd_field.label}}:</label>
239
- <div class="col-sm-7" v-show="!showadd_field.hidden">
240
- <!--时间datepicker-->
241
- <div v-if="showadd_field.type=='datepicker'"
242
- :class="[showadd_fields[index].required&&!(showadd_fields.fields[index].value) ? 'has-error' : '']">
243
- <div>
244
- <datepicker
245
- :placeholder="showadd_field.placeholder"
246
- :value.sync="showadd_fields.fields[index].value"
247
- :format="'yyyy-MM-dd HH:mm:ss'"
248
- v-model="showadd_fields.fields[index].value"
249
- :readonly=true
250
- :disabled="showadd_fields.fields[index].disabled"
251
- @blur="check_disable"
252
- :show-reset-button="reset">
253
- </datepicker>
254
- </div>
255
- </div>
256
- <!--select-->
257
- <input-select
258
- @change="select_change_modal(index),disabled_check_modal(showadd_fields.fields[index].required,showadd_fields.fields[index].value)"
259
- v-if="showadd_field.type=='select'"
260
- @blur="check_disable_modal,disabled_check_modal(showadd_fields.fields[index].required,showadd_fields.fields[index].value)"
261
- :mouseout="check_disable_modal,disabled_check_modal(showadd_fields.fields[index].required,showadd_fields.fields[index].value)"
262
- :value.sync="showadd_fields.fields[index].value"
263
- v-model="showadd_fields.fields[index].value"
264
- :options='showadd_fields.fields[index].options'>
265
- </input-select>
266
- <!-- input -->
267
- <input :type="showadd_field.type"
268
- @change="select_change_modal(index),check_disable_modal,disabled_check_modal(showadd_fields.fields[index].required,showadd_fields.fields[index].value)"
269
- v-if="(showadd_field.type=='input'||showadd_field.type=='number')&&!showadd_field.hidden"
270
- @blur="check_disable_modal,disabled_check_modal(showadd_fields.fields[index].required,showadd_fields.fields[index].value)"
271
- :mouseout="check_disable_modal,disabled_check_modal(showadd_fields.fields[index].required,showadd_fields.fields[index].value)"
272
- :readonly="showadd_field.readonly" class="form-control"
273
- v-model="showadd_fields.fields[index].value"
274
- :value.sync="showadd_fields[index].value"/>
275
- <span
276
- v-if="showadd_fields.fields[index].error&&showadd_fields.fields[index].error.msg&&showadd_fields.fields[index].error.flag"
277
- style="color: red">{{showadd_fields.fields[index].error.msg}}</span>
278
- </div>
279
- </div>
280
- </div>
281
-
282
- <div style="padding-top: 15px;padding-left: 15px;padding-right: 15px;text-align: right;">
283
- <button :class="disable_button_modal?'btn btn-default':'btn btn-primary'" v-show="showadd"
284
- :disabled="disable_button_modal" type="button" @click="acknowledge(modeltitle)">
285
- 确认
286
- </button>
287
- </div>
288
-
289
- </div>
290
-  
291
- </div>
292
-
293
- </div>
294
- </template>
295
- <script>
296
- import Vue from 'vue'
297
- // Date格式化
298
- Date.prototype.Format = function (fmt) {
299
- var o = {
300
- "M+": this.getMonth() + 1, //月份
301
- "d+": this.getDate(), //日
302
- "H+": this.getHours(), //小时
303
- "m+": this.getMinutes(), //分
304
- "s+": this.getSeconds(), //秒
305
- "q+": Math.floor((this.getMonth() + 3) / 3), //季度
306
- "S": this.getMilliseconds() //毫秒
307
- };
308
- if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
309
- for (var k in o)
310
- if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
311
- return fmt;
312
- }
313
-
314
- export default {
315
- title: '报建业务通用组件',
316
- props: ['data'],
317
- data() {
318
- return {
319
- data: {
320
- onetomany: {
321
- fields: []
322
- }
323
- },
324
- surBodyData: [],
325
- refresh: true, // 控制重新渲染
326
- model: {
327
- rows: [],
328
- button: {
329
- button_name: null,
330
- button_index: null
331
- },
332
- f_filiale: null,
333
- f_parentname: null,
334
- f_operate_date: null,
335
- f_operator: null
336
- },
337
- showadd: false, // onetomany 新增模态框
338
- showadd_fields: [], // onetomany 新增模态框的字段配置
339
- // data: null,
340
- modeltitle: '',
341
- tempid: null,
342
- showadd_index: null,
343
- showmodal: false,
344
- disable_button: true,
345
- disable_button_modal: true,
346
- refresh_modal: true
347
- }
348
- },
349
- created() {
350
- // 初始化数据
351
- this.initializtion()
352
- },
353
- events: {
354
- async 'add'(index) {
355
- let templet = new Object()
356
- templet = this.data.onetomany[index]
357
- let count = 0
358
- for (let j = 0; j < templet.fields.length; j++) {
359
- templet.fields[j].value = ''
360
- if (templet.fields[j].type == 'datepicker') {
361
- templet.fields[j].value = new Date().Format("yyyy-MM-dd HH:mm:ss")
362
- }
363
- if (templet.fields[j].required) {
364
- count++
365
- }
366
- }
367
- if (count == 0) {
368
- this.disable_button_modal = false
369
- }
370
- this.modeltitle = '新增'
371
- this.showadd_fields = templet
372
- this.showadd_index = index
373
- this.showadd = true
374
- }
375
- },
376
- methods: {
377
- // 获取组件中的数据
378
- getmodel() {
379
- // 组织model.fields数据
380
- let modeldatas = {}
381
- for (let i = 0; i < this.data.fields.length; i++) {
382
- // checkbox特殊处理
383
- if (this.data.fields[i].type === 'checkbox') {
384
- for (let j = 0; j < this.data.fields[i].items.length; j++) {
385
- modeldatas[this.data.fields[i].items[j].field] = this.data.fields[i].items[j].value
386
- }
387
- } else {
388
- modeldatas[this.data.fields[i].field] = this.data.fields[i].value
389
- }
390
- }
391
- modeldatas.f_process_id = this.data.f_process_id
392
- modeldatas.f_filiale = this.model.f_filiale
393
- modeldatas.f_parentname = this.model.f_parentname
394
- modeldatas.f_operator = this.model.f_operator
395
- modeldatas.f_operate_date = this.model.f_operate_date
396
- return modeldatas
397
- },
398
- // 修改
399
- revise(index, index2) {
400
- this.showadd_fields = []
401
- let templet = new Object()
402
- templet = this.data.onetomany[index]
403
- for (let j = 0; j < templet.fields.length; j++) {
404
- if (templet.fields[j].type == 'input') {
405
- templet[j] = {}
406
- templet[j].value = this.model.rows[index][index2][templet.fields[j].field]
407
- templet.fields[j].value = this.model.rows[index][index2][templet.fields[j].field]
408
- } else {
409
- templet.fields[j].value = this.model.rows[index][index2][templet.fields[j].field]
410
- if (templet.fields[j].type == 'datepicker') {
411
- templet.fields[j].value = new Date().Format("yyyy-MM-dd HH:mm:ss")
412
- }
413
- }
414
- }
415
- this.tempid = this.model.rows[index][index2].id
416
- this.modeltitle = '修改'
417
- this.showadd_fields = templet
418
- this.showadd_index = index
419
- this.showadd = true
420
- },
421
- // 检测模态框按钮的disable
422
- disabled_check_modal(required, value) {
423
- if (required && value) {
424
- this.disable_button_modal = false
425
-
426
- let fields = this.showadd_fields.fields
427
- let flag = false
428
- for (let i = 0; i < fields.length; i++) {
429
- if (fields[i].type !== 'checkbox' && fields[i].required && !fields[i].value) {
430
- flag = true
431
- }
432
- }
433
- this.disable_button_modal = flag
434
- }
435
- },
436
- // 检测模态框按钮的disable,反向检查
437
- check_disable_modal() {
438
- let fields = this.showadd_fields.fields
439
- let flag = false
440
- for (let i = 0; i < fields.length; i++) {
441
- if (fields[i].type !== 'checkbox' && fields[i].required && !fields[i].value) {
442
- flag = true
443
- }
444
- }
445
- let count = 0
446
- for (let i = 0; i < fields.length; i++) {
447
- if (fields[i].type !== 'checkbox' && !fields[i].required) {
448
- count++
449
- }
450
- }
451
- if (count == 0) {
452
- flag = false
453
- }
454
- this.disable_button_modal = flag
455
- },
456
- checkboxSelect(index,index1){
457
- console.log("chufa事件");
458
- this.$dispatch('checkboxSelectControl', index, index1)
459
- },
460
- // 模态框级联操作预留
461
- select_change_modal(index) {
462
- if (this.showadd_fields.fields[index].value) {
463
- this.showadd_fields[index] = {}
464
- this.showadd_fields[index].value = this.showadd_fields.fields[index].value
465
- } else if (this.showadd_fields[index] && this.showadd_fields[index].value) {
466
- this.showadd_fields.fields[index].value = this.showadd_fields[index].value
467
- }
468
- this.refresh_modal = false
469
- this.$nextTick(() => {
470
- this.refresh_modal = true
471
- })
472
- this.$dispatch('select_cascade_modal', this.showadd_index, index)
473
- // if(this.showadd_fields.fields[index].label=='购货方纳税人识别号'){
474
- // if(this.showadd_fields.fields[index].value.length!=15&&this.showadd_fields.fields[index].value.length!=18&&this.showadd_fields.fields[index].value.length!=20){
475
- // this.$showMessage("购货方纳税人识别号必须为15位,18位或者20位")
476
- // this.showadd_fields.fields[index].value = ''
477
- // }
478
- // }
479
- },
480
- // 更新showadd模态框
481
- update_showadd_fields_value(index, value) {
482
- this.showadd_fields.fields[index].value = value
483
- this.showadd_fields[index] = {}
484
- this.showadd_fields[index].value = value
485
- },
486
- // 清理showadd模态框
487
- clear_showadd_fields_value(index) {
488
- this.showadd_fields.fields[index].value = ''
489
- this.showadd_fields[index].value = ''
490
- },
491
- // 删除
492
- delete(i, j) {
493
- this.$showMessage("您确定要删除这条记录吗?", ['confirm']).then((res) => {
494
- if (res == 'confirm') {
495
- this.$dispatch('onetomanydelete', i, j)
496
- }
497
- })
498
- },
499
- // 强制刷新
500
- update() {
501
- this.refresh = false
502
- this.$nextTick(() => {
503
- this.refresh = true
504
- })
505
- this.initializtion()
506
- },
507
- // 初始化数据
508
- initializtion() {
509
- let fields = this.data.fields
510
- let flag = false
511
- for (let i = 0; i < fields.length; i++) {
512
- if (fields[i].type !== 'checkbox' && fields[i].required && !fields[i].value) {
513
- flag = true
514
- }
515
- }
516
- let count = 0
517
- for (let i = 0; i < fields.length; i++) {
518
- if (fields[i].type !== 'checkbox' && !fields[i].required) {
519
- count++
520
- }
521
- }
522
- if (count = 0) {
523
- flag = false
524
- }
525
- this.disable_button = flag
526
-
527
- this.model.rows = []
528
- this.surBodyData = []
529
- if (this.data.onetomany && this.data.onetomany.length > 0) {
530
- for (let i = 0; i < this.data.onetomany.length; i++) {
531
- let temp = []
532
- for (let j = 0; j < this.data.onetomany[i].fields.length; j++) {
533
- temp.push(this.data.onetomany[i].fields[j].field)
534
- }
535
- this.surBodyData.push(temp)
536
- }
537
- for (let i = 0; i < this.data.onetomany.length; i++) {
538
- if (this.data.onetomany[i].rows) {
539
- this.model.rows.push(this.data.onetomany[i].rows)
540
- }
541
- }
542
-
543
- }
544
- // datepicker 没有值给当时值
545
- if (this.data.fields && this.data.fields.length > 0) {
546
- for (let i = 0; i < this.data.fields.length; i++) {
547
- if (this.data.fields[i].type === 'datepicker' && !this.data.fields[i].value) {
548
- this.data.fields[i].value = new Date().Format("yyyy-MM-dd HH:mm:ss")
549
- }
550
- }
551
- } else {
552
- this.disable_button = false
553
- }
554
- if (this.data.filiale) {
555
- this.model.f_filiale = this.data.filiale
556
- } else {
557
- this.model.f_filiale = this.$login.f.f_fengongsi
558
- }
559
- if (this.data.f_parentname) {
560
- this.model.f_parentname = this.data.f_parentname
561
- } else {
562
- this.model.f_parentname = this.$login.f.f_parentname
563
- }
564
- if (this.data.operate_date) {
565
- this.model.f_operate_date = this.data.operate_date
566
- } else {
567
- this.model.f_operate_date = new Date().Format("yyyy-MM-dd HH:mm:ss")
568
- }
569
- if (this.data.operator) {
570
- this.model.f_operator = this.data.operator
571
- } else {
572
- this.model.f_operator = this.$login.f.name
573
- }
574
- },
575
- // 模态框点击确定按钮
576
- acknowledge(val) {
577
- if (val == '新增') {
578
- let temp = {}
579
- for (let i = 0; i < this.showadd_fields.fields.length; i++) {
580
- if (this.showadd_fields.fields[i].value) {
581
- temp[this.showadd_fields.fields[i].field] = this.showadd_fields.fields[i].value
582
- } else if (this.showadd_fields && this.showadd_fields[i] && this.showadd_fields[i].value) {
583
- temp[this.showadd_fields.fields[i].field] = this.showadd_fields[i].value
584
- }
585
- }
586
- this.model.rows[this.showadd_index].push(temp)
587
- this.$dispatch('confirm', this.data.onetomany[this.showadd_index].tables, temp, this.showadd_index, this.model.rows[this.showadd_index].length - 1)
588
- this.showadd_fields = null
589
- this.showadd_index = null
590
- this.closemodal(val)
591
- } else {
592
- for (let i = 0; i < this.data.buttons[this.model.button.button_index].button_fields.length; i++) {
593
- this.model.button.button_fields[this.data.buttons[this.model.button.button_index].button_fields[i].field] = this.data.buttons[this.model.button.button_index].button_fields[i].value
594
- }
595
- this.showmodal = false
596
- this.$dispatch('button', this.model)
597
- }
598
- },
599
- // 关闭模态框
600
- closemodal(val) {
601
- if (this.showadd_fields && this.showadd_fields.fields && this.showadd_fields.fields.length) {
602
- for (let i = 0; i < this.showadd_fields.fields.length; i++) {
603
- if (this.showadd_fields[i] && this.showadd_fields[i].value) {
604
- this.showadd_fields[i].value = ''
605
- }
606
- if (this.showadd_fields.fields[i] && this.showadd_fields.fields[i].value) {
607
- this.showadd_fields.fields[i].value = ''
608
- }
609
- }
610
- }
611
-
612
- if (val != '新增' || val != '修改' || val != '删除') {
613
- this.disable_button = false
614
- }
615
- this.showmodal = false
616
- if (val == '新增') {
617
- this.showadd = false
618
- }
619
- this.showadd_fields = null
620
- this.disable_button_modal = true
621
- this.modeltitle = null
622
- this.tempid = null
623
- },
624
- // 点击按钮
625
- clicked(index, button) {
626
-
627
- // onetomany 处理
628
- // if(this.data.onetomany&&this.data.onetomany.fields.length>0){
629
- // let temp = {}
630
- // temp['tables'] = this.data.onetomany.tables
631
- // temp['rows'] = this.model.rows
632
- // this.$dispatch('onetomanyevent',temp)
633
- // }
634
- this.disable_button=false;
635
- this.$parent.$parent.$parent.$parent.$refs.queryuser.button_name="查询"
636
- if(button.button_name !='打印回单')
637
- this.disable_button = true
638
- console.log(`点击了按钮index:${index}+button:${JSON.stringify(button)}`);
639
- // 组织model.fields数据
640
- let modeldatas = {}
641
- for (let i = 0; i < this.data.fields.length; i++) {
642
- // checkbox特殊处理
643
- if (this.data.fields[i].type === 'checkbox') {
644
- for (let j = 0; j < this.data.fields[i].items.length; j++) {
645
- modeldatas[this.data.fields[i].items[j].field] = this.data.fields[i].items[j].value
646
- }
647
- } else {
648
- modeldatas[this.data.fields[i].field] = this.data.fields[i].value
649
- }
650
- }
651
- modeldatas.f_process_id = this.data.f_process_id
652
- modeldatas.f_filiale = this.model.f_filiale
653
- modeldatas.f_parentname = this.model.f_parentname
654
- modeldatas.f_operator = this.model.f_operator
655
- modeldatas.f_operate_date = this.model.f_operate_date
656
- this.model = null
657
- this.model = modeldatas
658
- // 初始化model.button数据
659
- let buttondatas = {
660
- button_fields: {}
661
- }
662
- if (button.button_event) {
663
- buttondatas.button_event = button.button_event
664
- }
665
- if (button.button_node) {
666
- buttondatas.button_node = button.button_node
667
- }
668
- if (button.button_person) {
669
- buttondatas.button_person = button.button_person
670
- }
671
- buttondatas.button_name = button.button_name
672
- buttondatas.button_index = index
673
- if (button.button_fields) {
674
- for (let i = 0; i < button.button_fields.length; i++) {
675
- buttondatas.button_fields[button.button_fields[i].field] = button.button_fields[i].value
676
- }
677
- }
678
- this.model.button = buttondatas
679
- if (button.button_name === '退回') {
680
- this.showmodal = true
681
- } else if (button.button_name === '下发') {
682
- this.showmodal = true
683
- } else {
684
- this.$dispatch('button', this.model)
685
- }
686
- },
687
- // 级联操作预留
688
- select_change(index) {
689
- this.$dispatch('select_cascade', index)
690
- },
691
- // 检测按钮的disable
692
- disabled_check(required, value) {
693
- if (required && value) {
694
- this.disable_button = false
695
-
696
- let fields = this.data.fields
697
- let flag = false
698
- for (let i = 0; i < fields.length; i++) {
699
- if (fields[i].type !== 'checkbox' && fields[i].required && !fields[i].value) {
700
- flag = true
701
- }
702
- }
703
- this.disable_button = flag
704
- }
705
- }
706
- },
707
- watch: {
708
- 'data.operate_date'() {
709
- if (this.data.filiale) {
710
- this.model.f_filiale = this.data.filiale
711
- } else {
712
- this.model.f_filiale = this.$login.f.f_fengongsi
713
- }
714
- if (this.data.f_parentname) {
715
- this.model.f_parentname = this.data.f_parentname
716
- } else {
717
- this.model.f_parentname = this.$login.f.f_parentname
718
- }
719
- if (this.data.operate_date) {
720
- this.model.f_operate_date = this.data.operate_date
721
- } else {
722
- this.model.f_operate_date = new Date().Format("yyyy-MM-dd HH:mm:ss")
723
- }
724
- if (this.data.operator) {
725
- this.model.f_operator = this.data.operator
726
- } else {
727
- this.model.f_operator = this.$login.f.name
728
- }
729
- },
730
- 'data.fields'() {
731
- this.refresh = false
732
- this.$nextTick(() => {
733
- this.refresh = true
734
- })
735
- this.initializtion()
736
- },
737
- deep: true
738
- },
739
- computed: {
740
- // 输入后按钮检测
741
- check_disable: function () {
742
- let fields = this.data.fields
743
- let flag = false
744
- for (let i = 0; i < fields.length; i++) {
745
- if (fields[i].type !== 'checkbox' && fields[i].required && !fields[i].value) {
746
- flag = true
747
- }
748
- }
749
- let count = 0
750
- for (let i = 0; i < fields.length; i++) {
751
- if (fields[i].type !== 'checkbox' && !fields[i].required) {
752
- count++
753
- }
754
- }
755
- if (count == 0) {
756
- flag = false
757
- }
758
- this.disable_button = flag
759
- },
760
- refreshed() {
761
- let fields = this.data.fields
762
- this.data.fields = fields
763
- }
764
- }
765
- }
766
- </script>
767
- <style scoped>
768
- th {
769
-
770
- }
771
-
772
- .control-label-justify {
773
- display: inline-block;
774
- vertical-align: top;
775
- width: 70px;
776
- text-align: justify;
777
- font-family: PingFang-SC-Bold;
778
- }
779
-
780
- .control-label-justify::after {
781
- content: "";
782
- display: inline-block;
783
- width: 70px;
784
- overflow: hidden;
785
- height: 0;
786
- }
787
-
788
- input::-webkit-outer-spin-button,
789
- input::-webkit-inner-spin-button {
790
- -webkit-appearance: none;
791
- }
792
-
793
- input[type="number"] {
794
- -moz-appearance: textfield;
795
- }
796
-
797
- tr {
798
- height: 34px;
799
- }
800
- </style>
1
+ <template>
2
+ <div class="auto select-overspread" v-if="refresh">
3
+ <!--<div class="panel panel-info" v-if="!data.titlevisible">-->
4
+ <!--<div class="panel-heading">-->
5
+ <!--<h3 class="panel-title">-->
6
+ <!--<span >{{data.title}}</span>-->
7
+ <!--<span v-if="data.back_reason" style="color: red;font-family: 微软雅黑;font-weight: bold"> 请注意被退回原因为:{{data.back_reason}}</span>-->
8
+ <!--</h3>-->
9
+ <!--</div>-->
10
+ <!--</div>-->
11
+ <validator name="v">
12
+ <form class="form-horizontal">
13
+ <div class="col-sm-12 form-group">
14
+ <div v-for="(index,item) in data.fields">
15
+ <!--input-->
16
+ <div :style="item.style+';height: 34px;'"
17
+ v-if="item.type==='input' || item.type==='number'||item.type === 'tel'||item.type === 'email'"
18
+ v-show="!item.hidden"
19
+ :class="[data.fields[index].required&&!(data.fields[index].value) ? 'has-error' : '',data.fields[index].bootstraped?data.fields[index].bootstraped+' form-group':'col-sm-4 form-group']">
20
+ <label :style="item.label_style? item.label_style:''+';width:85px;'"
21
+ :class="item.label_bootstraped?item.label_bootstraped+' control-label-justify control-label':item.label_style?'':'control-label-justify control-label col-sm-6'">{{item.label}}</label>
22
+ <div :style="item.value_style? item.value_style:''"
23
+ :class="item.value_bootstraped?item.value_bootstraped:item.value_style?'':'col-sm-6'">
24
+ <input class="form-control" style="background-color: #f7fbff;"
25
+ :type="item.type"
26
+ v-model="data.fields[index].value"
27
+ :placeholder="item.placeholder"
28
+ :value="data.fields[index].value"
29
+ :readonly="item.readonly"
30
+ :disabled="item.disabled"
31
+ @change="select_change(index),disabled_check(data.fields[index].required,data.fields[index].value)"
32
+ @blur="select_change(index),check_disable"
33
+ />
34
+ </div>
35
+ </div>
36
+ <!--时间datepicker-->
37
+ <div :style="item.style? item.style+';height: 34px;':'height: 34px;'" v-if="item.type==='datepicker'"
38
+ v-show="!item.hidden"
39
+ :class="[data.fields[index].required&&!(data.fields[index].value) ? 'has-error' : '',data.fields[index].bootstraped?data.fields[index].bootstraped+' form-group':'col-sm-4 form-group']">
40
+ <label style="width:85px"
41
+ :class="item.label_bootstraped?item.label_bootstraped+' control-label-justify control-label':'control-label control-label-justify col-sm-6'">{{item.label}}</label>
42
+ <div :class="item.value_bootstraped?item.value_bootstraped:'col-sm-6'">
43
+ <datepicker
44
+ :placeholder="item.placeholder"
45
+ :value.sync="data.fields[index].value"
46
+ :format="'yyyy-MM-dd HH:mm:ss'"
47
+ v-model="data.fields[index].value"
48
+ :readonly=true
49
+ :disabled="item.disabled"
50
+ @blur="check_disable"
51
+ :show-reset-button="reset">
52
+ </datepicker>
53
+ </div>
54
+ </div>
55
+
56
+ <!--textarea-->
57
+ <div :style="item.style? item.style:'height: 34px;'" v-if="item.type==='textarea'" v-show="!item.hidden"
58
+ :class="[data.fields[index].required&&!(data.fields[index].value) ? 'has-error' : '',data.fields[index].bootstraped?data.fields[index].bootstraped+' form-group':'col-sm-12 form-group']">
59
+ <label :style="item.label_style? item.label_style:''"
60
+ :class="item.label_bootstraped?item.label_bootstraped+' control-label-justify control-label':item.label_style?'':'control-label-justify control-label col-sm-3'">{{item.label}}</label>
61
+ <div :style="item.value_style? item.value_style:''"
62
+ :class="item.value_bootstraped?item.value_bootstraped:item.value_style?'':'col-sm-10'">
63
+ <textarea
64
+ :readonly="item.readonly"
65
+ :disabled="item.disabled"
66
+ class="form-control"
67
+ style="background-color: #f7fbff;margin-top: 7px"
68
+ :rows="item.rows"
69
+ v-model="data.fields[index].value"
70
+ @change="disabled_check(data.fields[index].required,data.fields[index].value)"
71
+ @blur="check_disable"
72
+ >
73
+ </textarea>
74
+ </div>
75
+ </div>
76
+
77
+ <!--radio-->
78
+ <div v-if="item.type==='radio'"
79
+ :class="[data.fields[index].required&&!(data.fields[index].value) ? 'has-error' : '',data.fields[index].bootstraped?data.fields[index].bootstraped+' form-group':'col-sm-12 form-group']">
80
+ <label v-if="item.label"
81
+ :class="item.label_bootstraped?item.label_bootstraped+' control-label-justify control-label':'control-label-justify control-label col-sm-2'">{{item.label}}</label>
82
+ <div
83
+ :class="item.value_bootstraped?item.value_bootstraped:item.items.length%2 == 0?'col-sm-5': 'col-sm-3'"
84
+ v-for="(index2,row) in item.items">
85
+ <label for="row.label"
86
+ :class="item.items.length%2 == 0?'col-sm-3 control-label': 'col-sm-2 control-label'">{{row.label}}</label>
87
+ <input @blur="check_disable"
88
+ :class="item.items.length%2 == 0?'col-sm-3 control-label': 'col-sm-2 control-label'"
89
+ :readonly="item.readonly" :disabled="item.disabled" style="margin-top: 10px" type="radio"
90
+ :name="index" :id="row.label" v-bind:value="data.fields[index].items[index2].value"
91
+ v-model="data.fields[index].value">
92
+ </div>
93
+ </div>
94
+
95
+ <!--select-->
96
+ <div style="height: 34px" v-if="item.type==='select'" v-show="!item.hidden"
97
+ :class="[data.fields[index].required&&!(data.fields[index].value) ? 'has-error' : '',data.fields[index].bootstraped?data.fields[index].bootstraped+' form-group':'col-sm-4 form-group']">
98
+ <label style="width:85px;"
99
+ :class="item.label_bootstraped?item.label_bootstraped+' control-label control-label-justify':'control-label-justify control-label col-sm-6'">{{item.label}}</label>
100
+ <input-select :class="item.value_bootstraped?item.value_bootstraped:'col-sm-6'" @blur="check_disable"
101
+ @change="select_change(index),disabled_check(data.fields[index].required,data.fields[index].value)"
102
+ :readonly="item.readonly" :disabled="item.disabled" :value.sync="data.fields[index].value"
103
+ v-model="data.fields[index].value"
104
+ :search="true"
105
+ :options='data.fields[index].options' :valueSingle="true"></input-select>
106
+
107
+ </div>
108
+
109
+ <!--checkbox-->
110
+ <div v-if="item.type==='checkbox'"
111
+ :class="[data.fields[index].required&&!(data.fields[index].value) ? 'has-error' : '',data.fields[index].bootstraped?data.fields[index].bootstraped+' form-group':'col-sm-12 form-group']">
112
+ <label v-if="item.label"
113
+ :class="item.label_bootstraped?item.label_bootstraped+' control-label ':'control-label col-sm-2'">{{item.label}}</label>
114
+ <div style="margin-top: 6px"
115
+ :class="item.value_bootstraped?item.value_bootstraped:'control-label col-sm-2'"
116
+ v-for="(index2,row) in item.items">
117
+ <label class="font-size form-group col-sm-6">{{row.label}}</label>
118
+ <input :readonly="item.readonly" :disabled="item.disabled" type="checkbox" class="col-sm-6"
119
+ :id="row.label" v-model="data.fields[index].items[index2].value" @click="checkboxSelect(index,index2)" >
120
+ </div>
121
+ </div>
122
+ </div>
123
+ <!-- onetomany -->
124
+ <div class="col-sm-12" v-for="(i,datagrid) in data.onetomany">
125
+ <table v-show="!datagrid.hidden" class="table table-bordered table-striped table-hover">
126
+ <tr style="background-color: #00A3F0">
127
+ <th style="text-align: center;border-color: #00A3F0"><font color="white">序号</font></th>
128
+ <th v-for="labels in datagrid.fields" style="text-align: center;border-color: #00A3F0">
129
+ <nobr><font color="white">{{labels.label}}</font></nobr>
130
+ </th>
131
+ <th style="text-align: center;border-color: #00A3F0;padding: 0px">
132
+ <button type="button" @click="$dispatch('add',i)" class="btn btn-warning"
133
+ v-if="!data.onetomany[i].nopower">
134
+ +
135
+ </button>
136
+ </th>
137
+ </tr>
138
+ <tr v-for="(j,row) in model.rows[i]">
139
+ <td style="text-align: center">{{$index+1}}</td>
140
+ <td v-for="key in surBodyData[i]" style="text-align: center">
141
+ {{row[key]}}
142
+ </td>
143
+ <td style="text-align: center">
144
+ <a href="#" @click="delete(i,j)" v-if="!data.onetomany[i].nopower">删除</a>
145
+ </td>
146
+ </tr>
147
+ </table>
148
+ </div>
149
+ <div v-for="(i,item) in data.components" >
150
+ <component v-if="item.device === 'pc' || !item.device" :is="item.name" :selectdata="data" :mark="item.mark"></component>
151
+ </div>
152
+ </div>
153
+ <div class="col-sm-12 form-group text-center" style="padding-top:20px">
154
+ <div class="form-group col-sm-2 center-block">
155
+ <label class=" col-sm-6 control-label control-label-justify">所属公司:</label>
156
+ <div class="col-sm-6">
157
+ <input class="form-control" type="text" v-model="model.f_filiale" disabled>
158
+ </div>
159
+ </div>
160
+ <div class="col-sm-1 form-group center-block">
161
+ </div>
162
+ <div class="col-sm-2 form-group center-block">
163
+ <label class="control-label control-label-justify col-sm-6">部门:</label>
164
+ <div class="col-sm-6">
165
+ <input type="text" class="form-control" disabled v-model="model.f_parentname"/>
166
+ </div>
167
+ </div>
168
+ <div class="col-sm-1 form-group center-block">
169
+ </div>
170
+ <div class="col-sm-2 form-group center-block">
171
+ <label class="control-label control-label-justify col-sm-6">操作人:</label>
172
+ <div class="col-sm-6 ">
173
+ <input type="text" class="form-control" disabled v-model="model.f_operator"/>
174
+ </div>
175
+ </div>
176
+ <div class="col-sm-1 form-group center-block">
177
+ </div>
178
+ <div class="col-sm-2 form-group center-block">
179
+ <label class="control-label control-label-justify col-sm-6">操作日期:</label>
180
+ <div class="col-sm-6">
181
+ <input type="text" class="form-control" disabled v-model="model.f_operate_date"/>
182
+ </div>
183
+ </div>
184
+ </div>
185
+ </form>
186
+ </validator>
187
+ <div class="from-group col-sm-11">
188
+ <center>
189
+ <!-- 按钮组 -->
190
+ <button v-for="(index,button) in data.buttons"
191
+ :disabled="(button.button_name==='提交'||button.button_name==='下发'||button.button_name==='打印回单')&&disable_button" type="button"
192
+ @click="clicked(index,button)"
193
+ :class="(button.button_name==='提交'||button.button_name==='下发'||button.button_name==='打印回单')&&disable_button?'btn btn-default':'btn btn-primary'"
194
+ style="width:80px; margin-left:50px;">
195
+ {{button.button_name}}
196
+ </button>
197
+ </center>
198
+ </div>
199
+ <!-- 按钮模态框 -->
200
+ <modal v-if="showmodal" :show.sync="showmodal" v-ref:modal backdrop="false">
201
+ <header slot="modal-header" class="modal-header">
202
+ <button type="button" class="close" @click="closemodal"><span>&times;</span></button>
203
+ <h4 class="modal-title">{{model.button.button_name}}</h4>
204
+ </header>
205
+ <article slot="modal-body" class="modal-body">
206
+ <div class="col-sm-12" v-for="(index,button_field) in data.buttons[model.button.button_index].button_fields">
207
+ <label class="control-label col-sm-3" style="margin-top: 10px">{{button_field.label}}:</label>
208
+ <div class="col-sm-7">
209
+ <!--select-->
210
+ <input-select v-if="button_field.type=='select'"
211
+ :value.sync="data.buttons[model.button.button_index].button_fields[index].value"
212
+ v-model="data.buttons[model.button.button_index].button_fields[index].value"
213
+ :options='button_field.options'></input-select>
214
+ <!-- input -->
215
+ <input v-else type="text" class="form-control"
216
+ v-model="data.buttons[model.button.button_index].button_fields[index].value"/>
217
+ </div>
218
+ </div>
219
+ </article>
220
+ <footer slot="modal-footer" style="border-top:none" class="modal-footer">
221
+ <button v-show="showmodal" type="button" class="btn btn-primary" @click='acknowledge'>确认</button>
222
+ </footer>
223
+ </modal>
224
+
225
+
226
+ <!-- onetomany新增模态框 -->
227
+ <div class="auto"
228
+ style="background-color:white;max-width: 700px;max-hight:500px;z-index:9999;box-shadow: 0px 0px 100px 10px grey;position: fixed;margin-left: 20%;"
229
+ v-if="showadd">
230
+
231
+ <div class="auto">
232
+
233
+ <div style="padding-top: 15px;padding-left: 15px;padding-right: 15px;">
234
+ <button type="button" class="close" @click="closemodal(modeltitle)"><span>&times;</span></button>
235
+ <span class="modal-title" style="border-bottom: 1px solid #e5e5e5;"><font
236
+ size="3">{{modeltitle}}</font></span>
237
+ </div>
238
+            
239
+ <div style="padding-top: 15px;border-top: 0px solid #e5e5e5;border-bottom: 0px solid #e5e5e5;">
240
+ <div class="col-sm-12" v-for="(index,showadd_field) in showadd_fields.fields" v-if="refresh_modal">
241
+ <label v-show="!showadd_field.hidden" class="control-label col-sm-3" style="margin-top: 10px">{{showadd_field.label}}:</label>
242
+ <div class="col-sm-7" v-show="!showadd_field.hidden">
243
+ <!--时间datepicker-->
244
+ <div v-if="showadd_field.type=='datepicker'"
245
+ :class="[showadd_fields[index].required&&!(showadd_fields.fields[index].value) ? 'has-error' : '']">
246
+ <div>
247
+ <datepicker
248
+ :placeholder="showadd_field.placeholder"
249
+ :value.sync="showadd_fields.fields[index].value"
250
+ :format="'yyyy-MM-dd HH:mm:ss'"
251
+ v-model="showadd_fields.fields[index].value"
252
+ :readonly=true
253
+ :disabled="showadd_fields.fields[index].disabled"
254
+ @blur="check_disable"
255
+ :show-reset-button="reset">
256
+ </datepicker>
257
+ </div>
258
+ </div>
259
+ <!--select-->
260
+ <input-select
261
+ @change="select_change_modal(index),disabled_check_modal(showadd_fields.fields[index].required,showadd_fields.fields[index].value)"
262
+ v-if="showadd_field.type=='select'"
263
+ @blur="check_disable_modal,disabled_check_modal(showadd_fields.fields[index].required,showadd_fields.fields[index].value)"
264
+ :mouseout="check_disable_modal,disabled_check_modal(showadd_fields.fields[index].required,showadd_fields.fields[index].value)"
265
+ :value.sync="showadd_fields.fields[index].value"
266
+ v-model="showadd_fields.fields[index].value"
267
+ :options='showadd_fields.fields[index].options'>
268
+ </input-select>
269
+ <!-- input -->
270
+ <input :type="showadd_field.type"
271
+ @change="select_change_modal(index),check_disable_modal,disabled_check_modal(showadd_fields.fields[index].required,showadd_fields.fields[index].value)"
272
+ v-if="(showadd_field.type=='input'||showadd_field.type=='number')&&!showadd_field.hidden"
273
+ @blur="check_disable_modal,disabled_check_modal(showadd_fields.fields[index].required,showadd_fields.fields[index].value)"
274
+ :mouseout="check_disable_modal,disabled_check_modal(showadd_fields.fields[index].required,showadd_fields.fields[index].value)"
275
+ :readonly="showadd_field.readonly" class="form-control"
276
+ v-model="showadd_fields.fields[index].value"
277
+ :value.sync="showadd_fields[index].value"/>
278
+ <span
279
+ v-if="showadd_fields.fields[index].error&&showadd_fields.fields[index].error.msg&&showadd_fields.fields[index].error.flag"
280
+ style="color: red">{{showadd_fields.fields[index].error.msg}}</span>
281
+ </div>
282
+ </div>
283
+ </div>
284
+
285
+ <div style="padding-top: 15px;padding-left: 15px;padding-right: 15px;text-align: right;">
286
+ <button :class="disable_button_modal?'btn btn-default':'btn btn-primary'" v-show="showadd"
287
+ :disabled="disable_button_modal" type="button" @click="acknowledge(modeltitle)">
288
+ 确认
289
+ </button>
290
+ </div>
291
+
292
+ </div>
293
+  
294
+ </div>
295
+
296
+ </div>
297
+ </template>
298
+ <script>
299
+ import Vue from 'vue'
300
+ // Date格式化
301
+ Date.prototype.Format = function (fmt) {
302
+ var o = {
303
+ "M+": this.getMonth() + 1, //月份
304
+ "d+": this.getDate(), //日
305
+ "H+": this.getHours(), //小时
306
+ "m+": this.getMinutes(), //分
307
+ "s+": this.getSeconds(), //秒
308
+ "q+": Math.floor((this.getMonth() + 3) / 3), //季度
309
+ "S": this.getMilliseconds() //毫秒
310
+ };
311
+ if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
312
+ for (var k in o)
313
+ if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
314
+ return fmt;
315
+ }
316
+
317
+ export default {
318
+ title: '报建业务通用组件',
319
+ props: ['data'],
320
+ data() {
321
+ return {
322
+ data: {
323
+ onetomany: {
324
+ fields: []
325
+ }
326
+ },
327
+ surBodyData: [],
328
+ refresh: true, // 控制重新渲染
329
+ model: {
330
+ rows: [],
331
+ button: {
332
+ button_name: null,
333
+ button_index: null
334
+ },
335
+ f_filiale: null,
336
+ f_parentname: null,
337
+ f_operate_date: null,
338
+ f_operator: null
339
+ },
340
+ showadd: false, // onetomany 新增模态框
341
+ showadd_fields: [], // onetomany 新增模态框的字段配置
342
+ // data: null,
343
+ modeltitle: '',
344
+ tempid: null,
345
+ showadd_index: null,
346
+ showmodal: false,
347
+ disable_button: true,
348
+ disable_button_modal: true,
349
+ refresh_modal: true
350
+ }
351
+ },
352
+ created() {
353
+ // 初始化数据
354
+ this.initializtion()
355
+ },
356
+ events: {
357
+ async 'add'(index) {
358
+ let templet = new Object()
359
+ templet = this.data.onetomany[index]
360
+ let count = 0
361
+ for (let j = 0; j < templet.fields.length; j++) {
362
+ templet.fields[j].value = ''
363
+ if (templet.fields[j].type == 'datepicker') {
364
+ templet.fields[j].value = new Date().Format("yyyy-MM-dd HH:mm:ss")
365
+ }
366
+ if (templet.fields[j].required) {
367
+ count++
368
+ }
369
+ }
370
+ if (count == 0) {
371
+ this.disable_button_modal = false
372
+ }
373
+ this.modeltitle = '新增'
374
+ this.showadd_fields = templet
375
+ this.showadd_index = index
376
+ this.showadd = true
377
+ }
378
+ },
379
+ methods: {
380
+ // 获取组件中的数据
381
+ getmodel() {
382
+ // 组织model.fields数据
383
+ let modeldatas = {}
384
+ for (let i = 0; i < this.data.fields.length; i++) {
385
+ // checkbox特殊处理
386
+ if (this.data.fields[i].type === 'checkbox') {
387
+ for (let j = 0; j < this.data.fields[i].items.length; j++) {
388
+ modeldatas[this.data.fields[i].items[j].field] = this.data.fields[i].items[j].value
389
+ }
390
+ } else {
391
+ modeldatas[this.data.fields[i].field] = this.data.fields[i].value
392
+ }
393
+ }
394
+ modeldatas.f_process_id = this.data.f_process_id
395
+ modeldatas.f_filiale = this.model.f_filiale
396
+ modeldatas.f_parentname = this.model.f_parentname
397
+ modeldatas.f_operator = this.model.f_operator
398
+ modeldatas.f_operate_date = this.model.f_operate_date
399
+ return modeldatas
400
+ },
401
+ // 修改
402
+ revise(index, index2) {
403
+ this.showadd_fields = []
404
+ let templet = new Object()
405
+ templet = this.data.onetomany[index]
406
+ for (let j = 0; j < templet.fields.length; j++) {
407
+ if (templet.fields[j].type == 'input') {
408
+ templet[j] = {}
409
+ templet[j].value = this.model.rows[index][index2][templet.fields[j].field]
410
+ templet.fields[j].value = this.model.rows[index][index2][templet.fields[j].field]
411
+ } else {
412
+ templet.fields[j].value = this.model.rows[index][index2][templet.fields[j].field]
413
+ if (templet.fields[j].type == 'datepicker') {
414
+ templet.fields[j].value = new Date().Format("yyyy-MM-dd HH:mm:ss")
415
+ }
416
+ }
417
+ }
418
+ this.tempid = this.model.rows[index][index2].id
419
+ this.modeltitle = '修改'
420
+ this.showadd_fields = templet
421
+ this.showadd_index = index
422
+ this.showadd = true
423
+ },
424
+ // 检测模态框按钮的disable
425
+ disabled_check_modal(required, value) {
426
+ if (required && value) {
427
+ this.disable_button_modal = false
428
+
429
+ let fields = this.showadd_fields.fields
430
+ let flag = false
431
+ for (let i = 0; i < fields.length; i++) {
432
+ if (fields[i].type !== 'checkbox' && fields[i].required && !fields[i].value) {
433
+ flag = true
434
+ }
435
+ }
436
+ this.disable_button_modal = flag
437
+ }
438
+ },
439
+ // 检测模态框按钮的disable,反向检查
440
+ check_disable_modal() {
441
+ let fields = this.showadd_fields.fields
442
+ let flag = false
443
+ for (let i = 0; i < fields.length; i++) {
444
+ if (fields[i].type !== 'checkbox' && fields[i].required && !fields[i].value) {
445
+ flag = true
446
+ }
447
+ }
448
+ let count = 0
449
+ for (let i = 0; i < fields.length; i++) {
450
+ if (fields[i].type !== 'checkbox' && !fields[i].required) {
451
+ count++
452
+ }
453
+ }
454
+ if (count == 0) {
455
+ flag = false
456
+ }
457
+ this.disable_button_modal = flag
458
+ },
459
+ checkboxSelect(index,index1){
460
+ console.log("chufa事件");
461
+ this.$dispatch('checkboxSelectControl', index, index1)
462
+ },
463
+ // 模态框级联操作预留
464
+ select_change_modal(index) {
465
+ if (this.showadd_fields.fields[index].value) {
466
+ this.showadd_fields[index] = {}
467
+ this.showadd_fields[index].value = this.showadd_fields.fields[index].value
468
+ } else if (this.showadd_fields[index] && this.showadd_fields[index].value) {
469
+ this.showadd_fields.fields[index].value = this.showadd_fields[index].value
470
+ }
471
+ this.refresh_modal = false
472
+ this.$nextTick(() => {
473
+ this.refresh_modal = true
474
+ })
475
+ this.$dispatch('select_cascade_modal', this.showadd_index, index)
476
+ // if(this.showadd_fields.fields[index].label=='购货方纳税人识别号'){
477
+ // if(this.showadd_fields.fields[index].value.length!=15&&this.showadd_fields.fields[index].value.length!=18&&this.showadd_fields.fields[index].value.length!=20){
478
+ // this.$showMessage("购货方纳税人识别号必须为15位,18位或者20位")
479
+ // this.showadd_fields.fields[index].value = ''
480
+ // }
481
+ // }
482
+ },
483
+ // 更新showadd模态框
484
+ update_showadd_fields_value(index, value) {
485
+ this.showadd_fields.fields[index].value = value
486
+ this.showadd_fields[index] = {}
487
+ this.showadd_fields[index].value = value
488
+ },
489
+ // 清理showadd模态框
490
+ clear_showadd_fields_value(index) {
491
+ this.showadd_fields.fields[index].value = ''
492
+ this.showadd_fields[index].value = ''
493
+ },
494
+ // 删除
495
+ delete(i, j) {
496
+ this.$showMessage("您确定要删除这条记录吗?", ['confirm']).then((res) => {
497
+ if (res == 'confirm') {
498
+ this.$dispatch('onetomanydelete', i, j)
499
+ }
500
+ })
501
+ },
502
+ // 强制刷新
503
+ update() {
504
+ this.refresh = false
505
+ this.$nextTick(() => {
506
+ this.refresh = true
507
+ })
508
+ this.initializtion()
509
+ },
510
+ // 初始化数据
511
+ initializtion() {
512
+ let fields = this.data.fields
513
+ let flag = false
514
+ for (let i = 0; i < fields.length; i++) {
515
+ if (fields[i].type !== 'checkbox' && fields[i].required && !fields[i].value) {
516
+ flag = true
517
+ }
518
+ }
519
+ let count = 0
520
+ for (let i = 0; i < fields.length; i++) {
521
+ if (fields[i].type !== 'checkbox' && !fields[i].required) {
522
+ count++
523
+ }
524
+ }
525
+ if (count = 0) {
526
+ flag = false
527
+ }
528
+ this.disable_button = flag
529
+
530
+ this.model.rows = []
531
+ this.surBodyData = []
532
+ if (this.data.onetomany && this.data.onetomany.length > 0) {
533
+ for (let i = 0; i < this.data.onetomany.length; i++) {
534
+ let temp = []
535
+ for (let j = 0; j < this.data.onetomany[i].fields.length; j++) {
536
+ temp.push(this.data.onetomany[i].fields[j].field)
537
+ }
538
+ this.surBodyData.push(temp)
539
+ }
540
+ for (let i = 0; i < this.data.onetomany.length; i++) {
541
+ if (this.data.onetomany[i].rows) {
542
+ this.model.rows.push(this.data.onetomany[i].rows)
543
+ }
544
+ }
545
+
546
+ }
547
+ // datepicker 没有值给当时值
548
+ if (this.data.fields && this.data.fields.length > 0) {
549
+ for (let i = 0; i < this.data.fields.length; i++) {
550
+ if (this.data.fields[i].type === 'datepicker' && !this.data.fields[i].value) {
551
+ this.data.fields[i].value = new Date().Format("yyyy-MM-dd HH:mm:ss")
552
+ }
553
+ }
554
+ } else {
555
+ this.disable_button = false
556
+ }
557
+ if (this.data.filiale) {
558
+ this.model.f_filiale = this.data.filiale
559
+ } else {
560
+ this.model.f_filiale = this.$login.f.f_fengongsi
561
+ }
562
+ if (this.data.f_parentname) {
563
+ this.model.f_parentname = this.data.f_parentname
564
+ } else {
565
+ this.model.f_parentname = this.$login.f.f_parentname
566
+ }
567
+ if (this.data.operate_date) {
568
+ this.model.f_operate_date = this.data.operate_date
569
+ } else {
570
+ this.model.f_operate_date = new Date().Format("yyyy-MM-dd HH:mm:ss")
571
+ }
572
+ if (this.data.operator) {
573
+ this.model.f_operator = this.data.operator
574
+ } else {
575
+ this.model.f_operator = this.$login.f.name
576
+ }
577
+ },
578
+ // 模态框点击确定按钮
579
+ acknowledge(val) {
580
+ if (val == '新增') {
581
+ let temp = {}
582
+ for (let i = 0; i < this.showadd_fields.fields.length; i++) {
583
+ if (this.showadd_fields.fields[i].value) {
584
+ temp[this.showadd_fields.fields[i].field] = this.showadd_fields.fields[i].value
585
+ } else if (this.showadd_fields && this.showadd_fields[i] && this.showadd_fields[i].value) {
586
+ temp[this.showadd_fields.fields[i].field] = this.showadd_fields[i].value
587
+ }
588
+ }
589
+ this.model.rows[this.showadd_index].push(temp)
590
+ this.$dispatch('confirm', this.data.onetomany[this.showadd_index].tables, temp, this.showadd_index, this.model.rows[this.showadd_index].length - 1)
591
+ this.showadd_fields = null
592
+ this.showadd_index = null
593
+ this.closemodal(val)
594
+ } else {
595
+ for (let i = 0; i < this.data.buttons[this.model.button.button_index].button_fields.length; i++) {
596
+ this.model.button.button_fields[this.data.buttons[this.model.button.button_index].button_fields[i].field] = this.data.buttons[this.model.button.button_index].button_fields[i].value
597
+ }
598
+ this.showmodal = false
599
+ this.$dispatch('button', this.model)
600
+ }
601
+ },
602
+ // 关闭模态框
603
+ closemodal(val) {
604
+ if (this.showadd_fields && this.showadd_fields.fields && this.showadd_fields.fields.length) {
605
+ for (let i = 0; i < this.showadd_fields.fields.length; i++) {
606
+ if (this.showadd_fields[i] && this.showadd_fields[i].value) {
607
+ this.showadd_fields[i].value = ''
608
+ }
609
+ if (this.showadd_fields.fields[i] && this.showadd_fields.fields[i].value) {
610
+ this.showadd_fields.fields[i].value = ''
611
+ }
612
+ }
613
+ }
614
+
615
+ if (val != '新增' || val != '修改' || val != '删除') {
616
+ this.disable_button = false
617
+ }
618
+ this.showmodal = false
619
+ if (val == '新增') {
620
+ this.showadd = false
621
+ }
622
+ this.showadd_fields = null
623
+ this.disable_button_modal = true
624
+ this.modeltitle = null
625
+ this.tempid = null
626
+ },
627
+ // 点击按钮
628
+ clicked(index, button) {
629
+
630
+ // onetomany 处理
631
+ // if(this.data.onetomany&&this.data.onetomany.fields.length>0){
632
+ // let temp = {}
633
+ // temp['tables'] = this.data.onetomany.tables
634
+ // temp['rows'] = this.model.rows
635
+ // this.$dispatch('onetomanyevent',temp)
636
+ // }
637
+ this.disable_button=false;
638
+ this.$parent.$parent.$parent.$parent.$refs.queryuser.button_name="查询"
639
+ if(button.button_name !='打印回单')
640
+ this.disable_button = true
641
+ console.log(`点击了按钮index:${index}+button:${JSON.stringify(button)}`);
642
+ // 组织model.fields数据
643
+ let modeldatas = {}
644
+ for (let i = 0; i < this.data.fields.length; i++) {
645
+ // checkbox特殊处理
646
+ if (this.data.fields[i].type === 'checkbox') {
647
+ for (let j = 0; j < this.data.fields[i].items.length; j++) {
648
+ modeldatas[this.data.fields[i].items[j].field] = this.data.fields[i].items[j].value
649
+ }
650
+ } else {
651
+ modeldatas[this.data.fields[i].field] = this.data.fields[i].value
652
+ }
653
+ }
654
+ modeldatas.f_process_id = this.data.f_process_id
655
+ modeldatas.f_filiale = this.model.f_filiale
656
+ modeldatas.f_parentname = this.model.f_parentname
657
+ modeldatas.f_operator = this.model.f_operator
658
+ modeldatas.f_operate_date = this.model.f_operate_date
659
+ this.model = null
660
+ this.model = modeldatas
661
+ // 初始化model.button数据
662
+ let buttondatas = {
663
+ button_fields: {}
664
+ }
665
+ if (button.button_event) {
666
+ buttondatas.button_event = button.button_event
667
+ }
668
+ if (button.button_node) {
669
+ buttondatas.button_node = button.button_node
670
+ }
671
+ if (button.button_person) {
672
+ buttondatas.button_person = button.button_person
673
+ }
674
+ buttondatas.button_name = button.button_name
675
+ buttondatas.button_index = index
676
+ if (button.button_fields) {
677
+ for (let i = 0; i < button.button_fields.length; i++) {
678
+ buttondatas.button_fields[button.button_fields[i].field] = button.button_fields[i].value
679
+ }
680
+ }
681
+ this.model.button = buttondatas
682
+ if (button.button_name === '退回') {
683
+ this.showmodal = true
684
+ } else if (button.button_name === '下发') {
685
+ this.showmodal = true
686
+ } else {
687
+ this.$dispatch('button', this.model)
688
+ }
689
+ },
690
+ // 级联操作预留
691
+ select_change(index) {
692
+ this.$dispatch('select_cascade', index)
693
+ },
694
+ // 检测按钮的disable
695
+ disabled_check(required, value) {
696
+ if (required && value) {
697
+ this.disable_button = false
698
+
699
+ let fields = this.data.fields
700
+ let flag = false
701
+ for (let i = 0; i < fields.length; i++) {
702
+ if (fields[i].type !== 'checkbox' && fields[i].required && !fields[i].value) {
703
+ flag = true
704
+ }
705
+ }
706
+ this.disable_button = flag
707
+ }
708
+ }
709
+ },
710
+ watch: {
711
+ 'data.operate_date'() {
712
+ if (this.data.filiale) {
713
+ this.model.f_filiale = this.data.filiale
714
+ } else {
715
+ this.model.f_filiale = this.$login.f.f_fengongsi
716
+ }
717
+ if (this.data.f_parentname) {
718
+ this.model.f_parentname = this.data.f_parentname
719
+ } else {
720
+ this.model.f_parentname = this.$login.f.f_parentname
721
+ }
722
+ if (this.data.operate_date) {
723
+ this.model.f_operate_date = this.data.operate_date
724
+ } else {
725
+ this.model.f_operate_date = new Date().Format("yyyy-MM-dd HH:mm:ss")
726
+ }
727
+ if (this.data.operator) {
728
+ this.model.f_operator = this.data.operator
729
+ } else {
730
+ this.model.f_operator = this.$login.f.name
731
+ }
732
+ },
733
+ 'data.fields'() {
734
+ this.refresh = false
735
+ this.$nextTick(() => {
736
+ this.refresh = true
737
+ })
738
+ this.initializtion()
739
+ },
740
+ deep: true
741
+ },
742
+ computed: {
743
+ // 输入后按钮检测
744
+ check_disable: function () {
745
+ let fields = this.data.fields
746
+ let flag = false
747
+ for (let i = 0; i < fields.length; i++) {
748
+ if (fields[i].type !== 'checkbox' && fields[i].required && !fields[i].value) {
749
+ flag = true
750
+ }
751
+ }
752
+ let count = 0
753
+ for (let i = 0; i < fields.length; i++) {
754
+ if (fields[i].type !== 'checkbox' && !fields[i].required) {
755
+ count++
756
+ }
757
+ }
758
+ if (count == 0) {
759
+ flag = false
760
+ }
761
+ this.disable_button = flag
762
+ },
763
+ refreshed() {
764
+ let fields = this.data.fields
765
+ this.data.fields = fields
766
+ }
767
+ }
768
+ }
769
+ </script>
770
+ <style scoped>
771
+ th {
772
+
773
+ }
774
+
775
+ .control-label-justify {
776
+ display: inline-block;
777
+ vertical-align: top;
778
+ width: 70px;
779
+ text-align: justify;
780
+ font-family: PingFang-SC-Bold;
781
+ }
782
+ .component-style{
783
+ top: 42px;
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
+ tr {
803
+ height: 34px;
804
+ }
805
+ </style>