Commit 814833f5d300d7f7871a71dd9bf152704dee8336
1 parent
9d019fa6
优化费用缴费代码
Showing
21 changed files
with
719 additions
and
392 deletions
src/App.vue
| @@ -510,4 +510,14 @@ h5 { | @@ -510,4 +510,14 @@ h5 { | ||
| 510 | h3 { | 510 | h3 { |
| 511 | font-size: 16px; | 511 | font-size: 16px; |
| 512 | } | 512 | } |
| 513 | + | ||
| 514 | +.el-select{ | ||
| 515 | + width: 100%; | ||
| 516 | +} | ||
| 517 | +.el-date-editor{ | ||
| 518 | + width: 100%; | ||
| 519 | +} | ||
| 520 | +.el-date-editor.el-input{ | ||
| 521 | + width: 100%; | ||
| 522 | +} | ||
| 513 | </style> | 523 | </style> |
| 514 | \ No newline at end of file | 524 | \ No newline at end of file |
src/api/fee/printOweFeeApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +// 查询欠费列表 | ||
| 4 | +export function listOweFees(params) { | ||
| 5 | + return new Promise((resolve, reject) => { | ||
| 6 | + request({ | ||
| 7 | + url: '/feeApi/listOweFees', | ||
| 8 | + method: 'get', | ||
| 9 | + params | ||
| 10 | + }).then(response => { | ||
| 11 | + const res = response.data | ||
| 12 | + resolve(res) | ||
| 13 | + }).catch(error => { | ||
| 14 | + reject(error) | ||
| 15 | + }) | ||
| 16 | + }) | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +// 查询房间信息 | ||
| 20 | +export function listRoomsWhereFeeSet(params) { | ||
| 21 | + return new Promise((resolve, reject) => { | ||
| 22 | + request({ | ||
| 23 | + url: '/fee.listRoomsWhereFeeSet', | ||
| 24 | + method: 'get', | ||
| 25 | + params | ||
| 26 | + }).then(response => { | ||
| 27 | + const res = response.data | ||
| 28 | + resolve(res) | ||
| 29 | + }).catch(error => { | ||
| 30 | + reject(error) | ||
| 31 | + }) | ||
| 32 | + }) | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +// 查询打印规范 | ||
| 36 | +export function queryFeePrintSpec(params) { | ||
| 37 | + return new Promise((resolve, reject) => { | ||
| 38 | + request({ | ||
| 39 | + url: '/feePrintSpec/queryFeePrintSpec', | ||
| 40 | + method: 'get', | ||
| 41 | + params | ||
| 42 | + }).then(response => { | ||
| 43 | + const res = response.data | ||
| 44 | + resolve(res) | ||
| 45 | + }).catch(error => { | ||
| 46 | + reject(error) | ||
| 47 | + }) | ||
| 48 | + }) | ||
| 49 | +} | ||
| 0 | \ No newline at end of file | 50 | \ No newline at end of file |
src/api/fee/roomCreateFeeAddApi.js
| @@ -8,11 +8,8 @@ export function saveRoomCreateFee(data) { | @@ -8,11 +8,8 @@ export function saveRoomCreateFee(data) { | ||
| 8 | data | 8 | data |
| 9 | }).then(response => { | 9 | }).then(response => { |
| 10 | const res = response.data | 10 | const res = response.data |
| 11 | - if (res.code === 0) { | ||
| 12 | resolve(res) | 11 | resolve(res) |
| 13 | - } else { | ||
| 14 | - reject(new Error(res.msg || 'Failed to save room create fee')) | ||
| 15 | - } | 12 | + |
| 16 | }).catch(error => { | 13 | }).catch(error => { |
| 17 | reject(error) | 14 | reject(error) |
| 18 | }) | 15 | }) |
| @@ -27,11 +24,7 @@ export function listFeeConfigs(params) { | @@ -27,11 +24,7 @@ export function listFeeConfigs(params) { | ||
| 27 | params | 24 | params |
| 28 | }).then(response => { | 25 | }).then(response => { |
| 29 | const res = response.data | 26 | const res = response.data |
| 30 | - if (res.code === 0) { | ||
| 31 | resolve(res) | 27 | resolve(res) |
| 32 | - } else { | ||
| 33 | - reject(new Error(res.msg || 'Failed to list fee configs')) | ||
| 34 | - } | ||
| 35 | }).catch(error => { | 28 | }).catch(error => { |
| 36 | reject(error) | 29 | reject(error) |
| 37 | }) | 30 | }) |
src/components/community/editCommunityArea.vue
| 1 | <template> | 1 | <template> |
| 2 | - <el-dialog :title="$t('enterCommunity.modifyCommunity')" :visible.sync="visible" width="800px" @close="resetForm"> | 2 | + <el-dialog :title="$t('common.edit')" :visible.sync="visible" width="800px" @close="resetForm"> |
| 3 | <el-form ref="form" :model="form" :rules="rules" label-width="120px"> | 3 | <el-form ref="form" :model="form" :rules="rules" label-width="120px"> |
| 4 | <el-form-item :label="$t('enterCommunity.communityName')" prop="name"> | 4 | <el-form-item :label="$t('enterCommunity.communityName')" prop="name"> |
| 5 | <el-input v-model="form.name" disabled /> | 5 | <el-input v-model="form.name" disabled /> |
| @@ -78,8 +78,8 @@ export default { | @@ -78,8 +78,8 @@ export default { | ||
| 78 | }) | 78 | }) |
| 79 | this.visible = true | 79 | this.visible = true |
| 80 | setTimeout(() => { | 80 | setTimeout(() => { |
| 81 | - this.$refs.uploadImage.setImages([community.qrCode]) | ||
| 82 | - }, 500) | 81 | + this.$refs.uploadImage.setImages([community.qrCode]) |
| 82 | + }, 500) | ||
| 83 | }, | 83 | }, |
| 84 | handleQRUpdate(photosUrl) { | 84 | handleQRUpdate(photosUrl) { |
| 85 | this.form.qrCode = photosUrl.length > 0 ? photosUrl[0] : '' | 85 | this.form.qrCode = photosUrl.length > 0 ? photosUrl[0] : '' |
src/components/fee/addMeterWater.vue
| 1 | <template> | 1 | <template> |
| 2 | - <el-dialog :title="$t('meterWater.addMeterReading')" :visible.sync="dialogVisible" width="50%" @close="handleClose"> | 2 | + <el-dialog :title="$t('meterWater.addMeterReading')" :visible.sync="dialogVisible" width="40%" @close="handleClose"> |
| 3 | <el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="right"> | 3 | <el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="right"> |
| 4 | <el-form-item :label="$t('meterWater.feeType')" prop="feeTypeCd"> | 4 | <el-form-item :label="$t('meterWater.feeType')" prop="feeTypeCd"> |
| 5 | <el-select v-model="form.feeTypeCd" :placeholder="$t('meterWater.selectFeeType')" style="width: 100%" | 5 | <el-select v-model="form.feeTypeCd" :placeholder="$t('meterWater.selectFeeType')" style="width: 100%" |
| @@ -330,4 +330,14 @@ export default { | @@ -330,4 +330,14 @@ export default { | ||
| 330 | color: #999; | 330 | color: #999; |
| 331 | margin-top: 5px; | 331 | margin-top: 5px; |
| 332 | } | 332 | } |
| 333 | +.el-form-item{ | ||
| 334 | + width: 90%; | ||
| 335 | + text-align: left; | ||
| 336 | +} | ||
| 337 | +.el-select{ | ||
| 338 | + width: 100%; | ||
| 339 | +} | ||
| 340 | +.el-date-editor{ | ||
| 341 | + width: 100%; | ||
| 342 | +} | ||
| 333 | </style> | 343 | </style> |
| 334 | \ No newline at end of file | 344 | \ No newline at end of file |
src/components/fee/addProxyFee.vue
| 1 | <template> | 1 | <template> |
| 2 | - <el-dialog :title="$t('addProxyFee.title')" :visible.sync="visible" width="70%" :before-close="handleClose"> | 2 | + <el-dialog :title="$t('addProxyFee.title')" :visible.sync="visible" width="40%" :before-close="handleClose"> |
| 3 | <el-form ref="form" :model="formData" label-width="120px"> | 3 | <el-form ref="form" :model="formData" label-width="120px"> |
| 4 | <el-form-item :label="$t('addProxyFee.feeType')" prop="feeTypeCd"> | 4 | <el-form-item :label="$t('addProxyFee.feeType')" prop="feeTypeCd"> |
| 5 | <el-select v-model="formData.feeTypeCd" @change="handleFeeTypeChange" | 5 | <el-select v-model="formData.feeTypeCd" @change="handleFeeTypeChange" |
| @@ -278,4 +278,11 @@ export default { | @@ -278,4 +278,11 @@ export default { | ||
| 278 | font-size: 12px; | 278 | font-size: 12px; |
| 279 | color: #909399; | 279 | color: #909399; |
| 280 | } | 280 | } |
| 281 | +.el-form-item{ | ||
| 282 | + width: 90%; | ||
| 283 | + text-align: left; | ||
| 284 | +} | ||
| 285 | +.el-date-editor{ | ||
| 286 | + width: 100%; | ||
| 287 | +} | ||
| 281 | </style> | 288 | </style> |
| 282 | \ No newline at end of file | 289 | \ No newline at end of file |
src/components/fee/roomCreateFeeAdd.vue
| 1 | <template> | 1 | <template> |
| 2 | - <el-dialog | ||
| 3 | - :title="$t('roomCreateFeeAdd.title')" | ||
| 4 | - :visible.sync="visible" | ||
| 5 | - width="70%" | ||
| 6 | - :before-close="handleClose" | ||
| 7 | - > | 2 | + <el-dialog :title="$t('roomCreateFeeAdd.title')" :visible.sync="visible" width="40%" :before-close="handleClose"> |
| 8 | <el-form ref="form" :model="formData" label-width="120px"> | 3 | <el-form ref="form" :model="formData" label-width="120px"> |
| 9 | <el-form-item :label="$t('roomCreateFeeAdd.location')"> | 4 | <el-form-item :label="$t('roomCreateFeeAdd.location')"> |
| 10 | - <el-input | ||
| 11 | - v-model="formData.locationTypeCdName" | ||
| 12 | - disabled | ||
| 13 | - :placeholder="$t('roomCreateFeeAdd.locationPlaceholder')" | ||
| 14 | - ></el-input> | 5 | + <el-input v-model="formData.locationTypeCdName" disabled |
| 6 | + :placeholder="$t('roomCreateFeeAdd.locationPlaceholder')"></el-input> | ||
| 15 | </el-form-item> | 7 | </el-form-item> |
| 16 | - | 8 | + |
| 17 | <el-form-item :label="$t('roomCreateFeeAdd.feeType')" prop="feeTypeCd"> | 9 | <el-form-item :label="$t('roomCreateFeeAdd.feeType')" prop="feeTypeCd"> |
| 18 | - <el-select | ||
| 19 | - v-model="formData.feeTypeCd" | ||
| 20 | - @change="handleFeeTypeChange" | ||
| 21 | - :placeholder="$t('roomCreateFeeAdd.feeTypePlaceholder')" | ||
| 22 | - style="width: 100%" | ||
| 23 | - > | 10 | + <el-select v-model="formData.feeTypeCd" @change="handleFeeTypeChange" |
| 11 | + :placeholder="$t('roomCreateFeeAdd.feeTypePlaceholder')" style="width: 100%"> | ||
| 24 | <template v-for="item in feeTypeOptions"> | 12 | <template v-for="item in feeTypeOptions"> |
| 25 | - <el-option | ||
| 26 | - v-if="item.statusCd !='888800010017'" | ||
| 27 | - :key="item.statusCd" | ||
| 28 | - :label="item.name" | ||
| 29 | - :value="item.statusCd" | ||
| 30 | - ></el-option> | 13 | + <el-option v-if="item.statusCd != '888800010017'" :key="item.statusCd" :label="item.name" |
| 14 | + :value="item.statusCd"></el-option> | ||
| 31 | </template> | 15 | </template> |
| 32 | </el-select> | 16 | </el-select> |
| 33 | </el-form-item> | 17 | </el-form-item> |
| 34 | 18 | ||
| 35 | - <el-form-item | ||
| 36 | - v-if="formData.feeTypeCd" | ||
| 37 | - :label="$t('roomCreateFeeAdd.feeItem')" | ||
| 38 | - prop="configId" | ||
| 39 | - > | ||
| 40 | - <el-select | ||
| 41 | - v-model="formData.configId" | ||
| 42 | - @change="handleConfigChange" | ||
| 43 | - :placeholder="$t('roomCreateFeeAdd.feeItemPlaceholder')" | ||
| 44 | - style="width: 100%" | ||
| 45 | - > | ||
| 46 | - <el-option | ||
| 47 | - v-for="item in feeConfigOptions" | ||
| 48 | - :key="item.configId" | ||
| 49 | - :label="item.feeName" | ||
| 50 | - :value="item.configId" | ||
| 51 | - ></el-option> | 19 | + <el-form-item v-if="formData.feeTypeCd" :label="$t('roomCreateFeeAdd.feeItem')" prop="configId"> |
| 20 | + <el-select v-model="formData.configId" @change="handleConfigChange" | ||
| 21 | + :placeholder="$t('roomCreateFeeAdd.feeItemPlaceholder')" style="width: 100%"> | ||
| 22 | + <el-option v-for="item in feeConfigOptions" :key="item.configId" :label="item.feeName" | ||
| 23 | + :value="item.configId"></el-option> | ||
| 52 | </el-select> | 24 | </el-select> |
| 53 | </el-form-item> | 25 | </el-form-item> |
| 54 | 26 | ||
| 55 | - <el-form-item | ||
| 56 | - v-if="formData.computingFormula == '4004'" | ||
| 57 | - :label="$t('roomCreateFeeAdd.amount')" | ||
| 58 | - prop="amount" | ||
| 59 | - > | ||
| 60 | - <el-input | ||
| 61 | - v-model="formData.amount" | ||
| 62 | - :placeholder="$t('roomCreateFeeAdd.amountPlaceholder')" | ||
| 63 | - ></el-input> | 27 | + <el-form-item v-if="formData.computingFormula == '4004'" :label="$t('roomCreateFeeAdd.amount')" prop="amount"> |
| 28 | + <el-input v-model="formData.amount" :placeholder="$t('roomCreateFeeAdd.amountPlaceholder')"></el-input> | ||
| 64 | </el-form-item> | 29 | </el-form-item> |
| 65 | 30 | ||
| 66 | <el-form-item :label="$t('roomCreateFeeAdd.startTime')" prop="startTime"> | 31 | <el-form-item :label="$t('roomCreateFeeAdd.startTime')" prop="startTime"> |
| 67 | - <el-date-picker | ||
| 68 | - v-model="formData.startTime" | ||
| 69 | - type="date" | ||
| 70 | - :placeholder="$t('roomCreateFeeAdd.startTimePlaceholder')" | ||
| 71 | - value-format="yyyy-MM-dd" | ||
| 72 | - @change="validateStartTime" | ||
| 73 | - ></el-date-picker> | 32 | + <el-date-picker v-model="formData.startTime" type="date" |
| 33 | + :placeholder="$t('roomCreateFeeAdd.startTimePlaceholder')" value-format="yyyy-MM-dd" | ||
| 34 | + @change="validateStartTime"></el-date-picker> | ||
| 74 | </el-form-item> | 35 | </el-form-item> |
| 75 | 36 | ||
| 76 | <el-form-item :label="$t('roomCreateFeeAdd.endTime')" prop="endTime"> | 37 | <el-form-item :label="$t('roomCreateFeeAdd.endTime')" prop="endTime"> |
| 77 | - <el-date-picker | ||
| 78 | - v-model="formData.endTime" | ||
| 79 | - type="date" | ||
| 80 | - :placeholder="$t('roomCreateFeeAdd.endTimePlaceholder')" | ||
| 81 | - value-format="yyyy-MM-dd" | ||
| 82 | - @change="validateEndTime" | ||
| 83 | - ></el-date-picker> | 38 | + <el-date-picker v-model="formData.endTime" type="date" :placeholder="$t('roomCreateFeeAdd.endTimePlaceholder')" |
| 39 | + value-format="yyyy-MM-dd" @change="validateEndTime"></el-date-picker> | ||
| 84 | </el-form-item> | 40 | </el-form-item> |
| 85 | 41 | ||
| 86 | - <el-form-item | ||
| 87 | - v-show="formData.computingFormula == '1102'" | ||
| 88 | - :label="$t('roomCreateFeeAdd.rateCycle')" | ||
| 89 | - prop="rateCycle" | ||
| 90 | - > | ||
| 91 | - <el-input | ||
| 92 | - v-model="formData.rateCycle" | ||
| 93 | - :placeholder="$t('roomCreateFeeAdd.rateCyclePlaceholder')" | ||
| 94 | - ></el-input> | 42 | + <el-form-item v-show="formData.computingFormula == '1102'" :label="$t('roomCreateFeeAdd.rateCycle')" |
| 43 | + prop="rateCycle"> | ||
| 44 | + <el-input v-model="formData.rateCycle" :placeholder="$t('roomCreateFeeAdd.rateCyclePlaceholder')"></el-input> | ||
| 95 | </el-form-item> | 45 | </el-form-item> |
| 96 | 46 | ||
| 97 | - <el-form-item | ||
| 98 | - v-show="formData.computingFormula == '1102'" | ||
| 99 | - :label="$t('roomCreateFeeAdd.rate')" | ||
| 100 | - prop="rate" | ||
| 101 | - > | ||
| 102 | - <el-input | ||
| 103 | - v-model="formData.rate" | ||
| 104 | - :placeholder="$t('roomCreateFeeAdd.ratePlaceholder')" | ||
| 105 | - ></el-input> | 47 | + <el-form-item v-show="formData.computingFormula == '1102'" :label="$t('roomCreateFeeAdd.rate')" prop="rate"> |
| 48 | + <el-input v-model="formData.rate" :placeholder="$t('roomCreateFeeAdd.ratePlaceholder')"></el-input> | ||
| 106 | </el-form-item> | 49 | </el-form-item> |
| 107 | 50 | ||
| 108 | - <el-form-item | ||
| 109 | - v-show="formData.computingFormula == '1102'" | ||
| 110 | - :label="$t('roomCreateFeeAdd.rateStartTime')" | ||
| 111 | - prop="rateStartTime" | ||
| 112 | - > | ||
| 113 | - <el-date-picker | ||
| 114 | - v-model="formData.rateStartTime" | ||
| 115 | - type="date" | ||
| 116 | - :placeholder="$t('roomCreateFeeAdd.rateStartTimePlaceholder')" | ||
| 117 | - value-format="yyyy-MM-dd" | ||
| 118 | - ></el-date-picker> | 51 | + <el-form-item v-show="formData.computingFormula == '1102'" :label="$t('roomCreateFeeAdd.rateStartTime')" |
| 52 | + prop="rateStartTime"> | ||
| 53 | + <el-date-picker v-model="formData.rateStartTime" type="date" | ||
| 54 | + :placeholder="$t('roomCreateFeeAdd.rateStartTimePlaceholder')" value-format="yyyy-MM-dd"></el-date-picker> | ||
| 119 | </el-form-item> | 55 | </el-form-item> |
| 120 | </el-form> | 56 | </el-form> |
| 121 | 57 | ||
| @@ -175,38 +111,38 @@ export default { | @@ -175,38 +111,38 @@ export default { | ||
| 175 | this.resetForm() | 111 | this.resetForm() |
| 176 | this.formData.locationObjId = room.roomId | 112 | this.formData.locationObjId = room.roomId |
| 177 | this.formData.locationTypeCdName = `${room.floorNum}-${room.unitNum}-${room.roomNum}(${room.ownerName})` | 113 | this.formData.locationTypeCdName = `${room.floorNum}-${room.unitNum}-${room.roomNum}(${room.ownerName})` |
| 178 | - | 114 | + |
| 179 | if (room.roomName) { | 115 | if (room.roomName) { |
| 180 | this.formData.locationTypeCdName = room.roomName | 116 | this.formData.locationTypeCdName = room.roomName |
| 181 | } | 117 | } |
| 182 | - | 118 | + |
| 183 | this.formData.roomType = room.roomType | 119 | this.formData.roomType = room.roomType |
| 184 | if (room.roomType === '2020602') { | 120 | if (room.roomType === '2020602') { |
| 185 | this.formData.locationTypeCdName = `${room.floorNum}-${room.roomNum}(${room.ownerName})` | 121 | this.formData.locationTypeCdName = `${room.floorNum}-${room.roomNum}(${room.ownerName})` |
| 186 | } | 122 | } |
| 187 | - | 123 | + |
| 188 | this.loadFeeTypes() | 124 | this.loadFeeTypes() |
| 189 | this.visible = true | 125 | this.visible = true |
| 190 | }, | 126 | }, |
| 191 | - | 127 | + |
| 192 | loadFeeTypes() { | 128 | loadFeeTypes() { |
| 193 | getDict('pay_fee_config', 'fee_type_cd').then(data => { | 129 | getDict('pay_fee_config', 'fee_type_cd').then(data => { |
| 194 | - this.feeTypeOptions = data.filter(item => | 130 | + this.feeTypeOptions = data.filter(item => |
| 195 | item.statusCd !== '888800010015' && item.statusCd !== '888800010016' | 131 | item.statusCd !== '888800010015' && item.statusCd !== '888800010016' |
| 196 | ) | 132 | ) |
| 197 | }) | 133 | }) |
| 198 | }, | 134 | }, |
| 199 | - | 135 | + |
| 200 | handleFeeTypeChange(value) { | 136 | handleFeeTypeChange(value) { |
| 201 | if (value === '888800010006' || value === '888800010014') { | 137 | if (value === '888800010006' || value === '888800010014') { |
| 202 | this.formData.startTime = this.$dayjs().format('YYYY-MM-DD') | 138 | this.formData.startTime = this.$dayjs().format('YYYY-MM-DD') |
| 203 | this.formData.endTime = this.$dayjs().add(1, 'month').format('YYYY-MM-DD') | 139 | this.formData.endTime = this.$dayjs().add(1, 'month').format('YYYY-MM-DD') |
| 204 | } | 140 | } |
| 205 | - | 141 | + |
| 206 | this.formData.configId = '' | 142 | this.formData.configId = '' |
| 207 | this.loadFeeConfigs(value) | 143 | this.loadFeeConfigs(value) |
| 208 | }, | 144 | }, |
| 209 | - | 145 | + |
| 210 | loadFeeConfigs(feeTypeCd) { | 146 | loadFeeConfigs(feeTypeCd) { |
| 211 | listFeeConfigs({ | 147 | listFeeConfigs({ |
| 212 | page: 1, | 148 | page: 1, |
| @@ -216,24 +152,24 @@ export default { | @@ -216,24 +152,24 @@ export default { | ||
| 216 | isDefault: 'F', | 152 | isDefault: 'F', |
| 217 | state: 'Y' | 153 | state: 'Y' |
| 218 | }).then(response => { | 154 | }).then(response => { |
| 219 | - this.feeConfigOptions = response.data.feeConfigs | 155 | + this.feeConfigOptions = response.feeConfigs |
| 220 | }) | 156 | }) |
| 221 | }, | 157 | }, |
| 222 | - | 158 | + |
| 223 | handleConfigChange(configId) { | 159 | handleConfigChange(configId) { |
| 224 | - if (this.formData.feeTypeCd !== '888800010006' && | ||
| 225 | - this.formData.feeTypeCd !== '888800010014' && | ||
| 226 | - this.formData.feeFlag === '1003006') { | 160 | + if (this.formData.feeTypeCd !== '888800010006' && |
| 161 | + this.formData.feeTypeCd !== '888800010014' && | ||
| 162 | + this.formData.feeFlag === '1003006') { | ||
| 227 | this.formData.endTime = '' | 163 | this.formData.endTime = '' |
| 228 | } | 164 | } |
| 229 | - | 165 | + |
| 230 | const config = this.feeConfigOptions.find(item => item.configId === configId) | 166 | const config = this.feeConfigOptions.find(item => item.configId === configId) |
| 231 | if (config) { | 167 | if (config) { |
| 232 | this.formData.feeFlag = config.feeFlag | 168 | this.formData.feeFlag = config.feeFlag |
| 233 | this.formData.computingFormula = config.computingFormula | 169 | this.formData.computingFormula = config.computingFormula |
| 234 | } | 170 | } |
| 235 | }, | 171 | }, |
| 236 | - | 172 | + |
| 237 | validateStartTime(value) { | 173 | validateStartTime(value) { |
| 238 | if (!this.formData.feeFlag && !this.formData.feeTypeCd) { | 174 | if (!this.formData.feeFlag && !this.formData.feeTypeCd) { |
| 239 | const start = new Date(value) | 175 | const start = new Date(value) |
| @@ -244,7 +180,7 @@ export default { | @@ -244,7 +180,7 @@ export default { | ||
| 244 | } | 180 | } |
| 245 | } | 181 | } |
| 246 | }, | 182 | }, |
| 247 | - | 183 | + |
| 248 | validateEndTime(value) { | 184 | validateEndTime(value) { |
| 249 | const start = new Date(this.formData.startTime) | 185 | const start = new Date(this.formData.startTime) |
| 250 | const end = new Date(value) | 186 | const end = new Date(value) |
| @@ -253,23 +189,23 @@ export default { | @@ -253,23 +189,23 @@ export default { | ||
| 253 | this.formData.endTime = '' | 189 | this.formData.endTime = '' |
| 254 | } | 190 | } |
| 255 | }, | 191 | }, |
| 256 | - | 192 | + |
| 257 | handleSubmit() { | 193 | handleSubmit() { |
| 258 | this.$refs.form.validate(valid => { | 194 | this.$refs.form.validate(valid => { |
| 259 | if (!valid) return | 195 | if (!valid) return |
| 260 | - | 196 | + |
| 261 | if (this.formData.feeTypeCd !== '888800010006' && this.formData.feeFlag !== '1003006') { | 197 | if (this.formData.feeTypeCd !== '888800010006' && this.formData.feeFlag !== '1003006') { |
| 262 | if (!this.formData.endTime) { | 198 | if (!this.formData.endTime) { |
| 263 | this.$message.error(this.$t('roomCreateFeeAdd.validate.endTimeRequired')) | 199 | this.$message.error(this.$t('roomCreateFeeAdd.validate.endTimeRequired')) |
| 264 | return | 200 | return |
| 265 | } | 201 | } |
| 266 | } | 202 | } |
| 267 | - | 203 | + |
| 268 | const params = { | 204 | const params = { |
| 269 | ...this.formData, | 205 | ...this.formData, |
| 270 | communityId: getCommunityId() | 206 | communityId: getCommunityId() |
| 271 | } | 207 | } |
| 272 | - | 208 | + |
| 273 | saveRoomCreateFee(params).then(() => { | 209 | saveRoomCreateFee(params).then(() => { |
| 274 | this.$message.success(this.$t('roomCreateFeeAdd.successMessage')) | 210 | this.$message.success(this.$t('roomCreateFeeAdd.successMessage')) |
| 275 | this.$emit('success') | 211 | this.$emit('success') |
| @@ -279,7 +215,7 @@ export default { | @@ -279,7 +215,7 @@ export default { | ||
| 279 | }) | 215 | }) |
| 280 | }) | 216 | }) |
| 281 | }, | 217 | }, |
| 282 | - | 218 | + |
| 283 | resetForm() { | 219 | resetForm() { |
| 284 | if (this.$refs.form) { | 220 | if (this.$refs.form) { |
| 285 | this.$refs.form.resetFields() | 221 | this.$refs.form.resetFields() |
| @@ -302,11 +238,23 @@ export default { | @@ -302,11 +238,23 @@ export default { | ||
| 302 | feeFlag: '' | 238 | feeFlag: '' |
| 303 | } | 239 | } |
| 304 | }, | 240 | }, |
| 305 | - | 241 | + |
| 306 | handleClose() { | 242 | handleClose() { |
| 307 | this.visible = false | 243 | this.visible = false |
| 308 | this.resetForm() | 244 | this.resetForm() |
| 309 | } | 245 | } |
| 310 | } | 246 | } |
| 311 | } | 247 | } |
| 312 | -</script> | ||
| 313 | \ No newline at end of file | 248 | \ No newline at end of file |
| 249 | +</script> | ||
| 250 | +<style scoped> | ||
| 251 | +.el-form-item{ | ||
| 252 | + width: 90%; | ||
| 253 | + text-align: left; | ||
| 254 | +} | ||
| 255 | +.el-select{ | ||
| 256 | + width: 100%; | ||
| 257 | +} | ||
| 258 | +.el-date-editor{ | ||
| 259 | + width: 100%; | ||
| 260 | +} | ||
| 261 | +</style> | ||
| 314 | \ No newline at end of file | 262 | \ No newline at end of file |
src/components/fee/simplifyRoomFee.vue
| @@ -259,9 +259,13 @@ | @@ -259,9 +259,13 @@ | ||
| 259 | </el-col> | 259 | </el-col> |
| 260 | </el-row> | 260 | </el-row> |
| 261 | <!-- Modal Components --> | 261 | <!-- Modal Components --> |
| 262 | - <delete-fee ref="deleteFee"></delete-fee> | ||
| 263 | - <edit-fee ref="editFee"></edit-fee> | ||
| 264 | - <temp-import-room-fee ref="tempImportRoomFee"></temp-import-room-fee> | 262 | + <delete-fee ref="deleteFee" @success="handleNotify"></delete-fee> |
| 263 | + <edit-fee ref="editFee" @success="handleNotify"></edit-fee> | ||
| 264 | + <temp-import-room-fee ref="tempImportRoomFee" @success="handleNotify"></temp-import-room-fee> | ||
| 265 | + <room-create-fee-add ref="roomCreateFeeAdd" @success="handleNotify"></room-create-fee-add> | ||
| 266 | + <add-meter-water ref="addMeterWater" @success="handleNotify"></add-meter-water> | ||
| 267 | + <add-proxy-fee ref="addProxyFee" @success="handleNotify"></add-proxy-fee> | ||
| 268 | + | ||
| 265 | </div> | 269 | </div> |
| 266 | </template> | 270 | </template> |
| 267 | 271 | ||
| @@ -274,6 +278,9 @@ import TempImportRoomFee from './tempImportRoomFee' | @@ -274,6 +278,9 @@ import TempImportRoomFee from './tempImportRoomFee' | ||
| 274 | import { dateFormat } from '@/utils/dateUtil' | 278 | import { dateFormat } from '@/utils/dateUtil' |
| 275 | import DeleteFee from '@/components/fee/deleteFee' | 279 | import DeleteFee from '@/components/fee/deleteFee' |
| 276 | import EditFee from '@/components/fee/editFee' | 280 | import EditFee from '@/components/fee/editFee' |
| 281 | +import RoomCreateFeeAdd from '@/components/fee/roomCreateFeeAdd' | ||
| 282 | +import AddMeterWater from '@/components/fee/addMeterWater' | ||
| 283 | +import AddProxyFee from '@/components/fee/addProxyFee' | ||
| 277 | 284 | ||
| 278 | export default { | 285 | export default { |
| 279 | name: 'SimplifyRoomFee', | 286 | name: 'SimplifyRoomFee', |
| @@ -281,6 +288,9 @@ export default { | @@ -281,6 +288,9 @@ export default { | ||
| 281 | TempImportRoomFee, | 288 | TempImportRoomFee, |
| 282 | DeleteFee, | 289 | DeleteFee, |
| 283 | EditFee, | 290 | EditFee, |
| 291 | + RoomCreateFeeAdd, | ||
| 292 | + AddMeterWater, | ||
| 293 | + AddProxyFee, | ||
| 284 | }, | 294 | }, |
| 285 | data() { | 295 | data() { |
| 286 | return { | 296 | return { |
| @@ -395,18 +405,19 @@ export default { | @@ -395,18 +405,19 @@ export default { | ||
| 395 | }, | 405 | }, |
| 396 | openRoomCreateFeeAddModal() { | 406 | openRoomCreateFeeAddModal() { |
| 397 | this.simplifyRoomFeeInfo.ownerName = this.simplifyRoomFeeInfo.name | 407 | this.simplifyRoomFeeInfo.ownerName = this.simplifyRoomFeeInfo.name |
| 398 | - this.$emit('openRoomCreateFeeAddModal', { | 408 | + this.$refs.roomCreateFeeAdd.open({ |
| 399 | isMore: false, | 409 | isMore: false, |
| 400 | - room: this.simplifyRoomFeeInfo, | 410 | + roomId: this.simplifyRoomFeeInfo.roomId, |
| 411 | + roomName: this.simplifyRoomFeeInfo.roomName, | ||
| 401 | ownerName: this.simplifyRoomFeeInfo.name | 412 | ownerName: this.simplifyRoomFeeInfo.name |
| 402 | }) | 413 | }) |
| 403 | }, | 414 | }, |
| 404 | openAddMeterWaterSimplifyModal() { | 415 | openAddMeterWaterSimplifyModal() { |
| 405 | - this.$emit('openAddMeterWaterModal', { | 416 | + this.$refs.addMeterWater.open({ |
| 406 | roomId: this.simplifyRoomFeeInfo.roomId, | 417 | roomId: this.simplifyRoomFeeInfo.roomId, |
| 407 | roomName: this.simplifyRoomFeeInfo.roomName, | 418 | roomName: this.simplifyRoomFeeInfo.roomName, |
| 408 | ownerName: this.simplifyRoomFeeInfo.name | 419 | ownerName: this.simplifyRoomFeeInfo.name |
| 409 | - }) | 420 | + }); |
| 410 | }, | 421 | }, |
| 411 | getAttrValue(attrs, specCd) { | 422 | getAttrValue(attrs, specCd) { |
| 412 | const attr = attrs.find(item => item.specCd === specCd) | 423 | const attr = attrs.find(item => item.specCd === specCd) |
| @@ -422,7 +433,7 @@ export default { | @@ -422,7 +433,7 @@ export default { | ||
| 422 | return dateFormat(fee.endTime) | 433 | return dateFormat(fee.endTime) |
| 423 | }, | 434 | }, |
| 424 | openProxyFeeModal() { | 435 | openProxyFeeModal() { |
| 425 | - this.$emit('openAddProxyFeeModal', { | 436 | + this.$refs.addProxyFee.open({ |
| 426 | roomId: this.simplifyRoomFeeInfo.roomId, | 437 | roomId: this.simplifyRoomFeeInfo.roomId, |
| 427 | roomName: this.simplifyRoomFeeInfo.roomName, | 438 | roomName: this.simplifyRoomFeeInfo.roomName, |
| 428 | ownerName: this.simplifyRoomFeeInfo.name | 439 | ownerName: this.simplifyRoomFeeInfo.name |
src/components/fee/tempImportRoomFee.vue
| 1 | <template> | 1 | <template> |
| 2 | - <el-dialog | ||
| 3 | - :title="$t('tempImportRoomFee.title')" | ||
| 4 | - :visible.sync="dialogVisible" | ||
| 5 | - width="70%" | ||
| 6 | - @close="clearTempImportRoomFeeInfo" | ||
| 7 | - > | ||
| 8 | - <el-form :model="form" label-width="120px"> | 2 | + <el-dialog :title="$t('tempImportRoomFee.title')" :visible.sync="dialogVisible" width="40%" |
| 3 | + @close="clearTempImportRoomFeeInfo"> | ||
| 4 | + <el-form :model="form" label-width="120px" class="text-left"> | ||
| 9 | <el-form-item :label="$t('tempImportRoomFee.feeType')"> | 5 | <el-form-item :label="$t('tempImportRoomFee.feeType')"> |
| 10 | - <el-select | ||
| 11 | - v-model="form.feeTypeCd" | ||
| 12 | - @change="changeFeeTypeCd" | ||
| 13 | - :placeholder="$t('tempImportRoomFee.selectFeeType')" | ||
| 14 | - > | ||
| 15 | - <el-option | ||
| 16 | - v-for="(item,index) in feeTypeCds" | ||
| 17 | - :key="index" | ||
| 18 | - :label="item.name" | ||
| 19 | - :value="item.statusCd" | ||
| 20 | - ></el-option> | 6 | + <el-select v-model="form.feeTypeCd" @change="changeFeeTypeCd" |
| 7 | + :placeholder="$t('tempImportRoomFee.selectFeeType')"> | ||
| 8 | + <el-option v-for="(item, index) in feeTypeCds" :key="index" :label="item.name" | ||
| 9 | + :value="item.statusCd"></el-option> | ||
| 21 | </el-select> | 10 | </el-select> |
| 22 | </el-form-item> | 11 | </el-form-item> |
| 23 | - | 12 | + |
| 24 | <el-form-item :label="$t('tempImportRoomFee.feeObj')"> | 13 | <el-form-item :label="$t('tempImportRoomFee.feeObj')"> |
| 25 | - <el-input | ||
| 26 | - v-model="form.objName" | ||
| 27 | - disabled | ||
| 28 | - :placeholder="$t('tempImportRoomFee.inputFeeObj')" | ||
| 29 | - ></el-input> | 14 | + <el-input v-model="form.objName" disabled :placeholder="$t('tempImportRoomFee.inputFeeObj')"></el-input> |
| 30 | </el-form-item> | 15 | </el-form-item> |
| 31 | 16 | ||
| 32 | <el-form-item :label="$t('tempImportRoomFee.feeName')" v-if="form.feeNameFlag === 'S'"> | 17 | <el-form-item :label="$t('tempImportRoomFee.feeName')" v-if="form.feeNameFlag === 'S'"> |
| 33 | - <el-select | ||
| 34 | - v-model="form.configId" | ||
| 35 | - :placeholder="$t('tempImportRoomFee.selectFeeItem')" | ||
| 36 | - > | ||
| 37 | - <el-option | ||
| 38 | - v-for="(item,index) in feeConfigs" | ||
| 39 | - :key="index" | ||
| 40 | - :label="item.feeName" | ||
| 41 | - :value="item.configId" | ||
| 42 | - ></el-option> | 18 | + <el-select v-model="form.configId" :placeholder="$t('tempImportRoomFee.selectFeeItem')"> |
| 19 | + <el-option v-for="(item, index) in feeConfigs" :key="index" :label="item.feeName" | ||
| 20 | + :value="item.configId"></el-option> | ||
| 43 | </el-select> | 21 | </el-select> |
| 44 | - <span>{{$t('tempImportRoomFee.feeItemDesc')}}</span> | 22 | + <span>{{ $t('tempImportRoomFee.feeItemDesc') }}</span> |
| 45 | </el-form-item> | 23 | </el-form-item> |
| 46 | 24 | ||
| 47 | <el-form-item :label="$t('tempImportRoomFee.feeName')" v-else> | 25 | <el-form-item :label="$t('tempImportRoomFee.feeName')" v-else> |
| 48 | <el-col :span="18"> | 26 | <el-col :span="18"> |
| 49 | - <el-input | ||
| 50 | - v-model="form.feeName" | ||
| 51 | - :placeholder="$t('tempImportRoomFee.inputFeeName')" | ||
| 52 | - ></el-input> | 27 | + <el-input v-model="form.feeName" :placeholder="$t('tempImportRoomFee.inputFeeName')"></el-input> |
| 53 | </el-col> | 28 | </el-col> |
| 54 | <el-col :span="6"> | 29 | <el-col :span="6"> |
| 55 | - <el-button @click="toggleFeeNameFlag">{{$t('tempImportRoomFee.select')}}</el-button> | 30 | + <el-button @click="toggleFeeNameFlag">{{ $t('tempImportRoomFee.select') }}</el-button> |
| 56 | </el-col> | 31 | </el-col> |
| 57 | </el-form-item> | 32 | </el-form-item> |
| 58 | 33 | ||
| 59 | <el-form-item :label="$t('tempImportRoomFee.amount')"> | 34 | <el-form-item :label="$t('tempImportRoomFee.amount')"> |
| 60 | - <el-input | ||
| 61 | - v-model="form.amount" | ||
| 62 | - :placeholder="$t('tempImportRoomFee.inputAmount')" | ||
| 63 | - ></el-input> | 35 | + <el-input v-model="form.amount" :placeholder="$t('tempImportRoomFee.inputAmount')"></el-input> |
| 64 | </el-form-item> | 36 | </el-form-item> |
| 65 | 37 | ||
| 66 | <el-form-item :label="$t('tempImportRoomFee.startTime')"> | 38 | <el-form-item :label="$t('tempImportRoomFee.startTime')"> |
| 67 | - <el-date-picker | ||
| 68 | - v-model="form.startTime" | ||
| 69 | - type="datetime" | ||
| 70 | - :placeholder="$t('tempImportRoomFee.selectStartTime')" | ||
| 71 | - value-format="yyyy-MM-dd HH:mm:ss" | ||
| 72 | - ></el-date-picker> | 39 | + <el-date-picker v-model="form.startTime" type="datetime" :placeholder="$t('tempImportRoomFee.selectStartTime')" |
| 40 | + value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> | ||
| 73 | </el-form-item> | 41 | </el-form-item> |
| 74 | 42 | ||
| 75 | <el-form-item :label="$t('tempImportRoomFee.endTime')"> | 43 | <el-form-item :label="$t('tempImportRoomFee.endTime')"> |
| 76 | - <el-date-picker | ||
| 77 | - v-model="form.endTime" | ||
| 78 | - type="datetime" | ||
| 79 | - :placeholder="$t('tempImportRoomFee.selectEndTime')" | ||
| 80 | - value-format="yyyy-MM-dd HH:mm:ss" | ||
| 81 | - ></el-date-picker> | 44 | + <el-date-picker v-model="form.endTime" type="datetime" :placeholder="$t('tempImportRoomFee.selectEndTime')" |
| 45 | + value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> | ||
| 82 | </el-form-item> | 46 | </el-form-item> |
| 83 | </el-form> | 47 | </el-form> |
| 84 | 48 | ||
| 85 | <div slot="footer" class="dialog-footer"> | 49 | <div slot="footer" class="dialog-footer"> |
| 86 | - <el-button @click="dialogVisible = false">{{$t('tempImportRoomFee.cancel')}}</el-button> | ||
| 87 | - <el-button type="primary" @click="saveTempImportFeeInfo">{{$t('tempImportRoomFee.submit')}}</el-button> | 50 | + <el-button @click="dialogVisible = false">{{ $t('tempImportRoomFee.cancel') }}</el-button> |
| 51 | + <el-button type="primary" @click="saveTempImportFeeInfo">{{ $t('tempImportRoomFee.submit') }}</el-button> | ||
| 88 | </div> | 52 | </div> |
| 89 | </el-dialog> | 53 | </el-dialog> |
| 90 | </template> | 54 | </template> |
| @@ -191,7 +155,7 @@ export default { | @@ -191,7 +155,7 @@ export default { | ||
| 191 | }, | 155 | }, |
| 192 | async saveTempImportFeeInfo() { | 156 | async saveTempImportFeeInfo() { |
| 193 | if (!this.validateForm()) return | 157 | if (!this.validateForm()) return |
| 194 | - | 158 | + |
| 195 | try { | 159 | try { |
| 196 | const res = await importTempData({ | 160 | const res = await importTempData({ |
| 197 | ...this.form, | 161 | ...this.form, |
| @@ -240,4 +204,12 @@ export default { | @@ -240,4 +204,12 @@ export default { | ||
| 240 | } | 204 | } |
| 241 | } | 205 | } |
| 242 | } | 206 | } |
| 243 | -</script> | ||
| 244 | \ No newline at end of file | 207 | \ No newline at end of file |
| 208 | +</script> | ||
| 209 | +<style scoped> | ||
| 210 | +.el-form-item{ | ||
| 211 | + width: 90%; | ||
| 212 | +} | ||
| 213 | +.el-date-editor{ | ||
| 214 | + width: 100%; | ||
| 215 | +} | ||
| 216 | +</style> | ||
| 245 | \ No newline at end of file | 217 | \ No newline at end of file |
src/components/fee/viewMainFee.vue
| 1 | <template> | 1 | <template> |
| 2 | <el-card class="box-card"> | 2 | <el-card class="box-card"> |
| 3 | - <div slot="header" class="clearfix"> | 3 | + <div slot="header" class="flex justify-between"> |
| 4 | <span>{{ $t('viewMainFee.feeInfo') }}</span> | 4 | <span>{{ $t('viewMainFee.feeInfo') }}</span> |
| 5 | - <el-button | ||
| 6 | - type="primary" | ||
| 7 | - size="small" | ||
| 8 | - style="float: right; margin-left: 10px;" | ||
| 9 | - @click="_openCallBackOwner" | ||
| 10 | - > | 5 | + <el-button type="primary" size="small" style="float: right; margin-left: 10px;" @click="_openCallBackOwner"> |
| 11 | {{ $t('common.back') }} | 6 | {{ $t('common.back') }} |
| 12 | </el-button> | 7 | </el-button> |
| 13 | </div> | 8 | </div> |
| 14 | - | ||
| 15 | - <el-row :gutter="20"> | 9 | + |
| 10 | + <el-row :gutter="20" class="text-left"> | ||
| 16 | <el-col :span="6"> | 11 | <el-col :span="6"> |
| 17 | <div class="form-item"> | 12 | <div class="form-item"> |
| 18 | - <label>{{ $t('viewMainFee.feeId') }}</label> | 13 | + <label>{{ $t('viewMainFee.feeId') }}:</label> |
| 19 | <div>{{ mainFeeInfo.feeId }}</div> | 14 | <div>{{ mainFeeInfo.feeId }}</div> |
| 20 | </div> | 15 | </div> |
| 21 | </el-col> | 16 | </el-col> |
| 22 | <el-col :span="6"> | 17 | <el-col :span="6"> |
| 23 | <div class="form-item"> | 18 | <div class="form-item"> |
| 24 | - <label>{{ $t('viewMainFee.feeFlag') }}</label> | 19 | + <label>{{ $t('viewMainFee.feeFlag') }}:</label> |
| 25 | <div>{{ mainFeeInfo.feeFlagName }}</div> | 20 | <div>{{ mainFeeInfo.feeFlagName }}</div> |
| 26 | </div> | 21 | </div> |
| 27 | </el-col> | 22 | </el-col> |
| 28 | <el-col :span="6"> | 23 | <el-col :span="6"> |
| 29 | <div class="form-item"> | 24 | <div class="form-item"> |
| 30 | - <label>{{ $t('viewMainFee.feeType') }}</label> | 25 | + <label>{{ $t('viewMainFee.feeType') }}:</label> |
| 31 | <div>{{ mainFeeInfo.feeTypeCdName }}</div> | 26 | <div>{{ mainFeeInfo.feeTypeCdName }}</div> |
| 32 | </div> | 27 | </div> |
| 33 | </el-col> | 28 | </el-col> |
| 34 | <el-col :span="6"> | 29 | <el-col :span="6"> |
| 35 | <div class="form-item"> | 30 | <div class="form-item"> |
| 36 | - <label>{{ $t('viewMainFee.payerObj') }}</label> | 31 | + <label>{{ $t('viewMainFee.payerObj') }}:</label> |
| 37 | <div> | 32 | <div> |
| 38 | {{ mainFeeInfo.payerObjName }} | 33 | {{ mainFeeInfo.payerObjName }} |
| 39 | - <view-room-data | ||
| 40 | - v-if="mainFeeInfo.payerObjType == '3333'" | ||
| 41 | - ref="viewRoomData" | ||
| 42 | - /> | 34 | + <view-room-data v-if="mainFeeInfo.payerObjType == '3333'" ref="viewRoomData" /> |
| 43 | </div> | 35 | </div> |
| 44 | </div> | 36 | </div> |
| 45 | </el-col> | 37 | </el-col> |
| 46 | - | 38 | + |
| 47 | <el-col :span="6"> | 39 | <el-col :span="6"> |
| 48 | <div class="form-item"> | 40 | <div class="form-item"> |
| 49 | - <label>{{ $t('viewMainFee.feeItem') }}</label> | 41 | + <label>{{ $t('viewMainFee.feeItem') }}:</label> |
| 50 | <div class="hand" @click="_viewFeeConfig"> | 42 | <div class="hand" @click="_viewFeeConfig"> |
| 51 | {{ mainFeeInfo.feeName }} | 43 | {{ mainFeeInfo.feeName }} |
| 52 | <view-fee-config-data ref="viewFeeConfigData" /> | 44 | <view-fee-config-data ref="viewFeeConfigData" /> |
| @@ -55,43 +47,43 @@ | @@ -55,43 +47,43 @@ | ||
| 55 | </el-col> | 47 | </el-col> |
| 56 | <el-col :span="6"> | 48 | <el-col :span="6"> |
| 57 | <div class="form-item"> | 49 | <div class="form-item"> |
| 58 | - <label>{{ $t('viewMainFee.feeStatus') }}</label> | 50 | + <label>{{ $t('viewMainFee.feeStatus') }}:</label> |
| 59 | <div>{{ mainFeeInfo.stateName }}</div> | 51 | <div>{{ mainFeeInfo.stateName }}</div> |
| 60 | </div> | 52 | </div> |
| 61 | </el-col> | 53 | </el-col> |
| 62 | <el-col :span="6"> | 54 | <el-col :span="6"> |
| 63 | <div class="form-item"> | 55 | <div class="form-item"> |
| 64 | - <label>{{ $t('viewMainFee.startTime') }}</label> | 56 | + <label>{{ $t('viewMainFee.startTime') }}:</label> |
| 65 | <div>{{ mainFeeInfo.startTime }}</div> | 57 | <div>{{ mainFeeInfo.startTime }}</div> |
| 66 | </div> | 58 | </div> |
| 67 | </el-col> | 59 | </el-col> |
| 68 | <el-col :span="6"> | 60 | <el-col :span="6"> |
| 69 | <div class="form-item"> | 61 | <div class="form-item"> |
| 70 | - <label>{{ $t('viewMainFee.billingStartTime') }}</label> | 62 | + <label>{{ $t('viewMainFee.billingStartTime') }}:</label> |
| 71 | <div>{{ _getEndTime(mainFeeInfo) }}</div> | 63 | <div>{{ _getEndTime(mainFeeInfo) }}</div> |
| 72 | </div> | 64 | </div> |
| 73 | </el-col> | 65 | </el-col> |
| 74 | - | 66 | + |
| 75 | <el-col :span="6"> | 67 | <el-col :span="6"> |
| 76 | <div class="form-item"> | 68 | <div class="form-item"> |
| 77 | - <label>{{ $t('viewMainFee.billingEndTime') }}</label> | 69 | + <label>{{ $t('viewMainFee.billingEndTime') }}:</label> |
| 78 | <div>{{ _getDeadlineTime(mainFeeInfo) }}</div> | 70 | <div>{{ _getDeadlineTime(mainFeeInfo) }}</div> |
| 79 | </div> | 71 | </div> |
| 80 | </el-col> | 72 | </el-col> |
| 81 | <el-col :span="6" v-if="mainFeeInfo.amount != '-1.00'"> | 73 | <el-col :span="6" v-if="mainFeeInfo.amount != '-1.00'"> |
| 82 | <div class="form-item"> | 74 | <div class="form-item"> |
| 83 | - <label>{{ $t('viewMainFee.feeAmount') }}</label> | 75 | + <label>{{ $t('viewMainFee.feeAmount') }}:</label> |
| 84 | <div>{{ mainFeeInfo.amount }}</div> | 76 | <div>{{ mainFeeInfo.amount }}</div> |
| 85 | </div> | 77 | </div> |
| 86 | </el-col> | 78 | </el-col> |
| 87 | <el-col :span="6"> | 79 | <el-col :span="6"> |
| 88 | <div class="form-item"> | 80 | <div class="form-item"> |
| 89 | - <label>{{ $t('viewMainFee.batch') }}</label> | 81 | + <label>{{ $t('viewMainFee.batch') }}:</label> |
| 90 | <div>{{ mainFeeInfo.batchId }}</div> | 82 | <div>{{ mainFeeInfo.batchId }}</div> |
| 91 | </div> | 83 | </div> |
| 92 | </el-col> | 84 | </el-col> |
| 93 | - | ||
| 94 | - <template v-for="(item,index) in mainFeeInfo.feeAttrs"> | 85 | + |
| 86 | + <template v-for="(item, index) in mainFeeInfo.feeAttrs"> | ||
| 95 | <el-col :span="6" :key="index"> | 87 | <el-col :span="6" :key="index"> |
| 96 | <div class="form-item"> | 88 | <div class="form-item"> |
| 97 | <label>{{ item.specCdName }}:</label> | 89 | <label>{{ item.specCdName }}:</label> |
| @@ -100,32 +92,32 @@ | @@ -100,32 +92,32 @@ | ||
| 100 | </el-col> | 92 | </el-col> |
| 101 | </template> | 93 | </template> |
| 102 | </el-row> | 94 | </el-row> |
| 103 | - | 95 | + |
| 104 | <el-row :gutter="20" v-if="mainFeeInfo.payerObjType == '3333'"> | 96 | <el-row :gutter="20" v-if="mainFeeInfo.payerObjType == '3333'"> |
| 105 | <el-col :span="6"> | 97 | <el-col :span="6"> |
| 106 | <div class="form-item"> | 98 | <div class="form-item"> |
| 107 | - <label>{{ $t('viewMainFee.area') }}</label> | 99 | + <label>{{ $t('viewMainFee.area') }}:</label> |
| 108 | <div>{{ mainFeeInfo.builtUpArea }}</div> | 100 | <div>{{ mainFeeInfo.builtUpArea }}</div> |
| 109 | </div> | 101 | </div> |
| 110 | </el-col> | 102 | </el-col> |
| 111 | <el-col :span="6"> | 103 | <el-col :span="6"> |
| 112 | <div class="form-item"> | 104 | <div class="form-item"> |
| 113 | - <label>{{ $t('viewMainFee.unitPrice') }}</label> | 105 | + <label>{{ $t('viewMainFee.unitPrice') }}:</label> |
| 114 | <div>{{ mainFeeInfo.squarePrice }}</div> | 106 | <div>{{ mainFeeInfo.squarePrice }}</div> |
| 115 | </div> | 107 | </div> |
| 116 | </el-col> | 108 | </el-col> |
| 117 | <el-col :span="6"> | 109 | <el-col :span="6"> |
| 118 | <div class="form-item"> | 110 | <div class="form-item"> |
| 119 | - <label>{{ $t('viewMainFee.additionalFee') }}</label> | 111 | + <label>{{ $t('viewMainFee.additionalFee') }}:</label> |
| 120 | <div>{{ mainFeeInfo.additionalAmount }}</div> | 112 | <div>{{ mainFeeInfo.additionalAmount }}</div> |
| 121 | </div> | 113 | </div> |
| 122 | </el-col> | 114 | </el-col> |
| 123 | </el-row> | 115 | </el-row> |
| 124 | - | 116 | + |
| 125 | <el-row :gutter="20" v-else> | 117 | <el-row :gutter="20" v-else> |
| 126 | <el-col :span="6"> | 118 | <el-col :span="6"> |
| 127 | <div class="form-item"> | 119 | <div class="form-item"> |
| 128 | - <label>{{ $t('viewMainFee.fixedFee') }}</label> | 120 | + <label>{{ $t('viewMainFee.fixedFee') }}:</label> |
| 129 | <div>{{ mainFeeInfo.additionalAmount }}</div> | 121 | <div>{{ mainFeeInfo.additionalAmount }}</div> |
| 130 | </div> | 122 | </div> |
| 131 | </el-col> | 123 | </el-col> |
| @@ -201,11 +193,11 @@ export default { | @@ -201,11 +193,11 @@ export default { | ||
| 201 | page: 1, | 193 | page: 1, |
| 202 | row: 1 | 194 | row: 1 |
| 203 | }) | 195 | }) |
| 204 | - | ||
| 205 | - if (res.data && res.data.length > 0) { | ||
| 206 | - Object.assign(this.mainFeeInfo, res.data[0]) | ||
| 207 | - this.mainFeeInfo.feeAttrs = res.data[0].feeAttrs || [] | ||
| 208 | - | 196 | + |
| 197 | + if (res.fees && res.fees.length > 0) { | ||
| 198 | + Object.assign(this.mainFeeInfo, res.fees[0]) | ||
| 199 | + this.mainFeeInfo.feeAttrs = res.fees[0].feeAttrs || [] | ||
| 200 | + | ||
| 209 | if (this.mainFeeInfo.payerObjType === '3333') { | 201 | if (this.mainFeeInfo.payerObjType === '3333') { |
| 210 | this._loadRoomAndOwnerByRoomId() | 202 | this._loadRoomAndOwnerByRoomId() |
| 211 | } else if (this.mainFeeInfo.payerObjType === '6666') { | 203 | } else if (this.mainFeeInfo.payerObjType === '6666') { |
| @@ -213,7 +205,7 @@ export default { | @@ -213,7 +205,7 @@ export default { | ||
| 213 | } else { | 205 | } else { |
| 214 | this._loadContractAndOwnerByContractId() | 206 | this._loadContractAndOwnerByContractId() |
| 215 | } | 207 | } |
| 216 | - | 208 | + |
| 217 | this.$emit('listFeeDetail', { feeId: this.mainFeeInfo.feeId }) | 209 | this.$emit('listFeeDetail', { feeId: this.mainFeeInfo.feeId }) |
| 218 | } | 210 | } |
| 219 | } catch (error) { | 211 | } catch (error) { |
| @@ -256,23 +248,21 @@ export default { | @@ -256,23 +248,21 @@ export default { | ||
| 256 | 248 | ||
| 257 | <style scoped> | 249 | <style scoped> |
| 258 | .form-item { | 250 | .form-item { |
| 259 | - margin-bottom: 20px; | ||
| 260 | - | ||
| 261 | - label { | ||
| 262 | - display: block; | ||
| 263 | - margin-bottom: 5px; | ||
| 264 | - font-weight: bold; | ||
| 265 | - } | ||
| 266 | - | 251 | + display: flex; |
| 252 | + flex-direction: row; | ||
| 253 | + justify-content: flex-start; | ||
| 254 | + margin-bottom: 30px; | ||
| 255 | + align-items: center; | ||
| 256 | + | ||
| 267 | div { | 257 | div { |
| 268 | - padding: 8px 0; | 258 | + margin-left: 10px; |
| 269 | } | 259 | } |
| 270 | } | 260 | } |
| 271 | 261 | ||
| 272 | .hand { | 262 | .hand { |
| 273 | cursor: pointer; | 263 | cursor: pointer; |
| 274 | color: #409EFF; | 264 | color: #409EFF; |
| 275 | - | 265 | + |
| 276 | &:hover { | 266 | &:hover { |
| 277 | text-decoration: underline; | 267 | text-decoration: underline; |
| 278 | } | 268 | } |
src/i18n/feeI18n.js
| @@ -31,6 +31,7 @@ import { messages as payFeeOrderMessages } from '../views/fee/payFeeOrderLang' | @@ -31,6 +31,7 @@ import { messages as payFeeOrderMessages } from '../views/fee/payFeeOrderLang' | ||
| 31 | import { messages as refundDepositFeeMessages } from '../views/fee/refundDepositFeeLang' | 31 | import { messages as refundDepositFeeMessages } from '../views/fee/refundDepositFeeLang' |
| 32 | import { messages as createFeeByComboMessages } from '../views/fee/createFeeByComboLang' | 32 | import { messages as createFeeByComboMessages } from '../views/fee/createFeeByComboLang' |
| 33 | import { messages as owePayFeeOrderMessages } from '../views/fee/owePayFeeOrderLang' | 33 | import { messages as owePayFeeOrderMessages } from '../views/fee/owePayFeeOrderLang' |
| 34 | +import { messages as printOweFeeMessages } from '../views/fee/printOweFeeLang' | ||
| 34 | 35 | ||
| 35 | export const messages = { | 36 | export const messages = { |
| 36 | en: { | 37 | en: { |
| @@ -67,6 +68,7 @@ export const messages = { | @@ -67,6 +68,7 @@ export const messages = { | ||
| 67 | ...refundDepositFeeMessages.en, | 68 | ...refundDepositFeeMessages.en, |
| 68 | ...createFeeByComboMessages.en, | 69 | ...createFeeByComboMessages.en, |
| 69 | ...owePayFeeOrderMessages.en, | 70 | ...owePayFeeOrderMessages.en, |
| 71 | + ...printOweFeeMessages.en, | ||
| 70 | }, | 72 | }, |
| 71 | zh: { | 73 | zh: { |
| 72 | ...contractCreateFeeMessages.zh, | 74 | ...contractCreateFeeMessages.zh, |
| @@ -102,5 +104,6 @@ export const messages = { | @@ -102,5 +104,6 @@ export const messages = { | ||
| 102 | ...refundDepositFeeMessages.zh, | 104 | ...refundDepositFeeMessages.zh, |
| 103 | ...createFeeByComboMessages.zh, | 105 | ...createFeeByComboMessages.zh, |
| 104 | ...owePayFeeOrderMessages.zh, | 106 | ...owePayFeeOrderMessages.zh, |
| 107 | + ...printOweFeeMessages.zh, | ||
| 105 | } | 108 | } |
| 106 | } | 109 | } |
| 107 | \ No newline at end of file | 110 | \ No newline at end of file |
src/router/feeRouter.js
| @@ -149,5 +149,10 @@ export default [ | @@ -149,5 +149,10 @@ export default [ | ||
| 149 | name: '/views/fee/owePayFeeOrder', | 149 | name: '/views/fee/owePayFeeOrder', |
| 150 | component: () => import('@/views/fee/owePayFeeOrderList.vue') | 150 | component: () => import('@/views/fee/owePayFeeOrderList.vue') |
| 151 | }, | 151 | }, |
| 152 | + { | ||
| 153 | + path: '/views/fee/printOweFee', | ||
| 154 | + name: '/views/fee/printOweFee', | ||
| 155 | + component: () => import('@/views/fee/printOweFeeList.vue') | ||
| 156 | + }, | ||
| 152 | 157 | ||
| 153 | ] | 158 | ] |
| 154 | \ No newline at end of file | 159 | \ No newline at end of file |
src/utils/moneyUtil.js
0 → 100644
| 1 | +export function changeNumMoneyToChinese(money) { | ||
| 2 | + let cnNums = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); //汉字的数字 | ||
| 3 | + let cnIntRadice = new Array("", "拾", "佰", "仟"); //基本单位 | ||
| 4 | + let cnIntUnits = new Array("", "万", "亿", "兆"); //对应整数部分扩展单位 | ||
| 5 | + let cnDecUnits = new Array("角", "分", "毫", "厘"); //对应小数部分单位 | ||
| 6 | + let cnInteger = "整"; //整数金额时后面跟的字符 | ||
| 7 | + let cnIntLast = "元"; //整型完以后的单位 | ||
| 8 | + let maxNum = 999999999999999.9999; //最大处理的数字 | ||
| 9 | + let IntegerNum; //金额整数部分 | ||
| 10 | + let DecimalNum; //金额小数部分 | ||
| 11 | + let ChineseStr = ""; //输出的中文金额字符串 | ||
| 12 | + let parts; //分离金额后用的数组,预定义 | ||
| 13 | + let Symbol = ""; //正负值标记 | ||
| 14 | + if (money == "") { | ||
| 15 | + return ""; | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + money = parseFloat(money); | ||
| 19 | + if (money >= maxNum) { | ||
| 20 | + alert('超出最大处理数字'); | ||
| 21 | + return ""; | ||
| 22 | + } | ||
| 23 | + if (money == 0) { | ||
| 24 | + ChineseStr = cnNums[0] + cnIntLast + cnInteger; | ||
| 25 | + return ChineseStr; | ||
| 26 | + } | ||
| 27 | + if (money < 0) { | ||
| 28 | + money = -money; | ||
| 29 | + Symbol = "负 "; | ||
| 30 | + } | ||
| 31 | + money = money.toString(); //转换为字符串 | ||
| 32 | + if (money.indexOf(".") == -1) { | ||
| 33 | + IntegerNum = money; | ||
| 34 | + DecimalNum = ''; | ||
| 35 | + } else { | ||
| 36 | + parts = money.split("."); | ||
| 37 | + IntegerNum = parts[0]; | ||
| 38 | + DecimalNum = parts[1].substr(0, 4); | ||
| 39 | + } | ||
| 40 | + if (parseInt(IntegerNum, 10) > 0) { //获取整型部分转换 | ||
| 41 | + var zeroCount = 0; | ||
| 42 | + var IntLen = IntegerNum.length; | ||
| 43 | + for (var i = 0; i < IntLen; i++) { | ||
| 44 | + var n = IntegerNum.substr(i, 1); | ||
| 45 | + var p = IntLen - i - 1; | ||
| 46 | + var q = p / 4; | ||
| 47 | + var m = p % 4; | ||
| 48 | + if (n == "0") { | ||
| 49 | + zeroCount++; | ||
| 50 | + } else { | ||
| 51 | + if (zeroCount > 0) { | ||
| 52 | + ChineseStr += cnNums[0]; | ||
| 53 | + } | ||
| 54 | + zeroCount = 0; //归零 | ||
| 55 | + ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; | ||
| 56 | + } | ||
| 57 | + if (m == 0 && zeroCount < 4) { | ||
| 58 | + ChineseStr += cnIntUnits[q]; | ||
| 59 | + } | ||
| 60 | + } | ||
| 61 | + ChineseStr += cnIntLast; | ||
| 62 | + //整型部分处理完毕 | ||
| 63 | + } | ||
| 64 | + if (DecimalNum != '') { //小数部分 | ||
| 65 | + var decLen = DecimalNum.length; | ||
| 66 | + for (let i = 0; i < decLen; i++) { | ||
| 67 | + let n = DecimalNum.substr(i, 1); | ||
| 68 | + if (n != '0') { | ||
| 69 | + ChineseStr += cnNums[Number(n)] + cnDecUnits[i]; | ||
| 70 | + } | ||
| 71 | + } | ||
| 72 | + } | ||
| 73 | + if (ChineseStr == '') { | ||
| 74 | + ChineseStr += cnNums[0] + cnIntLast + cnInteger; | ||
| 75 | + } else if (DecimalNum == '') { | ||
| 76 | + ChineseStr += cnInteger; | ||
| 77 | + } | ||
| 78 | + ChineseStr = Symbol + ChineseStr; | ||
| 79 | + | ||
| 80 | + return ChineseStr; | ||
| 81 | +} | ||
| 0 | \ No newline at end of file | 82 | \ No newline at end of file |
src/views/fee/createFeeByComboList.vue
| 1 | <template> | 1 | <template> |
| 2 | <div class="create-fee-by-combo-container"> | 2 | <div class="create-fee-by-combo-container"> |
| 3 | <el-card class="box-card"> | 3 | <el-card class="box-card"> |
| 4 | - <div slot="header" class="clearfix"> | ||
| 5 | - <span>{{ createFeeByComboInfo.payerObjName }}</span> | ||
| 6 | - <span>{{ $t('createFeeByCombo.title') }}</span> | 4 | + <div slot="header" class="flex justify-between"> |
| 5 | + <div> | ||
| 6 | + <span>{{ createFeeByComboInfo.payerObjName }}</span> | ||
| 7 | + <span>{{ $t('createFeeByCombo.title') }}</span> | ||
| 8 | + </div> | ||
| 7 | <div class="header-tools"> | 9 | <div class="header-tools"> |
| 8 | <el-button type="primary" size="small" @click="_chooseFeeCombo()"> | 10 | <el-button type="primary" size="small" @click="_chooseFeeCombo()"> |
| 9 | <i class="el-icon-search"></i>{{ $t('createFeeByCombo.chooseFeeCombo') }} | 11 | <i class="el-icon-search"></i>{{ $t('createFeeByCombo.chooseFeeCombo') }} |
src/views/fee/feeConfigManageList.vue
| @@ -37,7 +37,8 @@ | @@ -37,7 +37,8 @@ | ||
| 37 | <el-col :span="4"> | 37 | <el-col :span="4"> |
| 38 | <el-form-item> | 38 | <el-form-item> |
| 39 | <el-select v-model="conditions.feeFlag" :placeholder="$t('feeConfigManage.selectFeeFlag')" clearable> | 39 | <el-select v-model="conditions.feeFlag" :placeholder="$t('feeConfigManage.selectFeeFlag')" clearable> |
| 40 | - <el-option v-for="item in feeFlags" :key="item.statusCd" :label="item.name" :value="item.statusCd" /> | 40 | + <el-option v-for="item in feeFlags" :key="item.statusCd" :label="item.name" |
| 41 | + :value="item.statusCd" /> | ||
| 41 | </el-select> | 42 | </el-select> |
| 42 | </el-form-item> | 43 | </el-form-item> |
| 43 | </el-col> | 44 | </el-col> |
src/views/fee/owePayFeeOrderList.vue
| @@ -194,7 +194,7 @@ export default { | @@ -194,7 +194,7 @@ export default { | ||
| 194 | payType: 'common', | 194 | payType: 'common', |
| 195 | authCode: '', | 195 | authCode: '', |
| 196 | orderId: '', | 196 | orderId: '', |
| 197 | - printUrl: '/print.html#/pages/property/printPayFee', | 197 | + printUrl: '/#/pages/fee/printPayFee', |
| 198 | detailIds: '', | 198 | detailIds: '', |
| 199 | paymentPoolId: '' | 199 | paymentPoolId: '' |
| 200 | }, | 200 | }, |
| @@ -496,7 +496,7 @@ export default { | @@ -496,7 +496,7 @@ export default { | ||
| 496 | }, | 496 | }, |
| 497 | 497 | ||
| 498 | _printOwnOrder() { | 498 | _printOwnOrder() { |
| 499 | - window.open(`/print.html#/pages/property/printOweFee?payObjId=${this.owePayFeeOrderInfo.payObjId}&payObjType=${this.owePayFeeOrderInfo.payObjType}&payObjName=${this.owePayFeeOrderInfo.roomName}`) | 499 | + window.open(`/#/views/fee/printOweFee?payObjId=${this.owePayFeeOrderInfo.payObjId}&payObjType=${this.owePayFeeOrderInfo.payObjType}&payObjName=${this.owePayFeeOrderInfo.roomName}`) |
| 500 | }, | 500 | }, |
| 501 | 501 | ||
| 502 | _printOwnOrder2() { | 502 | _printOwnOrder2() { |
src/views/fee/printOweFeeLang.js
0 → 100644
| 1 | +export const messages = { | ||
| 2 | + en: { | ||
| 3 | + printOweFee: { | ||
| 4 | + paymentNotice: 'Payment Notice', | ||
| 5 | + owner: 'Owner', | ||
| 6 | + printTime: 'Print Time', | ||
| 7 | + chargeObject: 'Charge Object', | ||
| 8 | + itemName: 'Item Name', | ||
| 9 | + feePeriod: 'Fee Period', | ||
| 10 | + unit: 'Unit', | ||
| 11 | + areaUsage: 'Area/Usage', | ||
| 12 | + unitPrice: 'Unit Price', | ||
| 13 | + amount: 'Amount', | ||
| 14 | + amountInWords: 'Amount in Words', | ||
| 15 | + noData: 'No payment notice data available' | ||
| 16 | + } | ||
| 17 | + }, | ||
| 18 | + zh: { | ||
| 19 | + printOweFee: { | ||
| 20 | + paymentNotice: '缴费通知单', | ||
| 21 | + owner: '业主', | ||
| 22 | + printTime: '打印时间', | ||
| 23 | + chargeObject: '收费对象', | ||
| 24 | + itemName: '项目名称', | ||
| 25 | + feePeriod: '费用期间', | ||
| 26 | + unit: '单位', | ||
| 27 | + areaUsage: '面积/用量', | ||
| 28 | + unitPrice: '单价', | ||
| 29 | + amount: '金额', | ||
| 30 | + amountInWords: '大写人民币(元)', | ||
| 31 | + noData: '当前没有缴费通知数据' | ||
| 32 | + } | ||
| 33 | + } | ||
| 34 | +} | ||
| 0 | \ No newline at end of file | 35 | \ No newline at end of file |
src/views/fee/printOweFeeList.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="print-owe-fee-container"> | ||
| 3 | + <el-card> | ||
| 4 | + <div class="text-center"> | ||
| 5 | + <h1>{{ printPayFeeInfo.printName }}{{ $t('printOweFee.paymentNotice') }}</h1> | ||
| 6 | + </div> | ||
| 7 | + <div class="margin-top flex justify-between" style="color:#000;font-size:14px"> | ||
| 8 | + <div > | ||
| 9 | + {{ $t('printOweFee.owner') }}:{{ printPayFeeInfo.ownerName }} | ||
| 10 | + </div> | ||
| 11 | + <div> | ||
| 12 | + {{ $t('printOweFee.printTime') }}:{{ printPayFeeInfo.feeTime }} | ||
| 13 | + </div> | ||
| 14 | + </div> | ||
| 15 | + <!-- 费用明细表格(原el-table) --> | ||
| 16 | + <table style="width: 100%; border-collapse: collapse; color: #000; font-size: 14px; margin-top: 10px;"> | ||
| 17 | + <thead> | ||
| 18 | + <tr> | ||
| 19 | + <th style="border: 1px solid #dcdfe6; text-align: center;">{{$t('printOweFee.chargeObject')}}</th> | ||
| 20 | + <th style="border: 1px solid #dcdfe6; text-align: center;">{{$t('printOweFee.itemName')}}</th> | ||
| 21 | + <th style="border: 1px solid #dcdfe6; text-align: center;">{{$t('printOweFee.feePeriod')}}</th> | ||
| 22 | + <th style="border: 1px solid #dcdfe6; text-align: center;">{{$t('printOweFee.unit')}}</th> | ||
| 23 | + <th style="border: 1px solid #dcdfe6; text-align: center;">{{$t('printOweFee.areaUsage')}}</th> | ||
| 24 | + <th style="border: 1px solid #dcdfe6; text-align: center;">{{$t('printOweFee.unitPrice')}}</th> | ||
| 25 | + <th style="border: 1px solid #dcdfe6; text-align: center;">{{$t('printOweFee.amount')}}</th> | ||
| 26 | + </tr> | ||
| 27 | + </thead> | ||
| 28 | + <tbody> | ||
| 29 | + <tr v-for="(row, idx) in printPayFeeInfo.fees" :key="idx"> | ||
| 30 | + <td style="border: 1px solid #dcdfe6; text-align: center;">{{ row.payerObjName }}</td> | ||
| 31 | + <td style="border: 1px solid #dcdfe6; text-align: center;">{{ row.feeName }}</td> | ||
| 32 | + <td style="border: 1px solid #dcdfe6; text-align: center;"> | ||
| 33 | + <div v-if="row.preDegrees"> | ||
| 34 | + {{ dateFormat(row.endTime) }}至{{ _getDeadlineTime(row) }}<br> | ||
| 35 | + {{ row.preDegrees }} 至 {{ row.curDegrees }} | ||
| 36 | + </div> | ||
| 37 | + <div v-else> | ||
| 38 | + {{ dateFormat(row.endTime) }}至{{ _getDeadlineTime(row) }} | ||
| 39 | + </div> | ||
| 40 | + </td> | ||
| 41 | + <td style="border: 1px solid #dcdfe6; text-align: center;">元</td> | ||
| 42 | + <td style="border: 1px solid #dcdfe6; text-align: center;"> | ||
| 43 | + {{ row.preDegrees ? (row.curDegrees - row.preDegrees).toFixed(2) : printPayFeeInfo.builtUpArea }} | ||
| 44 | + </td> | ||
| 45 | + <td style="border: 1px solid #dcdfe6; text-align: center;"> | ||
| 46 | + {{ row.preDegrees && row.mwPrice > 0 ? row.mwPrice : `${row.squarePrice}/${row.additionalAmount}` }} | ||
| 47 | + </td> | ||
| 48 | + <td style="border: 1px solid #dcdfe6; text-align: center;">{{ row.feeTotalPrice }}</td> | ||
| 49 | + </tr> | ||
| 50 | + <tr> | ||
| 51 | + <td style="border: 1px solid #dcdfe6; text-align: center;" > | ||
| 52 | + {{$t('printOweFee.amountInWords')}} | ||
| 53 | + </td> | ||
| 54 | + <td style="border: 1px solid #dcdfe6; text-align: center;" colspan="4"> | ||
| 55 | + {{ changeNumMoneyToChinese(printPayFeeInfo.feePrices) }} | ||
| 56 | + </td> | ||
| 57 | + <td style="border: 1px solid #dcdfe6; text-align: center;" colspan="2"> | ||
| 58 | + {{ printPayFeeInfo.feePrices }} | ||
| 59 | + </td> | ||
| 60 | + </tr> | ||
| 61 | + <tr v-if="printPayFeeInfo.content"> | ||
| 62 | + <td style="border: 1px solid #dcdfe6; width: 300px;"> | ||
| 63 | + <div style="max-width: 600px;" v-html="printPayFeeInfo.content"></div> | ||
| 64 | + </td> | ||
| 65 | + <td style="border: 1px solid #dcdfe6; text-align: center;"> | ||
| 66 | + <img :src="printPayFeeInfo.qrImg" width="150px" height="150px"> | ||
| 67 | + </td> | ||
| 68 | + </tr> | ||
| 69 | + </tbody> | ||
| 70 | + </table> | ||
| 71 | + | ||
| 72 | + | ||
| 73 | + <div id="print-btn" class="margin-top "> | ||
| 74 | + <el-button type="primary" class="float-right" @click="_printPurchaseApplyDiv"> | ||
| 75 | + <i class="el-icon-printer"></i> {{ $t('common.print') }} | ||
| 76 | + </el-button> | ||
| 77 | + <el-button type="warning" class="float-right" style="margin-right:20px;" @click="_closePage"> | ||
| 78 | + {{ $t('common.cancel') }} | ||
| 79 | + </el-button> | ||
| 80 | + </div> | ||
| 81 | + </el-card> | ||
| 82 | + </div> | ||
| 83 | +</template> | ||
| 84 | + | ||
| 85 | +<script> | ||
| 86 | +import { listOweFees, listRoomsWhereFeeSet, queryFeePrintSpec } from '@/api/fee/printOweFeeApi' | ||
| 87 | +import { getCommunityId } from '@/api/community/communityApi' | ||
| 88 | +import { dateFormat } from '@/utils/dateUtil' | ||
| 89 | +import { changeNumMoneyToChinese } from '@/utils/moneyUtil' | ||
| 90 | + | ||
| 91 | +export default { | ||
| 92 | + name: 'PrintOweFeeList', | ||
| 93 | + data() { | ||
| 94 | + return { | ||
| 95 | + printPayFeeInfo: { | ||
| 96 | + communityName: '', | ||
| 97 | + roomName: '', | ||
| 98 | + feePrices: 0.00, | ||
| 99 | + fees: [], | ||
| 100 | + feeTime: '', | ||
| 101 | + wechatName: '', | ||
| 102 | + content: '', | ||
| 103 | + qrImg: '', | ||
| 104 | + payObjId: '', | ||
| 105 | + builtUpArea: '', | ||
| 106 | + payObjType: '', | ||
| 107 | + payObjName: '', | ||
| 108 | + ownerName: '', | ||
| 109 | + printName: '', | ||
| 110 | + targetEndTime: '', | ||
| 111 | + }, | ||
| 112 | + printFlag: '0', | ||
| 113 | + communityId: '' | ||
| 114 | + } | ||
| 115 | + }, | ||
| 116 | + created() { | ||
| 117 | + this.communityId = getCommunityId() | ||
| 118 | + this._initData() | ||
| 119 | + }, | ||
| 120 | + methods: { | ||
| 121 | + _initData() { | ||
| 122 | + this.printPayFeeInfo.payObjId = this.$route.query.payObjId | ||
| 123 | + this.printPayFeeInfo.payObjType = this.$route.query.payObjType | ||
| 124 | + this.printPayFeeInfo.payObjName = this.$route.query.payObjName | ||
| 125 | + this.printPayFeeInfo.targetEndTime = this.$route.query.targetEndTime | ||
| 126 | + | ||
| 127 | + this._loadOweFees() | ||
| 128 | + this._printOweRoom() | ||
| 129 | + | ||
| 130 | + this.printPayFeeInfo.feeTime = dateFormat(new Date().getTime()) | ||
| 131 | + this.printPayFeeInfo.communityName = this.communityId | ||
| 132 | + | ||
| 133 | + this._loadPrintSpec() | ||
| 134 | + }, | ||
| 135 | + _loadPrintSpec() { | ||
| 136 | + const param = { | ||
| 137 | + page: 1, | ||
| 138 | + row: 1, | ||
| 139 | + specCd: 1010, | ||
| 140 | + communityId: this.communityId | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + queryFeePrintSpec(param).then(res => { | ||
| 144 | + if (res.data.length > 0) { | ||
| 145 | + this.printPayFeeInfo.content = res.data[0].content | ||
| 146 | + this.printPayFeeInfo.qrImg = res.data[0].qrImg | ||
| 147 | + this.printPayFeeInfo.printName = res.data[0].printName | ||
| 148 | + } | ||
| 149 | + }).catch(err => { | ||
| 150 | + console.error('请求失败:', err) | ||
| 151 | + }) | ||
| 152 | + }, | ||
| 153 | + _printPurchaseApplyDiv() { | ||
| 154 | + this.printFlag = '1' | ||
| 155 | + document.getElementById("print-btn").style.display = "none" | ||
| 156 | + window.print() | ||
| 157 | + window.opener = null | ||
| 158 | + window.close() | ||
| 159 | + }, | ||
| 160 | + _closePage() { | ||
| 161 | + window.opener = null | ||
| 162 | + window.close() | ||
| 163 | + }, | ||
| 164 | + _printOweRoom() { | ||
| 165 | + if (this.printPayFeeInfo.payObjType !== '3333') { | ||
| 166 | + return | ||
| 167 | + } | ||
| 168 | + const param = { | ||
| 169 | + page: 1, | ||
| 170 | + row: 1, | ||
| 171 | + roomId: this.printPayFeeInfo.payObjId, | ||
| 172 | + communityId: this.communityId | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + listRoomsWhereFeeSet(param).then(res => { | ||
| 176 | + const listRoomData = res | ||
| 177 | + Object.assign(this.printPayFeeInfo, listRoomData.rooms[0]) | ||
| 178 | + if (listRoomData.rooms[0].roomType === '2020602') { | ||
| 179 | + this.printPayFeeInfo.roomName = `${listRoomData.rooms[0].floorNum}-${listRoomData.rooms[0].roomNum}` | ||
| 180 | + } else { | ||
| 181 | + this.printPayFeeInfo.roomName = `${listRoomData.rooms[0].floorNum}-${listRoomData.rooms[0].unitNum}-${listRoomData.rooms[0].roomNum}` | ||
| 182 | + } | ||
| 183 | + }).catch(err => { | ||
| 184 | + console.error('请求失败:', err) | ||
| 185 | + }) | ||
| 186 | + }, | ||
| 187 | + _loadOweFees() { | ||
| 188 | + const param = { | ||
| 189 | + page: 1, | ||
| 190 | + row: 50, | ||
| 191 | + communityId: this.communityId, | ||
| 192 | + payObjId: this.printPayFeeInfo.payObjId, | ||
| 193 | + payObjType: this.printPayFeeInfo.payObjType, | ||
| 194 | + targetEndTime: this.printPayFeeInfo.targetEndTime, | ||
| 195 | + } | ||
| 196 | + | ||
| 197 | + listOweFees(param).then(res => { | ||
| 198 | + const _fees = res.data | ||
| 199 | + if (_fees.length < 1) { | ||
| 200 | + this.printPayFeeInfo.oweFees = [] | ||
| 201 | + this.$message.warning(this.$t('printOweFee.noData')) | ||
| 202 | + return | ||
| 203 | + } | ||
| 204 | + this.printPayFeeInfo.fees = _fees | ||
| 205 | + let _totalAmount = 0.0 | ||
| 206 | + this.printPayFeeInfo.fees.forEach(item => { | ||
| 207 | + _totalAmount += item.feeTotalPrice | ||
| 208 | + }) | ||
| 209 | + _totalAmount = Math.round(_totalAmount * 100) / 100 | ||
| 210 | + this.printPayFeeInfo.feePrices = _totalAmount | ||
| 211 | + }).catch(err => { | ||
| 212 | + console.error('请求失败:', err) | ||
| 213 | + }) | ||
| 214 | + }, | ||
| 215 | + _getDeadlineTime(_fee) { | ||
| 216 | + if (_fee.amountOwed === 0 && _fee.endTime === _fee.deadlineTime) { | ||
| 217 | + return "-" | ||
| 218 | + } | ||
| 219 | + if (_fee.state === '2009001') { | ||
| 220 | + return "-" | ||
| 221 | + } | ||
| 222 | + return dateFormat(_fee.deadlineTime) | ||
| 223 | + }, | ||
| 224 | + dateFormat, | ||
| 225 | + changeNumMoneyToChinese | ||
| 226 | + } | ||
| 227 | +} | ||
| 228 | +</script> | ||
| 229 | + | ||
| 230 | +<style scoped> | ||
| 231 | +.print-owe-fee-container { | ||
| 232 | + padding: 20px; | ||
| 233 | +} | ||
| 234 | + | ||
| 235 | +.margin-top { | ||
| 236 | + margin-top: 20px; | ||
| 237 | +} | ||
| 238 | + | ||
| 239 | +.float-right { | ||
| 240 | + float: right; | ||
| 241 | +} | ||
| 242 | + | ||
| 243 | +.text-center { | ||
| 244 | + text-align: center; | ||
| 245 | +} | ||
| 246 | +th{ | ||
| 247 | + height: 40px; | ||
| 248 | +} | ||
| 249 | +td{ | ||
| 250 | + height: 40px; | ||
| 251 | +} | ||
| 252 | +</style> | ||
| 0 | \ No newline at end of file | 253 | \ No newline at end of file |
src/views/fee/printPayFeeBangTaiList.vue
| @@ -112,6 +112,7 @@ import { queryFeeReceipt, queryFeeReceiptDetail, queryFeePrintSpec } from '@/api | @@ -112,6 +112,7 @@ import { queryFeeReceipt, queryFeeReceiptDetail, queryFeePrintSpec } from '@/api | ||
| 112 | import { getCommunityId } from '@/api/community/communityApi' | 112 | import { getCommunityId } from '@/api/community/communityApi' |
| 113 | import { getUserId,getUserName } from '@/api/user/userApi' | 113 | import { getUserId,getUserName } from '@/api/user/userApi' |
| 114 | import { dateFormat } from '@/utils/dateUtil' | 114 | import { dateFormat } from '@/utils/dateUtil' |
| 115 | +import { changeNumMoneyToChinese } from '@/utils/moneyUtil' | ||
| 115 | 116 | ||
| 116 | export default { | 117 | export default { |
| 117 | name: 'PrintPayFeeBangTaiList', | 118 | name: 'PrintPayFeeBangTaiList', |
| @@ -249,11 +250,7 @@ export default { | @@ -249,11 +250,7 @@ export default { | ||
| 249 | if (!date) return '' | 250 | if (!date) return '' |
| 250 | return dateFormat(date) | 251 | return dateFormat(date) |
| 251 | }, | 252 | }, |
| 252 | - changeNumMoneyToChinese(num) { | ||
| 253 | - // 这里实现数字转中文大写金额的逻辑 | ||
| 254 | - // 由于实现较复杂,建议使用第三方库或自行实现 | ||
| 255 | - return num // 暂时返回原值 | ||
| 256 | - }, | 253 | + changeNumMoneyToChinese, |
| 257 | printPurchaseApplyDiv() { | 254 | printPurchaseApplyDiv() { |
| 258 | this.printFlag = '1' | 255 | this.printFlag = '1' |
| 259 | document.getElementById("print-btn").style.display = "none" | 256 | document.getElementById("print-btn").style.display = "none" |
src/views/fee/propertyFeeList.vue
| 1 | <template> | 1 | <template> |
| 2 | <div class="property-fee-container"> | 2 | <div class="property-fee-container"> |
| 3 | - <el-card class="box-card"> | ||
| 4 | - <div slot="header" class="clearfix"> | ||
| 5 | - <span>{{ $t('propertyFee.title') }}</span> | ||
| 6 | - </div> | ||
| 7 | - | ||
| 8 | - <!-- 主费用信息组件 --> | ||
| 9 | - <view-main-fee | ||
| 10 | - ref="viewMainFee" | ||
| 11 | - :fee-name="$t('propertyFee.feeName')" | ||
| 12 | - fee-type-cd="888800010001" | ||
| 13 | - pay-name="propertyPay" | ||
| 14 | - /> | ||
| 15 | 3 | ||
| 16 | - <el-card class="box-card" style="margin-top: 20px;"> | ||
| 17 | - <div slot="header" class="clearfix"> | ||
| 18 | - <span>{{ $t('propertyFee.paymentHistory') }}</span> | ||
| 19 | - </div> | ||
| 20 | - | ||
| 21 | - <el-row :gutter="20"> | ||
| 22 | - <el-col :span="6"> | ||
| 23 | - <el-date-picker | ||
| 24 | - v-model="feeDetailInfo.startTime" | ||
| 25 | - type="date" | ||
| 26 | - :placeholder="$t('propertyFee.selectStartTime')" | ||
| 27 | - style="width: 100%;" | ||
| 28 | - /> | ||
| 29 | - </el-col> | ||
| 30 | - <el-col :span="6"> | ||
| 31 | - <el-date-picker | ||
| 32 | - v-model="feeDetailInfo.endTime" | ||
| 33 | - type="date" | ||
| 34 | - :placeholder="$t('propertyFee.selectEndTime')" | ||
| 35 | - style="width: 100%;" | ||
| 36 | - /> | ||
| 37 | - </el-col> | ||
| 38 | - <el-col :span="12"> | ||
| 39 | - <el-button type="primary" @click="queryFeeDetailMethod()"> | ||
| 40 | - <i class="el-icon-search"></i> | ||
| 41 | - {{ $t('propertyFee.searchNow') }} | ||
| 42 | - </el-button> | ||
| 43 | - <el-button type="info" @click="resetFeeDetailMethod()" style="margin-left: 20px;"> | ||
| 44 | - <i class="el-icon-refresh"></i> | ||
| 45 | - {{ $t('propertyFee.reset') }} | ||
| 46 | - </el-button> | ||
| 47 | - </el-col> | ||
| 48 | - </el-row> | ||
| 49 | 4 | ||
| 50 | - <el-table | ||
| 51 | - :data="feeDetailInfo.feeDetails" | ||
| 52 | - style="width: 100%; margin-top: 20px;" | ||
| 53 | - border | ||
| 54 | - stripe | ||
| 55 | - > | ||
| 56 | - <el-table-column prop="detailId" :label="$t('propertyFee.paymentId')" align="center" /> | ||
| 57 | - <el-table-column prop="cycles" :label="$t('propertyFee.cycle')" align="center" /> | ||
| 58 | - <el-table-column prop="primeRateName" :label="$t('propertyFee.paymentMethod')" align="center" /> | ||
| 59 | - <el-table-column :label="$t('propertyFee.receivableAmount')" align="center"> | ||
| 60 | - <template slot-scope="scope"> | ||
| 61 | - <span v-if="scope.row.state=='1500'">{{scope.row.payerObjName}}{{$t('propertyFee.viewInFee')}}</span> | ||
| 62 | - <span v-else>{{scope.row.receivableAmount}}</span> | ||
| 63 | - </template> | ||
| 64 | - </el-table-column> | ||
| 65 | - <el-table-column :label="$t('propertyFee.receivedAmount')" align="center"> | ||
| 66 | - <template slot-scope="scope"> | ||
| 67 | - {{scope.row.receivedAmount}}<br> | ||
| 68 | - <div v-if="scope.row.acctAmount>0"> | ||
| 69 | - {{$t('propertyFee.accountDeduction')}}: {{scope.row.acctAmount}}<br> | ||
| 70 | - </div> | ||
| 71 | - <div v-for="(item,index) in scope.row.payFeeDetailDiscountDtoList" :key="index"> | ||
| 72 | - {{item.discountName}}: {{Math.abs(item.discountPrice)}}<br> | ||
| 73 | - </div> | ||
| 74 | - </template> | ||
| 75 | - </el-table-column> | ||
| 76 | - <el-table-column prop="createTime" :label="$t('propertyFee.paymentTime')" align="center" /> | ||
| 77 | - <el-table-column :label="$t('propertyFee.startTime')" align="center"> | ||
| 78 | - <template slot-scope="scope"> | ||
| 79 | - {{dateFormat(scope.row.startTime)}} | ||
| 80 | - </template> | ||
| 81 | - </el-table-column> | ||
| 82 | - <el-table-column :label="$t('propertyFee.endTime')" align="center"> | ||
| 83 | - <template slot-scope="scope"> | ||
| 84 | - {{dateFormat(scope.row.endTime)}} | ||
| 85 | - </template> | ||
| 86 | - </el-table-column> | ||
| 87 | - <el-table-column prop="cashierName" :label="$t('propertyFee.cashier')" align="center" /> | ||
| 88 | - <el-table-column prop="stateName" :label="$t('propertyFee.status')" align="center" /> | ||
| 89 | - <el-table-column prop="remark" :label="$t('propertyFee.remark')" align="center" /> | ||
| 90 | - <el-table-column :label="$t('propertyFee.operation')" align="center"> | ||
| 91 | - <template slot-scope="scope"> | ||
| 92 | - <el-button-group> | ||
| 93 | - <el-button | ||
| 94 | - v-if="scope.row.state=='1400' || scope.row.state== '1200' || scope.row.state== ''" | ||
| 95 | - size="mini" | ||
| 96 | - @click="_openRefundModel(scope.row)" | ||
| 97 | - > | ||
| 98 | - {{ $t('propertyFee.applyRefund') }} | ||
| 99 | - </el-button> | ||
| 100 | - <el-button | ||
| 101 | - v-if="scope.row.state!='1500'" | ||
| 102 | - size="mini" | ||
| 103 | - @click="_openFeeDetailDiscountModal(scope.row)" | ||
| 104 | - > | ||
| 105 | - {{ $t('propertyFee.discount') }} | ||
| 106 | - </el-button> | ||
| 107 | - </el-button-group> | ||
| 108 | - </template> | ||
| 109 | - </el-table-column> | ||
| 110 | - </el-table> | 5 | + <!-- 主费用信息组件 --> |
| 6 | + <view-main-fee ref="viewMainFee" :fee-name="$t('propertyFee.feeName')" fee-type-cd="888800010001" | ||
| 7 | + pay-name="propertyPay" /> | ||
| 8 | + | ||
| 9 | + <el-card class="box-card" style="margin-top: 20px;"> | ||
| 10 | + <div slot="header" class="flex justify-between"> | ||
| 11 | + <span>{{ $t('propertyFee.paymentHistory') }}</span> | ||
| 12 | + </div> | ||
| 111 | 13 | ||
| 112 | - <el-pagination | ||
| 113 | - :current-page.sync="page.current" | ||
| 114 | - :page-sizes="[10, 20, 30, 50]" | ||
| 115 | - :page-size="page.size" | ||
| 116 | - :total="page.total" | ||
| 117 | - layout="total, sizes, prev, pager, next, jumper" | ||
| 118 | - @size-change="handleSizeChange" | ||
| 119 | - @current-change="handleCurrentChange" | ||
| 120 | - style="margin-top: 20px;" | ||
| 121 | - /> | ||
| 122 | - </el-card> | 14 | + <el-row :gutter="20"> |
| 15 | + <el-col :span="6"> | ||
| 16 | + <el-date-picker v-model="feeDetailInfo.startTime" type="date" :placeholder="$t('propertyFee.selectStartTime')" | ||
| 17 | + style="width: 100%;" /> | ||
| 18 | + </el-col> | ||
| 19 | + <el-col :span="6"> | ||
| 20 | + <el-date-picker v-model="feeDetailInfo.endTime" type="date" :placeholder="$t('propertyFee.selectEndTime')" | ||
| 21 | + style="width: 100%;" /> | ||
| 22 | + </el-col> | ||
| 23 | + <el-col :span="12"> | ||
| 24 | + <el-button type="primary" @click="queryFeeDetailMethod()"> | ||
| 25 | + <i class="el-icon-search"></i> | ||
| 26 | + {{ $t('propertyFee.searchNow') }} | ||
| 27 | + </el-button> | ||
| 28 | + <el-button type="info" @click="resetFeeDetailMethod()" style="margin-left: 20px;"> | ||
| 29 | + <i class="el-icon-refresh"></i> | ||
| 30 | + {{ $t('propertyFee.reset') }} | ||
| 31 | + </el-button> | ||
| 32 | + </el-col> | ||
| 33 | + </el-row> | ||
| 123 | 34 | ||
| 124 | - <!-- 子组件 --> | ||
| 125 | - <return-pay-fee ref="returnPayFee" /> | ||
| 126 | - <view-fee-detail-discount ref="viewFeeDetailDiscount" /> | 35 | + <el-table :data="feeDetailInfo.feeDetails" style="width: 100%; margin-top: 20px;" border stripe> |
| 36 | + <el-table-column prop="detailId" :label="$t('propertyFee.paymentId')" align="center" /> | ||
| 37 | + <el-table-column prop="cycles" :label="$t('propertyFee.cycle')" align="center" /> | ||
| 38 | + <el-table-column prop="primeRateName" :label="$t('propertyFee.paymentMethod')" align="center" /> | ||
| 39 | + <el-table-column :label="$t('propertyFee.receivableAmount')" align="center"> | ||
| 40 | + <template slot-scope="scope"> | ||
| 41 | + <span v-if="scope.row.state == '1500'">{{ scope.row.payerObjName }}{{ $t('propertyFee.viewInFee') }}</span> | ||
| 42 | + <span v-else>{{ scope.row.receivableAmount }}</span> | ||
| 43 | + </template> | ||
| 44 | + </el-table-column> | ||
| 45 | + <el-table-column :label="$t('propertyFee.receivedAmount')" align="center"> | ||
| 46 | + <template slot-scope="scope"> | ||
| 47 | + {{ scope.row.receivedAmount }}<br> | ||
| 48 | + <div v-if="scope.row.acctAmount > 0"> | ||
| 49 | + {{ $t('propertyFee.accountDeduction') }}: {{ scope.row.acctAmount }}<br> | ||
| 50 | + </div> | ||
| 51 | + <div v-for="(item, index) in scope.row.payFeeDetailDiscountDtoList" :key="index"> | ||
| 52 | + {{ item.discountName }}: {{ Math.abs(item.discountPrice) }}<br> | ||
| 53 | + </div> | ||
| 54 | + </template> | ||
| 55 | + </el-table-column> | ||
| 56 | + <el-table-column prop="createTime" :label="$t('propertyFee.paymentTime')" align="center" /> | ||
| 57 | + <el-table-column :label="$t('propertyFee.startTime')" align="center"> | ||
| 58 | + <template slot-scope="scope"> | ||
| 59 | + {{ dateFormat(scope.row.startTime) }} | ||
| 60 | + </template> | ||
| 61 | + </el-table-column> | ||
| 62 | + <el-table-column :label="$t('propertyFee.endTime')" align="center"> | ||
| 63 | + <template slot-scope="scope"> | ||
| 64 | + {{ dateFormat(scope.row.endTime) }} | ||
| 65 | + </template> | ||
| 66 | + </el-table-column> | ||
| 67 | + <el-table-column prop="cashierName" :label="$t('propertyFee.cashier')" align="center" /> | ||
| 68 | + <el-table-column prop="stateName" :label="$t('propertyFee.status')" align="center" /> | ||
| 69 | + <el-table-column prop="remark" :label="$t('propertyFee.remark')" align="center" /> | ||
| 70 | + <el-table-column :label="$t('propertyFee.operation')" align="center"> | ||
| 71 | + <template slot-scope="scope"> | ||
| 72 | + <el-button-group> | ||
| 73 | + <el-button v-if="scope.row.state == '1400' || scope.row.state == '1200' || scope.row.state == ''" | ||
| 74 | + size="mini" @click="_openRefundModel(scope.row)"> | ||
| 75 | + {{ $t('propertyFee.applyRefund') }} | ||
| 76 | + </el-button> | ||
| 77 | + <el-button v-if="scope.row.state != '1500'" size="mini" @click="_openFeeDetailDiscountModal(scope.row)"> | ||
| 78 | + {{ $t('propertyFee.discount') }} | ||
| 79 | + </el-button> | ||
| 80 | + </el-button-group> | ||
| 81 | + </template> | ||
| 82 | + </el-table-column> | ||
| 83 | + </el-table> | ||
| 84 | + | ||
| 85 | + <el-pagination :current-page.sync="page.current" :page-sizes="[10, 20, 30, 50]" :page-size="page.size" | ||
| 86 | + :total="page.total" layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange" | ||
| 87 | + @current-change="handleCurrentChange" style="margin-top: 20px;" /> | ||
| 127 | </el-card> | 88 | </el-card> |
| 89 | + | ||
| 90 | + <!-- 子组件 --> | ||
| 91 | + <return-pay-fee ref="returnPayFee" /> | ||
| 92 | + <view-fee-detail-discount ref="viewFeeDetailDiscount" /> | ||
| 93 | + | ||
| 128 | </div> | 94 | </div> |
| 129 | </template> | 95 | </template> |
| 130 | 96 | ||
| @@ -163,6 +129,8 @@ export default { | @@ -163,6 +129,8 @@ export default { | ||
| 163 | }, | 129 | }, |
| 164 | created() { | 130 | created() { |
| 165 | this.communityId = getCommunityId() | 131 | this.communityId = getCommunityId() |
| 132 | + this.feeDetailInfo.feeId = this.$route.query.feeId | ||
| 133 | + this.queryFeeDetailMethod() | ||
| 166 | }, | 134 | }, |
| 167 | methods: { | 135 | methods: { |
| 168 | dateFormat(date) { | 136 | dateFormat(date) { |
| @@ -179,9 +147,9 @@ export default { | @@ -179,9 +147,9 @@ export default { | ||
| 179 | startTime: this.feeDetailInfo.startTime, | 147 | startTime: this.feeDetailInfo.startTime, |
| 180 | endTime: this.feeDetailInfo.endTime | 148 | endTime: this.feeDetailInfo.endTime |
| 181 | } | 149 | } |
| 182 | - | ||
| 183 | - const { data, total, records } = await queryFeeDetail(params) | ||
| 184 | - this.feeDetailInfo.feeDetails = data | 150 | + |
| 151 | + const { feeDetails, total, records } = await queryFeeDetail(params) | ||
| 152 | + this.feeDetailInfo.feeDetails = feeDetails | ||
| 185 | this.feeDetailInfo.total = total | 153 | this.feeDetailInfo.total = total |
| 186 | this.feeDetailInfo.records = records | 154 | this.feeDetailInfo.records = records |
| 187 | this.page.total = records | 155 | this.page.total = records |
| @@ -219,11 +187,11 @@ export default { | @@ -219,11 +187,11 @@ export default { | ||
| 219 | <style lang="scss" scoped> | 187 | <style lang="scss" scoped> |
| 220 | .property-fee-container { | 188 | .property-fee-container { |
| 221 | padding: 20px; | 189 | padding: 20px; |
| 222 | - | 190 | + |
| 223 | .box-card { | 191 | .box-card { |
| 224 | margin-bottom: 20px; | 192 | margin-bottom: 20px; |
| 225 | } | 193 | } |
| 226 | - | 194 | + |
| 227 | .clearfix { | 195 | .clearfix { |
| 228 | font-size: 18px; | 196 | font-size: 18px; |
| 229 | font-weight: bold; | 197 | font-weight: bold; |
src/views/fee/roomCreateFeeList.vue
| @@ -108,9 +108,7 @@ | @@ -108,9 +108,7 @@ | ||
| 108 | </el-row> | 108 | </el-row> |
| 109 | 109 | ||
| 110 | 110 | ||
| 111 | - <room-create-fee-add ref="roomCreateFeeAdd"></room-create-fee-add> | ||
| 112 | - <add-meter-water ref="addMeterWater"></add-meter-water> | ||
| 113 | - <add-proxy-fee ref="addProxyFee"></add-proxy-fee> | 111 | + |
| 114 | <export-fee-import-excel ref="exportFeeImportExcel"></export-fee-import-excel> | 112 | <export-fee-import-excel ref="exportFeeImportExcel"></export-fee-import-excel> |
| 115 | <do-import-create-fee ref="doImportCreateFee"></do-import-create-fee> | 113 | <do-import-create-fee ref="doImportCreateFee"></do-import-create-fee> |
| 116 | <download-collection-letter-order ref="downloadCollectionLetterOrder"></download-collection-letter-order> | 114 | <download-collection-letter-order ref="downloadCollectionLetterOrder"></download-collection-letter-order> |
| @@ -134,9 +132,7 @@ import SimplifyRefundDeposit from '@/components/fee/simplifyRefundDeposit' | @@ -134,9 +132,7 @@ import SimplifyRefundDeposit from '@/components/fee/simplifyRefundDeposit' | ||
| 134 | import FeeDetailFeeRule from '@/components/fee/feeDetailFeeRule' | 132 | import FeeDetailFeeRule from '@/components/fee/feeDetailFeeRule' |
| 135 | import FeeDetailRuleBill from '@/components/fee/feeDetailRuleBill' | 133 | import FeeDetailRuleBill from '@/components/fee/feeDetailRuleBill' |
| 136 | 134 | ||
| 137 | -import RoomCreateFeeAdd from '@/components/fee/roomCreateFeeAdd' | ||
| 138 | -import AddMeterWater from '@/components/fee/addMeterWater' | ||
| 139 | -import AddProxyFee from '@/components/fee/addProxyFee' | 135 | + |
| 140 | import ExportFeeImportExcel from '@/components/fee/exportFeeImportExcel' | 136 | import ExportFeeImportExcel from '@/components/fee/exportFeeImportExcel' |
| 141 | import DoImportCreateFee from '@/components/fee/doImportCreateFee' | 137 | import DoImportCreateFee from '@/components/fee/doImportCreateFee' |
| 142 | import DownloadCollectionLetterOrder from '@/components/fee/downloadCollectionLetterOrder' | 138 | import DownloadCollectionLetterOrder from '@/components/fee/downloadCollectionLetterOrder' |
| @@ -162,9 +158,7 @@ export default { | @@ -162,9 +158,7 @@ export default { | ||
| 162 | FeeDetailFeeRule, | 158 | FeeDetailFeeRule, |
| 163 | FeeDetailRuleBill, | 159 | FeeDetailRuleBill, |
| 164 | 160 | ||
| 165 | - RoomCreateFeeAdd, | ||
| 166 | - AddMeterWater, | ||
| 167 | - AddProxyFee, | 161 | + |
| 168 | ExportFeeImportExcel, | 162 | ExportFeeImportExcel, |
| 169 | DoImportCreateFee, | 163 | DoImportCreateFee, |
| 170 | DownloadCollectionLetterOrder | 164 | DownloadCollectionLetterOrder |