Commit 814833f5d300d7f7871a71dd9bf152704dee8336

Authored by wuxw
1 parent 9d019fa6

优化费用缴费代码

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 &#39;./tempImportRoomFee&#39; @@ -274,6 +278,9 @@ import TempImportRoomFee from &#39;./tempImportRoomFee&#39;
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 &#39;../views/fee/payFeeOrderLang&#39; @@ -31,6 +31,7 @@ import { messages as payFeeOrderMessages } from &#39;../views/fee/payFeeOrderLang&#39;
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>&nbsp;{{ $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 &#39;@/api @@ -112,6 +112,7 @@ import { queryFeeReceipt, queryFeeReceiptDetail, queryFeePrintSpec } from &#39;@/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 &#39;@/components/fee/simplifyRefundDeposit&#39; @@ -134,9 +132,7 @@ import SimplifyRefundDeposit from &#39;@/components/fee/simplifyRefundDeposit&#39;
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