apply-clients 3.5.4-7 → 3.5.4-72

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 (105) hide show
  1. package/build/dev-server.js +7 -11
  2. package/package.json +2 -2
  3. package/src/App.vue +25 -25
  4. package/src/apply.js +2 -3
  5. package/src/applyAndroid.js +2 -0
  6. package/src/assets//344/270/213/350/275/275.png +0 -0
  7. package/src/components/android/AppCheckTakePic.vue +168 -0
  8. package/src/components/android/Process/AppServiceControl.vue +4 -0
  9. package/src/components/android/Process/Processes/AppAddMaterialScience.vue +493 -493
  10. package/src/components/android/Process/Processes/AppChargeManagementNew.vue +637 -0
  11. package/src/components/android/Process/Processes/AppInstallationDetails.vue +480 -480
  12. package/src/components/image/dxf.png +0 -0
  13. package/src/components/product/Function/Service/FunctionServiceControl.vue +1 -1
  14. package/src/components/product/Material/MaterialDetailed.vue +1 -1
  15. package/src/components/product/MaterialsManage/MaterialsBase.vue +5 -1
  16. package/src/components/product/MaterialsManage/MaterialsManage.vue +2 -2
  17. package/src/components/product/PcZhihuanManagement.vue +160 -0
  18. package/src/components/product/Process/ExplorationSelect.vue +4 -1
  19. package/src/components/product/Process/ExplorationUser.vue +1 -0
  20. package/src/components/product/Process/Processes/addMaterialScience.vue +471 -471
  21. package/src/components/product/Process/Processes/chargeManagement.vue +1 -1
  22. package/src/components/product/ServiceView.vue +22 -1
  23. package/src/components/product/Supervisory/SupervisoryControl.vue +141 -140
  24. package/src/components/product/Supervisory/SupervisoryList.vue +452 -452
  25. package/src/filiale/baiyin/android/AppServiceControl.vue +1762 -0
  26. package/src/filiale/baiyin/android/ByAddMaterialScience.vue +823 -0
  27. package/src/filiale/baiyin/android/ByDeviceManagement.vue +916 -0
  28. package/src/filiale/baiyin/android.js +8 -0
  29. package/src/filiale/fugou/android/AppAddMaterialScience.vue +442 -0
  30. package/src/filiale/fugou/android/AppChargeManagement.vue +126 -12
  31. package/src/filiale/fugou/android/AppDevicesManagement.vue +519 -0
  32. package/src/filiale/fugou/android/AppInstallationDetails.vue +541 -0
  33. package/src/filiale/fugou/android/AppServiceControl.vue +21 -4
  34. package/src/filiale/fugou/android/AppZhihuanManagement.vue +191 -0
  35. package/src/filiale/fugou/android.js +6 -1
  36. package/src/filiale/fugou/pc/ExplorationSelect.vue +515 -0
  37. package/src/filiale/fugou/pc/InstallationDetails.vue +44 -32
  38. package/src/filiale/fugou/pc/ServiceControl.vue +124 -379
  39. package/src/filiale/fugou/pc/addMaterialScience.vue +482 -0
  40. package/src/filiale/fugou/pc/devicesManagement.vue +483 -0
  41. package/src/filiale/fugou/pc.js +4 -1
  42. package/src/filiale/gongyi/android/AppAddMaterialScience.vue +20 -8
  43. package/src/filiale/gongyi/android/AppDisclosurerecord.vue +214 -0
  44. package/src/filiale/gongyi/android/AppInstallationDetails.vue +15 -10
  45. package/src/filiale/gongyi/android/AppLegacyIssues.vue +309 -0
  46. package/src/filiale/gongyi/android/AppSign.vue +16 -3
  47. package/src/filiale/gongyi/android/AppSupplementalAgreement.vue +298 -0
  48. package/src/filiale/gongyi/android.js +3 -0
  49. package/src/filiale/gongyi/pc/ApplyUpload.vue +31 -39
  50. package/src/filiale/gongyi/pc/PcAddLogs.vue +12 -4
  51. package/src/filiale/gongyi/pc/PcDisclosurerecord.vue +218 -0
  52. package/src/filiale/gongyi/pc/PcLegacyIssues.vue +309 -0
  53. package/src/filiale/gongyi/pc/SupervisoryServiceControl.vue +1 -1
  54. package/src/filiale/gongyi/pc/SupervisoryServiceView.vue +1005 -0
  55. package/src/filiale/gongyi/pc/addMaterialScience.vue +43 -7
  56. package/src/filiale/gongyi/pc/chargeManagement.vue +765 -0
  57. package/src/filiale/gongyi/pc/supplementalAgreement.vue +277 -0
  58. package/src/filiale/gongyi/pc.js +6 -1
  59. package/src/filiale/hongda/pc/SupervisoryList.vue +13 -0
  60. package/src/filiale/jinhuang/pc/ServiceControl.vue +1925 -0
  61. package/src/filiale/jinhuang/pc/chargeManagementNew.vue +589 -0
  62. package/src/filiale/jinhuang/pc.js +7 -0
  63. package/src/filiale/qianneng/android/AppChargeManagement.vue +686 -0
  64. package/src/filiale/qianneng/android/AppExplorationUser.vue +38 -0
  65. package/src/filiale/qianneng/android/AppInstallationDetails.vue +20 -11
  66. package/src/filiale/qianneng/android.js +2 -1
  67. package/src/filiale/qianneng/pc/ApplyUpload.vue +5 -4
  68. package/src/filiale/qianneng/pc/Applybatchdispatch.vue +11 -6
  69. package/src/filiale/qianneng/pc/Applydetail.vue +0 -5
  70. package/src/filiale/qianneng/pc/InstallFunction.vue +2 -2
  71. package/src/filiale/qianneng/pc/InstallationDetails.vue +32 -4
  72. package/src/filiale/qianneng/pc/ServiceControl.vue +1 -0
  73. package/src/filiale/qianneng/pc/printactivatecard.vue +6 -6
  74. package/src/filiale/ruihua/pc/InstallationDetails.vue +610 -610
  75. package/src/filiale/ruihua/pc/ServiceControl.vue +20 -0
  76. package/src/filiale/ruihua/pc/printVentilation.vue +21 -6
  77. package/src/filiale/ruihua/pc.js +12 -12
  78. package/src/filiale/shexian/android/AppServiceControl.vue +12 -2
  79. package/src/filiale/shexian/android/AppTakePic.vue +15 -55
  80. package/src/filiale/siyangRH/android/AppAddMaterialScience.vue +0 -2
  81. package/src/filiale/siyangRH/pc/chargeManagement.vue +810 -0
  82. package/src/filiale/siyangRH/pc.js +1 -0
  83. package/src/filiale/yangchunboneng/android/AppChargeManagement.vue +16 -1
  84. package/src/filiale/yangchunboneng/android/AppDevicesManagement.vue +32 -2
  85. package/src/filiale/yangchunboneng/android/AppExplorationUser.vue +518 -506
  86. package/src/filiale/yangchunboneng/android/AppInstallationMaterial.vue +1083 -1092
  87. package/src/filiale/yangchunboneng/android/AppServiceControl.vue +34 -1
  88. package/src/filiale/yangchunboneng/android/AppSuperServiceControl.vue +1524 -1524
  89. package/src/filiale/yangchunboneng/android/AppUpload.vue +205 -136
  90. package/src/filiale/yangchunboneng/android/MaterIialOne.vue +156 -144
  91. package/src/filiale/yangchunboneng/android.js +20 -20
  92. package/src/filiale/yangchunboneng/pc/ApplyUpload.vue +392 -375
  93. package/src/filiale/yangchunboneng/pc/ExplorationSelect.vue +59 -19
  94. package/src/filiale/yangchunboneng/pc/ExplorationUser.vue +191 -0
  95. package/src/filiale/yangchunboneng/pc/InstallInfoSelect.vue +365 -365
  96. package/src/filiale/yangchunboneng/pc/ServiceControl.vue +206 -2
  97. package/src/filiale/yangchunboneng/pc/SupervisoryControlNew.vue +142 -0
  98. package/src/filiale/yangchunboneng/pc/SupervisoryList.vue +590 -535
  99. package/src/filiale/yangchunboneng/pc/SupervisoryListNew.vue +628 -0
  100. package/src/filiale/yangchunboneng/pc/SupervisoryServiceControl.vue +902 -0
  101. package/src/filiale/yangchunboneng/pc/SupervisoryServiceControlNew.vue +901 -0
  102. package/src/filiale/yangchunboneng/pc/SupervisoryServiceView.vue +1117 -0
  103. package/src/filiale/yangchunboneng/pc/chargeManagement.vue +111 -13
  104. package/src/filiale/yangchunboneng/pc.js +24 -18
  105. package/src/main.js +1 -1
@@ -1,375 +1,392 @@
1
- <template>
2
- <div class="col-sm-12" style="background-color: #FFFFFF">
3
- <div class="col-sm-12" style="padding:50px 100px;height: 25%">
4
- <div class="form-group col-sm-5" v-if="issearch" style="width: 250px">
5
- <v-select
6
- class="select select_list"
7
- :value.sync="useType"
8
- width="100%"
9
- v-model="useType"
10
- :options='typeOfUse'
11
- :valueSingle="true"></v-select>
12
- </div>
13
- <div class="form-group col-sm-5" v-if="issearch" style="width: 250px">
14
- <v-select
15
- class="select select_list"
16
- :value.sync="defname"
17
- width="100%"
18
- v-model="defname"
19
- :options='defnames'
20
- :valueSingle="true"></v-select>
21
- </div>
22
- <div class="form-group col-sm-2" style="text-align: center" v-if="issearch">
23
- <button type="button" class="btn btn-primary item_btn" @click="load">搜索</button>
24
- </div>
25
- <div class="form-group col-sm-2" style="text-align: center" v-if="isupload">
26
- <button type="button" class="btn btn-primary item_btn" @click="showUpload = !showUpload">本地上传</button>
27
- </div>
28
- <div class="form-group col-sm-2" style="text-align: center" v-if="takeimg">
29
- <button type="button" class="btn btn-primary item_btn" @click="upload()">拍照</button>
30
- </div>
31
- <div class="form-group col-sm-2" style="text-align: center" v-if="isupload">
32
- <button type="button" class="btn btn-primary item_btn" @click="deletefiles()">删除</button>
33
- </div>
34
- </div>
35
- <hr style="width: 90%;margin: 0px auto;border: #999999 1px solid;"/>
36
- <div class="col-sm-12" style="overflow: scroll;height: 75%">
37
- <div :class="bootstraped ? bootstraped + ' showData' : 'col-sm-12 showData'" style="height: auto" v-for="item in fileInfoData">
38
- <div style="width: 100%;height: 15%">上传时间:{{item.uploaddate}}</div>
39
- <div class="col-sm-12">
40
- <div class="col-sm-4" v-for="row in item.data">
41
- <input v-if="isupload" type="checkbox" @click="$event.cancelBubble=true" :checked="isChecked(row)" @change="setCheckes(row)"></input>
42
- <div class="left col-sm-4">
43
- <a href="#" class="thumbnail" style="width: 70%;height: 70%">
44
- <img
45
- v-if="row.f_filetype === 'jpg'||row.f_filetype === 'png'||row.f_filetype === 'gif'||row.f_filetype === 'bmp'"
46
- :src="row.f_downloadURL" alt="..."/>
47
- <img v-if="row.f_filetype === 'pdf'" src="../../../components/image/pdf.jpg" alt=""/>
48
- <img v-if="row.f_filetype === 'xls'||row.f_filetype === 'xlsx'" src="../../../components/image/excel.jpg"
49
- alt=""/>
50
- <img v-if="row.f_filetype === 'doc'||row.f_filetype === 'docx'" src="../../../components/image/doc.jpg"
51
- alt=""/>
52
- <img v-if="row.f_filetype === 'dwg'" src="../../../components/image/dwg.jpg" alt=""/>
53
- <img v-if="row.f_filetype === 'txt'" src="../../../components/image/txt.jpg" alt=""/>
54
- </a>
55
- </div>
56
- <div class="right col-sm-4">
57
- <p :title="row.f_filename" class="clears"><strong>文件名:</strong>{{ row.f_filename }}</p>
58
- <p :title="row.f_username" class="clears"><strong>操作员:</strong><span>{{ row.f_username }}</span></p>
59
- <p :title="row.fusetype" class="clears"><strong>使用类型:</strong><span>{{ row.fusetype }}</span></p>
60
- <p :title="row.defname" class="clears"><strong>上传节点:</strong><span>{{ row.defname }}</span></p>
61
- <p :title="row.f_uploaddate" class="clears"><strong>上传时间:</strong><span>{{ row.f_uploaddate }}</span></p>
62
- <p :title="row.fremarks" class="clears"><strong>文件说明:</strong>{{ row.fremarks }}</p>
63
- <p class="clears">
64
- <a
65
- v-if="row.f_filetype === 'jpg' || row.f_filetype === 'txt' || row.f_filetype==='png' || row.f_filetype==='gif' || row.f_filetype==='bmp'"
66
- :href="row.f_downloadURL" style="background:#6aa6e2" class="btn btn-primary" target="_blank"
67
- role="button">预览</a>
68
- <a v-else @click="downloadfile(row.f_downloadURL)" style="background:#6aa6e2" class="btn btn-primary"
69
- role="button">下载</a>
70
- <a v-if="isdelete" @click="delet($index, row)" href="#" class="btn btn-default" role="button"
71
- role="button">删除</a>
72
- </p>
73
- </div>
74
- </div>
75
- </div>
76
- </div>
77
- </div>
78
- </div>
79
- <apply-high-meter
80
- v-if="showhighmeter"
81
- :show.sync="showhighmeter"
82
- :isusetype="isusetype"
83
- :isremark="isremark"
84
- @photo-finish="newPhoto"
85
- v-ref:ltgao
86
- ></apply-high-meter>
87
- <modal :show.sync="showUpload" v-ref:modal backdrop="false">
88
- <header slot="modal-header" class="modal-header">
89
- <button type="button" class="close" @click="close"><span class="glyphicon glyphicon-remove"></span></button>
90
- <h4 class="modal-title" style="text-align: center">文件上传</h4>
91
- </header>
92
- <article slot="modal-body" class="modal-body form-horizontal">
93
- <div class="form-group" style="text-align: center">
94
- <file-upload class="my-file-uploader" :name="'myFile' + blodid"
95
- action="rs/file/uploadFile" tagname="文件上传" :headers="headers" multiple v-ref:file></file-upload>
96
- </div>
97
- <div class="form-group" v-if="isusetype">
98
- <label class="col-sm-2 control-label">文件类型:</label>
99
- <div class="col-sm-10">
100
- <input-select
101
- class="select select_list"
102
- :value.sync="headers.fusetype"
103
- v-model="headers.fusetype"
104
- :options="$appdata.getParam('报建-使用类型')"
105
- :valueSingle="true"></input-select>
106
- </div>
107
- </div>
108
- <div class="form-group" v-if="isremark">
109
- <label class="col-sm-2 control-label">文件说明:</label>
110
- <div class="col-sm-10">
111
- <input class="form-control input_view" style=""
112
- v-model="headers.fremarks"
113
- :value="headers.fremarks"/>
114
- </div>
115
- </div>
116
- </article>
117
- <footer slot="modal-footer" class="modal-footer">
118
- </footer>
119
- </modal>
120
- </template>
121
-
122
- <script>
123
- import {HttpResetClass} from 'vue-client'
124
- import {isEmpty} from "../../../components/Util";
125
-
126
- export default {
127
- title: '附件',
128
- props: ['blodid', 'businessid', 'isremark', 'isusetype', 'takeimg', 'defname', 'isupload', 'isdelete', 'bootstraped', 'issearch'],
129
- data() {
130
- return {
131
- defnames: [{label: '全部', value: ''}, ...this.$appdata.getParam('报建节点')],
132
- defname: '',
133
- fileInfoData: [], // 数据库存储的文件记录对象数组
134
- headers: {
135
- 'username': this.$login.f.name,
136
- 'blodid': '',
137
- 'businessid': '',
138
- 'fremarks': '',
139
- 'defname': '',
140
- 'fusetype': ''
141
- }, // 调用rs/file/uploadFile 的参数
142
- showUpload: false, // 上传模态框控制
143
- showhighmeter: false, // 高拍仪组件控制
144
- useType: null,
145
- checkes:[]
146
- }
147
- },
148
- ready() {
149
- this.headers.blodid = this.blodid
150
- this.headers.businessid = this.businessid
151
- this.headers.defname = this.defname
152
- if (this.blodid || this.businessid) {
153
- this.load()
154
- }
155
- },
156
- methods: {
157
- delet(index, row) {
158
- this.$resetdelete('rs/entity/t_files', {id: row.id}, {resolveMsg: '删除成功', rejectMsg: '删除失败'}).then((res) => {
159
- this.$dispatch("delResid", row.id)
160
- this.load()
161
- })
162
- },
163
- async deletefiles(){
164
- if (this.checkes.length > 0){
165
- let http = new HttpResetClass()
166
- for (let i = 0;i<this.checkes.length;i++){
167
- await http.load('DELETE',`rs/entity/t_files/${this.checkes[i].id}`,{},{resolveMsg: null, rejectMsg: null})
168
- }
169
- this.load()
170
- }
171
- },
172
- isChecked(row) {
173
- return this.checkes.findIndex(item => item.id == row.id) != -1
174
- },
175
- setCheckes(row) {
176
- let index=this.checkes.findIndex(item => item.id == row.id)
177
- if(index<0){
178
- this.checkes.push(row)
179
- }else{
180
- this.checkes.splice(index,1)
181
- }
182
- console.log('this.checkes=', JSON.stringify(this.checkes))
183
- },
184
- // 下载
185
- downloadfile(filepath) {
186
- let name = this.extractFileName(filepath)
187
- var link = document.createElement('a')
188
- link.href = filepath
189
- link.download = name
190
- link.dispatchEvent(new MouseEvent('click'))
191
- },
192
- extractFileName(str) {
193
- // 使用split分割字符串
194
- var parts = str.split('\\');
195
- // 获取最后一个部分,这通常是文件名
196
- var fileName = parts[parts.length - 1];
197
- // 返回文件名
198
- return fileName;
199
- },
200
- // 关闭文件上传对话框
201
- close() {
202
- this.showUpload = false
203
- this.showhighmeter = false
204
- // 将选的文件清空
205
- this.$refs.file.$el.querySelector('input').value = ''
206
- this.headers.fusetype = ''
207
- this.headers.fremarks = ''
208
- this.load()
209
- },
210
- // 查询
211
- async load() {
212
- let condition = ''
213
- if (!isEmpty(this.businessid)) {
214
- condition = `f_businessid= '${this.headers.businessid}' `
215
- } else {
216
- condition = `f_blobid= '${this.headers.blodid}' `
217
- }
218
- if (!isEmpty(this.useType)) {
219
- condition += `and fusetype = '${this.useType}'`
220
- }
221
- if (!isEmpty(this.defname)) {
222
- condition += `and defname = '${this.defname}'`
223
- }
224
- let http = new HttpResetClass()
225
- let data = {
226
- tablename: 't_files',
227
- condition: condition + ` order by f_uploaddate desc `
228
- }
229
- let getFile = await http.load('POST', 'rs/sql/apply_singleTable', {data: data}, {
230
- warnMsg: null,
231
- resolveMsg: null
232
- })
233
- this.fileInfoData = []
234
- for (var i = 0; i < getFile.data.length; i++) {
235
- // 如果使用类型包含导入字样,则是execl文件导入的,不做显示
236
- if (getFile.data[i].fusetype && (getFile.data[i].fusetype.includes('execl导入'))) {
237
- getFile.data.splice(i, 1)
238
- i--
239
- continue
240
- }
241
- let temp = getFile.data[i].f_downloadpath
242
- let URL = temp.substring(temp.lastIndexOf(":\\") + 2)
243
- getFile.data[i].f_downloadURL = "http://" + location.host + "/" + URL
244
- let uploaddate = getFile.data[i].f_uploaddate.substring(0,10)
245
- if (this.fileInfoData.findIndex(item => item.uploaddate == uploaddate) == -1){
246
- this.fileInfoData.push({uploaddate:uploaddate,data:[]})
247
- }
248
- }
249
- for (var i = 0; i < getFile.data.length; i++) {
250
- if (getFile.data[i].f_downloadpath.includes('http:')) {
251
- let temp = getFile.data[i].f_downloadpath
252
- getFile.data[i].f_downloadURL = temp
253
- console.log('打印', i)
254
- } else {
255
- let temp = getFile.data[i].f_downloadpath
256
- let URL = temp.substring(temp.lastIndexOf(":\\") + 2)
257
- getFile.data[i].f_downloadURL = "http://" + location.host + "/" + URL
258
- }
259
-
260
- }
261
- // this.fileInfoData = getFile.data
262
- for (var i = 0; i < getFile.data.length; i++) {
263
- for (var j = 0; j < this.fileInfoData.length; j++){
264
- if (getFile.data[i].f_uploaddate.includes(this.fileInfoData[j].uploaddate)){
265
- this.fileInfoData[j].data.push(getFile.data[i])
266
- }
267
- }
268
- }
269
- },
270
- // 打开高拍仪
271
- upload() {
272
- if (this.showhighmeter) {
273
- this.$refs.ltgao.closeVideo()
274
- }
275
- this.showhighmeter = !this.showhighmeter
276
- },
277
- // 高拍仪回调
278
- newPhoto(Imgbase64, fusetype, fremarks) {
279
- this.headers.fusetype = fusetype
280
- this.headers.fremarks = fremarks
281
-
282
- let form = new FormData()
283
- let xhr = new XMLHttpRequest()
284
- let formDataBoundary = "----WebkitFormBoundary" + "GaoPaiYi";
285
- form.append('Content-Type', 'multipart/form-data;boundary=' + formDataBoundary)
286
- form.append('file', this.convertBase64ToBlob(Imgbase64), "GaoPaiYi.jpg")
287
- xhr.open("POST", "rs/file/uploadFile")
288
-
289
- if (this.headers) {
290
- for (var header in this.headers) {
291
- xhr.setRequestHeader(header, encodeURIComponent(this.headers[header]))
292
- }
293
- }
294
- xhr.send(form)
295
- setTimeout(() => {
296
- this.close()
297
- }, 5000)
298
- },
299
- convertBase64ToBlob(base64String) {
300
- // 将base64解码
301
- var bytes = atob(base64String);
302
- //var bytes = base64;
303
- var bytesCode = new ArrayBuffer(bytes.length);
304
- // 转换为类型化数组
305
- var byteArray = new Uint8Array(bytesCode);
306
-
307
- // 将base64转换为ascii码
308
- for (var i = 0; i < bytes.length; i++) {
309
- byteArray[i] = bytes.charCodeAt(i);
310
- }
311
- // 生成Blob对象(文件对象)
312
- return new Blob([bytesCode], {type: 'image/jpeg'});
313
- },
314
- },
315
- computed: {
316
- typeOfUse() {
317
- return [{label: '全部', value: ''}, ...this.$appdata.getParam('报建-使用类型')]
318
- }
319
- },
320
- events: {
321
- onFileUpload: function (file, res) {
322
- this.$dispatch("resid", res.id)
323
- this.headers.fremarks = ''
324
- this.close()
325
- }
326
- }
327
- }
328
- </script>
329
-
330
- <style scoped>
331
- .clears {
332
- margin: 0;
333
- font-size: 10px;
334
- overflow: hidden;
335
- text-overflow: ellipsis;
336
- white-space: nowrap;
337
- }
338
-
339
- .showData {
340
- padding: 15px 10px 0px 10px;
341
- box-sizing: border-box;
342
- height: 140px;
343
- font-family: "微软雅黑";
344
- }
345
-
346
- .showData .item {
347
- padding-bottom: 10px;
348
- border-bottom: solid 1px #c1c1c1;
349
- }
350
-
351
- .left {
352
- padding-right: 10px;
353
- }
354
-
355
- .left img {
356
- height: 100%;
357
- width: 100%;
358
- }
359
-
360
- .right {
361
- height: 100%;
362
- /*display: -webkit-flex;*/
363
- /*display: flex;*/
364
- /*flex-direction: column;*/
365
- /*justify-content: space-around;*/
366
- }
367
-
368
- .item_btn {
369
- width: 80%;
370
- background-color: #6aa6e2;
371
- border-radius: 4px;
372
- color: #FFFFFF;
373
- font-family: PingFang;
374
- }
375
- </style>
1
+ <template>
2
+ <div class="col-sm-12" style="background-color: #FFFFFF">
3
+ <div class="col-sm-12" style="padding:50px 100px;height: 25%">
4
+ <div class="form-group col-sm-5" v-if="issearch" style="width: 250px">
5
+ <v-select
6
+ class="select select_list"
7
+ :value.sync="useType"
8
+ width="100%"
9
+ v-model="useType"
10
+ :options='typeOfUse'
11
+ :valueSingle="true"></v-select>
12
+ </div>
13
+ <div class="form-group col-sm-5" v-if="issearch" style="width: 250px">
14
+ <v-select
15
+ class="select select_list"
16
+ :value.sync="defname"
17
+ width="100%"
18
+ v-model="defname"
19
+ :options='defnames'
20
+ :valueSingle="true"></v-select>
21
+ </div>
22
+ <div class="form-group col-sm-2" style="text-align: center" v-if="issearch">
23
+ <button type="button" class="btn btn-primary item_btn" @click="load">搜索</button>
24
+ </div>
25
+ <div class="form-group col-sm-2" style="text-align: center" v-if="isupload">
26
+ <button type="button" class="btn btn-primary item_btn" @click="showUpload = !showUpload">本地上传</button>
27
+ </div>
28
+ <div class="form-group col-sm-2" style="text-align: center" v-if="takeimg">
29
+ <button type="button" class="btn btn-primary item_btn" @click="upload()">拍照</button>
30
+ </div>
31
+ <div class="form-group col-sm-2" style="text-align: center" v-if="isupload">
32
+ <button type="button" class="btn btn-primary item_btn" @click="deletefiles()">删除</button>
33
+ </div>
34
+ </div>
35
+ <hr style="width: 90%;margin: 0px auto;border: #999999 1px solid;"/>
36
+ <div class="col-sm-12" style="overflow: scroll;height: 75%">
37
+ <div :class="bootstraped ? bootstraped + ' showData' : 'col-sm-12 showData'" style="height: auto" v-for="item in fileInfoData">
38
+ <div style="width: 100%;height: 15%">上传时间:{{item.uploaddate}}</div>
39
+ <div class="col-sm-12">
40
+ <div class="col-sm-4" v-for="row in item.data">
41
+ <input v-if="isupload" type="checkbox" @click="$event.cancelBubble=true" :checked="isChecked(row)" @change="setCheckes(row)"></input>
42
+ <div class="left col-sm-4">
43
+ <a href="#" class="thumbnail" style="width: 70%;height: 70%">
44
+ <img
45
+ v-if="row.f_filetype === 'jpg'||row.f_filetype === 'png'||row.f_filetype === 'gif'||row.f_filetype === 'bmp'"
46
+ :src="row.f_downloadURL" alt="..."/>
47
+ <img v-if="row.f_filetype === 'pdf'" src="../../../components/image/pdf.jpg" alt=""/>
48
+ <img v-if="row.f_filetype === 'xls'||row.f_filetype === 'xlsx'" src="../../../components/image/excel.jpg"
49
+ alt=""/>
50
+ <img v-if="row.f_filetype === 'doc'||row.f_filetype === 'docx'" src="../../../components/image/doc.jpg"
51
+ alt=""/>
52
+ <img v-if="row.f_filetype === 'dwg'" src="../../../components/image/dwg.jpg" alt=""/>
53
+ <img v-if="row.f_filetype === 'txt'" src="../../../components/image/txt.jpg" alt=""/>
54
+ </a>
55
+ </div>
56
+ <div class="right col-sm-4">
57
+ <p :title="row.f_filename" class="clears"><strong>文件名:</strong>{{ row.f_filename }}</p>
58
+ <p :title="row.f_username" class="clears"><strong>操作员:</strong><span>{{ row.f_username }}</span></p>
59
+ <p :title="row.fusetype" class="clears"><strong>使用类型:</strong><span>{{ row.fusetype }}</span></p>
60
+ <p :title="row.defname" class="clears"><strong>上传节点:</strong><span>{{ row.defname }}</span></p>
61
+ <p :title="row.f_uploaddate" class="clears"><strong>上传时间:</strong><span>{{ row.f_uploaddate }}</span></p>
62
+ <p :title="row.fremarks" class="clears"><strong>文件说明:</strong>{{ row.fremarks }}</p>
63
+ <p class="clears">
64
+ <a
65
+ v-if="row.f_filetype === 'jpg' || row.f_filetype === 'txt' || row.f_filetype==='png' || row.f_filetype==='gif' || row.f_filetype==='bmp'"
66
+ :href="row.f_downloadURL" style="background:#6aa6e2" class="btn btn-primary" target="_blank"
67
+ role="button">预览</a>
68
+ <a v-else @click="downloadfile(row.f_downloadURL)" style="background:#6aa6e2" class="btn btn-primary"
69
+ role="button">下载</a>
70
+ <a v-if="isdelete" @click="delet($index, row)" href="#" class="btn btn-default" role="button"
71
+ role="button">删除</a>
72
+ </p>
73
+ </div>
74
+ </div>
75
+ </div>
76
+ </div>
77
+ </div>
78
+ </div>
79
+ <apply-high-meter
80
+ v-if="showhighmeter"
81
+ :show.sync="showhighmeter"
82
+ :isusetype="isusetype"
83
+ :isremark="isremark"
84
+ @photo-finish="newPhoto"
85
+ v-ref:ltgao
86
+ ></apply-high-meter>
87
+ <modal :show.sync="showUpload" v-ref:modal backdrop="false">
88
+ <header slot="modal-header" class="modal-header">
89
+ <button type="button" class="close" @click="close"><span class="glyphicon glyphicon-remove"></span></button>
90
+ <h4 class="modal-title" style="text-align: center">文件上传</h4>
91
+ </header>
92
+ <article slot="modal-body" class="modal-body form-horizontal">
93
+ <div class="form-group" style="text-align: center">
94
+ <file-upload class="my-file-uploader" :name="'myFile' + blodid"
95
+ action="rs/file/uploadFile" tagname="文件上传" :headers="headers" multiple v-ref:file></file-upload>
96
+ </div>
97
+ <div class="form-group" v-if="isusetype">
98
+ <label class="col-sm-2 control-label">文件类型:</label>
99
+ <div class="col-sm-10">
100
+ <input-select
101
+ class="select select_list"
102
+ :value.sync="headers.fusetype"
103
+ v-model="headers.fusetype"
104
+ :options="$appdata.getParam('报建-使用类型')"
105
+ :valueSingle="true"></input-select>
106
+ </div>
107
+ </div>
108
+ <div class="form-group" v-if="isremark">
109
+ <label class="col-sm-2 control-label">文件说明:</label>
110
+ <div class="col-sm-10">
111
+ <input class="form-control input_view" style=""
112
+ v-model="headers.fremarks"
113
+ :value="headers.fremarks"/>
114
+ </div>
115
+ </div>
116
+ </article>
117
+ <footer slot="modal-footer" class="modal-footer">
118
+ </footer>
119
+ </modal>
120
+ </template>
121
+
122
+ <script>
123
+ import {HttpResetClass} from 'vue-client'
124
+ import {isEmpty} from "../../../components/Util";
125
+
126
+ export default {
127
+ title: '附件',
128
+ props: ['blodid', 'businessid', 'isremark', 'isusetype', 'takeimg', 'defname', 'isupload', 'isdelete', 'bootstraped', 'issearch','pblobid'],
129
+ data() {
130
+ return {
131
+ defnames: [{label: '全部', value: ''}, ...this.$appdata.getParam('报建节点')],
132
+ fileInfoData: [], // 数据库存储的文件记录对象数组
133
+ headers: {
134
+ 'username': this.$login.f.name,
135
+ 'blodid': '',
136
+ 'businessid': '',
137
+ 'fremarks': '',
138
+ 'defname': '',
139
+ 'fusetype': '',
140
+ 'pblobid': ''
141
+ }, // 调用rs/file/uploadFile 的参数
142
+ showUpload: false, // 上传模态框控制
143
+ showhighmeter: false, // 高拍仪组件控制
144
+ useType: null,
145
+ checkes:[]
146
+ }
147
+ },
148
+ ready() {
149
+ this.headers.blodid = this.blodid
150
+ this.headers.pblobid=this.pblobid
151
+ this.headers.businessid = this.businessid
152
+ this.headers.defname = this.defname
153
+ if (this.blodid || this.businessid) {
154
+ this.load()
155
+ }
156
+ },
157
+ methods: {
158
+ delet(index, row) {
159
+ if(this.defname[0]!==row.defname){
160
+ this.$showMessage('无法删除非当前环节的附件')
161
+ return
162
+ }
163
+ this.$resetdelete('rs/entity/t_files', {id: row.id}, {resolveMsg: '删除成功', rejectMsg: '删除失败'}).then((res) => {
164
+ this.$dispatch("delResid", row.id)
165
+ this.load()
166
+ })
167
+ },
168
+ async deletefiles(){
169
+ for (let i = 0;i<this.checkes.length;i++){
170
+ if(this.checkes[i].defname!==this.defname[0]){
171
+ this.$showMessage(`所选附件存在不是当前环节的附件,无法删`)
172
+ return
173
+ }else{
174
+ if (this.checkes.length > 0){
175
+ let http = new HttpResetClass()
176
+ for (let i = 0;i<this.checkes.length;i++){
177
+ await http.load('DELETE',`rs/entity/t_files/${this.checkes[i].id}`,{},{resolveMsg: null, rejectMsg: null})
178
+ }
179
+ this.load()
180
+ }
181
+ }
182
+ }
183
+ },
184
+ isChecked(row) {
185
+ return this.checkes.findIndex(item => item.id == row.id) != -1
186
+ },
187
+ setCheckes(row) {
188
+ let index=this.checkes.findIndex(item => item.id == row.id)
189
+ if(index<0){
190
+ this.checkes.push(row)
191
+ }else{
192
+ this.checkes.splice(index,1)
193
+ }
194
+ console.log('this.checkes=', JSON.stringify(this.checkes))
195
+ },
196
+ // 下载
197
+ downloadfile(filepath) {
198
+ let name = this.extractFileName(filepath)
199
+ var link = document.createElement('a')
200
+ link.href = filepath
201
+ link.download = name
202
+ link.dispatchEvent(new MouseEvent('click'))
203
+ },
204
+ extractFileName(str) {
205
+ // 使用split分割字符串
206
+ var parts = str.split('\\');
207
+ // 获取最后一个部分,这通常是文件名
208
+ var fileName = parts[parts.length - 1];
209
+ // 返回文件名
210
+ return fileName;
211
+ },
212
+ // 关闭文件上传对话框
213
+ close() {
214
+ this.showUpload = false
215
+ this.showhighmeter = false
216
+ // 将选的文件清空
217
+ this.$refs.file.$el.querySelector('input').value = ''
218
+ this.headers.fusetype = ''
219
+ this.headers.fremarks = ''
220
+ this.load()
221
+ },
222
+ // 查询
223
+ async load() {
224
+ let condition = ''
225
+ if (!isEmpty(this.businessid)) {
226
+ condition = `f_businessid= '${this.headers.businessid}' `
227
+ } else {
228
+
229
+ if(this.pblobid){
230
+ condition = `f_blobid= '${this.headers.blodid}' or f_blobid= '${this.headers.pblobid}'`
231
+ }else{
232
+ condition = `f_blobid= '${this.headers.blodid}' `
233
+ }
234
+ }
235
+ if (!isEmpty(this.useType)) {
236
+ condition += `and fusetype = '${this.useType}'`
237
+ }
238
+ if (!isEmpty(this.defname)) {
239
+ condition += `and defname = '${this.defname}'`
240
+ }
241
+ let http = new HttpResetClass()
242
+ let data = {
243
+ tablename: 't_files',
244
+ condition: condition + ` order by f_uploaddate desc `
245
+ }
246
+ let getFile = await http.load('POST', 'rs/sql/apply_singleTable', {data: data}, {
247
+ warnMsg: null,
248
+ resolveMsg: null
249
+ })
250
+ this.fileInfoData = []
251
+ for (var i = 0; i < getFile.data.length; i++) {
252
+ // 如果使用类型包含导入字样,则是execl文件导入的,不做显示
253
+ if (getFile.data[i].fusetype && (getFile.data[i].fusetype.includes('execl导入'))) {
254
+ getFile.data.splice(i, 1)
255
+ i--
256
+ continue
257
+ }
258
+ let temp = getFile.data[i].f_downloadpath
259
+ let URL = temp.substring(temp.lastIndexOf(":\\") + 2)
260
+ getFile.data[i].f_downloadURL = "http://" + location.host + "/" + URL
261
+ let uploaddate = getFile.data[i].f_uploaddate.substring(0,10)
262
+ if (this.fileInfoData.findIndex(item => item.uploaddate == uploaddate) == -1){
263
+ this.fileInfoData.push({uploaddate:uploaddate,data:[]})
264
+ }
265
+ }
266
+ for (var i = 0; i < getFile.data.length; i++) {
267
+ if (getFile.data[i].f_downloadpath.includes('http:')) {
268
+ let temp = getFile.data[i].f_downloadpath
269
+ getFile.data[i].f_downloadURL = temp
270
+ console.log('打印', i)
271
+ } else {
272
+ let temp = getFile.data[i].f_downloadpath
273
+ let URL = temp.substring(temp.lastIndexOf(":\\") + 2)
274
+ getFile.data[i].f_downloadURL = "http://" + location.host + "/" + URL
275
+ }
276
+
277
+ }
278
+ // this.fileInfoData = getFile.data
279
+ for (var i = 0; i < getFile.data.length; i++) {
280
+ for (var j = 0; j < this.fileInfoData.length; j++){
281
+ if (getFile.data[i].f_uploaddate.includes(this.fileInfoData[j].uploaddate)){
282
+ this.fileInfoData[j].data.push(getFile.data[i])
283
+ }
284
+ }
285
+ }
286
+ },
287
+ // 打开高拍仪
288
+ upload() {
289
+ if (this.showhighmeter) {
290
+ this.$refs.ltgao.closeVideo()
291
+ }
292
+ this.showhighmeter = !this.showhighmeter
293
+ },
294
+ // 高拍仪回调
295
+ newPhoto(Imgbase64, fusetype, fremarks) {
296
+ this.headers.fusetype = fusetype
297
+ this.headers.fremarks = fremarks
298
+
299
+ let form = new FormData()
300
+ let xhr = new XMLHttpRequest()
301
+ let formDataBoundary = "----WebkitFormBoundary" + "GaoPaiYi";
302
+ form.append('Content-Type', 'multipart/form-data;boundary=' + formDataBoundary)
303
+ form.append('file', this.convertBase64ToBlob(Imgbase64), "GaoPaiYi.jpg")
304
+ xhr.open("POST", "rs/file/uploadFile")
305
+
306
+ if (this.headers) {
307
+ for (var header in this.headers) {
308
+ xhr.setRequestHeader(header, encodeURIComponent(this.headers[header]))
309
+ }
310
+ }
311
+ xhr.send(form)
312
+ setTimeout(() => {
313
+ this.close()
314
+ }, 5000)
315
+ },
316
+ convertBase64ToBlob(base64String) {
317
+ // 将base64解码
318
+ var bytes = atob(base64String);
319
+ //var bytes = base64;
320
+ var bytesCode = new ArrayBuffer(bytes.length);
321
+ // 转换为类型化数组
322
+ var byteArray = new Uint8Array(bytesCode);
323
+
324
+ // 将base64转换为ascii码
325
+ for (var i = 0; i < bytes.length; i++) {
326
+ byteArray[i] = bytes.charCodeAt(i);
327
+ }
328
+ // 生成Blob对象(文件对象)
329
+ return new Blob([bytesCode], {type: 'image/jpeg'});
330
+ },
331
+ },
332
+ computed: {
333
+ typeOfUse() {
334
+ return [{label: '全部', value: ''}, ...this.$appdata.getParam('报建-使用类型')]
335
+ }
336
+ },
337
+ events: {
338
+ onFileUpload: function (file, res) {
339
+ this.$dispatch("resid", res.id)
340
+ this.headers.fremarks = ''
341
+ this.close()
342
+ }
343
+ }
344
+ }
345
+ </script>
346
+
347
+ <style scoped>
348
+ .clears {
349
+ margin: 0;
350
+ font-size: 10px;
351
+ overflow: hidden;
352
+ text-overflow: ellipsis;
353
+ white-space: nowrap;
354
+ }
355
+
356
+ .showData {
357
+ padding: 15px 10px 0px 10px;
358
+ box-sizing: border-box;
359
+ height: 140px;
360
+ font-family: "微软雅黑";
361
+ }
362
+
363
+ .showData .item {
364
+ padding-bottom: 10px;
365
+ border-bottom: solid 1px #c1c1c1;
366
+ }
367
+
368
+ .left {
369
+ padding-right: 10px;
370
+ }
371
+
372
+ .left img {
373
+ height: 100%;
374
+ width: 100%;
375
+ }
376
+
377
+ .right {
378
+ height: 100%;
379
+ /*display: -webkit-flex;*/
380
+ /*display: flex;*/
381
+ /*flex-direction: column;*/
382
+ /*justify-content: space-around;*/
383
+ }
384
+
385
+ .item_btn {
386
+ width: 80%;
387
+ background-color: #6aa6e2;
388
+ border-radius: 4px;
389
+ color: #FFFFFF;
390
+ font-family: PingFang;
391
+ }
392
+ </style>