apply-clients 5.0.35-ezhou-3 → 5.0.35-ezhou-4

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