sale-client 4.2.14 → 4.2.16

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 (53) hide show
  1. package/.gradle/5.2.1/fileHashes/fileHashes.lock +0 -0
  2. package/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  3. package/.gradle/buildOutputCleanup/cache.properties +1 -1
  4. package/package.json +1 -1
  5. package/src/components/FilesManage/addressts/FileUserFilests.vue +671 -0
  6. package/src/components/FilesManage/ncUserinfoList.vue +315 -0
  7. package/src/components/SellGasCharge/MeterCharge/CardDataRewrite.vue +107 -0
  8. package/src/components/SendCard/SendCardData.vue +208 -0
  9. package/src/components/accounts/accountAdd.vue +276 -0
  10. package/src/components/accounts/accountsList.vue +183 -0
  11. package/src/components/accounts/accountsManage.vue +87 -0
  12. package/src/components/common/chargeinfo/chargeinfo.vue +55 -0
  13. package/src/components/common/userinfo_detail/config/exportConfig.js +85 -0
  14. package/src/components/ncarchives/ncArchivesAdd.vue +468 -0
  15. package/src/components/ncarchives/ncArchivesList.vue +159 -0
  16. package/src/components/ncarchives/ncUserfilesList.vue +373 -0
  17. package/src/components/ncarchives/ncarchivesmanage.vue +80 -0
  18. package/src/components/revenue/IOTArrears/arrears.vue +323 -0
  19. package/src/components/revenue/IOTArrears/iotRechargeAudit.vue +369 -0
  20. package/src/components/revenue/base/rightview/carddetail/cardiotfeeChangeDetail.vue +59 -0
  21. package/src/components/revenue/base/rightview/carddetail/reduceChangeDetail.vue +59 -0
  22. package/src/components/revenue/comprehen/ComprehenOperation/BatchChange/BatchCancellationts.vue +73 -0
  23. package/src/components/revenue/comprehen/ComprehenOperation/BatchChange/BatchEnablets.vue +73 -0
  24. package/src/components/revenue/comprehen/ComprehenOperation/IcFeeDeduction/ReduceAddGas.vue +199 -0
  25. package/src/components/revenue/comprehen/ComprehenOperation/IcFeeDeduction/icdeductionManage.vue +24 -0
  26. package/src/components/revenue/comprehen/ComprehenOperation/IcFeeDeduction/icdeductionYSManage.vue +24 -0
  27. package/src/components/revenue/comprehen/ComprehenOperation/IcFeeDeduction/icfeeDeduction.vue +185 -0
  28. package/src/components/revenue/comprehen/ComprehenOperation/IcFeeDeduction/icfeeYSDeduction.vue +185 -0
  29. package/src/components/revenue/comprehen/ComprehenOperation/newchangemeter/ChangeFlowMeter.vue +356 -0
  30. package/src/components/revenue/comprehen/ComprehenOperation/newchangemeter/CorrectionMeter.vue +148 -0
  31. package/src/components/revenue/comprehen/SpecialUser/BlackList/BlackUserList.vue +136 -0
  32. package/src/components/revenue/recordMainten/sellinggas/AddWarehousemain.vue +65 -0
  33. package/src/components/revenue/recordMainten/sellinggas/MeterOperateAdd.vue +483 -0
  34. package/src/components/revenue/recordMainten/sellinggas/MeterOperatemain.vue +279 -0
  35. package/src/components/revenue/recordMainten/sellinggas/MeterOperatemainImport.vue +265 -0
  36. package/src/components/thirdapply/thirdAdd.vue +289 -0
  37. package/src/components/thirdapply/thirdList.vue +162 -0
  38. package/src/components/thirdapply/thirdManage.vue +74 -0
  39. package/src/components/webMeter/InstructQuery.vue +414 -0
  40. package/src/components/webMeter/ParamSet/ParamSet.vue +556 -0
  41. package/src/components/webMeter/ParamSet/ParamSetForm.vue +296 -0
  42. package/src/components/webMeter/WebUserHand.vue +483 -0
  43. package/src/components/webMeter/instructionView/NewQueryInstruct.vue +509 -0
  44. package/src/components/webMeter/instructionView/NewQueryInstructMain.vue +48 -0
  45. package/src/components/webMeter/webManage/NewMeterList.vue +461 -0
  46. package/src/filiale/jinhuang/WebHand.vue +1026 -1026
  47. package/src/filiale/meihekou/PrintBill.vue +10 -5
  48. package/src/filiale/meihekou/ReissueBill.vue +37 -10
  49. package/src/filiale/meihekou/common/userinfo_detail/ic_detail/MachineRecordQuery.vue +2 -2
  50. package/src/filiale/meihekou/manualChargeCenter.vue +394 -394
  51. package/src/filiale/yuncheng/IndustryCommerceHand.vue +68 -2
  52. package/src/plugins/FileManageServicets.js +214 -0
  53. package/src/plugins/GetImg.js +53 -0
@@ -38,6 +38,13 @@
38
38
  </button>
39
39
  <button class="button_search button_spacing" @click="$parent.$parent.search()">查询</button>
40
40
  <button class="button_clear button_spacing" @click="$parent.$parent.clear()">清空</button>
41
+ <button
42
+ class="btn btn-danger button_spacing"
43
+ v-if="$parent.$parent.deletestate"
44
+ @click="$parent.$parent.batchDelete()"
45
+ :disabled="!$parent.$parent.hasSelectedItems">
46
+ 批量删除
47
+ </button>
41
48
  <export-excel
42
49
  :data="$parent.$parent.getCondition"
43
50
  :field="$parent.$parent.getfield"
@@ -184,7 +191,7 @@
184
191
  </div>
185
192
  </div>
186
193
  </criteria>
187
- <data-grid :model="model" partial='list' class="list_area table_sy" v-ref:grid id="hand_manager_grid">
194
+ <data-grid :model="model" partial='list' class="list_area table_sy" v-ref:grid id="hand_manager_grid" :optional="true">
188
195
  <template partial='head'>
189
196
  <tr>
190
197
  <th>
@@ -513,6 +520,9 @@ export default {
513
520
 
514
521
  plans: [], // 记录当前行是否被勾选
515
522
  all: false, // 是否全选
523
+ rowsdata: [], // 选中的行数据
524
+ radio: [], // 单选状态
525
+ checkAll: [], // 全选状态
516
526
  show: false, // 下发日期模态框显示
517
527
  unhandplan: [], // 之前是否有未抄表记录
518
528
  downConfirm: false, // 下发若有未抄记录,确认框
@@ -776,6 +786,15 @@ export default {
776
786
  search () {
777
787
  // 查询前清空选择项
778
788
  this.plans = []
789
+ this.rowsdata = []
790
+ this.radio = []
791
+ this.checkAll = []
792
+
793
+ // 重置DataGrid的选择状态
794
+ if (this.$refs.paged && this.$refs.paged.$refs.grid && this.$refs.paged.$refs.grid.selectInit) {
795
+ this.$refs.paged.$refs.grid.selectInit()
796
+ }
797
+
779
798
  this.$refs.paged.$refs.criteria.search()
780
799
  },
781
800
  selfSearch (args) {
@@ -828,7 +847,9 @@ export default {
828
847
  this.model.params.endDate = this.$refs.paged.$refs.criteria.model.endDate
829
848
  this.condition2 = args.condition
830
849
  console.log('selfsearch..', args.condition, this.model)
831
- this.model.search(args.condition, this.model)
850
+ this.model.search(args.condition, this.model).then(() => {
851
+ // 查询完成后的处理
852
+ })
832
853
  },
833
854
  reflash () {
834
855
  this.$refs.paged.$refs.criteria.model.f_orgid = `${Vue.$login.f.orgid}`
@@ -1027,6 +1048,51 @@ export default {
1027
1048
  this.model.paramSource.orderitem = `'${field} ${rule}'`
1028
1049
  }
1029
1050
  this.search()
1051
+ },
1052
+ hasSelectedItems () {
1053
+ return (this.$refs.paged && this.$refs.paged.$refs.grid && this.$refs.paged.$refs.grid.getRowData)
1054
+ ? this.$refs.paged.$refs.grid.getRowData().length > 0
1055
+ : false
1056
+ },
1057
+ async batchDelete () {
1058
+ const selectedRows = (this.$refs.paged && this.$refs.paged.$refs.grid && this.$refs.paged.$refs.grid.getRowData)
1059
+ ? this.$refs.paged.$refs.grid.getRowData()
1060
+ : []
1061
+
1062
+ if (selectedRows.length === 0) {
1063
+ this.$showAlert('请选择要删除的记录', 'warning', 2000)
1064
+ return
1065
+ }
1066
+
1067
+ const nonDeletableRows = selectedRows.filter(row => row.f_meter_state !== '未抄表')
1068
+
1069
+ if (nonDeletableRows.length > 0) {
1070
+ this.$showAlert('只能删除未抄表状态的记录', 'warning', 3000)
1071
+ return
1072
+ }
1073
+
1074
+ const confirmRes = await this.$showMessage(`当前选中 ${selectedRows.length} 条记录,确认批量删除吗?`, ['confirm', 'cancel'])
1075
+ if (confirmRes !== 'confirm') {
1076
+ return
1077
+ }
1078
+
1079
+ try {
1080
+ const selectedIds = selectedRows.map(row => row.id)
1081
+ const sql = `update t_yccustom_handplan set f_hand_state = '无效' where id in (${selectedIds.map(id => `'${id}'`).join(',')})`
1082
+
1083
+ await this.$resetpost('api/af-revenue/logic/runSQL', { sql: sql })
1084
+ this.$showAlert(`成功删除 ${selectedRows.length} 条记录`, 'success', 2000)
1085
+
1086
+ // 重置DataGrid的选择状态
1087
+ if (this.$refs.paged && this.$refs.paged.$refs.grid && this.$refs.paged.$refs.grid.selectInit) {
1088
+ this.$refs.paged.$refs.grid.selectInit()
1089
+ }
1090
+
1091
+ // 直接刷新数据,让界面状态完全重置
1092
+ this.search()
1093
+ } catch (error) {
1094
+ this.$showAlert('批量删除失败:' + error.message, 'danger', 3000)
1095
+ }
1030
1096
  }
1031
1097
  },
1032
1098
  watch: {
@@ -0,0 +1,214 @@
1
+ import Vue from 'vue'
2
+ import co from 'co'
3
+
4
+ let cancelUserGen = function * (data, type) {
5
+ console.log('销户。。', data)
6
+ if (type === '销户') {
7
+ let owe = yield Vue.resetpost('rs/logic/hasOweWithUser', {data: {f_userinfo_id: data.f_userinfo_id.f_userinfo_id}}, {resolveMsg: null, rejectMsg: null})
8
+ let hasHandplan = yield Vue.resetpost('rs/sql/saleSingleTable', {data: {tablename: 't_handplan', condition: `f_meter_state = '未抄表' and f_userinfo_id = '${data.record_userinfo}'`}}, {resolveMsg: null, rejectMsg: null})
9
+ if (owe.data === 1 && hasHandplan.data.length > 0) {
10
+ Vue.showAlert('该客户还有欠费,不能销户!!', 'danger', 0)
11
+ } else {
12
+ Vue.resetpost('rs/entity/t_cancellation', data, {resolveMsg: `${type}成功`, rejectMsg: `${type}失败`})
13
+ }
14
+ } else {
15
+ Vue.resetpost('rs/entity/t_cancellation', data, {resolveMsg: `${type}成功`, rejectMsg: `${type}失败`})
16
+ }
17
+ }
18
+
19
+ let FileManageServicets = {
20
+ install (Vue, options) {
21
+ // 给vue增添对话框显示方法
22
+ Vue.FileManageServicets = Vue.prototype.$FileManageServicets = FileManageServicets
23
+ },
24
+
25
+ fileSave (data) {
26
+ let result = Object.assign({}, result, data.baseinfo.base)
27
+ if(data.baseinfo.civill && data.baseinfo.civill.f_civill_id){
28
+ result.civill ={};
29
+ result.civill.f_civill_id = data.baseinfo.civill.f_civill_id;
30
+ }
31
+ result.f_userinfo_id = result.f_userinfo_id ? result.f_userinfo_id + '' : null
32
+ result.f_cost_type = result.f_cost_type.length > 0 ? result.f_cost_type[0] : ''
33
+ result.f_credentials = result.f_credentials.length > 0 ? result.f_credentials[0] : ''
34
+ result.f_is_mgq = result.f_is_mgq.length > 0 ? result.f_is_mgq[0] : ''
35
+ if(result.f_out_user instanceof Array){
36
+ result.f_out_user =result.f_out_user && result.f_out_user.length > 0 ? result.f_out_user : '否';
37
+ }else{
38
+ result.f_out_user ==result.f_out_user ? result.f_out_user :'否';
39
+ }
40
+ result.f_paper_type = result.f_paper_type.length > 0 ? result.f_paper_type[0] : ''
41
+ result.f_predeposit = result.f_predeposit ? result.f_predeposit : 0
42
+ result.f_people_num = result.f_people_num ? result.f_people_num : 0
43
+ if (result.f_slice_area instanceof Array) {
44
+ result.f_slice_area = result.f_slice_area.length > 0 ? result.f_slice_area[0] : null
45
+ }
46
+ if (result.f_user_level instanceof Array) {
47
+ result.f_user_level = result.f_user_level.length > 0 ? result.f_user_level[0] : null
48
+ }
49
+ if (data.baseinfo.base.f_cost_type[0] === '银行代扣') {
50
+ let bank = Object.assign({}, bank, data.baseinfo.bank)
51
+ result.infobank = bank
52
+ result.infobank.f_bank_name = bank.f_bank_name.length > 0 ? bank.f_bank_name[0] : ''
53
+ }
54
+ // 获取分公司id (通过ids拆分)
55
+ result.f_filialeid = data.f_filialeid
56
+ if (result.f_userinfo_id === null) {
57
+ result.f_createfile_person = Vue.$login.f.name
58
+ result.f_createfile_date = Vue.$login.toStandardTimeString ()
59
+
60
+ result.f_operator = Vue.$login.f.name
61
+ result.f_operatorid = Vue.$login.f.id
62
+ result.f_orgid = data.f_filialeid
63
+ result.f_orgname = Vue.$login.f.orgs
64
+ result.f_depid = Vue.$login.f.depids
65
+ result.f_depname = Vue.$login.f.deps
66
+ }
67
+
68
+ // 档案变更时,获取档案登录人信息进行操作记录的保存
69
+ result.f_operator_record = Vue.$login.f.name
70
+ result.f_operatorid_record = Vue.$login.f.id
71
+ result.f_orgid_record = Vue.$login.f.orgid
72
+ result.f_orgname_record = Vue.$login.f.orgs
73
+ result.f_depid_record = Vue.$login.f.depids
74
+ result.f_depname_record = Vue.$login.f.deps
75
+ result.f_user_state = result.f_user_state.length > 0 ? result.f_user_state[0] : '正常'
76
+ result.userfiles = []
77
+ // 表具信息
78
+ data.meterinfo.forEach((item) => {
79
+ // item.f_user_id = result.f_user_id ? result.f_user_id : null
80
+ let meter = Object.assign({}, meter, item)
81
+ if (meter.f_user_id) {
82
+ meter.f_user_id = meter.f_user_id
83
+ }
84
+ meter.f_filialeid = data.f_filialeid
85
+ meter.f_position = meter.f_position ? meter.f_position : null
86
+ meter.f_gasbrand_id = meter.gasbrand[0].id
87
+ meter.f_show_way = meter.f_show_way ? meter.f_show_way[0] : null
88
+ meter.f_inputtor = meter.f_inputtor.length > 0 ? meter.f_inputtor[0] : null
89
+ // meter.f_install_person = meter.f_install_person.length > 0 ? meter.f_install_person[0] : null
90
+ meter.f_aroundmeter = meter.f_aroundmeter.length > 0 ? meter.f_aroundmeter[0] : null
91
+ meter.f_garbage_fee = meter.f_garbage_fee.length > 0 ? meter.f_garbage_fee[0] : '否'
92
+ meter.f_valve_state = meter.f_valve_state.length > 0 ? meter.f_valve_state[0] : '开阀'
93
+ meter.f_meter_base = isNaN(meter.f_meter_base) || meter.f_meter_base === '' ? 0.00 : (meter.f_meter_base - 0).toFixed(4)
94
+ meter.f_initial_base = isNaN(meter.f_initial_base) || meter.f_initial_base === '' ? 0.00 : (meter.f_initial_base - 0).toFixed(4)
95
+ meter.f_remanent_gas = isNaN(meter.f_remanent_gas) || meter.f_remanent_gas === '' ? 0.00 : (meter.f_remanent_gas - 0).toFixed(4)
96
+ meter.f_remanent_gas = isNaN(meter.f_remanent_gas) || meter.f_remanent_gas === '' ? 0.00 : (meter.f_remanent_gas - 0).toFixed(4)
97
+ meter.f_meternumber = meter.f_meternumber ? meter.f_meternumber.trim() : null;
98
+ meter.f_cardmeternumber = meter.f_cardmeternumber ? meter.f_cardmeternumber.trim() : meter.f_meternumber;
99
+ meter.f_price_ratio = meter.f_price_ratio ? meter.f_price_ratio : null
100
+ meter.f_fire_state = meter.f_fire_state1 ? '1' : '0'
101
+ meter.f_gasmodel_id = meter.gasmodel[0].id
102
+ meter.f_meter_classify = meter.gasbrand[0].f_meter_type
103
+ meter.f_user_type = meter.f_user_type.length > 0 ? meter.f_user_type[0] : ''
104
+ meter.f_price_id = meter.pricename[0].f_price_id
105
+ meter.f_gasproperties = meter.f_gasproperties.length > 0 ? meter.f_gasproperties[0] : ''
106
+ meter.f_adjustable_id = meter.f_adjustable.length > 0 ? meter.f_adjustable[0].id : null
107
+ meter.f_userfiles_address = meter.f_userfiles_address ? meter.f_userfiles_address : null
108
+ meter.f_total_fee = meter.f_total_fee == null || meter.f_total_fee == '' ? 0:meter.f_total_fee
109
+ meter.f_total_gas = meter.f_total_gas == null || meter.f_total_gas == '' ? 0:meter.f_total_gas
110
+ meter.f_history_gas = meter.f_history_gas == null || meter.f_history_gas == '' ? 0:meter.f_history_gas
111
+ meter.f_history_fee = meter.f_history_fee == null || meter.f_history_fee == '' ? 0:meter.f_history_fee
112
+ if (!meter.f_userfiles_id) {
113
+ // 气表状态需要根据表型判断是否需要开通操作 目前物联网表需要做开通操作
114
+ meter.f_table_state = '正常'
115
+ //meter.f_whether_hairpin = !item.gasbrand[0].f_meter_type.includes('机表') ? '未发' : '无卡'
116
+ //所有表变成未发
117
+ meter.f_whether_hairpin = '未发'
118
+ meter.f_input_person = Vue.$login.f.name
119
+ meter.f_input_date = Vue.$login.toStandardTimeString ()
120
+ meter.f_card_password = item.gasbrand[0].f_card_password
121
+ meter.f_meter_base = isNaN(meter.f_initial_base) || meter.f_initial_base === '' ? 0.00 : (meter.f_initial_base - 0).toFixed(4)
122
+ meter.f_operator = Vue.$login.f.name
123
+ meter.f_operatorid = Vue.$login.f.id
124
+ meter.f_orgid = data.f_filialeid
125
+ meter.f_orgname = Vue.$login.f.orgs
126
+ meter.f_depid = Vue.$login.f.depids
127
+ meter.f_depname = Vue.$login.f.deps
128
+ }
129
+ // 之前建立的是卡表在档案中改成了物联网表(需验证建立的卡表是不是未发,如果是未发,表状态给成待开通)后端处理
130
+
131
+ meter.img = meter.img ? meter.img : {content: null, filename: null}
132
+ meter.img.content = meter.img.content ? meter.img.content : null
133
+ meter.img.filename = meter.img.filename ? meter.img.filename : null
134
+
135
+ // 处理表具的设备信息
136
+ let userfilesdevices = []
137
+ meter.devicesinfo.forEach((devitem) => {
138
+ let userfilesdevice = Object.assign({}, userfilesdevice, devitem)
139
+ userfilesdevice.f_user_id = data.meterinfo[0].f_user_id ? data.meterinfo[0].f_user_id : null
140
+ userfilesdevice.f_devices_type = userfilesdevice.f_devices_type
141
+ userfilesdevice.f_state = userfilesdevice.f_state ? userfilesdevice.f_state : '有效'
142
+ userfilesdevice.f_devices_no = userfilesdevice.f_devices_no ? userfilesdevice.f_devices_no : null
143
+ userfilesdevice.f_brand = userfilesdevice.f_brand ? userfilesdevice.f_brand : null
144
+ userfilesdevice.f_devices_model = userfilesdevice.f_devices_model ? userfilesdevice.f_devices_model : null
145
+ userfilesdevice.f_devices_num = userfilesdevice.f_devices_num ? userfilesdevice.f_devices_num : null
146
+ userfilesdevice.img = userfilesdevice.img ? userfilesdevice.img : {content: null, filename: null}
147
+ userfilesdevice.img.content = userfilesdevice.img.content ? userfilesdevice.img.content : null
148
+ userfilesdevice.img.filename = userfilesdevice.img.filename ? userfilesdevice.img.filename : null
149
+ if (!userfilesdevice.id) {
150
+ userfilesdevice.f_input_person = Vue.$login.f.name
151
+ userfilesdevice.f_input_date = Vue.$login.toStandardTimeString ()
152
+ }
153
+ userfilesdevices.push(userfilesdevice)
154
+ })
155
+ meter.devicesinfo = userfilesdevices
156
+ result.userfiles.push(meter)
157
+ })
158
+
159
+ // 组织地址数据,更新地址管理中的数据
160
+ // 地址信息
161
+ let address = {}
162
+ address = {
163
+ id: data.addressinfo.id,
164
+ }
165
+
166
+ if (data.oldaddressinfo.id) {
167
+ address.oldid = data.oldaddressinfo.id
168
+ }
169
+ if (!data.checkRefund){
170
+ return Vue.resetpost('rs/logic/filemanage_fileSave_ts', {data: {userinfo: result, address: address, limit_gas: data.limit_gas}})
171
+ } else {
172
+ return Vue.resetpost('rs/logic/checkRefund', {data: {userinfo: result, address: address, limit_gas: data.limit_gas}})
173
+ }
174
+
175
+ },
176
+ batchOperate (model, type) {
177
+ let operateType = type
178
+ if (type === '启用') {
179
+ operateType = '销户启用'
180
+ }
181
+ let data = {
182
+ f_operat_type: operateType,
183
+ f_describe: `${Vue.$login.f.name}对客户${model.userinfo.f_user_name}进行销户`,
184
+ f_state: '有效',
185
+ f_user_id: model.userinfo.f_user_id,
186
+ f_user_name: model.userinfo.f_user_name,
187
+ f_comments: model.f_reason,
188
+ f_operator: Vue.$login.f.name,
189
+ f_operatorid: Vue.$login.f.id,
190
+ f_orgid: Vue.$login.f.orgid,
191
+ f_orgname: Vue.$login.f.orgs,
192
+ f_depid: Vue.$login.f.depids,
193
+ f_depname: Vue.$login.f.deps
194
+ }
195
+ if (type === '销户') {
196
+ data.f_userinfo_id = {
197
+ f_userinfo_id: model.userinfo.f_userinfo_id,
198
+ f_user_state: '销户',
199
+ version: model.userinfo.version
200
+ }
201
+ } else if (type === '启用') {
202
+ data.f_describe = `${Vue.$login.f.name}对客户${model.userinfo.f_user_name}进行启用`
203
+ data.f_userinfo_id = {
204
+ f_userinfo_id: model.userinfo.f_userinfo_id,
205
+ f_user_state: '正常',
206
+ version: model.userinfo.version
207
+ }
208
+ }
209
+ let cancelUser = cancelUserGen(data, type)
210
+ return co(cancelUser)
211
+ }
212
+ }
213
+
214
+ export default FileManageServicets
@@ -0,0 +1,53 @@
1
+ import axios from 'axios'
2
+ export async function fetchImage (imagePath, options = {}) {
3
+ const defaultOptions = {
4
+ timeout: 3000, // 默认超时时间,单位为毫秒
5
+ maxRetries: 1, // 默认最大重试次数
6
+ onTimeout: () => {
7
+ console.log('请求超时')
8
+ },
9
+ onError: (error) => {
10
+ console.log('请求失败', error)
11
+ },
12
+ onSuccess: () => {}
13
+ }
14
+ const finalOptions = Object.assign({}, defaultOptions, options)
15
+ let retries = 0
16
+
17
+ const fetch = async () => {
18
+ try {
19
+ const response = await axios.get(imagePath, {
20
+ responseType: 'blob',
21
+ timeout: finalOptions.timeout
22
+ })
23
+ return URL.createObjectURL(response.data)
24
+ } catch (error) {
25
+ finalOptions.onError(error)
26
+ retries++
27
+ if (retries < finalOptions.maxRetries) {
28
+ return fetch()
29
+ } else {
30
+ return ''
31
+ }
32
+ }
33
+ }
34
+ return fetch()
35
+ }
36
+
37
+ export async function fetchImages (imageItems,rowName) {
38
+ const fetchPromises = imageItems.map(async (item) => {
39
+ return fetchImage(item[rowName], {
40
+ onSuccess: () => {
41
+ console.log(`图片 ${item.id} 请求成功`)
42
+ },
43
+ onError: (error) => {
44
+ console.log(`图片 ${item.id} 请求失败`, error)
45
+ }
46
+ })
47
+ })
48
+ const results = await Promise.all(fetchPromises);
49
+ results.forEach((imageUrl, index) => {
50
+ imageItems[index][rowName] = imageUrl
51
+ })
52
+ return imageItems
53
+ }