Commit 29e25b468524391b999c3a4eb83bd430fc5890de
1 parent
08c01d85
开发完成运营费用明细功能
Showing
33 changed files
with
1828 additions
and
4 deletions
src/api/aCommunity/aFeeDetailConfigApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +export function queryAdminFeeConfigs(params) { | ||
| 4 | + return new Promise((resolve, reject) => { | ||
| 5 | + request({ | ||
| 6 | + url: '/feeConfig.queryAdminFeeConfigs', | ||
| 7 | + method: 'get', | ||
| 8 | + params | ||
| 9 | + }).then(response => { | ||
| 10 | + const res = response.data | ||
| 11 | + resolve(res) | ||
| 12 | + }).catch(error => { | ||
| 13 | + reject(error) | ||
| 14 | + }) | ||
| 15 | + }) | ||
| 16 | +} | ||
| 0 | \ No newline at end of file | 17 | \ No newline at end of file |
src/api/aCommunity/aFeeDetailDiscountApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +export function queryAdminApplyRoomDiscount(params) { | ||
| 4 | + return new Promise((resolve, reject) => { | ||
| 5 | + request({ | ||
| 6 | + url: '/fee.queryAdminApplyRoomDiscount', | ||
| 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 || '获取费用折扣数据失败')) | ||
| 15 | + } | ||
| 16 | + }).catch(error => { | ||
| 17 | + reject(error) | ||
| 18 | + }) | ||
| 19 | + }) | ||
| 20 | +} | ||
| 0 | \ No newline at end of file | 21 | \ No newline at end of file |
src/api/aCommunity/aFeeDetailFeeObjApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +export function listAdminConfigFeeObjs(params) { | ||
| 4 | + return new Promise((resolve, reject) => { | ||
| 5 | + request({ | ||
| 6 | + url: '/feeConfig.listAdminConfigFeeObjs', | ||
| 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 || '获取费用对象数据失败')) | ||
| 15 | + } | ||
| 16 | + }).catch(error => { | ||
| 17 | + reject(error) | ||
| 18 | + }) | ||
| 19 | + }) | ||
| 20 | +} | ||
| 0 | \ No newline at end of file | 21 | \ No newline at end of file |
src/api/aCommunity/aFeeDetailHisApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +export function queryAdminHisFee(params) { | ||
| 4 | + return new Promise((resolve, reject) => { | ||
| 5 | + request({ | ||
| 6 | + url: '/fee.queryAdminHisFee', | ||
| 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 || '获取费用历史数据失败')) | ||
| 15 | + } | ||
| 16 | + }).catch(error => { | ||
| 17 | + reject(error) | ||
| 18 | + }) | ||
| 19 | + }) | ||
| 20 | +} | ||
| 0 | \ No newline at end of file | 21 | \ No newline at end of file |
src/api/aCommunity/aFeeDetailImportApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +export function queryAdminImportFeeDetail(params) { | ||
| 4 | + return new Promise((resolve, reject) => { | ||
| 5 | + request({ | ||
| 6 | + url: '/fee.queryAdminImportFeeDetail', | ||
| 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 || '获取导入费用明细数据失败')) | ||
| 15 | + } | ||
| 16 | + }).catch(error => { | ||
| 17 | + reject(error) | ||
| 18 | + }) | ||
| 19 | + }) | ||
| 20 | +} | ||
| 0 | \ No newline at end of file | 21 | \ No newline at end of file |
src/api/aCommunity/aFeeDetailSubApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +// 获取子费用列表 | ||
| 4 | +export function listAdminPayFeeSub(params) { | ||
| 5 | + return new Promise((resolve, reject) => { | ||
| 6 | + request({ | ||
| 7 | + url: '/feeSub.listAdminPayFeeSub', | ||
| 8 | + method: 'get', | ||
| 9 | + params | ||
| 10 | + }).then(response => { | ||
| 11 | + const res = response.data | ||
| 12 | + if (res.code === 0) { | ||
| 13 | + resolve(res) | ||
| 14 | + } else { | ||
| 15 | + reject(new Error(res.msg || '获取子费用列表失败')) | ||
| 16 | + } | ||
| 17 | + }).catch(error => { | ||
| 18 | + reject(error) | ||
| 19 | + }) | ||
| 20 | + }) | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +// 获取费用信息 | ||
| 24 | +export function listAdminFee(params) { | ||
| 25 | + return new Promise((resolve, reject) => { | ||
| 26 | + request({ | ||
| 27 | + url: '/fee.listAdminFee', | ||
| 28 | + method: 'get', | ||
| 29 | + params | ||
| 30 | + }).then(response => { | ||
| 31 | + const res = response.data | ||
| 32 | + if (res.code === 0) { | ||
| 33 | + resolve(res) | ||
| 34 | + } else { | ||
| 35 | + reject(new Error(res.msg || '获取费用信息失败')) | ||
| 36 | + } | ||
| 37 | + }).catch(error => { | ||
| 38 | + reject(error) | ||
| 39 | + }) | ||
| 40 | + }) | ||
| 41 | +} | ||
| 0 | \ No newline at end of file | 42 | \ No newline at end of file |
src/api/aCommunity/adminFeeDetailApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | ||
| 2 | + | ||
| 3 | +// 获取费用详情列表 | ||
| 4 | +export function getFeeDetail(params) { | ||
| 5 | + return new Promise((resolve, reject) => { | ||
| 6 | + request({ | ||
| 7 | + url: '/fee.listAdminFee', | ||
| 8 | + method: 'get', | ||
| 9 | + params | ||
| 10 | + }).then(response => { | ||
| 11 | + const res = response.data | ||
| 12 | + resolve(res) | ||
| 13 | + | ||
| 14 | + }).catch(error => { | ||
| 15 | + reject(error) | ||
| 16 | + }) | ||
| 17 | + }) | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +// 更新费用信息 | ||
| 21 | +export function updateFeeDetail(data) { | ||
| 22 | + return new Promise((resolve, reject) => { | ||
| 23 | + request({ | ||
| 24 | + url: '/fee.updateAdminFee', | ||
| 25 | + method: 'post', | ||
| 26 | + data | ||
| 27 | + }).then(response => { | ||
| 28 | + const res = response.data | ||
| 29 | + if (res.code === 0) { | ||
| 30 | + resolve(res) | ||
| 31 | + } else { | ||
| 32 | + reject(new Error(res.msg || '更新费用信息失败')) | ||
| 33 | + } | ||
| 34 | + }).catch(error => { | ||
| 35 | + reject(error) | ||
| 36 | + }) | ||
| 37 | + }) | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +// 删除费用信息 | ||
| 41 | +export function deleteFeeDetail(params) { | ||
| 42 | + return new Promise((resolve, reject) => { | ||
| 43 | + request({ | ||
| 44 | + url: '/fee.deleteAdminFee', | ||
| 45 | + method: 'get', | ||
| 46 | + params | ||
| 47 | + }).then(response => { | ||
| 48 | + const res = response.data | ||
| 49 | + if (res.code === 0) { | ||
| 50 | + resolve(res) | ||
| 51 | + } else { | ||
| 52 | + reject(new Error(res.msg || '删除费用信息失败')) | ||
| 53 | + } | ||
| 54 | + }).catch(error => { | ||
| 55 | + reject(error) | ||
| 56 | + }) | ||
| 57 | + }) | ||
| 58 | +} | ||
| 0 | \ No newline at end of file | 59 | \ No newline at end of file |
src/components/aCommunity/aFeeDetailConfig.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="margin-top"> | ||
| 3 | + <el-table :data="aFeeDetailConfigInfo.feeConfigs" border style="width: 100%"> | ||
| 4 | + <el-table-column prop="feeTypeCdName" :label="$t('aFeeDetailConfig.feeType')" align="center"></el-table-column> | ||
| 5 | + <el-table-column prop="feeName" :label="$t('aFeeDetailConfig.feeItem')" align="center"></el-table-column> | ||
| 6 | + <el-table-column prop="feeFlagName" :label="$t('aFeeDetailConfig.feeFlag')" align="center"></el-table-column> | ||
| 7 | + <el-table-column prop="billTypeName" :label="$t('aFeeDetailConfig.billType')" align="center"></el-table-column> | ||
| 8 | + <el-table-column :label="$t('aFeeDetailConfig.paymentType')" align="center"> | ||
| 9 | + <template #default="{ row }">{{ row.paymentCd === '1200' ? $t('aFeeDetailConfig.prepay') : | ||
| 10 | + $t('aFeeDetailConfig.postpay')}}</template> | ||
| 11 | + </el-table-column> | ||
| 12 | + <el-table-column prop="paymentCycle" :label="$t('aFeeDetailConfig.paymentCycle')" | ||
| 13 | + align="center"></el-table-column> | ||
| 14 | + <el-table-column prop="units" :label="$t('aFeeDetailConfig.unit')" align="center"></el-table-column> | ||
| 15 | + <el-table-column prop="computingFormulaName" :label="$t('aFeeDetailConfig.formula')" | ||
| 16 | + align="center"></el-table-column> | ||
| 17 | + <el-table-column :label="$t('aFeeDetailConfig.unitPrice')" align="center"> | ||
| 18 | + <template #default="{ row }">{{ row.computingFormula === '2002' ? '-' : row.squarePrice }}</template> | ||
| 19 | + </el-table-column> | ||
| 20 | + <el-table-column prop="additionalAmount" :label="$t('aFeeDetailConfig.additionalFee')" | ||
| 21 | + align="center"></el-table-column> | ||
| 22 | + <el-table-column :label="$t('aFeeDetailConfig.accountDeduction')" align="center"> | ||
| 23 | + <template #default="{ row }">{{ row.deductFrom === 'Y' ? $t('aFeeDetailConfig.yes') : | ||
| 24 | + $t('aFeeDetailConfig.no')}}</template> | ||
| 25 | + </el-table-column> | ||
| 26 | + <el-table-column :label="$t('aFeeDetailConfig.mobilePayment')" align="center"> | ||
| 27 | + <template #default="{ row }">{{ row.payOnline === 'Y' ? $t('aFeeDetailConfig.yes') : | ||
| 28 | + $t('aFeeDetailConfig.no')}}</template> | ||
| 29 | + </el-table-column> | ||
| 30 | + <el-table-column prop="scale" :label="$t('aFeeDetailConfig.decimalPlaces')" align="center"></el-table-column> | ||
| 31 | + </el-table> | ||
| 32 | + | ||
| 33 | + <el-row class="margin-top"> | ||
| 34 | + <el-col :span="12"></el-col> | ||
| 35 | + <el-col :span="12"> | ||
| 36 | + <el-pagination @current-change="handlePageChange" :current-page="currentPage" :page-size="pageSize" | ||
| 37 | + layout="total, prev, pager, next, jumper" :total="total"> | ||
| 38 | + </el-pagination> | ||
| 39 | + </el-col> | ||
| 40 | + </el-row> | ||
| 41 | + </div> | ||
| 42 | +</template> | ||
| 43 | + | ||
| 44 | +<script> | ||
| 45 | +import { queryAdminFeeConfigs } from '@/api/aCommunity/aFeeDetailConfigApi' | ||
| 46 | + | ||
| 47 | +export default { | ||
| 48 | + name: 'AFeeDetailConfig', | ||
| 49 | + data() { | ||
| 50 | + return { | ||
| 51 | + aFeeDetailConfigInfo: { | ||
| 52 | + feeConfigs: [], | ||
| 53 | + configId: '' | ||
| 54 | + }, | ||
| 55 | + currentPage: 1, | ||
| 56 | + pageSize: 10, | ||
| 57 | + total: 0 | ||
| 58 | + } | ||
| 59 | + }, | ||
| 60 | + methods: { | ||
| 61 | + open(data) { | ||
| 62 | + this.aFeeDetailConfigInfo.configId = data.configId | ||
| 63 | + this._loadAFeeDetailConfigData() | ||
| 64 | + }, | ||
| 65 | + handleSwitch(data) { | ||
| 66 | + this.aFeeDetailConfigInfo.configId = data.configId | ||
| 67 | + this._loadAFeeDetailConfigData() | ||
| 68 | + }, | ||
| 69 | + handleNotify() { | ||
| 70 | + this._loadAFeeDetailConfigData() | ||
| 71 | + }, | ||
| 72 | + handlePageChange(page) { | ||
| 73 | + this.currentPage = page | ||
| 74 | + this._loadAFeeDetailConfigData() | ||
| 75 | + }, | ||
| 76 | + async _loadAFeeDetailConfigData() { | ||
| 77 | + try { | ||
| 78 | + const params = { | ||
| 79 | + configId: this.aFeeDetailConfigInfo.configId, | ||
| 80 | + page: this.currentPage, | ||
| 81 | + row: this.pageSize | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + const res = await queryAdminFeeConfigs(params) | ||
| 85 | + this.aFeeDetailConfigInfo.feeConfigs = res.feeConfigs | ||
| 86 | + this.total = res.records | ||
| 87 | + } catch (error) { | ||
| 88 | + console.error('加载费用配置数据失败:', error) | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | + } | ||
| 92 | +} | ||
| 93 | +</script> | ||
| 94 | + | ||
| 95 | +<style scoped> | ||
| 96 | +.margin-top { | ||
| 97 | + margin-top: 20px; | ||
| 98 | +} | ||
| 99 | +</style> | ||
| 0 | \ No newline at end of file | 100 | \ No newline at end of file |
src/components/aCommunity/aFeeDetailConfigDemo.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <a-fee-detail-config ref="feeConfigComponent" /> | ||
| 3 | +</template> | ||
| 4 | + | ||
| 5 | +<script> | ||
| 6 | +import AFeeDetailConfig from './aFeeDetailConfig' | ||
| 7 | + | ||
| 8 | +export default { | ||
| 9 | + components: { | ||
| 10 | + AFeeDetailConfig | ||
| 11 | + }, | ||
| 12 | + methods: { | ||
| 13 | + open(data) { | ||
| 14 | + this.$refs.feeConfigComponent.handleSwitch(data) | ||
| 15 | + }, | ||
| 16 | + refresh() { | ||
| 17 | + this.$refs.feeConfigComponent.handleNotify() | ||
| 18 | + } | ||
| 19 | + } | ||
| 20 | +} | ||
| 21 | +</script> | ||
| 0 | \ No newline at end of file | 22 | \ No newline at end of file |
src/components/aCommunity/aFeeDetailDiscount.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="margin-top"> | ||
| 3 | + <el-table :data="aFeeDetailDiscountInfo.applyRoomDiscounts" border style="width: 100%"> | ||
| 4 | + <el-table-column prop="roomName" :label="$t('aFeeDetailDiscount.roomName')" align="center"></el-table-column> | ||
| 5 | + <el-table-column prop="discountId" :label="$t('aFeeDetailDiscount.discountId')" align="center"></el-table-column> | ||
| 6 | + <el-table-column prop="discountName" :label="$t('aFeeDetailDiscount.discountName')" align="center"></el-table-column> | ||
| 7 | + <el-table-column prop="applyTypeName" :label="$t('aFeeDetailDiscount.applyType')" align="center"></el-table-column> | ||
| 8 | + <el-table-column prop="createUserName" :label="$t('aFeeDetailDiscount.applicant')" align="center"></el-table-column> | ||
| 9 | + <el-table-column prop="createUserTel" :label="$t('aFeeDetailDiscount.applicantPhone')" align="center"></el-table-column> | ||
| 10 | + <el-table-column prop="startTime" :label="$t('aFeeDetailDiscount.startTime')" align="center"></el-table-column> | ||
| 11 | + <el-table-column prop="endTime" :label="$t('aFeeDetailDiscount.endTime')" align="center"></el-table-column> | ||
| 12 | + <el-table-column prop="stateName" :label="$t('aFeeDetailDiscount.status')" align="center"></el-table-column> | ||
| 13 | + <el-table-column prop="createTime" :label="$t('aFeeDetailDiscount.createTime')" align="center"></el-table-column> | ||
| 14 | + <el-table-column :label="$t('aFeeDetailDiscount.useStatus')" align="center"> | ||
| 15 | + <template #default="{row}">{{row.inUse === '0' ? $t('aFeeDetailDiscount.notUsed') : $t('aFeeDetailDiscount.used')}}</template> | ||
| 16 | + </el-table-column> | ||
| 17 | + <el-table-column :label="$t('aFeeDetailDiscount.returnType')" align="center"> | ||
| 18 | + <template #default="{row}"> | ||
| 19 | + <span v-if="row.discountId"> | ||
| 20 | + {{row.returnWay === '1002' ? $t('aFeeDetailDiscount.accountBalance') : $t('aFeeDetailDiscount.discount')}} | ||
| 21 | + </span> | ||
| 22 | + <span v-else>-</span> | ||
| 23 | + </template> | ||
| 24 | + </el-table-column> | ||
| 25 | + <el-table-column :label="$t('aFeeDetailDiscount.returnAmount')" align="center"> | ||
| 26 | + <template #default="{row}">{{row.returnAmount ? row.returnAmount : '-'}}</template> | ||
| 27 | + </el-table-column> | ||
| 28 | + </el-table> | ||
| 29 | + | ||
| 30 | + <el-row class="margin-top"> | ||
| 31 | + <el-col :span="12"></el-col> | ||
| 32 | + <el-col :span="12"> | ||
| 33 | + <el-pagination | ||
| 34 | + @current-change="handlePageChange" | ||
| 35 | + :current-page="currentPage" | ||
| 36 | + :page-size="pageSize" | ||
| 37 | + layout="total, prev, pager, next, jumper" | ||
| 38 | + :total="total"> | ||
| 39 | + </el-pagination> | ||
| 40 | + </el-col> | ||
| 41 | + </el-row> | ||
| 42 | + </div> | ||
| 43 | +</template> | ||
| 44 | + | ||
| 45 | +<script> | ||
| 46 | +import { queryAdminApplyRoomDiscount } from '@/api/aCommunity/aFeeDetailDiscountApi' | ||
| 47 | + | ||
| 48 | +export default { | ||
| 49 | + name: 'AFeeDetailDiscount', | ||
| 50 | + data() { | ||
| 51 | + return { | ||
| 52 | + aFeeDetailDiscountInfo: { | ||
| 53 | + applyRoomDiscounts: [], | ||
| 54 | + feeId: '' | ||
| 55 | + }, | ||
| 56 | + currentPage: 1, | ||
| 57 | + pageSize: 10, | ||
| 58 | + total: 0 | ||
| 59 | + } | ||
| 60 | + }, | ||
| 61 | + methods: { | ||
| 62 | + open(data) { | ||
| 63 | + this.aFeeDetailDiscountInfo.feeId = data.feeId | ||
| 64 | + this._loadAFeeDetailDiscountData() | ||
| 65 | + }, | ||
| 66 | + handleSwitch(data) { | ||
| 67 | + this.aFeeDetailDiscountInfo.feeId = data.feeId | ||
| 68 | + this._loadAFeeDetailDiscountData() | ||
| 69 | + }, | ||
| 70 | + handlePageChange(page) { | ||
| 71 | + this.currentPage = page | ||
| 72 | + this._loadAFeeDetailDiscountData() | ||
| 73 | + }, | ||
| 74 | + async _loadAFeeDetailDiscountData() { | ||
| 75 | + try { | ||
| 76 | + const params = { | ||
| 77 | + feeId: this.aFeeDetailDiscountInfo.feeId, | ||
| 78 | + page: this.currentPage, | ||
| 79 | + row: this.pageSize | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + const res = await queryAdminApplyRoomDiscount(params) | ||
| 83 | + this.aFeeDetailDiscountInfo.applyRoomDiscounts = res.data | ||
| 84 | + this.total = res.records | ||
| 85 | + } catch (error) { | ||
| 86 | + console.error('加载费用折扣数据失败:', error) | ||
| 87 | + } | ||
| 88 | + } | ||
| 89 | + } | ||
| 90 | +} | ||
| 91 | +</script> | ||
| 92 | + | ||
| 93 | +<style scoped> | ||
| 94 | +.margin-top { | ||
| 95 | + margin-top: 20px; | ||
| 96 | +} | ||
| 97 | +</style> | ||
| 0 | \ No newline at end of file | 98 | \ No newline at end of file |
src/components/aCommunity/aFeeDetailDiscountDemo.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <a-fee-detail-discount ref="feeDiscountComponent" /> | ||
| 3 | +</template> | ||
| 4 | + | ||
| 5 | +<script> | ||
| 6 | +import AFeeDetailDiscount from './aFeeDetailDiscount' | ||
| 7 | + | ||
| 8 | +export default { | ||
| 9 | + components: { | ||
| 10 | + AFeeDetailDiscount | ||
| 11 | + }, | ||
| 12 | + methods: { | ||
| 13 | + open(data) { | ||
| 14 | + this.$refs.feeDiscountComponent.handleSwitch(data) | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | +} | ||
| 18 | +</script> | ||
| 0 | \ No newline at end of file | 19 | \ No newline at end of file |
src/components/aCommunity/aFeeDetailFeeObj.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div> | ||
| 3 | + <el-row class="margin-top"> | ||
| 4 | + <el-col :span="4"> | ||
| 5 | + <el-select v-model="aFeeDetailFeeObjInfo.payerObjType" class="w-100" :placeholder="$t('aFeeDetailFeeObj.selectFeeObj')"> | ||
| 6 | + <el-option :label="$t('aFeeDetailFeeObj.house')" value="3333"></el-option> | ||
| 7 | + <el-option :label="$t('aFeeDetailFeeObj.car')" value="6666"></el-option> | ||
| 8 | + <el-option :label="$t('aFeeDetailFeeObj.contract')" value="7777"></el-option> | ||
| 9 | + </el-select> | ||
| 10 | + </el-col> | ||
| 11 | + <el-col :span="4" class="pl-10"> | ||
| 12 | + <el-button type="primary" size="small" @click="_qureyAFeeDetailFeeObj"> | ||
| 13 | + {{$t('aFeeDetailFeeObj.query')}} | ||
| 14 | + </el-button> | ||
| 15 | + </el-col> | ||
| 16 | + </el-row> | ||
| 17 | + | ||
| 18 | + <div class="margin-top"> | ||
| 19 | + <el-table :data="aFeeDetailFeeObjInfo.feeObjs" border style="width: 100%"> | ||
| 20 | + <el-table-column prop="feeId" :label="$t('aFeeDetailFeeObj.feeId')" align="center"></el-table-column> | ||
| 21 | + <el-table-column :label="$t('aFeeDetailFeeObj.objType')" align="center"> | ||
| 22 | + <template #default="{row}"> | ||
| 23 | + <span v-if="row.payerObjType === '3333'">{{$t('aFeeDetailFeeObj.house')}}</span> | ||
| 24 | + <span v-else-if="row.payerObjType === '6666'">{{$t('aFeeDetailFeeObj.car')}}</span> | ||
| 25 | + <span v-else>{{$t('aFeeDetailFeeObj.contract')}}</span> | ||
| 26 | + </template> | ||
| 27 | + </el-table-column> | ||
| 28 | + <el-table-column prop="payerObjName" :label="$t('aFeeDetailFeeObj.objName')" align="center"></el-table-column> | ||
| 29 | + <el-table-column prop="ownerName" :label="$t('aFeeDetailFeeObj.ownerName')" align="center"></el-table-column> | ||
| 30 | + <el-table-column prop="ownerTel" :label="$t('aFeeDetailFeeObj.phone')" align="center"></el-table-column> | ||
| 31 | + <el-table-column prop="createTime" :label="$t('aFeeDetailFeeObj.createTime')" align="center"></el-table-column> | ||
| 32 | + </el-table> | ||
| 33 | + | ||
| 34 | + <el-row class="margin-top"> | ||
| 35 | + <el-col :span="12"></el-col> | ||
| 36 | + <el-col :span="12"> | ||
| 37 | + <el-pagination | ||
| 38 | + @current-change="handlePageChange" | ||
| 39 | + :current-page="currentPage" | ||
| 40 | + :page-size="pageSize" | ||
| 41 | + layout="total, prev, pager, next, jumper" | ||
| 42 | + :total="total"> | ||
| 43 | + </el-pagination> | ||
| 44 | + </el-col> | ||
| 45 | + </el-row> | ||
| 46 | + </div> | ||
| 47 | + </div> | ||
| 48 | +</template> | ||
| 49 | + | ||
| 50 | +<script> | ||
| 51 | +import { listAdminConfigFeeObjs } from '@/api/aCommunity/aFeeDetailFeeObjApi' | ||
| 52 | + | ||
| 53 | +export default { | ||
| 54 | + name: 'AFeeDetailFeeObj', | ||
| 55 | + data() { | ||
| 56 | + return { | ||
| 57 | + aFeeDetailFeeObjInfo: { | ||
| 58 | + feeObjs: [], | ||
| 59 | + configId: '', | ||
| 60 | + payerObjType: '' | ||
| 61 | + }, | ||
| 62 | + currentPage: 1, | ||
| 63 | + pageSize: 10, | ||
| 64 | + total: 0 | ||
| 65 | + } | ||
| 66 | + }, | ||
| 67 | + methods: { | ||
| 68 | + open(data) { | ||
| 69 | + this.aFeeDetailFeeObjInfo.configId = data.configId | ||
| 70 | + this._loadAFeeDetailFeeObjData() | ||
| 71 | + }, | ||
| 72 | + handleSwitch(data) { | ||
| 73 | + this.aFeeDetailFeeObjInfo.configId = data.configId | ||
| 74 | + this._loadAFeeDetailFeeObjData() | ||
| 75 | + }, | ||
| 76 | + handlePageChange(page) { | ||
| 77 | + this.currentPage = page | ||
| 78 | + this._loadAFeeDetailFeeObjData() | ||
| 79 | + }, | ||
| 80 | + async _loadAFeeDetailFeeObjData() { | ||
| 81 | + try { | ||
| 82 | + const params = { | ||
| 83 | + configId: this.aFeeDetailFeeObjInfo.configId, | ||
| 84 | + payerObjType: this.aFeeDetailFeeObjInfo.payerObjType, | ||
| 85 | + page: this.currentPage, | ||
| 86 | + row: this.pageSize | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + const res = await listAdminConfigFeeObjs(params) | ||
| 90 | + this.aFeeDetailFeeObjInfo.feeObjs = res.data | ||
| 91 | + this.total = res.records | ||
| 92 | + } catch (error) { | ||
| 93 | + console.error('加载费用对象数据失败:', error) | ||
| 94 | + } | ||
| 95 | + }, | ||
| 96 | + _qureyAFeeDetailFeeObj() { | ||
| 97 | + this.currentPage = 1 | ||
| 98 | + this._loadAFeeDetailFeeObjData() | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | +} | ||
| 102 | +</script> | ||
| 103 | + | ||
| 104 | +<style scoped> | ||
| 105 | +.margin-top { | ||
| 106 | + margin-top: 20px; | ||
| 107 | +} | ||
| 108 | +.pl-10 { | ||
| 109 | + padding-left: 10px; | ||
| 110 | +} | ||
| 111 | +.w-100 { | ||
| 112 | + width: 100%; | ||
| 113 | +} | ||
| 114 | +</style> | ||
| 0 | \ No newline at end of file | 115 | \ No newline at end of file |
src/components/aCommunity/aFeeDetailFeeObjDemo.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <a-fee-detail-fee-obj ref="feeObjComponent" /> | ||
| 3 | +</template> | ||
| 4 | + | ||
| 5 | +<script> | ||
| 6 | +import AFeeDetailFeeObj from './aFeeDetailFeeObj' | ||
| 7 | + | ||
| 8 | +export default { | ||
| 9 | + components: { | ||
| 10 | + AFeeDetailFeeObj | ||
| 11 | + }, | ||
| 12 | + methods: { | ||
| 13 | + open(data) { | ||
| 14 | + this.$refs.feeObjComponent.handleSwitch(data) | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | +} | ||
| 18 | +</script> | ||
| 0 | \ No newline at end of file | 19 | \ No newline at end of file |
src/components/aCommunity/aFeeDetailHis.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div> | ||
| 3 | + <el-row> | ||
| 4 | + <el-col :span="24" class="text-right"></el-col> | ||
| 5 | + </el-row> | ||
| 6 | + <div class="margin-top"> | ||
| 7 | + <el-table :data="aFeeDetailHisInfo.fees" border style="width: 100%"> | ||
| 8 | + <el-table-column prop="feeName" :label="$t('aFeeDetailHis.feeName')" align="center"> | ||
| 9 | + <template #default="{ row }"> | ||
| 10 | + {{ row.feeName }} | ||
| 11 | + <span v-if="row.payerObjName">({{ row.payerObjName }})</span> | ||
| 12 | + </template> | ||
| 13 | + </el-table-column> | ||
| 14 | + <el-table-column prop="startTime" :label="$t('aFeeDetailHis.startTime')" align="center"> | ||
| 15 | + <template #default="{ row }">{{ row.startTime || '-' }}</template> | ||
| 16 | + </el-table-column> | ||
| 17 | + <el-table-column prop="endTime" :label="$t('aFeeDetailHis.endTime')" align="center"> | ||
| 18 | + <template #default="{ row }">{{ row.endTime || '-' }}</template> | ||
| 19 | + </el-table-column> | ||
| 20 | + <el-table-column :label="$t('aFeeDetailHis.operation')" align="center"> | ||
| 21 | + <template #default="{ row }">{{ _getFeeHisOperate(row) }}</template> | ||
| 22 | + </el-table-column> | ||
| 23 | + <el-table-column prop="userName" :label="$t('aFeeDetailHis.operator')" align="center"> | ||
| 24 | + <template #default="{ row }">{{ row.userName || '-' }}</template> | ||
| 25 | + </el-table-column> | ||
| 26 | + <el-table-column prop="createTime" :label="$t('aFeeDetailHis.operationTime')" align="center"></el-table-column> | ||
| 27 | + </el-table> | ||
| 28 | + | ||
| 29 | + <el-row class="margin-top"> | ||
| 30 | + <el-col :span="12"></el-col> | ||
| 31 | + <el-col :span="12"> | ||
| 32 | + <el-pagination @current-change="handlePageChange" :current-page="currentPage" :page-size="pageSize" | ||
| 33 | + layout="total, prev, pager, next, jumper" :total="total"> | ||
| 34 | + </el-pagination> | ||
| 35 | + </el-col> | ||
| 36 | + </el-row> | ||
| 37 | + </div> | ||
| 38 | + </div> | ||
| 39 | +</template> | ||
| 40 | + | ||
| 41 | +<script> | ||
| 42 | +import { queryAdminHisFee } from '@/api/aCommunity/aFeeDetailHisApi' | ||
| 43 | + | ||
| 44 | +export default { | ||
| 45 | + name: 'AFeeDetailHis', | ||
| 46 | + data() { | ||
| 47 | + return { | ||
| 48 | + aFeeDetailHisInfo: { | ||
| 49 | + fees: [], | ||
| 50 | + feeId: '', | ||
| 51 | + staffNameLike: '', | ||
| 52 | + feeNameLike: '', | ||
| 53 | + payerObjName: '', | ||
| 54 | + logStartTime: '', | ||
| 55 | + logEndTime: '' | ||
| 56 | + }, | ||
| 57 | + currentPage: 1, | ||
| 58 | + pageSize: 10, | ||
| 59 | + total: 0 | ||
| 60 | + } | ||
| 61 | + }, | ||
| 62 | + methods: { | ||
| 63 | + open(data) { | ||
| 64 | + this.aFeeDetailHisInfo.feeId = data.feeId | ||
| 65 | + this.aFeeDetailHisInfo.staffNameLike = data.staffNameLike | ||
| 66 | + this.aFeeDetailHisInfo.feeNameLike = data.feeNameLike | ||
| 67 | + this.aFeeDetailHisInfo.payerObjName = data.payerObjName | ||
| 68 | + this.aFeeDetailHisInfo.logStartTime = data.logStartTime | ||
| 69 | + this.aFeeDetailHisInfo.logEndTime = data.logEndTime | ||
| 70 | + this._loadAFeeDetailHisData() | ||
| 71 | + }, | ||
| 72 | + handleSwitch(data) { | ||
| 73 | + this.aFeeDetailHisInfo.feeId = data.feeId | ||
| 74 | + this.aFeeDetailHisInfo.staffNameLike = data.staffNameLike | ||
| 75 | + this.aFeeDetailHisInfo.feeNameLike = data.feeNameLike | ||
| 76 | + this.aFeeDetailHisInfo.payerObjName = data.payerObjName | ||
| 77 | + this.aFeeDetailHisInfo.logStartTime = data.logStartTime | ||
| 78 | + this.aFeeDetailHisInfo.logEndTime = data.logEndTime | ||
| 79 | + this._loadAFeeDetailHisData() | ||
| 80 | + }, | ||
| 81 | + handleNotify() { | ||
| 82 | + this._loadAFeeDetailHisData() | ||
| 83 | + }, | ||
| 84 | + handlePageChange(page) { | ||
| 85 | + this.currentPage = page | ||
| 86 | + this._loadAFeeDetailHisData() | ||
| 87 | + }, | ||
| 88 | + async _loadAFeeDetailHisData() { | ||
| 89 | + try { | ||
| 90 | + const params = { | ||
| 91 | + feeId: this.aFeeDetailHisInfo.feeId, | ||
| 92 | + staffNameLike: this.aFeeDetailHisInfo.staffNameLike, | ||
| 93 | + feeNameLike: this.aFeeDetailHisInfo.feeNameLike, | ||
| 94 | + payerObjName: this.aFeeDetailHisInfo.payerObjName, | ||
| 95 | + logStartTime: this.aFeeDetailHisInfo.logStartTime, | ||
| 96 | + logEndTime: this.aFeeDetailHisInfo.logEndTime, | ||
| 97 | + page: this.currentPage, | ||
| 98 | + row: this.pageSize | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + const res = await queryAdminHisFee(params) | ||
| 102 | + this.aFeeDetailHisInfo.fees = res.data | ||
| 103 | + this.total = res.records | ||
| 104 | + } catch (error) { | ||
| 105 | + console.error('加载费用历史数据失败:', error) | ||
| 106 | + } | ||
| 107 | + }, | ||
| 108 | + _getFeeHisOperate(fee) { | ||
| 109 | + let feeCount = 0 | ||
| 110 | + this.aFeeDetailHisInfo.fees.forEach(item => { | ||
| 111 | + if (fee.bId === item.bId) { | ||
| 112 | + feeCount += 1 | ||
| 113 | + } | ||
| 114 | + }) | ||
| 115 | + | ||
| 116 | + if (feeCount <= 1) { | ||
| 117 | + if (fee.operate === 'ADD') return this.$t('aFeeDetailHis.add') | ||
| 118 | + if (fee.operate === 'DEL') return this.$t('aFeeDetailHis.delete') | ||
| 119 | + return '-' | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + if (fee.operate === 'ADD') return this.$t('aFeeDetailHis.modifyNew') | ||
| 123 | + if (fee.operate === 'DEL') return this.$t('aFeeDetailHis.modifyOld') | ||
| 124 | + return '-' | ||
| 125 | + } | ||
| 126 | + } | ||
| 127 | +} | ||
| 128 | +</script> | ||
| 129 | + | ||
| 130 | +<style scoped> | ||
| 131 | +.margin-top { | ||
| 132 | + margin-top: 20px; | ||
| 133 | +} | ||
| 134 | + | ||
| 135 | +.text-right { | ||
| 136 | + text-align: right; | ||
| 137 | +} | ||
| 138 | +</style> | ||
| 0 | \ No newline at end of file | 139 | \ No newline at end of file |
src/components/aCommunity/aFeeDetailHisDemo.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <a-fee-detail-his ref="feeHisComponent" /> | ||
| 3 | +</template> | ||
| 4 | + | ||
| 5 | +<script> | ||
| 6 | +import AFeeDetailHis from './aFeeDetailHis' | ||
| 7 | + | ||
| 8 | +export default { | ||
| 9 | + components: { | ||
| 10 | + AFeeDetailHis | ||
| 11 | + }, | ||
| 12 | + methods: { | ||
| 13 | + open(data) { | ||
| 14 | + this.$refs.feeHisComponent.handleSwitch(data) | ||
| 15 | + }, | ||
| 16 | + refresh() { | ||
| 17 | + this.$refs.feeHisComponent.handleNotify() | ||
| 18 | + } | ||
| 19 | + } | ||
| 20 | +} | ||
| 21 | +</script> | ||
| 0 | \ No newline at end of file | 22 | \ No newline at end of file |
src/components/aCommunity/aFeeDetailImport.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="margin-top"> | ||
| 3 | + <el-table :data="aFeeDetailImportInfo.importFeeDetails" border style="width: 100%"> | ||
| 4 | + <el-table-column prop="floorNum" :label="$t('aFeeDetailImport.floorNum')" align="center"></el-table-column> | ||
| 5 | + <el-table-column prop="unitNum" :label="$t('aFeeDetailImport.unitNum')" align="center"></el-table-column> | ||
| 6 | + <el-table-column prop="roomNum" :label="$t('aFeeDetailImport.roomNum')" align="center"></el-table-column> | ||
| 7 | + <el-table-column prop="feeName" :label="$t('aFeeDetailImport.feeName')" align="center"></el-table-column> | ||
| 8 | + <el-table-column prop="startTime" :label="$t('aFeeDetailImport.startTime')" align="center"></el-table-column> | ||
| 9 | + <el-table-column prop="endTime" :label="$t('aFeeDetailImport.endTime')" align="center"></el-table-column> | ||
| 10 | + <el-table-column prop="amount" :label="$t('aFeeDetailImport.totalAmount')" align="center"></el-table-column> | ||
| 11 | + <el-table-column prop="remark" :label="$t('aFeeDetailImport.remark')" align="center"></el-table-column> | ||
| 12 | + <el-table-column :label="$t('aFeeDetailImport.status')" align="center"> | ||
| 13 | + <template #default="{row}"> | ||
| 14 | + <el-tag :type="row.state === '1000' ? 'success' : 'danger'"> | ||
| 15 | + {{row.state === '1000' ? $t('aFeeDetailImport.importSuccess') : $t('aFeeDetailImport.importFailed')}} | ||
| 16 | + </el-tag> | ||
| 17 | + </template> | ||
| 18 | + </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="handlePageChange" | ||
| 26 | + :current-page="currentPage" | ||
| 27 | + :page-size="pageSize" | ||
| 28 | + layout="total, prev, pager, next, jumper" | ||
| 29 | + :total="total"> | ||
| 30 | + </el-pagination> | ||
| 31 | + </el-col> | ||
| 32 | + </el-row> | ||
| 33 | + </div> | ||
| 34 | +</template> | ||
| 35 | + | ||
| 36 | +<script> | ||
| 37 | +import { queryAdminImportFeeDetail } from '@/api/aCommunity/aFeeDetailImportApi' | ||
| 38 | + | ||
| 39 | +export default { | ||
| 40 | + name: 'AFeeDetailImport', | ||
| 41 | + data() { | ||
| 42 | + return { | ||
| 43 | + aFeeDetailImportInfo: { | ||
| 44 | + importFeeDetails: [], | ||
| 45 | + feeId: '' | ||
| 46 | + }, | ||
| 47 | + currentPage: 1, | ||
| 48 | + pageSize: 10, | ||
| 49 | + total: 0 | ||
| 50 | + } | ||
| 51 | + }, | ||
| 52 | + methods: { | ||
| 53 | + open(data) { | ||
| 54 | + this.aFeeDetailImportInfo.feeId = data.feeId | ||
| 55 | + this._loadAFeeDetailImportData() | ||
| 56 | + }, | ||
| 57 | + handleSwitch(data) { | ||
| 58 | + this.aFeeDetailImportInfo.feeId = data.feeId | ||
| 59 | + this._loadAFeeDetailImportData() | ||
| 60 | + }, | ||
| 61 | + handlePageChange(page) { | ||
| 62 | + this.currentPage = page | ||
| 63 | + this._loadAFeeDetailImportData() | ||
| 64 | + }, | ||
| 65 | + async _loadAFeeDetailImportData() { | ||
| 66 | + try { | ||
| 67 | + const params = { | ||
| 68 | + feeId: this.aFeeDetailImportInfo.feeId, | ||
| 69 | + page: this.currentPage, | ||
| 70 | + row: this.pageSize | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + const res = await queryAdminImportFeeDetail(params) | ||
| 74 | + this.aFeeDetailImportInfo.importFeeDetails = res.data | ||
| 75 | + this.total = res.records | ||
| 76 | + } catch (error) { | ||
| 77 | + console.error('加载导入费用明细数据失败:', error) | ||
| 78 | + } | ||
| 79 | + } | ||
| 80 | + } | ||
| 81 | +} | ||
| 82 | +</script> | ||
| 83 | + | ||
| 84 | +<style scoped> | ||
| 85 | +.margin-top { | ||
| 86 | + margin-top: 20px; | ||
| 87 | +} | ||
| 88 | +</style> | ||
| 0 | \ No newline at end of file | 89 | \ No newline at end of file |
src/components/aCommunity/aFeeDetailImportDemo.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <a-fee-detail-import ref="feeImportComponent" /> | ||
| 3 | +</template> | ||
| 4 | + | ||
| 5 | +<script> | ||
| 6 | +import AFeeDetailImport from './aFeeDetailImport' | ||
| 7 | + | ||
| 8 | +export default { | ||
| 9 | + components: { | ||
| 10 | + AFeeDetailImport | ||
| 11 | + }, | ||
| 12 | + methods: { | ||
| 13 | + open(data) { | ||
| 14 | + this.$refs.feeImportComponent.handleSwitch(data) | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | +} | ||
| 18 | +</script> | ||
| 0 | \ No newline at end of file | 19 | \ No newline at end of file |
src/components/aCommunity/aFeeDetailSub.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div> | ||
| 3 | + <el-row> | ||
| 4 | + <el-col :span="24" class="text-right"> | ||
| 5 | + </el-col> | ||
| 6 | + </el-row> | ||
| 7 | + <el-table :data="aFeeDetailSubInfo.subs" border style="width: 100%" class="margin-top"> | ||
| 8 | + <el-table-column prop="preFeeId" :label="$t('aFeeDetailSub.parentFeeId')" align="center"> | ||
| 9 | + <template slot-scope="scope"> | ||
| 10 | + <router-link :to="{ path: '/pages/fee/adminFeeDetail', query: { feeId: scope.row.preFeeId } }" | ||
| 11 | + target="_blank"> | ||
| 12 | + {{ scope.row.preFeeId }} | ||
| 13 | + </router-link> | ||
| 14 | + </template> | ||
| 15 | + </el-table-column> | ||
| 16 | + <el-table-column prop="feeId" :label="$t('aFeeDetailSub.childFeeId')" align="center"> | ||
| 17 | + <template slot-scope="scope"> | ||
| 18 | + <router-link :to="{ path: '/pages/fee/adminFeeDetail', query: { feeId: scope.row.feeId } }" target="_blank"> | ||
| 19 | + {{ scope.row.feeId }} | ||
| 20 | + </router-link> | ||
| 21 | + </template> | ||
| 22 | + </el-table-column> | ||
| 23 | + <el-table-column prop="feeName" :label="$t('aFeeDetailSub.feeName')" align="center" /> | ||
| 24 | + <el-table-column prop="payerObjName" :label="$t('aFeeDetailSub.feeObject')" align="center" /> | ||
| 25 | + <el-table-column :label="$t('aFeeDetailSub.billingPeriod')" align="center"> | ||
| 26 | + <template slot-scope="scope"> | ||
| 27 | + {{ $dateFormat(scope.row.endTime) }}<br> | ||
| 28 | + ~{{ $dateFormat(scope.row.maxTime) }} | ||
| 29 | + </template> | ||
| 30 | + </el-table-column> | ||
| 31 | + <el-table-column prop="createTime" :label="$t('aFeeDetailSub.splitTime')" align="center" /> | ||
| 32 | + </el-table> | ||
| 33 | + <el-row> | ||
| 34 | + <el-col :span="24" class="float-right"> | ||
| 35 | + <el-pagination :current-page="currentPage" :page-size="pageSize" :total="aFeeDetailSubInfo.total" | ||
| 36 | + layout="total, prev, pager, next" @current-change="handlePageChange" /> | ||
| 37 | + </el-col> | ||
| 38 | + </el-row> | ||
| 39 | + </div> | ||
| 40 | +</template> | ||
| 41 | + | ||
| 42 | +<script> | ||
| 43 | +import { listAdminPayFeeSub, listAdminFee } from '@/api/aCommunity/aFeeDetailSubApi' | ||
| 44 | +import { getCommunityId } from '@/api/community/communityApi' | ||
| 45 | + | ||
| 46 | +export default { | ||
| 47 | + name: 'AFeeDetailSub', | ||
| 48 | + data() { | ||
| 49 | + return { | ||
| 50 | + aFeeDetailSubInfo: { | ||
| 51 | + subs: [], | ||
| 52 | + feeId: '', | ||
| 53 | + total: 0, | ||
| 54 | + records: 0, | ||
| 55 | + fee: {} | ||
| 56 | + }, | ||
| 57 | + currentPage: 1, | ||
| 58 | + pageSize: 10, | ||
| 59 | + communityId: '' | ||
| 60 | + } | ||
| 61 | + }, | ||
| 62 | + created() { | ||
| 63 | + this.communityId = getCommunityId() | ||
| 64 | + this.initEvents() | ||
| 65 | + }, | ||
| 66 | + methods: { | ||
| 67 | + open(data) { | ||
| 68 | + if (!data.feeId) return | ||
| 69 | + Object.assign(this.aFeeDetailSubInfo, data) | ||
| 70 | + this.listAFeeDetailSub(1, this.pageSize) | ||
| 71 | + this.loadAFeeDetailSubFeeInfo() | ||
| 72 | + }, | ||
| 73 | + initEvents() { | ||
| 74 | + this.$on('switch', this.handleSwitch) | ||
| 75 | + this.$on('loadSub', this.handleLoadSub) | ||
| 76 | + }, | ||
| 77 | + handleSwitch(param) { | ||
| 78 | + if (!param.feeId) return | ||
| 79 | + Object.assign(this.aFeeDetailSubInfo, param) | ||
| 80 | + this.listAFeeDetailSub(1, this.pageSize) | ||
| 81 | + this.loadAFeeDetailSubFeeInfo() | ||
| 82 | + }, | ||
| 83 | + handleLoadSub() { | ||
| 84 | + this.listAFeeDetailSub(this.currentPage, this.pageSize) | ||
| 85 | + this.loadAFeeDetailSubFeeInfo() | ||
| 86 | + }, | ||
| 87 | + handlePageChange(currentPage) { | ||
| 88 | + this.currentPage = currentPage | ||
| 89 | + this.listAFeeDetailSub(currentPage, this.pageSize) | ||
| 90 | + }, | ||
| 91 | + async listAFeeDetailSub(page, rows) { | ||
| 92 | + try { | ||
| 93 | + const params = { | ||
| 94 | + page, | ||
| 95 | + row: rows, | ||
| 96 | + pcFeeId: this.aFeeDetailSubInfo.feeId, | ||
| 97 | + communityId: this.communityId | ||
| 98 | + } | ||
| 99 | + const res = await listAdminPayFeeSub(params) | ||
| 100 | + this.aFeeDetailSubInfo.total = res.total | ||
| 101 | + this.aFeeDetailSubInfo.records = res.records | ||
| 102 | + this.aFeeDetailSubInfo.subs = res.data | ||
| 103 | + } catch (error) { | ||
| 104 | + console.error('获取子费用列表失败:', error) | ||
| 105 | + } | ||
| 106 | + }, | ||
| 107 | + async loadAFeeDetailSubFeeInfo() { | ||
| 108 | + try { | ||
| 109 | + const params = { | ||
| 110 | + page: 1, | ||
| 111 | + row: 1, | ||
| 112 | + feeId: this.aFeeDetailSubInfo.feeId, | ||
| 113 | + communityId: this.communityId | ||
| 114 | + } | ||
| 115 | + const res = await listAdminFee(params) | ||
| 116 | + this.aFeeDetailSubInfo.fee = res.fees[0] | ||
| 117 | + } catch (error) { | ||
| 118 | + console.error('获取费用信息失败:', error) | ||
| 119 | + } | ||
| 120 | + }, | ||
| 121 | + mergeFee(fee) { | ||
| 122 | + this.$emit('openMergeFeeModal', fee) | ||
| 123 | + }, | ||
| 124 | + splitPayFee(fee) { | ||
| 125 | + console.log(fee) | ||
| 126 | + this.$emit('openSplitFeeModal', this.aFeeDetailSubInfo.fee) | ||
| 127 | + } | ||
| 128 | + } | ||
| 129 | +} | ||
| 130 | +</script> | ||
| 131 | + | ||
| 132 | +<style scoped> | ||
| 133 | +.margin-top { | ||
| 134 | + margin-top: 20px; | ||
| 135 | +} | ||
| 136 | + | ||
| 137 | +.text-right { | ||
| 138 | + text-align: right; | ||
| 139 | +} | ||
| 140 | + | ||
| 141 | +.float-right { | ||
| 142 | + float: right; | ||
| 143 | +} | ||
| 144 | +</style> | ||
| 0 | \ No newline at end of file | 145 | \ No newline at end of file |
src/components/aCommunity/aFeeDetailSubDemo.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <a-fee-detail-sub ref="feeSubComponent" /> | ||
| 3 | +</template> | ||
| 4 | + | ||
| 5 | +<script> | ||
| 6 | +import AFeeDetailSub from './aFeeDetailSub' | ||
| 7 | + | ||
| 8 | +export default { | ||
| 9 | + components: { | ||
| 10 | + AFeeDetailSub | ||
| 11 | + }, | ||
| 12 | + methods: { | ||
| 13 | + open(data) { | ||
| 14 | + this.$refs.feeSubComponent.handleSwitch(data) | ||
| 15 | + }, | ||
| 16 | + refresh() { | ||
| 17 | + this.$refs.feeSubComponent.handleLoadSub() | ||
| 18 | + } | ||
| 19 | + } | ||
| 20 | +} | ||
| 21 | +</script> | ||
| 0 | \ No newline at end of file | 22 | \ No newline at end of file |
src/components/fee/aRoomDetailMeterWaterLog.vue
| @@ -47,7 +47,9 @@ export default { | @@ -47,7 +47,9 @@ export default { | ||
| 47 | } | 47 | } |
| 48 | }, | 48 | }, |
| 49 | methods: { | 49 | methods: { |
| 50 | - open() { | 50 | + open(params) { |
| 51 | + this.roomId = params.roomId | ||
| 52 | + this.feeId = params.feeId | ||
| 51 | this.page.current = 1 | 53 | this.page.current = 1 |
| 52 | this.loadData() | 54 | this.loadData() |
| 53 | }, | 55 | }, |
src/components/fee/aRoomDetailOwner.vue
src/components/index/index-admin.vue
| 1 | <template> | 1 | <template> |
| 2 | - <div> | 2 | + <div class="admin-index-container"> |
| 3 | <div class="vc-index-nav"> | 3 | <div class="vc-index-nav"> |
| 4 | <span><i class="fa fa-home margin-right-sm"></i>{{ $t('adminIndex.home') }}</span> | 4 | <span><i class="fa fa-home margin-right-sm"></i>{{ $t('adminIndex.home') }}</span> |
| 5 | <span class="margin-left-sm margin-right-sm">/</span> | 5 | <span class="margin-left-sm margin-right-sm">/</span> |
| @@ -150,6 +150,10 @@ export default { | @@ -150,6 +150,10 @@ export default { | ||
| 150 | </script> | 150 | </script> |
| 151 | 151 | ||
| 152 | <style lang="scss" scoped> | 152 | <style lang="scss" scoped> |
| 153 | +.admin-index-container { | ||
| 154 | + padding: 0 10px; // 添加左右内边距 | ||
| 155 | +} | ||
| 156 | + | ||
| 153 | .vc-index-nav { | 157 | .vc-index-nav { |
| 154 | padding: 10px; | 158 | padding: 10px; |
| 155 | font-size: 16px; | 159 | font-size: 16px; |
src/i18n/communityI18n.js
| @@ -10,6 +10,7 @@ import { messages as ownerExitRoomMessages } from '../views/room/ownerExitRoomLa | @@ -10,6 +10,7 @@ import { messages as ownerExitRoomMessages } from '../views/room/ownerExitRoomLa | ||
| 10 | import { messages as adminRoomDetailMessages } from '../views/aCommunity/adminRoomDetailLang.js' | 10 | import { messages as adminRoomDetailMessages } from '../views/aCommunity/adminRoomDetailLang.js' |
| 11 | import { messages as adminOwnerDetailMessages } from '../views/aCommunity/adminOwnerDetailLang.js' | 11 | import { messages as adminOwnerDetailMessages } from '../views/aCommunity/adminOwnerDetailLang.js' |
| 12 | import { messages as adminCarDetailMessages } from '../views/aCommunity/adminCarDetailLang.js' | 12 | import { messages as adminCarDetailMessages } from '../views/aCommunity/adminCarDetailLang.js' |
| 13 | +import { messages as adminFeeDetailMessages } from '../views/aCommunity/adminFeeDetailLang.js' | ||
| 13 | export const messages = { | 14 | export const messages = { |
| 14 | en: { | 15 | en: { |
| 15 | ...roomStructureMessages.en, | 16 | ...roomStructureMessages.en, |
| @@ -24,6 +25,7 @@ export const messages = { | @@ -24,6 +25,7 @@ export const messages = { | ||
| 24 | ...adminRoomDetailMessages.en, | 25 | ...adminRoomDetailMessages.en, |
| 25 | ...adminOwnerDetailMessages.en, | 26 | ...adminOwnerDetailMessages.en, |
| 26 | ...adminCarDetailMessages.en, | 27 | ...adminCarDetailMessages.en, |
| 28 | + ...adminFeeDetailMessages.en, | ||
| 27 | }, | 29 | }, |
| 28 | zh: { | 30 | zh: { |
| 29 | ...roomStructureMessages.zh, | 31 | ...roomStructureMessages.zh, |
| @@ -38,5 +40,6 @@ export const messages = { | @@ -38,5 +40,6 @@ export const messages = { | ||
| 38 | ...adminRoomDetailMessages.zh, | 40 | ...adminRoomDetailMessages.zh, |
| 39 | ...adminOwnerDetailMessages.zh, | 41 | ...adminOwnerDetailMessages.zh, |
| 40 | ...adminCarDetailMessages.zh, | 42 | ...adminCarDetailMessages.zh, |
| 43 | + ...adminFeeDetailMessages.zh, | ||
| 41 | } | 44 | } |
| 42 | } | 45 | } |
| 43 | \ No newline at end of file | 46 | \ No newline at end of file |
src/router/communityRouter.js
| @@ -59,4 +59,9 @@ export default [ | @@ -59,4 +59,9 @@ export default [ | ||
| 59 | name: '/pages/car/adminCarDetail', | 59 | name: '/pages/car/adminCarDetail', |
| 60 | component: () => import('@/views/aCommunity/adminCarDetailList.vue') | 60 | component: () => import('@/views/aCommunity/adminCarDetailList.vue') |
| 61 | }, | 61 | }, |
| 62 | + { | ||
| 63 | + path:'/pages/fee/adminFeeDetail', | ||
| 64 | + name:'/pages/fee/adminFeeDetail', | ||
| 65 | + component: () => import('@/views/aCommunity/adminFeeDetailList.vue') | ||
| 66 | + }, | ||
| 62 | ] | 67 | ] |
| 63 | \ No newline at end of file | 68 | \ No newline at end of file |
src/views/aCommunity/aFeeDetailConfigLang.js
0 → 100644
| 1 | +export const messages = { | ||
| 2 | + en: { | ||
| 3 | + aFeeDetailConfig: { | ||
| 4 | + feeType: 'Fee Type', | ||
| 5 | + feeItem: 'Fee Item', | ||
| 6 | + feeFlag: 'Fee Flag', | ||
| 7 | + billType: 'Bill Type', | ||
| 8 | + paymentType: 'Payment Type', | ||
| 9 | + prepay: 'Prepay', | ||
| 10 | + postpay: 'Postpay', | ||
| 11 | + paymentCycle: 'Payment Cycle', | ||
| 12 | + unit: 'Unit', | ||
| 13 | + formula: 'Formula', | ||
| 14 | + unitPrice: 'Unit Price', | ||
| 15 | + additionalFee: 'Additional Fee', | ||
| 16 | + accountDeduction: 'Account Deduction', | ||
| 17 | + mobilePayment: 'Mobile Payment', | ||
| 18 | + decimalPlaces: 'Decimal Places', | ||
| 19 | + yes: 'Yes', | ||
| 20 | + no: 'No' | ||
| 21 | + } | ||
| 22 | + }, | ||
| 23 | + zh: { | ||
| 24 | + aFeeDetailConfig: { | ||
| 25 | + feeType: '费用类型', | ||
| 26 | + feeItem: '收费项目', | ||
| 27 | + feeFlag: '费用标识', | ||
| 28 | + billType: '催缴类型', | ||
| 29 | + paymentType: '付费类型', | ||
| 30 | + prepay: '预付费', | ||
| 31 | + postpay: '后付费', | ||
| 32 | + paymentCycle: '缴费周期', | ||
| 33 | + unit: '单位', | ||
| 34 | + formula: '公式', | ||
| 35 | + unitPrice: '计费单价', | ||
| 36 | + additionalFee: '附加/固定费用', | ||
| 37 | + accountDeduction: '账户抵扣', | ||
| 38 | + mobilePayment: '手机缴费', | ||
| 39 | + decimalPlaces: '保留小数位', | ||
| 40 | + yes: '是', | ||
| 41 | + no: '否' | ||
| 42 | + } | ||
| 43 | + } | ||
| 44 | +} | ||
| 0 | \ No newline at end of file | 45 | \ No newline at end of file |
src/views/aCommunity/aFeeDetailDiscountLang.js
0 → 100644
| 1 | +export const messages = { | ||
| 2 | + en: { | ||
| 3 | + aFeeDetailDiscount: { | ||
| 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 | + aFeeDetailDiscount: { | ||
| 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 | \ No newline at end of file | 45 | \ No newline at end of file |
src/views/aCommunity/aFeeDetailFeeObjLang.js
0 → 100644
| 1 | +export const messages = { | ||
| 2 | + en: { | ||
| 3 | + aFeeDetailFeeObj: { | ||
| 4 | + selectFeeObj: 'Please select fee object', | ||
| 5 | + house: 'House', | ||
| 6 | + car: 'Car', | ||
| 7 | + contract: 'Contract', | ||
| 8 | + feeId: 'Fee ID', | ||
| 9 | + objType: 'Object Type', | ||
| 10 | + objName: 'Object Name', | ||
| 11 | + ownerName: 'Owner Name', | ||
| 12 | + phone: 'Phone', | ||
| 13 | + createTime: 'Create Time', | ||
| 14 | + query: 'Query' | ||
| 15 | + } | ||
| 16 | + }, | ||
| 17 | + zh: { | ||
| 18 | + aFeeDetailFeeObj: { | ||
| 19 | + selectFeeObj: '请选择费用对象', | ||
| 20 | + house: '房屋', | ||
| 21 | + car: '车辆', | ||
| 22 | + contract: '合同', | ||
| 23 | + feeId: '费用编号', | ||
| 24 | + objType: '对象类型', | ||
| 25 | + objName: '对象名称', | ||
| 26 | + ownerName: '业主名称', | ||
| 27 | + phone: '手机号', | ||
| 28 | + createTime: '创建时间', | ||
| 29 | + query: '查询' | ||
| 30 | + } | ||
| 31 | + } | ||
| 32 | +} | ||
| 0 | \ No newline at end of file | 33 | \ No newline at end of file |
src/views/aCommunity/aFeeDetailHisLang.js
0 → 100644
| 1 | +export const messages = { | ||
| 2 | + en: { | ||
| 3 | + aFeeDetailHis: { | ||
| 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 | + aFeeDetailHis: { | ||
| 18 | + feeName: '费用项', | ||
| 19 | + startTime: '建账时间', | ||
| 20 | + endTime: '计费起始时间', | ||
| 21 | + operation: '动作', | ||
| 22 | + operator: '操作人', | ||
| 23 | + operationTime: '操作时间', | ||
| 24 | + add: '添加', | ||
| 25 | + delete: '删除', | ||
| 26 | + modifyNew: '修改(新)', | ||
| 27 | + modifyOld: '修改(旧)' | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | +} | ||
| 0 | \ No newline at end of file | 31 | \ No newline at end of file |
src/views/aCommunity/aFeeDetailImportLang.js
0 → 100644
| 1 | +export const messages = { | ||
| 2 | + en: { | ||
| 3 | + aFeeDetailImport: { | ||
| 4 | + floorNum: 'Building Number', | ||
| 5 | + unitNum: 'Unit Number', | ||
| 6 | + roomNum: 'Room Number', | ||
| 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 | + aFeeDetailImport: { | ||
| 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 | \ No newline at end of file | 33 | \ No newline at end of file |
src/views/aCommunity/aFeeDetailSubLang.js
0 → 100644
| 1 | +export const messages = { | ||
| 2 | + en: { | ||
| 3 | + aFeeDetailSub: { | ||
| 4 | + parentFeeId: 'Parent Fee ID', | ||
| 5 | + childFeeId: 'Child Fee ID', | ||
| 6 | + feeName: 'Fee Name', | ||
| 7 | + feeObject: 'Fee Object', | ||
| 8 | + billingPeriod: 'Billing Period', | ||
| 9 | + splitTime: 'Split Time' | ||
| 10 | + } | ||
| 11 | + }, | ||
| 12 | + zh: { | ||
| 13 | + aFeeDetailSub: { | ||
| 14 | + parentFeeId: '父费用ID', | ||
| 15 | + childFeeId: '子费用ID', | ||
| 16 | + feeName: '费用名称', | ||
| 17 | + feeObject: '费用对象', | ||
| 18 | + billingPeriod: '计费时间段', | ||
| 19 | + splitTime: '拆分时间' | ||
| 20 | + } | ||
| 21 | + } | ||
| 22 | +} | ||
| 0 | \ No newline at end of file | 23 | \ No newline at end of file |
src/views/aCommunity/adminFeeDetailLang.js
0 → 100644
| 1 | + | ||
| 2 | +export const messages = { | ||
| 3 | + en: { | ||
| 4 | + adminFeeDetail: { | ||
| 5 | + feeInfo: 'Fee Information', | ||
| 6 | + paymentRecord: 'Payment Record', | ||
| 7 | + relatedRoom: 'Related Room', | ||
| 8 | + relatedCar: 'Related Car', | ||
| 9 | + relatedContract: 'Related Contract', | ||
| 10 | + modifyRecord: 'Modify Record', | ||
| 11 | + feeItem: 'Fee Item', | ||
| 12 | + owner: 'Owner', | ||
| 13 | + sameFeeObj: 'Same Fee Object', | ||
| 14 | + relatedMeter: 'Related Meter', | ||
| 15 | + relatedImport: 'Related Import', | ||
| 16 | + discountApply: 'Discount Application', | ||
| 17 | + reprintReceipt: 'Reprint Receipt', | ||
| 18 | + feeSplit: 'Fee Split' | ||
| 19 | + }, | ||
| 20 | + adminFeeDetailInfo: { | ||
| 21 | + feeId: 'Fee ID', | ||
| 22 | + feeFlag: 'Fee Flag', | ||
| 23 | + feeType: 'Fee Type', | ||
| 24 | + payerObj: 'Payer Object', | ||
| 25 | + feeItem: 'Fee Item', | ||
| 26 | + feeState: 'Fee State', | ||
| 27 | + createTime: 'Create Time', | ||
| 28 | + batchId: 'Batch ID', | ||
| 29 | + startTime: 'Start Time', | ||
| 30 | + endTime: 'End Time', | ||
| 31 | + owedAmount: 'Owed Amount' | ||
| 32 | + }, | ||
| 33 | + aRoomDetailCar: { | ||
| 34 | + placeholderCarNum: 'Please enter license plate number', | ||
| 35 | + carNum: 'License Plate', | ||
| 36 | + leaseType: 'Plate Type', | ||
| 37 | + tempCar: 'Temporary Car', | ||
| 38 | + carType: 'Vehicle Type', | ||
| 39 | + color: 'Color', | ||
| 40 | + owner: 'Owner', | ||
| 41 | + parkingSpace: 'Parking Space', | ||
| 42 | + released: 'Released', | ||
| 43 | + validity: 'Validity' | ||
| 44 | + }, | ||
| 45 | + aFeeDetailHis: { | ||
| 46 | + feeName: 'Fee Item', | ||
| 47 | + startTime: 'Account Time', | ||
| 48 | + endTime: 'Billing Start Time', | ||
| 49 | + operation: 'Action', | ||
| 50 | + operator: 'Operator', | ||
| 51 | + operationTime: 'Operation Time', | ||
| 52 | + add: 'Add', | ||
| 53 | + delete: 'Delete', | ||
| 54 | + modifyNew: 'Modify(New)', | ||
| 55 | + modifyOld: 'Modify(Old)' | ||
| 56 | + }, | ||
| 57 | + aFeeDetailConfig: { | ||
| 58 | + feeType: 'Fee Type', | ||
| 59 | + feeItem: 'Fee Item', | ||
| 60 | + feeFlag: 'Fee Flag', | ||
| 61 | + billType: 'Bill Type', | ||
| 62 | + paymentType: 'Payment Type', | ||
| 63 | + prepay: 'Prepay', | ||
| 64 | + postpay: 'Postpay', | ||
| 65 | + paymentCycle: 'Payment Cycle', | ||
| 66 | + unit: 'Unit', | ||
| 67 | + formula: 'Formula', | ||
| 68 | + unitPrice: 'Unit Price', | ||
| 69 | + additionalFee: 'Additional Fee', | ||
| 70 | + accountDeduction: 'Account Deduction', | ||
| 71 | + mobilePayment: 'Mobile Payment', | ||
| 72 | + decimalPlaces: 'Decimal Places', | ||
| 73 | + yes: 'Yes', | ||
| 74 | + no: 'No' | ||
| 75 | + }, | ||
| 76 | + aFeeDetailFeeObj: { | ||
| 77 | + selectFeeObj: 'Please select fee object', | ||
| 78 | + house: 'House', | ||
| 79 | + car: 'Car', | ||
| 80 | + contract: 'Contract', | ||
| 81 | + feeId: 'Fee ID', | ||
| 82 | + objType: 'Object Type', | ||
| 83 | + objName: 'Object Name', | ||
| 84 | + ownerName: 'Owner Name', | ||
| 85 | + phone: 'Phone', | ||
| 86 | + createTime: 'Create Time', | ||
| 87 | + query: 'Query' | ||
| 88 | + }, | ||
| 89 | + aFeeDetailImport: { | ||
| 90 | + floorNum: 'Building Number', | ||
| 91 | + unitNum: 'Unit Number', | ||
| 92 | + roomNum: 'Room Number', | ||
| 93 | + feeName: 'Fee Name', | ||
| 94 | + startTime: 'Start Time', | ||
| 95 | + endTime: 'End Time', | ||
| 96 | + totalAmount: 'Total Amount', | ||
| 97 | + remark: 'Remark', | ||
| 98 | + status: 'Status', | ||
| 99 | + importSuccess: 'Import Success', | ||
| 100 | + importFailed: 'Import Failed' | ||
| 101 | + }, | ||
| 102 | + aFeeDetailDiscount: { | ||
| 103 | + roomName: 'Room(Building-Unit-Room)', | ||
| 104 | + discountId: 'Discount ID', | ||
| 105 | + discountName: 'Discount Name', | ||
| 106 | + applyType: 'Apply Type', | ||
| 107 | + applicant: 'Applicant', | ||
| 108 | + applicantPhone: 'Applicant Phone', | ||
| 109 | + startTime: 'Start Time', | ||
| 110 | + endTime: 'End Time', | ||
| 111 | + status: 'Status', | ||
| 112 | + createTime: 'Create Time', | ||
| 113 | + useStatus: 'Use Status', | ||
| 114 | + notUsed: 'Not Used', | ||
| 115 | + used: 'Used', | ||
| 116 | + returnType: 'Return Type', | ||
| 117 | + accountBalance: 'Account Balance', | ||
| 118 | + discount: 'Discount', | ||
| 119 | + returnAmount: 'Return Amount' | ||
| 120 | + }, | ||
| 121 | + aFeeDetailSub: { | ||
| 122 | + parentFeeId: 'Parent Fee ID', | ||
| 123 | + childFeeId: 'Child Fee ID', | ||
| 124 | + feeName: 'Fee Name', | ||
| 125 | + feeObject: 'Fee Object', | ||
| 126 | + billingPeriod: 'Billing Period', | ||
| 127 | + splitTime: 'Split Time' | ||
| 128 | + } | ||
| 129 | + }, | ||
| 130 | + zh: { | ||
| 131 | + adminFeeDetail: { | ||
| 132 | + feeInfo: '费用信息', | ||
| 133 | + paymentRecord: '缴费记录', | ||
| 134 | + relatedRoom: '关联房屋', | ||
| 135 | + relatedCar: '关联车辆', | ||
| 136 | + relatedContract: '关联合同', | ||
| 137 | + modifyRecord: '修改记录', | ||
| 138 | + feeItem: '费用项', | ||
| 139 | + owner: '业主', | ||
| 140 | + sameFeeObj: '同费用对象', | ||
| 141 | + relatedMeter: '关联抄表', | ||
| 142 | + relatedImport: '关联导入', | ||
| 143 | + discountApply: '优惠申请', | ||
| 144 | + reprintReceipt: '补打收据', | ||
| 145 | + feeSplit: '费用拆分' | ||
| 146 | + }, | ||
| 147 | + adminFeeDetailInfo: { | ||
| 148 | + feeId: '费用ID', | ||
| 149 | + feeFlag: '费用标识', | ||
| 150 | + feeType: '费用类型', | ||
| 151 | + payerObj: '付费对象', | ||
| 152 | + feeItem: '费用项', | ||
| 153 | + feeState: '费用状态', | ||
| 154 | + createTime: '建账时间', | ||
| 155 | + batchId: '批次', | ||
| 156 | + startTime: '应收开始时间', | ||
| 157 | + endTime: '应收结束时间', | ||
| 158 | + owedAmount: '欠费金额' | ||
| 159 | + }, | ||
| 160 | + aRoomDetailCar: { | ||
| 161 | + placeholderCarNum: '请填写车牌号', | ||
| 162 | + carNum: '车牌号', | ||
| 163 | + leaseType: '车牌类型', | ||
| 164 | + tempCar: '临时车', | ||
| 165 | + carType: '车辆类型', | ||
| 166 | + color: '颜色', | ||
| 167 | + owner: '业主', | ||
| 168 | + parkingSpace: '车位', | ||
| 169 | + released: '车位已释放', | ||
| 170 | + validity: '有效期' | ||
| 171 | + }, | ||
| 172 | + aFeeDetailHis: { | ||
| 173 | + feeName: '费用项', | ||
| 174 | + startTime: '建账时间', | ||
| 175 | + endTime: '计费起始时间', | ||
| 176 | + operation: '动作', | ||
| 177 | + operator: '操作人', | ||
| 178 | + operationTime: '操作时间', | ||
| 179 | + add: '添加', | ||
| 180 | + delete: '删除', | ||
| 181 | + modifyNew: '修改(新)', | ||
| 182 | + modifyOld: '修改(旧)' | ||
| 183 | + }, | ||
| 184 | + aFeeDetailConfig: { | ||
| 185 | + feeType: '费用类型', | ||
| 186 | + feeItem: '收费项目', | ||
| 187 | + feeFlag: '费用标识', | ||
| 188 | + billType: '催缴类型', | ||
| 189 | + paymentType: '付费类型', | ||
| 190 | + prepay: '预付费', | ||
| 191 | + postpay: '后付费', | ||
| 192 | + paymentCycle: '缴费周期', | ||
| 193 | + unit: '单位', | ||
| 194 | + formula: '公式', | ||
| 195 | + unitPrice: '计费单价', | ||
| 196 | + additionalFee: '附加/固定费用', | ||
| 197 | + accountDeduction: '账户抵扣', | ||
| 198 | + mobilePayment: '手机缴费', | ||
| 199 | + decimalPlaces: '保留小数位', | ||
| 200 | + yes: '是', | ||
| 201 | + no: '否' | ||
| 202 | + }, | ||
| 203 | + aFeeDetailFeeObj: { | ||
| 204 | + selectFeeObj: '请选择费用对象', | ||
| 205 | + house: '房屋', | ||
| 206 | + car: '车辆', | ||
| 207 | + contract: '合同', | ||
| 208 | + feeId: '费用编号', | ||
| 209 | + objType: '对象类型', | ||
| 210 | + objName: '对象名称', | ||
| 211 | + ownerName: '业主名称', | ||
| 212 | + phone: '手机号', | ||
| 213 | + createTime: '创建时间', | ||
| 214 | + query: '查询' | ||
| 215 | + }, | ||
| 216 | + aFeeDetailImport: { | ||
| 217 | + floorNum: '楼栋编号', | ||
| 218 | + unitNum: '单元编号', | ||
| 219 | + roomNum: '房屋编号', | ||
| 220 | + feeName: '费用名称', | ||
| 221 | + startTime: '开始时间', | ||
| 222 | + endTime: '结束时间', | ||
| 223 | + totalAmount: '总金额', | ||
| 224 | + remark: '备注', | ||
| 225 | + status: '状态', | ||
| 226 | + importSuccess: '导入成功', | ||
| 227 | + importFailed: '导入失败' | ||
| 228 | + }, | ||
| 229 | + aFeeDetailDiscount: { | ||
| 230 | + roomName: '房屋(楼栋-单元-房屋)', | ||
| 231 | + discountId: '折扣ID', | ||
| 232 | + discountName: '折扣名称', | ||
| 233 | + applyType: '申请类型', | ||
| 234 | + applicant: '申请人', | ||
| 235 | + applicantPhone: '申请电话', | ||
| 236 | + startTime: '开始时间', | ||
| 237 | + endTime: '结束时间', | ||
| 238 | + status: '状态', | ||
| 239 | + createTime: '创建时间', | ||
| 240 | + useStatus: '使用状态', | ||
| 241 | + notUsed: '未使用', | ||
| 242 | + used: '已使用', | ||
| 243 | + returnType: '返还类型', | ||
| 244 | + accountBalance: '账户余额', | ||
| 245 | + discount: '折扣', | ||
| 246 | + returnAmount: '返还金额' | ||
| 247 | + }, | ||
| 248 | + aFeeDetailSub: { | ||
| 249 | + parentFeeId: '父费用ID', | ||
| 250 | + childFeeId: '子费用ID', | ||
| 251 | + feeName: '费用名称', | ||
| 252 | + feeObject: '费用对象', | ||
| 253 | + billingPeriod: '计费时间段', | ||
| 254 | + splitTime: '拆分时间' | ||
| 255 | + } | ||
| 256 | + } | ||
| 257 | +} | ||
| 0 | \ No newline at end of file | 258 | \ No newline at end of file |
src/views/aCommunity/adminFeeDetailList.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div class="admin-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('adminFeeDetail.feeInfo') }} | ||
| 7 | + </div> | ||
| 8 | + </div> | ||
| 9 | + | ||
| 10 | + <!-- 费用信息 --> | ||
| 11 | + <div class="margin-top"> | ||
| 12 | + <el-row :gutter="20"> | ||
| 13 | + <el-col :span="24"> | ||
| 14 | + <el-row :gutter="20"> | ||
| 15 | + <el-col :span="6"> | ||
| 16 | + <div class="form-group"> | ||
| 17 | + <label class="col-form-label"> | ||
| 18 | + {{ $t('adminFeeDetailInfo.feeId') }}: | ||
| 19 | + </label> | ||
| 20 | + <label>{{ adminFeeDetailInfo.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('adminFeeDetailInfo.feeFlag') }}: | ||
| 27 | + </label> | ||
| 28 | + <label>{{ adminFeeDetailInfo.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('adminFeeDetailInfo.feeType') }}: | ||
| 35 | + </label> | ||
| 36 | + <label>{{ adminFeeDetailInfo.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('adminFeeDetailInfo.payerObj') }}: | ||
| 43 | + </label> | ||
| 44 | + <label>{{ adminFeeDetailInfo.payerObjName || '-' }}</label> | ||
| 45 | + </div> | ||
| 46 | + </el-col> | ||
| 47 | + </el-row> | ||
| 48 | + | ||
| 49 | + <el-row :gutter="20"> | ||
| 50 | + <el-col :span="6"> | ||
| 51 | + <div class="form-group"> | ||
| 52 | + <label class="col-form-label"> | ||
| 53 | + {{ $t('adminFeeDetailInfo.feeItem') }}: | ||
| 54 | + </label> | ||
| 55 | + <label>{{ adminFeeDetailInfo.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('adminFeeDetailInfo.feeState') }}: | ||
| 62 | + </label> | ||
| 63 | + <label>{{ adminFeeDetailInfo.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('adminFeeDetailInfo.createTime') }}: | ||
| 70 | + </label> | ||
| 71 | + <label>{{ adminFeeDetailInfo.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('adminFeeDetailInfo.batchId') }}: | ||
| 78 | + </label> | ||
| 79 | + <label>{{ adminFeeDetailInfo.batchId }}</label> | ||
| 80 | + </div> | ||
| 81 | + </el-col> | ||
| 82 | + </el-row> | ||
| 83 | + | ||
| 84 | + <el-row :gutter="20"> | ||
| 85 | + <el-col :span="6"> | ||
| 86 | + <div class="form-group"> | ||
| 87 | + <label class="col-form-label"> | ||
| 88 | + {{ $t('adminFeeDetailInfo.startTime') }}: | ||
| 89 | + </label> | ||
| 90 | + <label>{{ getEndTime(adminFeeDetailInfo) }}</label> | ||
| 91 | + </div> | ||
| 92 | + </el-col> | ||
| 93 | + <el-col :span="6"> | ||
| 94 | + <div class="form-group"> | ||
| 95 | + <label class="col-form-label"> | ||
| 96 | + {{ $t('adminFeeDetailInfo.endTime') }}: | ||
| 97 | + </label> | ||
| 98 | + <label>{{ getDeadlineTime(adminFeeDetailInfo) }}</label> | ||
| 99 | + </div> | ||
| 100 | + </el-col> | ||
| 101 | + <el-col :span="6"> | ||
| 102 | + <div class="form-group"> | ||
| 103 | + <label class="col-form-label"> | ||
| 104 | + {{ $t('adminFeeDetailInfo.owedAmount') }}: | ||
| 105 | + </label> | ||
| 106 | + <label>{{ adminFeeDetailInfo.amountOwed }}</label> | ||
| 107 | + </div> | ||
| 108 | + </el-col> | ||
| 109 | + </el-row> | ||
| 110 | + | ||
| 111 | + <el-row :gutter="20"> | ||
| 112 | + <el-col :span="6" v-for="(item, index) in adminFeeDetailInfo.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 | + <divider /> | ||
| 126 | + <div class="margin-top-sm"> | ||
| 127 | + <el-tabs v-model="adminFeeDetailInfo._currentTab" @tab-click="changeTab(adminFeeDetailInfo._currentTab)"> | ||
| 128 | + <el-tab-pane :label="$t('adminFeeDetail.paymentRecord')" name="aRoomDetailHisFee"></el-tab-pane> | ||
| 129 | + <el-tab-pane v-if="adminFeeDetailInfo.payerObjType == '3333'" :label="$t('adminFeeDetail.relatedRoom')" | ||
| 130 | + name="aRoomDetailRoom"> | ||
| 131 | + </el-tab-pane> | ||
| 132 | + <el-tab-pane v-if="adminFeeDetailInfo.payerObjType == '6666'" :label="$t('adminFeeDetail.relatedCar')" | ||
| 133 | + name="aRoomDetailCar"> | ||
| 134 | + </el-tab-pane> | ||
| 135 | + <el-tab-pane v-if="adminFeeDetailInfo.payerObjType == '7777'" :label="$t('adminFeeDetail.relatedContract')" | ||
| 136 | + name="adminFeeDetailContract"> | ||
| 137 | + </el-tab-pane> | ||
| 138 | + <el-tab-pane :label="$t('adminFeeDetail.modifyRecord')" name="aFeeDetailHis"></el-tab-pane> | ||
| 139 | + <el-tab-pane :label="$t('adminFeeDetail.feeItem')" name="aFeeDetailConfig"></el-tab-pane> | ||
| 140 | + <el-tab-pane :label="$t('adminFeeDetail.owner')" name="aRoomDetailOwner"></el-tab-pane> | ||
| 141 | + <el-tab-pane :label="$t('adminFeeDetail.sameFeeObj')" name="aFeeDetailFeeObj"></el-tab-pane> | ||
| 142 | + <el-tab-pane :label="$t('adminFeeDetail.relatedMeter')" name="aRoomDetailMeterWaterLog"></el-tab-pane> | ||
| 143 | + <el-tab-pane :label="$t('adminFeeDetail.relatedImport')" name="aFeeDetailImport"></el-tab-pane> | ||
| 144 | + <el-tab-pane :label="$t('adminFeeDetail.discountApply')" name="aFeeDetailDiscount"></el-tab-pane> | ||
| 145 | + <el-tab-pane :label="$t('adminFeeDetail.reprintReceipt')" name="aRoomDetailReceipt"></el-tab-pane> | ||
| 146 | + <el-tab-pane v-if="adminFeeDetailInfo.feeFlag != '2006012'" :label="$t('adminFeeDetail.feeSplit')" | ||
| 147 | + name="aFeeDetailSub"> | ||
| 148 | + </el-tab-pane> | ||
| 149 | + </el-tabs> | ||
| 150 | + </div> | ||
| 151 | + </div> | ||
| 152 | + | ||
| 153 | + <div class="white-bg padding-left padding-right padding-top border-radius-bottom"> | ||
| 154 | + <component :is="adminFeeDetailInfo._currentTab" :ref="adminFeeDetailInfo._currentTab" | ||
| 155 | + @refresh="loadAdminFeeDetailInfo"> | ||
| 156 | + </component> | ||
| 157 | + </div> | ||
| 158 | + </div> | ||
| 159 | +</template> | ||
| 160 | + | ||
| 161 | +<script> | ||
| 162 | +import { getFeeDetail } from '@/api/aCommunity/adminFeeDetailApi' | ||
| 163 | +import { getCommunityId } from '@/api/community/communityApi' | ||
| 164 | +//import { getDict } from '@/api/community/communityApi' | ||
| 165 | + | ||
| 166 | +// 导入所有子组件 | ||
| 167 | +import ARoomDetailHisFee from '@/components/fee/aRoomDetailHisFee.vue' | ||
| 168 | +import ARoomDetailRoom from '@/components/fee/aRoomDetailRoom.vue' | ||
| 169 | +import ARoomDetailCar from '@/components/aCommunity/aRoomDetailCar.vue' | ||
| 170 | +import AFeeDetailHis from '@/components/aCommunity/aFeeDetailHis.vue' | ||
| 171 | +import AFeeDetailConfig from '@/components/aCommunity/aFeeDetailConfig.vue' | ||
| 172 | +import ARoomDetailOwner from '@/components/fee/aRoomDetailOwner.vue' | ||
| 173 | +import AFeeDetailFeeObj from '@/components/aCommunity/aFeeDetailFeeObj.vue' | ||
| 174 | +import ARoomDetailMeterWaterLog from '@/components/fee/aRoomDetailMeterWaterLog.vue' | ||
| 175 | +import AFeeDetailImport from '@/components/aCommunity/aFeeDetailImport.vue' | ||
| 176 | +import AFeeDetailDiscount from '@/components/aCommunity/aFeeDetailDiscount.vue' | ||
| 177 | +import ARoomDetailReceipt from '@/components/fee/aRoomDetailReceipt.vue' | ||
| 178 | +import AFeeDetailSub from '@/components/aCommunity/aFeeDetailSub.vue' | ||
| 179 | +import divider from '@/components/system/divider.vue' | ||
| 180 | + | ||
| 181 | +export default { | ||
| 182 | + name: 'AdminFeeDetailList', | ||
| 183 | + components: { | ||
| 184 | + ARoomDetailHisFee, | ||
| 185 | + ARoomDetailRoom, | ||
| 186 | + ARoomDetailCar, | ||
| 187 | + AFeeDetailHis, | ||
| 188 | + AFeeDetailConfig, | ||
| 189 | + ARoomDetailOwner, | ||
| 190 | + AFeeDetailFeeObj, | ||
| 191 | + ARoomDetailMeterWaterLog, | ||
| 192 | + AFeeDetailImport, | ||
| 193 | + AFeeDetailDiscount, | ||
| 194 | + ARoomDetailReceipt, | ||
| 195 | + AFeeDetailSub, | ||
| 196 | + divider | ||
| 197 | + }, | ||
| 198 | + data() { | ||
| 199 | + return { | ||
| 200 | + adminFeeDetailInfo: { | ||
| 201 | + feeId: '', | ||
| 202 | + configId: '', | ||
| 203 | + feeFlag: '', | ||
| 204 | + feeFlagName: '', | ||
| 205 | + feeTypeCdName: '', | ||
| 206 | + payerObjName: '', | ||
| 207 | + payerObjId: '', | ||
| 208 | + payerObjType: '', | ||
| 209 | + feeName: '', | ||
| 210 | + stateName: '', | ||
| 211 | + state: '', | ||
| 212 | + startTime: '', | ||
| 213 | + batchId: '', | ||
| 214 | + endTime: '', | ||
| 215 | + deadlineTime: '', | ||
| 216 | + amountOwed: '', | ||
| 217 | + attrs: [], | ||
| 218 | + _currentTab: 'aRoomDetailHisFee', | ||
| 219 | + needBack: false | ||
| 220 | + }, | ||
| 221 | + communityId: '' | ||
| 222 | + } | ||
| 223 | + }, | ||
| 224 | + created() { | ||
| 225 | + this.communityId = getCommunityId() | ||
| 226 | + this.adminFeeDetailInfo.feeId = this.$route.query.feeId || '' | ||
| 227 | + if (this.adminFeeDetailInfo.feeId) { | ||
| 228 | + this.loadAdminFeeDetailInfo() | ||
| 229 | + } | ||
| 230 | + }, | ||
| 231 | + methods: { | ||
| 232 | + async loadAdminFeeDetailInfo() { | ||
| 233 | + try { | ||
| 234 | + const params = { | ||
| 235 | + page: 1, | ||
| 236 | + row: 1, | ||
| 237 | + feeId: this.adminFeeDetailInfo.feeId | ||
| 238 | + } | ||
| 239 | + const response = await getFeeDetail(params) | ||
| 240 | + const feeInfo = response.fees[0] | ||
| 241 | + Object.assign(this.adminFeeDetailInfo, feeInfo) | ||
| 242 | + this.adminFeeDetailInfo.attrs = feeInfo.feeAttrs | ||
| 243 | + this.changeTab(this.adminFeeDetailInfo._currentTab) | ||
| 244 | + } catch (error) { | ||
| 245 | + console.error('加载费用详情失败:', error) | ||
| 246 | + } | ||
| 247 | + }, | ||
| 248 | + changeTab(tab) { | ||
| 249 | + this.adminFeeDetailInfo._currentTab = tab | ||
| 250 | + let ownerId = '' | ||
| 251 | + this.adminFeeDetailInfo.attrs.forEach(item => { | ||
| 252 | + if (item.specCd === '390007') { | ||
| 253 | + ownerId = item.value | ||
| 254 | + } | ||
| 255 | + }) | ||
| 256 | + | ||
| 257 | + setTimeout(() => { | ||
| 258 | + if (this.$refs[tab] && this.$refs[tab].open) { | ||
| 259 | + this.$refs[tab].open({ | ||
| 260 | + feeId: this.adminFeeDetailInfo.feeId, | ||
| 261 | + payerObjId: this.adminFeeDetailInfo.payerObjId, | ||
| 262 | + roomId: this.adminFeeDetailInfo.payerObjId, | ||
| 263 | + carId: this.adminFeeDetailInfo.payerObjId, | ||
| 264 | + configId: this.adminFeeDetailInfo.configId, | ||
| 265 | + state: this.adminFeeDetailInfo.state, | ||
| 266 | + ownerId: ownerId | ||
| 267 | + }) | ||
| 268 | + } | ||
| 269 | + }, 500) | ||
| 270 | + }, | ||
| 271 | + getDeadlineTime(fee) { | ||
| 272 | + if (fee.amountOwed == 0 && fee.endTime == fee.deadlineTime) { | ||
| 273 | + return '-' | ||
| 274 | + } | ||
| 275 | + if (fee.state == '2009001') { | ||
| 276 | + return '-' | ||
| 277 | + } | ||
| 278 | + return fee.deadlineTime | ||
| 279 | + }, | ||
| 280 | + getEndTime(fee) { | ||
| 281 | + if (fee.state == '2009001') { | ||
| 282 | + return '-' | ||
| 283 | + } | ||
| 284 | + return fee.endTime | ||
| 285 | + } | ||
| 286 | + } | ||
| 287 | +} | ||
| 288 | +</script> | ||
| 289 | + | ||
| 290 | +<style scoped> | ||
| 291 | +.admin-fee-detail-container { | ||
| 292 | + background-color: #f5f5f5; | ||
| 293 | + padding: 20px; | ||
| 294 | +} | ||
| 295 | + | ||
| 296 | +.white-bg { | ||
| 297 | + background-color: #fff; | ||
| 298 | +} | ||
| 299 | + | ||
| 300 | +.padding-left { | ||
| 301 | + padding-left: 20px; | ||
| 302 | +} | ||
| 303 | + | ||
| 304 | +.padding-right { | ||
| 305 | + padding-right: 20px; | ||
| 306 | +} | ||
| 307 | + | ||
| 308 | +.padding-top { | ||
| 309 | + padding-top: 20px; | ||
| 310 | +} | ||
| 311 | + | ||
| 312 | +.border-radius-top { | ||
| 313 | + border-radius: 4px 4px 0 0; | ||
| 314 | +} | ||
| 315 | + | ||
| 316 | +.border-radius-bottom { | ||
| 317 | + border-radius: 0 0 4px 4px; | ||
| 318 | +} | ||
| 319 | + | ||
| 320 | +.margin-top { | ||
| 321 | + margin-top: 20px; | ||
| 322 | +} | ||
| 323 | + | ||
| 324 | +.margin-top-sm { | ||
| 325 | + margin-top: 10px; | ||
| 326 | +} | ||
| 327 | + | ||
| 328 | +.text-title { | ||
| 329 | + font-size: 18px; | ||
| 330 | + font-weight: bold; | ||
| 331 | +} | ||
| 332 | + | ||
| 333 | +.flex { | ||
| 334 | + display: flex; | ||
| 335 | +} | ||
| 336 | + | ||
| 337 | +.justify-between { | ||
| 338 | + justify-content: space-between; | ||
| 339 | +} | ||
| 340 | + | ||
| 341 | +.vc-line-primary { | ||
| 342 | + height: 1px; | ||
| 343 | + background-color: #ebeef5; | ||
| 344 | +} | ||
| 345 | + | ||
| 346 | +.form-group { | ||
| 347 | + margin-bottom: 15px; | ||
| 348 | + text-align: left; | ||
| 349 | +} | ||
| 350 | + | ||
| 351 | +.col-form-label { | ||
| 352 | + margin-bottom: 5px; | ||
| 353 | + color: #606266; | ||
| 354 | + margin-right: 10px; | ||
| 355 | +} | ||
| 356 | +</style> | ||
| 0 | \ No newline at end of file | 357 | \ No newline at end of file |
src/views/community/cityAreaList.vue
| @@ -6,7 +6,7 @@ | @@ -6,7 +6,7 @@ | ||
| 6 | </el-col> | 6 | </el-col> |
| 7 | <el-col :span="20"> | 7 | <el-col :span="20"> |
| 8 | <el-card class="box-card"> | 8 | <el-card class="box-card"> |
| 9 | - <div slot="header" class="clearfix"> | 9 | + <div slot="header" class="flex justify-between"> |
| 10 | <span>{{ $t('cityArea.detailTitle') }}</span> | 10 | <span>{{ $t('cityArea.detailTitle') }}</span> |
| 11 | </div> | 11 | </div> |
| 12 | <div class="margin-top"> | 12 | <div class="margin-top"> |