Commit 0b8f34f9240c831bdeb99f2bf5053e44a0489424
1 parent
f6a81350
完成admin下的房屋详情页面,业主详情页面 车辆详情页面
Showing
34 changed files
with
2287 additions
and
109 deletions
src/api/aCommunity/aCarDetailApplySpaceApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function listAdminParkingSpaceApply(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/parkingSpaceApply.listAdminParkingSpaceApply', | |
| 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 parking space apply')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/aCommunity/aCarDetailCarInoutApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function getCarInoutDetail(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/iot.getAdminOpenApi', | |
| 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 | 21 | \ No newline at end of file | ... | ... |
src/api/aCommunity/aCarDetailFeeApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function listAdminFee(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/fee.listAdminFee', | |
| 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 | 17 | \ No newline at end of file | ... | ... |
src/api/aCommunity/aCarDetailHisApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function queryAdminHisOwnerCar(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/car.queryAdminHisOwnerCar', | |
| 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 car history')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/aCommunity/aCarDetailMemberApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function queryAdminOwnerCars(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/owner.queryAdminOwnerCars', | |
| 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 owner cars')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/aCommunity/aCarDetailOwnerApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function queryAdminOwners(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/owner.queryAdminOwners', | |
| 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 owners')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/aCommunity/aCarDetailTransactionCarApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function listAdminMachineTranslates(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/machineTranslate.listAdminMachineTranslates', | |
| 7 | + method: 'get', | |
| 8 | + params | |
| 9 | + }).then(response => { | |
| 10 | + const res = response.data | |
| 11 | + resolve(res) | |
| 12 | + | |
| 13 | + }).catch(error => { | |
| 14 | + reject(error) | |
| 15 | + }) | |
| 16 | + }) | |
| 17 | +} | |
| 0 | 18 | \ No newline at end of file | ... | ... |
src/api/aCommunity/adminCarDetailApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +// 获取车主车辆信息 | |
| 4 | +export function getOwnerCarInfo(params) { | |
| 5 | + return new Promise((resolve, reject) => { | |
| 6 | + request({ | |
| 7 | + url: '/owner.queryAdminOwnerCars', | |
| 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 || 'Failed to get owner car info')) | |
| 16 | + } | |
| 17 | + }).catch(error => { | |
| 18 | + reject(error) | |
| 19 | + }) | |
| 20 | + }) | |
| 21 | +} | |
| 22 | + | |
| 23 | +// 获取车辆费用列表 | |
| 24 | +export function getCarFeeList(params) { | |
| 25 | + return new Promise((resolve, reject) => { | |
| 26 | + request({ | |
| 27 | + url: '/carFee.listCarFee', | |
| 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 || 'Failed to get car fee list')) | |
| 36 | + } | |
| 37 | + }).catch(error => { | |
| 38 | + reject(error) | |
| 39 | + }) | |
| 40 | + }) | |
| 41 | +} | |
| 42 | + | |
| 43 | +// 获取车辆缴费记录 | |
| 44 | +export function getCarPaymentHistory(params) { | |
| 45 | + return new Promise((resolve, reject) => { | |
| 46 | + request({ | |
| 47 | + url: '/payment.listCarPayment', | |
| 48 | + method: 'get', | |
| 49 | + params | |
| 50 | + }).then(response => { | |
| 51 | + const res = response.data | |
| 52 | + if (res.code === 0) { | |
| 53 | + resolve(res) | |
| 54 | + } else { | |
| 55 | + reject(new Error(res.msg || 'Failed to get car payment history')) | |
| 56 | + } | |
| 57 | + }).catch(error => { | |
| 58 | + reject(error) | |
| 59 | + }) | |
| 60 | + }) | |
| 61 | +} | |
| 62 | + | |
| 63 | +// 获取车辆修改记录 | |
| 64 | +export function getCarModificationHistory(params) { | |
| 65 | + return new Promise((resolve, reject) => { | |
| 66 | + request({ | |
| 67 | + url: '/car.listCarModification', | |
| 68 | + method: 'get', | |
| 69 | + params | |
| 70 | + }).then(response => { | |
| 71 | + const res = response.data | |
| 72 | + if (res.code === 0) { | |
| 73 | + resolve(res) | |
| 74 | + } else { | |
| 75 | + reject(new Error(res.msg || 'Failed to get car modification history')) | |
| 76 | + } | |
| 77 | + }).catch(error => { | |
| 78 | + reject(error) | |
| 79 | + }) | |
| 80 | + }) | |
| 81 | +} | |
| 82 | + | |
| 83 | +// 同步车牌信息 | |
| 84 | +export function syncLicensePlate(data) { | |
| 85 | + return new Promise((resolve, reject) => { | |
| 86 | + request({ | |
| 87 | + url: '/car.syncLicensePlate', | |
| 88 | + method: 'post', | |
| 89 | + data | |
| 90 | + }).then(response => { | |
| 91 | + const res = response.data | |
| 92 | + if (res.code === 0) { | |
| 93 | + resolve(res) | |
| 94 | + } else { | |
| 95 | + reject(new Error(res.msg || 'Failed to sync license plate')) | |
| 96 | + } | |
| 97 | + }).catch(error => { | |
| 98 | + reject(error) | |
| 99 | + }) | |
| 100 | + }) | |
| 101 | +} | |
| 0 | 102 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailApplySpace.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="aCarDetailApplySpaceInfo.applys" style="width: 100%"> | |
| 9 | + <el-table-column prop="applyId" :label="$t('carDetailApply.applyId')" align="center"></el-table-column> | |
| 10 | + <el-table-column prop="carNum" :label="$t('carDetailApply.carNum')" align="center"></el-table-column> | |
| 11 | + <el-table-column :label="$t('carDetailApply.parkingSpace')" align="center"> | |
| 12 | + <template slot-scope="scope"> | |
| 13 | + <span v-if="scope.row.psId != null && scope.row.psId != ''"> | |
| 14 | + {{scope.row.areaNum}}{{$t('carDetailApply.parkingLot')}} - {{scope.row.num}}{{$t('carDetailApply.space')}} | |
| 15 | + </span> | |
| 16 | + <span v-else>{{$t('carDetailApply.none')}}</span> | |
| 17 | + </template> | |
| 18 | + </el-table-column> | |
| 19 | + <el-table-column prop="carBrand" :label="$t('carDetailApply.carBrand')" align="center"></el-table-column> | |
| 20 | + <el-table-column :label="$t('carDetailApply.carType')" align="center"> | |
| 21 | + <template slot-scope="scope"> | |
| 22 | + {{_getParkingSpaceApplyCatType(scope.row.carType)}} | |
| 23 | + </template> | |
| 24 | + </el-table-column> | |
| 25 | + <el-table-column prop="carColor" :label="$t('carDetailApply.color')" align="center"></el-table-column> | |
| 26 | + <el-table-column prop="startTime" :label="$t('carDetailApply.startTime')" align="center"></el-table-column> | |
| 27 | + <el-table-column prop="endTime" :label="$t('carDetailApply.endTime')" align="center"></el-table-column> | |
| 28 | + <el-table-column prop="applyPersonName" :label="$t('carDetailApply.applicant')" align="center"></el-table-column> | |
| 29 | + <el-table-column prop="applyPersonLink" :label="$t('carDetailApply.phone')" align="center"></el-table-column> | |
| 30 | + <el-table-column :label="$t('carDetailApply.result')" align="center"> | |
| 31 | + <template slot-scope="scope"> | |
| 32 | + <el-tag v-if="scope.row.state == '1001'" type="success"> | |
| 33 | + {{_getParkingSpaceApplyState(scope.row.state)}} | |
| 34 | + </el-tag> | |
| 35 | + <el-tag v-else-if="scope.row.state == '4004'" type="danger"> | |
| 36 | + {{_getParkingSpaceApplyState(scope.row.state)}} | |
| 37 | + </el-tag> | |
| 38 | + <el-tag v-else-if="scope.row.state == '2002'" type="info"> | |
| 39 | + {{_getParkingSpaceApplyState(scope.row.state)}} | |
| 40 | + </el-tag> | |
| 41 | + <el-tag v-else type="info"> | |
| 42 | + {{_getParkingSpaceApplyState(scope.row.state)}} | |
| 43 | + </el-tag> | |
| 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" class="text-right"> | |
| 51 | + <el-pagination | |
| 52 | + @current-change="handlePageChange" | |
| 53 | + :current-page="currentPage" | |
| 54 | + :page-size="pageSize" | |
| 55 | + layout="total, prev, pager, next" | |
| 56 | + :total="total"> | |
| 57 | + </el-pagination> | |
| 58 | + </el-col> | |
| 59 | + </el-row> | |
| 60 | + </div> | |
| 61 | + </div> | |
| 62 | +</template> | |
| 63 | + | |
| 64 | +<script> | |
| 65 | +import { listAdminParkingSpaceApply } from '@/api/aCommunity/aCarDetailApplySpaceApi' | |
| 66 | + | |
| 67 | +export default { | |
| 68 | + name: 'ACarDetailApplySpace', | |
| 69 | + data() { | |
| 70 | + return { | |
| 71 | + aCarDetailApplySpaceInfo: { | |
| 72 | + applys: [], | |
| 73 | + carId: '', | |
| 74 | + carNum: '', | |
| 75 | + memberId: '' | |
| 76 | + }, | |
| 77 | + currentPage: 1, | |
| 78 | + pageSize: 10, | |
| 79 | + total: 0 | |
| 80 | + } | |
| 81 | + }, | |
| 82 | + methods: { | |
| 83 | + open(data) { | |
| 84 | + this.handleSwitch(data) | |
| 85 | + }, | |
| 86 | + handleSwitch(data) { | |
| 87 | + this.aCarDetailApplySpaceInfo.carId = data.carId | |
| 88 | + this.aCarDetailApplySpaceInfo.carNum = data.carNum | |
| 89 | + this.aCarDetailApplySpaceInfo.memberId = data.memberId | |
| 90 | + this._loadACarDetailApplySpaceData(1, this.pageSize) | |
| 91 | + }, | |
| 92 | + handlePageChange(page) { | |
| 93 | + this.currentPage = page | |
| 94 | + this._loadACarDetailApplySpaceData(page, this.pageSize) | |
| 95 | + }, | |
| 96 | + async _loadACarDetailApplySpaceData(page, row) { | |
| 97 | + try { | |
| 98 | + const param = { | |
| 99 | + carNum: this.aCarDetailApplySpaceInfo.carNum, | |
| 100 | + page, | |
| 101 | + row | |
| 102 | + } | |
| 103 | + const response = await listAdminParkingSpaceApply(param) | |
| 104 | + this.aCarDetailApplySpaceInfo.applys = response.data | |
| 105 | + this.total = response.records | |
| 106 | + } catch (error) { | |
| 107 | + console.error('Failed to load apply space data:', error) | |
| 108 | + } | |
| 109 | + }, | |
| 110 | + _getParkingSpaceApplyState(state) { | |
| 111 | + if (state == '1001') { | |
| 112 | + return this.$t('carDetailApply.pendingReview') | |
| 113 | + } else if (state == '2002') { | |
| 114 | + return this.$t('carDetailApply.pendingPayment') | |
| 115 | + } else if (state == '3003') { | |
| 116 | + return this.$t('carDetailApply.completed') | |
| 117 | + } else if (state == '4004') { | |
| 118 | + return this.$t('carDetailApply.reviewFailed') | |
| 119 | + } | |
| 120 | + return this.$t('carDetailApply.abnormalStatus') | |
| 121 | + }, | |
| 122 | + _getParkingSpaceApplyCatType(type) { | |
| 123 | + if (type == '9901') { | |
| 124 | + return this.$t('carDetailApply.familyCar') | |
| 125 | + } else if (type == '9902') { | |
| 126 | + return this.$t('carDetailApply.bus') | |
| 127 | + } else if (type == '9903') { | |
| 128 | + return this.$t('carDetailApply.truck') | |
| 129 | + } | |
| 130 | + return this.$t('carDetailApply.abnormalCar') | |
| 131 | + } | |
| 132 | + } | |
| 133 | +} | |
| 134 | +</script> | |
| 135 | + | |
| 136 | +<style scoped> | |
| 137 | +.margin-top { | |
| 138 | + margin-top: 20px; | |
| 139 | +} | |
| 140 | +.text-right { | |
| 141 | + text-align: right; | |
| 142 | +} | |
| 143 | +</style> | |
| 0 | 144 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailApplySpaceDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <a-car-detail-apply-space ref="carDetailApply" /> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import ACarDetailApplySpace from './aCarDetailApplySpace' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + ACarDetailApplySpace | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailApply.handleSwitch(data) | |
| 15 | + } | |
| 16 | + } | |
| 17 | +} | |
| 18 | +</script> | |
| 0 | 19 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailCarInout.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="car-inout-container"> | |
| 3 | + <el-row> | |
| 4 | + <el-col :span="24" class="text-right"> | |
| 5 | + <!-- 可以在这里添加操作按钮 --> | |
| 6 | + </el-col> | |
| 7 | + </el-row> | |
| 8 | + | |
| 9 | + <div class="margin-top"> | |
| 10 | + <el-table | |
| 11 | + :data="aCarDetailCarInoutInfo.carIns" | |
| 12 | + border | |
| 13 | + style="width: 100%" | |
| 14 | + class="footable" | |
| 15 | + > | |
| 16 | + <el-table-column prop="photoJpg" :label="$t('aCarDetailCarInout.entryImage')" align="center"> | |
| 17 | + <template slot-scope="scope"> | |
| 18 | + <img | |
| 19 | + style="width: 60px; height: 60px;" | |
| 20 | + class="border-radius" | |
| 21 | + :src="scope.row.photoJpg || '/img/noPhoto.jpg'" | |
| 22 | + @click="_carInoutOpenFile(scope.row.photoJpg)" | |
| 23 | + /> | |
| 24 | + </template> | |
| 25 | + </el-table-column> | |
| 26 | + <el-table-column prop="inoutId" :label="$t('aCarDetailCarInout.inoutNumber')" align="center" /> | |
| 27 | + <el-table-column :label="$t('aCarDetailCarInout.vehicleStatus')" align="center"> | |
| 28 | + <template slot-scope="scope"> | |
| 29 | + {{ scope.row.carInout == '3306' ? $t('aCarDetailCarInout.entry') : $t('aCarDetailCarInout.exit') }}({{ scope.row.stateName }}) | |
| 30 | + </template> | |
| 31 | + </el-table-column> | |
| 32 | + <el-table-column prop="carNum" :label="$t('aCarDetailCarInout.plateNumber')" align="center" /> | |
| 33 | + <el-table-column prop="paNum" :label="$t('aCarDetailCarInout.parkingLot')" align="center" /> | |
| 34 | + <el-table-column :label="$t('aCarDetailCarInout.billingRule')" align="center"> | |
| 35 | + <template slot-scope="scope"> | |
| 36 | + <span @click="_viewTempFeeConfigInOutCar(scope.row.configId)" style="cursor: pointer;"> | |
| 37 | + {{ scope.row.feeName }} | |
| 38 | + <i class="el-icon-info"></i> | |
| 39 | + </span> | |
| 40 | + </template> | |
| 41 | + </el-table-column> | |
| 42 | + <el-table-column prop="carTypeName" :label="$t('aCarDetailCarInout.plateType')" align="center" /> | |
| 43 | + <el-table-column prop="inTime" :label="$t('aCarDetailCarInout.entryTime')" align="center" /> | |
| 44 | + <el-table-column :label="$t('aCarDetailCarInout.exitTime')" align="center"> | |
| 45 | + <template slot-scope="scope"> | |
| 46 | + {{ scope.row.carInout != '3307' ? '-' : scope.row.outTime }} | |
| 47 | + </template> | |
| 48 | + </el-table-column> | |
| 49 | + <el-table-column :label="$t('aCarDetailCarInout.parkingTime')" align="center"> | |
| 50 | + <template slot-scope="scope"> | |
| 51 | + {{ scope.row.hours }}{{ $t('aCarDetailCarInout.hour') }}{{ scope.row.min }}{{ $t('aCarDetailCarInout.minute') }} | |
| 52 | + </template> | |
| 53 | + </el-table-column> | |
| 54 | + <el-table-column :label="$t('aCarDetailCarInout.chargeAmount')" align="center"> | |
| 55 | + <template slot-scope="scope"> | |
| 56 | + {{ scope.row.carType != 'T' ? '-' : scope.row.payCharge }} | |
| 57 | + </template> | |
| 58 | + </el-table-column> | |
| 59 | + <el-table-column prop="remark" :label="$t('aCarDetailCarInout.remark')" align="center" /> | |
| 60 | + </el-table> | |
| 61 | + | |
| 62 | + <el-row class="margin-top"> | |
| 63 | + <el-col :span="8" :offset="16"> | |
| 64 | + <el-pagination | |
| 65 | + @current-change="handleCurrentChange" | |
| 66 | + :current-page="currentPage" | |
| 67 | + :page-size="pageSize" | |
| 68 | + layout="total, prev, pager, next, jumper" | |
| 69 | + :total="total" | |
| 70 | + > | |
| 71 | + </el-pagination> | |
| 72 | + </el-col> | |
| 73 | + </el-row> | |
| 74 | + </div> | |
| 75 | + </div> | |
| 76 | +</template> | |
| 77 | + | |
| 78 | +<script> | |
| 79 | +import { getCarInoutDetail } from '@/api/aCommunity/aCarDetailCarInoutApi' | |
| 80 | + | |
| 81 | +export default { | |
| 82 | + name: 'ACarDetailCarInout', | |
| 83 | + data() { | |
| 84 | + return { | |
| 85 | + aCarDetailCarInoutInfo: { | |
| 86 | + carIns: [], | |
| 87 | + carId: '', | |
| 88 | + memberId: '', | |
| 89 | + carNum: '', | |
| 90 | + areaNum: '' | |
| 91 | + }, | |
| 92 | + currentPage: 1, | |
| 93 | + pageSize: 10, | |
| 94 | + total: 0 | |
| 95 | + } | |
| 96 | + }, | |
| 97 | + methods: { | |
| 98 | + open(data) { | |
| 99 | + this.handleSwitch(data) | |
| 100 | + }, | |
| 101 | + handleSwitch(data) { | |
| 102 | + this.aCarDetailCarInoutInfo.carId = data.carId | |
| 103 | + this.aCarDetailCarInoutInfo.carNum = data.carNum | |
| 104 | + this.aCarDetailCarInoutInfo.areaNum = data.areaNum | |
| 105 | + this.aCarDetailCarInoutInfo.memberId = data.memberId | |
| 106 | + this._loadACarDetailCarInoutData(this.currentPage, this.pageSize) | |
| 107 | + }, | |
| 108 | + handleNotify() { | |
| 109 | + this._loadACarDetailCarInoutData(this.currentPage, this.pageSize) | |
| 110 | + }, | |
| 111 | + handleCurrentChange(val) { | |
| 112 | + this.currentPage = val | |
| 113 | + this._loadACarDetailCarInoutData(val, this.pageSize) | |
| 114 | + }, | |
| 115 | + _loadACarDetailCarInoutData(page, row) { | |
| 116 | + const params = { | |
| 117 | + carNum: this.aCarDetailCarInoutInfo.carNum, | |
| 118 | + paNum: this.aCarDetailCarInoutInfo.areaNum, | |
| 119 | + iotApiCode: 'listCarInoutDetailBmoImpl', | |
| 120 | + page: page, | |
| 121 | + row: row | |
| 122 | + } | |
| 123 | + | |
| 124 | + getCarInoutDetail(params) | |
| 125 | + .then(response => { | |
| 126 | + const res = response.data | |
| 127 | + this.aCarDetailCarInoutInfo.carIns = res.data | |
| 128 | + this.total = res.records | |
| 129 | + }) | |
| 130 | + .catch(error => { | |
| 131 | + console.error('请求失败:', error) | |
| 132 | + }) | |
| 133 | + }, | |
| 134 | + _carInoutOpenFile(photoJpg) { | |
| 135 | + if (photoJpg) { | |
| 136 | + // 这里实现打开图片的逻辑 | |
| 137 | + console.log('打开图片:', photoJpg) | |
| 138 | + } | |
| 139 | + }, | |
| 140 | + _viewTempFeeConfigInOutCar(configId) { | |
| 141 | + // 这里实现查看计费规则的逻辑 | |
| 142 | + console.log('查看计费规则:', configId) | |
| 143 | + } | |
| 144 | + } | |
| 145 | +} | |
| 146 | +</script> | |
| 147 | + | |
| 148 | +<style scoped> | |
| 149 | +.car-inout-container { | |
| 150 | + padding: 20px; | |
| 151 | +} | |
| 152 | +.margin-top { | |
| 153 | + margin-top: 20px; | |
| 154 | +} | |
| 155 | +.border-radius { | |
| 156 | + border-radius: 4px; | |
| 157 | +} | |
| 158 | +.text-right { | |
| 159 | + text-align: right; | |
| 160 | +} | |
| 161 | +</style> | |
| 0 | 162 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailCarInoutDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <a-car-detail-car-inout ref="carDetailCarInout" /> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import ACarDetailCarInout from './aCarDetailCarInout' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + ACarDetailCarInout | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailCarInout.handleSwitch(data) | |
| 15 | + }, | |
| 16 | + refresh() { | |
| 17 | + this.$refs.carDetailCarInout.handleNotify() | |
| 18 | + } | |
| 19 | + } | |
| 20 | +} | |
| 21 | +</script> | |
| 0 | 22 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailFee.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="aCarDetailFeeInfo.fees" style="width: 100%"> | |
| 9 | + <el-table-column prop="feeName" :label="$t('carDetailFee.feeItem')" align="center"> | |
| 10 | + <template slot-scope="scope"> | |
| 11 | + <span class="hand" @click="_viewCarFeeConfig(scope.row)"> | |
| 12 | + {{ scope.row.feeName }} | |
| 13 | + <i class="el-icon-info"></i> | |
| 14 | + </span> | |
| 15 | + </template> | |
| 16 | + </el-table-column> | |
| 17 | + <el-table-column prop="feeFlagName" :label="$t('carDetailFee.feeFlag')" align="center"></el-table-column> | |
| 18 | + <el-table-column prop="feeTypeCdName" :label="$t('carDetailFee.feeType')" align="center"></el-table-column> | |
| 19 | + <el-table-column prop="amountOwed" :label="$t('carDetailFee.amountOwed')" align="center"></el-table-column> | |
| 20 | + <el-table-column prop="startTime" :label="$t('carDetailFee.createTime')" align="center"></el-table-column> | |
| 21 | + <el-table-column :label="$t('carDetailFee.duePeriod')" align="center"> | |
| 22 | + <template slot-scope="scope"> | |
| 23 | + {{ _getEndTime(scope.row) }}~<br />{{ _getDeadlineTime(scope.row) }} | |
| 24 | + </template> | |
| 25 | + </el-table-column> | |
| 26 | + <el-table-column :label="$t('carDetailFee.remark')" align="center"> | |
| 27 | + <template slot-scope="scope"> | |
| 28 | + <div v-if="scope.row.feeTypeCd == '888800010015' || scope.row.feeTypeCd == '888800010016'"> | |
| 29 | + <div>{{ $t('carDetailFee.preDegrees') }}:{{ scope.row.preDegrees }}</div> | |
| 30 | + <div>{{ $t('carDetailFee.curDegrees') }}:{{ scope.row.curDegrees }}</div> | |
| 31 | + <div>{{ $t('carDetailFee.unitPrice') }}:{{ scope.row.mwPrice ? scope.row.mwPrice : scope.row.squarePrice | |
| 32 | + }}</div> | |
| 33 | + <div>{{ $t('carDetailFee.additionalFee') }}:{{ scope.row.additionalAmount }}</div> | |
| 34 | + </div> | |
| 35 | + <div v-else> | |
| 36 | + <div>{{ $t('carDetailFee.unitPrice') }}:{{ scope.row.squarePrice }}</div> | |
| 37 | + <div>{{ $t('carDetailFee.fixedFee') }}:{{ scope.row.additionalAmount }}</div> | |
| 38 | + </div> | |
| 39 | + </template> | |
| 40 | + </el-table-column> | |
| 41 | + <el-table-column prop="stateName" :label="$t('carDetailFee.status')" align="center"></el-table-column> | |
| 42 | + <el-table-column :label="$t('carDetailFee.operation')" align="center"></el-table-column> | |
| 43 | + </el-table> | |
| 44 | + | |
| 45 | + <el-row class="margin-top"> | |
| 46 | + <el-col :span="12"> | |
| 47 | + <span>{{ $t('carDetailFee.paymentNotice') }}</span> | |
| 48 | + </el-col> | |
| 49 | + <el-col :span="12" class="text-right"> | |
| 50 | + <el-pagination @current-change="handlePageChange" :current-page="currentPage" :page-size="pageSize" | |
| 51 | + layout="total, prev, pager, next" :total="total"> | |
| 52 | + </el-pagination> | |
| 53 | + </el-col> | |
| 54 | + </el-row> | |
| 55 | + </div> | |
| 56 | + </div> | |
| 57 | +</template> | |
| 58 | + | |
| 59 | +<script> | |
| 60 | +import { listAdminFee } from '@/api/aCommunity/aCarDetailFeeApi' | |
| 61 | + | |
| 62 | +export default { | |
| 63 | + name: 'ACarDetailFee', | |
| 64 | + data() { | |
| 65 | + return { | |
| 66 | + aCarDetailFeeInfo: { | |
| 67 | + fees: [], | |
| 68 | + carId: '', | |
| 69 | + memberId: '', | |
| 70 | + carNum: '' | |
| 71 | + }, | |
| 72 | + currentPage: 1, | |
| 73 | + pageSize: 10, | |
| 74 | + total: 0 | |
| 75 | + } | |
| 76 | + }, | |
| 77 | + methods: { | |
| 78 | + open(data) { | |
| 79 | + this.aCarDetailFeeInfo.carId = data.carId | |
| 80 | + this.aCarDetailFeeInfo.carNum = data.carNum | |
| 81 | + this.aCarDetailFeeInfo.memberId = data.memberId | |
| 82 | + this._loadACarDetailFeeData(1, this.pageSize) | |
| 83 | + }, | |
| 84 | + handleNotify() { | |
| 85 | + this._loadACarDetailFeeData(this.currentPage, this.pageSize) | |
| 86 | + }, | |
| 87 | + handlePageChange(page) { | |
| 88 | + this.currentPage = page | |
| 89 | + this._loadACarDetailFeeData(page, this.pageSize) | |
| 90 | + }, | |
| 91 | + async _loadACarDetailFeeData(page, row) { | |
| 92 | + try { | |
| 93 | + const param = { | |
| 94 | + payerObjId: this.aCarDetailFeeInfo.memberId, | |
| 95 | + page, | |
| 96 | + row | |
| 97 | + } | |
| 98 | + const response = await listAdminFee(param) | |
| 99 | + this.aCarDetailFeeInfo.fees = response.fees | |
| 100 | + this.total = response.records | |
| 101 | + } catch (error) { | |
| 102 | + console.error('Failed to load fee data:', error) | |
| 103 | + } | |
| 104 | + }, | |
| 105 | + _getDeadlineTime(fee) { | |
| 106 | + if (fee.amountOwed == 0 && fee.endTime == fee.deadlineTime) { | |
| 107 | + return "-" | |
| 108 | + } | |
| 109 | + if (fee.state == '2009001') { | |
| 110 | + return "-" | |
| 111 | + } | |
| 112 | + return fee.deadlineTime | |
| 113 | + }, | |
| 114 | + _getEndTime(fee) { | |
| 115 | + if (fee.state == '2009001') { | |
| 116 | + return "-" | |
| 117 | + } | |
| 118 | + return fee.endTime | |
| 119 | + }, | |
| 120 | + _viewCarFeeConfig(fee) { | |
| 121 | + // Implement view fee config logic | |
| 122 | + console.log(fee) | |
| 123 | + } | |
| 124 | + } | |
| 125 | +} | |
| 126 | +</script> | |
| 127 | + | |
| 128 | +<style scoped> | |
| 129 | +.hand { | |
| 130 | + cursor: pointer; | |
| 131 | +} | |
| 132 | + | |
| 133 | +.margin-top { | |
| 134 | + margin-top: 20px; | |
| 135 | +} | |
| 136 | + | |
| 137 | +.text-right { | |
| 138 | + text-align: right; | |
| 139 | +} | |
| 140 | +</style> | |
| 0 | 141 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailFeeDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <a-car-detail-fee ref="carDetailFee" /> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import ACarDetailFee from './aCarDetailFee' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + ACarDetailFee | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailFee.handleSwitch(data) | |
| 15 | + }, | |
| 16 | + refresh() { | |
| 17 | + this.$refs.carDetailFee.handleNotify() | |
| 18 | + } | |
| 19 | + } | |
| 20 | +} | |
| 21 | +</script> | |
| 0 | 22 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailHis.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="aCarDetailHisInfo.cars" style="width: 100%"> | |
| 9 | + <el-table-column prop="carNum" :label="$t('carDetailHis.carNum')" align="center"></el-table-column> | |
| 10 | + <el-table-column :label="$t('carDetailHis.leaseType')" align="center"> | |
| 11 | + <template slot-scope="scope"> | |
| 12 | + <span v-if="scope.row.leaseType == 'T'">{{$t('carDetailHis.tempCar')}}</span> | |
| 13 | + <span v-else>{{scope.row.leaseTypeName}}</span> | |
| 14 | + </template> | |
| 15 | + </el-table-column> | |
| 16 | + <el-table-column prop="carTypeName" :label="$t('carDetailHis.carType')" align="center"></el-table-column> | |
| 17 | + <el-table-column prop="carColor" :label="$t('carDetailHis.color')" align="center"></el-table-column> | |
| 18 | + <el-table-column :label="$t('carDetailHis.owner')" align="center"> | |
| 19 | + <template slot-scope="scope"> | |
| 20 | + <div class="hand">{{scope.row.ownerName}}({{scope.row.link}})</div> | |
| 21 | + </template> | |
| 22 | + </el-table-column> | |
| 23 | + <el-table-column :label="$t('carDetailHis.parkingSpace')" align="center"> | |
| 24 | + <template slot-scope="scope"> | |
| 25 | + <span v-if="scope.row.areaNum && scope.row.state == '1001'"> | |
| 26 | + {{scope.row.areaNum}}-{{scope.row.num}} | |
| 27 | + </span> | |
| 28 | + <span v-else>{{$t('carDetailHis.spaceReleased')}}</span> | |
| 29 | + </template> | |
| 30 | + </el-table-column> | |
| 31 | + <el-table-column :label="$t('carDetailHis.validPeriod')" align="center"> | |
| 32 | + <template slot-scope="scope"> | |
| 33 | + <span v-if="scope.row.leaseType == 'H'"> | |
| 34 | + {{scope.row.startTime}}<br>~{{scope.row.endTime}} | |
| 35 | + </span> | |
| 36 | + <span v-else>--</span> | |
| 37 | + </template> | |
| 38 | + </el-table-column> | |
| 39 | + <el-table-column :label="$t('carDetailHis.action')" align="center"> | |
| 40 | + <template slot-scope="scope"> | |
| 41 | + {{_getHisOperate(scope.row)}} | |
| 42 | + </template> | |
| 43 | + </el-table-column> | |
| 44 | + <el-table-column prop="userName" :label="$t('carDetailHis.operator')" align="center"></el-table-column> | |
| 45 | + <el-table-column prop="createTime" :label="$t('carDetailHis.operateTime')" align="center"></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" class="text-right"> | |
| 51 | + <el-pagination | |
| 52 | + @current-change="handlePageChange" | |
| 53 | + :current-page="currentPage" | |
| 54 | + :page-size="pageSize" | |
| 55 | + layout="total, prev, pager, next" | |
| 56 | + :total="total"> | |
| 57 | + </el-pagination> | |
| 58 | + </el-col> | |
| 59 | + </el-row> | |
| 60 | + </div> | |
| 61 | + </div> | |
| 62 | +</template> | |
| 63 | + | |
| 64 | +<script> | |
| 65 | +import { queryAdminHisOwnerCar } from '@/api/aCommunity/aCarDetailHisApi' | |
| 66 | + | |
| 67 | +export default { | |
| 68 | + name: 'ACarDetailHis', | |
| 69 | + data() { | |
| 70 | + return { | |
| 71 | + aCarDetailHisInfo: { | |
| 72 | + cars: [], | |
| 73 | + carId: '', | |
| 74 | + memberId: '', | |
| 75 | + carNum: '', | |
| 76 | + carNumLike: '', | |
| 77 | + logStartTime: '', | |
| 78 | + logEndTime: '', | |
| 79 | + paId: '' | |
| 80 | + }, | |
| 81 | + currentPage: 1, | |
| 82 | + pageSize: 10, | |
| 83 | + total: 0 | |
| 84 | + } | |
| 85 | + }, | |
| 86 | + methods: { | |
| 87 | + open(data) { | |
| 88 | + this.handleSwitch(data) | |
| 89 | + }, | |
| 90 | + handleSwitch(data) { | |
| 91 | + this.aCarDetailHisInfo.carId = data.carId | |
| 92 | + this.aCarDetailHisInfo.carNum = data.carNum | |
| 93 | + this.aCarDetailHisInfo.paId = data.paId | |
| 94 | + this.aCarDetailHisInfo.memberId = data.memberId | |
| 95 | + this.aCarDetailHisInfo.carNumLike = data.carNumLike | |
| 96 | + this.aCarDetailHisInfo.logStartTime = data.logStartTime | |
| 97 | + this.aCarDetailHisInfo.logEndTime = data.logEndTime | |
| 98 | + this.aCarDetailHisInfo.staffNameLike = data.staffNameLike | |
| 99 | + this._loadACarDetailHisData(1, this.pageSize) | |
| 100 | + }, | |
| 101 | + handlePageChange(page) { | |
| 102 | + this.currentPage = page | |
| 103 | + this._loadACarDetailHisData(page, this.pageSize) | |
| 104 | + }, | |
| 105 | + async _loadACarDetailHisData(page, row) { | |
| 106 | + try { | |
| 107 | + const param = { | |
| 108 | + carNum: this.aCarDetailHisInfo.carNum, | |
| 109 | + carNumLike: this.aCarDetailHisInfo.carNumLike, | |
| 110 | + logStartTime: this.aCarDetailHisInfo.logStartTime, | |
| 111 | + logEndTime: this.aCarDetailHisInfo.logEndTime, | |
| 112 | + staffNameLike: this.aCarDetailHisInfo.staffNameLike, | |
| 113 | + page, | |
| 114 | + row | |
| 115 | + } | |
| 116 | + const response = await queryAdminHisOwnerCar(param) | |
| 117 | + this.aCarDetailHisInfo.cars = response.data | |
| 118 | + this.total = response.records | |
| 119 | + } catch (error) { | |
| 120 | + console.error('Failed to load history data:', error) | |
| 121 | + } | |
| 122 | + }, | |
| 123 | + _getHisOperate(car) { | |
| 124 | + let carCount = 0 | |
| 125 | + this.aCarDetailHisInfo.cars.forEach(item => { | |
| 126 | + if (car.bId == item.bId) { | |
| 127 | + carCount += 1 | |
| 128 | + } | |
| 129 | + }) | |
| 130 | + if (carCount <= 1) { | |
| 131 | + if (car.operate == 'ADD') { | |
| 132 | + return this.$t('carDetailHis.add') | |
| 133 | + } | |
| 134 | + if (car.operate == 'DEL') { | |
| 135 | + return this.$t('carDetailHis.delete') | |
| 136 | + } | |
| 137 | + return "-" | |
| 138 | + } | |
| 139 | + if (car.operate == 'ADD') { | |
| 140 | + return this.$t('carDetailHis.modifyNew') | |
| 141 | + } | |
| 142 | + if (car.operate == 'DEL') { | |
| 143 | + return this.$t('carDetailHis.modifyOld') | |
| 144 | + } | |
| 145 | + return "-" | |
| 146 | + } | |
| 147 | + } | |
| 148 | +} | |
| 149 | +</script> | |
| 150 | + | |
| 151 | +<style scoped> | |
| 152 | +.hand { | |
| 153 | + cursor: pointer; | |
| 154 | +} | |
| 155 | +.margin-top { | |
| 156 | + margin-top: 20px; | |
| 157 | +} | |
| 158 | +.text-right { | |
| 159 | + text-align: right; | |
| 160 | +} | |
| 161 | +</style> | |
| 0 | 162 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailHisDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <a-car-detail-his ref="carDetailHis" /> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import ACarDetailHis from './aCarDetailHis' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + ACarDetailHis | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailHis.handleSwitch(data) | |
| 15 | + } | |
| 16 | + } | |
| 17 | +} | |
| 18 | +</script> | |
| 0 | 19 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailMember.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="aCarDetailMemberInfo.ownerCars" style="width: 100%"> | |
| 9 | + <el-table-column prop="carNum" :label="$t('carDetailMember.carNum')" align="center"></el-table-column> | |
| 10 | + <el-table-column prop="roomName" :label="$t('carDetailMember.roomNum')" align="center"></el-table-column> | |
| 11 | + <el-table-column prop="carBrand" :label="$t('carDetailMember.carBrand')" align="center"></el-table-column> | |
| 12 | + <el-table-column prop="carTypeName" :label="$t('carDetailMember.carType')" align="center"></el-table-column> | |
| 13 | + <el-table-column prop="carColor" :label="$t('carDetailMember.color')" align="center"></el-table-column> | |
| 14 | + <el-table-column :label="$t('carDetailMember.owner')" align="center"> | |
| 15 | + <template slot-scope="scope"> | |
| 16 | + {{scope.row.ownerName}}({{scope.row.link}}) | |
| 17 | + </template> | |
| 18 | + </el-table-column> | |
| 19 | + <el-table-column :label="$t('carDetailMember.parkingSpace')" align="center"> | |
| 20 | + <template slot-scope="scope"> | |
| 21 | + <span v-if="scope.row.areaNum"> | |
| 22 | + {{scope.row.areaNum}}{{$t('carDetailMember.parkingLot')}}{{scope.row.num}}{{$t('carDetailMember.space')}} | |
| 23 | + </span> | |
| 24 | + <span v-else>{{$t('carDetailMember.none')}}</span> | |
| 25 | + </template> | |
| 26 | + </el-table-column> | |
| 27 | + <el-table-column prop="startTime" :label="$t('carDetailMember.startTime')" align="center"></el-table-column> | |
| 28 | + <el-table-column prop="endTime" :label="$t('carDetailMember.endTime')" align="center"></el-table-column> | |
| 29 | + <el-table-column :label="$t('carDetailMember.status')" align="center"> | |
| 30 | + <template slot-scope="scope"> | |
| 31 | + {{scope.row.stateName}} | |
| 32 | + <span v-if="scope.row.iotStateName"> | |
| 33 | + ({{scope.row.iotStateName}}) | |
| 34 | + </span> | |
| 35 | + </template> | |
| 36 | + </el-table-column> | |
| 37 | + </el-table> | |
| 38 | + | |
| 39 | + <el-row class="margin-top"> | |
| 40 | + <el-col :span="12"></el-col> | |
| 41 | + <el-col :span="12" class="text-right"> | |
| 42 | + <el-pagination | |
| 43 | + @current-change="handlePageChange" | |
| 44 | + :current-page="currentPage" | |
| 45 | + :page-size="pageSize" | |
| 46 | + layout="total, prev, pager, next" | |
| 47 | + :total="total"> | |
| 48 | + </el-pagination> | |
| 49 | + </el-col> | |
| 50 | + </el-row> | |
| 51 | + </div> | |
| 52 | + </div> | |
| 53 | +</template> | |
| 54 | + | |
| 55 | +<script> | |
| 56 | +import { queryAdminOwnerCars } from '@/api/aCommunity/aCarDetailMemberApi' | |
| 57 | + | |
| 58 | +export default { | |
| 59 | + name: 'ACarDetailMember', | |
| 60 | + data() { | |
| 61 | + return { | |
| 62 | + aCarDetailMemberInfo: { | |
| 63 | + ownerCars: [], | |
| 64 | + carId: '', | |
| 65 | + carNum: '', | |
| 66 | + memberId: '' | |
| 67 | + }, | |
| 68 | + currentPage: 1, | |
| 69 | + pageSize: 10, | |
| 70 | + total: 0 | |
| 71 | + } | |
| 72 | + }, | |
| 73 | + methods: { | |
| 74 | + open(data) { | |
| 75 | + this.aCarDetailMemberInfo.carId = data.carId | |
| 76 | + this.aCarDetailMemberInfo.carNum = data.carNum | |
| 77 | + this.aCarDetailMemberInfo.memberId = data.memberId | |
| 78 | + this._loadACarDetailMemberData(1, this.pageSize) | |
| 79 | + }, | |
| 80 | + handlePageChange(page) { | |
| 81 | + this.currentPage = page | |
| 82 | + this._loadACarDetailMemberData(page, this.pageSize) | |
| 83 | + }, | |
| 84 | + async _loadACarDetailMemberData(page, row) { | |
| 85 | + try { | |
| 86 | + const param = { | |
| 87 | + carId: this.aCarDetailMemberInfo.carId, | |
| 88 | + carTypeCd: '1002', | |
| 89 | + page, | |
| 90 | + row | |
| 91 | + } | |
| 92 | + const response = await queryAdminOwnerCars(param) | |
| 93 | + this.aCarDetailMemberInfo.ownerCars = response.data | |
| 94 | + this.total = response.records | |
| 95 | + } catch (error) { | |
| 96 | + console.error('Failed to load member data:', error) | |
| 97 | + } | |
| 98 | + }, | |
| 99 | + _viewIotStateRemark(car) { | |
| 100 | + // Implement view IoT remark logic | |
| 101 | + console.log(car) | |
| 102 | + } | |
| 103 | + } | |
| 104 | +} | |
| 105 | +</script> | |
| 106 | + | |
| 107 | +<style scoped> | |
| 108 | +.margin-top { | |
| 109 | + margin-top: 20px; | |
| 110 | +} | |
| 111 | +.text-right { | |
| 112 | + text-align: right; | |
| 113 | +} | |
| 114 | +</style> | |
| 0 | 115 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailMemberDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <a-car-detail-member ref="carDetailMember" /> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import ACarDetailMember from './aCarDetailMember' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + ACarDetailMember | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailMember.handleSwitch(data) | |
| 15 | + } | |
| 16 | + } | |
| 17 | +} | |
| 18 | +</script> | |
| 0 | 19 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailOwner.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="aCarDetailOwnerInfo.owners" style="width: 100%"> | |
| 9 | + <el-table-column :label="$t('carDetailOwner.ownerFace')" align="center" width="100"> | |
| 10 | + <template slot-scope="scope"> | |
| 11 | + <el-image style="width: 60px; height: 60px;" :src="scope.row.url || '/img/noPhoto.jpg'" fit="cover" | |
| 12 | + @click="_viewOwnerFace(scope.row.url)" class="border-radius"> | |
| 13 | + </el-image> | |
| 14 | + </template> | |
| 15 | + </el-table-column> | |
| 16 | + <el-table-column :label="$t('carDetailOwner.name')" align="center"> | |
| 17 | + <template slot-scope="scope"> | |
| 18 | + {{ scope.row.name }}({{ scope.row.link }}) | |
| 19 | + </template> | |
| 20 | + </el-table-column> | |
| 21 | + <el-table-column :label="$t('carDetailOwner.gender')" align="center"> | |
| 22 | + <template slot-scope="scope"> | |
| 23 | + {{ scope.row.sex == 0 ? $t('carDetailOwner.male') : $t('carDetailOwner.female') }} | |
| 24 | + </template> | |
| 25 | + </el-table-column> | |
| 26 | + <el-table-column prop="idCard" :label="$t('carDetailOwner.idCard')" align="center"></el-table-column> | |
| 27 | + <el-table-column prop="address" :label="$t('carDetailOwner.address')" align="center"></el-table-column> | |
| 28 | + <el-table-column prop="roomCount" :label="$t('carDetailOwner.roomCount')" align="center"></el-table-column> | |
| 29 | + <el-table-column prop="memberCount" :label="$t('carDetailOwner.memberCount')" align="center"></el-table-column> | |
| 30 | + <el-table-column prop="carCount" :label="$t('carDetailOwner.carCount')" align="center"></el-table-column> | |
| 31 | + <el-table-column prop="complaintCount" :label="$t('carDetailOwner.complaintCount')" | |
| 32 | + align="center"></el-table-column> | |
| 33 | + <el-table-column prop="repairCount" :label="$t('carDetailOwner.repairCount')" align="center"></el-table-column> | |
| 34 | + <el-table-column prop="oweFee" :label="$t('carDetailOwner.oweFee')" align="center"></el-table-column> | |
| 35 | + <el-table-column prop="contractCount" :label="$t('carDetailOwner.contractCount')" | |
| 36 | + align="center"></el-table-column> | |
| 37 | + <el-table-column :label="$t('common.operation')" align="center" width="120"> | |
| 38 | + <template slot-scope="scope"> | |
| 39 | + <el-button type="text" size="small" @click="_toACarDetailOwnerDetail(scope.row)"> | |
| 40 | + {{ $t('carDetailOwner.detail') }} | |
| 41 | + </el-button> | |
| 42 | + </template> | |
| 43 | + </el-table-column> | |
| 44 | + </el-table> | |
| 45 | + | |
| 46 | + <el-row class="margin-top"> | |
| 47 | + <el-col :span="12"></el-col> | |
| 48 | + <el-col :span="12" class="text-right"> | |
| 49 | + <el-pagination @current-change="handlePageChange" :current-page="currentPage" :page-size="pageSize" | |
| 50 | + layout="total, prev, pager, next" :total="total"> | |
| 51 | + </el-pagination> | |
| 52 | + </el-col> | |
| 53 | + </el-row> | |
| 54 | + </div> | |
| 55 | + | |
| 56 | + <view-image ref="viewImage"></view-image> | |
| 57 | + </div> | |
| 58 | +</template> | |
| 59 | + | |
| 60 | +<script> | |
| 61 | +import { queryAdminOwners } from '@/api/aCommunity/aCarDetailOwnerApi' | |
| 62 | +import ViewImage from '@/components/system/viewImage' | |
| 63 | + | |
| 64 | +export default { | |
| 65 | + name: 'ACarDetailOwner', | |
| 66 | + components: { | |
| 67 | + ViewImage | |
| 68 | + }, | |
| 69 | + data() { | |
| 70 | + return { | |
| 71 | + aCarDetailOwnerInfo: { | |
| 72 | + owners: [], | |
| 73 | + ownerId: '' | |
| 74 | + }, | |
| 75 | + currentPage: 1, | |
| 76 | + pageSize: 10, | |
| 77 | + total: 0 | |
| 78 | + } | |
| 79 | + }, | |
| 80 | + methods: { | |
| 81 | + open(data) { | |
| 82 | + this.handleSwitch(data) | |
| 83 | + }, | |
| 84 | + handleSwitch(data) { | |
| 85 | + this.aCarDetailOwnerInfo.ownerId = data.ownerId | |
| 86 | + this._loadACarDetailOwnerData(1, this.pageSize) | |
| 87 | + }, | |
| 88 | + handlePageChange(page) { | |
| 89 | + this.currentPage = page | |
| 90 | + this._loadACarDetailOwnerData(page, this.pageSize) | |
| 91 | + }, | |
| 92 | + async _loadACarDetailOwnerData(page, row) { | |
| 93 | + try { | |
| 94 | + const param = { | |
| 95 | + ownerId: this.aCarDetailOwnerInfo.ownerId, | |
| 96 | + ownerTypeCd: '1001', | |
| 97 | + page, | |
| 98 | + row | |
| 99 | + } | |
| 100 | + const response = await queryAdminOwners(param) | |
| 101 | + this.aCarDetailOwnerInfo.owners = response.data | |
| 102 | + this.total = response.records | |
| 103 | + } catch (error) { | |
| 104 | + console.error('Failed to load owner data:', error) | |
| 105 | + } | |
| 106 | + }, | |
| 107 | + _viewOwnerFace(url) { | |
| 108 | + if (url) { | |
| 109 | + this.$refs.viewImage.showImage({ url }) | |
| 110 | + } | |
| 111 | + }, | |
| 112 | + _toACarDetailOwnerDetail(owner) { | |
| 113 | + window.open('/#/views/aCommunity/adminOwnerDetail?ownerId=' + owner.ownerId) | |
| 114 | + } | |
| 115 | + } | |
| 116 | +} | |
| 117 | +</script> | |
| 118 | + | |
| 119 | +<style scoped> | |
| 120 | +.margin-top { | |
| 121 | + margin-top: 20px; | |
| 122 | +} | |
| 123 | + | |
| 124 | +.text-right { | |
| 125 | + text-align: right; | |
| 126 | +} | |
| 127 | + | |
| 128 | +.border-radius { | |
| 129 | + border-radius: 4px; | |
| 130 | +} | |
| 131 | +</style> | |
| 0 | 132 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailOwnerDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <a-car-detail-owner ref="carDetailOwner" /> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import ACarDetailOwner from './aCarDetailOwner' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + ACarDetailOwner | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailOwner.handleSwitch(data) | |
| 15 | + } | |
| 16 | + } | |
| 17 | +} | |
| 18 | +</script> | |
| 0 | 19 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailTransactionCar.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="margin-top"> | |
| 3 | + <el-row class="margin-top-lg"></el-row> | |
| 4 | + | |
| 5 | + <div class="margin-top"> | |
| 6 | + <el-table :data="aCarDetailTransactionCarInfo.translates" style="width: 100%"> | |
| 7 | + <el-table-column prop="machineTranslateId" :label="$t('carDetailTransaction.syncId')" align="center"></el-table-column> | |
| 8 | + <el-table-column prop="machineCode" :label="$t('carDetailTransaction.deviceCode')" align="center"></el-table-column> | |
| 9 | + <el-table-column prop="typeCdName" :label="$t('carDetailTransaction.objectType')" align="center"></el-table-column> | |
| 10 | + <el-table-column prop="objName" :label="$t('carDetailTransaction.objectName')" align="center"></el-table-column> | |
| 11 | + <el-table-column prop="machineCmdName" :label="$t('carDetailTransaction.command')" align="center"></el-table-column> | |
| 12 | + <el-table-column prop="stateName" :label="$t('carDetailTransaction.status')" align="center"></el-table-column> | |
| 13 | + <el-table-column prop="remark" :label="$t('carDetailTransaction.remark')" align="center" width="80"></el-table-column> | |
| 14 | + <el-table-column prop="updateTime" :label="$t('carDetailTransaction.syncTime')" align="center"></el-table-column> | |
| 15 | + </el-table> | |
| 16 | + | |
| 17 | + <el-row class="margin-top"> | |
| 18 | + <el-col :span="12"></el-col> | |
| 19 | + <el-col :span="12" class="text-right"> | |
| 20 | + <el-pagination | |
| 21 | + @current-change="handlePageChange" | |
| 22 | + :current-page="currentPage" | |
| 23 | + :page-size="pageSize" | |
| 24 | + layout="total, prev, pager, next" | |
| 25 | + :total="total"> | |
| 26 | + </el-pagination> | |
| 27 | + </el-col> | |
| 28 | + </el-row> | |
| 29 | + </div> | |
| 30 | + </div> | |
| 31 | +</template> | |
| 32 | + | |
| 33 | +<script> | |
| 34 | +import { listAdminMachineTranslates } from '@/api/aCommunity/aCarDetailTransactionCarApi' | |
| 35 | + | |
| 36 | +export default { | |
| 37 | + name: 'ACarDetailTransactionCar', | |
| 38 | + data() { | |
| 39 | + return { | |
| 40 | + aCarDetailTransactionCarInfo: { | |
| 41 | + translates: [], | |
| 42 | + ownerId: '', | |
| 43 | + carId: '', | |
| 44 | + memberId: '' | |
| 45 | + }, | |
| 46 | + currentPage: 1, | |
| 47 | + pageSize: 10, | |
| 48 | + total: 0 | |
| 49 | + } | |
| 50 | + }, | |
| 51 | + methods: { | |
| 52 | + open(data) { | |
| 53 | + this.handleSwitch(data) | |
| 54 | + }, | |
| 55 | + handleSwitch(data) { | |
| 56 | + this.aCarDetailTransactionCarInfo.carId = data.carId | |
| 57 | + this.aCarDetailTransactionCarInfo.memberId = data.memberId | |
| 58 | + this._loadACarDetailTransactionCarData(1, this.pageSize) | |
| 59 | + }, | |
| 60 | + handlePageChange(page) { | |
| 61 | + this.currentPage = page | |
| 62 | + this._loadACarDetailTransactionCarData(page, this.pageSize) | |
| 63 | + }, | |
| 64 | + async _loadACarDetailTransactionCarData(page, row) { | |
| 65 | + try { | |
| 66 | + const param = { | |
| 67 | + page, | |
| 68 | + row, | |
| 69 | + objId: this.aCarDetailTransactionCarInfo.memberId, | |
| 70 | + typeCd: '4455' | |
| 71 | + } | |
| 72 | + const response = await listAdminMachineTranslates(param) | |
| 73 | + this.aCarDetailTransactionCarInfo.translates = response.machineTranslates | |
| 74 | + this.total = response.records | |
| 75 | + } catch (error) { | |
| 76 | + console.error('Failed to load transaction data:', error) | |
| 77 | + } | |
| 78 | + } | |
| 79 | + } | |
| 80 | +} | |
| 81 | +</script> | |
| 82 | + | |
| 83 | +<style scoped> | |
| 84 | +.margin-top { | |
| 85 | + margin-top: 20px; | |
| 86 | +} | |
| 87 | +.margin-top-lg { | |
| 88 | + margin-top: 40px; | |
| 89 | +} | |
| 90 | +.text-right { | |
| 91 | + text-align: right; | |
| 92 | +} | |
| 93 | +</style> | |
| 0 | 94 | \ No newline at end of file | ... | ... |
src/components/aCommunity/aCarDetailTransactionCarDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <a-car-detail-transaction-car ref="carDetailTransaction" /> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import ACarDetailTransactionCar from './aCarDetailTransactionCar' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + ACarDetailTransactionCar | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailTransaction.handleSwitch(data) | |
| 15 | + } | |
| 16 | + } | |
| 17 | +} | |
| 18 | +</script> | |
| 0 | 19 | \ No newline at end of file | ... | ... |
src/i18n/communityI18n.js
| ... | ... | @@ -9,6 +9,7 @@ import { messages as handoverMessages } from '../views/room/handoverLang' |
| 9 | 9 | import { messages as ownerExitRoomMessages } from '../views/room/ownerExitRoomLang' |
| 10 | 10 | import { messages as adminRoomDetailMessages } from '../views/aCommunity/adminRoomDetailLang.js' |
| 11 | 11 | import { messages as adminOwnerDetailMessages } from '../views/aCommunity/adminOwnerDetailLang.js' |
| 12 | +import { messages as adminCarDetailMessages } from '../views/aCommunity/adminCarDetailLang.js' | |
| 12 | 13 | export const messages = { |
| 13 | 14 | en: { |
| 14 | 15 | ...roomStructureMessages.en, |
| ... | ... | @@ -22,6 +23,7 @@ export const messages = { |
| 22 | 23 | ...ownerExitRoomMessages.en, |
| 23 | 24 | ...adminRoomDetailMessages.en, |
| 24 | 25 | ...adminOwnerDetailMessages.en, |
| 26 | + ...adminCarDetailMessages.en, | |
| 25 | 27 | }, |
| 26 | 28 | zh: { |
| 27 | 29 | ...roomStructureMessages.zh, |
| ... | ... | @@ -35,5 +37,6 @@ export const messages = { |
| 35 | 37 | ...ownerExitRoomMessages.zh, |
| 36 | 38 | ...adminRoomDetailMessages.zh, |
| 37 | 39 | ...adminOwnerDetailMessages.zh, |
| 40 | + ...adminCarDetailMessages.zh, | |
| 38 | 41 | } |
| 39 | 42 | } |
| 40 | 43 | \ No newline at end of file | ... | ... |
src/router/communityRouter.js
| ... | ... | @@ -50,8 +50,13 @@ export default [ |
| 50 | 50 | component: () => import('@/views/aCommunity/adminRoomDetail.vue') |
| 51 | 51 | }, |
| 52 | 52 | { |
| 53 | - path:'/views/aCommunity/adminOwnerDetail', | |
| 54 | - name:'/views/aCommunity/adminOwnerDetail', | |
| 53 | + path: '/views/aCommunity/adminOwnerDetail', | |
| 54 | + name: '/views/aCommunity/adminOwnerDetail', | |
| 55 | 55 | component: () => import('@/views/aCommunity/adminOwnerDetail.vue') |
| 56 | - }, | |
| 56 | + }, | |
| 57 | + { | |
| 58 | + path: '/pages/car/adminCarDetail', | |
| 59 | + name: '/pages/car/adminCarDetail', | |
| 60 | + component: () => import('@/views/aCommunity/adminCarDetailList.vue') | |
| 61 | + }, | |
| 57 | 62 | ] |
| 58 | 63 | \ No newline at end of file | ... | ... |
src/views/aCommunity/aCarDetailApplySpaceLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + carDetailApply: { | |
| 4 | + applyId: 'Apply ID', | |
| 5 | + carNum: 'License Plate', | |
| 6 | + parkingSpace: 'Parking Space', | |
| 7 | + parkingLot: 'Parking Lot', | |
| 8 | + space: 'Space', | |
| 9 | + none: 'None', | |
| 10 | + carBrand: 'Car Brand', | |
| 11 | + carType: 'Car Type', | |
| 12 | + color: 'Color', | |
| 13 | + startTime: 'Start Time', | |
| 14 | + endTime: 'End Time', | |
| 15 | + applicant: 'Applicant', | |
| 16 | + phone: 'Phone', | |
| 17 | + result: 'Result', | |
| 18 | + pendingReview: 'Pending Review', | |
| 19 | + pendingPayment: 'Pending Payment', | |
| 20 | + completed: 'Completed', | |
| 21 | + reviewFailed: 'Review Failed', | |
| 22 | + abnormalStatus: 'Abnormal Status', | |
| 23 | + familyCar: 'Family Car', | |
| 24 | + bus: 'Bus', | |
| 25 | + truck: 'Truck', | |
| 26 | + abnormalCar: 'Abnormal Car' | |
| 27 | + } | |
| 28 | + }, | |
| 29 | + zh: { | |
| 30 | + carDetailApply: { | |
| 31 | + applyId: '申请ID', | |
| 32 | + carNum: '车牌号', | |
| 33 | + parkingSpace: '停车位', | |
| 34 | + parkingLot: '停车场', | |
| 35 | + space: '停车位', | |
| 36 | + none: '无', | |
| 37 | + carBrand: '汽车品牌', | |
| 38 | + carType: '车辆类型', | |
| 39 | + color: '颜色', | |
| 40 | + startTime: '起租时间', | |
| 41 | + endTime: '结租时间', | |
| 42 | + applicant: '申请人', | |
| 43 | + phone: '手机号', | |
| 44 | + result: '审核结果', | |
| 45 | + pendingReview: '待审核', | |
| 46 | + pendingPayment: '待缴费', | |
| 47 | + completed: '完成', | |
| 48 | + reviewFailed: '审核失败', | |
| 49 | + abnormalStatus: '状态异常', | |
| 50 | + familyCar: '家用小汽车', | |
| 51 | + bus: '客车', | |
| 52 | + truck: '货车', | |
| 53 | + abnormalCar: '异常车辆' | |
| 54 | + } | |
| 55 | + } | |
| 56 | +} | |
| 0 | 57 | \ No newline at end of file | ... | ... |
src/views/aCommunity/aCarDetailCarInoutLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + aCarDetailCarInout: { | |
| 4 | + entryImage: 'Entry Image', | |
| 5 | + inoutNumber: 'In/Out Number', | |
| 6 | + vehicleStatus: 'Vehicle Status', | |
| 7 | + plateNumber: 'Plate Number', | |
| 8 | + parkingLot: 'Parking Lot', | |
| 9 | + billingRule: 'Billing Rule', | |
| 10 | + plateType: 'Plate Type', | |
| 11 | + entryTime: 'Entry Time', | |
| 12 | + exitTime: 'Exit Time', | |
| 13 | + parkingTime: 'Parking Time', | |
| 14 | + chargeAmount: 'Charge Amount', | |
| 15 | + remark: 'Remark', | |
| 16 | + entry: 'Entry', | |
| 17 | + exit: 'Exit', | |
| 18 | + hour: 'hour', | |
| 19 | + minute: 'min' | |
| 20 | + } | |
| 21 | + }, | |
| 22 | + zh: { | |
| 23 | + aCarDetailCarInout: { | |
| 24 | + entryImage: '进场图', | |
| 25 | + inoutNumber: '进出场编号', | |
| 26 | + vehicleStatus: '车辆状态', | |
| 27 | + plateNumber: '车牌号', | |
| 28 | + parkingLot: '停车场', | |
| 29 | + billingRule: '计费规则', | |
| 30 | + plateType: '车牌类型', | |
| 31 | + entryTime: '进场时间', | |
| 32 | + exitTime: '出场时间', | |
| 33 | + parkingTime: '停车时间', | |
| 34 | + chargeAmount: '收费金额', | |
| 35 | + remark: '说明', | |
| 36 | + entry: '进场', | |
| 37 | + exit: '出场', | |
| 38 | + hour: '小时', | |
| 39 | + minute: '分' | |
| 40 | + } | |
| 41 | + } | |
| 42 | +} | |
| 0 | 43 | \ No newline at end of file | ... | ... |
src/views/aCommunity/aCarDetailFeeLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + carDetailFee: { | |
| 4 | + feeItem: 'Fee Item', | |
| 5 | + feeFlag: 'Fee Flag', | |
| 6 | + feeType: 'Fee Type', | |
| 7 | + amountOwed: 'Amount Owed', | |
| 8 | + createTime: 'Create Time', | |
| 9 | + duePeriod: 'Due Period', | |
| 10 | + remark: 'Remark', | |
| 11 | + preDegrees: 'Previous Degrees', | |
| 12 | + curDegrees: 'Current Degrees', | |
| 13 | + unitPrice: 'Unit Price', | |
| 14 | + additionalFee: 'Additional Fee', | |
| 15 | + fixedFee: 'Fixed Fee', | |
| 16 | + status: 'Status', | |
| 17 | + operation: 'Operation', | |
| 18 | + paymentNotice: 'Please go to the business acceptance page for payment' | |
| 19 | + } | |
| 20 | + }, | |
| 21 | + zh: { | |
| 22 | + carDetailFee: { | |
| 23 | + feeItem: '费用项目', | |
| 24 | + feeFlag: '费用标识', | |
| 25 | + feeType: '费用类型', | |
| 26 | + amountOwed: '应收金额', | |
| 27 | + createTime: '建账时间', | |
| 28 | + duePeriod: '应收时间段', | |
| 29 | + remark: '说明', | |
| 30 | + preDegrees: '上期度数', | |
| 31 | + curDegrees: '本期度数', | |
| 32 | + unitPrice: '单价', | |
| 33 | + additionalFee: '附加费', | |
| 34 | + fixedFee: '固定费', | |
| 35 | + status: '状态', | |
| 36 | + operation: '操作', | |
| 37 | + paymentNotice: '缴费请到业务受理页面缴费' | |
| 38 | + } | |
| 39 | + } | |
| 40 | +} | |
| 0 | 41 | \ No newline at end of file | ... | ... |
src/views/aCommunity/aCarDetailHisLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + carDetailHis: { | |
| 4 | + carNum: 'License Plate', | |
| 5 | + leaseType: 'Plate Type', | |
| 6 | + tempCar: 'Temporary Car', | |
| 7 | + carType: 'Car Type', | |
| 8 | + color: 'Color', | |
| 9 | + owner: 'Owner', | |
| 10 | + parkingSpace: 'Parking Space', | |
| 11 | + spaceReleased: 'Space Released', | |
| 12 | + validPeriod: 'Valid Period', | |
| 13 | + action: 'Action', | |
| 14 | + operator: 'Operator', | |
| 15 | + operateTime: 'Operate Time', | |
| 16 | + add: 'Add', | |
| 17 | + delete: 'Delete', | |
| 18 | + modifyNew: 'Modify(New)', | |
| 19 | + modifyOld: 'Modify(Old)' | |
| 20 | + } | |
| 21 | + }, | |
| 22 | + zh: { | |
| 23 | + carDetailHis: { | |
| 24 | + carNum: '车牌号', | |
| 25 | + leaseType: '车牌类型', | |
| 26 | + tempCar: '临时车', | |
| 27 | + carType: '车辆类型', | |
| 28 | + color: '颜色', | |
| 29 | + owner: '业主', | |
| 30 | + parkingSpace: '车位', | |
| 31 | + spaceReleased: '车位已释放', | |
| 32 | + validPeriod: '有效期', | |
| 33 | + action: '动作', | |
| 34 | + operator: '操作人', | |
| 35 | + operateTime: '操作时间', | |
| 36 | + add: '添加', | |
| 37 | + delete: '删除', | |
| 38 | + modifyNew: '修改(新)', | |
| 39 | + modifyOld: '修改(旧)' | |
| 40 | + } | |
| 41 | + } | |
| 42 | +} | |
| 0 | 43 | \ No newline at end of file | ... | ... |
src/views/aCommunity/aCarDetailMemberLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + carDetailMember: { | |
| 4 | + carNum: 'License Plate', | |
| 5 | + roomNum: 'Room Number', | |
| 6 | + carBrand: 'Car Brand', | |
| 7 | + carType: 'Car Type', | |
| 8 | + color: 'Color', | |
| 9 | + owner: 'Owner', | |
| 10 | + parkingSpace: 'Parking Space', | |
| 11 | + parkingLot: 'Parking Lot', | |
| 12 | + space: 'Space', | |
| 13 | + none: 'None', | |
| 14 | + startTime: 'Start Time', | |
| 15 | + endTime: 'End Time', | |
| 16 | + status: 'Status' | |
| 17 | + } | |
| 18 | + }, | |
| 19 | + zh: { | |
| 20 | + carDetailMember: { | |
| 21 | + carNum: '车牌号', | |
| 22 | + roomNum: '房屋号', | |
| 23 | + carBrand: '车辆品牌', | |
| 24 | + carType: '车辆类型', | |
| 25 | + color: '颜色', | |
| 26 | + owner: '业主', | |
| 27 | + parkingSpace: '车位', | |
| 28 | + parkingLot: '车场', | |
| 29 | + space: '车位', | |
| 30 | + none: '无', | |
| 31 | + startTime: '起租时间', | |
| 32 | + endTime: '截止时间', | |
| 33 | + status: '状态' | |
| 34 | + } | |
| 35 | + } | |
| 36 | +} | |
| 0 | 37 | \ No newline at end of file | ... | ... |
src/views/aCommunity/aCarDetailOwnerLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + carDetailOwner: { | |
| 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 | + operation: 'Operation', | |
| 19 | + detail: 'Detail' | |
| 20 | + } | |
| 21 | + }, | |
| 22 | + zh: { | |
| 23 | + carDetailOwner: { | |
| 24 | + ownerFace: '业主人脸', | |
| 25 | + name: '姓名', | |
| 26 | + gender: '性别', | |
| 27 | + male: '男', | |
| 28 | + female: '女', | |
| 29 | + idCard: '身份证', | |
| 30 | + address: '家庭住址', | |
| 31 | + roomCount: '房屋数', | |
| 32 | + memberCount: '业主成员', | |
| 33 | + carCount: '车辆数', | |
| 34 | + complaintCount: '投诉', | |
| 35 | + repairCount: '报修', | |
| 36 | + oweFee: '欠费', | |
| 37 | + contractCount: '业主合同', | |
| 38 | + operation: '操作', | |
| 39 | + detail: '详情' | |
| 40 | + } | |
| 41 | + } | |
| 42 | +} | |
| 0 | 43 | \ No newline at end of file | ... | ... |
src/views/aCommunity/aCarDetailTransactionCarLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + carDetailTransaction: { | |
| 4 | + syncId: 'Sync ID', | |
| 5 | + deviceCode: 'Device Code', | |
| 6 | + objectType: 'Object Type', | |
| 7 | + objectName: 'Object Name', | |
| 8 | + command: 'Command', | |
| 9 | + status: 'Status', | |
| 10 | + remark: 'Remark', | |
| 11 | + syncTime: 'Sync Time' | |
| 12 | + } | |
| 13 | + }, | |
| 14 | + zh: { | |
| 15 | + carDetailTransaction: { | |
| 16 | + syncId: '同步ID', | |
| 17 | + deviceCode: '设备编码', | |
| 18 | + objectType: '对象类型', | |
| 19 | + objectName: '对象名称', | |
| 20 | + command: '指令', | |
| 21 | + status: '状态', | |
| 22 | + remark: '说明', | |
| 23 | + syncTime: '同步时间' | |
| 24 | + } | |
| 25 | + } | |
| 26 | +} | |
| 0 | 27 | \ No newline at end of file | ... | ... |
src/views/aCommunity/adminCarDetailLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + adminCarDetail: { | |
| 4 | + vehicleInfo: 'Vehicle Information', | |
| 5 | + vehicleFee: 'Vehicle Fee', | |
| 6 | + paymentRecord: 'Payment Record', | |
| 7 | + modificationRecord: 'Modification Record', | |
| 8 | + memberVehicle: 'Member Vehicle', | |
| 9 | + ownerInfo: 'Owner Information', | |
| 10 | + ownerHouse: 'Owner House', | |
| 11 | + ownerVehicle: 'Owner Vehicle', | |
| 12 | + licensePlateSync: 'License Plate Sync', | |
| 13 | + parkingSpaceApplication: 'Parking Space Application', | |
| 14 | + accessRecord: 'Access Record' | |
| 15 | + }, | |
| 16 | + adminCarDetailInfo: { | |
| 17 | + licensePlate: 'License Plate:', | |
| 18 | + carBrand: 'Car Brand:', | |
| 19 | + carType: 'Car Type:', | |
| 20 | + color: 'Color:', | |
| 21 | + plateType: 'Plate Type:', | |
| 22 | + leaseStartTime: 'Lease Start Time:', | |
| 23 | + leaseEndTime: 'Lease End Time:', | |
| 24 | + remark: 'Remark:', | |
| 25 | + parkingLot: 'Parking Lot:', | |
| 26 | + parkingSpace: 'Parking Space:', | |
| 27 | + status: 'Status:', | |
| 28 | + relatedHouse: 'Related House:' | |
| 29 | + }, | |
| 30 | + carDetailFee: { | |
| 31 | + feeItem: 'Fee Item', | |
| 32 | + feeFlag: 'Fee Flag', | |
| 33 | + feeType: 'Fee Type', | |
| 34 | + amountOwed: 'Amount Owed', | |
| 35 | + createTime: 'Create Time', | |
| 36 | + duePeriod: 'Due Period', | |
| 37 | + remark: 'Remark', | |
| 38 | + preDegrees: 'Previous Degrees', | |
| 39 | + curDegrees: 'Current Degrees', | |
| 40 | + unitPrice: 'Unit Price', | |
| 41 | + additionalFee: 'Additional Fee', | |
| 42 | + fixedFee: 'Fixed Fee', | |
| 43 | + status: 'Status', | |
| 44 | + operation: 'Operation', | |
| 45 | + paymentNotice: 'Please go to the business acceptance page for payment' | |
| 46 | + }, | |
| 47 | + carDetailHis: { | |
| 48 | + carNum: 'License Plate', | |
| 49 | + leaseType: 'Plate Type', | |
| 50 | + tempCar: 'Temporary Car', | |
| 51 | + carType: 'Car Type', | |
| 52 | + color: 'Color', | |
| 53 | + owner: 'Owner', | |
| 54 | + parkingSpace: 'Parking Space', | |
| 55 | + spaceReleased: 'Space Released', | |
| 56 | + validPeriod: 'Valid Period', | |
| 57 | + action: 'Action', | |
| 58 | + operator: 'Operator', | |
| 59 | + operateTime: 'Operate Time', | |
| 60 | + add: 'Add', | |
| 61 | + delete: 'Delete', | |
| 62 | + modifyNew: 'Modify(New)', | |
| 63 | + modifyOld: 'Modify(Old)' | |
| 64 | + }, | |
| 65 | + carDetailMember: { | |
| 66 | + carNum: 'License Plate', | |
| 67 | + roomNum: 'Room Number', | |
| 68 | + carBrand: 'Car Brand', | |
| 69 | + carType: 'Car Type', | |
| 70 | + color: 'Color', | |
| 71 | + owner: 'Owner', | |
| 72 | + parkingSpace: 'Parking Space', | |
| 73 | + parkingLot: 'Parking Lot', | |
| 74 | + space: 'Space', | |
| 75 | + none: 'None', | |
| 76 | + startTime: 'Start Time', | |
| 77 | + endTime: 'End Time', | |
| 78 | + status: 'Status' | |
| 79 | + }, | |
| 80 | + carDetailOwner: { | |
| 81 | + ownerFace: 'Owner Face', | |
| 82 | + name: 'Name', | |
| 83 | + gender: 'Gender', | |
| 84 | + male: 'Male', | |
| 85 | + female: 'Female', | |
| 86 | + idCard: 'ID Card', | |
| 87 | + address: 'Address', | |
| 88 | + roomCount: 'Room Count', | |
| 89 | + memberCount: 'Member Count', | |
| 90 | + carCount: 'Car Count', | |
| 91 | + complaintCount: 'Complaint', | |
| 92 | + repairCount: 'Repair', | |
| 93 | + oweFee: 'Owe Fee', | |
| 94 | + contractCount: 'Contract', | |
| 95 | + operation: 'Operation', | |
| 96 | + detail: 'Detail' | |
| 97 | + }, | |
| 98 | + aRoomDetailCar: { | |
| 99 | + placeholderCarNum: 'Please enter license plate number', | |
| 100 | + carNum: 'License Plate', | |
| 101 | + leaseType: 'Plate Type', | |
| 102 | + tempCar: 'Temporary Car', | |
| 103 | + carType: 'Vehicle Type', | |
| 104 | + color: 'Color', | |
| 105 | + owner: 'Owner', | |
| 106 | + parkingSpace: 'Parking Space', | |
| 107 | + released: 'Released', | |
| 108 | + validity: 'Validity' | |
| 109 | + }, | |
| 110 | + carDetailTransaction: { | |
| 111 | + syncId: 'Sync ID', | |
| 112 | + deviceCode: 'Device Code', | |
| 113 | + objectType: 'Object Type', | |
| 114 | + objectName: 'Object Name', | |
| 115 | + command: 'Command', | |
| 116 | + status: 'Status', | |
| 117 | + remark: 'Remark', | |
| 118 | + syncTime: 'Sync Time' | |
| 119 | + }, | |
| 120 | + carDetailApply: { | |
| 121 | + applyId: 'Apply ID', | |
| 122 | + carNum: 'License Plate', | |
| 123 | + parkingSpace: 'Parking Space', | |
| 124 | + parkingLot: 'Parking Lot', | |
| 125 | + space: 'Space', | |
| 126 | + none: 'None', | |
| 127 | + carBrand: 'Car Brand', | |
| 128 | + carType: 'Car Type', | |
| 129 | + color: 'Color', | |
| 130 | + startTime: 'Start Time', | |
| 131 | + endTime: 'End Time', | |
| 132 | + applicant: 'Applicant', | |
| 133 | + phone: 'Phone', | |
| 134 | + result: 'Result', | |
| 135 | + pendingReview: 'Pending Review', | |
| 136 | + pendingPayment: 'Pending Payment', | |
| 137 | + completed: 'Completed', | |
| 138 | + reviewFailed: 'Review Failed', | |
| 139 | + abnormalStatus: 'Abnormal Status', | |
| 140 | + familyCar: 'Family Car', | |
| 141 | + bus: 'Bus', | |
| 142 | + truck: 'Truck', | |
| 143 | + abnormalCar: 'Abnormal Car' | |
| 144 | + }, | |
| 145 | + aCarDetailCarInout: { | |
| 146 | + entryImage: 'Entry Image', | |
| 147 | + inoutNumber: 'In/Out Number', | |
| 148 | + vehicleStatus: 'Vehicle Status', | |
| 149 | + plateNumber: 'Plate Number', | |
| 150 | + parkingLot: 'Parking Lot', | |
| 151 | + billingRule: 'Billing Rule', | |
| 152 | + plateType: 'Plate Type', | |
| 153 | + entryTime: 'Entry Time', | |
| 154 | + exitTime: 'Exit Time', | |
| 155 | + parkingTime: 'Parking Time', | |
| 156 | + chargeAmount: 'Charge Amount', | |
| 157 | + remark: 'Remark', | |
| 158 | + entry: 'Entry', | |
| 159 | + exit: 'Exit', | |
| 160 | + hour: 'hour', | |
| 161 | + minute: 'min' | |
| 162 | + } | |
| 163 | + }, | |
| 164 | + zh: { | |
| 165 | + adminCarDetail: { | |
| 166 | + vehicleInfo: '车辆信息', | |
| 167 | + vehicleFee: '车辆费用', | |
| 168 | + paymentRecord: '缴费记录', | |
| 169 | + modificationRecord: '修改记录', | |
| 170 | + memberVehicle: '成员车辆', | |
| 171 | + ownerInfo: '业主信息', | |
| 172 | + ownerHouse: '业主房屋', | |
| 173 | + ownerVehicle: '业主车辆', | |
| 174 | + licensePlateSync: '车牌同步', | |
| 175 | + parkingSpaceApplication: '车位申请', | |
| 176 | + accessRecord: '出入场记录' | |
| 177 | + }, | |
| 178 | + adminCarDetailInfo: { | |
| 179 | + licensePlate: '车牌号:', | |
| 180 | + carBrand: '车品牌:', | |
| 181 | + carType: '车类型:', | |
| 182 | + color: '颜色:', | |
| 183 | + plateType: '车牌类型:', | |
| 184 | + leaseStartTime: '起租时间:', | |
| 185 | + leaseEndTime: '结租时间:', | |
| 186 | + remark: '备注:', | |
| 187 | + parkingLot: '停车场:', | |
| 188 | + parkingSpace: '车位:', | |
| 189 | + status: '状态:', | |
| 190 | + relatedHouse: '关联房屋:' | |
| 191 | + }, | |
| 192 | + carDetailFee: { | |
| 193 | + feeItem: '费用项目', | |
| 194 | + feeFlag: '费用标识', | |
| 195 | + feeType: '费用类型', | |
| 196 | + amountOwed: '应收金额', | |
| 197 | + createTime: '建账时间', | |
| 198 | + duePeriod: '应收时间段', | |
| 199 | + remark: '说明', | |
| 200 | + preDegrees: '上期度数', | |
| 201 | + curDegrees: '本期度数', | |
| 202 | + unitPrice: '单价', | |
| 203 | + additionalFee: '附加费', | |
| 204 | + fixedFee: '固定费', | |
| 205 | + status: '状态', | |
| 206 | + operation: '操作', | |
| 207 | + paymentNotice: '缴费请到业务受理页面缴费' | |
| 208 | + }, | |
| 209 | + carDetailHis: { | |
| 210 | + carNum: '车牌号', | |
| 211 | + leaseType: '车牌类型', | |
| 212 | + tempCar: '临时车', | |
| 213 | + carType: '车辆类型', | |
| 214 | + color: '颜色', | |
| 215 | + owner: '业主', | |
| 216 | + parkingSpace: '车位', | |
| 217 | + spaceReleased: '车位已释放', | |
| 218 | + validPeriod: '有效期', | |
| 219 | + action: '动作', | |
| 220 | + operator: '操作人', | |
| 221 | + operateTime: '操作时间', | |
| 222 | + add: '添加', | |
| 223 | + delete: '删除', | |
| 224 | + modifyNew: '修改(新)', | |
| 225 | + modifyOld: '修改(旧)' | |
| 226 | + }, | |
| 227 | + carDetailMember: { | |
| 228 | + carNum: '车牌号', | |
| 229 | + roomNum: '房屋号', | |
| 230 | + carBrand: '车辆品牌', | |
| 231 | + carType: '车辆类型', | |
| 232 | + color: '颜色', | |
| 233 | + owner: '业主', | |
| 234 | + parkingSpace: '车位', | |
| 235 | + parkingLot: '车场', | |
| 236 | + space: '车位', | |
| 237 | + none: '无', | |
| 238 | + startTime: '起租时间', | |
| 239 | + endTime: '截止时间', | |
| 240 | + status: '状态' | |
| 241 | + }, | |
| 242 | + carDetailOwner: { | |
| 243 | + ownerFace: '业主人脸', | |
| 244 | + name: '姓名', | |
| 245 | + gender: '性别', | |
| 246 | + male: '男', | |
| 247 | + female: '女', | |
| 248 | + idCard: '身份证', | |
| 249 | + address: '家庭住址', | |
| 250 | + roomCount: '房屋数', | |
| 251 | + memberCount: '业主成员', | |
| 252 | + carCount: '车辆数', | |
| 253 | + complaintCount: '投诉', | |
| 254 | + repairCount: '报修', | |
| 255 | + oweFee: '欠费', | |
| 256 | + contractCount: '业主合同', | |
| 257 | + operation: '操作', | |
| 258 | + detail: '详情' | |
| 259 | + }, | |
| 260 | + aRoomDetailCar: { | |
| 261 | + placeholderCarNum: '请填写车牌号', | |
| 262 | + carNum: '车牌号', | |
| 263 | + leaseType: '车牌类型', | |
| 264 | + tempCar: '临时车', | |
| 265 | + carType: '车辆类型', | |
| 266 | + color: '颜色', | |
| 267 | + owner: '业主', | |
| 268 | + parkingSpace: '车位', | |
| 269 | + released: '车位已释放', | |
| 270 | + validity: '有效期' | |
| 271 | + }, | |
| 272 | + carDetailTransaction: { | |
| 273 | + syncId: '同步ID', | |
| 274 | + deviceCode: '设备编码', | |
| 275 | + objectType: '对象类型', | |
| 276 | + objectName: '对象名称', | |
| 277 | + command: '指令', | |
| 278 | + status: '状态', | |
| 279 | + remark: '说明', | |
| 280 | + syncTime: '同步时间' | |
| 281 | + }, | |
| 282 | + carDetailApply: { | |
| 283 | + applyId: '申请ID', | |
| 284 | + carNum: '车牌号', | |
| 285 | + parkingSpace: '停车位', | |
| 286 | + parkingLot: '停车场', | |
| 287 | + space: '停车位', | |
| 288 | + none: '无', | |
| 289 | + carBrand: '汽车品牌', | |
| 290 | + carType: '车辆类型', | |
| 291 | + color: '颜色', | |
| 292 | + startTime: '起租时间', | |
| 293 | + endTime: '结租时间', | |
| 294 | + applicant: '申请人', | |
| 295 | + phone: '手机号', | |
| 296 | + result: '审核结果', | |
| 297 | + pendingReview: '待审核', | |
| 298 | + pendingPayment: '待缴费', | |
| 299 | + completed: '完成', | |
| 300 | + reviewFailed: '审核失败', | |
| 301 | + abnormalStatus: '状态异常', | |
| 302 | + familyCar: '家用小汽车', | |
| 303 | + bus: '客车', | |
| 304 | + truck: '货车', | |
| 305 | + abnormalCar: '异常车辆' | |
| 306 | + }, | |
| 307 | + aCarDetailCarInout: { | |
| 308 | + entryImage: '进场图', | |
| 309 | + inoutNumber: '进出场编号', | |
| 310 | + vehicleStatus: '车辆状态', | |
| 311 | + plateNumber: '车牌号', | |
| 312 | + parkingLot: '停车场', | |
| 313 | + billingRule: '计费规则', | |
| 314 | + plateType: '车牌类型', | |
| 315 | + entryTime: '进场时间', | |
| 316 | + exitTime: '出场时间', | |
| 317 | + parkingTime: '停车时间', | |
| 318 | + chargeAmount: '收费金额', | |
| 319 | + remark: '说明', | |
| 320 | + entry: '进场', | |
| 321 | + exit: '出场', | |
| 322 | + hour: '小时', | |
| 323 | + minute: '分' | |
| 324 | + } | |
| 325 | + } | |
| 326 | +} | |
| 0 | 327 | \ No newline at end of file | ... | ... |
src/views/aCommunity/adminCarDetailList.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="admin-car-detail"> | |
| 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('adminCarDetail.vehicleInfo') }} | |
| 7 | + </div> | |
| 8 | + </div> | |
| 9 | + | |
| 10 | + <!-- 车辆信息 --> | |
| 11 | + <div class="margin-top text-left"> | |
| 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('adminCarDetailInfo.licensePlate') }} | |
| 19 | + </label> | |
| 20 | + <label>{{ adminCarDetailInfo.carNum }}</label> | |
| 21 | + </div> | |
| 22 | + </el-col> | |
| 23 | + <el-col :span="6"> | |
| 24 | + <div class="form-group"> | |
| 25 | + <label class="col-form-label"> | |
| 26 | + {{ $t('adminCarDetailInfo.carBrand') }} | |
| 27 | + </label> | |
| 28 | + <label>{{ adminCarDetailInfo.carBrand || '-' }}</label> | |
| 29 | + </div> | |
| 30 | + </el-col> | |
| 31 | + <el-col :span="6"> | |
| 32 | + <div class="form-group"> | |
| 33 | + <label class="col-form-label"> | |
| 34 | + {{ $t('adminCarDetailInfo.carType') }} | |
| 35 | + </label> | |
| 36 | + <label>{{ adminCarDetailInfo.leaseTypeName }}</label> | |
| 37 | + </div> | |
| 38 | + </el-col> | |
| 39 | + <el-col :span="6"> | |
| 40 | + <div class="form-group"> | |
| 41 | + <label class="col-form-label"> | |
| 42 | + {{ $t('adminCarDetailInfo.color') }} | |
| 43 | + </label> | |
| 44 | + <label>{{ adminCarDetailInfo.carColor || '-' }}</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('adminCarDetailInfo.plateType') }} | |
| 54 | + </label> | |
| 55 | + <label>{{ adminCarDetailInfo.carTypeName }}</label> | |
| 56 | + </div> | |
| 57 | + </el-col> | |
| 58 | + <el-col :span="6"> | |
| 59 | + <div class="form-group"> | |
| 60 | + <label class="col-form-label"> | |
| 61 | + {{ $t('adminCarDetailInfo.leaseStartTime') }} | |
| 62 | + </label> | |
| 63 | + <label>{{ adminCarDetailInfo.startTime }}</label> | |
| 64 | + </div> | |
| 65 | + </el-col> | |
| 66 | + <el-col :span="6"> | |
| 67 | + <div class="form-group"> | |
| 68 | + <label class="col-form-label"> | |
| 69 | + {{ $t('adminCarDetailInfo.leaseEndTime') }} | |
| 70 | + </label> | |
| 71 | + <label>{{ adminCarDetailInfo.endTime }}</label> | |
| 72 | + </div> | |
| 73 | + </el-col> | |
| 74 | + <el-col :span="6"> | |
| 75 | + <div class="form-group"> | |
| 76 | + <label class="col-form-label"> | |
| 77 | + {{ $t('adminCarDetailInfo.remark') }} | |
| 78 | + </label> | |
| 79 | + <label>{{ adminCarDetailInfo.remark }}</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('adminCarDetailInfo.parkingLot') }} | |
| 89 | + </label> | |
| 90 | + <label>{{ adminCarDetailInfo.areaNum }}</label> | |
| 91 | + </div> | |
| 92 | + </el-col> | |
| 93 | + <el-col :span="6"> | |
| 94 | + <div class="form-group"> | |
| 95 | + <label class="col-form-label"> | |
| 96 | + {{ $t('adminCarDetailInfo.parkingSpace') }} | |
| 97 | + </label> | |
| 98 | + <label>{{ adminCarDetailInfo.num }}</label> | |
| 99 | + </div> | |
| 100 | + </el-col> | |
| 101 | + <el-col :span="6"> | |
| 102 | + <div class="form-group"> | |
| 103 | + <label class="col-form-label"> | |
| 104 | + {{ $t('adminCarDetailInfo.status') }} | |
| 105 | + </label> | |
| 106 | + <label>{{ adminCarDetailInfo.stateName }}</label> | |
| 107 | + </div> | |
| 108 | + </el-col> | |
| 109 | + <el-col :span="6"> | |
| 110 | + <div class="form-group"> | |
| 111 | + <label class="col-form-label"> | |
| 112 | + {{ $t('adminCarDetailInfo.relatedHouse') }} | |
| 113 | + </label> | |
| 114 | + <label>{{ adminCarDetailInfo.roomName }}</label> | |
| 115 | + </div> | |
| 116 | + </el-col> | |
| 117 | + </el-row> | |
| 118 | + </el-col> | |
| 119 | + </el-row> | |
| 120 | + </div> | |
| 121 | + | |
| 122 | + <divider></divider> | |
| 123 | + | |
| 124 | + | |
| 125 | + <div class="margin-top-sm"> | |
| 126 | + <el-tabs v-model="adminCarDetailInfo._currentTab" @tab-click="handleTabClick(adminCarDetailInfo._currentTab)"> | |
| 127 | + <el-tab-pane :label="$t('adminCarDetail.vehicleFee')" name="aCarDetailFee"></el-tab-pane> | |
| 128 | + <el-tab-pane :label="$t('adminCarDetail.paymentRecord')" name="aRoomDetailHisFee"></el-tab-pane> | |
| 129 | + <el-tab-pane :label="$t('adminCarDetail.modificationRecord')" name="aCarDetailHis"></el-tab-pane> | |
| 130 | + <el-tab-pane :label="$t('adminCarDetail.memberVehicle')" name="aCarDetailMember"></el-tab-pane> | |
| 131 | + <el-tab-pane :label="$t('adminCarDetail.ownerInfo')" name="aCarDetailOwner"></el-tab-pane> | |
| 132 | + <el-tab-pane :label="$t('adminCarDetail.ownerHouse')" name="aRoomDetailRoom"></el-tab-pane> | |
| 133 | + <el-tab-pane :label="$t('adminCarDetail.ownerVehicle')" name="aRoomDetailCar"></el-tab-pane> | |
| 134 | + <el-tab-pane :label="$t('adminCarDetail.licensePlateSync')" name="aCarDetailTransactionCar"></el-tab-pane> | |
| 135 | + <el-tab-pane :label="$t('adminCarDetail.parkingSpaceApplication')" name="aCarDetailApplySpace"></el-tab-pane> | |
| 136 | + <el-tab-pane :label="$t('adminCarDetail.accessRecord')" name="aCarDetailCarInout"></el-tab-pane> | |
| 137 | + </el-tabs> | |
| 138 | + </div> | |
| 139 | + </div> | |
| 140 | + | |
| 141 | + <div class="white-bg padding-left padding-right padding-top border-radius-bottom"> | |
| 142 | + <a-car-detail-fee v-if="adminCarDetailInfo._currentTab === 'aCarDetailFee'" ref="aCarDetailFee"></a-car-detail-fee> | |
| 143 | + <a-room-detail-his-fee v-if="adminCarDetailInfo._currentTab === 'aRoomDetailHisFee'" | |
| 144 | + ref="aRoomDetailHisFee"></a-room-detail-his-fee> | |
| 145 | + <a-car-detail-his v-if="adminCarDetailInfo._currentTab === 'aCarDetailHis'" ref="aCarDetailHis"></a-car-detail-his> | |
| 146 | + <a-car-detail-member v-if="adminCarDetailInfo._currentTab === 'aCarDetailMember'" | |
| 147 | + ref="aCarDetailMember"></a-car-detail-member> | |
| 148 | + <a-car-detail-owner v-if="adminCarDetailInfo._currentTab === 'aCarDetailOwner'" | |
| 149 | + ref="aCarDetailOwner"></a-car-detail-owner> | |
| 150 | + <a-room-detail-room v-if="adminCarDetailInfo._currentTab === 'aRoomDetailRoom'" | |
| 151 | + ref="aRoomDetailRoom"></a-room-detail-room> | |
| 152 | + <a-room-detail-car v-if="adminCarDetailInfo._currentTab === 'aRoomDetailCar'" | |
| 153 | + ref="aRoomDetailCar"></a-room-detail-car> | |
| 154 | + <a-car-detail-transaction-car v-if="adminCarDetailInfo._currentTab === 'aCarDetailTransactionCar'" | |
| 155 | + ref="aCarDetailTransactionCar"></a-car-detail-transaction-car> | |
| 156 | + <a-car-detail-car-inout v-if="adminCarDetailInfo._currentTab === 'aCarDetailCarInout'" | |
| 157 | + ref="aCarDetailCarInout"></a-car-detail-car-inout> | |
| 158 | + <a-car-detail-apply-space v-if="adminCarDetailInfo._currentTab === 'aCarDetailApplySpace'" | |
| 159 | + ref="aCarDetailApplySpace"></a-car-detail-apply-space> | |
| 160 | + </div> | |
| 161 | + </div> | |
| 162 | +</template> | |
| 163 | + | |
| 164 | +<script> | |
| 165 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 166 | +import { getOwnerCarInfo } from '@/api/aCommunity/adminCarDetailApi' | |
| 167 | +import ACarDetailFee from '@/components/aCommunity/aCarDetailFee' | |
| 168 | +import ARoomDetailHisFee from '@/components/fee/aRoomDetailHisFee' | |
| 169 | +import ACarDetailHis from '@/components/aCommunity/aCarDetailHis' | |
| 170 | +import ACarDetailMember from '@/components/aCommunity/aCarDetailMember' | |
| 171 | +import ACarDetailOwner from '@/components/aCommunity/aCarDetailOwner' | |
| 172 | +import ARoomDetailRoom from '@/components/fee/aRoomDetailRoom' | |
| 173 | +import ARoomDetailCar from '@/components/aCommunity/aRoomDetailCar' | |
| 174 | +import ACarDetailTransactionCar from '@/components/aCommunity/aCarDetailTransactionCar' | |
| 175 | +import ACarDetailApplySpace from '@/components/aCommunity/aCarDetailApplySpace' | |
| 176 | +import ACarDetailCarInout from '@/components/aCommunity/aCarDetailCarInout' | |
| 177 | +import divider from '@/components/system/divider' | |
| 178 | + | |
| 179 | +export default { | |
| 180 | + name: 'AdminCarDetailList', | |
| 181 | + components: { | |
| 182 | + ACarDetailFee, | |
| 183 | + ARoomDetailHisFee, | |
| 184 | + ACarDetailHis, | |
| 185 | + ACarDetailMember, | |
| 186 | + ACarDetailOwner, | |
| 187 | + ARoomDetailRoom, | |
| 188 | + ARoomDetailCar, | |
| 189 | + ACarDetailTransactionCar, | |
| 190 | + ACarDetailApplySpace, | |
| 191 | + ACarDetailCarInout, | |
| 192 | + divider | |
| 193 | + }, | |
| 194 | + data() { | |
| 195 | + return { | |
| 196 | + adminCarDetailInfo: { | |
| 197 | + memberId: '', | |
| 198 | + carId: '', | |
| 199 | + carNum: '', | |
| 200 | + carTypeCd: '', | |
| 201 | + carTypeCdName: '', | |
| 202 | + carType: '', | |
| 203 | + carTypeName: '', | |
| 204 | + startTime: '', | |
| 205 | + endTime: '', | |
| 206 | + leaseType: '', | |
| 207 | + leaseTypeName: '', | |
| 208 | + areaNum: '', | |
| 209 | + num: '', | |
| 210 | + remark: '', | |
| 211 | + stateName: '', | |
| 212 | + carColor: '', | |
| 213 | + carBrand: '', | |
| 214 | + ownerId: '', | |
| 215 | + roomName: '', | |
| 216 | + carNumType: '', | |
| 217 | + paId: '', | |
| 218 | + _currentTab: 'aCarDetailFee', | |
| 219 | + needBack: false | |
| 220 | + }, | |
| 221 | + communityId: '' | |
| 222 | + } | |
| 223 | + }, | |
| 224 | + created() { | |
| 225 | + this.communityId = getCommunityId() | |
| 226 | + this.adminCarDetailInfo.memberId = this.$route.query.memberId | |
| 227 | + if (this.adminCarDetailInfo.memberId) { | |
| 228 | + this.loadCarDetailInfo() | |
| 229 | + } | |
| 230 | + }, | |
| 231 | + methods: { | |
| 232 | + async loadCarDetailInfo() { | |
| 233 | + const params = { | |
| 234 | + page: 1, | |
| 235 | + row: 1, | |
| 236 | + memberId: this.adminCarDetailInfo.memberId | |
| 237 | + } | |
| 238 | + | |
| 239 | + const response = await getOwnerCarInfo(params) | |
| 240 | + const carInfo = response.data[0] | |
| 241 | + Object.assign(this.adminCarDetailInfo, carInfo) | |
| 242 | + this.handleTabClick(this.adminCarDetailInfo._currentTab) | |
| 243 | + }, | |
| 244 | + handleTabClick(tab) { | |
| 245 | + this.adminCarDetailInfo._currentTab = tab | |
| 246 | + const tabData = { | |
| 247 | + memberId: this.adminCarDetailInfo.memberId, | |
| 248 | + carId: this.adminCarDetailInfo.carId, | |
| 249 | + ownerId: this.adminCarDetailInfo.ownerId, | |
| 250 | + carNum: this.adminCarDetailInfo.carNum, | |
| 251 | + paId: this.adminCarDetailInfo.paId, | |
| 252 | + areaNum: this.adminCarDetailInfo.areaNum | |
| 253 | + } | |
| 254 | + | |
| 255 | + setTimeout(() => { | |
| 256 | + this.$refs[this.adminCarDetailInfo._currentTab].open(tabData) | |
| 257 | + }, 1000) | |
| 258 | + } | |
| 259 | + } | |
| 260 | +} | |
| 261 | +</script> | |
| 262 | + | |
| 263 | +<style scoped> | |
| 264 | +.white-bg { | |
| 265 | + background-color: #fff; | |
| 266 | +} | |
| 267 | + | |
| 268 | +.padding-left { | |
| 269 | + padding-left: 20px; | |
| 270 | +} | |
| 271 | + | |
| 272 | +.padding-right { | |
| 273 | + padding-right: 20px; | |
| 274 | +} | |
| 275 | + | |
| 276 | +.padding-top { | |
| 277 | + padding-top: 20px; | |
| 278 | +} | |
| 279 | + | |
| 280 | +.border-radius-top { | |
| 281 | + border-radius: 4px 4px 0 0; | |
| 282 | +} | |
| 283 | + | |
| 284 | +.border-radius-bottom { | |
| 285 | + border-radius: 0 0 4px 4px; | |
| 286 | +} | |
| 287 | + | |
| 288 | +.margin-top { | |
| 289 | + margin-top: 20px; | |
| 290 | +} | |
| 291 | + | |
| 292 | +.margin-top-sm { | |
| 293 | + margin-top: 10px; | |
| 294 | +} | |
| 295 | + | |
| 296 | +.text-title { | |
| 297 | + font-size: 18px; | |
| 298 | + font-weight: bold; | |
| 299 | +} | |
| 300 | + | |
| 301 | +.flex { | |
| 302 | + display: flex; | |
| 303 | +} | |
| 304 | + | |
| 305 | +.justify-between { | |
| 306 | + justify-content: space-between; | |
| 307 | +} | |
| 308 | + | |
| 309 | +.vc-line-primary { | |
| 310 | + height: 1px; | |
| 311 | + background-color: #ebeef5; | |
| 312 | +} | |
| 313 | + | |
| 314 | +.form-group { | |
| 315 | + margin-bottom: 15px; | |
| 316 | + | |
| 317 | +} | |
| 318 | + | |
| 319 | +.col-form-label { | |
| 320 | + margin-bottom: 5px; | |
| 321 | + color: #606266; | |
| 322 | +} | |
| 323 | +</style> | |
| 0 | 324 | \ No newline at end of file | ... | ... |
src/views/owner/adminAuthOwnerList.vue
| ... | ... | @@ -6,52 +6,31 @@ |
| 6 | 6 | </el-col> |
| 7 | 7 | <el-col :span="21"> |
| 8 | 8 | <el-card class="box-card"> |
| 9 | - <div slot="header" class="clearfix"> | |
| 9 | + <div slot="header" class="flex justify-between"> | |
| 10 | 10 | <span>{{ $t('adminAuthOwner.search.title') }}</span> |
| 11 | 11 | </div> |
| 12 | 12 | <el-row :gutter="20"> |
| 13 | - <el-col :span="6"> | |
| 14 | - <el-select | |
| 15 | - v-model="searchForm.state" | |
| 16 | - :placeholder="$t('adminAuthOwner.search.state')" | |
| 17 | - clearable | |
| 18 | - class="filter-item" | |
| 19 | - > | |
| 20 | - <el-option | |
| 21 | - v-for="item in statusOptions" | |
| 22 | - :key="item.statusCd" | |
| 23 | - :label="item.name" | |
| 24 | - :value="item.statusCd" | |
| 25 | - /> | |
| 13 | + <el-col :span="4"> | |
| 14 | + <el-select v-model="searchForm.state" :placeholder="$t('adminAuthOwner.search.state')" clearable | |
| 15 | + class="filter-item"> | |
| 16 | + <el-option v-for="item in statusOptions" :key="item.statusCd" :label="item.name" | |
| 17 | + :value="item.statusCd" /> | |
| 26 | 18 | </el-select> |
| 27 | 19 | </el-col> |
| 28 | - <el-col :span="6"> | |
| 29 | - <el-input | |
| 30 | - v-model="searchForm.appUserName" | |
| 31 | - :placeholder="$t('adminAuthOwner.search.appUserName')" | |
| 32 | - clearable | |
| 33 | - class="filter-item" | |
| 34 | - /> | |
| 20 | + <el-col :span="4"> | |
| 21 | + <el-input v-model="searchForm.appUserName" :placeholder="$t('adminAuthOwner.search.appUserName')" | |
| 22 | + clearable class="filter-item" /> | |
| 35 | 23 | </el-col> |
| 36 | - <el-col :span="6"> | |
| 37 | - <el-input | |
| 38 | - v-model="searchForm.idCard" | |
| 39 | - :placeholder="$t('adminAuthOwner.search.idCard')" | |
| 40 | - clearable | |
| 41 | - class="filter-item" | |
| 42 | - /> | |
| 24 | + <el-col :span="4"> | |
| 25 | + <el-input v-model="searchForm.idCard" :placeholder="$t('adminAuthOwner.search.idCard')" clearable | |
| 26 | + class="filter-item" /> | |
| 43 | 27 | </el-col> |
| 44 | - <el-col :span="6"> | |
| 45 | - <el-input | |
| 46 | - v-model="searchForm.link" | |
| 47 | - :placeholder="$t('adminAuthOwner.search.link')" | |
| 48 | - clearable | |
| 49 | - class="filter-item" | |
| 50 | - /> | |
| 28 | + <el-col :span="4"> | |
| 29 | + <el-input v-model="searchForm.link" :placeholder="$t('adminAuthOwner.search.link')" clearable | |
| 30 | + class="filter-item" /> | |
| 51 | 31 | </el-col> |
| 52 | - </el-row> | |
| 53 | - <el-row :gutter="20" style="margin-top: 15px;"> | |
| 54 | - <el-col :span="24" style="text-align: right;"> | |
| 32 | + | |
| 33 | + <el-col :span="4" > | |
| 55 | 34 | <el-button type="primary" @click="handleSearch"> |
| 56 | 35 | {{ $t('common.search') }} |
| 57 | 36 | </el-button> |
| ... | ... | @@ -63,96 +42,45 @@ |
| 63 | 42 | </el-card> |
| 64 | 43 | |
| 65 | 44 | <el-card class="box-card" style="margin-top: 20px;"> |
| 66 | - <div slot="header" class="clearfix"> | |
| 45 | + <div slot="header" class="flex justify-between"> | |
| 67 | 46 | <span>{{ $t('adminAuthOwner.list.title') }}</span> |
| 68 | 47 | </div> |
| 69 | - <el-table | |
| 70 | - v-loading="loading" | |
| 71 | - :data="tableData" | |
| 72 | - border | |
| 73 | - style="width: 100%" | |
| 74 | - > | |
| 75 | - <el-table-column | |
| 76 | - prop="communityName" | |
| 77 | - :label="$t('adminAuthOwner.table.communityName')" | |
| 78 | - align="center" | |
| 79 | - /> | |
| 80 | - <el-table-column | |
| 81 | - :label="$t('adminAuthOwner.table.appUserName')" | |
| 82 | - align="center" | |
| 83 | - > | |
| 48 | + <el-table v-loading="loading" :data="tableData" border style="width: 100%"> | |
| 49 | + <el-table-column prop="communityName" :label="$t('adminAuthOwner.table.communityName')" align="center" /> | |
| 50 | + <el-table-column :label="$t('adminAuthOwner.table.appUserName')" align="center"> | |
| 84 | 51 | <template slot-scope="scope"> |
| 85 | 52 | <div>{{ scope.row.appUserName }}</div> |
| 86 | 53 | <div v-if="scope.row.ownerId">({{ scope.row.ownerId }})</div> |
| 87 | 54 | </template> |
| 88 | 55 | </el-table-column> |
| 89 | - <el-table-column | |
| 90 | - prop="link" | |
| 91 | - :label="$t('adminAuthOwner.table.link')" | |
| 92 | - align="center" | |
| 93 | - /> | |
| 94 | - <el-table-column | |
| 95 | - prop="roomName" | |
| 96 | - :label="$t('adminAuthOwner.table.roomName')" | |
| 97 | - align="center" | |
| 98 | - > | |
| 56 | + <el-table-column prop="link" :label="$t('adminAuthOwner.table.link')" align="center" /> | |
| 57 | + <el-table-column prop="roomName" :label="$t('adminAuthOwner.table.roomName')" align="center"> | |
| 99 | 58 | <template slot-scope="scope"> |
| 100 | 59 | {{ scope.row.roomName || '-' }} |
| 101 | 60 | </template> |
| 102 | 61 | </el-table-column> |
| 103 | - <el-table-column | |
| 104 | - prop="ownerTypeCdName" | |
| 105 | - :label="$t('adminAuthOwner.table.ownerTypeCdName')" | |
| 106 | - align="center" | |
| 107 | - > | |
| 62 | + <el-table-column prop="ownerTypeCdName" :label="$t('adminAuthOwner.table.ownerTypeCdName')" align="center"> | |
| 108 | 63 | <template slot-scope="scope"> |
| 109 | 64 | {{ scope.row.ownerTypeCdName || '-' }} |
| 110 | 65 | </template> |
| 111 | 66 | </el-table-column> |
| 112 | - <el-table-column | |
| 113 | - prop="idCard" | |
| 114 | - :label="$t('adminAuthOwner.table.idCard')" | |
| 115 | - align="center" | |
| 116 | - > | |
| 67 | + <el-table-column prop="idCard" :label="$t('adminAuthOwner.table.idCard')" align="center"> | |
| 117 | 68 | <template slot-scope="scope"> |
| 118 | 69 | {{ scope.row.idCard || '-' }} |
| 119 | 70 | </template> |
| 120 | 71 | </el-table-column> |
| 121 | - <el-table-column | |
| 122 | - prop="stateName" | |
| 123 | - :label="$t('adminAuthOwner.table.stateName')" | |
| 124 | - align="center" | |
| 125 | - /> | |
| 126 | - <el-table-column | |
| 127 | - prop="remark" | |
| 128 | - :label="$t('adminAuthOwner.table.remark')" | |
| 129 | - align="center" | |
| 130 | - > | |
| 72 | + <el-table-column prop="stateName" :label="$t('adminAuthOwner.table.stateName')" align="center" /> | |
| 73 | + <el-table-column prop="remark" :label="$t('adminAuthOwner.table.remark')" align="center"> | |
| 131 | 74 | <template slot-scope="scope"> |
| 132 | 75 | {{ scope.row.remark || '-' }} |
| 133 | 76 | </template> |
| 134 | 77 | </el-table-column> |
| 135 | - <el-table-column | |
| 136 | - prop="createTime" | |
| 137 | - :label="$t('adminAuthOwner.table.createTime')" | |
| 138 | - align="center" | |
| 139 | - /> | |
| 140 | - <el-table-column | |
| 141 | - prop="appTypeName" | |
| 142 | - :label="$t('adminAuthOwner.table.appTypeName')" | |
| 143 | - align="center" | |
| 144 | - /> | |
| 78 | + <el-table-column prop="createTime" :label="$t('adminAuthOwner.table.createTime')" align="center" /> | |
| 79 | + <el-table-column prop="appTypeName" :label="$t('adminAuthOwner.table.appTypeName')" align="center" /> | |
| 145 | 80 | </el-table> |
| 146 | - <el-pagination | |
| 147 | - :current-page="pagination.current" | |
| 148 | - :page-sizes="[10, 20, 30, 50]" | |
| 149 | - :page-size="pagination.size" | |
| 150 | - :total="pagination.total" | |
| 151 | - layout="total, sizes, prev, pager, next, jumper" | |
| 152 | - style="margin-top: 15px;" | |
| 153 | - @size-change="handleSizeChange" | |
| 154 | - @current-change="handleCurrentChange" | |
| 155 | - /> | |
| 81 | + <el-pagination :current-page="pagination.current" :page-sizes="[10, 20, 30, 50]" :page-size="pagination.size" | |
| 82 | + :total="pagination.total" layout="total, sizes, prev, pager, next, jumper" style="margin-top: 15px;" | |
| 83 | + @size-change="handleSizeChange" @current-change="handleCurrentChange" /> | |
| 156 | 84 | </el-card> |
| 157 | 85 | </el-col> |
| 158 | 86 | </el-row> |
| ... | ... | @@ -246,11 +174,11 @@ export default { |
| 246 | 174 | <style lang="scss" scoped> |
| 247 | 175 | .admin-auth-owner-container { |
| 248 | 176 | padding: 20px; |
| 249 | - | |
| 177 | + | |
| 250 | 178 | .box-card { |
| 251 | 179 | margin-bottom: 20px; |
| 252 | 180 | } |
| 253 | - | |
| 181 | + | |
| 254 | 182 | .filter-item { |
| 255 | 183 | width: 100%; |
| 256 | 184 | } | ... | ... |