Commit 0b8f34f9240c831bdeb99f2bf5053e44a0489424

Authored by wuxw
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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 19 \ No newline at end of file
src/i18n/communityI18n.js
@@ -9,6 +9,7 @@ import { messages as handoverMessages } from &#39;../views/room/handoverLang&#39; @@ -9,6 +9,7 @@ import { messages as handoverMessages } from &#39;../views/room/handoverLang&#39;
9 import { messages as ownerExitRoomMessages } from '../views/room/ownerExitRoomLang' 9 import { messages as ownerExitRoomMessages } from '../views/room/ownerExitRoomLang'
10 import { messages as adminRoomDetailMessages } from '../views/aCommunity/adminRoomDetailLang.js' 10 import { messages as adminRoomDetailMessages } from '../views/aCommunity/adminRoomDetailLang.js'
11 import { messages as adminOwnerDetailMessages } from '../views/aCommunity/adminOwnerDetailLang.js' 11 import { messages as adminOwnerDetailMessages } from '../views/aCommunity/adminOwnerDetailLang.js'
  12 +import { messages as adminCarDetailMessages } from '../views/aCommunity/adminCarDetailLang.js'
12 export const messages = { 13 export const messages = {
13 en: { 14 en: {
14 ...roomStructureMessages.en, 15 ...roomStructureMessages.en,
@@ -22,6 +23,7 @@ export const messages = { @@ -22,6 +23,7 @@ export const messages = {
22 ...ownerExitRoomMessages.en, 23 ...ownerExitRoomMessages.en,
23 ...adminRoomDetailMessages.en, 24 ...adminRoomDetailMessages.en,
24 ...adminOwnerDetailMessages.en, 25 ...adminOwnerDetailMessages.en,
  26 + ...adminCarDetailMessages.en,
25 }, 27 },
26 zh: { 28 zh: {
27 ...roomStructureMessages.zh, 29 ...roomStructureMessages.zh,
@@ -35,5 +37,6 @@ export const messages = { @@ -35,5 +37,6 @@ export const messages = {
35 ...ownerExitRoomMessages.zh, 37 ...ownerExitRoomMessages.zh,
36 ...adminRoomDetailMessages.zh, 38 ...adminRoomDetailMessages.zh,
37 ...adminOwnerDetailMessages.zh, 39 ...adminOwnerDetailMessages.zh,
  40 + ...adminCarDetailMessages.zh,
38 } 41 }
39 } 42 }
40 \ No newline at end of file 43 \ No newline at end of file
src/router/communityRouter.js
@@ -50,8 +50,13 @@ export default [ @@ -50,8 +50,13 @@ export default [
50 component: () => import('@/views/aCommunity/adminRoomDetail.vue') 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 component: () => import('@/views/aCommunity/adminOwnerDetail.vue') 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 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 \ No newline at end of file 324 \ No newline at end of file
src/views/owner/adminAuthOwnerList.vue
@@ -6,52 +6,31 @@ @@ -6,52 +6,31 @@
6 </el-col> 6 </el-col>
7 <el-col :span="21"> 7 <el-col :span="21">
8 <el-card class="box-card"> 8 <el-card class="box-card">
9 - <div slot="header" class="clearfix"> 9 + <div slot="header" class="flex justify-between">
10 <span>{{ $t('adminAuthOwner.search.title') }}</span> 10 <span>{{ $t('adminAuthOwner.search.title') }}</span>
11 </div> 11 </div>
12 <el-row :gutter="20"> 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 </el-select> 18 </el-select>
27 </el-col> 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 </el-col> 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 </el-col> 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 </el-col> 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 <el-button type="primary" @click="handleSearch"> 34 <el-button type="primary" @click="handleSearch">
56 {{ $t('common.search') }} 35 {{ $t('common.search') }}
57 </el-button> 36 </el-button>
@@ -63,96 +42,45 @@ @@ -63,96 +42,45 @@
63 </el-card> 42 </el-card>
64 43
65 <el-card class="box-card" style="margin-top: 20px;"> 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 <span>{{ $t('adminAuthOwner.list.title') }}</span> 46 <span>{{ $t('adminAuthOwner.list.title') }}</span>
68 </div> 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 <template slot-scope="scope"> 51 <template slot-scope="scope">
85 <div>{{ scope.row.appUserName }}</div> 52 <div>{{ scope.row.appUserName }}</div>
86 <div v-if="scope.row.ownerId">({{ scope.row.ownerId }})</div> 53 <div v-if="scope.row.ownerId">({{ scope.row.ownerId }})</div>
87 </template> 54 </template>
88 </el-table-column> 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 <template slot-scope="scope"> 58 <template slot-scope="scope">
100 {{ scope.row.roomName || '-' }} 59 {{ scope.row.roomName || '-' }}
101 </template> 60 </template>
102 </el-table-column> 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 <template slot-scope="scope"> 63 <template slot-scope="scope">
109 {{ scope.row.ownerTypeCdName || '-' }} 64 {{ scope.row.ownerTypeCdName || '-' }}
110 </template> 65 </template>
111 </el-table-column> 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 <template slot-scope="scope"> 68 <template slot-scope="scope">
118 {{ scope.row.idCard || '-' }} 69 {{ scope.row.idCard || '-' }}
119 </template> 70 </template>
120 </el-table-column> 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 <template slot-scope="scope"> 74 <template slot-scope="scope">
132 {{ scope.row.remark || '-' }} 75 {{ scope.row.remark || '-' }}
133 </template> 76 </template>
134 </el-table-column> 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 </el-table> 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 </el-card> 84 </el-card>
157 </el-col> 85 </el-col>
158 </el-row> 86 </el-row>
@@ -246,11 +174,11 @@ export default { @@ -246,11 +174,11 @@ export default {
246 <style lang="scss" scoped> 174 <style lang="scss" scoped>
247 .admin-auth-owner-container { 175 .admin-auth-owner-container {
248 padding: 20px; 176 padding: 20px;
249 - 177 +
250 .box-card { 178 .box-card {
251 margin-bottom: 20px; 179 margin-bottom: 20px;
252 } 180 }
253 - 181 +
254 .filter-item { 182 .filter-item {
255 width: 100%; 183 width: 100%;
256 } 184 }