Commit f80ea09a4594a4e242d5e0c8a790ceabcd5580b6
1 parent
814833f5
加入费用详情
Showing
67 changed files
with
3975 additions
and
8 deletions
src/api/dev/serviceProvideManageApi.js
| ... | ... | @@ -71,4 +71,18 @@ export function getServiceProvideDetail(params) { |
| 71 | 71 | reject(error) |
| 72 | 72 | }) |
| 73 | 73 | }) |
| 74 | +} | |
| 75 | +export function deleteServiceProvide(data) { | |
| 76 | + return new Promise((resolve, reject) => { | |
| 77 | + request({ | |
| 78 | + url: '/serviceProvide.deleteServiceProvide', | |
| 79 | + method: 'post', | |
| 80 | + data | |
| 81 | + }).then(response => { | |
| 82 | + const res = response.data | |
| 83 | + resolve(res) | |
| 84 | + }).catch(error => { | |
| 85 | + reject(error) | |
| 86 | + }) | |
| 87 | + }) | |
| 74 | 88 | } |
| 75 | 89 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * 获取费用详情 | |
| 5 | + * @param {Object} params 查询参数 | |
| 6 | + * @returns {Promise} Promise对象 | |
| 7 | + */ | |
| 8 | +export function getFeeDetail(params) { | |
| 9 | + return new Promise((resolve, reject) => { | |
| 10 | + request({ | |
| 11 | + url: '/fee.listFee', | |
| 12 | + method: 'get', | |
| 13 | + params | |
| 14 | + }).then(response => { | |
| 15 | + const res = response.data | |
| 16 | + resolve(res) | |
| 17 | + | |
| 18 | + }).catch(error => { | |
| 19 | + reject(error) | |
| 20 | + }) | |
| 21 | + }) | |
| 22 | +} | |
| 23 | + | |
| 24 | +/** | |
| 25 | + * 获取缴费记录列表 | |
| 26 | + * @param {Object} params 查询参数 | |
| 27 | + * @returns {Promise} Promise对象 | |
| 28 | + */ | |
| 29 | +export function getPaymentRecords(params) { | |
| 30 | + return new Promise((resolve, reject) => { | |
| 31 | + request({ | |
| 32 | + url: '/fee.listPaymentRecords', | |
| 33 | + method: 'get', | |
| 34 | + params | |
| 35 | + }).then(response => { | |
| 36 | + const res = response.data | |
| 37 | + resolve(res) | |
| 38 | + | |
| 39 | + }).catch(error => { | |
| 40 | + reject(error) | |
| 41 | + }) | |
| 42 | + }) | |
| 43 | +} | |
| 44 | + | |
| 45 | +/** | |
| 46 | + * 获取按月展示数据 | |
| 47 | + * @param {Object} params 查询参数 | |
| 48 | + * @returns {Promise} Promise对象 | |
| 49 | + */ | |
| 50 | +export function getMonthlyFeeData(params) { | |
| 51 | + return new Promise((resolve, reject) => { | |
| 52 | + request({ | |
| 53 | + url: '/fee.listMonthlyFee', | |
| 54 | + method: 'get', | |
| 55 | + params | |
| 56 | + }).then(response => { | |
| 57 | + const res = response.data | |
| 58 | + resolve(res) | |
| 59 | + | |
| 60 | + }).catch(error => { | |
| 61 | + reject(error) | |
| 62 | + }) | |
| 63 | + }) | |
| 64 | +} | |
| 65 | + | |
| 66 | +/** | |
| 67 | + * 获取关联房屋数据 | |
| 68 | + * @param {Object} params 查询参数 | |
| 69 | + * @returns {Promise} Promise对象 | |
| 70 | + */ | |
| 71 | +export function getRelatedRooms(params) { | |
| 72 | + return new Promise((resolve, reject) => { | |
| 73 | + request({ | |
| 74 | + url: '/fee.listRelatedRooms', | |
| 75 | + method: 'get', | |
| 76 | + params | |
| 77 | + }).then(response => { | |
| 78 | + const res = response.data | |
| 79 | + resolve(res) | |
| 80 | + | |
| 81 | + }).catch(error => { | |
| 82 | + reject(error) | |
| 83 | + }) | |
| 84 | + }) | |
| 85 | +} | |
| 86 | + | |
| 87 | +/** | |
| 88 | + * 获取关联车辆数据 | |
| 89 | + * @param {Object} params 查询参数 | |
| 90 | + * @returns {Promise} Promise对象 | |
| 91 | + */ | |
| 92 | +export function getRelatedCars(params) { | |
| 93 | + return new Promise((resolve, reject) => { | |
| 94 | + request({ | |
| 95 | + url: '/fee.listRelatedCars', | |
| 96 | + method: 'get', | |
| 97 | + params | |
| 98 | + }).then(response => { | |
| 99 | + const res = response.data | |
| 100 | + resolve(res) | |
| 101 | + }).catch(error => { | |
| 102 | + reject(error) | |
| 103 | + }) | |
| 104 | + }) | |
| 105 | +} | |
| 0 | 106 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailCarApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 3 | + | |
| 4 | +export function queryOwnerCars(params) { | |
| 5 | + return new Promise((resolve, reject) => { | |
| 6 | + request({ | |
| 7 | + url: '/owner.queryOwnerCars', | |
| 8 | + method: 'get', | |
| 9 | + params: { | |
| 10 | + ...params, | |
| 11 | + communityId: getCommunityId() | |
| 12 | + } | |
| 13 | + }).then(response => { | |
| 14 | + const res = response.data | |
| 15 | + if (res.code == 0) { | |
| 16 | + resolve(res) | |
| 17 | + } else { | |
| 18 | + reject(new Error(res.msg || 'Failed to query owner cars')) | |
| 19 | + } | |
| 20 | + }).catch(error => { | |
| 21 | + reject(error) | |
| 22 | + }) | |
| 23 | + }) | |
| 24 | +} | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailConfigApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 3 | + | |
| 4 | +export function listFeeConfigs(params) { | |
| 5 | + return new Promise((resolve, reject) => { | |
| 6 | + request({ | |
| 7 | + url: '/feeConfig.listFeeConfigs', | |
| 8 | + method: 'get', | |
| 9 | + params: { | |
| 10 | + ...params, | |
| 11 | + communityId: getCommunityId() | |
| 12 | + } | |
| 13 | + }).then(response => { | |
| 14 | + const res = response.data | |
| 15 | + if (res.code == 0) { | |
| 16 | + resolve(res) | |
| 17 | + } else { | |
| 18 | + reject(new Error(res.msg || 'Failed to list fee configs')) | |
| 19 | + } | |
| 20 | + }).catch(error => { | |
| 21 | + reject(error) | |
| 22 | + }) | |
| 23 | + }) | |
| 24 | +} | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailContractApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 3 | + | |
| 4 | +export function queryContract(params) { | |
| 5 | + return new Promise((resolve, reject) => { | |
| 6 | + request({ | |
| 7 | + url: '/contract/queryContract', | |
| 8 | + method: 'get', | |
| 9 | + params: { | |
| 10 | + ...params, | |
| 11 | + communityId: getCommunityId() | |
| 12 | + } | |
| 13 | + }).then(response => { | |
| 14 | + const res = response.data | |
| 15 | + if (res.code == 0) { | |
| 16 | + resolve(res) | |
| 17 | + } else { | |
| 18 | + reject(new Error(res.msg || 'Failed to query contract')) | |
| 19 | + } | |
| 20 | + }).catch(error => { | |
| 21 | + reject(error) | |
| 22 | + }) | |
| 23 | + }) | |
| 24 | +} | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailDiscountApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function queryApplyRoomDiscount(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/applyRoomDiscount/queryApplyRoomDiscount', | |
| 7 | + method: 'get', | |
| 8 | + params | |
| 9 | + }).then(response => { | |
| 10 | + const res = response.data | |
| 11 | + if (res.code === 0) { | |
| 12 | + resolve(res) | |
| 13 | + } else { | |
| 14 | + reject(new Error(res.msg || 'Failed to query apply room discount')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailHisApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function queryHisFee(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/fee.queryHisFee', | |
| 7 | + method: 'get', | |
| 8 | + params | |
| 9 | + }).then(response => { | |
| 10 | + const res = response.data | |
| 11 | + if (res.code === 0) { | |
| 12 | + resolve(res) | |
| 13 | + } else { | |
| 14 | + reject(new Error(res.msg || 'Failed to query fee history')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailHisFeeApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 3 | + | |
| 4 | +export function queryFeeDetail(params) { | |
| 5 | + return new Promise((resolve, reject) => { | |
| 6 | + request({ | |
| 7 | + url: '/fee.queryFeeDetail', | |
| 8 | + method: 'get', | |
| 9 | + params: { | |
| 10 | + ...params, | |
| 11 | + communityId: getCommunityId() | |
| 12 | + } | |
| 13 | + }).then(response => { | |
| 14 | + const res = response.data | |
| 15 | + resolve(res) | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailImportApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function queryImportFeeDetail(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/importFee/queryImportFeeDetail', | |
| 7 | + method: 'get', | |
| 8 | + params | |
| 9 | + }).then(response => { | |
| 10 | + const res = response.data | |
| 11 | + if (res.code === 0) { | |
| 12 | + resolve(res) | |
| 13 | + } else { | |
| 14 | + reject(new Error(res.msg || 'Failed to query import fee detail')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailMeterApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function listMeterWaters(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/meterWater.listMeterWaters', | |
| 7 | + method: 'get', | |
| 8 | + params | |
| 9 | + }).then(response => { | |
| 10 | + const res = response.data | |
| 11 | + if (res.code === 0) { | |
| 12 | + resolve(res) | |
| 13 | + } else { | |
| 14 | + reject(new Error(res.msg || 'Failed to list meter waters')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailMonthFeeApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 3 | + | |
| 4 | +export function listMonthFee(params) { | |
| 5 | + return new Promise((resolve, reject) => { | |
| 6 | + request({ | |
| 7 | + url: '/fee.listMonthFee', | |
| 8 | + method: 'get', | |
| 9 | + params: { | |
| 10 | + ...params, | |
| 11 | + communityId: getCommunityId() | |
| 12 | + } | |
| 13 | + }).then(response => { | |
| 14 | + const res = response.data | |
| 15 | + if (res.code == 0) { | |
| 16 | + resolve(res) | |
| 17 | + } else { | |
| 18 | + reject(new Error(res.msg || 'Failed to list month fee')) | |
| 19 | + } | |
| 20 | + }).catch(error => { | |
| 21 | + reject(error) | |
| 22 | + }) | |
| 23 | + }) | |
| 24 | +} | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailOwnerApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function queryOwners(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/owner.queryOwners', | |
| 7 | + method: 'get', | |
| 8 | + params | |
| 9 | + }).then(response => { | |
| 10 | + const res = response.data | |
| 11 | + if (res.code === 0) { | |
| 12 | + resolve(res) | |
| 13 | + } else { | |
| 14 | + reject(new Error(res.msg || 'Failed to query owners')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailReceiptApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function queryFeeReceipt(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/feeReceipt/queryFeeReceipt', | |
| 7 | + method: 'get', | |
| 8 | + params | |
| 9 | + }).then(response => { | |
| 10 | + const res = response.data | |
| 11 | + if (res.code === 0) { | |
| 12 | + resolve(res) | |
| 13 | + } else { | |
| 14 | + reject(new Error(res.msg || 'Failed to query apply room discount')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailRoomApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 3 | + | |
| 4 | +export function queryRooms(params) { | |
| 5 | + return new Promise((resolve, reject) => { | |
| 6 | + request({ | |
| 7 | + url: '/room.queryRooms', | |
| 8 | + method: 'get', | |
| 9 | + params: { | |
| 10 | + ...params, | |
| 11 | + communityId: getCommunityId() | |
| 12 | + } | |
| 13 | + }).then(response => { | |
| 14 | + const res = response.data | |
| 15 | + resolve(res) | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/fee/feeDetailSubApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function listPayFeeSub(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/feeSub.listPayFeeSub', | |
| 7 | + method: 'get', | |
| 8 | + params | |
| 9 | + }).then(response => { | |
| 10 | + const res = response.data | |
| 11 | + if (res.code === 0) { | |
| 12 | + resolve(res) | |
| 13 | + } else { | |
| 14 | + reject(new Error(res.msg || 'Failed to get fee sub list')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 21 | + | |
| 22 | +export function listFee(params) { | |
| 23 | + return new Promise((resolve, reject) => { | |
| 24 | + request({ | |
| 25 | + url: '/fee.listFee', | |
| 26 | + method: 'get', | |
| 27 | + params | |
| 28 | + }).then(response => { | |
| 29 | + const res = response.data | |
| 30 | + if (res.code === 0) { | |
| 31 | + resolve(res) | |
| 32 | + } else { | |
| 33 | + reject(new Error(res.msg || 'Failed to get fee list')) | |
| 34 | + } | |
| 35 | + }).catch(error => { | |
| 36 | + reject(error) | |
| 37 | + }) | |
| 38 | + }) | |
| 39 | +} | |
| 0 | 40 | \ No newline at end of file | ... | ... |
src/api/fee/mergeFeeApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function mergePayFee(data) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/feeSub.mergePayFee', | |
| 7 | + method: 'post', | |
| 8 | + data | |
| 9 | + }).then(response => { | |
| 10 | + const res = response.data | |
| 11 | + if (res.code === 0) { | |
| 12 | + resolve(res) | |
| 13 | + } else { | |
| 14 | + reject(new Error(res.msg || 'Failed to merge fee')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailCar.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <div class="margin-top"> | |
| 4 | + <el-table :data="feeDetailCarInfo.cars" style="width: 100%"> | |
| 5 | + <el-table-column prop="carNum" :label="$t('feeDetailCar.licensePlate')" align="center"></el-table-column> | |
| 6 | + <el-table-column :label="$t('feeDetailCar.licenseType')" align="center"> | |
| 7 | + <template slot-scope="scope"> | |
| 8 | + <span v-if="scope.row.leaseType == 'T'">{{$t('feeDetailCar.temporaryCar')}}</span> | |
| 9 | + <span v-else>{{scope.row.leaseTypeName}}</span> | |
| 10 | + </template> | |
| 11 | + </el-table-column> | |
| 12 | + <el-table-column prop="carTypeName" :label="$t('feeDetailCar.carType')" align="center"></el-table-column> | |
| 13 | + <el-table-column prop="carColor" :label="$t('feeDetailCar.color')" align="center"></el-table-column> | |
| 14 | + <el-table-column :label="$t('feeDetailCar.owner')" align="center"> | |
| 15 | + <template slot-scope="scope">{{scope.row.ownerName}}({{scope.row.link}})</template> | |
| 16 | + </el-table-column> | |
| 17 | + <el-table-column :label="$t('feeDetailCar.parkingSpace')" align="center"> | |
| 18 | + <template slot-scope="scope"> | |
| 19 | + <span v-if="scope.row.areaNum && scope.row.state == '1001'"> | |
| 20 | + {{scope.row.areaNum}}{{$t('feeDetailCar.parkingLot')}}{{scope.row.num}}{{$t('feeDetailCar.parkingSpace')}} | |
| 21 | + </span> | |
| 22 | + <span v-else>{{$t('feeDetailCar.spaceReleased')}}</span> | |
| 23 | + </template> | |
| 24 | + </el-table-column> | |
| 25 | + <el-table-column :label="$t('feeDetailCar.validityPeriod')" align="center"> | |
| 26 | + <template slot-scope="scope"> | |
| 27 | + <span v-if="scope.row.leaseType == 'H'"> | |
| 28 | + {{scope.row.startTime}}<br>~{{scope.row.endTime}} | |
| 29 | + </span> | |
| 30 | + <span v-else>-</span> | |
| 31 | + </template> | |
| 32 | + </el-table-column> | |
| 33 | + </el-table> | |
| 34 | + | |
| 35 | + <el-row class="margin-top"> | |
| 36 | + <el-col :span="12"></el-col> | |
| 37 | + <el-col :span="12"> | |
| 38 | + <el-pagination | |
| 39 | + @current-change="handleCurrentChange" | |
| 40 | + :current-page="pagination.currentPage" | |
| 41 | + :page-size="pagination.pageSize" | |
| 42 | + layout="total, prev, pager, next" | |
| 43 | + :total="pagination.total"> | |
| 44 | + </el-pagination> | |
| 45 | + </el-col> | |
| 46 | + </el-row> | |
| 47 | + </div> | |
| 48 | + </div> | |
| 49 | +</template> | |
| 50 | + | |
| 51 | +<script> | |
| 52 | +import { queryOwnerCars } from '@/api/fee/feeDetailCarApi' | |
| 53 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 54 | + | |
| 55 | +export default { | |
| 56 | + name: 'FeeDetailCar', | |
| 57 | + data() { | |
| 58 | + return { | |
| 59 | + feeDetailCarInfo: { | |
| 60 | + cars: [], | |
| 61 | + memberId: '' | |
| 62 | + }, | |
| 63 | + pagination: { | |
| 64 | + currentPage: 1, | |
| 65 | + pageSize: 10, | |
| 66 | + total: 0 | |
| 67 | + } | |
| 68 | + } | |
| 69 | + }, | |
| 70 | + methods: { | |
| 71 | + open(params) { | |
| 72 | + this.feeDetailCarInfo.memberId = params.payerObjId | |
| 73 | + this._loadFeeDetailCarData() | |
| 74 | + }, | |
| 75 | + _loadFeeDetailCarData() { | |
| 76 | + const params = { | |
| 77 | + communityId: getCommunityId(), | |
| 78 | + memberId: this.feeDetailCarInfo.memberId, | |
| 79 | + page: this.pagination.currentPage, | |
| 80 | + row: this.pagination.pageSize | |
| 81 | + } | |
| 82 | + | |
| 83 | + queryOwnerCars(params).then(res => { | |
| 84 | + this.feeDetailCarInfo.cars = res.data | |
| 85 | + this.pagination.total = res.records | |
| 86 | + }).catch(error => { | |
| 87 | + console.error('Failed to load car details:', error) | |
| 88 | + }) | |
| 89 | + }, | |
| 90 | + handleCurrentChange(val) { | |
| 91 | + this.pagination.currentPage = val | |
| 92 | + this._loadFeeDetailCarData() | |
| 93 | + } | |
| 94 | + } | |
| 95 | +} | |
| 96 | +</script> | |
| 0 | 97 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailCarDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailCarDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-car ref="feeDetailCar"></fee-detail-car> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailCar from './feeDetailCar' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailCarDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailCar | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailCar.open({ | |
| 19 | + payerObjId: '123' | |
| 20 | + }) | |
| 21 | + } | |
| 22 | + } | |
| 23 | +} | |
| 24 | +</script> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailConfig.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <div class="margin-top"> | |
| 4 | + <el-table :data="feeDetailConfigInfo.feeConfigs" style="width: 100%"> | |
| 5 | + <el-table-column prop="feeTypeCdName" :label="$t('feeDetailConfig.feeType')" align="center"></el-table-column> | |
| 6 | + <el-table-column prop="feeName" :label="$t('feeDetailConfig.feeItem')" align="center"></el-table-column> | |
| 7 | + <el-table-column prop="feeFlagName" :label="$t('feeDetailConfig.feeFlag')" align="center"></el-table-column> | |
| 8 | + <el-table-column prop="billTypeName" :label="$t('feeDetailConfig.reminderType')" align="center"></el-table-column> | |
| 9 | + <el-table-column :label="$t('feeDetailConfig.paymentType')" align="center"> | |
| 10 | + <template slot-scope="scope"> | |
| 11 | + {{scope.row.paymentCd == '1200' ? $t('feeDetailConfig.prepaid') : $t('feeDetailConfig.postpaid')}} | |
| 12 | + </template> | |
| 13 | + </el-table-column> | |
| 14 | + <el-table-column prop="paymentCycle" :label="$t('feeDetailConfig.paymentCycle')" align="center"></el-table-column> | |
| 15 | + <el-table-column prop="units" :label="$t('feeDetailConfig.unit')" align="center"></el-table-column> | |
| 16 | + <el-table-column prop="computingFormulaName" :label="$t('feeDetailConfig.formula')" align="center"></el-table-column> | |
| 17 | + <el-table-column :label="$t('feeDetailConfig.unitPrice')" align="center"> | |
| 18 | + <template slot-scope="scope"> | |
| 19 | + {{scope.row.computingFormula == '2002' ? '-' : scope.row.squarePrice}} | |
| 20 | + </template> | |
| 21 | + </el-table-column> | |
| 22 | + <el-table-column prop="additionalAmount" :label="$t('feeDetailConfig.additionalFee')" align="center"></el-table-column> | |
| 23 | + <el-table-column :label="$t('feeDetailConfig.accountDeduction')" align="center"> | |
| 24 | + <template slot-scope="scope"> | |
| 25 | + {{scope.row.deductFrom == 'Y' ? $t('feeDetailConfig.yes') : $t('feeDetailConfig.no')}} | |
| 26 | + </template> | |
| 27 | + </el-table-column> | |
| 28 | + <el-table-column :label="$t('feeDetailConfig.mobilePayment')" align="center"> | |
| 29 | + <template slot-scope="scope"> | |
| 30 | + {{scope.row.payOnline == 'Y' ? $t('feeDetailConfig.yes') : $t('feeDetailConfig.no')}} | |
| 31 | + </template> | |
| 32 | + </el-table-column> | |
| 33 | + <el-table-column prop="scale" :label="$t('feeDetailConfig.decimalPlaces')" align="center"></el-table-column> | |
| 34 | + </el-table> | |
| 35 | + | |
| 36 | + <el-row class="margin-top"> | |
| 37 | + <el-col :span="12"></el-col> | |
| 38 | + <el-col :span="12"> | |
| 39 | + <el-pagination | |
| 40 | + @current-change="handleCurrentChange" | |
| 41 | + :current-page="pagination.currentPage" | |
| 42 | + :page-size="pagination.pageSize" | |
| 43 | + layout="total, prev, pager, next" | |
| 44 | + :total="pagination.total"> | |
| 45 | + </el-pagination> | |
| 46 | + </el-col> | |
| 47 | + </el-row> | |
| 48 | + </div> | |
| 49 | + </div> | |
| 50 | +</template> | |
| 51 | + | |
| 52 | +<script> | |
| 53 | +import { listFeeConfigs } from '@/api/fee/feeDetailConfigApi' | |
| 54 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 55 | + | |
| 56 | +export default { | |
| 57 | + name: 'FeeDetailConfig', | |
| 58 | + data() { | |
| 59 | + return { | |
| 60 | + feeDetailConfigInfo: { | |
| 61 | + feeConfigs: [], | |
| 62 | + configId: '' | |
| 63 | + }, | |
| 64 | + pagination: { | |
| 65 | + currentPage: 1, | |
| 66 | + pageSize: 10, | |
| 67 | + total: 0 | |
| 68 | + } | |
| 69 | + } | |
| 70 | + }, | |
| 71 | + methods: { | |
| 72 | + open(params) { | |
| 73 | + this.feeDetailConfigInfo.configId = params.configId | |
| 74 | + this._loadFeeDetailConfigData() | |
| 75 | + }, | |
| 76 | + _loadFeeDetailConfigData() { | |
| 77 | + const params = { | |
| 78 | + communityId: getCommunityId(), | |
| 79 | + configId: this.feeDetailConfigInfo.configId, | |
| 80 | + page: this.pagination.currentPage, | |
| 81 | + row: this.pagination.pageSize | |
| 82 | + } | |
| 83 | + | |
| 84 | + listFeeConfigs(params).then(res => { | |
| 85 | + this.feeDetailConfigInfo.feeConfigs = res.feeConfigs | |
| 86 | + this.pagination.total = res.records | |
| 87 | + }).catch(error => { | |
| 88 | + console.error('Failed to load fee config details:', error) | |
| 89 | + }) | |
| 90 | + }, | |
| 91 | + handleCurrentChange(val) { | |
| 92 | + this.pagination.currentPage = val | |
| 93 | + this._loadFeeDetailConfigData() | |
| 94 | + } | |
| 95 | + } | |
| 96 | +} | |
| 97 | +</script> | |
| 0 | 98 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailConfigDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailConfigDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-config ref="feeDetailConfig"></fee-detail-config> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailConfig from './feeDetailConfig' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailConfigDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailConfig | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailConfig.open({ | |
| 19 | + configId: '123' | |
| 20 | + }) | |
| 21 | + } | |
| 22 | + } | |
| 23 | +} | |
| 24 | +</script> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailContract.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <div class="margin-top"> | |
| 4 | + <el-table :data="feeDetailContractInfo.contracts" style="width: 100%"> | |
| 5 | + <el-table-column prop="contractName" :label="$t('feeDetailContract.contractName')" align="center"></el-table-column> | |
| 6 | + <el-table-column prop="contractCode" :label="$t('feeDetailContract.contractCode')" align="center"></el-table-column> | |
| 7 | + <el-table-column :label="$t('feeDetailContract.parentContractCode')" align="center"> | |
| 8 | + <template slot-scope="scope"> | |
| 9 | + {{scope.row.parentContractCode ? scope.row.parentContractCode : '-'}} | |
| 10 | + </template> | |
| 11 | + </el-table-column> | |
| 12 | + <el-table-column prop="contractTypeName" :label="$t('feeDetailContract.contractType')" align="center"></el-table-column> | |
| 13 | + <el-table-column prop="operator" :label="$t('feeDetailContract.operator')" align="center"></el-table-column> | |
| 14 | + <el-table-column prop="amount" :label="$t('feeDetailContract.contractAmount')" align="center"></el-table-column> | |
| 15 | + <el-table-column prop="startTime" :label="$t('feeDetailContract.startTime')" align="center"></el-table-column> | |
| 16 | + <el-table-column prop="endTime" :label="$t('feeDetailContract.endTime')" align="center"></el-table-column> | |
| 17 | + <el-table-column prop="createTime" :label="$t('feeDetailContract.draftTime')" align="center"></el-table-column> | |
| 18 | + <el-table-column prop="stateName" :label="$t('feeDetailContract.status')" align="center"></el-table-column> | |
| 19 | + </el-table> | |
| 20 | + | |
| 21 | + <el-row class="margin-top"> | |
| 22 | + <el-col :span="12"></el-col> | |
| 23 | + <el-col :span="12"> | |
| 24 | + <el-pagination | |
| 25 | + @current-change="handleCurrentChange" | |
| 26 | + :current-page="pagination.currentPage" | |
| 27 | + :page-size="pagination.pageSize" | |
| 28 | + layout="total, prev, pager, next" | |
| 29 | + :total="pagination.total"> | |
| 30 | + </el-pagination> | |
| 31 | + </el-col> | |
| 32 | + </el-row> | |
| 33 | + </div> | |
| 34 | + </div> | |
| 35 | +</template> | |
| 36 | + | |
| 37 | +<script> | |
| 38 | +import { queryContract } from '@/api/fee/feeDetailContractApi' | |
| 39 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 40 | + | |
| 41 | +export default { | |
| 42 | + name: 'FeeDetailContract', | |
| 43 | + data() { | |
| 44 | + return { | |
| 45 | + feeDetailContractInfo: { | |
| 46 | + contracts: [], | |
| 47 | + contractId: '' | |
| 48 | + }, | |
| 49 | + pagination: { | |
| 50 | + currentPage: 1, | |
| 51 | + pageSize: 10, | |
| 52 | + total: 0 | |
| 53 | + } | |
| 54 | + } | |
| 55 | + }, | |
| 56 | + methods: { | |
| 57 | + open(params) { | |
| 58 | + this.feeDetailContractInfo.contractId = params.payerObjId | |
| 59 | + this._loadFeeDetailContractData() | |
| 60 | + }, | |
| 61 | + _loadFeeDetailContractData() { | |
| 62 | + const params = { | |
| 63 | + communityId: getCommunityId(), | |
| 64 | + contractId: this.feeDetailContractInfo.contractId, | |
| 65 | + page: this.pagination.currentPage, | |
| 66 | + row: this.pagination.pageSize | |
| 67 | + } | |
| 68 | + | |
| 69 | + queryContract(params).then(res => { | |
| 70 | + this.feeDetailContractInfo.contracts = res.data | |
| 71 | + this.pagination.total = res.records | |
| 72 | + }).catch(error => { | |
| 73 | + console.error('Failed to load contract details:', error) | |
| 74 | + }) | |
| 75 | + }, | |
| 76 | + handleCurrentChange(val) { | |
| 77 | + this.pagination.currentPage = val | |
| 78 | + this._loadFeeDetailContractData() | |
| 79 | + } | |
| 80 | + } | |
| 81 | +} | |
| 82 | +</script> | |
| 0 | 83 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailContractDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailContractDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-contract ref="feeDetailContract"></fee-detail-contract> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailContract from './feeDetailContract' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailContractDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailContract | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailContract.open({ | |
| 19 | + payerObjId: '123' | |
| 20 | + }) | |
| 21 | + } | |
| 22 | + } | |
| 23 | +} | |
| 24 | +</script> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailDiscount.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <div class="margin-top"> | |
| 4 | + <el-table | |
| 5 | + :data="feeDetailDiscountInfo.applyRoomDiscounts" | |
| 6 | + border | |
| 7 | + style="width: 100%" | |
| 8 | + > | |
| 9 | + <el-table-column | |
| 10 | + prop="roomName" | |
| 11 | + :label="$t('feeDetailDiscount.roomName')" | |
| 12 | + align="center" | |
| 13 | + ></el-table-column> | |
| 14 | + <el-table-column | |
| 15 | + prop="discountId" | |
| 16 | + :label="$t('feeDetailDiscount.discountId')" | |
| 17 | + align="center" | |
| 18 | + ></el-table-column> | |
| 19 | + <el-table-column | |
| 20 | + prop="discountName" | |
| 21 | + :label="$t('feeDetailDiscount.discountName')" | |
| 22 | + align="center" | |
| 23 | + ></el-table-column> | |
| 24 | + <el-table-column | |
| 25 | + prop="applyTypeName" | |
| 26 | + :label="$t('feeDetailDiscount.applyType')" | |
| 27 | + align="center" | |
| 28 | + ></el-table-column> | |
| 29 | + <el-table-column | |
| 30 | + prop="createUserName" | |
| 31 | + :label="$t('feeDetailDiscount.applicant')" | |
| 32 | + align="center" | |
| 33 | + ></el-table-column> | |
| 34 | + <el-table-column | |
| 35 | + prop="createUserTel" | |
| 36 | + :label="$t('feeDetailDiscount.applicantPhone')" | |
| 37 | + align="center" | |
| 38 | + ></el-table-column> | |
| 39 | + <el-table-column | |
| 40 | + prop="startTime" | |
| 41 | + :label="$t('feeDetailDiscount.startTime')" | |
| 42 | + align="center" | |
| 43 | + ></el-table-column> | |
| 44 | + <el-table-column | |
| 45 | + prop="endTime" | |
| 46 | + :label="$t('feeDetailDiscount.endTime')" | |
| 47 | + align="center" | |
| 48 | + ></el-table-column> | |
| 49 | + <el-table-column | |
| 50 | + prop="stateName" | |
| 51 | + :label="$t('feeDetailDiscount.status')" | |
| 52 | + align="center" | |
| 53 | + ></el-table-column> | |
| 54 | + <el-table-column | |
| 55 | + prop="createTime" | |
| 56 | + :label="$t('feeDetailDiscount.createTime')" | |
| 57 | + align="center" | |
| 58 | + ></el-table-column> | |
| 59 | + <el-table-column | |
| 60 | + prop="inUse" | |
| 61 | + :label="$t('feeDetailDiscount.useStatus')" | |
| 62 | + align="center" | |
| 63 | + > | |
| 64 | + <template #default="{row}"> | |
| 65 | + {{row.inUse === '0' ? $t('feeDetailDiscount.notUsed') : $t('feeDetailDiscount.used')}} | |
| 66 | + </template> | |
| 67 | + </el-table-column> | |
| 68 | + <el-table-column | |
| 69 | + :label="$t('feeDetailDiscount.returnType')" | |
| 70 | + align="center" | |
| 71 | + > | |
| 72 | + <template #default="{row}"> | |
| 73 | + <span v-if="row.discountId"> | |
| 74 | + {{row.returnWay === '1002' ? $t('feeDetailDiscount.accountBalance') : $t('feeDetailDiscount.discount')}} | |
| 75 | + </span> | |
| 76 | + <span v-else>-</span> | |
| 77 | + </template> | |
| 78 | + </el-table-column> | |
| 79 | + <el-table-column | |
| 80 | + :label="$t('feeDetailDiscount.returnAmount')" | |
| 81 | + align="center" | |
| 82 | + > | |
| 83 | + <template #default="{row}"> | |
| 84 | + {{row.returnAmount ? row.returnAmount : '-'}} | |
| 85 | + </template> | |
| 86 | + </el-table-column> | |
| 87 | + </el-table> | |
| 88 | + | |
| 89 | + <el-row class="margin-top"> | |
| 90 | + <el-col :span="4"></el-col> | |
| 91 | + <el-col :span="20"> | |
| 92 | + <el-pagination | |
| 93 | + @current-change="handleCurrentChange" | |
| 94 | + :current-page="currentPage" | |
| 95 | + :page-size="pageSize" | |
| 96 | + layout="total, prev, pager, next, jumper" | |
| 97 | + :total="total" | |
| 98 | + ></el-pagination> | |
| 99 | + </el-col> | |
| 100 | + </el-row> | |
| 101 | + </div> | |
| 102 | + </div> | |
| 103 | +</template> | |
| 104 | + | |
| 105 | +<script> | |
| 106 | +import { queryApplyRoomDiscount } from '@/api/fee/feeDetailDiscountApi' | |
| 107 | + | |
| 108 | +export default { | |
| 109 | + name: 'FeeDetailDiscount', | |
| 110 | + data() { | |
| 111 | + return { | |
| 112 | + feeDetailDiscountInfo: { | |
| 113 | + applyRoomDiscounts: [], | |
| 114 | + feeId: '' | |
| 115 | + }, | |
| 116 | + currentPage: 1, | |
| 117 | + pageSize: 10, | |
| 118 | + total: 0 | |
| 119 | + } | |
| 120 | + }, | |
| 121 | + methods: { | |
| 122 | + open(params) { | |
| 123 | + this.feeDetailDiscountInfo.feeId = params.feeId | |
| 124 | + this._loadFeeDetailDiscountData(this.currentPage, this.pageSize) | |
| 125 | + }, | |
| 126 | + handleCurrentChange(val) { | |
| 127 | + this.currentPage = val | |
| 128 | + this._loadFeeDetailDiscountData(this.currentPage, this.pageSize) | |
| 129 | + }, | |
| 130 | + async _loadFeeDetailDiscountData(page, row) { | |
| 131 | + try { | |
| 132 | + const params = { | |
| 133 | + communityId: this.$store.getters.communityId, | |
| 134 | + feeId: this.feeDetailDiscountInfo.feeId, | |
| 135 | + page, | |
| 136 | + row | |
| 137 | + } | |
| 138 | + | |
| 139 | + const res = await queryApplyRoomDiscount(params) | |
| 140 | + this.feeDetailDiscountInfo.applyRoomDiscounts = res.data | |
| 141 | + this.total = res.records | |
| 142 | + } catch (error) { | |
| 143 | + console.error('Failed to load discount data:', error) | |
| 144 | + } | |
| 145 | + } | |
| 146 | + } | |
| 147 | +} | |
| 148 | +</script> | |
| 0 | 149 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailDiscountDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailDiscountDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-discount ref="feeDetailDiscount"></fee-detail-discount> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailDiscount from './feeDetailDiscount' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailDiscountDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailDiscount | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailDiscount.open({ | |
| 19 | + feeId: '123' | |
| 20 | + }) | |
| 21 | + } | |
| 22 | + } | |
| 23 | +} | |
| 24 | +</script> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailHis.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-row class="margin-top"> | |
| 4 | + <el-col :span="24" class="text-right"></el-col> | |
| 5 | + </el-row> | |
| 6 | + <div class="margin-top"> | |
| 7 | + <el-table | |
| 8 | + :data="feeDetailHisInfo.fees" | |
| 9 | + border | |
| 10 | + style="width: 100%" | |
| 11 | + > | |
| 12 | + <el-table-column | |
| 13 | + prop="feeName" | |
| 14 | + :label="$t('feeDetailHis.feeName')" | |
| 15 | + align="center" | |
| 16 | + > | |
| 17 | + <template #default="{row}"> | |
| 18 | + {{row.feeName}} | |
| 19 | + <span v-if="row.payerObjName">({{row.payerObjName}})</span> | |
| 20 | + </template> | |
| 21 | + </el-table-column> | |
| 22 | + <el-table-column | |
| 23 | + prop="startTime" | |
| 24 | + :label="$t('feeDetailHis.startTime')" | |
| 25 | + align="center" | |
| 26 | + ></el-table-column> | |
| 27 | + <el-table-column | |
| 28 | + prop="endTime" | |
| 29 | + :label="$t('feeDetailHis.endTime')" | |
| 30 | + align="center" | |
| 31 | + ></el-table-column> | |
| 32 | + <el-table-column | |
| 33 | + :label="$t('feeDetailHis.operation')" | |
| 34 | + align="center" | |
| 35 | + > | |
| 36 | + <template #default="{row}"> | |
| 37 | + {{_getFeeHisOperate(row)}} | |
| 38 | + </template> | |
| 39 | + </el-table-column> | |
| 40 | + <el-table-column | |
| 41 | + prop="userName" | |
| 42 | + :label="$t('feeDetailHis.operator')" | |
| 43 | + align="center" | |
| 44 | + ></el-table-column> | |
| 45 | + <el-table-column | |
| 46 | + prop="createTime" | |
| 47 | + :label="$t('feeDetailHis.operationTime')" | |
| 48 | + align="center" | |
| 49 | + ></el-table-column> | |
| 50 | + </el-table> | |
| 51 | + | |
| 52 | + <el-row class="margin-top"> | |
| 53 | + <el-col :span="4"></el-col> | |
| 54 | + <el-col :span="20"> | |
| 55 | + <el-pagination | |
| 56 | + @current-change="handleCurrentChange" | |
| 57 | + :current-page="currentPage" | |
| 58 | + :page-size="pageSize" | |
| 59 | + layout="total, prev, pager, next, jumper" | |
| 60 | + :total="total" | |
| 61 | + ></el-pagination> | |
| 62 | + </el-col> | |
| 63 | + </el-row> | |
| 64 | + </div> | |
| 65 | + </div> | |
| 66 | +</template> | |
| 67 | + | |
| 68 | +<script> | |
| 69 | +import { queryHisFee } from '@/api/fee/feeDetailHisApi' | |
| 70 | + | |
| 71 | +export default { | |
| 72 | + name: 'FeeDetailHis', | |
| 73 | + data() { | |
| 74 | + return { | |
| 75 | + feeDetailHisInfo: { | |
| 76 | + fees: [], | |
| 77 | + feeId: '', | |
| 78 | + staffNameLike: '', | |
| 79 | + feeNameLike: '', | |
| 80 | + payerObjName: '', | |
| 81 | + logStartTime: '', | |
| 82 | + logEndTime: '' | |
| 83 | + }, | |
| 84 | + currentPage: 1, | |
| 85 | + pageSize: 10, | |
| 86 | + total: 0 | |
| 87 | + } | |
| 88 | + }, | |
| 89 | + methods: { | |
| 90 | + open(params) { | |
| 91 | + this.feeDetailHisInfo = Object.assign(this.feeDetailHisInfo, params) | |
| 92 | + this._loadFeeDetailHisData(this.currentPage, this.pageSize) | |
| 93 | + }, | |
| 94 | + handleCurrentChange(val) { | |
| 95 | + this.currentPage = val | |
| 96 | + this._loadFeeDetailHisData(this.currentPage, this.pageSize) | |
| 97 | + }, | |
| 98 | + async _loadFeeDetailHisData(page, row) { | |
| 99 | + try { | |
| 100 | + const params = { | |
| 101 | + communityId: this.$store.getters.communityId, | |
| 102 | + feeId: this.feeDetailHisInfo.feeId, | |
| 103 | + staffNameLike: this.feeDetailHisInfo.staffNameLike, | |
| 104 | + feeNameLike: this.feeDetailHisInfo.feeNameLike, | |
| 105 | + payerObjName: this.feeDetailHisInfo.payerObjName, | |
| 106 | + logStartTime: this.feeDetailHisInfo.logStartTime, | |
| 107 | + logEndTime: this.feeDetailHisInfo.logEndTime, | |
| 108 | + page, | |
| 109 | + row | |
| 110 | + } | |
| 111 | + | |
| 112 | + const res = await queryHisFee(params) | |
| 113 | + this.feeDetailHisInfo.fees = res.data | |
| 114 | + this.total = res.records | |
| 115 | + } catch (error) { | |
| 116 | + console.error('Failed to load fee history data:', error) | |
| 117 | + } | |
| 118 | + }, | |
| 119 | + _getFeeHisOperate(fee) { | |
| 120 | + let feeCount = 0 | |
| 121 | + this.feeDetailHisInfo.fees.forEach(item => { | |
| 122 | + if (fee.bId === item.bId) { | |
| 123 | + feeCount += 1 | |
| 124 | + } | |
| 125 | + }) | |
| 126 | + | |
| 127 | + if (feeCount <= 1) { | |
| 128 | + if (fee.operate === 'ADD') return this.$t('feeDetailHis.add') | |
| 129 | + if (fee.operate === 'DEL') return this.$t('feeDetailHis.delete') | |
| 130 | + return '-' | |
| 131 | + } | |
| 132 | + | |
| 133 | + if (fee.operate === 'ADD') return this.$t('feeDetailHis.modifyNew') | |
| 134 | + if (fee.operate === 'DEL') return this.$t('feeDetailHis.modifyOld') | |
| 135 | + return '-' | |
| 136 | + } | |
| 137 | + } | |
| 138 | +} | |
| 139 | +</script> | |
| 0 | 140 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailHisDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailHisDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-his ref="feeDetailHis"></fee-detail-his> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailHis from './feeDetailHis' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailHisDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailHis | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailHis.open({ | |
| 19 | + feeId: '123', | |
| 20 | + staffNameLike: '', | |
| 21 | + feeNameLike: '', | |
| 22 | + payerObjName: '', | |
| 23 | + logStartTime: '', | |
| 24 | + logEndTime: '' | |
| 25 | + }) | |
| 26 | + } | |
| 27 | + } | |
| 28 | +} | |
| 29 | +</script> | |
| 0 | 30 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailHisFee.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-row> | |
| 4 | + <el-col :span="24" class="text-right"></el-col> | |
| 5 | + </el-row> | |
| 6 | + | |
| 7 | + <div class="margin-top"> | |
| 8 | + <el-table :data="feeDetailHisFeeInfo.feeDetails" style="width: 100%"> | |
| 9 | + <el-table-column prop="feeName" :label="$t('feeDetailHisFee.feeName')" align="center"></el-table-column> | |
| 10 | + <el-table-column prop="payerObjName" :label="$t('feeDetailHisFee.payerObjName')" | |
| 11 | + align="center"></el-table-column> | |
| 12 | + <el-table-column prop="cycles" :label="$t('feeDetailHisFee.cycles')" align="center"></el-table-column> | |
| 13 | + <el-table-column :label="$t('feeDetailHisFee.amount')" align="center"> | |
| 14 | + <template slot-scope="scope"> | |
| 15 | + {{ scope.row.receivableAmount }}/{{ scope.row.receivedAmount }}<br> | |
| 16 | + <div v-if="scope.row.acctAmount > 0"> | |
| 17 | + {{ $t('feeDetailHisFee.accountDeduction') }}: {{ scope.row.acctAmount }}<br> | |
| 18 | + </div> | |
| 19 | + <div v-for="(item, index) in scope.row.payFeeDetailDiscountDtoList" :key="index"> | |
| 20 | + {{ item.discountName }}: {{ Math.abs(item.discountPrice) }}<br> | |
| 21 | + </div> | |
| 22 | + </template> | |
| 23 | + </el-table-column> | |
| 24 | + <el-table-column prop="primeRateName" :label="$t('feeDetailHisFee.paymentMethod')" | |
| 25 | + align="center"></el-table-column> | |
| 26 | + <el-table-column :label="$t('feeDetailHisFee.paymentPeriod')" align="center"> | |
| 27 | + <template slot-scope="scope"> | |
| 28 | + {{ dateFormat(scope.row.startTime) }}~<br> | |
| 29 | + {{ dateFormat(scope.row.endTime) }} | |
| 30 | + </template> | |
| 31 | + </el-table-column> | |
| 32 | + <el-table-column prop="createTime" :label="$t('feeDetailHisFee.paymentTime')" align="center"></el-table-column> | |
| 33 | + <el-table-column prop="cashierName" :label="$t('feeDetailHisFee.cashier')" align="center"> | |
| 34 | + <template slot-scope="scope">{{ scope.row.cashierName || '-' }}</template> | |
| 35 | + </el-table-column> | |
| 36 | + <el-table-column prop="stateName" :label="$t('feeDetailHisFee.status')" align="center"></el-table-column> | |
| 37 | + <el-table-column prop="remark" :label="$t('feeDetailHisFee.remark')" align="center"></el-table-column> | |
| 38 | + <el-table-column :label="$t('feeDetailHisFee.operation')" align="center"> | |
| 39 | + <template slot-scope="scope"> | |
| 40 | + <el-button v-if="scope.row.state == '1400' || scope.row.state == '1200' || scope.row.state == ''" size="mini" | |
| 41 | + @click="_toRefundFee(scope.row)"> | |
| 42 | + {{ $t('feeDetailHisFee.detail') }} | |
| 43 | + </el-button> | |
| 44 | + </template> | |
| 45 | + </el-table-column> | |
| 46 | + </el-table> | |
| 47 | + | |
| 48 | + <el-row class="margin-top"> | |
| 49 | + <el-col :span="12"></el-col> | |
| 50 | + <el-col :span="12"> | |
| 51 | + <el-pagination @current-change="handleCurrentChange" :current-page="pagination.currentPage" | |
| 52 | + :page-size="pagination.pageSize" layout="total, prev, pager, next" :total="pagination.total"> | |
| 53 | + </el-pagination> | |
| 54 | + </el-col> | |
| 55 | + </el-row> | |
| 56 | + </div> | |
| 57 | + </div> | |
| 58 | +</template> | |
| 59 | + | |
| 60 | +<script> | |
| 61 | +import { queryFeeDetail } from '@/api/fee/feeDetailHisFeeApi' | |
| 62 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 63 | + | |
| 64 | +export default { | |
| 65 | + name: 'FeeDetailHisFee', | |
| 66 | + data() { | |
| 67 | + return { | |
| 68 | + feeDetailHisFeeInfo: { | |
| 69 | + feeDetails: [], | |
| 70 | + feeId: '' | |
| 71 | + }, | |
| 72 | + pagination: { | |
| 73 | + currentPage: 1, | |
| 74 | + pageSize: 10, | |
| 75 | + total: 0 | |
| 76 | + } | |
| 77 | + } | |
| 78 | + }, | |
| 79 | + methods: { | |
| 80 | + open(params) { | |
| 81 | + this.feeDetailHisFeeInfo.feeId = params.feeId | |
| 82 | + this._loadFeeDetailHisFeeData() | |
| 83 | + }, | |
| 84 | + _loadFeeDetailHisFeeData() { | |
| 85 | + const params = { | |
| 86 | + communityId: getCommunityId(), | |
| 87 | + feeId: this.feeDetailHisFeeInfo.feeId, | |
| 88 | + page: this.pagination.currentPage, | |
| 89 | + row: this.pagination.pageSize | |
| 90 | + } | |
| 91 | + | |
| 92 | + queryFeeDetail(params).then(res => { | |
| 93 | + this.feeDetailHisFeeInfo.feeDetails = res.feeDetails | |
| 94 | + this.pagination.total = res.records | |
| 95 | + }).catch(error => { | |
| 96 | + console.error('Failed to load fee detail history:', error) | |
| 97 | + }) | |
| 98 | + }, | |
| 99 | + handleCurrentChange(val) { | |
| 100 | + this.pagination.currentPage = val | |
| 101 | + this._loadFeeDetailHisFeeData() | |
| 102 | + }, | |
| 103 | + _toRefundFee(detail) { | |
| 104 | + this.$router.push(`/pages/property/propertyFee?feeId=${detail.feeId}`) | |
| 105 | + }, | |
| 106 | + dateFormat(date) { | |
| 107 | + return this.$moment(date).format('YYYY-MM-DD') | |
| 108 | + } | |
| 109 | + } | |
| 110 | +} | |
| 111 | +</script> | |
| 0 | 112 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailHisFeeDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailHisFeeDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-his-fee ref="feeDetailHisFee"></fee-detail-his-fee> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailHisFee from './feeDetailHisFee' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailHisFeeDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailHisFee | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailHisFee.open({ | |
| 19 | + feeId: '123' | |
| 20 | + }) | |
| 21 | + } | |
| 22 | + } | |
| 23 | +} | |
| 24 | +</script> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailImport.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <div class="margin-top"> | |
| 4 | + <el-table | |
| 5 | + :data="feeDetailImportInfo.importFeeDetails" | |
| 6 | + border | |
| 7 | + style="width: 100%" | |
| 8 | + > | |
| 9 | + <el-table-column | |
| 10 | + prop="floorNum" | |
| 11 | + :label="$t('feeDetailImport.floorNum')" | |
| 12 | + align="center" | |
| 13 | + ></el-table-column> | |
| 14 | + <el-table-column | |
| 15 | + prop="unitNum" | |
| 16 | + :label="$t('feeDetailImport.unitNum')" | |
| 17 | + align="center" | |
| 18 | + ></el-table-column> | |
| 19 | + <el-table-column | |
| 20 | + prop="roomNum" | |
| 21 | + :label="$t('feeDetailImport.roomNum')" | |
| 22 | + align="center" | |
| 23 | + ></el-table-column> | |
| 24 | + <el-table-column | |
| 25 | + prop="feeName" | |
| 26 | + :label="$t('feeDetailImport.feeName')" | |
| 27 | + align="center" | |
| 28 | + ></el-table-column> | |
| 29 | + <el-table-column | |
| 30 | + prop="startTime" | |
| 31 | + :label="$t('feeDetailImport.startTime')" | |
| 32 | + align="center" | |
| 33 | + ></el-table-column> | |
| 34 | + <el-table-column | |
| 35 | + prop="endTime" | |
| 36 | + :label="$t('feeDetailImport.endTime')" | |
| 37 | + align="center" | |
| 38 | + ></el-table-column> | |
| 39 | + <el-table-column | |
| 40 | + prop="amount" | |
| 41 | + :label="$t('feeDetailImport.totalAmount')" | |
| 42 | + align="center" | |
| 43 | + ></el-table-column> | |
| 44 | + <el-table-column | |
| 45 | + prop="remark" | |
| 46 | + :label="$t('feeDetailImport.remark')" | |
| 47 | + align="center" | |
| 48 | + ></el-table-column> | |
| 49 | + <el-table-column | |
| 50 | + prop="state" | |
| 51 | + :label="$t('feeDetailImport.status')" | |
| 52 | + align="center" | |
| 53 | + > | |
| 54 | + <template #default="{row}"> | |
| 55 | + <el-tag :type="row.state === '1000' ? 'success' : 'danger'"> | |
| 56 | + {{row.state === '1000' ? $t('feeDetailImport.importSuccess') : $t('feeDetailImport.importFailed')}} | |
| 57 | + </el-tag> | |
| 58 | + </template> | |
| 59 | + </el-table-column> | |
| 60 | + </el-table> | |
| 61 | + | |
| 62 | + <el-row class="margin-top"> | |
| 63 | + <el-col :span="4"></el-col> | |
| 64 | + <el-col :span="20"> | |
| 65 | + <el-pagination | |
| 66 | + @current-change="handleCurrentChange" | |
| 67 | + :current-page="currentPage" | |
| 68 | + :page-size="pageSize" | |
| 69 | + layout="total, prev, pager, next, jumper" | |
| 70 | + :total="total" | |
| 71 | + ></el-pagination> | |
| 72 | + </el-col> | |
| 73 | + </el-row> | |
| 74 | + </div> | |
| 75 | + </div> | |
| 76 | +</template> | |
| 77 | + | |
| 78 | +<script> | |
| 79 | +import { queryImportFeeDetail } from '@/api/fee/feeDetailImportApi' | |
| 80 | + | |
| 81 | +export default { | |
| 82 | + name: 'FeeDetailImport', | |
| 83 | + data() { | |
| 84 | + return { | |
| 85 | + feeDetailImportInfo: { | |
| 86 | + importFeeDetails: [], | |
| 87 | + feeId: '' | |
| 88 | + }, | |
| 89 | + currentPage: 1, | |
| 90 | + pageSize: 10, | |
| 91 | + total: 0 | |
| 92 | + } | |
| 93 | + }, | |
| 94 | + methods: { | |
| 95 | + open(params) { | |
| 96 | + this.feeDetailImportInfo.feeId = params.feeId | |
| 97 | + this._loadFeeDetailImportData(this.currentPage, this.pageSize) | |
| 98 | + }, | |
| 99 | + handleCurrentChange(val) { | |
| 100 | + this.currentPage = val | |
| 101 | + this._loadFeeDetailImportData(this.currentPage, this.pageSize) | |
| 102 | + }, | |
| 103 | + async _loadFeeDetailImportData(page, row) { | |
| 104 | + try { | |
| 105 | + const params = { | |
| 106 | + communityId: this.$store.getters.communityId, | |
| 107 | + feeId: this.feeDetailImportInfo.feeId, | |
| 108 | + page, | |
| 109 | + row | |
| 110 | + } | |
| 111 | + | |
| 112 | + const res = await queryImportFeeDetail(params) | |
| 113 | + this.feeDetailImportInfo.importFeeDetails = res.data | |
| 114 | + this.total = res.records | |
| 115 | + } catch (error) { | |
| 116 | + console.error('Failed to load import fee data:', error) | |
| 117 | + } | |
| 118 | + } | |
| 119 | + } | |
| 120 | +} | |
| 121 | +</script> | |
| 0 | 122 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailImportDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailImportDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-import ref="feeDetailImport"></fee-detail-import> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailImport from './feeDetailImport' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailImportDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailImport | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailImport.open({ | |
| 19 | + feeId: '123' | |
| 20 | + }) | |
| 21 | + } | |
| 22 | + } | |
| 23 | +} | |
| 24 | +</script> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailMeter.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <div class="margin-top"> | |
| 4 | + <el-table | |
| 5 | + :data="feeDetailMeterInfo.meterWaters" | |
| 6 | + border | |
| 7 | + style="width: 100%" | |
| 8 | + > | |
| 9 | + <el-table-column | |
| 10 | + prop="waterId" | |
| 11 | + :label="$t('feeDetailMeter.meterId')" | |
| 12 | + align="center" | |
| 13 | + ></el-table-column> | |
| 14 | + <el-table-column | |
| 15 | + prop="meterTypeName" | |
| 16 | + :label="$t('feeDetailMeter.meterType')" | |
| 17 | + align="center" | |
| 18 | + ></el-table-column> | |
| 19 | + <el-table-column | |
| 20 | + prop="objName" | |
| 21 | + :label="$t('feeDetailMeter.objName')" | |
| 22 | + align="center" | |
| 23 | + ></el-table-column> | |
| 24 | + <el-table-column | |
| 25 | + prop="preDegrees" | |
| 26 | + :label="$t('feeDetailMeter.preDegrees')" | |
| 27 | + align="center" | |
| 28 | + ></el-table-column> | |
| 29 | + <el-table-column | |
| 30 | + prop="curDegrees" | |
| 31 | + :label="$t('feeDetailMeter.curDegrees')" | |
| 32 | + align="center" | |
| 33 | + ></el-table-column> | |
| 34 | + <el-table-column | |
| 35 | + prop="preReadingTime" | |
| 36 | + :label="$t('feeDetailMeter.preReadingTime')" | |
| 37 | + align="center" | |
| 38 | + ></el-table-column> | |
| 39 | + <el-table-column | |
| 40 | + prop="curReadingTime" | |
| 41 | + :label="$t('feeDetailMeter.curReadingTime')" | |
| 42 | + align="center" | |
| 43 | + ></el-table-column> | |
| 44 | + <el-table-column | |
| 45 | + prop="createTime" | |
| 46 | + :label="$t('feeDetailMeter.createTime')" | |
| 47 | + align="center" | |
| 48 | + ></el-table-column> | |
| 49 | + </el-table> | |
| 50 | + | |
| 51 | + <el-row class="margin-top"> | |
| 52 | + <el-col :span="4"></el-col> | |
| 53 | + <el-col :span="20"> | |
| 54 | + <el-pagination | |
| 55 | + @current-change="handleCurrentChange" | |
| 56 | + :current-page="currentPage" | |
| 57 | + :page-size="pageSize" | |
| 58 | + layout="total, prev, pager, next, jumper" | |
| 59 | + :total="total" | |
| 60 | + ></el-pagination> | |
| 61 | + </el-col> | |
| 62 | + </el-row> | |
| 63 | + </div> | |
| 64 | + </div> | |
| 65 | +</template> | |
| 66 | + | |
| 67 | +<script> | |
| 68 | +import { listMeterWaters } from '@/api/fee/feeDetailMeterApi' | |
| 69 | + | |
| 70 | +export default { | |
| 71 | + name: 'FeeDetailMeter', | |
| 72 | + data() { | |
| 73 | + return { | |
| 74 | + feeDetailMeterInfo: { | |
| 75 | + meterWaters: [], | |
| 76 | + feeId: '' | |
| 77 | + }, | |
| 78 | + currentPage: 1, | |
| 79 | + pageSize: 10, | |
| 80 | + total: 0 | |
| 81 | + } | |
| 82 | + }, | |
| 83 | + methods: { | |
| 84 | + open(params) { | |
| 85 | + this.feeDetailMeterInfo.feeId = params.feeId | |
| 86 | + this._loadFeeDetailMeterData(this.currentPage, this.pageSize) | |
| 87 | + }, | |
| 88 | + handleCurrentChange(val) { | |
| 89 | + this.currentPage = val | |
| 90 | + this._loadFeeDetailMeterData(this.currentPage, this.pageSize) | |
| 91 | + }, | |
| 92 | + async _loadFeeDetailMeterData(page, row) { | |
| 93 | + try { | |
| 94 | + const params = { | |
| 95 | + communityId: this.$store.getters.communityId, | |
| 96 | + feeId: this.feeDetailMeterInfo.feeId, | |
| 97 | + page, | |
| 98 | + row | |
| 99 | + } | |
| 100 | + | |
| 101 | + const res = await listMeterWaters(params) | |
| 102 | + this.feeDetailMeterInfo.meterWaters = res.data | |
| 103 | + this.total = res.records | |
| 104 | + } catch (error) { | |
| 105 | + console.error('Failed to load meter data:', error) | |
| 106 | + } | |
| 107 | + } | |
| 108 | + } | |
| 109 | +} | |
| 110 | +</script> | |
| 0 | 111 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailMeterDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailMeterDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-meter ref="feeDetailMeter"></fee-detail-meter> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailMeter from './feeDetailMeter' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailMeterDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailMeter | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailMeter.open({ | |
| 19 | + feeId: '123' | |
| 20 | + }) | |
| 21 | + } | |
| 22 | + } | |
| 23 | +} | |
| 24 | +</script> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailMonthFee.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-row> | |
| 4 | + <el-col :span="24" class="text-right"></el-col> | |
| 5 | + </el-row> | |
| 6 | + | |
| 7 | + <div class="margin-top"> | |
| 8 | + <el-table :data="feeDetailMonthFeeInfo.monthFees" style="width: 100%"> | |
| 9 | + <el-table-column prop="feeName" :label="$t('feeDetailMonthFee.feeItem')" align="center"></el-table-column> | |
| 10 | + <el-table-column prop="feeFlagName" :label="$t('feeDetailMonthFee.feeFlag')" align="center"></el-table-column> | |
| 11 | + <el-table-column prop="feeTypeCdName" :label="$t('feeDetailMonthFee.feeType')" align="center"></el-table-column> | |
| 12 | + <el-table-column :label="$t('feeDetailMonthFee.chargeYearMonth')" align="center"> | |
| 13 | + <template slot-scope="scope">{{scope.row.detailYear}}-{{scope.row.detailMonth}}</template> | |
| 14 | + </el-table-column> | |
| 15 | + <el-table-column prop="receivableAmount" :label="$t('feeDetailMonthFee.receivableAmount')" align="center"></el-table-column> | |
| 16 | + <el-table-column :label="$t('feeDetailMonthFee.description')" align="center"> | |
| 17 | + <template slot-scope="scope"> | |
| 18 | + <div v-if="scope.row.computingFormula == '5005' || scope.row.computingFormula == '9009'"> | |
| 19 | + <div> | |
| 20 | + <span>{{$t('feeDetailMonthFee.lastDegrees')}}</span>{{scope.row.preDegrees}} | |
| 21 | + </div> | |
| 22 | + <div> | |
| 23 | + <span>{{$t('feeDetailMonthFee.currentDegrees')}}</span>{{scope.row.curDegrees}} | |
| 24 | + </div> | |
| 25 | + <div> | |
| 26 | + <span>{{$t('feeDetailMonthFee.unitPrice')}}</span>{{getOnePrice1(scope.row)}} | |
| 27 | + </div> | |
| 28 | + <div> | |
| 29 | + <span>{{$t('feeDetailMonthFee.additionalFee')}}</span>{{scope.row.additionalAmount}} | |
| 30 | + </div> | |
| 31 | + </div> | |
| 32 | + <div v-else-if="scope.row.computingFormula == '6006'"> | |
| 33 | + <div> | |
| 34 | + <span>{{$t('feeDetailMonthFee.usage')}}</span>{{_getAttrValue(scope.row.feeAttrs,'390006')}} | |
| 35 | + </div> | |
| 36 | + <div> | |
| 37 | + <span>{{$t('feeDetailMonthFee.unitPrice')}}</span>{{scope.row.squarePrice}} | |
| 38 | + </div> | |
| 39 | + <div> | |
| 40 | + <span>{{$t('feeDetailMonthFee.additionalFee')}}</span>{{scope.row.additionalAmount}} | |
| 41 | + </div> | |
| 42 | + </div> | |
| 43 | + <div v-else-if="scope.row.feeTypeCd == '888800010017'" width="150"> | |
| 44 | + <div> | |
| 45 | + <span>{{$t('feeDetailMonthFee.algorithm')}}</span>{{_getAttrValue(scope.row.feeAttrs,'390005')}} | |
| 46 | + </div> | |
| 47 | + <div> | |
| 48 | + <span>{{$t('feeDetailMonthFee.usage')}}</span>{{_getAttrValue(scope.row.feeAttrs,'390003')}} | |
| 49 | + </div> | |
| 50 | + </div> | |
| 51 | + <div v-else> | |
| 52 | + <div> | |
| 53 | + <span>{{$t('feeDetailMonthFee.unitPrice')}}</span>{{scope.row.squarePrice}} | |
| 54 | + </div> | |
| 55 | + <div v-if="scope.row.feeFlag == '1003006'"> | |
| 56 | + <span>{{$t('feeDetailMonthFee.additionalFee')}}</span>{{scope.row.additionalAmount}} | |
| 57 | + </div> | |
| 58 | + <div v-else> | |
| 59 | + <span>{{$t('feeDetailMonthFee.fixedFee')}}</span>{{scope.row.additionalAmount}} | |
| 60 | + </div> | |
| 61 | + </div> | |
| 62 | + </template> | |
| 63 | + </el-table-column> | |
| 64 | + </el-table> | |
| 65 | + | |
| 66 | + <el-row class="margin-top"> | |
| 67 | + <el-col :span="12"></el-col> | |
| 68 | + <el-col :span="12"> | |
| 69 | + <el-pagination | |
| 70 | + @current-change="handleCurrentChange" | |
| 71 | + :current-page="pagination.currentPage" | |
| 72 | + :page-size="pagination.pageSize" | |
| 73 | + layout="total, prev, pager, next" | |
| 74 | + :total="pagination.total"> | |
| 75 | + </el-pagination> | |
| 76 | + </el-col> | |
| 77 | + </el-row> | |
| 78 | + </div> | |
| 79 | + </div> | |
| 80 | +</template> | |
| 81 | + | |
| 82 | +<script> | |
| 83 | +import { listMonthFee } from '@/api/fee/feeDetailMonthFeeApi' | |
| 84 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 85 | + | |
| 86 | +export default { | |
| 87 | + name: 'FeeDetailMonthFee', | |
| 88 | + data() { | |
| 89 | + return { | |
| 90 | + feeDetailMonthFeeInfo: { | |
| 91 | + monthFees: [], | |
| 92 | + feeId: '' | |
| 93 | + }, | |
| 94 | + pagination: { | |
| 95 | + currentPage: 1, | |
| 96 | + pageSize: 10, | |
| 97 | + total: 0 | |
| 98 | + } | |
| 99 | + } | |
| 100 | + }, | |
| 101 | + methods: { | |
| 102 | + open(params) { | |
| 103 | + this.feeDetailMonthFeeInfo.feeId = params.feeId | |
| 104 | + this._loadFeeDetailMonthFeeData() | |
| 105 | + }, | |
| 106 | + _loadFeeDetailMonthFeeData() { | |
| 107 | + const params = { | |
| 108 | + communityId: getCommunityId(), | |
| 109 | + feeId: this.feeDetailMonthFeeInfo.feeId, | |
| 110 | + detailId: '-1', | |
| 111 | + page: this.pagination.currentPage, | |
| 112 | + row: this.pagination.pageSize | |
| 113 | + } | |
| 114 | + | |
| 115 | + listMonthFee(params).then(res => { | |
| 116 | + this.feeDetailMonthFeeInfo.monthFees = res.data | |
| 117 | + this.pagination.total = res.records | |
| 118 | + }).catch(error => { | |
| 119 | + console.error('Failed to load month fee details:', error) | |
| 120 | + }) | |
| 121 | + }, | |
| 122 | + handleCurrentChange(val) { | |
| 123 | + this.pagination.currentPage = val | |
| 124 | + this._loadFeeDetailMonthFeeData() | |
| 125 | + }, | |
| 126 | + getOnePrice1(fee) { | |
| 127 | + // Implement your logic here | |
| 128 | + return fee.squarePrice || '-' | |
| 129 | + }, | |
| 130 | + _getAttrValue(attrs, code) { | |
| 131 | + if (!attrs) return '-' | |
| 132 | + const attr = attrs.find(item => item.specCd === code) | |
| 133 | + return attr ? attr.value : '-' | |
| 134 | + } | |
| 135 | + } | |
| 136 | +} | |
| 137 | +</script> | |
| 0 | 138 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailMonthFeeDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailMonthFeeDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-month-fee ref="feeDetailMonthFee"></fee-detail-month-fee> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailMonthFee from './feeDetailMonthFee' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailMonthFeeDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailMonthFee | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailMonthFee.open({ | |
| 19 | + feeId: '123' | |
| 20 | + }) | |
| 21 | + } | |
| 22 | + } | |
| 23 | +} | |
| 24 | +</script> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailOwner.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <div class="margin-top"> | |
| 4 | + <el-table | |
| 5 | + :data="feeDetailOwnerInfo.owners" | |
| 6 | + border | |
| 7 | + style="width: 100%" | |
| 8 | + > | |
| 9 | + <el-table-column | |
| 10 | + :label="$t('feeDetailOwner.ownerFace')" | |
| 11 | + align="center" | |
| 12 | + > | |
| 13 | + <template #default="{row}"> | |
| 14 | + <el-image | |
| 15 | + style="width: 60px; height: 60px;" | |
| 16 | + class="border-radius" | |
| 17 | + :src="row.url || '/img/noPhoto.jpg'" | |
| 18 | + :preview-src-list="[row.url]" | |
| 19 | + v-if="row.url" | |
| 20 | + ></el-image> | |
| 21 | + <el-image | |
| 22 | + style="width: 60px; height: 60px;" | |
| 23 | + class="border-radius" | |
| 24 | + src="/img/noPhoto.jpg" | |
| 25 | + v-else | |
| 26 | + ></el-image> | |
| 27 | + </template> | |
| 28 | + </el-table-column> | |
| 29 | + <el-table-column | |
| 30 | + prop="name" | |
| 31 | + :label="$t('feeDetailOwner.name')" | |
| 32 | + align="center" | |
| 33 | + > | |
| 34 | + <template #default="{row}"> | |
| 35 | + {{row.name}}({{row.link}}) | |
| 36 | + </template> | |
| 37 | + </el-table-column> | |
| 38 | + <el-table-column | |
| 39 | + prop="sex" | |
| 40 | + :label="$t('feeDetailOwner.gender')" | |
| 41 | + align="center" | |
| 42 | + > | |
| 43 | + <template #default="{row}"> | |
| 44 | + {{row.sex === 0 ? $t('feeDetailOwner.male') : $t('feeDetailOwner.female')}} | |
| 45 | + </template> | |
| 46 | + </el-table-column> | |
| 47 | + <el-table-column | |
| 48 | + prop="idCard" | |
| 49 | + :label="$t('feeDetailOwner.idCard')" | |
| 50 | + align="center" | |
| 51 | + ></el-table-column> | |
| 52 | + <el-table-column | |
| 53 | + prop="address" | |
| 54 | + :label="$t('feeDetailOwner.address')" | |
| 55 | + align="center" | |
| 56 | + ></el-table-column> | |
| 57 | + <el-table-column | |
| 58 | + prop="roomCount" | |
| 59 | + :label="$t('feeDetailOwner.roomCount')" | |
| 60 | + align="center" | |
| 61 | + > | |
| 62 | + <template #default="{row}"> | |
| 63 | + <el-link type="primary" @click="_viewOwnerRooms(row)"> | |
| 64 | + {{row.roomCount || 0}} | |
| 65 | + </el-link> | |
| 66 | + </template> | |
| 67 | + </el-table-column> | |
| 68 | + <el-table-column | |
| 69 | + prop="memberCount" | |
| 70 | + :label="$t('feeDetailOwner.memberCount')" | |
| 71 | + align="center" | |
| 72 | + > | |
| 73 | + <template #default="{row}"> | |
| 74 | + <el-link type="primary" @click="_viewOwnerMembers(row)"> | |
| 75 | + {{row.memberCount || 0}} | |
| 76 | + </el-link> | |
| 77 | + </template> | |
| 78 | + </el-table-column> | |
| 79 | + <el-table-column | |
| 80 | + prop="carCount" | |
| 81 | + :label="$t('feeDetailOwner.carCount')" | |
| 82 | + align="center" | |
| 83 | + > | |
| 84 | + <template #default="{row}"> | |
| 85 | + <el-link type="primary" @click="_viewOwnerCars(row)"> | |
| 86 | + {{row.carCount || 0}} | |
| 87 | + </el-link> | |
| 88 | + </template> | |
| 89 | + </el-table-column> | |
| 90 | + <el-table-column | |
| 91 | + prop="complaintCount" | |
| 92 | + :label="$t('feeDetailOwner.complaintCount')" | |
| 93 | + align="center" | |
| 94 | + > | |
| 95 | + <template #default="{row}"> | |
| 96 | + <el-link type="primary" @click="_viewComplaints(row)"> | |
| 97 | + {{row.complaintCount || 0}} | |
| 98 | + </el-link> | |
| 99 | + </template> | |
| 100 | + </el-table-column> | |
| 101 | + <el-table-column | |
| 102 | + prop="repairCount" | |
| 103 | + :label="$t('feeDetailOwner.repairCount')" | |
| 104 | + align="center" | |
| 105 | + > | |
| 106 | + <template #default="{row}"> | |
| 107 | + <el-link type="primary" @click="_viewRepairs(row)"> | |
| 108 | + {{row.repairCount || 0}} | |
| 109 | + </el-link> | |
| 110 | + </template> | |
| 111 | + </el-table-column> | |
| 112 | + <el-table-column | |
| 113 | + prop="oweFee" | |
| 114 | + :label="$t('feeDetailOwner.oweFee')" | |
| 115 | + align="center" | |
| 116 | + > | |
| 117 | + <template #default="{row}"> | |
| 118 | + <el-link type="primary" @click="_viewOweFees(row)"> | |
| 119 | + {{row.oweFee || '0.00'}} | |
| 120 | + </el-link> | |
| 121 | + </template> | |
| 122 | + </el-table-column> | |
| 123 | + <el-table-column | |
| 124 | + prop="contractCount" | |
| 125 | + :label="$t('feeDetailOwner.contractCount')" | |
| 126 | + align="center" | |
| 127 | + > | |
| 128 | + <template #default="{row}"> | |
| 129 | + <el-link type="primary" @click="_viewRoomContracts(row)"> | |
| 130 | + {{row.contractCount || 0}} | |
| 131 | + </el-link> | |
| 132 | + </template> | |
| 133 | + </el-table-column> | |
| 134 | + </el-table> | |
| 135 | + | |
| 136 | + <el-row class="margin-top"> | |
| 137 | + <el-col :span="4"></el-col> | |
| 138 | + <el-col :span="20"> | |
| 139 | + <el-pagination | |
| 140 | + @current-change="handleCurrentChange" | |
| 141 | + :current-page="currentPage" | |
| 142 | + :page-size="pageSize" | |
| 143 | + layout="total, prev, pager, next, jumper" | |
| 144 | + :total="total" | |
| 145 | + ></el-pagination> | |
| 146 | + </el-col> | |
| 147 | + </el-row> | |
| 148 | + </div> | |
| 149 | + | |
| 150 | + <owner-rooms ref="ownerRooms"></owner-rooms> | |
| 151 | + <owner-members ref="ownerMembers"></owner-members> | |
| 152 | + <owner-cars ref="ownerCars"></owner-cars> | |
| 153 | + <owner-complaints ref="ownerComplaints"></owner-complaints> | |
| 154 | + <owner-repairs ref="ownerRepairs"></owner-repairs> | |
| 155 | + <owner-owe-fees ref="ownerOweFees"></owner-owe-fees> | |
| 156 | + <room-contracts ref="roomContracts"></room-contracts> | |
| 157 | + </div> | |
| 158 | +</template> | |
| 159 | + | |
| 160 | +<script> | |
| 161 | +import { queryOwners } from '@/api/fee/feeDetailOwnerApi' | |
| 162 | +import OwnerRooms from '@/components/owner/ownerRooms' | |
| 163 | +import OwnerMembers from '@/components/owner/ownerMembers' | |
| 164 | +import OwnerCars from '@/components/owner/ownerCars' | |
| 165 | +import OwnerComplaints from '@/components/owner/ownerComplaints' | |
| 166 | +import OwnerRepairs from '@/components/owner/ownerRepairs' | |
| 167 | +import OwnerOweFees from '@/components/owner/ownerOweFees' | |
| 168 | +import RoomContracts from '@/components/room/roomContracts' | |
| 169 | + | |
| 170 | +export default { | |
| 171 | + name: 'FeeDetailOwner', | |
| 172 | + components: { | |
| 173 | + OwnerRooms, | |
| 174 | + OwnerMembers, | |
| 175 | + OwnerCars, | |
| 176 | + OwnerComplaints, | |
| 177 | + OwnerRepairs, | |
| 178 | + OwnerOweFees, | |
| 179 | + RoomContracts | |
| 180 | + }, | |
| 181 | + data() { | |
| 182 | + return { | |
| 183 | + feeDetailOwnerInfo: { | |
| 184 | + owners: [], | |
| 185 | + ownerId: '' | |
| 186 | + }, | |
| 187 | + currentPage: 1, | |
| 188 | + pageSize: 10, | |
| 189 | + total: 0 | |
| 190 | + } | |
| 191 | + }, | |
| 192 | + methods: { | |
| 193 | + open(params) { | |
| 194 | + if (!params.ownerId) return | |
| 195 | + this.feeDetailOwnerInfo.ownerId = params.ownerId | |
| 196 | + this._loadFeeDetailOwnerData(this.currentPage, this.pageSize) | |
| 197 | + }, | |
| 198 | + handleCurrentChange(val) { | |
| 199 | + this.currentPage = val | |
| 200 | + this._loadFeeDetailOwnerData(this.currentPage, this.pageSize) | |
| 201 | + }, | |
| 202 | + async _loadFeeDetailOwnerData(page, row) { | |
| 203 | + try { | |
| 204 | + const params = { | |
| 205 | + ownerId: this.feeDetailOwnerInfo.ownerId, | |
| 206 | + communityId: this.$store.getters.communityId, | |
| 207 | + ownerTypeCd: '1001', | |
| 208 | + page, | |
| 209 | + row | |
| 210 | + } | |
| 211 | + | |
| 212 | + const res = await queryOwners(params) | |
| 213 | + this.feeDetailOwnerInfo.owners = res.data | |
| 214 | + this.total = res.records | |
| 215 | + } catch (error) { | |
| 216 | + console.error('Failed to load owner data:', error) | |
| 217 | + } | |
| 218 | + }, | |
| 219 | + _viewOwnerRooms(owner) { | |
| 220 | + this.$refs.ownerRooms.open(owner) | |
| 221 | + }, | |
| 222 | + _viewOwnerMembers(owner) { | |
| 223 | + this.$refs.ownerMembers.open(owner) | |
| 224 | + }, | |
| 225 | + _viewOwnerCars(owner) { | |
| 226 | + this.$refs.ownerCars.open(owner) | |
| 227 | + }, | |
| 228 | + _viewComplaints(owner) { | |
| 229 | + this.$refs.ownerComplaints.open(owner) | |
| 230 | + }, | |
| 231 | + _viewRepairs(owner) { | |
| 232 | + this.$refs.ownerRepairs.open(owner) | |
| 233 | + }, | |
| 234 | + _viewOweFees(owner) { | |
| 235 | + this.$refs.ownerOweFees.open(owner) | |
| 236 | + }, | |
| 237 | + _viewRoomContracts(owner) { | |
| 238 | + this.$refs.roomContracts.open(owner) | |
| 239 | + } | |
| 240 | + } | |
| 241 | +} | |
| 242 | +</script> | |
| 0 | 243 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailOwnerDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailOwnerDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-owner ref="feeDetailOwner"></fee-detail-owner> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailOwner from './feeDetailOwner' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailOwnerDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailOwner | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailOwner.open({ | |
| 19 | + ownerId: '123' | |
| 20 | + }) | |
| 21 | + } | |
| 22 | + } | |
| 23 | +} | |
| 24 | +</script> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailReceipt.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-row class="margin-top-lg"> | |
| 4 | + <el-col :span="12"></el-col> | |
| 5 | + <el-col :span="12" class="text-right"> | |
| 6 | + <el-button | |
| 7 | + type="primary" | |
| 8 | + size="small" | |
| 9 | + @click="_printFeeReceipt" | |
| 10 | + >{{ $t('feeDetailReceipt.print') }}</el-button> | |
| 11 | + <el-button | |
| 12 | + type="primary" | |
| 13 | + size="small" | |
| 14 | + @click="_printFeeSmallReceipt" | |
| 15 | + >{{ $t('feeDetailReceipt.printSmall') }}</el-button> | |
| 16 | + <el-button | |
| 17 | + type="primary" | |
| 18 | + size="small" | |
| 19 | + @click="_printApplyFeeReceipt" | |
| 20 | + >{{ $t('feeDetailReceipt.printApply') }}</el-button> | |
| 21 | + </el-col> | |
| 22 | + </el-row> | |
| 23 | + | |
| 24 | + <div class="margin-top"> | |
| 25 | + <el-table | |
| 26 | + :data="feeDetailReceiptInfo.feeReceipts" | |
| 27 | + border | |
| 28 | + style="width: 100%" | |
| 29 | + > | |
| 30 | + <el-table-column | |
| 31 | + width="60" | |
| 32 | + align="center" | |
| 33 | + > | |
| 34 | + <template #header> | |
| 35 | + <el-checkbox | |
| 36 | + v-model="feeDetailReceiptInfo.quan" | |
| 37 | + @change="checkAllReceipt" | |
| 38 | + ></el-checkbox> | |
| 39 | + </template> | |
| 40 | + <template #default="{row}"> | |
| 41 | + <el-checkbox | |
| 42 | + v-model="feeDetailReceiptInfo.selectReceipts" | |
| 43 | + :label="row.receiptId" | |
| 44 | + ></el-checkbox> | |
| 45 | + </template> | |
| 46 | + </el-table-column> | |
| 47 | + <el-table-column | |
| 48 | + prop="objName" | |
| 49 | + :label="$t('feeDetailReceipt.feeType')" | |
| 50 | + align="center" | |
| 51 | + ></el-table-column> | |
| 52 | + <el-table-column | |
| 53 | + prop="payObjName" | |
| 54 | + :label="$t('feeDetailReceipt.owner')" | |
| 55 | + align="center" | |
| 56 | + ></el-table-column> | |
| 57 | + <el-table-column | |
| 58 | + prop="feeName" | |
| 59 | + :label="$t('feeDetailReceipt.feeItem')" | |
| 60 | + align="center" | |
| 61 | + ></el-table-column> | |
| 62 | + <el-table-column | |
| 63 | + :label="$t('feeDetailReceipt.feePeriod')" | |
| 64 | + align="center" | |
| 65 | + > | |
| 66 | + <template #default="{row}"> | |
| 67 | + {{$dayjs(row.startTime).format('YYYY-MM-DD')}}~<br/> | |
| 68 | + {{$dayjs(row.endTime).format('YYYY-MM-DD')}} | |
| 69 | + </template> | |
| 70 | + </el-table-column> | |
| 71 | + <el-table-column | |
| 72 | + prop="amount" | |
| 73 | + :label="$t('feeDetailReceipt.totalAmount')" | |
| 74 | + align="center" | |
| 75 | + > | |
| 76 | + <template #default="{row}"> | |
| 77 | + {{row.amount}}{{$t('feeDetailReceipt.yuan')}} | |
| 78 | + </template> | |
| 79 | + </el-table-column> | |
| 80 | + <el-table-column | |
| 81 | + prop="createTime" | |
| 82 | + :label="$t('feeDetailReceipt.paymentTime')" | |
| 83 | + align="center" | |
| 84 | + ></el-table-column> | |
| 85 | + <el-table-column | |
| 86 | + prop="receiptId" | |
| 87 | + :label="$t('feeDetailReceipt.receiptId')" | |
| 88 | + align="center" | |
| 89 | + ></el-table-column> | |
| 90 | + </el-table> | |
| 91 | + | |
| 92 | + <el-row class="margin-top"> | |
| 93 | + <el-col :span="24" class="float-right"> | |
| 94 | + <el-pagination | |
| 95 | + @current-change="handleCurrentChange" | |
| 96 | + :current-page="currentPage" | |
| 97 | + :page-size="pageSize" | |
| 98 | + layout="total, prev, pager, next, jumper" | |
| 99 | + :total="total" | |
| 100 | + ></el-pagination> | |
| 101 | + </el-col> | |
| 102 | + </el-row> | |
| 103 | + </div> | |
| 104 | + </div> | |
| 105 | +</template> | |
| 106 | + | |
| 107 | +<script> | |
| 108 | +import { queryFeeReceipt, listFeePrintPage } from '@/api/fee/feeDetailReceiptApi' | |
| 109 | + | |
| 110 | +export default { | |
| 111 | + name: 'FeeDetailReceipt', | |
| 112 | + data() { | |
| 113 | + return { | |
| 114 | + feeDetailReceiptInfo: { | |
| 115 | + feeReceipts: [], | |
| 116 | + feeId: '', | |
| 117 | + total: 0, | |
| 118 | + records: 0, | |
| 119 | + selectReceipts: [], | |
| 120 | + quan: false, | |
| 121 | + printUrl: '/print.html#/pages/property/printPayFee' | |
| 122 | + }, | |
| 123 | + currentPage: 1, | |
| 124 | + pageSize: 10 | |
| 125 | + } | |
| 126 | + }, | |
| 127 | + watch: { | |
| 128 | + 'feeDetailReceiptInfo.selectReceipts': { | |
| 129 | + handler(newVal) { | |
| 130 | + this.feeDetailReceiptInfo.quan = newVal.length === this.feeDetailReceiptInfo.feeReceipts.length | |
| 131 | + }, | |
| 132 | + deep: true | |
| 133 | + } | |
| 134 | + }, | |
| 135 | + methods: { | |
| 136 | + open(params) { | |
| 137 | + if (!params.feeId) return | |
| 138 | + this.feeDetailReceiptInfo = Object.assign(this.feeDetailReceiptInfo, params) | |
| 139 | + this._listFeePrintPages() | |
| 140 | + this._listFeeDetailReceipt(this.currentPage, this.pageSize) | |
| 141 | + }, | |
| 142 | + handleCurrentChange(val) { | |
| 143 | + this.currentPage = val | |
| 144 | + this._listFeeDetailReceipt(this.currentPage, this.pageSize) | |
| 145 | + }, | |
| 146 | + async _listFeeDetailReceipt(page, rows) { | |
| 147 | + try { | |
| 148 | + this.feeDetailReceiptInfo.selectReceipts = [] | |
| 149 | + this.feeDetailReceiptInfo.quan = false | |
| 150 | + | |
| 151 | + const params = { | |
| 152 | + page, | |
| 153 | + row: rows, | |
| 154 | + feeId: this.feeDetailReceiptInfo.feeId, | |
| 155 | + communityId: this.$store.getters.communityId | |
| 156 | + } | |
| 157 | + | |
| 158 | + const res = await queryFeeReceipt(params) | |
| 159 | + this.feeDetailReceiptInfo.total = res.total | |
| 160 | + this.feeDetailReceiptInfo.records = res.records | |
| 161 | + this.feeDetailReceiptInfo.feeReceipts = res.data | |
| 162 | + } catch (error) { | |
| 163 | + console.error('Failed to load receipt data:', error) | |
| 164 | + } | |
| 165 | + }, | |
| 166 | + _printFeeReceipt() { | |
| 167 | + if (this.feeDetailReceiptInfo.selectReceipts.length < 1) { | |
| 168 | + this.$message.warning(this.$t('feeDetailReceipt.selectPrintReceipt')) | |
| 169 | + return | |
| 170 | + } | |
| 171 | + | |
| 172 | + const receiptIds = this.feeDetailReceiptInfo.selectReceipts.join(',') | |
| 173 | + window.open(`${this.feeDetailReceiptInfo.printUrl}?receiptIds=${receiptIds}&apply=N`) | |
| 174 | + }, | |
| 175 | + _printApplyFeeReceipt() { | |
| 176 | + if (this.feeDetailReceiptInfo.selectReceipts.length < 1) { | |
| 177 | + this.$message.warning(this.$t('feeDetailReceipt.selectPrintApply')) | |
| 178 | + return | |
| 179 | + } | |
| 180 | + | |
| 181 | + const receiptIds = this.feeDetailReceiptInfo.selectReceipts.join(',') | |
| 182 | + window.open(`/print.html#/pages/property/printPayFee?receiptIds=${receiptIds}&apply=Y`) | |
| 183 | + }, | |
| 184 | + _printFeeSmallReceipt() { | |
| 185 | + if (this.feeDetailReceiptInfo.selectReceipts.length < 1) { | |
| 186 | + this.$message.warning(this.$t('feeDetailReceipt.selectPrintReceipt')) | |
| 187 | + return | |
| 188 | + } | |
| 189 | + | |
| 190 | + const receiptIds = this.feeDetailReceiptInfo.selectReceipts.join(',') | |
| 191 | + window.open(`/smallPrint.html#/pages/property/printSmallPayFee?receiptIds=${receiptIds}`) | |
| 192 | + }, | |
| 193 | + checkAllReceipt(e) { | |
| 194 | + if (e) { | |
| 195 | + this.feeDetailReceiptInfo.selectReceipts = this.feeDetailReceiptInfo.feeReceipts.map(item => item.receiptId) | |
| 196 | + } else { | |
| 197 | + this.feeDetailReceiptInfo.selectReceipts = [] | |
| 198 | + } | |
| 199 | + }, | |
| 200 | + async _listFeePrintPages() { | |
| 201 | + try { | |
| 202 | + const params = { | |
| 203 | + page: 1, | |
| 204 | + row: 1, | |
| 205 | + state: 'T', | |
| 206 | + communityId: this.$store.getters.communityId | |
| 207 | + } | |
| 208 | + | |
| 209 | + const res = await listFeePrintPage(params) | |
| 210 | + if (res.data && res.data.length > 0) { | |
| 211 | + this.feeDetailReceiptInfo.printUrl = res.data[0].url | |
| 212 | + } | |
| 213 | + } catch (error) { | |
| 214 | + console.error('Failed to load print pages:', error) | |
| 215 | + } | |
| 216 | + } | |
| 217 | + } | |
| 218 | +} | |
| 219 | +</script> | |
| 0 | 220 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailReceiptDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailReceiptDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-receipt ref="feeDetailReceipt"></fee-detail-receipt> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailReceipt from './feeDetailReceipt' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailReceiptDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailReceipt | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailReceipt.open({ | |
| 19 | + feeId: '123' | |
| 20 | + }) | |
| 21 | + } | |
| 22 | + } | |
| 23 | +} | |
| 24 | +</script> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailRoom.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <div class="margin-top"> | |
| 4 | + <el-table :data="feeDetailRoomInfo.rooms" style="width: 100%"> | |
| 5 | + <el-table-column :label="$t('feeDetailRoom.roomId')" align="center"> | |
| 6 | + <template slot-scope="scope">{{ scope.row.floorNum }}-{{ scope.row.unitNum }}-{{ scope.row.roomNum }}</template> | |
| 7 | + </el-table-column> | |
| 8 | + <el-table-column prop="layer" :label="$t('feeDetailRoom.floor')" align="center"></el-table-column> | |
| 9 | + <el-table-column prop="roomSubTypeName" :label="$t('feeDetailRoom.type')" align="center"></el-table-column> | |
| 10 | + <el-table-column :label="$t('feeDetailRoom.area')" align="center"> | |
| 11 | + <template slot-scope="scope">{{ scope.row.builtUpArea }}/{{ scope.row.roomArea }}</template> | |
| 12 | + </el-table-column> | |
| 13 | + <el-table-column prop="roomRent" :label="$t('feeDetailRoom.rent')" align="center"></el-table-column> | |
| 14 | + <el-table-column prop="stateName" :label="$t('feeDetailRoom.roomStatus')" align="center"></el-table-column> | |
| 15 | + <el-table-column :label="$t('feeDetailRoom.roomArrears')" align="center"> | |
| 16 | + <template slot-scope="scope">{{ scope.row.roomOweFee || | |
| 17 | + '0.00'}}({{ $t('feeDetailRoom.updateDaily') }})</template> | |
| 18 | + </el-table-column> | |
| 19 | + <el-table-column :label="$t('feeDetailRoom.operation')" align="center"> | |
| 20 | + <template slot-scope="scope"> | |
| 21 | + <el-button v-if="scope.row.state != '2002'" size="mini" @click="_toSimplifyAcceptance(scope.row)"> | |
| 22 | + {{ $t('feeDetailRoom.businessAcceptance') }} | |
| 23 | + </el-button> | |
| 24 | + </template> | |
| 25 | + </el-table-column> | |
| 26 | + </el-table> | |
| 27 | + | |
| 28 | + <el-row class="margin-top"> | |
| 29 | + <el-col :span="12"></el-col> | |
| 30 | + <el-col :span="12"> | |
| 31 | + <el-pagination @current-change="handleCurrentChange" :current-page="pagination.currentPage" | |
| 32 | + :page-size="pagination.pageSize" layout="total, prev, pager, next" :total="pagination.total"> | |
| 33 | + </el-pagination> | |
| 34 | + </el-col> | |
| 35 | + </el-row> | |
| 36 | + </div> | |
| 37 | + </div> | |
| 38 | +</template> | |
| 39 | + | |
| 40 | +<script> | |
| 41 | +import { queryRooms } from '@/api/fee/feeDetailRoomApi' | |
| 42 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 43 | + | |
| 44 | +export default { | |
| 45 | + name: 'FeeDetailRoom', | |
| 46 | + data() { | |
| 47 | + return { | |
| 48 | + feeDetailRoomInfo: { | |
| 49 | + rooms: [], | |
| 50 | + roomId: '', | |
| 51 | + roomNum: '', | |
| 52 | + allOweFeeAmount: '0' | |
| 53 | + }, | |
| 54 | + pagination: { | |
| 55 | + currentPage: 1, | |
| 56 | + pageSize: 10, | |
| 57 | + total: 0 | |
| 58 | + } | |
| 59 | + } | |
| 60 | + }, | |
| 61 | + methods: { | |
| 62 | + open(params) { | |
| 63 | + this.feeDetailRoomInfo.roomId = params.payerObjId | |
| 64 | + this._loadFeeDetailRoomData() | |
| 65 | + }, | |
| 66 | + _loadFeeDetailRoomData() { | |
| 67 | + const params = { | |
| 68 | + communityId: getCommunityId(), | |
| 69 | + roomId: this.feeDetailRoomInfo.roomId, | |
| 70 | + page: this.pagination.currentPage, | |
| 71 | + row: this.pagination.pageSize | |
| 72 | + } | |
| 73 | + | |
| 74 | + queryRooms(params).then(res => { | |
| 75 | + this.feeDetailRoomInfo.rooms = res.rooms | |
| 76 | + this.pagination.total = res.records | |
| 77 | + }).catch(error => { | |
| 78 | + console.error('Failed to load room details:', error) | |
| 79 | + }) | |
| 80 | + }, | |
| 81 | + handleCurrentChange(val) { | |
| 82 | + this.pagination.currentPage = val | |
| 83 | + this._loadFeeDetailRoomData() | |
| 84 | + }, | |
| 85 | + _toSimplifyAcceptance(room) { | |
| 86 | + const date = new Date() | |
| 87 | + this.$store.dispatch('app/saveData', { | |
| 88 | + key: 'JAVA110_IS_BACK', | |
| 89 | + value: date.getTime() | |
| 90 | + }) | |
| 91 | + this.$store.dispatch('app/saveData', { | |
| 92 | + key: 'simplifyAcceptanceSearch', | |
| 93 | + value: { | |
| 94 | + searchType: '1', | |
| 95 | + searchValue: `${room.floorNum}-${room.unitNum}-${room.roomNum}`, | |
| 96 | + searchPlaceholder: this.$t('feeDetailRoom.searchPlaceholder') | |
| 97 | + } | |
| 98 | + }) | |
| 99 | + this.$router.push('/pages/property/simplifyAcceptance?tab=businessAcceptance') | |
| 100 | + } | |
| 101 | + } | |
| 102 | +} | |
| 103 | +</script> | |
| 0 | 104 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailRoomDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailRoomDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-room ref="feeDetailRoom"></fee-detail-room> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailRoom from './feeDetailRoom' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailRoomDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailRoom | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailRoom.open({ | |
| 19 | + payerObjId: '123' | |
| 20 | + }) | |
| 21 | + } | |
| 22 | + } | |
| 23 | +} | |
| 24 | +</script> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailRuleBill.vue
| ... | ... | @@ -25,7 +25,7 @@ |
| 25 | 25 | <el-table-column :label="$t('common.operation')" align="center"> |
| 26 | 26 | <template slot-scope="scope"> |
| 27 | 27 | <el-button type="text" size="small"> |
| 28 | - <a :href="'/#/pages/fee/feeDetail?feeId=' + scope.row.feeId" target="_blank"> | |
| 28 | + <a :href="'/#/views/fee/feeDetail?feeId=' + scope.row.feeId" target="_blank"> | |
| 29 | 29 | {{ $t('common.detail') }} |
| 30 | 30 | </a> |
| 31 | 31 | </el-button> | ... | ... |
src/components/fee/feeDetailSub.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-row> | |
| 4 | + <el-col :span="24" class="text-right"> | |
| 5 | + <el-button type="primary" size="small" style="margin-left: 10px" | |
| 6 | + v-if="hasPrivilege('502020090427190001') && feeDetailSubInfo.fee.state === '2008001'" @click="_splitPayFee"> | |
| 7 | + {{ $t('feeDetailSub.split') }} | |
| 8 | + </el-button> | |
| 9 | + </el-col> | |
| 10 | + </el-row> | |
| 11 | + | |
| 12 | + <el-table :data="feeDetailSubInfo.subs" border style="width: 100%" class="margin-top"> | |
| 13 | + <el-table-column prop="preFeeId" :label="$t('feeDetailSub.parentFeeId')" align="center"> | |
| 14 | + <template slot-scope="scope"> | |
| 15 | + <router-link :to="`/views/fee/feeDetail?feeId=${scope.row.preFeeId}`" target="_blank"> | |
| 16 | + {{ scope.row.preFeeId }} | |
| 17 | + </router-link> | |
| 18 | + </template> | |
| 19 | + </el-table-column> | |
| 20 | + <el-table-column prop="feeId" :label="$t('feeDetailSub.childFeeId')" align="center"> | |
| 21 | + <template slot-scope="scope"> | |
| 22 | + <router-link :to="`/views/fee/feeDetail?feeId=${scope.row.feeId}`" target="_blank"> | |
| 23 | + {{ scope.row.feeId }} | |
| 24 | + </router-link> | |
| 25 | + </template> | |
| 26 | + </el-table-column> | |
| 27 | + <el-table-column prop="feeName" :label="$t('feeDetailSub.feeName')" align="center" /> | |
| 28 | + <el-table-column prop="payerObjName" :label="$t('feeDetailSub.feeObject')" align="center" /> | |
| 29 | + <el-table-column :label="$t('feeDetailSub.billingPeriod')" align="center"> | |
| 30 | + <template slot-scope="scope"> | |
| 31 | + {{ dateFormat(new Date(scope.row.endTime)) }}<br /> | |
| 32 | + ~{{ dateFormat(new Date(scope.row.maxTime)) }} | |
| 33 | + </template> | |
| 34 | + </el-table-column> | |
| 35 | + <el-table-column prop="createTime" :label="$t('feeDetailSub.splitTime')" align="center" /> | |
| 36 | + <el-table-column :label="$t('feeDetailSub.operation')" align="center"> | |
| 37 | + <template slot-scope="scope"> | |
| 38 | + <el-button size="mini" @click="_mergeFee(scope.row)"> | |
| 39 | + {{ $t('feeDetailSub.restoreMerge') }} | |
| 40 | + </el-button> | |
| 41 | + </template> | |
| 42 | + </el-table-column> | |
| 43 | + </el-table> | |
| 44 | + | |
| 45 | + <el-row> | |
| 46 | + <el-col :span="24" class="text-right"> | |
| 47 | + <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize" | |
| 48 | + :total="feeDetailSubInfo.total" layout="total, prev, pager, next" /> | |
| 49 | + </el-col> | |
| 50 | + </el-row> | |
| 51 | + | |
| 52 | + <merge-fee ref="mergeFee" @merge-success="loadData" /> | |
| 53 | + <split-fee ref="splitFee" @split-success="loadData" /> | |
| 54 | + </div> | |
| 55 | +</template> | |
| 56 | + | |
| 57 | +<script> | |
| 58 | +import { listPayFeeSub, listFee } from '@/api/fee/feeDetailSubApi' | |
| 59 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 60 | +import MergeFee from './mergeFee' | |
| 61 | +import SplitFee from './splitFee' | |
| 62 | +import { dateFormat } from '@/utils/dateUtil' | |
| 63 | + | |
| 64 | +export default { | |
| 65 | + name: 'FeeDetailSub', | |
| 66 | + components: { | |
| 67 | + MergeFee, | |
| 68 | + SplitFee | |
| 69 | + }, | |
| 70 | + data() { | |
| 71 | + return { | |
| 72 | + feeDetailSubInfo: { | |
| 73 | + subs: [], | |
| 74 | + feeId: '', | |
| 75 | + total: 0, | |
| 76 | + records: 0, | |
| 77 | + fee: {} | |
| 78 | + }, | |
| 79 | + currentPage: 1, | |
| 80 | + pageSize: 10, | |
| 81 | + communityId: '' | |
| 82 | + } | |
| 83 | + }, | |
| 84 | + methods: { | |
| 85 | + open(params) { | |
| 86 | + if (!params.feeId) return | |
| 87 | + Object.assign(this.feeDetailSubInfo, params) | |
| 88 | + this.communityId = getCommunityId() | |
| 89 | + this.loadData() | |
| 90 | + }, | |
| 91 | + async loadData() { | |
| 92 | + await this._listFeeDetailSub(this.currentPage, this.pageSize) | |
| 93 | + await this._loadFeeDetailSubFeeInfo() | |
| 94 | + }, | |
| 95 | + async _listFeeDetailSub(page, rows) { | |
| 96 | + try { | |
| 97 | + const params = { | |
| 98 | + page, | |
| 99 | + row: rows, | |
| 100 | + pcFeeId: this.feeDetailSubInfo.feeId, | |
| 101 | + communityId: this.communityId | |
| 102 | + } | |
| 103 | + const res = await listPayFeeSub(params) | |
| 104 | + this.feeDetailSubInfo.total = res.total | |
| 105 | + this.feeDetailSubInfo.records = res.records | |
| 106 | + this.feeDetailSubInfo.subs = res.data | |
| 107 | + this.currentPage = page | |
| 108 | + } catch (error) { | |
| 109 | + console.error('Failed to load fee sub list:', error) | |
| 110 | + } | |
| 111 | + }, | |
| 112 | + async _loadFeeDetailSubFeeInfo() { | |
| 113 | + try { | |
| 114 | + const params = { | |
| 115 | + page: 1, | |
| 116 | + row: 1, | |
| 117 | + feeId: this.feeDetailSubInfo.feeId, | |
| 118 | + communityId: this.communityId | |
| 119 | + } | |
| 120 | + const res = await listFee(params) | |
| 121 | + this.feeDetailSubInfo.fee = res.fees[0] || {} | |
| 122 | + } catch (error) { | |
| 123 | + console.error('Failed to load fee info:', error) | |
| 124 | + } | |
| 125 | + }, | |
| 126 | + _mergeFee(fee) { | |
| 127 | + this.$refs.mergeFee.open(fee) | |
| 128 | + }, | |
| 129 | + _splitPayFee() { | |
| 130 | + this.$refs.splitFee.open(this.feeDetailSubInfo.fee) | |
| 131 | + }, | |
| 132 | + handleCurrentChange(page) { | |
| 133 | + this._listFeeDetailSub(page, this.pageSize) | |
| 134 | + }, | |
| 135 | + dateFormat | |
| 136 | + } | |
| 137 | +} | |
| 138 | +</script> | |
| 139 | + | |
| 140 | +<style scoped> | |
| 141 | +.margin-top { | |
| 142 | + margin-top: 20px; | |
| 143 | +} | |
| 144 | + | |
| 145 | +.text-right { | |
| 146 | + text-align: right; | |
| 147 | +} | |
| 148 | +</style> | |
| 0 | 149 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailSubDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('feeDetailSubDemo.openComponent') }}</el-button> | |
| 4 | + <fee-detail-sub ref="feeDetailSub"></fee-detail-sub> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import FeeDetailSub from './feeDetailSub' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'FeeDetailSubDemo', | |
| 13 | + components: { | |
| 14 | + FeeDetailSub | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.feeDetailSub.open({ | |
| 19 | + feeId: '123' | |
| 20 | + }) | |
| 21 | + } | |
| 22 | + } | |
| 23 | +} | |
| 24 | +</script> | |
| 0 | 25 | \ No newline at end of file | ... | ... |
src/components/fee/mergeFee.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog | |
| 3 | + :title="$t('mergeFee.confirmOperation')" | |
| 4 | + :visible.sync="visible" | |
| 5 | + width="50%" | |
| 6 | + :before-close="closeMergeFeeModel" | |
| 7 | + > | |
| 8 | + <el-table :data="[]" border style="width: 100%"> | |
| 9 | + <el-table-column align="center"> | |
| 10 | + <template > | |
| 11 | + {{ $t('mergeFee.mergeDescription') }} | |
| 12 | + </template> | |
| 13 | + </el-table-column> | |
| 14 | + </el-table> | |
| 15 | + <span slot="footer" class="dialog-footer"> | |
| 16 | + <el-button @click="closeMergeFeeModel">{{ $t('mergeFee.cancel') }}</el-button> | |
| 17 | + <el-button type="primary" @click="_doMergeFee">{{ $t('mergeFee.confirmMerge') }}</el-button> | |
| 18 | + </span> | |
| 19 | + </el-dialog> | |
| 20 | +</template> | |
| 21 | + | |
| 22 | +<script> | |
| 23 | +import { mergePayFee } from '@/api/fee/mergeFeeApi' | |
| 24 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 25 | + | |
| 26 | +export default { | |
| 27 | + name: 'MergeFee', | |
| 28 | + data() { | |
| 29 | + return { | |
| 30 | + visible: false, | |
| 31 | + mergeFeeInfo: {}, | |
| 32 | + communityId: '' | |
| 33 | + } | |
| 34 | + }, | |
| 35 | + methods: { | |
| 36 | + open(params) { | |
| 37 | + this.mergeFeeInfo = params | |
| 38 | + this.communityId = getCommunityId() | |
| 39 | + this.visible = true | |
| 40 | + }, | |
| 41 | + closeMergeFeeModel() { | |
| 42 | + this.visible = false | |
| 43 | + }, | |
| 44 | + async _doMergeFee() { | |
| 45 | + try { | |
| 46 | + const params = { | |
| 47 | + feeId: this.mergeFeeInfo.feeId, | |
| 48 | + communityId: this.communityId | |
| 49 | + } | |
| 50 | + const res = await mergePayFee(params) | |
| 51 | + if (res.code === 0) { | |
| 52 | + this.closeMergeFeeModel() | |
| 53 | + this.$emit('merge-success') | |
| 54 | + this.$message.success(this.$t('mergeFee.mergeSuccess')) | |
| 55 | + } else { | |
| 56 | + this.$message.error(res.msg) | |
| 57 | + } | |
| 58 | + } catch (error) { | |
| 59 | + this.$message.error(error.message) | |
| 60 | + } | |
| 61 | + } | |
| 62 | + } | |
| 63 | +} | |
| 64 | +</script> | |
| 0 | 65 | \ No newline at end of file | ... | ... |
src/components/fee/mergeFeeDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-button @click="openComponent">{{ $t('mergeFeeDemo.openComponent') }}</el-button> | |
| 4 | + <merge-fee ref="mergeFee" @merge-success="handleMergeSuccess"></merge-fee> | |
| 5 | + </div> | |
| 6 | +</template> | |
| 7 | + | |
| 8 | +<script> | |
| 9 | +import MergeFee from './mergeFee' | |
| 10 | + | |
| 11 | +export default { | |
| 12 | + name: 'MergeFeeDemo', | |
| 13 | + components: { | |
| 14 | + MergeFee | |
| 15 | + }, | |
| 16 | + methods: { | |
| 17 | + openComponent() { | |
| 18 | + this.$refs.mergeFee.open({ | |
| 19 | + feeId: '123' | |
| 20 | + }) | |
| 21 | + }, | |
| 22 | + handleMergeSuccess() { | |
| 23 | + this.$message.success(this.$t('mergeFeeDemo.mergeSuccess')) | |
| 24 | + } | |
| 25 | + } | |
| 26 | +} | |
| 27 | +</script> | |
| 0 | 28 | \ No newline at end of file | ... | ... |
src/components/fee/simplifyRoomFee.vue
| ... | ... | @@ -165,7 +165,7 @@ |
| 165 | 165 | {{ $t('simplifyRoomFee.feeChange') }} |
| 166 | 166 | </el-dropdown-item> |
| 167 | 167 | <el-dropdown-item> |
| 168 | - <a target="_blank" :href="'/#/pages/fee/feeDetail?feeId=' + scope.row.feeId"> | |
| 168 | + <a target="_blank" :href="'/#/views/fee/feeDetail?feeId=' + scope.row.feeId"> | |
| 169 | 169 | {{ $t('simplifyRoomFee.details') }} |
| 170 | 170 | </a> |
| 171 | 171 | </el-dropdown-item> |
| ... | ... | @@ -239,7 +239,7 @@ |
| 239 | 239 | </el-table-column> |
| 240 | 240 | <el-table-column :label="$t('simplifyRoomFee.operation')" align="center"> |
| 241 | 241 | <template slot-scope="scope"> |
| 242 | - <a target="_blank" :href="'/#/pages/fee/feeDetail?feeId=' + scope.row.feeId"> | |
| 242 | + <a target="_blank" :href="'/#/views/fee/feeDetail?feeId=' + scope.row.feeId"> | |
| 243 | 243 | {{ $t('simplifyRoomFee.details') }} |
| 244 | 244 | </a> |
| 245 | 245 | </template> | ... | ... |
src/components/simplify/simplifyCarFee.vue
| ... | ... | @@ -87,7 +87,7 @@ |
| 87 | 87 | {{ $t('simplifyCarFee.feeChange') }} |
| 88 | 88 | </el-dropdown-item> |
| 89 | 89 | <el-dropdown-item> |
| 90 | - <a target="_blank" :href="'/#/pages/fee/feeDetail?feeId='+row.feeId"> | |
| 90 | + <a target="_blank" :href="'/#/views/fee/feeDetail?feeId='+row.feeId"> | |
| 91 | 91 | {{ $t('simplifyCarFee.details') }} |
| 92 | 92 | </a> |
| 93 | 93 | </el-dropdown-item> | ... | ... |
src/i18n/feeI18n.js
| ... | ... | @@ -32,6 +32,7 @@ import { messages as refundDepositFeeMessages } from '../views/fee/refundDeposit |
| 32 | 32 | import { messages as createFeeByComboMessages } from '../views/fee/createFeeByComboLang' |
| 33 | 33 | import { messages as owePayFeeOrderMessages } from '../views/fee/owePayFeeOrderLang' |
| 34 | 34 | import { messages as printOweFeeMessages } from '../views/fee/printOweFeeLang' |
| 35 | +import { messages as feeDetailMessages } from '../views/fee/feeDetailLang' | |
| 35 | 36 | |
| 36 | 37 | export const messages = { |
| 37 | 38 | en: { |
| ... | ... | @@ -69,6 +70,7 @@ export const messages = { |
| 69 | 70 | ...createFeeByComboMessages.en, |
| 70 | 71 | ...owePayFeeOrderMessages.en, |
| 71 | 72 | ...printOweFeeMessages.en, |
| 73 | + ...feeDetailMessages.en, | |
| 72 | 74 | }, |
| 73 | 75 | zh: { |
| 74 | 76 | ...contractCreateFeeMessages.zh, |
| ... | ... | @@ -105,5 +107,6 @@ export const messages = { |
| 105 | 107 | ...createFeeByComboMessages.zh, |
| 106 | 108 | ...owePayFeeOrderMessages.zh, |
| 107 | 109 | ...printOweFeeMessages.zh, |
| 110 | + ...feeDetailMessages.zh, | |
| 108 | 111 | } |
| 109 | 112 | } |
| 110 | 113 | \ No newline at end of file | ... | ... |
src/router/feeRouter.js
| ... | ... | @@ -154,5 +154,10 @@ export default [ |
| 154 | 154 | name: '/views/fee/printOweFee', |
| 155 | 155 | component: () => import('@/views/fee/printOweFeeList.vue') |
| 156 | 156 | }, |
| 157 | + { | |
| 158 | + path: '/views/fee/feeDetail', | |
| 159 | + name: '/views/fee/feeDetail', | |
| 160 | + component: () => import('@/views/fee/feeDetail.vue') | |
| 161 | + }, | |
| 157 | 162 | |
| 158 | 163 | ] |
| 159 | 164 | \ No newline at end of file | ... | ... |
src/views/fee/feeConfigManageList.vue
src/views/fee/feeDetail.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="fee-detail-container"> | |
| 3 | + <div class="white-bg padding-left padding-right padding-top border-radius-top"> | |
| 4 | + <div class="flex justify-between"> | |
| 5 | + <div class="text-title"> | |
| 6 | + {{ $t('feeDetail.title') }} | |
| 7 | + </div> | |
| 8 | + </div> | |
| 9 | + | |
| 10 | + <!-- 费用信息 --> | |
| 11 | + <div class="margin-top"> | |
| 12 | + <el-row> | |
| 13 | + <el-col :span="24"> | |
| 14 | + <el-row> | |
| 15 | + <el-col :span="6"> | |
| 16 | + <div class="form-group"> | |
| 17 | + <label class="col-form-label"> | |
| 18 | + {{ $t('feeDetail.feeId') }} | |
| 19 | + </label> | |
| 20 | + <label>{{ feeDetailInfo.feeId }}</label> | |
| 21 | + </div> | |
| 22 | + </el-col> | |
| 23 | + <el-col :span="6"> | |
| 24 | + <div class="form-group"> | |
| 25 | + <label class="col-form-label"> | |
| 26 | + {{ $t('feeDetail.feeFlag') }} | |
| 27 | + </label> | |
| 28 | + <label>{{ feeDetailInfo.feeFlagName || '-' }}</label> | |
| 29 | + </div> | |
| 30 | + </el-col> | |
| 31 | + <el-col :span="6"> | |
| 32 | + <div class="form-group"> | |
| 33 | + <label class="col-form-label"> | |
| 34 | + {{ $t('feeDetail.feeType') }} | |
| 35 | + </label> | |
| 36 | + <label>{{ feeDetailInfo.feeTypeCdName }}</label> | |
| 37 | + </div> | |
| 38 | + </el-col> | |
| 39 | + <el-col :span="6"> | |
| 40 | + <div class="form-group"> | |
| 41 | + <label class="col-form-label"> | |
| 42 | + {{ $t('feeDetail.payerObj') }} | |
| 43 | + </label> | |
| 44 | + <label>{{ feeDetailInfo.payerObjName || '-' }}</label> | |
| 45 | + </div> | |
| 46 | + </el-col> | |
| 47 | + </el-row> | |
| 48 | + | |
| 49 | + <el-row> | |
| 50 | + <el-col :span="6"> | |
| 51 | + <div class="form-group"> | |
| 52 | + <label class="col-form-label"> | |
| 53 | + {{ $t('feeDetail.feeItem') }} | |
| 54 | + </label> | |
| 55 | + <label>{{ feeDetailInfo.feeName }}</label> | |
| 56 | + </div> | |
| 57 | + </el-col> | |
| 58 | + <el-col :span="6"> | |
| 59 | + <div class="form-group"> | |
| 60 | + <label class="col-form-label"> | |
| 61 | + {{ $t('feeDetail.feeStatus') }} | |
| 62 | + </label> | |
| 63 | + <label>{{ feeDetailInfo.stateName }}</label> | |
| 64 | + </div> | |
| 65 | + </el-col> | |
| 66 | + <el-col :span="6"> | |
| 67 | + <div class="form-group"> | |
| 68 | + <label class="col-form-label"> | |
| 69 | + {{ $t('feeDetail.createTime') }} | |
| 70 | + </label> | |
| 71 | + <label>{{ feeDetailInfo.startTime }}</label> | |
| 72 | + </div> | |
| 73 | + </el-col> | |
| 74 | + <el-col :span="6"> | |
| 75 | + <div class="form-group"> | |
| 76 | + <label class="col-form-label"> | |
| 77 | + {{ $t('feeDetail.batchId') }} | |
| 78 | + </label> | |
| 79 | + <label>{{ feeDetailInfo.batchId }}</label> | |
| 80 | + </div> | |
| 81 | + </el-col> | |
| 82 | + </el-row> | |
| 83 | + | |
| 84 | + <el-row> | |
| 85 | + <el-col :span="6"> | |
| 86 | + <div class="form-group"> | |
| 87 | + <label class="col-form-label"> | |
| 88 | + {{ $t('feeDetail.startTime') }} | |
| 89 | + </label> | |
| 90 | + <label>{{ getEndTime(feeDetailInfo) }}</label> | |
| 91 | + </div> | |
| 92 | + </el-col> | |
| 93 | + <el-col :span="6"> | |
| 94 | + <div class="form-group"> | |
| 95 | + <label class="col-form-label"> | |
| 96 | + {{ $t('feeDetail.endTime') }} | |
| 97 | + </label> | |
| 98 | + <label>{{ getDeadlineTime(feeDetailInfo) }}</label> | |
| 99 | + </div> | |
| 100 | + </el-col> | |
| 101 | + <el-col :span="6"> | |
| 102 | + <div class="form-group"> | |
| 103 | + <label class="col-form-label"> | |
| 104 | + {{ $t('feeDetail.owedAmount') }} | |
| 105 | + </label> | |
| 106 | + <label>{{ feeDetailInfo.amountOwed }}</label> | |
| 107 | + </div> | |
| 108 | + </el-col> | |
| 109 | + </el-row> | |
| 110 | + | |
| 111 | + <el-row> | |
| 112 | + <el-col :span="6" v-for="(item, index) in feeDetailInfo.attrs" :key="index"> | |
| 113 | + <div class="form-group"> | |
| 114 | + <label class="col-form-label"> | |
| 115 | + {{ item.specCdName }}: | |
| 116 | + </label> | |
| 117 | + <label>{{ item.value }}</label> | |
| 118 | + </div> | |
| 119 | + </el-col> | |
| 120 | + </el-row> | |
| 121 | + </el-col> | |
| 122 | + </el-row> | |
| 123 | + </div> | |
| 124 | + | |
| 125 | + <div class="vc-line-primary margin-top"></div> | |
| 126 | + | |
| 127 | + <div class="margin-top-sm"> | |
| 128 | + <el-tabs v-model="feeDetailInfo._currentTab" @tab-click="changeTab(feeDetailInfo._currentTab)"> | |
| 129 | + <el-tab-pane :label="$t('feeDetail.paymentRecord')" name="feeDetailHisFee"></el-tab-pane> | |
| 130 | + <el-tab-pane :label="$t('feeDetail.monthlyView')" name="feeDetailMonthFee"></el-tab-pane> | |
| 131 | + <el-tab-pane v-if="feeDetailInfo.payerObjType == '3333'" :label="$t('feeDetail.relatedRoom')" | |
| 132 | + name="feeDetailRoom"> | |
| 133 | + </el-tab-pane> | |
| 134 | + <el-tab-pane v-if="feeDetailInfo.payerObjType == '6666'" :label="$t('feeDetail.relatedCar')" | |
| 135 | + name="feeDetailCar"> | |
| 136 | + </el-tab-pane> | |
| 137 | + <el-tab-pane v-if="feeDetailInfo.payerObjType == '7777'" :label="$t('feeDetail.relatedContract')" | |
| 138 | + name="feeDetailContract"> | |
| 139 | + </el-tab-pane> | |
| 140 | + <el-tab-pane :label="$t('feeDetail.modificationRecord')" name="feeDetailHis"></el-tab-pane> | |
| 141 | + <el-tab-pane :label="$t('feeDetail.feeItem')" name="feeDetailConfig"></el-tab-pane> | |
| 142 | + <el-tab-pane :label="$t('feeDetail.owner')" name="feeDetailOwner"></el-tab-pane> | |
| 143 | + <el-tab-pane :label="$t('feeDetail.sameFeeObj')" name="feeDetailFeeObj"></el-tab-pane> | |
| 144 | + <el-tab-pane :label="$t('feeDetail.relatedMeter')" name="feeDetailMeter"></el-tab-pane> | |
| 145 | + <el-tab-pane :label="$t('feeDetail.relatedImport')" name="feeDetailImport"></el-tab-pane> | |
| 146 | + <el-tab-pane :label="$t('feeDetail.discountApply')" name="feeDetailDiscount"></el-tab-pane> | |
| 147 | + <el-tab-pane :label="$t('feeDetail.reprintReceipt')" name="feeDetailReceipt"></el-tab-pane> | |
| 148 | + <el-tab-pane v-if="feeDetailInfo.feeFlag != '2006012'" :label="$t('feeDetail.feeSplit')" | |
| 149 | + name="feeDetailSub"></el-tab-pane> | |
| 150 | + <el-tab-pane v-if="feeDetailInfo.feeFlag == '2006012'" :label="$t('feeDetail.billRule')" | |
| 151 | + name="feeDetailFeeRule"></el-tab-pane> | |
| 152 | + <el-tab-pane v-if="feeDetailInfo.feeFlag == '2006012'" :label="$t('feeDetail.feeBill')" | |
| 153 | + name="feeDetailRuleBill"></el-tab-pane> | |
| 154 | + </el-tabs> | |
| 155 | + </div> | |
| 156 | + </div> | |
| 157 | + | |
| 158 | + <div class="white-bg padding-left padding-right padding-top border-radius-bottom"> | |
| 159 | + <component :is="feeDetailInfo._currentTab" :key="feeDetailInfo._currentTab" :ref="feeDetailInfo._currentTab" | |
| 160 | + :feeId="feeDetailInfo.feeId" :payerObjId="feeDetailInfo.payerObjId" :configId="feeDetailInfo.configId" | |
| 161 | + :state="feeDetailInfo.state" :ownerId="ownerId"> | |
| 162 | + </component> | |
| 163 | + </div> | |
| 164 | + </div> | |
| 165 | +</template> | |
| 166 | + | |
| 167 | +<script> | |
| 168 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 169 | +import { getFeeDetail } from '@/api/fee/feeDetailApi' | |
| 170 | +import FeeDetailHisFee from '@/components/fee/feeDetailHisFee' | |
| 171 | +import FeeDetailMonthFee from '@/components/fee/feeDetailMonthFee' | |
| 172 | +import FeeDetailRoom from '@/components/fee/feeDetailRoom' | |
| 173 | +import FeeDetailCar from '@/components/fee/feeDetailCar' | |
| 174 | +import FeeDetailContract from '@/components/fee/feeDetailContract' | |
| 175 | +import FeeDetailConfig from '@/components/fee/feeDetailConfig' | |
| 176 | +import FeeDetailHis from '@/components/fee/feeDetailHis' | |
| 177 | +import FeeDetailOwner from '@/components/fee/feeDetailOwner' | |
| 178 | +import FeeDetailFeeObj from '@/components/fee/FeeDetailFeeObj' | |
| 179 | +import FeeDetailMeter from '@/components/fee/feeDetailMeter' | |
| 180 | +import FeeDetailImport from '@/components/fee/feeDetailImport' | |
| 181 | +import FeeDetailDiscount from '@/components/fee/feeDetailDiscount' | |
| 182 | +import FeeDetailReceipt from '@/components/fee/feeDetailReceipt' | |
| 183 | +import FeeDetailSub from '@/components/fee/feeDetailSub' | |
| 184 | +import FeeDetailFeeRule from '@/components/fee/feeDetailFeeRule' | |
| 185 | +import FeeDetailRuleBill from '@/components/fee/feeDetailRuleBill' | |
| 186 | + | |
| 187 | +export default { | |
| 188 | + name: 'FeeDetail', | |
| 189 | + components: { | |
| 190 | + FeeDetailHisFee, | |
| 191 | + FeeDetailMonthFee, | |
| 192 | + FeeDetailRoom, | |
| 193 | + FeeDetailCar, | |
| 194 | + FeeDetailContract, | |
| 195 | + FeeDetailConfig, | |
| 196 | + FeeDetailHis, | |
| 197 | + FeeDetailOwner, | |
| 198 | + FeeDetailFeeObj, | |
| 199 | + FeeDetailMeter, | |
| 200 | + FeeDetailImport, | |
| 201 | + FeeDetailDiscount, | |
| 202 | + FeeDetailReceipt, | |
| 203 | + FeeDetailSub, | |
| 204 | + FeeDetailFeeRule, | |
| 205 | + FeeDetailRuleBill | |
| 206 | + }, | |
| 207 | + data() { | |
| 208 | + return { | |
| 209 | + feeDetailInfo: { | |
| 210 | + feeId: '', | |
| 211 | + configId: '', | |
| 212 | + feeFlag: '', | |
| 213 | + feeFlagName: '', | |
| 214 | + feeTypeCdName: '', | |
| 215 | + payerObjName: '', | |
| 216 | + payerObjId: '', | |
| 217 | + payerObjType: '', | |
| 218 | + feeName: '', | |
| 219 | + stateName: '', | |
| 220 | + state: '', | |
| 221 | + startTime: '', | |
| 222 | + batchId: '', | |
| 223 | + endTime: '', | |
| 224 | + deadlineTime: '', | |
| 225 | + amountOwed: '', | |
| 226 | + attrs: [], | |
| 227 | + _currentTab: 'feeDetailHisFee', | |
| 228 | + needBack: false | |
| 229 | + }, | |
| 230 | + communityId: '' | |
| 231 | + } | |
| 232 | + }, | |
| 233 | + computed: { | |
| 234 | + ownerId() { | |
| 235 | + const ownerAttr = this.feeDetailInfo.attrs.find(item => item.specCd === '390007') | |
| 236 | + return ownerAttr ? ownerAttr.value : '' | |
| 237 | + } | |
| 238 | + }, | |
| 239 | + created() { | |
| 240 | + this.communityId = getCommunityId() | |
| 241 | + this.feeDetailInfo.feeId = this.$route.query.feeId | |
| 242 | + if (this.feeDetailInfo.feeId) { | |
| 243 | + this.loadFeeDetailInfo() | |
| 244 | + } | |
| 245 | + }, | |
| 246 | + methods: { | |
| 247 | + async loadFeeDetailInfo() { | |
| 248 | + try { | |
| 249 | + const params = { | |
| 250 | + page: 1, | |
| 251 | + row: 1, | |
| 252 | + feeId: this.feeDetailInfo.feeId, | |
| 253 | + communityId: this.communityId | |
| 254 | + } | |
| 255 | + const response = await getFeeDetail(params) | |
| 256 | + const feeInfo = response.fees[0] | |
| 257 | + Object.assign(this.feeDetailInfo, feeInfo) | |
| 258 | + this.feeDetailInfo.attrs = feeInfo.feeAttrs || [] | |
| 259 | + this.changeTab(this.feeDetailInfo._currentTab) | |
| 260 | + } catch (error) { | |
| 261 | + console.error('Failed to load fee detail:', error) | |
| 262 | + } | |
| 263 | + }, | |
| 264 | + changeTab(tab) { | |
| 265 | + this.feeDetailInfo._currentTab = tab | |
| 266 | + setTimeout(() => { | |
| 267 | + this.$refs[tab].open({ | |
| 268 | + feeId: this.feeDetailInfo.feeId, | |
| 269 | + payerObjId: this.feeDetailInfo.payerObjId, | |
| 270 | + configId: this.feeDetailInfo.configId, | |
| 271 | + state: this.feeDetailInfo.state, | |
| 272 | + ownerId: this.ownerId | |
| 273 | + }) | |
| 274 | + },500) | |
| 275 | + }, | |
| 276 | + getDeadlineTime(fee) { | |
| 277 | + if (fee.amountOwed == 0 && fee.endTime == fee.deadlineTime) { | |
| 278 | + return "-" | |
| 279 | + } | |
| 280 | + if (fee.state == '2009001') { | |
| 281 | + return "-" | |
| 282 | + } | |
| 283 | + return fee.deadlineTime | |
| 284 | + }, | |
| 285 | + getEndTime(fee) { | |
| 286 | + if (fee.state == '2009001') { | |
| 287 | + return "-" | |
| 288 | + } | |
| 289 | + return fee.endTime | |
| 290 | + } | |
| 291 | + } | |
| 292 | +} | |
| 293 | +</script> | |
| 294 | + | |
| 295 | +<style scoped> | |
| 296 | +.fee-detail-container { | |
| 297 | + background-color: #f5f5f5; | |
| 298 | + padding: 20px; | |
| 299 | +} | |
| 300 | + | |
| 301 | +.white-bg { | |
| 302 | + background-color: white; | |
| 303 | +} | |
| 304 | + | |
| 305 | +.padding-left { | |
| 306 | + padding-left: 15px; | |
| 307 | +} | |
| 308 | + | |
| 309 | +.padding-right { | |
| 310 | + padding-right: 15px; | |
| 311 | +} | |
| 312 | + | |
| 313 | +.padding-top { | |
| 314 | + padding-top: 15px; | |
| 315 | +} | |
| 316 | + | |
| 317 | +.border-radius-top { | |
| 318 | + border-radius: 4px 4px 0 0; | |
| 319 | +} | |
| 320 | + | |
| 321 | +.border-radius-bottom { | |
| 322 | + border-radius: 0 0 4px 4px; | |
| 323 | +} | |
| 324 | + | |
| 325 | +.flex { | |
| 326 | + display: flex; | |
| 327 | +} | |
| 328 | + | |
| 329 | +.justify-between { | |
| 330 | + justify-content: space-between; | |
| 331 | +} | |
| 332 | + | |
| 333 | +.text-title { | |
| 334 | + font-size: 18px; | |
| 335 | + font-weight: bold; | |
| 336 | +} | |
| 337 | + | |
| 338 | +.margin-top { | |
| 339 | + margin-top: 15px; | |
| 340 | +} | |
| 341 | + | |
| 342 | +.margin-top-sm { | |
| 343 | + margin-top: 10px; | |
| 344 | +} | |
| 345 | + | |
| 346 | +.form-group { | |
| 347 | + margin-bottom: 15px; | |
| 348 | + text-align: left; | |
| 349 | +} | |
| 350 | + | |
| 351 | +.col-form-label { | |
| 352 | + margin-bottom: 5px; | |
| 353 | +} | |
| 354 | + | |
| 355 | +.vc-line-primary { | |
| 356 | + height: 1px; | |
| 357 | + background-color: #e8e8e8; | |
| 358 | +} | |
| 359 | +</style> | |
| 0 | 360 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailCarLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailCar: { | |
| 4 | + licensePlate: 'License Plate', | |
| 5 | + licenseType: 'License Type', | |
| 6 | + carType: 'Car Type', | |
| 7 | + color: 'Color', | |
| 8 | + owner: 'Owner', | |
| 9 | + parkingSpace: 'Parking Space', | |
| 10 | + validityPeriod: 'Validity Period', | |
| 11 | + temporaryCar: 'Temporary Car', | |
| 12 | + parkingLot: 'Parking Lot', | |
| 13 | + spaceReleased: 'Space Released' | |
| 14 | + }, | |
| 15 | + feeDetailCarDemo: { | |
| 16 | + openComponent: 'Open Car Detail' | |
| 17 | + } | |
| 18 | + }, | |
| 19 | + zh: { | |
| 20 | + feeDetailCar: { | |
| 21 | + licensePlate: '车牌号', | |
| 22 | + licenseType: '车牌类型', | |
| 23 | + carType: '车辆类型', | |
| 24 | + color: '颜色', | |
| 25 | + owner: '业主', | |
| 26 | + parkingSpace: '车位', | |
| 27 | + validityPeriod: '有效期', | |
| 28 | + temporaryCar: '临时车', | |
| 29 | + parkingLot: '车场', | |
| 30 | + spaceReleased: '车位已释放' | |
| 31 | + }, | |
| 32 | + feeDetailCarDemo: { | |
| 33 | + openComponent: '打开车辆详情' | |
| 34 | + } | |
| 35 | + } | |
| 36 | +} | |
| 0 | 37 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailConfigLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailConfig: { | |
| 4 | + feeType: 'Fee Type', | |
| 5 | + feeItem: 'Fee Item', | |
| 6 | + feeFlag: 'Fee Flag', | |
| 7 | + reminderType: 'Reminder Type', | |
| 8 | + paymentType: 'Payment Type', | |
| 9 | + paymentCycle: 'Payment Cycle', | |
| 10 | + unit: 'Unit', | |
| 11 | + formula: 'Formula', | |
| 12 | + unitPrice: 'Unit Price', | |
| 13 | + additionalFee: 'Additional/Fixed Fee', | |
| 14 | + accountDeduction: 'Account Deduction', | |
| 15 | + mobilePayment: 'Mobile Payment', | |
| 16 | + decimalPlaces: 'Decimal Places', | |
| 17 | + prepaid: 'Prepaid', | |
| 18 | + postpaid: 'Postpaid', | |
| 19 | + yes: 'Yes', | |
| 20 | + no: 'No' | |
| 21 | + }, | |
| 22 | + feeDetailConfigDemo: { | |
| 23 | + openComponent: 'Open Config Detail' | |
| 24 | + } | |
| 25 | + }, | |
| 26 | + zh: { | |
| 27 | + feeDetailConfig: { | |
| 28 | + feeType: '费用类型', | |
| 29 | + feeItem: '收费项目', | |
| 30 | + feeFlag: '费用标识', | |
| 31 | + reminderType: '催缴类型', | |
| 32 | + paymentType: '付费类型', | |
| 33 | + paymentCycle: '缴费周期', | |
| 34 | + unit: '单位', | |
| 35 | + formula: '公式', | |
| 36 | + unitPrice: '计费单价', | |
| 37 | + additionalFee: '附加/固定费用', | |
| 38 | + accountDeduction: '账户抵扣', | |
| 39 | + mobilePayment: '手机缴费', | |
| 40 | + decimalPlaces: '保留小数位', | |
| 41 | + prepaid: '预付费', | |
| 42 | + postpaid: '后付费', | |
| 43 | + yes: '是', | |
| 44 | + no: '否' | |
| 45 | + }, | |
| 46 | + feeDetailConfigDemo: { | |
| 47 | + openComponent: '打开配置详情' | |
| 48 | + } | |
| 49 | + } | |
| 50 | +} | |
| 0 | 51 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailContractLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailContract: { | |
| 4 | + contractName: 'Contract Name', | |
| 5 | + contractCode: 'Contract Code', | |
| 6 | + parentContractCode: 'Parent Contract Code', | |
| 7 | + contractType: 'Contract Type', | |
| 8 | + operator: 'Operator', | |
| 9 | + contractAmount: 'Contract Amount', | |
| 10 | + startTime: 'Start Time', | |
| 11 | + endTime: 'End Time', | |
| 12 | + draftTime: 'Draft Time', | |
| 13 | + status: 'Status' | |
| 14 | + }, | |
| 15 | + feeDetailContractDemo: { | |
| 16 | + openComponent: 'Open Contract Detail' | |
| 17 | + } | |
| 18 | + }, | |
| 19 | + zh: { | |
| 20 | + feeDetailContract: { | |
| 21 | + contractName: '合同名称', | |
| 22 | + contractCode: '合同编号', | |
| 23 | + parentContractCode: '父合同编号', | |
| 24 | + contractType: '合同类型', | |
| 25 | + operator: '经办人', | |
| 26 | + contractAmount: '合同金额', | |
| 27 | + startTime: '开始时间', | |
| 28 | + endTime: '结束时间', | |
| 29 | + draftTime: '起草时间', | |
| 30 | + status: '状态' | |
| 31 | + }, | |
| 32 | + feeDetailContractDemo: { | |
| 33 | + openComponent: '打开合同详情' | |
| 34 | + } | |
| 35 | + } | |
| 36 | +} | |
| 0 | 37 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailDiscountLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailDiscount: { | |
| 4 | + roomName: 'Room(Building-Unit-Room)', | |
| 5 | + discountId: 'Discount ID', | |
| 6 | + discountName: 'Discount Name', | |
| 7 | + applyType: 'Apply Type', | |
| 8 | + applicant: 'Applicant', | |
| 9 | + applicantPhone: 'Applicant Phone', | |
| 10 | + startTime: 'Start Time', | |
| 11 | + endTime: 'End Time', | |
| 12 | + status: 'Status', | |
| 13 | + createTime: 'Create Time', | |
| 14 | + useStatus: 'Use Status', | |
| 15 | + notUsed: 'Not Used', | |
| 16 | + used: 'Used', | |
| 17 | + returnType: 'Return Type', | |
| 18 | + accountBalance: 'Account Balance', | |
| 19 | + discount: 'Discount', | |
| 20 | + returnAmount: 'Return Amount' | |
| 21 | + } | |
| 22 | + }, | |
| 23 | + zh: { | |
| 24 | + feeDetailDiscount: { | |
| 25 | + roomName: '房屋(楼栋-单元-房屋)', | |
| 26 | + discountId: '折扣ID', | |
| 27 | + discountName: '折扣名称', | |
| 28 | + applyType: '申请类型', | |
| 29 | + applicant: '申请人', | |
| 30 | + applicantPhone: '申请电话', | |
| 31 | + startTime: '开始时间', | |
| 32 | + endTime: '结束时间', | |
| 33 | + status: '状态', | |
| 34 | + createTime: '创建时间', | |
| 35 | + useStatus: '使用状态', | |
| 36 | + notUsed: '未使用', | |
| 37 | + used: '已使用', | |
| 38 | + returnType: '返还类型', | |
| 39 | + accountBalance: '账户余额', | |
| 40 | + discount: '折扣', | |
| 41 | + returnAmount: '返还金额' | |
| 42 | + } | |
| 43 | + } | |
| 44 | +} | |
| 0 | 45 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailHisFeeLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailHisFee: { | |
| 4 | + feeName: 'Fee Item', | |
| 5 | + payerObjName: 'Charge Object', | |
| 6 | + cycles: 'Cycle (Unit: Month)', | |
| 7 | + amount: 'Receivable/Received (Unit: Yuan)', | |
| 8 | + paymentMethod: 'Payment Method', | |
| 9 | + paymentPeriod: 'Payment Period', | |
| 10 | + paymentTime: 'Payment Time', | |
| 11 | + cashier: 'Cashier', | |
| 12 | + status: 'Status', | |
| 13 | + remark: 'Remark', | |
| 14 | + operation: 'Operation', | |
| 15 | + detail: 'Detail', | |
| 16 | + accountDeduction: 'Account Deduction' | |
| 17 | + }, | |
| 18 | + feeDetailHisFeeDemo: { | |
| 19 | + openComponent: 'Open Fee Detail History' | |
| 20 | + } | |
| 21 | + }, | |
| 22 | + zh: { | |
| 23 | + feeDetailHisFee: { | |
| 24 | + feeName: '费用项', | |
| 25 | + payerObjName: '收费对象', | |
| 26 | + cycles: '周期(单位:月)', | |
| 27 | + amount: '应收/实收(单位:元)', | |
| 28 | + paymentMethod: '缴费方式', | |
| 29 | + paymentPeriod: '缴费起始段', | |
| 30 | + paymentTime: '缴费时间', | |
| 31 | + cashier: '收银员', | |
| 32 | + status: '状态', | |
| 33 | + remark: '备注', | |
| 34 | + operation: '操作', | |
| 35 | + detail: '详情', | |
| 36 | + accountDeduction: '账户扣款' | |
| 37 | + }, | |
| 38 | + feeDetailHisFeeDemo: { | |
| 39 | + openComponent: '打开历史费用详情' | |
| 40 | + } | |
| 41 | + } | |
| 42 | +} | |
| 0 | 43 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailHisLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailHis: { | |
| 4 | + feeName: 'Fee Item', | |
| 5 | + startTime: 'Account Time', | |
| 6 | + endTime: 'Billing Start Time', | |
| 7 | + operation: 'Action', | |
| 8 | + operator: 'Operator', | |
| 9 | + operationTime: 'Operation Time', | |
| 10 | + add: 'Add', | |
| 11 | + delete: 'Delete', | |
| 12 | + modifyNew: 'Modify(New)', | |
| 13 | + modifyOld: 'Modify(Old)' | |
| 14 | + } | |
| 15 | + }, | |
| 16 | + zh: { | |
| 17 | + feeDetailHis: { | |
| 18 | + feeName: '费用项', | |
| 19 | + startTime: '建账时间', | |
| 20 | + endTime: '计费起始时间', | |
| 21 | + operation: '动作', | |
| 22 | + operator: '操作人', | |
| 23 | + operationTime: '操作时间', | |
| 24 | + add: '添加', | |
| 25 | + delete: '删除', | |
| 26 | + modifyNew: '修改(新)', | |
| 27 | + modifyOld: '修改(旧)' | |
| 28 | + } | |
| 29 | + } | |
| 30 | +} | |
| 0 | 31 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailImportLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailImport: { | |
| 4 | + floorNum: 'Building No.', | |
| 5 | + unitNum: 'Unit No.', | |
| 6 | + roomNum: 'Room No.', | |
| 7 | + feeName: 'Fee Name', | |
| 8 | + startTime: 'Start Time', | |
| 9 | + endTime: 'End Time', | |
| 10 | + totalAmount: 'Total Amount', | |
| 11 | + remark: 'Remark', | |
| 12 | + status: 'Status', | |
| 13 | + importSuccess: 'Import Success', | |
| 14 | + importFailed: 'Import Failed' | |
| 15 | + } | |
| 16 | + }, | |
| 17 | + zh: { | |
| 18 | + feeDetailImport: { | |
| 19 | + floorNum: '楼栋编号', | |
| 20 | + unitNum: '单元编号', | |
| 21 | + roomNum: '房屋编号', | |
| 22 | + feeName: '费用名称', | |
| 23 | + startTime: '开始时间', | |
| 24 | + endTime: '结束时间', | |
| 25 | + totalAmount: '总金额', | |
| 26 | + remark: '备注', | |
| 27 | + status: '状态', | |
| 28 | + importSuccess: '导入成功', | |
| 29 | + importFailed: '导入失败' | |
| 30 | + } | |
| 31 | + } | |
| 32 | +} | |
| 0 | 33 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailLang.js
0 → 100644
| 1 | + | |
| 2 | +export const messages = { | |
| 3 | + en: { | |
| 4 | + feeDetail: { | |
| 5 | + title: 'Fee Information', | |
| 6 | + feeId: 'Fee ID:', | |
| 7 | + feeFlag: 'Fee Flag:', | |
| 8 | + feeType: 'Fee Type:', | |
| 9 | + payerObj: 'Payer:', | |
| 10 | + feeItem: 'Fee Item:', | |
| 11 | + feeStatus: 'Fee Status:', | |
| 12 | + createTime: 'Create Time:', | |
| 13 | + batchId: 'Batch:', | |
| 14 | + startTime: 'Start Time:', | |
| 15 | + endTime: 'End Time:', | |
| 16 | + owedAmount: 'Owed Amount:', | |
| 17 | + paymentRecord: 'Payment Records', | |
| 18 | + monthlyView: 'Monthly View', | |
| 19 | + relatedRoom: 'Related Rooms', | |
| 20 | + relatedCar: 'Related Cars', | |
| 21 | + relatedContract: 'Related Contracts', | |
| 22 | + modificationRecord: 'Modification Records', | |
| 23 | + owner: 'Owner', | |
| 24 | + sameFeeObj: 'Same Fee Objects', | |
| 25 | + relatedMeter: 'Related Meters', | |
| 26 | + relatedImport: 'Related Imports', | |
| 27 | + discountApply: 'Discount Application', | |
| 28 | + reprintReceipt: 'Reprint Receipt', | |
| 29 | + feeSplit: 'Fee Split', | |
| 30 | + billRule: 'Bill Rules', | |
| 31 | + feeBill: 'Fee Bills' | |
| 32 | + }, | |
| 33 | + feeDetailHisFee: { | |
| 34 | + feeName: 'Fee Item', | |
| 35 | + payerObjName: 'Charge Object', | |
| 36 | + cycles: 'Cycle (Unit: Month)', | |
| 37 | + amount: 'Receivable/Received (Unit: Yuan)', | |
| 38 | + paymentMethod: 'Payment Method', | |
| 39 | + paymentPeriod: 'Payment Period', | |
| 40 | + paymentTime: 'Payment Time', | |
| 41 | + cashier: 'Cashier', | |
| 42 | + status: 'Status', | |
| 43 | + remark: 'Remark', | |
| 44 | + operation: 'Operation', | |
| 45 | + detail: 'Detail', | |
| 46 | + accountDeduction: 'Account Deduction' | |
| 47 | + }, | |
| 48 | + feeDetailHisFeeDemo: { | |
| 49 | + openComponent: 'Open Fee Detail History' | |
| 50 | + }, | |
| 51 | + feeDetailMonthFee: { | |
| 52 | + feeItem: 'Fee Item', | |
| 53 | + feeFlag: 'Fee Flag', | |
| 54 | + feeType: 'Fee Type', | |
| 55 | + chargeYearMonth: 'Charge Year-Month', | |
| 56 | + receivableAmount: 'Receivable Amount', | |
| 57 | + description: 'Description', | |
| 58 | + lastDegrees: 'Last Degrees:', | |
| 59 | + currentDegrees: 'Current Degrees:', | |
| 60 | + unitPrice: 'Unit Price:', | |
| 61 | + additionalFee: 'Additional Fee:', | |
| 62 | + usage: 'Usage:', | |
| 63 | + algorithm: 'Algorithm:', | |
| 64 | + fixedFee: 'Fixed Fee:' | |
| 65 | + }, | |
| 66 | + feeDetailMonthFeeDemo: { | |
| 67 | + openComponent: 'Open Month Fee Detail' | |
| 68 | + }, | |
| 69 | + feeDetailRoom: { | |
| 70 | + roomId: 'Room ID', | |
| 71 | + floor: 'Floor', | |
| 72 | + type: 'Type', | |
| 73 | + area: 'Built-up/Indoor Area', | |
| 74 | + rent: 'Rent', | |
| 75 | + roomStatus: 'Room Status', | |
| 76 | + roomArrears: 'Room Arrears', | |
| 77 | + operation: 'Operation', | |
| 78 | + businessAcceptance: 'Business Acceptance', | |
| 79 | + updateDaily: 'Updated Daily', | |
| 80 | + searchPlaceholder: 'Please enter room number like 1-1-1' | |
| 81 | + }, | |
| 82 | + feeDetailRoomDemo: { | |
| 83 | + openComponent: 'Open Room Detail' | |
| 84 | + }, | |
| 85 | + feeDetailCar: { | |
| 86 | + licensePlate: 'License Plate', | |
| 87 | + licenseType: 'License Type', | |
| 88 | + carType: 'Car Type', | |
| 89 | + color: 'Color', | |
| 90 | + owner: 'Owner', | |
| 91 | + parkingSpace: 'Parking Space', | |
| 92 | + validityPeriod: 'Validity Period', | |
| 93 | + temporaryCar: 'Temporary Car', | |
| 94 | + parkingLot: 'Parking Lot', | |
| 95 | + spaceReleased: 'Space Released' | |
| 96 | + }, | |
| 97 | + feeDetailCarDemo: { | |
| 98 | + openComponent: 'Open Car Detail' | |
| 99 | + }, | |
| 100 | + feeDetailContract: { | |
| 101 | + contractName: 'Contract Name', | |
| 102 | + contractCode: 'Contract Code', | |
| 103 | + parentContractCode: 'Parent Contract Code', | |
| 104 | + contractType: 'Contract Type', | |
| 105 | + operator: 'Operator', | |
| 106 | + contractAmount: 'Contract Amount', | |
| 107 | + startTime: 'Start Time', | |
| 108 | + endTime: 'End Time', | |
| 109 | + draftTime: 'Draft Time', | |
| 110 | + status: 'Status' | |
| 111 | + }, | |
| 112 | + feeDetailContractDemo: { | |
| 113 | + openComponent: 'Open Contract Detail' | |
| 114 | + }, | |
| 115 | + feeDetailConfig: { | |
| 116 | + feeType: 'Fee Type', | |
| 117 | + feeItem: 'Fee Item', | |
| 118 | + feeFlag: 'Fee Flag', | |
| 119 | + reminderType: 'Reminder Type', | |
| 120 | + paymentType: 'Payment Type', | |
| 121 | + paymentCycle: 'Payment Cycle', | |
| 122 | + unit: 'Unit', | |
| 123 | + formula: 'Formula', | |
| 124 | + unitPrice: 'Unit Price', | |
| 125 | + additionalFee: 'Additional/Fixed Fee', | |
| 126 | + accountDeduction: 'Account Deduction', | |
| 127 | + mobilePayment: 'Mobile Payment', | |
| 128 | + decimalPlaces: 'Decimal Places', | |
| 129 | + prepaid: 'Prepaid', | |
| 130 | + postpaid: 'Postpaid', | |
| 131 | + yes: 'Yes', | |
| 132 | + no: 'No' | |
| 133 | + }, | |
| 134 | + feeDetailConfigDemo: { | |
| 135 | + openComponent: 'Open Config Detail' | |
| 136 | + }, | |
| 137 | + feeDetailHis: { | |
| 138 | + feeName: 'Fee Item', | |
| 139 | + startTime: 'Account Time', | |
| 140 | + endTime: 'Billing Start Time', | |
| 141 | + operation: 'Action', | |
| 142 | + operator: 'Operator', | |
| 143 | + operationTime: 'Operation Time', | |
| 144 | + add: 'Add', | |
| 145 | + delete: 'Delete', | |
| 146 | + modifyNew: 'Modify(New)', | |
| 147 | + modifyOld: 'Modify(Old)' | |
| 148 | + }, | |
| 149 | + feeDetailOwner: { | |
| 150 | + ownerFace: 'Owner Face', | |
| 151 | + name: 'Name', | |
| 152 | + gender: 'Gender', | |
| 153 | + male: 'Male', | |
| 154 | + female: 'Female', | |
| 155 | + idCard: 'ID Card', | |
| 156 | + address: 'Address', | |
| 157 | + roomCount: 'Room Count', | |
| 158 | + memberCount: 'Member Count', | |
| 159 | + carCount: 'Car Count', | |
| 160 | + complaintCount: 'Complaint', | |
| 161 | + repairCount: 'Repair', | |
| 162 | + oweFee: 'Owe Fee', | |
| 163 | + contractCount: 'Contract' | |
| 164 | + }, | |
| 165 | + feeDetailMeter: { | |
| 166 | + meterId: 'Meter ID', | |
| 167 | + meterType: 'Meter Type', | |
| 168 | + objName: 'Object Name', | |
| 169 | + preDegrees: 'Previous Degree', | |
| 170 | + curDegrees: 'Current Degree', | |
| 171 | + preReadingTime: 'Previous Reading Time', | |
| 172 | + curReadingTime: 'Current Reading Time', | |
| 173 | + createTime: 'Create Time' | |
| 174 | + }, | |
| 175 | + feeDetailImport: { | |
| 176 | + floorNum: 'Building No.', | |
| 177 | + unitNum: 'Unit No.', | |
| 178 | + roomNum: 'Room No.', | |
| 179 | + feeName: 'Fee Name', | |
| 180 | + startTime: 'Start Time', | |
| 181 | + endTime: 'End Time', | |
| 182 | + totalAmount: 'Total Amount', | |
| 183 | + remark: 'Remark', | |
| 184 | + status: 'Status', | |
| 185 | + importSuccess: 'Import Success', | |
| 186 | + importFailed: 'Import Failed' | |
| 187 | + }, | |
| 188 | + feeDetailDiscount: { | |
| 189 | + roomName: 'Room(Building-Unit-Room)', | |
| 190 | + discountId: 'Discount ID', | |
| 191 | + discountName: 'Discount Name', | |
| 192 | + applyType: 'Apply Type', | |
| 193 | + applicant: 'Applicant', | |
| 194 | + applicantPhone: 'Applicant Phone', | |
| 195 | + startTime: 'Start Time', | |
| 196 | + endTime: 'End Time', | |
| 197 | + status: 'Status', | |
| 198 | + createTime: 'Create Time', | |
| 199 | + useStatus: 'Use Status', | |
| 200 | + notUsed: 'Not Used', | |
| 201 | + used: 'Used', | |
| 202 | + returnType: 'Return Type', | |
| 203 | + accountBalance: 'Account Balance', | |
| 204 | + discount: 'Discount', | |
| 205 | + returnAmount: 'Return Amount' | |
| 206 | + }, | |
| 207 | + feeDetailReceipt: { | |
| 208 | + print: 'Print', | |
| 209 | + printSmall: 'Print Small', | |
| 210 | + printApply: 'Print Apply', | |
| 211 | + feeType: 'Fee Type', | |
| 212 | + owner: 'Owner', | |
| 213 | + feeItem: 'Fee Item', | |
| 214 | + feePeriod: 'Fee Period', | |
| 215 | + totalAmount: 'Total Amount', | |
| 216 | + paymentTime: 'Payment Time', | |
| 217 | + receiptId: 'Receipt ID', | |
| 218 | + yuan: 'Yuan', | |
| 219 | + selectPrintReceipt: 'Please select receipt to print', | |
| 220 | + selectPrintApply: 'Please select' | |
| 221 | + }, | |
| 222 | + mergeFee: { | |
| 223 | + confirmOperation: 'Please confirm your operation!', | |
| 224 | + mergeDescription: 'Merge split fees. After merging, the split fees will be ended and the original fee will be enabled', | |
| 225 | + cancel: 'Cancel', | |
| 226 | + confirmMerge: 'Confirm Merge', | |
| 227 | + mergeSuccess: 'Merge successful, please check the merged fee in business processing' | |
| 228 | + }, | |
| 229 | + mergeFeeDemo: { | |
| 230 | + openComponent: 'Open Merge Fee Component', | |
| 231 | + mergeSuccess: 'Merge operation completed successfully' | |
| 232 | + }, | |
| 233 | + feeDetailSub: { | |
| 234 | + split: 'Split', | |
| 235 | + parentFeeId: 'Parent Fee ID', | |
| 236 | + childFeeId: 'Child Fee ID', | |
| 237 | + feeName: 'Fee Name', | |
| 238 | + feeObject: 'Fee Object', | |
| 239 | + billingPeriod: 'Billing Period', | |
| 240 | + splitTime: 'Split Time', | |
| 241 | + operation: 'Operation', | |
| 242 | + restoreMerge: 'Restore Merge' | |
| 243 | + }, | |
| 244 | + feeDetailSubDemo: { | |
| 245 | + openComponent: 'Open Fee Detail Sub Component' | |
| 246 | + } | |
| 247 | + }, | |
| 248 | + zh: { | |
| 249 | + feeDetail: { | |
| 250 | + title: '费用信息', | |
| 251 | + feeId: '费用ID:', | |
| 252 | + feeFlag: '费用标识:', | |
| 253 | + feeType: '费用类型:', | |
| 254 | + payerObj: '付费对象:', | |
| 255 | + feeItem: '费用项:', | |
| 256 | + feeStatus: '费用状态:', | |
| 257 | + createTime: '建账时间:', | |
| 258 | + batchId: '批次:', | |
| 259 | + startTime: '应收开始时间:', | |
| 260 | + endTime: '应收结束时间:', | |
| 261 | + owedAmount: '欠费金额:', | |
| 262 | + paymentRecord: '缴费记录', | |
| 263 | + monthlyView: '按月展示', | |
| 264 | + relatedRoom: '关联房屋', | |
| 265 | + relatedCar: '关联车辆', | |
| 266 | + relatedContract: '关联合同', | |
| 267 | + modificationRecord: '修改记录', | |
| 268 | + owner: '业主', | |
| 269 | + sameFeeObj: '同费用对象', | |
| 270 | + relatedMeter: '关联抄表', | |
| 271 | + relatedImport: '关联导入', | |
| 272 | + discountApply: '优惠申请', | |
| 273 | + reprintReceipt: '补打收据', | |
| 274 | + feeSplit: '费用拆分', | |
| 275 | + billRule: '账单规则', | |
| 276 | + feeBill: '费用账单' | |
| 277 | + }, | |
| 278 | + feeDetailHisFee: { | |
| 279 | + feeName: '费用项', | |
| 280 | + payerObjName: '收费对象', | |
| 281 | + cycles: '周期(单位:月)', | |
| 282 | + amount: '应收/实收(单位:元)', | |
| 283 | + paymentMethod: '缴费方式', | |
| 284 | + paymentPeriod: '缴费起始段', | |
| 285 | + paymentTime: '缴费时间', | |
| 286 | + cashier: '收银员', | |
| 287 | + status: '状态', | |
| 288 | + remark: '备注', | |
| 289 | + operation: '操作', | |
| 290 | + detail: '详情', | |
| 291 | + accountDeduction: '账户扣款' | |
| 292 | + }, | |
| 293 | + feeDetailHisFeeDemo: { | |
| 294 | + openComponent: '打开历史费用详情' | |
| 295 | + }, | |
| 296 | + feeDetailMonthFee: { | |
| 297 | + feeItem: '费用项目', | |
| 298 | + feeFlag: '费用标识', | |
| 299 | + feeType: '费用类型', | |
| 300 | + chargeYearMonth: '收费年月', | |
| 301 | + receivableAmount: '应收金额', | |
| 302 | + description: '说明', | |
| 303 | + lastDegrees: '上期度数:', | |
| 304 | + currentDegrees: '本期度数:', | |
| 305 | + unitPrice: '单价:', | |
| 306 | + additionalFee: '附加费:', | |
| 307 | + usage: '用量:', | |
| 308 | + algorithm: '算法:', | |
| 309 | + fixedFee: '固定费:' | |
| 310 | + }, | |
| 311 | + feeDetailMonthFeeDemo: { | |
| 312 | + openComponent: '打开月度费用详情' | |
| 313 | + }, | |
| 314 | + feeDetailRoom: { | |
| 315 | + roomId: '房屋ID', | |
| 316 | + floor: '楼层', | |
| 317 | + type: '类型', | |
| 318 | + area: '建筑/室内面积', | |
| 319 | + rent: '租金', | |
| 320 | + roomStatus: '房屋状态', | |
| 321 | + roomArrears: '房屋欠费', | |
| 322 | + operation: '操作', | |
| 323 | + businessAcceptance: '业务受理', | |
| 324 | + updateDaily: '按天更新', | |
| 325 | + searchPlaceholder: '请输入房屋编号 楼栋-单元-房屋 如1-1-1' | |
| 326 | + }, | |
| 327 | + feeDetailRoomDemo: { | |
| 328 | + openComponent: '打开房屋详情' | |
| 329 | + }, | |
| 330 | + feeDetailCar: { | |
| 331 | + licensePlate: '车牌号', | |
| 332 | + licenseType: '车牌类型', | |
| 333 | + carType: '车辆类型', | |
| 334 | + color: '颜色', | |
| 335 | + owner: '业主', | |
| 336 | + parkingSpace: '车位', | |
| 337 | + validityPeriod: '有效期', | |
| 338 | + temporaryCar: '临时车', | |
| 339 | + parkingLot: '车场', | |
| 340 | + spaceReleased: '车位已释放' | |
| 341 | + }, | |
| 342 | + feeDetailCarDemo: { | |
| 343 | + openComponent: '打开车辆详情' | |
| 344 | + }, | |
| 345 | + feeDetailContract: { | |
| 346 | + contractName: '合同名称', | |
| 347 | + contractCode: '合同编号', | |
| 348 | + parentContractCode: '父合同编号', | |
| 349 | + contractType: '合同类型', | |
| 350 | + operator: '经办人', | |
| 351 | + contractAmount: '合同金额', | |
| 352 | + startTime: '开始时间', | |
| 353 | + endTime: '结束时间', | |
| 354 | + draftTime: '起草时间', | |
| 355 | + status: '状态' | |
| 356 | + }, | |
| 357 | + feeDetailContractDemo: { | |
| 358 | + openComponent: '打开合同详情' | |
| 359 | + }, | |
| 360 | + feeDetailConfig: { | |
| 361 | + feeType: '费用类型', | |
| 362 | + feeItem: '收费项目', | |
| 363 | + feeFlag: '费用标识', | |
| 364 | + reminderType: '催缴类型', | |
| 365 | + paymentType: '付费类型', | |
| 366 | + paymentCycle: '缴费周期', | |
| 367 | + unit: '单位', | |
| 368 | + formula: '公式', | |
| 369 | + unitPrice: '计费单价', | |
| 370 | + additionalFee: '附加/固定费用', | |
| 371 | + accountDeduction: '账户抵扣', | |
| 372 | + mobilePayment: '手机缴费', | |
| 373 | + decimalPlaces: '保留小数位', | |
| 374 | + prepaid: '预付费', | |
| 375 | + postpaid: '后付费', | |
| 376 | + yes: '是', | |
| 377 | + no: '否' | |
| 378 | + }, | |
| 379 | + feeDetailConfigDemo: { | |
| 380 | + openComponent: '打开配置详情' | |
| 381 | + }, | |
| 382 | + feeDetailHis: { | |
| 383 | + feeName: '费用项', | |
| 384 | + startTime: '建账时间', | |
| 385 | + endTime: '计费起始时间', | |
| 386 | + operation: '动作', | |
| 387 | + operator: '操作人', | |
| 388 | + operationTime: '操作时间', | |
| 389 | + add: '添加', | |
| 390 | + delete: '删除', | |
| 391 | + modifyNew: '修改(新)', | |
| 392 | + modifyOld: '修改(旧)' | |
| 393 | + }, | |
| 394 | + feeDetailOwner: { | |
| 395 | + ownerFace: '业主人脸', | |
| 396 | + name: '姓名', | |
| 397 | + gender: '性别', | |
| 398 | + male: '男', | |
| 399 | + female: '女', | |
| 400 | + idCard: '身份证', | |
| 401 | + address: '家庭住址', | |
| 402 | + roomCount: '房屋数', | |
| 403 | + memberCount: '业主成员', | |
| 404 | + carCount: '车辆数', | |
| 405 | + complaintCount: '投诉', | |
| 406 | + repairCount: '报修', | |
| 407 | + oweFee: '欠费', | |
| 408 | + contractCount: '业主合同' | |
| 409 | + }, | |
| 410 | + feeDetailMeter: { | |
| 411 | + meterId: '表ID', | |
| 412 | + meterType: '表类型', | |
| 413 | + objName: '对象名称', | |
| 414 | + preDegrees: '上期度数', | |
| 415 | + curDegrees: '本期度数', | |
| 416 | + preReadingTime: '上期读表时间', | |
| 417 | + curReadingTime: '本期读表时间', | |
| 418 | + createTime: '创建时间' | |
| 419 | + }, | |
| 420 | + feeDetailImport: { | |
| 421 | + floorNum: '楼栋编号', | |
| 422 | + unitNum: '单元编号', | |
| 423 | + roomNum: '房屋编号', | |
| 424 | + feeName: '费用名称', | |
| 425 | + startTime: '开始时间', | |
| 426 | + endTime: '结束时间', | |
| 427 | + totalAmount: '总金额', | |
| 428 | + remark: '备注', | |
| 429 | + status: '状态', | |
| 430 | + importSuccess: '导入成功', | |
| 431 | + importFailed: '导入失败' | |
| 432 | + }, | |
| 433 | + feeDetailDiscount: { | |
| 434 | + roomName: '房屋(楼栋-单元-房屋)', | |
| 435 | + discountId: '折扣ID', | |
| 436 | + discountName: '折扣名称', | |
| 437 | + applyType: '申请类型', | |
| 438 | + applicant: '申请人', | |
| 439 | + applicantPhone: '申请电话', | |
| 440 | + startTime: '开始时间', | |
| 441 | + endTime: '结束时间', | |
| 442 | + status: '状态', | |
| 443 | + createTime: '创建时间', | |
| 444 | + useStatus: '使用状态', | |
| 445 | + notUsed: '未使用', | |
| 446 | + used: '已使用', | |
| 447 | + returnType: '返还类型', | |
| 448 | + accountBalance: '账户余额', | |
| 449 | + discount: '折扣', | |
| 450 | + returnAmount: '返还金额' | |
| 451 | + }, | |
| 452 | + feeDetailReceipt: { | |
| 453 | + print: '打印', | |
| 454 | + printSmall: '打印小票', | |
| 455 | + printApply: '申请单', | |
| 456 | + feeType: '费用类型', | |
| 457 | + owner: '业主', | |
| 458 | + feeItem: '费用项目', | |
| 459 | + feePeriod: '收费时间段', | |
| 460 | + totalAmount: '总金额', | |
| 461 | + paymentTime: '缴费时间', | |
| 462 | + receiptId: '收据ID', | |
| 463 | + yuan: '元', | |
| 464 | + selectPrintReceipt: '请选择打印收据', | |
| 465 | + selectPrintApply: '请选择' | |
| 466 | + }, | |
| 467 | + mergeFee: { | |
| 468 | + confirmOperation: '请确认您的操作!', | |
| 469 | + mergeDescription: '合并拆分费用,合并后,将结束拆分后的费用,启用原费用', | |
| 470 | + cancel: '点错了', | |
| 471 | + confirmMerge: '确认合并', | |
| 472 | + mergeSuccess: '合并成功,请到业务受理查看合并后费用' | |
| 473 | + }, | |
| 474 | + mergeFeeDemo: { | |
| 475 | + openComponent: '打开合并费用组件', | |
| 476 | + mergeSuccess: '合并操作成功完成' | |
| 477 | + }, | |
| 478 | + feeDetailSub: { | |
| 479 | + split: '拆分', | |
| 480 | + parentFeeId: '父费用ID', | |
| 481 | + childFeeId: '子费用ID', | |
| 482 | + feeName: '费用名称', | |
| 483 | + feeObject: '费用对象', | |
| 484 | + billingPeriod: '计费时间段', | |
| 485 | + splitTime: '拆分时间', | |
| 486 | + operation: '操作', | |
| 487 | + restoreMerge: '恢复合并' | |
| 488 | + }, | |
| 489 | + feeDetailSubDemo: { | |
| 490 | + openComponent: '打开费用子详情组件' | |
| 491 | + } | |
| 492 | + } | |
| 493 | +} | ... | ... |
src/views/fee/feeDetailMeterLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailMeter: { | |
| 4 | + meterId: 'Meter ID', | |
| 5 | + meterType: 'Meter Type', | |
| 6 | + objName: 'Object Name', | |
| 7 | + preDegrees: 'Previous Degree', | |
| 8 | + curDegrees: 'Current Degree', | |
| 9 | + preReadingTime: 'Previous Reading Time', | |
| 10 | + curReadingTime: 'Current Reading Time', | |
| 11 | + createTime: 'Create Time' | |
| 12 | + } | |
| 13 | + }, | |
| 14 | + zh: { | |
| 15 | + feeDetailMeter: { | |
| 16 | + meterId: '表ID', | |
| 17 | + meterType: '表类型', | |
| 18 | + objName: '对象名称', | |
| 19 | + preDegrees: '上期度数', | |
| 20 | + curDegrees: '本期度数', | |
| 21 | + preReadingTime: '上期读表时间', | |
| 22 | + curReadingTime: '本期读表时间', | |
| 23 | + createTime: '创建时间' | |
| 24 | + } | |
| 25 | + } | |
| 26 | +} | |
| 0 | 27 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailMonthFeeLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailMonthFee: { | |
| 4 | + feeItem: 'Fee Item', | |
| 5 | + feeFlag: 'Fee Flag', | |
| 6 | + feeType: 'Fee Type', | |
| 7 | + chargeYearMonth: 'Charge Year-Month', | |
| 8 | + receivableAmount: 'Receivable Amount', | |
| 9 | + description: 'Description', | |
| 10 | + lastDegrees: 'Last Degrees:', | |
| 11 | + currentDegrees: 'Current Degrees:', | |
| 12 | + unitPrice: 'Unit Price:', | |
| 13 | + additionalFee: 'Additional Fee:', | |
| 14 | + usage: 'Usage:', | |
| 15 | + algorithm: 'Algorithm:', | |
| 16 | + fixedFee: 'Fixed Fee:' | |
| 17 | + }, | |
| 18 | + feeDetailMonthFeeDemo: { | |
| 19 | + openComponent: 'Open Month Fee Detail' | |
| 20 | + } | |
| 21 | + }, | |
| 22 | + zh: { | |
| 23 | + feeDetailMonthFee: { | |
| 24 | + feeItem: '费用项目', | |
| 25 | + feeFlag: '费用标识', | |
| 26 | + feeType: '费用类型', | |
| 27 | + chargeYearMonth: '收费年月', | |
| 28 | + receivableAmount: '应收金额', | |
| 29 | + description: '说明', | |
| 30 | + lastDegrees: '上期度数:', | |
| 31 | + currentDegrees: '本期度数:', | |
| 32 | + unitPrice: '单价:', | |
| 33 | + additionalFee: '附加费:', | |
| 34 | + usage: '用量:', | |
| 35 | + algorithm: '算法:', | |
| 36 | + fixedFee: '固定费:' | |
| 37 | + }, | |
| 38 | + feeDetailMonthFeeDemo: { | |
| 39 | + openComponent: '打开月度费用详情' | |
| 40 | + } | |
| 41 | + } | |
| 42 | +} | |
| 0 | 43 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailOwnerLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailOwner: { | |
| 4 | + ownerFace: 'Owner Face', | |
| 5 | + name: 'Name', | |
| 6 | + gender: 'Gender', | |
| 7 | + male: 'Male', | |
| 8 | + female: 'Female', | |
| 9 | + idCard: 'ID Card', | |
| 10 | + address: 'Address', | |
| 11 | + roomCount: 'Room Count', | |
| 12 | + memberCount: 'Member Count', | |
| 13 | + carCount: 'Car Count', | |
| 14 | + complaintCount: 'Complaint', | |
| 15 | + repairCount: 'Repair', | |
| 16 | + oweFee: 'Owe Fee', | |
| 17 | + contractCount: 'Contract' | |
| 18 | + } | |
| 19 | + }, | |
| 20 | + zh: { | |
| 21 | + feeDetailOwner: { | |
| 22 | + ownerFace: '业主人脸', | |
| 23 | + name: '姓名', | |
| 24 | + gender: '性别', | |
| 25 | + male: '男', | |
| 26 | + female: '女', | |
| 27 | + idCard: '身份证', | |
| 28 | + address: '家庭住址', | |
| 29 | + roomCount: '房屋数', | |
| 30 | + memberCount: '业主成员', | |
| 31 | + carCount: '车辆数', | |
| 32 | + complaintCount: '投诉', | |
| 33 | + repairCount: '报修', | |
| 34 | + oweFee: '欠费', | |
| 35 | + contractCount: '业主合同' | |
| 36 | + } | |
| 37 | + } | |
| 38 | +} | |
| 0 | 39 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailReceiptLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailReceipt: { | |
| 4 | + print: 'Print', | |
| 5 | + printSmall: 'Print Small', | |
| 6 | + printApply: 'Print Apply', | |
| 7 | + feeType: 'Fee Type', | |
| 8 | + owner: 'Owner', | |
| 9 | + feeItem: 'Fee Item', | |
| 10 | + feePeriod: 'Fee Period', | |
| 11 | + totalAmount: 'Total Amount', | |
| 12 | + paymentTime: 'Payment Time', | |
| 13 | + receiptId: 'Receipt ID', | |
| 14 | + yuan: 'Yuan', | |
| 15 | + selectPrintReceipt: 'Please select receipt to print', | |
| 16 | + selectPrintApply: 'Please select' | |
| 17 | + } | |
| 18 | + }, | |
| 19 | + zh: { | |
| 20 | + feeDetailReceipt: { | |
| 21 | + print: '打印', | |
| 22 | + printSmall: '打印小票', | |
| 23 | + printApply: '申请单', | |
| 24 | + feeType: '费用类型', | |
| 25 | + owner: '业主', | |
| 26 | + feeItem: '费用项目', | |
| 27 | + feePeriod: '收费时间段', | |
| 28 | + totalAmount: '总金额', | |
| 29 | + paymentTime: '缴费时间', | |
| 30 | + receiptId: '收据ID', | |
| 31 | + yuan: '元', | |
| 32 | + selectPrintReceipt: '请选择打印收据', | |
| 33 | + selectPrintApply: '请选择' | |
| 34 | + } | |
| 35 | + } | |
| 36 | +} | |
| 0 | 37 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailRoomLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailRoom: { | |
| 4 | + roomId: 'Room ID', | |
| 5 | + floor: 'Floor', | |
| 6 | + type: 'Type', | |
| 7 | + area: 'Built-up/Indoor Area', | |
| 8 | + rent: 'Rent', | |
| 9 | + roomStatus: 'Room Status', | |
| 10 | + roomArrears: 'Room Arrears', | |
| 11 | + operation: 'Operation', | |
| 12 | + businessAcceptance: 'Business Acceptance', | |
| 13 | + updateDaily: 'Updated Daily', | |
| 14 | + searchPlaceholder: 'Please enter room number like 1-1-1' | |
| 15 | + }, | |
| 16 | + feeDetailRoomDemo: { | |
| 17 | + openComponent: 'Open Room Detail' | |
| 18 | + } | |
| 19 | + }, | |
| 20 | + zh: { | |
| 21 | + feeDetailRoom: { | |
| 22 | + roomId: '房屋ID', | |
| 23 | + floor: '楼层', | |
| 24 | + type: '类型', | |
| 25 | + area: '建筑/室内面积', | |
| 26 | + rent: '租金', | |
| 27 | + roomStatus: '房屋状态', | |
| 28 | + roomArrears: '房屋欠费', | |
| 29 | + operation: '操作', | |
| 30 | + businessAcceptance: '业务受理', | |
| 31 | + updateDaily: '按天更新', | |
| 32 | + searchPlaceholder: '请输入房屋编号 楼栋-单元-房屋 如1-1-1' | |
| 33 | + }, | |
| 34 | + feeDetailRoomDemo: { | |
| 35 | + openComponent: '打开房屋详情' | |
| 36 | + } | |
| 37 | + } | |
| 38 | +} | |
| 0 | 39 | \ No newline at end of file | ... | ... |
src/views/fee/feeDetailSubLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + feeDetailSub: { | |
| 4 | + split: 'Split', | |
| 5 | + parentFeeId: 'Parent Fee ID', | |
| 6 | + childFeeId: 'Child Fee ID', | |
| 7 | + feeName: 'Fee Name', | |
| 8 | + feeObject: 'Fee Object', | |
| 9 | + billingPeriod: 'Billing Period', | |
| 10 | + splitTime: 'Split Time', | |
| 11 | + operation: 'Operation', | |
| 12 | + restoreMerge: 'Restore Merge' | |
| 13 | + }, | |
| 14 | + feeDetailSubDemo: { | |
| 15 | + openComponent: 'Open Fee Detail Sub Component' | |
| 16 | + } | |
| 17 | + }, | |
| 18 | + zh: { | |
| 19 | + feeDetailSub: { | |
| 20 | + split: '拆分', | |
| 21 | + parentFeeId: '父费用ID', | |
| 22 | + childFeeId: '子费用ID', | |
| 23 | + feeName: '费用名称', | |
| 24 | + feeObject: '费用对象', | |
| 25 | + billingPeriod: '计费时间段', | |
| 26 | + splitTime: '拆分时间', | |
| 27 | + operation: '操作', | |
| 28 | + restoreMerge: '恢复合并' | |
| 29 | + }, | |
| 30 | + feeDetailSubDemo: { | |
| 31 | + openComponent: '打开费用子详情组件' | |
| 32 | + } | |
| 33 | + } | |
| 34 | +} | |
| 0 | 35 | \ No newline at end of file | ... | ... |
src/views/fee/mergeFeeLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + mergeFee: { | |
| 4 | + confirmOperation: 'Please confirm your operation!', | |
| 5 | + mergeDescription: 'Merge split fees. After merging, the split fees will be ended and the original fee will be enabled', | |
| 6 | + cancel: 'Cancel', | |
| 7 | + confirmMerge: 'Confirm Merge', | |
| 8 | + mergeSuccess: 'Merge successful, please check the merged fee in business processing' | |
| 9 | + }, | |
| 10 | + mergeFeeDemo: { | |
| 11 | + openComponent: 'Open Merge Fee Component', | |
| 12 | + mergeSuccess: 'Merge operation completed successfully' | |
| 13 | + } | |
| 14 | + }, | |
| 15 | + zh: { | |
| 16 | + mergeFee: { | |
| 17 | + confirmOperation: '请确认您的操作!', | |
| 18 | + mergeDescription: '合并拆分费用,合并后,将结束拆分后的费用,启用原费用', | |
| 19 | + cancel: '点错了', | |
| 20 | + confirmMerge: '确认合并', | |
| 21 | + mergeSuccess: '合并成功,请到业务受理查看合并后费用' | |
| 22 | + }, | |
| 23 | + mergeFeeDemo: { | |
| 24 | + openComponent: '打开合并费用组件', | |
| 25 | + mergeSuccess: '合并操作成功完成' | |
| 26 | + } | |
| 27 | + } | |
| 28 | +} | |
| 0 | 29 | \ No newline at end of file | ... | ... |
src/views/room/propertyRightRegistrationManageList.vue
| ... | ... | @@ -128,7 +128,7 @@ |
| 128 | 128 | import { getDict } from '@/api/community/communityApi' |
| 129 | 129 | import { getCommunityId } from '@/api/community/communityApi' |
| 130 | 130 | import { listPropertyRightRegistration } from '@/api/room/propertyRightRegistrationManageApi' |
| 131 | -import { queryFloors, queryUnits } from '@/api/room/roomApi' | |
| 131 | +import { getFloors, getUnits } from '@/api/room/roomApi' | |
| 132 | 132 | import AddPropertyRightRegistration from '@/components/room/addPropertyRightRegistration' |
| 133 | 133 | import ExaminePropertyRightRegistration from '@/components/room/examinePropertyRightRegistration' |
| 134 | 134 | import EditPropertyRightRegistration from '@/components/room/editPropertyRightRegistration' |
| ... | ... | @@ -221,7 +221,7 @@ export default { |
| 221 | 221 | page: 1, |
| 222 | 222 | row: 50 |
| 223 | 223 | } |
| 224 | - const data = await queryFloors(params) | |
| 224 | + const data = await getFloors(params) | |
| 225 | 225 | this.floors = data.apiFloorDataVoList || [] |
| 226 | 226 | } catch (error) { |
| 227 | 227 | console.error('获取楼栋数据失败:', error) |
| ... | ... | @@ -235,7 +235,7 @@ export default { |
| 235 | 235 | page: 1, |
| 236 | 236 | row: 50 |
| 237 | 237 | } |
| 238 | - const data = await queryUnits(params) | |
| 238 | + const data = await getUnits(params) | |
| 239 | 239 | this.units = data || [] |
| 240 | 240 | this.searchForm.unitId = '' |
| 241 | 241 | } catch (error) { | ... | ... |