Commit e2d2dbfb5c6131827e73c885b0f20a346faeb1bd

Authored by wuxw
1 parent 94d16c26

优化房屋收费页面 的批量催缴单

src/api/fee/addOweFeeCallableApi.js
... ... @@ -49,11 +49,8 @@ export function listFeeConfigs(params) {
49 49 params
50 50 }).then(response => {
51 51 const res = response.data
52   - if (res.code === 0) {
53 52 resolve(res)
54   - } else {
55   - reject(new Error(res.msg))
56   - }
  53 +
57 54 }).catch(error => {
58 55 reject(error)
59 56 })
... ... @@ -69,11 +66,8 @@ export function queryFloors(params) {
69 66 params
70 67 }).then(response => {
71 68 const res = response.data
72   - if (res.code === 0) {
73 69 resolve(res)
74   - } else {
75   - reject(new Error(res.msg))
76   - }
  70 +
77 71 }).catch(error => {
78 72 reject(error)
79 73 })
... ... @@ -89,11 +83,8 @@ export function queryReportOweFee(params) {
89 83 params
90 84 }).then(response => {
91 85 const res = response.data
92   - if (res.code === 0) {
93 86 resolve(res)
94   - } else {
95   - reject(new Error(res.msg))
96   - }
  87 +
97 88 }).catch(error => {
98 89 reject(error)
99 90 })
... ...
src/api/fee/exportFeeImportExcelApi.js
... ... @@ -27,11 +27,8 @@ export function listFeeConfigs(params) {
27 27 params
28 28 }).then(response => {
29 29 const res = response.data
30   - if (res.code === 0) {
31 30 resolve(res)
32   - } else {
33   - reject(new Error(res.msg || 'Failed to list fee configs'))
34   - }
  31 +
35 32 }).catch(error => {
36 33 reject(error)
37 34 })
... ... @@ -46,11 +43,8 @@ export function queryFloors(params) {
46 43 params
47 44 }).then(response => {
48 45 const res = response.data
49   - if (res.code === 0) {
50 46 resolve(res)
51   - } else {
52   - reject(new Error(res.msg || 'Failed to query floors'))
53   - }
  47 +
54 48 }).catch(error => {
55 49 reject(error)
56 50 })
... ...
src/components/fee/doImportCreateFee.vue
1 1 <template>
2   - <el-dialog
3   - :title="$t('doImportCreateFee.title')"
4   - :visible.sync="visible"
5   - width="70%"
6   - :before-close="handleClose"
7   - >
8   - <el-form label-width="120px">
  2 + <el-dialog :title="$t('doImportCreateFee.title')" :visible.sync="visible" width="40%" :before-close="handleClose">
  3 + <el-form label-width="120px" class="text-left">
9 4 <el-form-item :label="$t('doImportCreateFee.selectFile')">
10   - <el-upload
11   - class="upload-demo"
12   - action=""
13   - :auto-upload="false"
14   - :on-change="handleFileChange"
15   - :show-file-list="false"
16   - accept=".xls,.xlsx"
17   - >
  5 + <el-upload class="upload-demo" action="" :auto-upload="false" :on-change="handleFileChange"
  6 + :show-file-list="false" accept=".xls,.xlsx">
18 7 <el-button size="small" type="primary">{{ $t('doImportCreateFee.clickUpload') }}</el-button>
19 8 <div slot="tip" class="el-upload__tip">
20 9 {{ fileName || $t('doImportCreateFee.fileTip') }}
... ... @@ -25,11 +14,7 @@
25 14  
26 15 <span slot="footer" class="dialog-footer">
27 16 <el-button @click="handleClose">{{ $t('common.cancel') }}</el-button>
28   - <el-button
29   - type="primary"
30   - @click="handleImport"
31   - :disabled="!fileName"
32   - >{{ $t('common.import') }}</el-button>
  17 + <el-button type="primary" @click="handleImport" :disabled="!fileName">{{ $t('common.import') }}</el-button>
33 18 </span>
34 19 </el-dialog>
35 20 </template>
... ... @@ -57,37 +42,37 @@ export default {
57 42 this.visible = true
58 43 this.reset()
59 44 },
60   -
  45 +
61 46 handleFileChange(file) {
62 47 if (!this.checkFileType(file.name)) {
63 48 this.$message.error(this.$t('doImportCreateFee.validate.invalidFileType'))
64 49 return false
65 50 }
66   -
  51 +
67 52 if (!this.checkFileSize(file.size)) {
68 53 this.$message.error(this.$t('doImportCreateFee.validate.fileTooLarge'))
69 54 return false
70 55 }
71   -
  56 +
72 57 this.file = file.raw
73 58 this.fileName = file.name
74 59 },
75   -
  60 +
76 61 checkFileType(filename) {
77 62 const ext = filename.split('.').pop().toLowerCase()
78 63 return ['xls', 'xlsx'].includes(ext)
79 64 },
80   -
  65 +
81 66 checkFileSize(size) {
82 67 return size <= 2 * 1024 * 1024 // 2MB
83 68 },
84   -
  69 +
85 70 handleImport() {
86 71 const formData = new FormData()
87 72 formData.append('uploadFile', this.file)
88 73 formData.append('communityId', this.communityId)
89 74 formData.append('importAdapt', 'importCustomFee')
90   -
  75 +
91 76 importData(formData).then(response => {
92 77 const res = response.data
93 78 if (res.code === 0) {
... ... @@ -101,12 +86,12 @@ export default {
101 86 this.$message.error(error.message)
102 87 })
103 88 },
104   -
  89 +
105 90 handleClose() {
106 91 this.visible = false
107 92 this.reset()
108 93 },
109   -
  94 +
110 95 reset() {
111 96 this.file = null
112 97 this.fileName = ''
... ...
src/components/fee/exportFeeImportExcel.vue
1 1 <template>
2   - <el-dialog
3   - :title="$t('exportFeeImportExcel.title')"
4   - :visible.sync="visible"
5   - width="70%"
6   - :before-close="handleClose"
7   - >
8   - <el-form label-width="120px">
  2 + <el-dialog :title="$t('exportFeeImportExcel.title')" :visible.sync="visible" width="70%" :before-close="handleClose">
  3 + <el-form label-width="120px" class="text-left">
9 4 <el-form-item :label="$t('exportFeeImportExcel.floor')">
10 5 <div>
11   - <el-checkbox
12   - v-model="isFloorAll"
13   - @change="toggleAllFloors"
14   - >{{ $t('exportFeeImportExcel.all') }}</el-checkbox>
15   - <el-checkbox
16   - v-for="item in floors"
17   - :key="item.floorId"
18   - v-model="selectedFloorIds"
19   - :label="item.floorId"
20   - @change="handleFloorChange"
21   - class="margin-left"
22   - >{{ item.floorName }}</el-checkbox>
  6 + <el-checkbox v-model="isFloorAll" @change="toggleAllFloors">{{ $t('exportFeeImportExcel.all') }}</el-checkbox>
  7 + <el-checkbox v-for="item in floors" :key="item.floorId" v-model="selectedFloorIds" :label="item.floorId"
  8 + @change="handleFloorChange" class="margin-left">{{ item.floorName }}</el-checkbox>
23 9 </div>
24 10 </el-form-item>
25 11  
26 12 <el-form-item :label="$t('exportFeeImportExcel.feeItem')">
27 13 <div>
28   - <el-checkbox
29   - v-model="isConfigAll"
30   - @change="toggleAllConfigs"
31   - >{{ $t('exportFeeImportExcel.all') }}</el-checkbox>
32   - <el-checkbox
33   - v-for="item in configs"
34   - :key="item.configId"
35   - v-model="selectedConfigIds"
36   - :label="item.configId"
37   - @change="handleConfigChange"
38   - class="margin-left"
39   - >{{ item.feeName }}</el-checkbox>
  14 + <el-checkbox v-model="isConfigAll" @change="toggleAllConfigs">{{ $t('exportFeeImportExcel.all')
  15 + }}</el-checkbox>
  16 + <el-checkbox v-for="item in configs" :key="item.configId" v-model="selectedConfigIds" :label="item.configId"
  17 + @change="handleConfigChange" class="margin-left">{{ item.feeName }}</el-checkbox>
40 18 </div>
41 19 </el-form-item>
42 20 </el-form>
... ... @@ -76,18 +54,18 @@ export default {
76 54 this.loadFloors()
77 55 this.loadConfigs()
78 56 },
79   -
  57 +
80 58 loadFloors() {
81 59 queryFloors({
82 60 page: 1,
83 61 row: 150,
84 62 communityId: this.communityId
85 63 }).then(response => {
86   - this.floors = response.data.apiFloorDataVoList
  64 + this.floors = response.apiFloorDataVoList
87 65 this.selectedFloorIds = this.floors.map(item => item.floorId)
88 66 })
89 67 },
90   -
  68 +
91 69 loadConfigs() {
92 70 listFeeConfigs({
93 71 page: 1,
... ... @@ -95,31 +73,31 @@ export default {
95 73 communityId: this.communityId,
96 74 isDefault: 'F'
97 75 }).then(response => {
98   - this.configs = response.data.feeConfigs
  76 + this.configs = response.feeConfigs
99 77 this.selectedConfigIds = this.configs.map(item => item.configId)
100 78 })
101 79 },
102   -
  80 +
103 81 toggleAllFloors() {
104   - this.selectedFloorIds = this.isFloorAll
  82 + this.selectedFloorIds = this.isFloorAll
105 83 ? this.floors.map(item => item.floorId)
106 84 : []
107 85 },
108   -
  86 +
109 87 toggleAllConfigs() {
110 88 this.selectedConfigIds = this.isConfigAll
111 89 ? this.configs.map(item => item.configId)
112 90 : []
113 91 },
114   -
  92 +
115 93 handleFloorChange() {
116 94 this.isFloorAll = this.selectedFloorIds.length === this.floors.length
117 95 },
118   -
  96 +
119 97 handleConfigChange() {
120 98 this.isConfigAll = this.selectedConfigIds.length === this.configs.length
121 99 },
122   -
  100 +
123 101 handleExport() {
124 102 const params = {
125 103 floorIds: this.selectedFloorIds.join(','),
... ... @@ -128,10 +106,10 @@ export default {
128 106 type: '1001',
129 107 pagePath: 'exportCreateFeeTemplate'
130 108 }
131   -
  109 +
132 110 exportData(params).then(response => {
133 111 this.$message.success(response.data.msg)
134   - if (response.data.code === 0) {
  112 + if (response.code === 0) {
135 113 this.handleClose()
136 114 this.$router.push('/pages/property/downloadTempFile?tab=下载中心')
137 115 }
... ... @@ -139,12 +117,12 @@ export default {
139 117 this.$message.error(error.message)
140 118 })
141 119 },
142   -
  120 +
143 121 handleClose() {
144 122 this.visible = false
145 123 this.reset()
146 124 },
147   -
  125 +
148 126 reset() {
149 127 this.isFloorAll = true
150 128 this.isConfigAll = true
... ...
src/views/fee/addOweFeeCallableList.vue
... ... @@ -9,15 +9,9 @@
9 9 <el-row :gutter="20">
10 10 <el-col :span="24">
11 11 <el-form-item :label="$t('addOweFeeCallable.callableWay')">
12   - <el-select
13   - v-model="addOweFeeCallableInfo.callableWay"
14   - style="width:100%"
  12 + <el-select v-model="addOweFeeCallableInfo.callableWay" style="width:100%"
15 13 :placeholder="$t('addOweFeeCallable.selectCallableWay')">
16   - <el-option
17   - v-for="item in callableWayOptions"
18   - :key="item.value"
19   - :label="item.label"
20   - :value="item.value">
  14 + <el-option v-for="item in callableWayOptions" :key="item.value" :label="item.label" :value="item.value">
21 15 </el-option>
22 16 </el-select>
23 17 </el-form-item>
... ... @@ -28,11 +22,9 @@
28 22 <el-col :span="24">
29 23 <el-form-item :label="$t('addOweFeeCallable.feeConfigs')">
30 24 <el-checkbox-group v-model="addOweFeeCallableInfo.configIds" @change="loadOweFeeRooms">
31   - <el-checkbox
32   - v-for="item in addOweFeeCallableInfo.feeConfigs"
33   - :key="item.configId"
  25 + <el-checkbox v-for="item in addOweFeeCallableInfo.feeConfigs" :key="item.configId"
34 26 :label="item.configId">
35   - {{item.feeName}}
  27 + {{ item.feeName }}
36 28 </el-checkbox>
37 29 </el-checkbox-group>
38 30 </el-form-item>
... ... @@ -42,15 +34,9 @@
42 34 <el-row :gutter="20">
43 35 <el-col :span="24">
44 36 <el-form-item :label="$t('addOweFeeCallable.floor')">
45   - <el-select
46   - v-model="addOweFeeCallableInfo.floorId"
47   - style="width:100%"
48   - @change="loadOweFeeRooms"
  37 + <el-select v-model="addOweFeeCallableInfo.floorId" style="width:100%" @change="loadOweFeeRooms"
49 38 :placeholder="$t('addOweFeeCallable.selectFloor')">
50   - <el-option
51   - v-for="item in addOweFeeCallableInfo.floors"
52   - :key="item.floorId"
53   - :label="item.floorNum"
  39 + <el-option v-for="item in addOweFeeCallableInfo.floors" :key="item.floorId" :label="item.floorNum"
54 40 :value="item.floorId">
55 41 </el-option>
56 42 </el-select>
... ... @@ -61,16 +47,9 @@
61 47 <el-row :gutter="20">
62 48 <el-col :span="24">
63 49 <el-form-item :label="$t('addOweFeeCallable.timeRange')">
64   - <el-select
65   - v-model="addOweFeeCallableInfo.hasTime"
66   - style="width:100%"
67   - @change="loadOweFeeRooms"
  50 + <el-select v-model="addOweFeeCallableInfo.hasTime" style="width:100%" @change="loadOweFeeRooms"
68 51 :placeholder="$t('addOweFeeCallable.selectTimeRange')">
69   - <el-option
70   - v-for="item in timeRangeOptions"
71   - :key="item.value"
72   - :label="item.label"
73   - :value="item.value">
  52 + <el-option v-for="item in timeRangeOptions" :key="item.value" :label="item.label" :value="item.value">
74 53 </el-option>
75 54 </el-select>
76 55 </el-form-item>
... ... @@ -80,20 +59,14 @@
80 59 <el-row :gutter="20" v-show="addOweFeeCallableInfo.hasTime === 'ON'">
81 60 <el-col :span="12">
82 61 <el-form-item :label="$t('addOweFeeCallable.startTime')">
83   - <el-date-picker
84   - v-model="addOweFeeCallableInfo.startTime"
85   - type="datetime"
86   - style="width:100%"
  62 + <el-date-picker v-model="addOweFeeCallableInfo.startTime" type="datetime" style="width:100%"
87 63 :placeholder="$t('addOweFeeCallable.selectStartTime')">
88 64 </el-date-picker>
89 65 </el-form-item>
90 66 </el-col>
91 67 <el-col :span="12">
92 68 <el-form-item :label="$t('addOweFeeCallable.endTime')">
93   - <el-date-picker
94   - v-model="addOweFeeCallableInfo.endTime"
95   - type="datetime"
96   - style="width:100%"
  69 + <el-date-picker v-model="addOweFeeCallableInfo.endTime" type="datetime" style="width:100%"
97 70 :placeholder="$t('addOweFeeCallable.selectEndTime')">
98 71 </el-date-picker>
99 72 </el-form-item>
... ... @@ -104,19 +77,13 @@
104 77 <el-col :span="24">
105 78 <el-form-item :label="$t('addOweFeeCallable.oweRooms')">
106 79 <div v-if="addOweFeeCallableInfo.rooms && addOweFeeCallableInfo.rooms.length > 0">
107   - <el-checkbox
108   - v-model="checkAllStatus"
109   - @change="handleCheckAllChange">
  80 + <el-checkbox v-model="checkAllStatus" @change="handleCheckAllChange">
110 81 {{ $t('addOweFeeCallable.checkAll') }}
111 82 </el-checkbox>
112   - <el-checkbox-group
113   - v-model="addOweFeeCallableInfo.roomIds"
114   - @change="handleCheckedRoomsChange">
115   - <el-checkbox
116   - v-for="item in addOweFeeCallableInfo.rooms"
117   - :key="item.payerObjId"
  83 + <el-checkbox-group v-model="addOweFeeCallableInfo.roomIds" @change="handleCheckedRoomsChange">
  84 + <el-checkbox v-for="item in addOweFeeCallableInfo.rooms" :key="item.payerObjId"
118 85 :label="item.payerObjId">
119   - {{item.payerObjName}}
  86 + {{ item.payerObjName }}
120 87 </el-checkbox>
121 88 </el-checkbox-group>
122 89 </div>
... ... @@ -130,22 +97,14 @@
130 97 <el-row :gutter="20">
131 98 <el-col :span="24" class="text-right">
132 99 <el-button @click="goBack">{{ $t('common.back') }}</el-button>
133   - <el-button
134   - v-if="addOweFeeCallableInfo.callableWay === 'EXCEL'"
135   - type="primary"
  100 + <el-button v-if="addOweFeeCallableInfo.callableWay === 'EXCEL'" type="primary"
136 101 @click="exportCollectionLetterExcel">
137 102 {{ $t('common.export') }}
138 103 </el-button>
139   - <el-button
140   - v-else-if="addOweFeeCallableInfo.callableWay === 'TTS'"
141   - type="primary"
142   - @click="ttsOweFee">
  104 + <el-button v-else-if="addOweFeeCallableInfo.callableWay === 'TTS'" type="primary" @click="ttsOweFee">
143 105 {{ $t('addOweFeeCallable.ttsCall') }}
144 106 </el-button>
145   - <el-button
146   - v-else
147   - type="primary"
148   - @click="saveOweFeeCallable">
  107 + <el-button v-else type="primary" @click="saveOweFeeCallable">
149 108 {{ $t('common.submit') }}
150 109 </el-button>
151 110 </el-col>
... ... @@ -157,7 +116,7 @@
157 116  
158 117 <script>
159 118 import { getCommunityId } from '@/api/community/communityApi'
160   -import {
  119 +import {
161 120 saveOweFeeCallable,
162 121 exportCollectionLetterExcel,
163 122 listFeeConfigs,
... ... @@ -212,8 +171,8 @@ export default {
212 171 communityId: this.addOweFeeCallableInfo.communityId,
213 172 isDefault: 'F'
214 173 }
215   - const { data } = await listFeeConfigs(params)
216   - this.addOweFeeCallableInfo.feeConfigs = data.feeConfigs
  174 + const { feeConfigs } = await listFeeConfigs(params)
  175 + this.addOweFeeCallableInfo.feeConfigs = feeConfigs
217 176 } catch (error) {
218 177 console.error('获取费用配置失败:', error)
219 178 }
... ... @@ -225,16 +184,16 @@ export default {
225 184 row: 100,
226 185 communityId: this.addOweFeeCallableInfo.communityId
227 186 }
228   - const { data } = await queryFloors(params)
229   - this.addOweFeeCallableInfo.floors = data.apiFloorDataVoList
  187 + const { apiFloorDataVoList } = await queryFloors(params)
  188 + this.addOweFeeCallableInfo.floors = apiFloorDataVoList
230 189 } catch (error) {
231 190 console.error('获取楼栋失败:', error)
232 191 }
233 192 },
234 193 async loadOweFeeRooms() {
235   - if (!this.addOweFeeCallableInfo.floorId ||
236   - !this.addOweFeeCallableInfo.configIds ||
237   - this.addOweFeeCallableInfo.configIds.length === 0) {
  194 + if (!this.addOweFeeCallableInfo.floorId ||
  195 + !this.addOweFeeCallableInfo.configIds ||
  196 + this.addOweFeeCallableInfo.configIds.length === 0) {
238 197 return
239 198 }
240 199  
... ... @@ -247,7 +206,7 @@ export default {
247 206 floorId: this.addOweFeeCallableInfo.floorId
248 207 }
249 208 const { data } = await queryReportOweFee(params)
250   - this.addOweFeeCallableInfo.rooms = data.data || []
  209 + this.addOweFeeCallableInfo.rooms = data || []
251 210 this.addOweFeeCallableInfo.roomIds = this.addOweFeeCallableInfo.rooms.map(item => item.payerObjId)
252 211 this.checkAllStatus = this.addOweFeeCallableInfo.rooms.length > 0
253 212 } catch (error) {
... ... @@ -255,7 +214,7 @@ export default {
255 214 }
256 215 },
257 216 handleCheckAllChange(val) {
258   - this.addOweFeeCallableInfo.roomIds = val ?
  217 + this.addOweFeeCallableInfo.roomIds = val ?
259 218 this.addOweFeeCallableInfo.rooms.map(item => item.payerObjId) : []
260 219 },
261 220 handleCheckedRoomsChange(value) {
... ...
src/views/fee/roomCreateFeeList.vue
... ... @@ -297,7 +297,7 @@ export default {
297 297 this.$router.push('/pages/fee/roomCreatePayFee')
298 298 },
299 299 _downloadCollectionLetterOrder() {
300   - this.$router.push('/pages/fee/addOweFeeCallable?callableWay=EXCEL')
  300 + this.$router.push('/views/fee/addOweFeeCallable?callableWay=EXCEL')
301 301 },
302 302 _downloadRoomCollectionLetterOrder(room) {
303 303 this.$refs.downloadCollectionLetterOrder.open({
... ...