apply-clients 3.2.41 → 3.2.50

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 (43) hide show
  1. package/package.json +1 -1
  2. package/src/App.vue +20 -20
  3. package/src/apply.js +185 -175
  4. package/src/components/app_apply/Process/AppExplorationUser.vue +1 -1
  5. package/src/components/app_apply/ProgressReport/ProgressReportList.vue +209 -208
  6. package/src/components/app_apply/Supervisory/AppProcessSupervisory.vue +183 -183
  7. package/src/components/image/tubiao.png +0 -0
  8. package/src/components/product/Ledger/ContractManagement/OtherContract/OtherContractInformation.vue +429 -429
  9. package/src/components/product/Ledger/ContractManagement/OtherContract/OtherContractList.vue +267 -267
  10. package/src/components/product/Ledger/ContractManagement/PurchaseContract/PurchaseContractInformation.vue +715 -682
  11. package/src/components/product/Ledger/ContractManagement/PurchaseContract/PurchaseContractList.vue +304 -304
  12. package/src/components/product/Ledger/ContractManagement/RepairContract/RepairContractInformation.vue +286 -286
  13. package/src/components/product/Ledger/ContractManagement/RepairContract/RepairContractList.vue +258 -258
  14. package/src/components/product/Ledger/FacilityManagement/FacilityInventory/FacilityInventory.vue +31 -0
  15. package/src/components/product/Ledger/FacilityManagement/FacilityInventory/FacilityInventoryList.vue +5 -0
  16. package/src/components/product/Ledger/FacilityManagement/FacilityInventory/addoldFacilityInformation.vue +326 -0
  17. package/src/components/product/Ledger/FileDownload/FileDownload.vue +42 -0
  18. package/src/components/product/Ledger/Function/InstallInfoSelect.vue +4 -1
  19. package/src/components/product/Ledger/ImportApply/ImportApply.vue +68 -0
  20. package/src/components/product/Ledger/MaterialManagement/DeliveryRecord/DeliveryRecordList.vue +39 -3
  21. package/src/components/product/Ledger/MaterialManagement/InventoryInformation/InventoryInformationList.vue +32 -2
  22. package/src/components/product/Ledger/MaterialManagement/InventoryInformation/MaterialInformation.vue +1 -1
  23. package/src/components/product/Ledger/MaterialManagement/InventoryInformation/MaterialOutStock.vue +438 -430
  24. package/src/components/product/Ledger/MaterialManagement/InventoryInformation/MaterialOutboundOrder.vue +457 -449
  25. package/src/components/product/Ledger/MaterialManagement/InventoryInformation/PurchaseMaterial.vue +10 -2
  26. package/src/components/product/Ledger/MaterialManagement/InventoryInformation/PurchaseOrder.vue +10 -2
  27. package/src/components/product/Ledger/MaterialManagement/InventoryInformation/ReturnMaterial.vue +10 -2
  28. package/src/components/product/Ledger/MaterialManagement/OutboundOrder/OutboundOrderInformation.vue +3 -1
  29. package/src/components/product/Ledger/MaterialManagement/OutboundOrder/OutboundOrderList.vue +31 -2
  30. package/src/components/product/Ledger/MaterialManagement/OutboundOrder/PrintMaterialBill.vue +2 -2
  31. package/src/components/product/Ledger/MaterialManagement/PurchaseRecords/PrintPurchaseOrder.vue +5 -4
  32. package/src/components/product/Ledger/MaterialManagement/PurchaseRecords/PurchaseRecordsInformation.vue +5 -1
  33. package/src/components/product/Ledger/MaterialManagement/PurchaseRecords/PurchaseRecordsList.vue +33 -7
  34. package/src/components/product/Ledger/MaterialManagement/WarehousingRecord/WarehousingRecordList.vue +45 -3
  35. package/src/components/product/Ledger/Process/ProcessSelect.vue +3 -5
  36. package/src/components/product/Ledger/Process/Service/ServiceControl.vue +42 -5
  37. package/src/components/product/Ledger/QinhuaMaterial/PickingRecord/PickingInformation.vue +24 -3
  38. package/src/components/product/Ledger/QinhuaMaterial/SeasoningRecord/SeasoningRecordList.vue +14 -2
  39. package/src/components/product/Ledger/Supervisory/Service/RenWuDan.vue +78 -0
  40. package/src/components/product/Ledger/Supervisory/Service/SupervisoryServiceControl.vue +38 -2
  41. package/src/components/product/Ledger/Supervisory/SupervisoryList.vue +182 -7
  42. package/src/components/product/ServiceView.vue +761 -850
  43. package/static/images/lefticon//346/226/207/344/273/266/346/250/241/345/235/227.png +0 -0
@@ -1,682 +1,715 @@
1
- <template>
2
- <div class="select-overspread" style="background-color: #ffffff;padding: 20px;overflow: scroll">
3
- <validator name="v">
4
- <form class="form-horizontal">
5
- <div class="form-group">
6
- <div class="col-sm-4 form-group item" :class="[$v.f_contract_number.required ? 'has-error' : '']">
7
- <label class="control-label-justify control-label col-sm-6">合同编号</label>
8
- <div class="col-sm-6">
9
- <input class="form-control input_view" style=""
10
- type="text"
11
- :readonly="type !== 'add'"
12
- v-validate:f_contract_number = "['required']"
13
- @change="getContractByNumber()"
14
- v-model="contract.f_contract_number"
15
- :value="contract.f_contract_number"/>
16
- </div>
17
- </div>
18
- <div class="col-sm-4 form-group item" :class="[$v.f_supplier.required ? 'has-error' : '']">
19
- <label class="control-label-justify control-label col-sm-6">供方单位</label>
20
- <div class="col-sm-6">
21
- <input type="text" v-model="contract.f_supplier" v-validate:f_supplier = "['required']" v-show="false">
22
- <input-select
23
- class="select select_list"
24
- :disable="type !== 'add'"
25
- :value.sync="contract.f_supplier"
26
- v-model="contract.f_supplier"
27
- :options="supplier"
28
- :valueSingle="true"></input-select>
29
- </div>
30
- </div>
31
- <div class="col-sm-4 form-group item" :class="[$v.f_contact_person.required ? 'has-error' : '']">
32
- <label class="control-label-justify control-label col-sm-6">联系人</label>
33
- <div class="col-sm-6">
34
- <input type="text" v-model="contract.f_contact_person" v-validate:f_contact_person = "['required']" v-show="false">
35
- <input-select
36
- class="select select_list"
37
- :disable="type !== 'add'"
38
- :value.sync="contract.f_contact_person"
39
- v-model="contract.f_contact_person"
40
- :options="f_contact_person"
41
- :valueSingle="true">
42
- </input-select>
43
- </div>
44
- </div>
45
- <div class="col-sm-4 form-group item" :class="[$v.f_tel.required ? 'has-error' : '']">
46
- <label class="control-label-justify control-label col-sm-6">电话</label>
47
- <div class="col-sm-6">
48
- <input type="text" v-model="contract.f_tel" v-validate:f_tel = "['required']" v-show="false">
49
- <input-select
50
- class="select select_list"
51
- :disable="type !== 'add'"
52
- :value.sync="contract.f_tel"
53
- v-model="contract.f_tel"
54
- :options="tel"
55
- :valueSingle="true">
56
- </input-select>
57
- </div>
58
- </div>
59
- <div class="col-sm-4 form-group item" :class="[$v.f_contract_nature.required ? 'has-error' : '']">
60
- <label class="control-label-justify control-label col-sm-6">合同性质</label>
61
- <div class="col-sm-6">
62
- <input type="text" v-model="contract.f_contract_nature" v-validate:f_contract_nature = "['required']" v-show="false">
63
- <input-select
64
- class="select select_list"
65
- :disable="type !== 'add'"
66
- :value.sync="contract.f_contract_nature"
67
- v-model="contract.f_contract_nature"
68
- :options="contractNature"
69
- :valueSingle="true"></input-select>
70
- </div>
71
- </div>
72
- <div class="col-sm-4 form-group item" :class="[$v.f_contract_source.required ? 'has-error' : '']">
73
- <label class="control-label-justify control-label col-sm-6">合同来源</label>
74
- <div class="col-sm-6">
75
- <input type="text" v-model="contract.f_contract_source" v-validate:f_contract_source = "['required']" v-show="false">
76
- <input-select
77
- class="select select_list"
78
- :disable="type !== 'add'"
79
- :value.sync="contract.f_contract_source"
80
- v-model="contract.f_contract_source"
81
- :options="contractSource"
82
- :valueSingle="true"></input-select>
83
- </div>
84
- </div>
85
- <div class="col-sm-4 form-group item" :class="[$v.f_contract_category.required ? 'has-error' : '']">
86
- <label class="control-label-justify control-label col-sm-6">合同类别</label>
87
- <div class="col-sm-6">
88
- <input type="text" v-model="contract.f_contract_category" v-validate:f_contract_category = "['required']" v-show="false">
89
- <input-select
90
- class="select select_list"
91
- :disable="type !== 'add'"
92
- @change="changeContractCategory()"
93
- :value.sync="contract.f_contract_category"
94
- v-model="contract.f_contract_category"
95
- :options="contractCategory"
96
- :valueSingle="true"></input-select>
97
- </div>
98
- </div>
99
- <div class="col-sm-4 form-group item" :class="[$v.f_amount.required ? 'has-error' : '']">
100
- <label class="control-label-justify control-label col-sm-6">合同份数</label>
101
- <div class="col-sm-6">
102
- <input class="form-control input_view" style=""
103
- type="number"
104
- :readonly="type === 'view'"
105
- v-validate:f_amount = "['required']"
106
- v-model="contract.f_amount"
107
- :value="contract.f_amount"/>
108
- </div>
109
- </div>
110
- <div class="col-sm-4 form-group item" :class="[$v.f_contract_time.required ? 'has-error' : '']">
111
- <label class="control-label-justify control-label col-sm-6">签订时间</label>
112
- <div class="col-sm-6">
113
- <input type="text" v-model="contract.f_contract_time" v-validate:f_contract_time = "['required']" v-show="false">
114
- <datepicker
115
- :disabled="type !== 'add'"
116
- :value.sync="contract.f_contract_time"
117
- format="yyyy-MM-dd"
118
- v-model="contract.f_contract_time">
119
- </datepicker>
120
- </div>
121
- </div>
122
- <div v-if="contract.f_contract_nature !== '单次'" class="col-sm-4 form-group item" :class="[$v.f_contract_expiration_date.required ? 'has-error' : '']">
123
- <label class="control-label-justify control-label col-sm-6">到期时间</label>
124
- <div class="col-sm-6">
125
- <input type="text" v-model="contract.f_contract_expiration_date" v-validate:f_contract_expiration_date = "['required']" v-show="false">
126
- <datepicker
127
- :disabled="type === 'view'"
128
- format="yyyy-MM-dd"
129
- @change="changeExpirationDate"
130
- :value.sync="contract.f_contract_expiration_date"
131
- v-model="contract.f_contract_expiration_date">
132
- </datepicker>
133
- </div>
134
- </div>
135
- <div class="col-sm-4 form-group item" v-if="type !== 'add'">
136
- <label class="control-label-justify control-label col-sm-6">合同总金额</label>
137
- <div class="col-sm-6">
138
- <input class="form-control input_view" style=""
139
- type="number"
140
- readonly
141
- v-model="contract.f_contract_money"
142
- :value="contract.f_contract_money"/>
143
- </div>
144
- </div>
145
- <div class="col-sm-4 form-group item" v-if="type !== 'add'">
146
- <label class="control-label-justify control-label col-sm-6">入库次数</label>
147
- <div class="col-sm-6">
148
- <input class="form-control input_view" style=""
149
- type="number"
150
- readonly
151
- v-model="contract.f_warehousing_quantity"
152
- :value="contract.f_warehousing_quantity"/>
153
- </div>
154
- </div>
155
- <div class="col-sm-12 form-group item">
156
- <label class="control-label-justify control-label col-sm-3">备注</label>
157
- <div class="col-sm-10">
158
- <textarea
159
- class="form-control input_view"
160
- style="width: 100%;height: 100%"
161
- rows="2"
162
- :readonly="type !== 'add'"
163
- v-model="contract.f_remarks"
164
- :value="contract.f_remarks"
165
- ></textarea>
166
- </div>
167
- </div>
168
-
169
- <div class="col-sm-12">
170
- <data-grid v-if="contract.f_contract_category === '物料'" :model="model" partial='list' v-ref:grid style="overflow: auto" class="list_area table_sy">
171
- <template partial='head'>
172
- <tr>
173
- <th style="white-space: nowrap;">序号</th>
174
- <th style="white-space: nowrap;">材料名称</th>
175
- <th style="white-space: nowrap;">材料型号</th>
176
- <th style="white-space: nowrap;">材料规格</th>
177
- <th style="white-space: nowrap;">单位</th>
178
- <th style="white-space: nowrap;">单价</th>
179
- <th style="white-space: nowrap;" v-if="type !== 'add'">累计数量</th>
180
- <th style="white-space: nowrap;" v-if="$parent.$parent.type !== 'view'">
181
- <button @click="$parent.$parent.showModal = !$parent.$parent.showModal" type="button" class="btn btn-info">
182
- <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
183
- </button>
184
- <a href="/download/材料批量导入模板.xlsx" type="button" class="btn btn-info">模板下载</a>
185
- <button @click="$parent.$parent.showFile = !$parent.$parent.showFile" type="button" class="btn btn-info">批量导入</button>
186
- </th>
187
- </tr>
188
- </template>
189
- <template partial='body'>
190
- <tr>
191
- <td style="text-align: center;">{{$index+1}}</td>
192
- <td style="text-align: center;">{{row.f_material_name}}</td>
193
- <td style="text-align: center;">{{row.f_material_model}}</td>
194
- <td style="text-align: center;">{{row.f_material_norm}}</td>
195
- <td style="text-align: center;">{{row.f_unit}}</td>
196
- <td style="text-align: center;">{{row.f_price}}</td>
197
- <td style="text-align: center;" v-if="type !== 'add'">{{row.f_total}}</td>
198
- <td style="text-align: center;" v-if="$parent.$parent.type !== 'view'">
199
- <button type="button" v-if="!row.id" name="button" class="btn btn-link" @click="$parent.$parent.openUpdate($index,row)">修改</button>
200
- <button type="button" v-if="!row.id" name="button" class="btn btn-link" @click="$parent.$parent.delete($index)">删除</button>
201
- </td>
202
- </tr>
203
- </template>
204
- </data-grid>
205
-
206
- <data-grid v-if="contract.f_contract_category === '设备'" :model="model" partial='list' v-ref:grid style="overflow: auto" class="list_area table_sy">
207
- <template partial='head'>
208
- <tr>
209
- <th style="white-space: nowrap;">序号</th>
210
- <th style="white-space: nowrap;">设备名称</th>
211
- <th style="white-space: nowrap;">设备型号</th>
212
- <th style="white-space: nowrap;">设备规格</th>
213
- <th style="white-space: nowrap;">设备价格</th>
214
- <th style="white-space: nowrap;" v-if="type !== 'add'">累计数量</th>
215
- <th style="white-space: nowrap;" v-if="$parent.$parent.type !== 'view'">
216
- <button @click="$parent.$parent.showModal = !$parent.$parent.showModal" type="button" class="btn btn-info">
217
- <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
218
- </button>
219
- <a href="/download/设备批量导入模板.xlsx" type="button" class="btn btn-info">模板下载</a>
220
- <button @click="$parent.$parent.showFile = !$parent.$parent.showFile" type="button" class="btn btn-info">批量导入</button>
221
- </th>
222
- </tr>
223
- </template>
224
- <template partial='body'>
225
- <tr>
226
- <td style="text-align: center;">{{$index+1}}</td>
227
- <td style="text-align: center;">{{row.f_facility_name}}</td>
228
- <td style="text-align: center;">{{row.f_facility_model}}</td>
229
- <td style="text-align: center;">{{row.f_facility_norm}}</td>
230
- <td style="text-align: center;">{{row.f_facility_money}}</td>
231
- <td style="text-align: center;" v-if="type !== 'add'">{{row.f_total}}</td>
232
- <td style="text-align: center;" v-if="$parent.$parent.type !== 'view'">
233
- <button type="button" v-if="!row.id" name="button" class="btn btn-link" @click="$parent.$parent.openUpdate($index,row)">修改</button>
234
- <button type="button" v-if="!row.id" name="button" class="btn btn-link" @click="$parent.$parent.delete($index)">删除</button>
235
- </td>
236
- </tr>
237
- </template>
238
- </data-grid>
239
- </div>
240
-
241
- <div class="col-sm-12 form-group" style="text-align: center">
242
- <button class="btn btn-primary" v-if="type === 'add'" @click.prevent="addContract()" :disabled='!($v.valid && model.data.length > 0)'>保存</button>
243
- <button class="btn btn-primary" v-if="type === 'renew'" @click.prevent="renewContract()" :disabled='!($v.valid && model.data.length > 0)'>续签</button>
244
- </div>
245
- </div>
246
- </form>
247
- </validator>
248
-
249
- <validator name="mv">
250
- <modal v-if="showModal" :show.sync="showModal" backdrop="false" large>
251
- <header slot="modal-header" class="modal-header">
252
- <button type="button" class="close" @click="closeModal()"><span>&times;</span></button>
253
- <span class="modal-title"><font size="3">添加材料</font></span>
254
- </header>
255
- <article slot="modal-body" class="form-horizontal modal-body clearfix" v-if="contract.f_contract_category === '物料'">
256
- <div class="col-sm-12 form-group" :class="[$mv.f_material_name.required ? 'has-error' : '']">
257
- <label class="control-label col-sm-2">材料名称</label>
258
- <div class="col-sm-9">
259
- <input class="form-control" type="text" v-validate:f_material_name = "['required']" v-model="material.f_material_name" :value="material.f_material_name"/>
260
- </div>
261
- </div>
262
- <div class="col-sm-12 form-group" :class="[$mv.f_material_model.required ? 'has-error' : '']">
263
- <label class="control-label col-sm-2">材料型号</label>
264
- <div class="col-sm-9">
265
- <input class="form-control" type="text" v-validate:f_material_model = "['required']" v-model="material.f_material_model" :value="material.f_material_model"/>
266
- </div>
267
- </div>
268
- <div class="col-sm-12 form-group" :class="[$mv.f_material_norm.required ? 'has-error' : '']">
269
- <label class="control-label col-sm-2">材料规格</label>
270
- <div class="col-sm-9">
271
- <input class="form-control" type="text" v-validate:f_material_norm = "['required']" v-model="material.f_material_norm" :value="material.f_material_norm"/>
272
- </div>
273
- </div>
274
- <div class="col-sm-12 form-group" :class="[$mv.f_unit.required ? 'has-error' : '']">
275
- <label class="control-label col-sm-2">单&emsp;&emsp;位</label>
276
- <div class="col-sm-9">
277
- <input class="form-control" type="text" v-validate:f_unit = "['required']" v-model="material.f_unit" :value="material.f_unit"/>
278
- </div>
279
- </div>
280
- <div class="col-sm-12 form-group" :class="[$mv.f_price.required ? 'has-error' : '']">
281
- <label class="control-label col-sm-2">单&emsp;&emsp;价</label>
282
- <div class="col-sm-9">
283
- <input class="form-control" type="number" v-validate:f_price = "['required']" v-model="material.f_price" :value="material.f_price"/>
284
- </div>
285
- </div>
286
- </article>
287
- <article slot="modal-body" class="form-horizontal modal-body clearfix" v-if="contract.f_contract_category === '设备'">
288
- <div class="col-sm-12 form-group" :class="[$mv.f_facility_name.required ? 'has-error' : '']">
289
- <label class="control-label col-sm-2">设备名称</label>
290
- <div class="col-sm-9">
291
- <input class="form-control" type="text" v-validate:f_facility_name = "['required']" v-model="facility.f_facility_name" :value="facility.f_facility_name"/>
292
- </div>
293
- </div>
294
- <div class="col-sm-12 form-group" :class="[$mv.f_facility_model.required ? 'has-error' : '']">
295
- <label class="control-label col-sm-2">设备型号</label>
296
- <div class="col-sm-9">
297
- <input class="form-control" type="text" v-validate:f_facility_model = "['required']" v-model="facility.f_facility_model" :value="facility.f_facility_model"/>
298
- </div>
299
- </div>
300
- <div class="col-sm-12 form-group" :class="[$mv.f_facility_norm.required ? 'has-error' : '']">
301
- <label class="control-label col-sm-2">设备规格</label>
302
- <div class="col-sm-9">
303
- <input class="form-control" type="text" v-validate:f_facility_norm = "['required']" v-model="facility.f_facility_norm" :value="facility.f_facility_norm"/>
304
- </div>
305
- </div>
306
- <div class="col-sm-12 form-group" :class="[$mv.f_facility_money.required ? 'has-error' : '']">
307
- <label class="control-label col-sm-2">设备金额</label>
308
- <div class="col-sm-9">
309
- <input class="form-control" type="number" v-validate:f_facility_money = "['required']" v-model="facility.f_facility_money" :value="facility.f_facility_money"/>
310
- </div>
311
- </div>
312
- </article>
313
- <footer slot="modal-footer" class="modal-footer">
314
- <button class="btn btn-primary" type="button" @click.prevent="saveOrUpdate()" :disabled='!$mv.valid'>确认</button>
315
- </footer>
316
- </modal>
317
- </validator>
318
-
319
- <modal :show.sync="showFile" v-ref:modal backdrop="true" title="选择文件">
320
- <header slot="modal-header" class="modal-header">
321
- <button type="button" class="close" @click="closeFile"><span>&times;</span></button>
322
- <h4 class="modal-title">选择文件</h4>
323
- </header>
324
- <article slot="modal-body" class="modal-body">
325
- <div class="form-group">
326
- <file-upload class="my-file-uploader" name="useraddressUploadFile" action="rs/file/uploadFile" tagname="确定" multiple v-ref:file></file-upload>
327
- </div>
328
- </article>
329
- <footer slot="modal-footer" class="modal-footer"></footer>
330
- </modal>
331
- </div>
332
- </template>
333
-
334
- <script>
335
- import {getNowDate,isEmpty} from '../../../../Util'
336
- // Date格式化
337
- Date.prototype.Format = function (fmt) {
338
- var o = {
339
- 'M+': this.getMonth() + 1, // 月份
340
- 'd+': this.getDate(), // 日
341
- 'H+': this.getHours(), // 小时
342
- 'm+': this.getMinutes(), //
343
- 's+': this.getSeconds(), // 秒
344
- 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
345
- 'S': this.getMilliseconds() // 毫秒
346
- }
347
- if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
348
- for (var k in o) {
349
- if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
350
- }
351
- return fmt
352
- }
353
- export default {
354
- props: ['contract', 'type'],
355
- title: '合同信息',
356
- data () {
357
- return {
358
- model: {
359
- data: []
360
- },
361
- supplier: [{label: '全部', value: ''}, ...this.$appdata.getParam('供方单位')],
362
- contractSource: [{label: '全部', value: ''}, ...this.$appdata.getParam('合同来源')],
363
- contractCategory:[{label: '全部', value: ''}, ...this.$appdata.getParam('合同类别')],
364
- contractNature:[{label: '全部', value: ''}, ...this.$appdata.getParam('合同性质')],
365
- f_contact_person:[{label:'全部', value:''}, ...this.$appdata.getParam('联系人')],
366
- tel:[{label:'全部',value:''}, ...this.$appdata.getParam('电话')],
367
- showModal: false,
368
- material: {},
369
- facility: {},
370
- index: null,
371
- showFile: false
372
- }
373
- },
374
- ready () {
375
- if (this.type !== 'add') {
376
- this.getData()
377
- }
378
-
379
- },
380
- methods: {
381
- closeFile () {
382
- this.showFile = false
383
- // 将选的文件清空
384
- this.$refs.file.$el.querySelector('input').value = ''
385
- },
386
- async getData () {
387
- let data = {
388
- tablename: `${this.contract.f_contract_category === '物料' ? 't_contract_material' : 't_contract_facility'}`,
389
- condition: `f_contract_id = '${this.contract.id}'`
390
- }
391
-
392
- let res = await this.$resetpost(
393
- `rs/sql/singleTable`,
394
- {data: data},
395
- {resolveMsg: null, rejectMsg: `${this.contract.f_contract_category}查询失败!!!`}
396
- )
397
-
398
- this.model.data = res.data
399
- },
400
- //续签合同
401
- renewContract () {
402
- let data = {
403
- contract: this.contract,
404
- data: this.model.data
405
- }
406
- this.$dispatch('renewContract', data)
407
- },
408
- // 打开修改
409
- openUpdate (index, row) {
410
- this.index = index
411
- this.material = JSON.parse(JSON.stringify(row))
412
- this.facility = JSON.parse(JSON.stringify(row))
413
-
414
- this.showModal = true
415
- },
416
- // 删除
417
- async delete (index) {
418
- this.index = index
419
- await this.$showMessage('您确定要删除这条记录吗?').then((res) => {
420
- if (res === 'confirm') {
421
- this.model.data.splice(this.index, 1)
422
- }
423
- })
424
- this.closeModal()
425
- },
426
- // 保存或修改
427
- saveOrUpdate (i) {
428
- if (this.contract.f_contract_category === '物料') {
429
- let flag = this.model.data.some(item => {
430
- if (
431
- item.f_material_name === this.material.f_material_name &&
432
- item.f_material_norm === this.material.f_material_norm &&
433
- item.f_material_model === this.material.f_material_model &&
434
- item.f_unit === this.material.f_unit
435
- ) {
436
- return true
437
- }
438
- return false
439
- })
440
- if (flag) {
441
- if (isEmpty(i)) {
442
- this.$showAlert('该物料已经存在!!!', 'warning', 3000)
443
- } else {
444
- throw `第${i}行物料已经存在!!!`
445
- }
446
-
447
- } else {
448
- if (isEmpty(this.index)) {
449
- this.model.data.push(this.material)
450
- } else {
451
- this.model.data.splice(this.index, 1, this.material)
452
- }
453
- }
454
- }
455
- if (this.contract.f_contract_category === '设备') {
456
- let flag = this.model.data.some(item => {
457
- if (
458
- item.f_facility_name === this.facility.f_facility_name &&
459
- item.f_facility_model === this.facility.f_facility_model &&
460
- item.f_facility_norm === this.facility.f_facility_norm
461
- ) {
462
- return true
463
- }
464
- return false
465
- })
466
- if (flag) {
467
- if (isEmpty(i)) {
468
- this.$showAlert('该设备已经存在!!!', 'warning', 3000)
469
- } else {
470
- throw `第${i}行设备已经存在!!!`
471
- }
472
- } else {
473
- if (isEmpty(this.index)) {
474
- this.model.data.push(this.facility)
475
- } else {
476
- this.model.data.splice(this.index, 1, this.facility)
477
- }
478
- }
479
- }
480
- this.closeModal()
481
- },
482
- // 关闭模态框
483
- closeModal () {
484
- this.showModal = false
485
- this.material = {}
486
- this.facility = {}
487
- this.index = null
488
- },
489
- // 合同类别
490
- changeContractCategory () {
491
- this.model.data = []
492
- },
493
- // 添加合同
494
- addContract () {
495
- let data = {
496
- contract: this.contract,
497
- data: this.model.data
498
- }
499
- this.$dispatch('addContract', data)
500
- },
501
- // 到期时间检查
502
- changeExpirationDate () {
503
- if (!isEmpty(this.contract.f_contract_expiration_date)) {
504
- if (isEmpty(this.contract.f_contract_time)) {
505
- this.contract.f_contract_expiration_date = null
506
- this.$showAlert('先输入合同签订时间!!!', 'warning', 3000)
507
- }
508
- if (new Date(this.contract.f_contract_expiration_date) < new Date(this.contract.f_contract_time)) {
509
- this.contract.f_contract_expiration_date = null
510
- this.$showAlert('到期时间需要大于签订时间!!!', 'warning', 3000)
511
- }
512
- }
513
- },
514
- // 查询合同编号
515
- async getContractByNumber () {
516
- let data = {
517
- tablename: 't_contract',
518
- condition: `f_contract_number = '${this.contract.f_contract_number}' and f_contract_type = '采购合同'`
519
- }
520
-
521
- let res = await this.$resetpost(
522
- `rs/sql/singleTable`,
523
- {data: data},
524
- {resolveMsg: null, rejectMsg: '合同编号查询失败!!!'}
525
- )
526
-
527
- if (res.data.length > 0) {
528
- this.contract.f_contract_number = null
529
- this.$showAlert('合同编号已存在!!!', 'warning', 3000)
530
- }
531
- },
532
- },
533
- events: {
534
- async 'onFileUpload'(file, result) {
535
- let data = {
536
- type: this.contract.f_contract_category,
537
- filepath: result.f_downloadpath
538
- }
539
- let res = await this.$resetpost(`rs/logic/importPurchaseContractContent`, {data:data}, {resolveMsg: null, rejectMsg: '导入失败', silent: true}, 0)
540
-
541
- console.log('----------解析内容--------------')
542
- console.log(res.data)
543
-
544
- let i = 1
545
- for (const item of res.data) {
546
- if (this.contract.f_contract_category === '物料') {
547
- if (!item.material.f_material_name) {
548
- this.$showAlert(`第${i}行数据材料名称不存在!!!`, 'warning', 3000)
549
- this.closeFile()
550
- return
551
- }
552
- if (!item.material.f_material_model) {
553
- this.$showAlert(`第${i}行数据材料型号不存在!!!`, 'warning', 3000)
554
- this.closeFile()
555
- return
556
- }
557
- if (!item.material.f_material_norm) {
558
- this.$showAlert(`第${i}行数据材料规格不存在!!!`, 'warning', 3000)
559
- this.closeFile()
560
- return
561
- }
562
- if (!item.material.f_unit) {
563
- this.$showAlert(`第${i}行数据单位不存在!!!`, 'warning', 3000)
564
- this.closeFile()
565
- return
566
- }
567
- if (!item.material.f_price) {
568
- this.$showAlert(`第${i}行数据单价不存在!!!`, 'warning', 3000)
569
- this.closeFile()
570
- return
571
- }
572
- this.material = item.material
573
- }
574
- if (this.contract.f_contract_category === '设备') {
575
- if (!item.facility.f_facility_name) {
576
- this.$showAlert(`第${i}行数据设备名称不存在!!!`, 'warning', 3000)
577
- this.closeFile()
578
- return
579
- }
580
- if (!item.facility.f_facility_model) {
581
- this.$showAlert(`第${i}行数据设备型号不存在!!!`, 'warning', 3000)
582
- this.closeFile()
583
- return
584
- }
585
- if (!item.facility.f_facility_norm) {
586
- this.$showAlert(`第${i}行数据设备规格不存在!!!`, 'warning', 3000)
587
- this.closeFile()
588
- return
589
- }
590
- if (!item.facility.f_facility_money) {
591
- this.$showAlert(`第${i}行数据设备价格不存在!!!`, 'warning', 3000)
592
- this.closeFile()
593
- return
594
- }
595
- this.facility = item.facility
596
- }
597
-
598
- try {
599
- this.saveOrUpdate(i)
600
- } catch (e) {
601
- this.$showAlert(e, 'danger', 3000)
602
- this.closeFile()
603
- return
604
- }
605
-
606
-
607
- i++
608
- }
609
- this.$showAlert(`成功导入${i}条数据`, 'success', 3000)
610
- this.closeFile()
611
- }
612
- }
613
- }
614
- </script>
615
-
616
- <style scoped>
617
- .item{
618
- height: 40px;
619
- margin-bottom: 20px;
620
- }
621
-
622
- th{
623
- font-size: 15px !important;
624
- text-align: center !important;
625
- background-color: #dfedfb!important;
626
- color: #666666 !important;
627
- font-family: PINGFANG-BOLD !important;
628
- font-weight: normal!important;
629
- }
630
- /*清除model中的浮动*/
631
- .clearfix:after,.clearfix:before{
632
- display: table;
633
- }
634
- .clearfix:after{
635
- clear: both;
636
- }
637
-
638
- .input_view{
639
- padding: 8px;
640
- background-color: #ffffff;
641
- border-radius: 2px;
642
- border: solid 1px #c7c7c7!important;
643
- color: #333333!important;
644
- font-size: 15px!important;
645
- }
646
-
647
- .input_view[readonly]{
648
- border: 1px solid #DDD!important;
649
- /*background-color: #F5F5F5;*/
650
- color:#ACA899!important;
651
- }
652
- .input_view:disabled{
653
- border: 1px solid #DDD!important;
654
- /*background-color: #F5F5F5;*/
655
- color:#ACA899!important;
656
- }
657
-
658
- .control-label-justify {
659
- display: inline-block;
660
- vertical-align: top;
661
- width: 110px;
662
- text-align: justify;
663
- font-family: PingFang-SC-Bold;
664
- }
665
-
666
- .control-label-justify::after {
667
- content: "";
668
- display: inline-block;
669
- width: 70px;
670
- overflow: hidden;
671
- height: 0;
672
- }
673
-
674
- input::-webkit-outer-spin-button,
675
- input::-webkit-inner-spin-button {
676
- -webkit-appearance: none;
677
- }
678
-
679
- input[type="number"] {
680
- -moz-appearance: textfield;
681
- }
682
- </style>
1
+ <template>
2
+ <div class="select-overspread" style="background-color: #ffffff;padding: 20px;overflow: scroll">
3
+ <validator name="v">
4
+ <form class="form-horizontal">
5
+ <div class="form-group">
6
+ <div class="col-sm-4 form-group item" :class="[$v.f_contract_number.required ? 'has-error' : '']">
7
+ <label class="control-label-justify control-label col-sm-6">合同编号</label>
8
+ <div class="col-sm-6">
9
+ <input class="form-control input_view" style=""
10
+ type="text"
11
+ :readonly="type !== 'add'"
12
+ v-validate:f_contract_number = "['required']"
13
+ @change="getContractByNumber()"
14
+ v-model="contract.f_contract_number"
15
+ :value="contract.f_contract_number"/>
16
+ </div>
17
+ </div>
18
+ <div class="col-sm-4 form-group item" :class="[$v.f_supplier.required ? 'has-error' : '']">
19
+ <label class="control-label-justify control-label col-sm-6">供方单位</label>
20
+ <div class="col-sm-6">
21
+ <input type="text" v-model="contract.f_supplier" v-validate:f_supplier = "['required']" v-show="false">
22
+ <input-select
23
+ class="select select_list"
24
+ :disable="type !== 'add'"
25
+ :value.sync="contract.f_supplier"
26
+ v-model="contract.f_supplier"
27
+ :options="supplier"
28
+ :valueSingle="true"></input-select>
29
+ </div>
30
+ </div>
31
+ <div class="col-sm-4 form-group item" :class="[$v.f_contact_person.required ? 'has-error' : '']">
32
+ <label class="control-label-justify control-label col-sm-6">联系人</label>
33
+ <div class="col-sm-6">
34
+ <input type="text" v-model="contract.f_contact_person" v-validate:f_contact_person = "['required']" v-show="false">
35
+ <input-select
36
+ class="select select_list"
37
+ :disable="type !== 'add'"
38
+ :value.sync="contract.f_contact_person"
39
+ v-model="contract.f_contact_person"
40
+ :options="f_contact_person"
41
+ :valueSingle="true">
42
+ </input-select>
43
+ </div>
44
+ </div>
45
+ <div class="col-sm-4 form-group item" :class="[$v.f_tel.required ? 'has-error' : '']">
46
+ <label class="control-label-justify control-label col-sm-6">电话</label>
47
+ <div class="col-sm-6">
48
+ <input type="text" v-model="contract.f_tel" v-validate:f_tel = "['required']" v-show="false">
49
+ <input-select
50
+ class="select select_list"
51
+ :disable="type !== 'add'"
52
+ :value.sync="contract.f_tel"
53
+ v-model="contract.f_tel"
54
+ :options="tel"
55
+ :valueSingle="true">
56
+ </input-select>
57
+ </div>
58
+ </div>
59
+ <div class="col-sm-4 form-group item" :class="[$v.f_contract_nature.required ? 'has-error' : '']">
60
+ <label class="control-label-justify control-label col-sm-6">合同性质</label>
61
+ <div class="col-sm-6">
62
+ <input type="text" v-model="contract.f_contract_nature" v-validate:f_contract_nature = "['required']" v-show="false">
63
+ <input-select
64
+ class="select select_list"
65
+ :disable="type !== 'add'"
66
+ :value.sync="contract.f_contract_nature"
67
+ v-model="contract.f_contract_nature"
68
+ :options="contractNature"
69
+ :valueSingle="true"></input-select>
70
+ </div>
71
+ </div>
72
+ <div class="col-sm-4 form-group item" :class="[$v.f_contract_source.required ? 'has-error' : '']">
73
+ <label class="control-label-justify control-label col-sm-6">合同来源</label>
74
+ <div class="col-sm-6">
75
+ <input type="text" v-model="contract.f_contract_source" v-validate:f_contract_source = "['required']" v-show="false">
76
+ <input-select
77
+ class="select select_list"
78
+ :disable="type !== 'add'"
79
+ :value.sync="contract.f_contract_source"
80
+ v-model="contract.f_contract_source"
81
+ :options="contractSource"
82
+ :valueSingle="true"></input-select>
83
+ </div>
84
+ </div>
85
+ <div class="col-sm-4 form-group item" :class="[$v.f_contract_category.required ? 'has-error' : '']">
86
+ <label class="control-label-justify control-label col-sm-6">合同类别</label>
87
+ <div class="col-sm-6">
88
+ <input type="text" v-model="contract.f_contract_category" v-validate:f_contract_category = "['required']" v-show="false">
89
+ <input-select
90
+ class="select select_list"
91
+ :disable="type !== 'add'"
92
+ @change="changeContractCategory()"
93
+ :value.sync="contract.f_contract_category"
94
+ v-model="contract.f_contract_category"
95
+ :options="contractCategory"
96
+ :valueSingle="true"></input-select>
97
+ </div>
98
+ </div>
99
+ <div class="col-sm-4 form-group item" :class="[$v.f_amount.required ? 'has-error' : '']">
100
+ <label class="control-label-justify control-label col-sm-6">合同份数</label>
101
+ <div class="col-sm-6">
102
+ <input class="form-control input_view" style=""
103
+ type="number"
104
+ :readonly="type != 'add'"
105
+ v-validate:f_amount = "['required']"
106
+ v-model="contract.f_amount"
107
+ :value="contract.f_amount"/>
108
+ </div>
109
+ </div>
110
+ <div class="col-sm-4 form-group item" :class="[$v.f_contract_time.required ? 'has-error' : '']">
111
+ <label class="control-label-justify control-label col-sm-6">签订时间</label>
112
+ <div class="col-sm-6">
113
+ <input type="text" v-model="contract.f_contract_time" v-validate:f_contract_time = "['required']" v-show="false">
114
+ <datepicker
115
+ :disabled="type !== 'add'"
116
+ :value.sync="contract.f_contract_time"
117
+ format="yyyy-MM-dd"
118
+ v-model="contract.f_contract_time">
119
+ </datepicker>
120
+ </div>
121
+ </div>
122
+ <div v-if="contract.f_contract_nature !== '单次'" class="col-sm-4 form-group item" :class="[$v.f_contract_expiration_date.required ? 'has-error' : '']">
123
+ <label class="control-label-justify control-label col-sm-6">到期时间</label>
124
+ <div class="col-sm-6">
125
+ <input type="text" v-model="contract.f_contract_expiration_date" v-validate:f_contract_expiration_date = "['required']" v-show="false">
126
+ <datepicker
127
+ :disabled="type !== 'add'"
128
+ format="yyyy-MM-dd"
129
+ @change="changeExpirationDate"
130
+ :value.sync="contract.f_contract_expiration_date"
131
+ v-model="contract.f_contract_expiration_date">
132
+ </datepicker>
133
+ </div>
134
+ </div>
135
+ <div class="col-sm-4 form-group item" v-if="type !== 'add'">
136
+ <label class="control-label-justify control-label col-sm-6">合同总金额</label>
137
+ <div class="col-sm-6">
138
+ <input class="form-control input_view" style=""
139
+ type="number"
140
+ readonly
141
+ v-model="contract.f_contract_money"
142
+ :value="contract.f_contract_money"/>
143
+ </div>
144
+ </div>
145
+ <div class="col-sm-4 form-group item" v-if="type !== 'add'">
146
+ <label class="control-label-justify control-label col-sm-6">入库次数</label>
147
+ <div class="col-sm-6">
148
+ <input class="form-control input_view" style=""
149
+ type="number"
150
+ readonly
151
+ v-model="contract.f_warehousing_quantity"
152
+ :value="contract.f_warehousing_quantity"/>
153
+ </div>
154
+ </div>
155
+ <div class="col-sm-12 form-group item">
156
+ <label class="control-label-justify control-label col-sm-3">备注</label>
157
+ <div class="col-sm-10">
158
+ <textarea
159
+ class="form-control input_view"
160
+ style="width: 100%;height: 100%"
161
+ rows="2"
162
+ :readonly="type !== 'add'"
163
+ v-model="contract.f_remarks"
164
+ :value="contract.f_remarks"
165
+ ></textarea>
166
+ </div>
167
+ </div>
168
+
169
+ <div class="col-sm-12">
170
+ <data-grid v-if="contract.f_contract_category === '物料'" :model="model" partial='list' v-ref:grid style="overflow: auto" class="list_area table_sy">
171
+ <template partial='head'>
172
+ <tr>
173
+ <th style="white-space: nowrap;">序号</th>
174
+ <th style="white-space: nowrap;">材料名称</th>
175
+ <th style="white-space: nowrap;">材料型号</th>
176
+ <th style="white-space: nowrap;">材料规格</th>
177
+ <th style="white-space: nowrap;">单位</th>
178
+ <th style="white-space: nowrap;">含税单价</th>
179
+ <th style="white-space: nowrap;">不含税单价</th>
180
+ <th style="white-space: nowrap;" v-if="type !== 'add'">累计数量</th>
181
+ <th style="white-space: nowrap;" v-if="$parent.$parent.type !== 'view'">
182
+ <button @click="$parent.$parent.showModal = !$parent.$parent.showModal" type="button" class="btn btn-info">
183
+ <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
184
+ </button>
185
+ <a href="/download/材料批量导入模板.xlsx" type="button" class="btn btn-info">模板下载</a>
186
+ <button @click="$parent.$parent.showFile = !$parent.$parent.showFile" type="button" class="btn btn-info">批量导入</button>
187
+ </th>
188
+ <th v-if="$parent.$parent.type === 'view'">
189
+ <export-excel :data="$parent.$parent.getCondition"
190
+ :field="$parent.$parent.getfield"
191
+ sqlurl="rs/logic/exportfile"
192
+ sql-name="singleTable"
193
+ template-name='合同材料详情'
194
+ :choose-col="true"></export-excel>
195
+ </th>
196
+ </tr>
197
+ </template>
198
+ <template partial='body'>
199
+ <tr>
200
+ <td style="text-align: center;">{{$index+1}}</td>
201
+ <td style="text-align: center;">{{row.f_material_name}}</td>
202
+ <td style="text-align: center;">{{row.f_material_model}}</td>
203
+ <td style="text-align: center;">{{row.f_material_norm}}</td>
204
+ <td style="text-align: center;">{{row.f_unit}}</td>
205
+ <td style="text-align: center;">{{row.f_price}}</td>
206
+ <td style="text-align: center;">{{row.f_noprice}}</td>
207
+ <td style="text-align: center;" v-if="type !== 'add'">{{row.f_total}}</td>
208
+ <td style="text-align: center;" v-if="$parent.$parent.type !== 'view'">
209
+ <button type="button" name="button" class="btn btn-link" @click="$parent.$parent.openUpdate($index,row)">修改</button>
210
+ <button type="button" name="button" class="btn btn-link" @click="$parent.$parent.delete($index)">删除</button>
211
+ </td>
212
+ </tr>
213
+ </template>
214
+ </data-grid>
215
+
216
+ <data-grid v-if="contract.f_contract_category === '设备'" :model="model" partial='list' v-ref:grid style="overflow: auto" class="list_area table_sy">
217
+ <template partial='head'>
218
+ <tr>
219
+ <th style="white-space: nowrap;">序号</th>
220
+ <th style="white-space: nowrap;">设备名称</th>
221
+ <th style="white-space: nowrap;">设备型号</th>
222
+ <th style="white-space: nowrap;">设备规格</th>
223
+ <th style="white-space: nowrap;">设备价格</th>
224
+ <th style="white-space: nowrap;" v-if="type !== 'add'">累计数量</th>
225
+ <th style="white-space: nowrap;" v-if="$parent.$parent.type !== 'view'">
226
+ <button @click="$parent.$parent.showModal = !$parent.$parent.showModal" type="button" class="btn btn-info">
227
+ <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
228
+ </button>
229
+ <a href="/download/设备批量导入模板.xlsx" type="button" class="btn btn-info">模板下载</a>
230
+ <button @click="$parent.$parent.showFile = !$parent.$parent.showFile" type="button" class="btn btn-info">批量导入</button>
231
+ </th>
232
+ </tr>
233
+ </template>
234
+ <template partial='body'>
235
+ <tr>
236
+ <td style="text-align: center;">{{$index+1}}</td>
237
+ <td style="text-align: center;">{{row.f_facility_name}}</td>
238
+ <td style="text-align: center;">{{row.f_facility_model}}</td>
239
+ <td style="text-align: center;">{{row.f_facility_norm}}</td>
240
+ <td style="text-align: center;">{{row.f_facility_money}}</td>
241
+ <td style="text-align: center;" v-if="type !== 'add'">{{row.f_total}}</td>
242
+ <td style="text-align: center;" v-if="$parent.$parent.type !== 'view'">
243
+ <button type="button" v-if="!row.id" name="button" class="btn btn-link" @click="$parent.$parent.openUpdate($index,row)">修改</button>
244
+ <button type="button" v-if="!row.id" name="button" class="btn btn-link" @click="$parent.$parent.delete($index)">删除</button>
245
+ </td>
246
+ </tr>
247
+ </template>
248
+ </data-grid>
249
+ </div>
250
+
251
+ <div class="col-sm-12 form-group" style="text-align: center">
252
+ <button class="btn btn-primary" v-if="type === 'add'" @click.prevent="addContract()" :disabled='!($v.valid && model.data.length > 0)'>保存</button>
253
+ <button class="btn btn-primary" v-if="type === 'renew'" @click.prevent="renewContract()" :disabled='!($v.valid && model.data.length > 0)'>续签</button>
254
+ </div>
255
+ </div>
256
+ </form>
257
+ </validator>
258
+
259
+ <validator name="mv">
260
+ <modal v-if="showModal" :show.sync="showModal" backdrop="false" large>
261
+ <header slot="modal-header" class="modal-header">
262
+ <button type="button" class="close" @click="closeModal()"><span>&times;</span></button>
263
+ <span class="modal-title"><font size="3">添加材料</font></span>
264
+ </header>
265
+ <article slot="modal-body" class="form-horizontal modal-body clearfix" v-if="contract.f_contract_category === '物料'">
266
+ <div class="col-sm-12 form-group" :class="[$mv.f_material_name.required ? 'has-error' : '']">
267
+ <label class="control-label col-sm-2">材料名称</label>
268
+ <div class="col-sm-9">
269
+ <input class="form-control" type="text" v-validate:f_material_name = "['required']" v-model="material.f_material_name" :value="material.f_material_name"/>
270
+ </div>
271
+ </div>
272
+ <div class="col-sm-12 form-group" :class="[$mv.f_material_model.required ? 'has-error' : '']">
273
+ <label class="control-label col-sm-2">材料型号</label>
274
+ <div class="col-sm-9">
275
+ <input class="form-control" type="text" v-validate:f_material_model = "['required']" v-model="material.f_material_model" :value="material.f_material_model"/>
276
+ </div>
277
+ </div>
278
+ <div class="col-sm-12 form-group" :class="[$mv.f_material_norm.required ? 'has-error' : '']">
279
+ <label class="control-label col-sm-2">材料规格</label>
280
+ <div class="col-sm-9">
281
+ <input class="form-control" type="text" v-validate:f_material_norm = "['required']" v-model="material.f_material_norm" :value="material.f_material_norm"/>
282
+ </div>
283
+ </div>
284
+ <div class="col-sm-12 form-group" :class="[$mv.f_unit.required ? 'has-error' : '']">
285
+ <label class="control-label col-sm-2">单&emsp;&emsp;位</label>
286
+ <div class="col-sm-9">
287
+ <input class="form-control" type="text" v-validate:f_unit = "['required']" v-model="material.f_unit" :value="material.f_unit"/>
288
+ </div>
289
+ </div>
290
+ <div class="col-sm-12 form-group" :class="[$mv.f_price.required ? 'has-error' : '']">
291
+ <label class="control-label col-sm-2">含税单价</label>
292
+ <div class="col-sm-9">
293
+ <input class="form-control" type="number" v-validate:f_price = "['required']" v-model="material.f_price" :value="material.f_price"/>
294
+ </div>
295
+ </div>
296
+ <div class="col-sm-12 form-group" :class="[$mv.f_noprice.required ? 'has-error' : '']">
297
+ <label class="control-label col-sm-2">不含税单价</label>
298
+ <div class="col-sm-9">
299
+ <input class="form-control" type="number" v-validate:f_noprice = "['required']" v-model="material.f_noprice" :value="material.f_noprice"/>
300
+ </div>
301
+ </div>
302
+ </article>
303
+ <article slot="modal-body" class="form-horizontal modal-body clearfix" v-if="contract.f_contract_category === '设备'">
304
+ <div class="col-sm-12 form-group" :class="[$mv.f_facility_name.required ? 'has-error' : '']">
305
+ <label class="control-label col-sm-2">设备名称</label>
306
+ <div class="col-sm-9">
307
+ <input class="form-control" type="text" v-validate:f_facility_name = "['required']" v-model="facility.f_facility_name" :value="facility.f_facility_name"/>
308
+ </div>
309
+ </div>
310
+ <div class="col-sm-12 form-group" :class="[$mv.f_facility_model.required ? 'has-error' : '']">
311
+ <label class="control-label col-sm-2">设备型号</label>
312
+ <div class="col-sm-9">
313
+ <input class="form-control" type="text" v-validate:f_facility_model = "['required']" v-model="facility.f_facility_model" :value="facility.f_facility_model"/>
314
+ </div>
315
+ </div>
316
+ <div class="col-sm-12 form-group" :class="[$mv.f_facility_norm.required ? 'has-error' : '']">
317
+ <label class="control-label col-sm-2">设备规格</label>
318
+ <div class="col-sm-9">
319
+ <input class="form-control" type="text" v-validate:f_facility_norm = "['required']" v-model="facility.f_facility_norm" :value="facility.f_facility_norm"/>
320
+ </div>
321
+ </div>
322
+ <div class="col-sm-12 form-group" :class="[$mv.f_facility_money.required ? 'has-error' : '']">
323
+ <label class="control-label col-sm-2">设备金额</label>
324
+ <div class="col-sm-9">
325
+ <input class="form-control" type="number" v-validate:f_facility_money = "['required']" v-model="facility.f_facility_money" :value="facility.f_facility_money"/>
326
+ </div>
327
+ </div>
328
+ </article>
329
+ <footer slot="modal-footer" class="modal-footer">
330
+ <button class="btn btn-primary" type="button" @click.prevent="saveOrUpdate()" :disabled='!$mv.valid'>确认</button>
331
+ </footer>
332
+ </modal>
333
+ </validator>
334
+
335
+ <modal :show.sync="showFile" v-ref:modal backdrop="true" title="选择文件">
336
+ <header slot="modal-header" class="modal-header">
337
+ <button type="button" class="close" @click="closeFile"><span>&times;</span></button>
338
+ <h4 class="modal-title">选择文件</h4>
339
+ </header>
340
+ <article slot="modal-body" class="modal-body">
341
+ <div class="form-group">
342
+ <file-upload class="my-file-uploader" name="useraddressUploadFile" action="rs/file/uploadFile" tagname="确定" multiple v-ref:file></file-upload>
343
+ </div>
344
+ </article>
345
+ <footer slot="modal-footer" class="modal-footer"></footer>
346
+ </modal>
347
+ </div>
348
+ </template>
349
+
350
+ <script>
351
+ import {PagedList} from 'vue-client'
352
+ import {getNowDate,isEmpty} from '../../../../Util'
353
+ // Date格式化
354
+ Date.prototype.Format = function (fmt) {
355
+ var o = {
356
+ 'M+': this.getMonth() + 1, // 月份
357
+ 'd+': this.getDate(), // 日
358
+ 'H+': this.getHours(), // 小时
359
+ 'm+': this.getMinutes(), // 分
360
+ 's+': this.getSeconds(), // 秒
361
+ 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
362
+ 'S': this.getMilliseconds() // 毫秒
363
+ }
364
+ if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
365
+ for (var k in o) {
366
+ if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
367
+ }
368
+ return fmt
369
+ }
370
+ export default {
371
+ props: ['contract', 'type'],
372
+ title: '合同信息',
373
+ data () {
374
+ return {
375
+ model: {
376
+ data: []
377
+ },
378
+ supplier: [{label: '全部', value: ''}, ...this.$appdata.getParam('供方单位')],
379
+ contractSource: [{label: '全部', value: ''}, ...this.$appdata.getParam('合同来源')],
380
+ contractCategory:[{label: '全部', value: ''}, ...this.$appdata.getParam('合同类别')],
381
+ contractNature:[{label: '全部', value: ''}, ...this.$appdata.getParam('合同性质')],
382
+ f_contact_person:[{label:'全部', value:''}, ...this.$appdata.getParam('联系人')],
383
+ tel:[{label:'全部',value:''}, ...this.$appdata.getParam('电话')],
384
+ showModal: false,
385
+ material: {},
386
+ getfield: {
387
+ 'f_material_name': '材料名称',
388
+ 'f_material_model': '材料型号',
389
+ 'f_material_norm': '材料规格',
390
+ 'f_unit': '单位',
391
+ 'f_price': '单价'
392
+ },
393
+ facility: {},
394
+ index: null,
395
+ showFile: false
396
+ }
397
+ },
398
+ ready () {
399
+ if (this.type !== 'add') {
400
+ this.getData()
401
+ }
402
+
403
+ },
404
+ methods: {
405
+ closeFile () {
406
+ this.showFile = false
407
+ // 将选的文件清空
408
+ this.$refs.file.$el.querySelector('input').value = ''
409
+ },
410
+ async getData () {
411
+ let data = {
412
+ tablename: `${this.contract.f_contract_category === '物料' ? 't_contract_material' : 't_contract_facility'}`,
413
+ condition: `f_contract_id = '${this.contract.id}'`
414
+ }
415
+
416
+ let res = await this.$resetpost(
417
+ `rs/sql/singleTable`,
418
+ {data: data},
419
+ {resolveMsg: null, rejectMsg: `${this.contract.f_contract_category}查询失败!!!`}
420
+ )
421
+
422
+ this.model.data = res.data
423
+ },
424
+ //续签合同
425
+ renewContract () {
426
+ let data = {
427
+ contract: this.contract,
428
+ data: this.model.data
429
+ }
430
+ this.$dispatch('renewContract', data)
431
+ },
432
+ // 打开修改
433
+ openUpdate (index, row) {
434
+ this.index = index
435
+ this.material = JSON.parse(JSON.stringify(row))
436
+ this.facility = JSON.parse(JSON.stringify(row))
437
+
438
+ this.showModal = true
439
+ },
440
+ // 删除
441
+ async delete (index) {
442
+ this.index = index
443
+ await this.$showMessage('您确定要删除这条记录吗?').then((res) => {
444
+ if (res === 'confirm') {
445
+ this.model.data.splice(this.index, 1)
446
+ }
447
+ })
448
+ this.closeModal()
449
+ },
450
+ // 保存或修改
451
+ saveOrUpdate (i) {
452
+ if (this.contract.f_contract_category === '物料') {
453
+ let flag = this.model.data.some(item => {
454
+ if (
455
+ item.f_material_name === this.material.f_material_name &&
456
+ item.f_material_norm === this.material.f_material_norm &&
457
+ item.f_material_model === this.material.f_material_model &&
458
+ item.f_price === this.material.f_price &&
459
+ item.f_unit === this.material.f_unit
460
+ ) {
461
+ return true
462
+ }
463
+ return false
464
+ })
465
+ if (flag) {
466
+ if (isEmpty(i)) {
467
+ this.$showAlert('该物料已经存在!!!', 'warning', 3000)
468
+ } else {
469
+ throw `第${i}行物料已经存在!!!`
470
+ }
471
+
472
+ } else {
473
+ if (isEmpty(this.index)) {
474
+ this.model.data.push(this.material)
475
+ } else {
476
+ this.model.data.splice(this.index, 1, this.material)
477
+ }
478
+ }
479
+ }
480
+ if (this.contract.f_contract_category === '设备') {
481
+ let flag = this.model.data.some(item => {
482
+ if (
483
+ item.f_facility_name === this.facility.f_facility_name &&
484
+ item.f_facility_model === this.facility.f_facility_model &&
485
+ item.f_facility_norm === this.facility.f_facility_norm
486
+ ) {
487
+ return true
488
+ }
489
+ return false
490
+ })
491
+ if (flag) {
492
+ if (isEmpty(i)) {
493
+ this.$showAlert('该设备已经存在!!!', 'warning', 3000)
494
+ } else {
495
+ throw `第${i}行设备已经存在!!!`
496
+ }
497
+ } else {
498
+ if (isEmpty(this.index)) {
499
+ this.model.data.push(this.facility)
500
+ } else {
501
+ this.model.data.splice(this.index, 1, this.facility)
502
+ }
503
+ }
504
+ }
505
+ this.closeModal()
506
+ },
507
+ // 关闭模态框
508
+ closeModal () {
509
+ this.showModal = false
510
+ this.material = {}
511
+ this.facility = {}
512
+ this.index = null
513
+ },
514
+ // 合同类别
515
+ changeContractCategory () {
516
+ this.model.data = []
517
+ },
518
+ // 添加合同
519
+ addContract () {
520
+ let data = {
521
+ contract: this.contract,
522
+ data: this.model.data
523
+ }
524
+ this.$dispatch('addContract', data)
525
+ },
526
+ // 到期时间检查
527
+ changeExpirationDate () {
528
+ if (!isEmpty(this.contract.f_contract_expiration_date)) {
529
+ if (isEmpty(this.contract.f_contract_time)) {
530
+ this.contract.f_contract_expiration_date = null
531
+ this.$showAlert('先输入合同签订时间!!!', 'warning', 3000)
532
+ }
533
+ if (new Date(this.contract.f_contract_expiration_date) < new Date(this.contract.f_contract_time)) {
534
+ this.contract.f_contract_expiration_date = null
535
+ this.$showAlert('到期时间需要大于签订时间!!!', 'warning', 3000)
536
+ }
537
+ }
538
+ },
539
+ // 查询合同编号
540
+ async getContractByNumber () {
541
+ let data = {
542
+ tablename: 't_contract',
543
+ condition: `f_contract_number = '${this.contract.f_contract_number}' and f_contract_type = '采购合同'`
544
+ }
545
+
546
+ let res = await this.$resetpost(
547
+ `rs/sql/singleTable`,
548
+ {data: data},
549
+ {resolveMsg: null, rejectMsg: '合同编号查询失败!!!'}
550
+ )
551
+
552
+ if (res.data.length > 0) {
553
+ this.contract.f_contract_number = null
554
+ this.$showAlert('合同编号已存在!!!', 'warning', 3000)
555
+ }
556
+ },
557
+ },
558
+ events: {
559
+ async 'onFileUpload'(file, result) {
560
+ let data = {
561
+ type: this.contract.f_contract_category,
562
+ filepath: result.f_downloadpath
563
+ }
564
+ let res = await this.$resetpost(`rs/logic/importPurchaseContractContent`, {data:data}, {resolveMsg: null, rejectMsg: '导入失败', silent: true}, 0)
565
+
566
+ console.log('----------解析内容--------------')
567
+ console.log(res.data)
568
+
569
+ let i = 1
570
+ for (const item of res.data) {
571
+ if (this.contract.f_contract_category === '物料') {
572
+ if (!item.material.f_material_name) {
573
+ this.$showAlert(`第${i}行数据材料名称不存在!!!`, 'warning', 3000)
574
+ this.closeFile()
575
+ return
576
+ }
577
+ if (!item.material.f_material_model) {
578
+ this.$showAlert(`第${i}行数据材料型号不存在!!!`, 'warning', 3000)
579
+ this.closeFile()
580
+ return
581
+ }
582
+ if (!item.material.f_material_norm) {
583
+ this.$showAlert(`第${i}行数据材料规格不存在!!!`, 'warning', 3000)
584
+ this.closeFile()
585
+ return
586
+ }
587
+ if (!item.material.f_unit) {
588
+ this.$showAlert(`第${i}行数据单位不存在!!!`, 'warning', 3000)
589
+ this.closeFile()
590
+ return
591
+ }
592
+ if (!item.material.f_price) {
593
+ this.$showAlert(`第${i}行数据单价不存在!!!`, 'warning', 3000)
594
+ this.closeFile()
595
+ return
596
+ }
597
+ this.material = item.material
598
+ }
599
+ if (this.contract.f_contract_category === '设备') {
600
+ if (!item.facility.f_facility_name) {
601
+ this.$showAlert(`第${i}行数据设备名称不存在!!!`, 'warning', 3000)
602
+ this.closeFile()
603
+ return
604
+ }
605
+ if (!item.facility.f_facility_model) {
606
+ this.$showAlert(`第${i}行数据设备型号不存在!!!`, 'warning', 3000)
607
+ this.closeFile()
608
+ return
609
+ }
610
+ if (!item.facility.f_facility_norm) {
611
+ this.$showAlert(`第${i}行数据设备规格不存在!!!`, 'warning', 3000)
612
+ this.closeFile()
613
+ return
614
+ }
615
+ if (!item.facility.f_facility_money) {
616
+ this.$showAlert(`第${i}行数据设备价格不存在!!!`, 'warning', 3000)
617
+ this.closeFile()
618
+ return
619
+ }
620
+ this.facility = item.facility
621
+ }
622
+
623
+ try {
624
+ this.saveOrUpdate(i)
625
+ } catch (e) {
626
+ this.$showAlert(e, 'danger', 3000)
627
+ this.closeFile()
628
+ return
629
+ }
630
+
631
+
632
+ i++
633
+ }
634
+ this.$showAlert(`成功导入${i}条数据`, 'success', 3000)
635
+ this.closeFile()
636
+ }
637
+ },
638
+ computed: {
639
+ getCondition() {
640
+ return {
641
+ tablename: `${this.contract.f_contract_category === '物料' ? 't_contract_material' : 't_contract_facility'}`,
642
+ condition: `f_contract_id = '${this.contract.id}'`
643
+ }
644
+ }
645
+ }
646
+ }
647
+ </script>
648
+
649
+ <style scoped>
650
+ .item{
651
+ height: 40px;
652
+ margin-bottom: 20px;
653
+ }
654
+
655
+ th{
656
+ font-size: 15px !important;
657
+ text-align: center !important;
658
+ background-color: #dfedfb!important;
659
+ color: #666666 !important;
660
+ font-family: PINGFANG-BOLD !important;
661
+ font-weight: normal!important;
662
+ }
663
+ /*清除model中的浮动*/
664
+ .clearfix:after,.clearfix:before{
665
+ display: table;
666
+ }
667
+ .clearfix:after{
668
+ clear: both;
669
+ }
670
+
671
+ .input_view{
672
+ padding: 8px;
673
+ background-color: #ffffff;
674
+ border-radius: 2px;
675
+ border: solid 1px #c7c7c7!important;
676
+ color: #333333!important;
677
+ font-size: 15px!important;
678
+ }
679
+
680
+ .input_view[readonly]{
681
+ border: 1px solid #DDD!important;
682
+ /*background-color: #F5F5F5;*/
683
+ color:#ACA899!important;
684
+ }
685
+ .input_view:disabled{
686
+ border: 1px solid #DDD!important;
687
+ /*background-color: #F5F5F5;*/
688
+ color:#ACA899!important;
689
+ }
690
+
691
+ .control-label-justify {
692
+ display: inline-block;
693
+ vertical-align: top;
694
+ width: 110px;
695
+ text-align: justify;
696
+ font-family: PingFang-SC-Bold;
697
+ }
698
+
699
+ .control-label-justify::after {
700
+ content: "";
701
+ display: inline-block;
702
+ width: 70px;
703
+ overflow: hidden;
704
+ height: 0;
705
+ }
706
+
707
+ input::-webkit-outer-spin-button,
708
+ input::-webkit-inner-spin-button {
709
+ -webkit-appearance: none;
710
+ }
711
+
712
+ input[type="number"] {
713
+ -moz-appearance: textfield;
714
+ }
715
+ </style>