Commit 6d21390a0dec5a4f321adcbc66db2ff3495217a9
1 parent
5f798b88
开发车辆详情页面
Showing
58 changed files
with
2785 additions
and
21 deletions
src/api/car/addCarModalApi.js
0 → 100644
src/api/car/carDetailApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +// Get owner car detail | |
| 4 | +export function getOwnerCarDetail(params) { | |
| 5 | + return new Promise((resolve, reject) => { | |
| 6 | + request({ | |
| 7 | + url: '/owner.queryOwnerCars', | |
| 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 detail')) | |
| 16 | + } | |
| 17 | + }).catch(error => { | |
| 18 | + reject(error) | |
| 19 | + }) | |
| 20 | + }) | |
| 21 | +} | |
| 22 | + | |
| 23 | +// Update car information | |
| 24 | +export function updateCarInfo(data) { | |
| 25 | + return new Promise((resolve, reject) => { | |
| 26 | + request({ | |
| 27 | + url: '/car.updateCarInfo', | |
| 28 | + method: 'post', | |
| 29 | + data | |
| 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 update car information')) | |
| 36 | + } | |
| 37 | + }).catch(error => { | |
| 38 | + reject(error) | |
| 39 | + }) | |
| 40 | + }) | |
| 41 | +} | |
| 42 | + | |
| 43 | +// Get car fee list | |
| 44 | +export function getCarFeeList(params) { | |
| 45 | + return new Promise((resolve, reject) => { | |
| 46 | + request({ | |
| 47 | + url: '/fee.queryCarFee', | |
| 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 fee list')) | |
| 56 | + } | |
| 57 | + }).catch(error => { | |
| 58 | + reject(error) | |
| 59 | + }) | |
| 60 | + }) | |
| 61 | +} | |
| 62 | + | |
| 63 | +// Get car payment history | |
| 64 | +export function getCarPaymentHistory(params) { | |
| 65 | + return new Promise((resolve, reject) => { | |
| 66 | + request({ | |
| 67 | + url: '/fee.queryCarPaymentHistory', | |
| 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 payment history')) | |
| 76 | + } | |
| 77 | + }).catch(error => { | |
| 78 | + reject(error) | |
| 79 | + }) | |
| 80 | + }) | |
| 81 | +} | |
| 0 | 82 | \ No newline at end of file | ... | ... |
src/api/car/carDetailApplyParkingSpaceApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function listParkingSpaceApply(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/parkingSpaceApply.listParkingSpaceApply', | |
| 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/car/carDetailCarInoutApi.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.getOpenApi', | |
| 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/car/carDetailCouponApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function listParkingCouponCar(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/iot.getOpenApi', | |
| 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/car/carDetailCouponOrderApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function listParkingCouponCarOrder(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/iot.getOpenApi', | |
| 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/car/carDetailFeeApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function listFee(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/fee.listFee', | |
| 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/car/carDetailTransactionCarApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function getMachineTranslates(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/machineTranslate.listMachineTranslates', | |
| 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/property/deleteParkingSpaceApplyApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function deleteParkingSpaceApply(params) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/parkingSpaceApply.deleteParkingSpaceApply', | |
| 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/property/editMachineTranslateApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function resyncMachineTranslate(data) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/machineTranslate.resyncMachineTranslate', | |
| 7 | + method: 'post', | |
| 8 | + data | |
| 9 | + }).then(response => { | |
| 10 | + const res = response.data | |
| 11 | + if (res.code === 0) { | |
| 12 | + resolve(res) | |
| 13 | + } else { | |
| 14 | + reject(new Error(res.msg || '重新同步失败')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/api/property/editParkingSpaceApplyApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | + | |
| 3 | +export function updateParkingSpaceApply(data) { | |
| 4 | + return new Promise((resolve, reject) => { | |
| 5 | + request({ | |
| 6 | + url: '/parkingSpaceApply.updateParkingSpaceApply', | |
| 7 | + method: 'post', | |
| 8 | + data | |
| 9 | + }).then(response => { | |
| 10 | + const res = response.data | |
| 11 | + if (res.code === 0) { | |
| 12 | + resolve(res) | |
| 13 | + } else { | |
| 14 | + reject(new Error(res.msg || '更新车位申请失败')) | |
| 15 | + } | |
| 16 | + }).catch(error => { | |
| 17 | + reject(error) | |
| 18 | + }) | |
| 19 | + }) | |
| 20 | +} | |
| 0 | 21 | \ No newline at end of file | ... | ... |
src/components/car/addCarModal.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog :title="$t('addCarModal.addCar')" :visible.sync="visible" width="50%"> | |
| 3 | + <el-form :model="addCarModelInfo" :rules="rules" ref="addCarForm"> | |
| 4 | + <el-form-item :label="$t('addCarModal.licensePlate')" prop="carNum"> | |
| 5 | + <el-input v-model="addCarModelInfo.carNum" :placeholder="$t('addCarModal.licensePlateRequired')"></el-input> | |
| 6 | + </el-form-item> | |
| 7 | + <el-form-item :label="$t('addCarModal.carBrand')" prop="carBrand"> | |
| 8 | + <el-input v-model="addCarModelInfo.carBrand" :placeholder="$t('addCarModal.carBrandRequired')"></el-input> | |
| 9 | + </el-form-item> | |
| 10 | + <el-form-item :label="$t('addCarModal.carType')" prop="carType"> | |
| 11 | + <el-select v-model="addCarModelInfo.carType" :placeholder="$t('addCarModal.carTypeRequired')" | |
| 12 | + style="width:100%"> | |
| 13 | + <el-option v-for="carType in carTypes" :key="carType.statusCd" :label="carType.name" | |
| 14 | + :value="carType.statusCd"></el-option> | |
| 15 | + </el-select> | |
| 16 | + </el-form-item> | |
| 17 | + <el-form-item :label="$t('addCarModal.color')" prop="carColor"> | |
| 18 | + <el-input v-model="addCarModelInfo.carColor" :placeholder="$t('addCarModal.colorRequired')"></el-input> | |
| 19 | + </el-form-item> | |
| 20 | + <el-form-item :label="$t('addCarModal.remark')"> | |
| 21 | + <el-input type="textarea" v-model="addCarModelInfo.remark" :placeholder="$t('addCarModal.remarkPlaceholder')" | |
| 22 | + rows="3"></el-input> | |
| 23 | + </el-form-item> | |
| 24 | + </el-form> | |
| 25 | + <div slot="footer" class="dialog-footer"> | |
| 26 | + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button> | |
| 27 | + <el-button type="primary" @click="saveAddCarInfo">{{ $t('common.save') }}</el-button> | |
| 28 | + </div> | |
| 29 | + </el-dialog> | |
| 30 | +</template> | |
| 31 | + | |
| 32 | +<script> | |
| 33 | +import { saveOwnerCarMember } from '@/api/car/addCarModalApi' | |
| 34 | +import { getDict } from '@/api/community/communityApi' | |
| 35 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 36 | + | |
| 37 | +export default { | |
| 38 | + name: 'AddCarModal', | |
| 39 | + data() { | |
| 40 | + return { | |
| 41 | + visible: false, | |
| 42 | + addCarModelInfo: { | |
| 43 | + flowComponent: 'addCar', | |
| 44 | + carNum: '', | |
| 45 | + carBrand: '', | |
| 46 | + carType: '', | |
| 47 | + carColor: '', | |
| 48 | + remark: "", | |
| 49 | + carId: '' | |
| 50 | + }, | |
| 51 | + carTypes: [], | |
| 52 | + rules: { | |
| 53 | + carNum: [ | |
| 54 | + { required: true, message: this.$t('addCarModal.licensePlateRequired'), trigger: 'blur' }, | |
| 55 | + { min: 2, max: 12, message: this.$t('addCarModal.licensePlateInvalid'), trigger: 'blur' } | |
| 56 | + ], | |
| 57 | + carBrand: [ | |
| 58 | + { required: true, message: this.$t('addCarModal.carBrandRequired'), trigger: 'blur' }, | |
| 59 | + { max: 50, message: this.$t('addCarModal.carBrandTooLong'), trigger: 'blur' } | |
| 60 | + ], | |
| 61 | + carType: [ | |
| 62 | + { required: true, message: this.$t('addCarModal.carTypeRequired'), trigger: 'change' } | |
| 63 | + ], | |
| 64 | + carColor: [ | |
| 65 | + { required: true, message: this.$t('addCarModal.colorRequired'), trigger: 'blur' }, | |
| 66 | + { max: 12, message: this.$t('addCarModal.colorTooLong'), trigger: 'blur' } | |
| 67 | + ] | |
| 68 | + } | |
| 69 | + } | |
| 70 | + }, | |
| 71 | + created() { | |
| 72 | + this.communityId = getCommunityId() | |
| 73 | + this.loadCarTypes() | |
| 74 | + }, | |
| 75 | + methods: { | |
| 76 | + async loadCarTypes() { | |
| 77 | + try { | |
| 78 | + const data = await getDict('owner_car', 'car_type') | |
| 79 | + this.carTypes = data | |
| 80 | + } catch (error) { | |
| 81 | + console.error('获取字典数据失败:', error) | |
| 82 | + } | |
| 83 | + }, | |
| 84 | + open(data) { | |
| 85 | + this.addCarModelInfo.carId = data.carId | |
| 86 | + this.visible = true | |
| 87 | + this.$nextTick(() => { | |
| 88 | + this.$refs.addCarForm.resetFields() | |
| 89 | + }) | |
| 90 | + }, | |
| 91 | + saveAddCarInfo() { | |
| 92 | + this.$refs.addCarForm.validate(valid => { | |
| 93 | + if (valid) { | |
| 94 | + this.addCarModelInfo.communityId = this.communityId | |
| 95 | + saveOwnerCarMember(this.addCarModelInfo).then(response => { | |
| 96 | + if (response.code === 0) { | |
| 97 | + this.visible = false | |
| 98 | + this.clearAddCarModalInfo() | |
| 99 | + this.$emit('notify') | |
| 100 | + this.$message.success(this.$t('common.addSuccess')) | |
| 101 | + } else { | |
| 102 | + this.$message.error(response.msg) | |
| 103 | + } | |
| 104 | + }).catch(error => { | |
| 105 | + console.error('请求失败处理', error) | |
| 106 | + this.$message.error(error) | |
| 107 | + }) | |
| 108 | + } | |
| 109 | + }) | |
| 110 | + }, | |
| 111 | + clearAddCarModalInfo() { | |
| 112 | + this.addCarModelInfo = { | |
| 113 | + flowComponent: 'addCar', | |
| 114 | + carNum: '', | |
| 115 | + carBrand: '', | |
| 116 | + carType: '', | |
| 117 | + carColor: '', | |
| 118 | + remark: "", | |
| 119 | + carNumType: '', | |
| 120 | + carId: '' | |
| 121 | + } | |
| 122 | + } | |
| 123 | + } | |
| 124 | +} | |
| 125 | +</script> | |
| 0 | 126 | \ No newline at end of file | ... | ... |
src/components/car/carDetailApplyParkingSpace.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-row> | |
| 4 | + <el-col :span="24" class="text-right"> | |
| 5 | + <el-button type="primary" size="small" @click="_openAddParkingSpaceApplyModal"> | |
| 6 | + {{$t('carDetailApplyParkingSpace.applyParkingSpace')}} | |
| 7 | + </el-button> | |
| 8 | + </el-col> | |
| 9 | + </el-row> | |
| 10 | + | |
| 11 | + <div class="margin-top"> | |
| 12 | + <el-table :data="carDetailApplyParkingSpaceInfo.parkingSpaceApplys" border style="width: 100%"> | |
| 13 | + <el-table-column prop="applyId" :label="$t('carDetailApplyParkingSpace.applyId')" align="center"></el-table-column> | |
| 14 | + <el-table-column prop="carNum" :label="$t('carDetailApplyParkingSpace.carNum')" align="center"></el-table-column> | |
| 15 | + <el-table-column :label="$t('carDetailApplyParkingSpace.parkingSpace')" align="center"> | |
| 16 | + <template slot-scope="scope"> | |
| 17 | + {{scope.row.psId ? `${scope.row.areaNum}停车场 - ${scope.row.num}停车位` : $t('carDetailApplyParkingSpace.none')}} | |
| 18 | + </template> | |
| 19 | + </el-table-column> | |
| 20 | + <el-table-column prop="carBrand" :label="$t('carDetailApplyParkingSpace.carBrand')" align="center"></el-table-column> | |
| 21 | + <el-table-column :label="$t('carDetailApplyParkingSpace.carType')" align="center"> | |
| 22 | + <template slot-scope="scope"> | |
| 23 | + {{_getParkingSpaceApplyCatType(scope.row.carType)}} | |
| 24 | + </template> | |
| 25 | + </el-table-column> | |
| 26 | + <el-table-column prop="carColor" :label="$t('carDetailApplyParkingSpace.color')" align="center"></el-table-column> | |
| 27 | + <el-table-column prop="startTime" :label="$t('carDetailApplyParkingSpace.startTime')" align="center"></el-table-column> | |
| 28 | + <el-table-column prop="endTime" :label="$t('carDetailApplyParkingSpace.endTime')" align="center"></el-table-column> | |
| 29 | + <el-table-column prop="applyPersonName" :label="$t('carDetailApplyParkingSpace.applicant')" align="center"></el-table-column> | |
| 30 | + <el-table-column prop="applyPersonLink" :label="$t('carDetailApplyParkingSpace.phone')" align="center"></el-table-column> | |
| 31 | + <el-table-column :label="$t('carDetailApplyParkingSpace.auditResult')" align="center"> | |
| 32 | + <template slot-scope="scope"> | |
| 33 | + <el-tag :type="getStateTagType(scope.row.state)"> | |
| 34 | + {{_getParkingSpaceApplyState(scope.row.state)}} | |
| 35 | + </el-tag> | |
| 36 | + </template> | |
| 37 | + </el-table-column> | |
| 38 | + <el-table-column :label="$t('carDetailApplyParkingSpace.operation')" align="center"> | |
| 39 | + <template slot-scope="scope"> | |
| 40 | + <el-button-group> | |
| 41 | + <el-button v-if="scope.row.state == '1001'" size="mini" @click="_openAuditParkingSpaceApplyModal(scope.row)"> | |
| 42 | + {{$t('carDetailApplyParkingSpace.audit')}} | |
| 43 | + </el-button> | |
| 44 | + <el-button v-if="scope.row.state == '1001'" size="mini" @click="_openEditParkingSpaceApplyModel(scope.row)"> | |
| 45 | + {{$t('carDetailApplyParkingSpace.edit')}} | |
| 46 | + </el-button> | |
| 47 | + <el-button size="mini" @click="_openDeleteParkingSpaceApplyModel(scope.row)"> | |
| 48 | + {{$t('carDetailApplyParkingSpace.delete')}} | |
| 49 | + </el-button> | |
| 50 | + </el-button-group> | |
| 51 | + </template> | |
| 52 | + </el-table-column> | |
| 53 | + </el-table> | |
| 54 | + | |
| 55 | + <el-row> | |
| 56 | + <el-col :span="16" :offset="8"> | |
| 57 | + <el-pagination | |
| 58 | + @current-change="handleCurrentChange" | |
| 59 | + :current-page="currentPage" | |
| 60 | + :page-size="pageSize" | |
| 61 | + layout="total, prev, pager, next, jumper" | |
| 62 | + :total="total"> | |
| 63 | + </el-pagination> | |
| 64 | + </el-col> | |
| 65 | + </el-row> | |
| 66 | + </div> | |
| 67 | + | |
| 68 | + <edit-parking-space-apply ref="editParkingSpaceApply"></edit-parking-space-apply> | |
| 69 | + <delete-parking-space-apply ref="deleteParkingSpaceApply"></delete-parking-space-apply> | |
| 70 | + </div> | |
| 71 | +</template> | |
| 72 | + | |
| 73 | +<script> | |
| 74 | +import { listParkingSpaceApply } from '@/api/car/carDetailApplyParkingSpaceApi' | |
| 75 | +import EditParkingSpaceApply from '@/components/property/editParkingSpaceApply' | |
| 76 | +import DeleteParkingSpaceApply from '@/components/property/deleteParkingSpaceApply' | |
| 77 | + | |
| 78 | +export default { | |
| 79 | + name: 'CarDetailApplyParkingSpace', | |
| 80 | + components: { | |
| 81 | + EditParkingSpaceApply, | |
| 82 | + DeleteParkingSpaceApply | |
| 83 | + }, | |
| 84 | + data() { | |
| 85 | + return { | |
| 86 | + carDetailApplyParkingSpaceInfo: { | |
| 87 | + parkingSpaceApplys: [], | |
| 88 | + carId: '', | |
| 89 | + carNum: '', | |
| 90 | + memberId: '' | |
| 91 | + }, | |
| 92 | + currentPage: 1, | |
| 93 | + pageSize: 10, | |
| 94 | + total: 0 | |
| 95 | + } | |
| 96 | + }, | |
| 97 | + methods: { | |
| 98 | + switch(data) { | |
| 99 | + this.carDetailApplyParkingSpaceInfo.carId = data.carId | |
| 100 | + this.carDetailApplyParkingSpaceInfo.carNum = data.carNum | |
| 101 | + this.carDetailApplyParkingSpaceInfo.memberId = data.memberId | |
| 102 | + this._loadCarDetailApplyParkingSpaceData(this.currentPage, this.pageSize) | |
| 103 | + }, | |
| 104 | + _loadCarDetailApplyParkingSpaceData(page, row) { | |
| 105 | + const params = { | |
| 106 | + communityId: this.$store.state.community.communityId, | |
| 107 | + carNum: this.carDetailApplyParkingSpaceInfo.carNum, | |
| 108 | + page, | |
| 109 | + row | |
| 110 | + } | |
| 111 | + | |
| 112 | + listParkingSpaceApply(params).then(response => { | |
| 113 | + this.carDetailApplyParkingSpaceInfo.parkingSpaceApplys = response.data.data | |
| 114 | + this.total = response.data.total | |
| 115 | + }).catch(error => { | |
| 116 | + console.error('请求失败:', error) | |
| 117 | + }) | |
| 118 | + }, | |
| 119 | + handleCurrentChange(val) { | |
| 120 | + this.currentPage = val | |
| 121 | + this._loadCarDetailApplyParkingSpaceData(val, this.pageSize) | |
| 122 | + }, | |
| 123 | + _openAddParkingSpaceApplyModal() { | |
| 124 | + this.$router.push('/property/addParkingSpaceApply') | |
| 125 | + }, | |
| 126 | + _openAuditParkingSpaceApplyModal(apply) { | |
| 127 | + this.$router.push(`/property/auditParkingSpaceApply?applyId=${apply.applyId}`) | |
| 128 | + }, | |
| 129 | + _openEditParkingSpaceApplyModel(parkingSpaceApply) { | |
| 130 | + this.$refs.editParkingSpaceApply.open(parkingSpaceApply) | |
| 131 | + }, | |
| 132 | + _openDeleteParkingSpaceApplyModel(parkingSpaceApply) { | |
| 133 | + this.$refs.deleteParkingSpaceApply.open(parkingSpaceApply) | |
| 134 | + }, | |
| 135 | + _getParkingSpaceApplyState(state) { | |
| 136 | + const states = { | |
| 137 | + '1001': this.$t('carDetailApplyParkingSpace.pendingReview'), | |
| 138 | + '2002': this.$t('carDetailApplyParkingSpace.pendingPayment'), | |
| 139 | + '3003': this.$t('carDetailApplyParkingSpace.completed'), | |
| 140 | + '4004': this.$t('carDetailApplyParkingSpace.auditFailed') | |
| 141 | + } | |
| 142 | + return states[state] || this.$t('carDetailApplyParkingSpace.abnormalStatus') | |
| 143 | + }, | |
| 144 | + _getParkingSpaceApplyCatType(type) { | |
| 145 | + const types = { | |
| 146 | + '9901': this.$t('carDetailApplyParkingSpace.familyCar'), | |
| 147 | + '9902': this.$t('carDetailApplyParkingSpace.bus'), | |
| 148 | + '9903': this.$t('carDetailApplyParkingSpace.truck') | |
| 149 | + } | |
| 150 | + return types[type] || this.$t('carDetailApplyParkingSpace.abnormalVehicle') | |
| 151 | + }, | |
| 152 | + getStateTagType(state) { | |
| 153 | + const types = { | |
| 154 | + '1001': 'info', | |
| 155 | + '2002': 'warning', | |
| 156 | + '3003': 'success', | |
| 157 | + '4004': 'danger' | |
| 158 | + } | |
| 159 | + return types[state] || 'info' | |
| 160 | + } | |
| 161 | + } | |
| 162 | +} | |
| 163 | +</script> | |
| 0 | 164 | \ No newline at end of file | ... | ... |
src/components/car/carDetailApplyParkingSpaceDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <car-detail-apply-parking-space ref="carDetailApplyParkingSpace"></car-detail-apply-parking-space> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import CarDetailApplyParkingSpace from '@/components/car/carDetailApplyParkingSpace' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + CarDetailApplyParkingSpace | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailApplyParkingSpace.switch(data) | |
| 15 | + } | |
| 16 | + } | |
| 17 | +} | |
| 18 | +</script> | |
| 0 | 19 | \ No newline at end of file | ... | ... |
src/components/car/carDetailCarInout.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <div class="margin-top"> | |
| 4 | + <el-table :data="carDetailCarInoutInfo.carIns" border style="width: 100%"> | |
| 5 | + <el-table-column :label="$t('carDetailCarInout.entryImage')" align="center"> | |
| 6 | + <template slot-scope="scope"> | |
| 7 | + <el-image style="width: 60px; height: 60px;" :src="scope.row.photoJpg || '/img/noPhoto.jpg'" | |
| 8 | + :preview-src-list="[scope.row.photoJpg]" fit="cover" class="border-radius"> | |
| 9 | + </el-image> | |
| 10 | + </template> | |
| 11 | + </el-table-column> | |
| 12 | + <el-table-column prop="inoutId" :label="$t('carDetailCarInout.inoutId')" align="center"></el-table-column> | |
| 13 | + <el-table-column :label="$t('carDetailCarInout.carStatus')" align="center"> | |
| 14 | + <template slot-scope="scope"> | |
| 15 | + {{ scope.row.carInout === '3306' ? $t('carDetailCarInout.entry') : | |
| 16 | + $t('carDetailCarInout.exit')}}({{ scope.row.stateName }}) | |
| 17 | + </template> | |
| 18 | + </el-table-column> | |
| 19 | + <el-table-column prop="carNum" :label="$t('carDetailCarInout.carNum')" align="center"></el-table-column> | |
| 20 | + <el-table-column prop="paNum" :label="$t('carDetailCarInout.parkingLot')" align="center"></el-table-column> | |
| 21 | + <el-table-column :label="$t('carDetailCarInout.billingRule')" align="center"> | |
| 22 | + <template slot-scope="scope"> | |
| 23 | + <el-link type="primary" @click="_viewTempFeeConfigInOutCar(scope.row.configId)"> | |
| 24 | + {{ scope.row.feeName }} <i class="el-icon-info"></i> | |
| 25 | + </el-link> | |
| 26 | + </template> | |
| 27 | + </el-table-column> | |
| 28 | + <el-table-column prop="carTypeName" :label="$t('carDetailCarInout.carType')" align="center"></el-table-column> | |
| 29 | + <el-table-column prop="inTime" :label="$t('carDetailCarInout.entryTime')" align="center"></el-table-column> | |
| 30 | + <el-table-column :label="$t('carDetailCarInout.exitTime')" align="center"> | |
| 31 | + <template slot-scope="scope"> | |
| 32 | + {{ scope.row.carInout !== '3307' ? '-' : scope.row.outTime }} | |
| 33 | + </template> | |
| 34 | + </el-table-column> | |
| 35 | + <el-table-column :label="$t('carDetailCarInout.parkingTime')" align="center"> | |
| 36 | + <template slot-scope="scope"> | |
| 37 | + {{ scope.row.hours }}{{ $t('carDetailCarInout.hour') }}{{ scope.row.min }}{{ $t('carDetailCarInout.minute') }} | |
| 38 | + </template> | |
| 39 | + </el-table-column> | |
| 40 | + <el-table-column :label="$t('carDetailCarInout.chargeAmount')" align="center"> | |
| 41 | + <template slot-scope="scope"> | |
| 42 | + {{ scope.row.carType !== 'T' ? '-' : scope.row.payCharge }} | |
| 43 | + </template> | |
| 44 | + </el-table-column> | |
| 45 | + <el-table-column prop="remark" :label="$t('carDetailCarInout.remark')" align="center"></el-table-column> | |
| 46 | + </el-table> | |
| 47 | + | |
| 48 | + <el-row> | |
| 49 | + <el-col :span="16" :offset="8"> | |
| 50 | + <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize" | |
| 51 | + layout="total, prev, pager, next, jumper" :total="total"> | |
| 52 | + </el-pagination> | |
| 53 | + </el-col> | |
| 54 | + </el-row> | |
| 55 | + </div> | |
| 56 | + </div> | |
| 57 | +</template> | |
| 58 | + | |
| 59 | +<script> | |
| 60 | +import { getCarInoutDetail } from '@/api/car/carDetailCarInoutApi' | |
| 61 | + | |
| 62 | +export default { | |
| 63 | + name: 'CarDetailCarInout', | |
| 64 | + data() { | |
| 65 | + return { | |
| 66 | + carDetailCarInoutInfo: { | |
| 67 | + carIns: [], | |
| 68 | + carId: '', | |
| 69 | + memberId: '', | |
| 70 | + carNum: '', | |
| 71 | + areaNum: '' | |
| 72 | + }, | |
| 73 | + currentPage: 1, | |
| 74 | + pageSize: 10, | |
| 75 | + total: 0 | |
| 76 | + } | |
| 77 | + }, | |
| 78 | + methods: { | |
| 79 | + switch(data) { | |
| 80 | + this.carDetailCarInoutInfo.carId = data.carId | |
| 81 | + this.carDetailCarInoutInfo.carNum = data.carNum | |
| 82 | + this.carDetailCarInoutInfo.areaNum = data.areaNum | |
| 83 | + this.carDetailCarInoutInfo.memberId = data.memberId | |
| 84 | + this._loadCarDetailCarInoutData(this.currentPage, this.pageSize) | |
| 85 | + }, | |
| 86 | + _loadCarDetailCarInoutData(page, row) { | |
| 87 | + const params = { | |
| 88 | + communityId: this.$store.state.community.communityId, | |
| 89 | + carNum: this.carDetailCarInoutInfo.carNum, | |
| 90 | + paNum: this.carDetailCarInoutInfo.areaNum, | |
| 91 | + iotApiCode: 'listCarInoutDetailBmoImpl', | |
| 92 | + page, | |
| 93 | + row | |
| 94 | + } | |
| 95 | + | |
| 96 | + getCarInoutDetail(params).then(response => { | |
| 97 | + this.carDetailCarInoutInfo.carIns = response.data.data | |
| 98 | + this.total = response.data.total | |
| 99 | + }).catch(error => { | |
| 100 | + console.error('请求失败:', error) | |
| 101 | + }) | |
| 102 | + }, | |
| 103 | + handleCurrentChange(val) { | |
| 104 | + this.currentPage = val | |
| 105 | + this._loadCarDetailCarInoutData(val, this.pageSize) | |
| 106 | + }, | |
| 107 | + _viewTempFeeConfigInOutCar(configId) { | |
| 108 | + // 查看计费规则详情 | |
| 109 | + console.log(configId) | |
| 110 | + }, | |
| 111 | + _carInoutOpenFile(fileUrl) { | |
| 112 | + // 打开文件预览 | |
| 113 | + window.open(fileUrl) | |
| 114 | + } | |
| 115 | + } | |
| 116 | +} | |
| 117 | +</script> | |
| 0 | 118 | \ No newline at end of file | ... | ... |
src/components/car/carDetailCarInoutDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <car-detail-car-inout ref="carDetailCarInout"></car-detail-car-inout> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import CarDetailCarInout from '@/components/car/carDetailCarInout' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + CarDetailCarInout | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailCarInout.switch(data) | |
| 15 | + } | |
| 16 | + } | |
| 17 | +} | |
| 18 | +</script> | |
| 0 | 19 | \ No newline at end of file | ... | ... |
src/components/car/carDetailCoupon.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <div class="margin-top"> | |
| 4 | + <el-table :data="carDetailCouponInfo.carDetailCoupons" border style="width: 100%"> | |
| 5 | + <el-table-column prop="carNum" :label="$t('carDetailCoupon.car')" align="center"></el-table-column> | |
| 6 | + <el-table-column prop="couponName" :label="$t('carDetailCoupon.coupon')" align="center"></el-table-column> | |
| 7 | + <el-table-column prop="shopName" :label="$t('carDetailCoupon.shop')" align="center"></el-table-column> | |
| 8 | + <el-table-column prop="paName" :label="$t('carDetailCoupon.parkingLot')" align="center"></el-table-column> | |
| 9 | + <el-table-column prop="giveWayName" :label="$t('carDetailCoupon.giveWay')" align="center"></el-table-column> | |
| 10 | + <el-table-column prop="typeCdName" :label="$t('carDetailCoupon.couponType')" align="center"></el-table-column> | |
| 11 | + <el-table-column prop="value" :label="$t('carDetailCoupon.value')" align="center"></el-table-column> | |
| 12 | + <el-table-column prop="startTime" :label="$t('carDetailCoupon.startTime')" align="center"></el-table-column> | |
| 13 | + <el-table-column prop="endTime" :label="$t('carDetailCoupon.endTime')" align="center"></el-table-column> | |
| 14 | + <el-table-column prop="createTime" :label="$t('carDetailCoupon.giveTime')" align="center"></el-table-column> | |
| 15 | + <el-table-column prop="stateName" :label="$t('carDetailCoupon.status')" align="center"></el-table-column> | |
| 16 | + <el-table-column prop="remark" :label="$t('carDetailCoupon.remark')" align="center"></el-table-column> | |
| 17 | + </el-table> | |
| 18 | + | |
| 19 | + <el-row> | |
| 20 | + <el-col :span="16" :offset="8"> | |
| 21 | + <el-pagination | |
| 22 | + @current-change="handleCurrentChange" | |
| 23 | + :current-page="currentPage" | |
| 24 | + :page-size="pageSize" | |
| 25 | + layout="total, prev, pager, next, jumper" | |
| 26 | + :total="total"> | |
| 27 | + </el-pagination> | |
| 28 | + </el-col> | |
| 29 | + </el-row> | |
| 30 | + </div> | |
| 31 | + </div> | |
| 32 | +</template> | |
| 33 | + | |
| 34 | +<script> | |
| 35 | +import { listParkingCouponCar } from '@/api/car/carDetailCouponApi' | |
| 36 | + | |
| 37 | +export default { | |
| 38 | + name: 'CarDetailCoupon', | |
| 39 | + data() { | |
| 40 | + return { | |
| 41 | + carDetailCouponInfo: { | |
| 42 | + carDetailCoupons: [], | |
| 43 | + carId: '', | |
| 44 | + memberId: '', | |
| 45 | + carNum: '', | |
| 46 | + paId: '' | |
| 47 | + }, | |
| 48 | + currentPage: 1, | |
| 49 | + pageSize: 10, | |
| 50 | + total: 0 | |
| 51 | + } | |
| 52 | + }, | |
| 53 | + methods: { | |
| 54 | + switch(data) { | |
| 55 | + this.carDetailCouponInfo.carId = data.carId | |
| 56 | + this.carDetailCouponInfo.carNum = data.carNum | |
| 57 | + this.carDetailCouponInfo.paId = data.paId | |
| 58 | + this.carDetailCouponInfo.memberId = data.memberId | |
| 59 | + this._loadCarDetailCouponData(this.currentPage, this.pageSize) | |
| 60 | + }, | |
| 61 | + _loadCarDetailCouponData(page, row) { | |
| 62 | + const params = { | |
| 63 | + communityId: this.$store.state.community.communityId, | |
| 64 | + carNum: this.carDetailCouponInfo.carNum, | |
| 65 | + iotApiCode: 'listParkingCouponCarBmoImpl', | |
| 66 | + page, | |
| 67 | + row | |
| 68 | + } | |
| 69 | + | |
| 70 | + listParkingCouponCar(params).then(response => { | |
| 71 | + this.carDetailCouponInfo.carDetailCoupons = response.data.data | |
| 72 | + this.total = response.data.total | |
| 73 | + }).catch(error => { | |
| 74 | + console.error('请求失败:', error) | |
| 75 | + }) | |
| 76 | + }, | |
| 77 | + handleCurrentChange(val) { | |
| 78 | + this.currentPage = val | |
| 79 | + this._loadCarDetailCouponData(val, this.pageSize) | |
| 80 | + } | |
| 81 | + } | |
| 82 | +} | |
| 83 | +</script> | |
| 0 | 84 | \ No newline at end of file | ... | ... |
src/components/car/carDetailCouponDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <car-detail-coupon ref="carDetailCoupon"></car-detail-coupon> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import CarDetailCoupon from '@/components/car/carDetailCoupon' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + CarDetailCoupon | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailCoupon.switch(data) | |
| 15 | + } | |
| 16 | + } | |
| 17 | +} | |
| 18 | +</script> | |
| 0 | 19 | \ No newline at end of file | ... | ... |
src/components/car/carDetailCouponOrder.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <div class="margin-top"> | |
| 4 | + <el-table :data="carDetailCouponOrderInfo.orders" border style="width: 100%"> | |
| 5 | + <el-table-column prop="orderId" :label="$t('carDetailCouponOrder.orderId')" align="center"></el-table-column> | |
| 6 | + <el-table-column prop="carNum" :label="$t('carDetailCouponOrder.carNum')" align="center"></el-table-column> | |
| 7 | + <el-table-column prop="couponName" :label="$t('carDetailCouponOrder.coupon')" align="center"></el-table-column> | |
| 8 | + <el-table-column prop="shopName" :label="$t('carDetailCouponOrder.shop')" align="center"></el-table-column> | |
| 9 | + <el-table-column prop="paName" :label="$t('carDetailCouponOrder.parkingLot')" align="center"></el-table-column> | |
| 10 | + <el-table-column prop="machineName" :label="$t('carDetailCouponOrder.machine')" align="center"></el-table-column> | |
| 11 | + <el-table-column prop="createTime" :label="$t('carDetailCouponOrder.verifyTime')" align="center"></el-table-column> | |
| 12 | + <el-table-column prop="remark" :label="$t('carDetailCouponOrder.remark')" align="center"></el-table-column> | |
| 13 | + </el-table> | |
| 14 | + | |
| 15 | + <el-row> | |
| 16 | + <el-col :span="16" :offset="8"> | |
| 17 | + <el-pagination | |
| 18 | + @current-change="handleCurrentChange" | |
| 19 | + :current-page="currentPage" | |
| 20 | + :page-size="pageSize" | |
| 21 | + layout="total, prev, pager, next, jumper" | |
| 22 | + :total="total"> | |
| 23 | + </el-pagination> | |
| 24 | + </el-col> | |
| 25 | + </el-row> | |
| 26 | + </div> | |
| 27 | + </div> | |
| 28 | +</template> | |
| 29 | + | |
| 30 | +<script> | |
| 31 | +import { listParkingCouponCarOrder } from '@/api/car/carDetailCouponOrderApi' | |
| 32 | + | |
| 33 | +export default { | |
| 34 | + name: 'CarDetailCouponOrder', | |
| 35 | + data() { | |
| 36 | + return { | |
| 37 | + carDetailCouponOrderInfo: { | |
| 38 | + orders: [], | |
| 39 | + carId: '', | |
| 40 | + memberId: '', | |
| 41 | + carNum: '', | |
| 42 | + paId: '' | |
| 43 | + }, | |
| 44 | + currentPage: 1, | |
| 45 | + pageSize: 10, | |
| 46 | + total: 0 | |
| 47 | + } | |
| 48 | + }, | |
| 49 | + methods: { | |
| 50 | + switch(data) { | |
| 51 | + this.carDetailCouponOrderInfo.carId = data.carId | |
| 52 | + this.carDetailCouponOrderInfo.carNum = data.carNum | |
| 53 | + this.carDetailCouponOrderInfo.paId = data.paId | |
| 54 | + this.carDetailCouponOrderInfo.memberId = data.memberId | |
| 55 | + this._loadCarDetailCouponOrderData(this.currentPage, this.pageSize) | |
| 56 | + }, | |
| 57 | + _loadCarDetailCouponOrderData(page, row) { | |
| 58 | + const params = { | |
| 59 | + communityId: this.$store.state.community.communityId, | |
| 60 | + carNum: this.carDetailCouponOrderInfo.carNum, | |
| 61 | + iotApiCode: 'listParkingCouponCarOrderBmoImpl', | |
| 62 | + page, | |
| 63 | + row | |
| 64 | + } | |
| 65 | + | |
| 66 | + listParkingCouponCarOrder(params).then(response => { | |
| 67 | + this.carDetailCouponOrderInfo.orders = response.data.data | |
| 68 | + this.total = response.data.total | |
| 69 | + }).catch(error => { | |
| 70 | + console.error('请求失败:', error) | |
| 71 | + }) | |
| 72 | + }, | |
| 73 | + handleCurrentChange(val) { | |
| 74 | + this.currentPage = val | |
| 75 | + this._loadCarDetailCouponOrderData(val, this.pageSize) | |
| 76 | + } | |
| 77 | + } | |
| 78 | +} | |
| 79 | +</script> | |
| 0 | 80 | \ No newline at end of file | ... | ... |
src/components/car/carDetailCouponOrderDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <car-detail-coupon-order ref="carDetailCouponOrder"></car-detail-coupon-order> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import CarDetailCouponOrder from '@/components/car/carDetailCouponOrder' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + CarDetailCouponOrder | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailCouponOrder.switch(data) | |
| 15 | + } | |
| 16 | + } | |
| 17 | +} | |
| 18 | +</script> | |
| 0 | 19 | \ No newline at end of file | ... | ... |
src/components/car/carDetailFee.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-row> | |
| 4 | + <el-col :span="24" class="text-right"> | |
| 5 | + <el-button type="primary" size="small" style="margin-left:10px" @click="_openCarCreateFeeAddModal()"> | |
| 6 | + {{ $t('carDetailFee.createFee') }} | |
| 7 | + </el-button> | |
| 8 | + </el-col> | |
| 9 | + </el-row> | |
| 10 | + | |
| 11 | + <div class="margin-top"> | |
| 12 | + <el-table :data="carDetailFeeInfo.fees" style="width: 100%"> | |
| 13 | + <el-table-column prop="feeName" :label="$t('carDetailFee.feeItem')" align="center"> | |
| 14 | + <template #default="{ row }"> | |
| 15 | + <span class="hand" @click="_viewCarFeeConfig(row)">{{ row.feeName }} | |
| 16 | + <i class="el-icon-info"></i> | |
| 17 | + </span> | |
| 18 | + </template> | |
| 19 | + </el-table-column> | |
| 20 | + <el-table-column prop="feeFlagName" :label="$t('carDetailFee.feeFlag')" align="center"></el-table-column> | |
| 21 | + <el-table-column prop="feeTypeCdName" :label="$t('carDetailFee.feeType')" align="center"></el-table-column> | |
| 22 | + <el-table-column prop="amountOwed" :label="$t('carDetailFee.amountReceivable')" | |
| 23 | + align="center"></el-table-column> | |
| 24 | + <el-table-column prop="startTime" :label="$t('carDetailFee.accountingTime')" align="center"></el-table-column> | |
| 25 | + <el-table-column :label="$t('carDetailFee.receivablePeriod')" align="center"> | |
| 26 | + <template #default="{ row }"> | |
| 27 | + {{ _getEndTime(row) }}~<br />{{ _getDeadlineTime(row) }} | |
| 28 | + </template> | |
| 29 | + </el-table-column> | |
| 30 | + <el-table-column :label="$t('carDetailFee.remark')" align="center"> | |
| 31 | + <template #default="{ row }"> | |
| 32 | + <div v-if="row.feeTypeCd == '888800010015' || row.feeTypeCd == '888800010016'"> | |
| 33 | + <div> | |
| 34 | + <span>{{ $t('carDetailFee.previousReading') }}</span>:{{ row.preDegrees }} | |
| 35 | + </div> | |
| 36 | + <div> | |
| 37 | + <span>{{ $t('carDetailFee.currentReading') }}</span>:{{ row.curDegrees }} | |
| 38 | + </div> | |
| 39 | + <div> | |
| 40 | + <span>{{ $t('carDetailFee.unitPrice') }}</span>:{{ row.mwPrice ? row.mwPrice : row.squarePrice }} | |
| 41 | + </div> | |
| 42 | + <div> | |
| 43 | + <span>{{ $t('carDetailFee.additionalFee') }}</span>:{{ row.additionalAmount }} | |
| 44 | + </div> | |
| 45 | + </div> | |
| 46 | + <div v-else> | |
| 47 | + <div> | |
| 48 | + <span>{{ $t('carDetailFee.unitPrice') }}</span>:{{ row.squarePrice }} | |
| 49 | + </div> | |
| 50 | + <div> | |
| 51 | + <span>{{ $t('carDetailFee.fixedFee') }}</span>:{{ row.additionalAmount }} | |
| 52 | + </div> | |
| 53 | + </div> | |
| 54 | + </template> | |
| 55 | + </el-table-column> | |
| 56 | + <el-table-column prop="stateName" :label="$t('carDetailFee.status')" align="center"></el-table-column> | |
| 57 | + <el-table-column :label="$t('carDetailFee.operation')" align="center"> | |
| 58 | + <template #default="{ row }"> | |
| 59 | + <el-button type="text" v-if="row.state != '2009001' && hasPrivilege('502020082314267912')" | |
| 60 | + @click="_payFee(row)"> | |
| 61 | + {{ $t('carDetailFee.payment') }} | |
| 62 | + </el-button> | |
| 63 | + <el-button type="text" @click="_payFeeHis(row)"> | |
| 64 | + {{ $t('carDetailFee.history') }} | |
| 65 | + </el-button> | |
| 66 | + <el-button type="text" v-if="hasPrivilege('502020090604200029')" @click="_deleteFee(row)"> | |
| 67 | + {{ $t('carDetailFee.cancel') }} | |
| 68 | + </el-button> | |
| 69 | + <el-button type="text" v-if="row.state != '2009001' && hasPrivilege('502020090427190001')" | |
| 70 | + @click="_editFee(row)"> | |
| 71 | + {{ $t('carDetailFee.change') }} | |
| 72 | + </el-button> | |
| 73 | + <el-button type="text" @click="_viewCarFee(row)"> | |
| 74 | + {{ $t('carDetailFee.detail') }} | |
| 75 | + </el-button> | |
| 76 | + </template> | |
| 77 | + </el-table-column> | |
| 78 | + </el-table> | |
| 79 | + | |
| 80 | + <el-row class="margin-top"> | |
| 81 | + <el-col :span="12"> | |
| 82 | + <span>{{ $t('carDetailFee.paymentNotice') }}</span> | |
| 83 | + </el-col> | |
| 84 | + <el-col :span="12" class="text-right"> | |
| 85 | + <el-pagination @current-change="handleCurrentChange" :current-page="pagination.currentPage" | |
| 86 | + :page-size="pagination.pageSize" :total="pagination.total" layout="prev, pager, next, jumper"> | |
| 87 | + </el-pagination> | |
| 88 | + </el-col> | |
| 89 | + </el-row> | |
| 90 | + </div> | |
| 91 | + | |
| 92 | + <add-meter-water ref="addMeterWater"></add-meter-water> | |
| 93 | + <car-create-fee-add ref="carCreateFeeAdd"></car-create-fee-add> | |
| 94 | + <delete-fee ref="deleteFee"></delete-fee> | |
| 95 | + <edit-fee ref="editFee"></edit-fee> | |
| 96 | + </div> | |
| 97 | +</template> | |
| 98 | + | |
| 99 | +<script> | |
| 100 | +import { listFee } from '@/api/car/carDetailFeeApi' | |
| 101 | +import AddMeterWater from '@/components/fee/addMeterWater' | |
| 102 | +import CarCreateFeeAdd from '@/components/fee/carCreateFeeAdd' | |
| 103 | +import DeleteFee from '@/components/fee/deleteFee' | |
| 104 | +import EditFee from '@/components/fee/editFee' | |
| 105 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 106 | + | |
| 107 | +export default { | |
| 108 | + name: 'CarDetailFee', | |
| 109 | + components: { | |
| 110 | + AddMeterWater, | |
| 111 | + CarCreateFeeAdd, | |
| 112 | + DeleteFee, | |
| 113 | + EditFee | |
| 114 | + }, | |
| 115 | + data() { | |
| 116 | + return { | |
| 117 | + carDetailFeeInfo: { | |
| 118 | + fees: [], | |
| 119 | + carId: '', | |
| 120 | + memberId: '', | |
| 121 | + carNum: '' | |
| 122 | + }, | |
| 123 | + pagination: { | |
| 124 | + currentPage: 1, | |
| 125 | + pageSize: 10, | |
| 126 | + total: 0 | |
| 127 | + } | |
| 128 | + } | |
| 129 | + }, | |
| 130 | + created() { | |
| 131 | + this.communityId = getCommunityId() | |
| 132 | + }, | |
| 133 | + methods: { | |
| 134 | + open(data) { | |
| 135 | + this.carDetailFeeInfo.carId = data.carId | |
| 136 | + this.carDetailFeeInfo.carNum = data.carNum | |
| 137 | + this.carDetailFeeInfo.memberId = data.memberId | |
| 138 | + this._loadCarDetailFeeData(1, this.pagination.pageSize) | |
| 139 | + }, | |
| 140 | + switch(data) { | |
| 141 | + this.carDetailFeeInfo.carId = data.carId | |
| 142 | + this.carDetailFeeInfo.carNum = data.carNum | |
| 143 | + this.carDetailFeeInfo.memberId = data.memberId | |
| 144 | + this._loadCarDetailFeeData(1, this.pagination.pageSize) | |
| 145 | + }, | |
| 146 | + notify() { | |
| 147 | + this._loadCarDetailFeeData(this.pagination.currentPage, this.pagination.pageSize) | |
| 148 | + }, | |
| 149 | + handleCurrentChange(val) { | |
| 150 | + this.pagination.currentPage = val | |
| 151 | + this._loadCarDetailFeeData(val, this.pagination.pageSize) | |
| 152 | + }, | |
| 153 | + _loadCarDetailFeeData(page, row) { | |
| 154 | + const params = { | |
| 155 | + communityId: this.communityId, | |
| 156 | + payerObjId: this.carDetailFeeInfo.memberId, | |
| 157 | + page: page, | |
| 158 | + row: row | |
| 159 | + } | |
| 160 | + | |
| 161 | + listFee(params).then(response => { | |
| 162 | + this.carDetailFeeInfo.fees = response.fees | |
| 163 | + this.pagination.total = response.records | |
| 164 | + }).catch(error => { | |
| 165 | + console.error('请求失败处理', error) | |
| 166 | + }) | |
| 167 | + }, | |
| 168 | + _payFee(fee) { | |
| 169 | + fee.roomName = this.carDetailFeeInfo.carNum | |
| 170 | + this.$router.push(`/views/fee/payFeeOrder?feeId=${fee.feeId}`) | |
| 171 | + }, | |
| 172 | + _payFeeHis(fee) { | |
| 173 | + this.$router.push(`/views/fee/propertyFee?${this.objToQueryString(fee)}`) | |
| 174 | + }, | |
| 175 | + _editFee(fee) { | |
| 176 | + this.$refs.editFee.open(fee) | |
| 177 | + }, | |
| 178 | + _deleteFee(fee) { | |
| 179 | + this.$refs.deleteFee.open({ | |
| 180 | + communityId: this.communityId, | |
| 181 | + feeId: fee.feeId | |
| 182 | + }) | |
| 183 | + }, | |
| 184 | + _openCarCreateFeeAddModal() { | |
| 185 | + this.$refs.carCreateFeeAdd.open({ | |
| 186 | + isMore: false, | |
| 187 | + car: this.carDetailFeeInfo | |
| 188 | + }) | |
| 189 | + }, | |
| 190 | + _openAddMeterWaterModal() { | |
| 191 | + this.$refs.addMeterWater.open({ | |
| 192 | + roomId: this.carDetailFeeInfo.carId, | |
| 193 | + roomName: this.carDetailFeeInfo.carNum, | |
| 194 | + ownerName: this.carDetailFeeInfo.parkingName, | |
| 195 | + objType: '6666' | |
| 196 | + }) | |
| 197 | + }, | |
| 198 | + _getDeadlineTime(fee) { | |
| 199 | + if (fee.amountOwed == 0 && fee.endTime == fee.deadlineTime) { | |
| 200 | + return "-" | |
| 201 | + } | |
| 202 | + if (fee.state == '2009001') { | |
| 203 | + return "-" | |
| 204 | + } | |
| 205 | + return fee.deadlineTime | |
| 206 | + }, | |
| 207 | + _getEndTime(fee) { | |
| 208 | + if (fee.state == '2009001') { | |
| 209 | + return "-" | |
| 210 | + } | |
| 211 | + return fee.endTime | |
| 212 | + }, | |
| 213 | + _viewCarFeeConfig(fee) { | |
| 214 | + // 实现查看费用配置逻辑 | |
| 215 | + //window.open(`/#/views/fee/feeDetailConfig?configId=${fee.configId}`) | |
| 216 | + console.log(fee) | |
| 217 | + }, | |
| 218 | + _viewCarFee(fee) { | |
| 219 | + // 实现查看费用详情逻辑 | |
| 220 | + window.open(`/#/views/fee/feeDetail?feeId=${fee.feeId}`) | |
| 221 | + }, | |
| 222 | + objToQueryString(obj) { | |
| 223 | + return Object.keys(obj).map(key => `${key}=${obj[key]}`).join('&') | |
| 224 | + }, | |
| 225 | + } | |
| 226 | +} | |
| 227 | +</script> | |
| 228 | + | |
| 229 | +<style scoped> | |
| 230 | +.hand { | |
| 231 | + cursor: pointer; | |
| 232 | +} | |
| 233 | + | |
| 234 | +.text-right { | |
| 235 | + text-align: right; | |
| 236 | +} | |
| 237 | + | |
| 238 | +.margin-top { | |
| 239 | + margin-top: 20px; | |
| 240 | +} | |
| 241 | +</style> | |
| 0 | 242 | \ No newline at end of file | ... | ... |
src/components/car/carDetailFeeDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <car-detail-fee ref="carDetailFee"></car-detail-fee> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import CarDetailFee from '@/components/car/carDetailFee' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + CarDetailFee | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailFee.switch(data) | |
| 15 | + } | |
| 16 | + } | |
| 17 | +} | |
| 18 | +</script> | |
| 0 | 19 | \ No newline at end of file | ... | ... |
src/components/car/carDetailMember.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-row> | |
| 4 | + <el-col :span="24" class="text-right"> | |
| 5 | + <el-button type="primary" size="small" @click="_addOwnerCarMember"> | |
| 6 | + {{ $t('common.add') }} | |
| 7 | + </el-button> | |
| 8 | + </el-col> | |
| 9 | + </el-row> | |
| 10 | + | |
| 11 | + <div class="margin-top"> | |
| 12 | + <el-table :data="carDetailMemberInfo.ownerCars" style="width: 100%"> | |
| 13 | + <el-table-column prop="carNum" :label="$t('carDetailMember.licensePlate')" align="center"></el-table-column> | |
| 14 | + <el-table-column prop="roomName" :label="$t('carDetailMember.roomNumber')" align="center"></el-table-column> | |
| 15 | + <el-table-column prop="carBrand" :label="$t('carDetailMember.carBrand')" align="center"></el-table-column> | |
| 16 | + <el-table-column prop="carTypeName" :label="$t('carDetailMember.carType')" align="center"></el-table-column> | |
| 17 | + <el-table-column prop="carColor" :label="$t('carDetailMember.color')" align="center"></el-table-column> | |
| 18 | + <el-table-column :label="$t('carDetailMember.owner')" align="center"> | |
| 19 | + <template #default="{ row }"> | |
| 20 | + {{ row.ownerName }}({{ row.link }}) | |
| 21 | + </template> | |
| 22 | + </el-table-column> | |
| 23 | + <el-table-column :label="$t('carDetailMember.parkingSpace')" align="center"> | |
| 24 | + <template #default="{ row }"> | |
| 25 | + <span v-if="row.areaNum"> | |
| 26 | + {{ row.areaNum }}{{ $t('carDetailMember.parkingLot') }}{{ row.num }}{{ $t('carDetailMember.parkingSpace') }} | |
| 27 | + </span> | |
| 28 | + <span v-else> | |
| 29 | + {{ $t('carDetailMember.none') }} | |
| 30 | + </span> | |
| 31 | + </template> | |
| 32 | + </el-table-column> | |
| 33 | + <el-table-column prop="startTime" :label="$t('carDetailMember.startTime')" align="center"></el-table-column> | |
| 34 | + <el-table-column prop="endTime" :label="$t('carDetailMember.endTime')" align="center"></el-table-column> | |
| 35 | + <el-table-column :label="$t('carDetailMember.status')" align="center"> | |
| 36 | + <template #default="{ row }"> | |
| 37 | + {{ row.stateName }} | |
| 38 | + <span v-if="row.iotStateName"> | |
| 39 | + ({{ row.iotStateName }}) | |
| 40 | + </span> | |
| 41 | + </template> | |
| 42 | + </el-table-column> | |
| 43 | + <el-table-column :label="$t('carDetailMember.operation')" align="center"> | |
| 44 | + <template #default="{ row }"> | |
| 45 | + <el-button type="text" @click="_openEditOwnerCar(row)"> | |
| 46 | + {{ $t('common.edit') }} | |
| 47 | + </el-button> | |
| 48 | + <el-button type="text" @click="_openDelOwnerCarModel(row)"> | |
| 49 | + {{ $t('common.delete') }} | |
| 50 | + </el-button> | |
| 51 | + </template> | |
| 52 | + </el-table-column> | |
| 53 | + </el-table> | |
| 54 | + | |
| 55 | + <el-row class="margin-top"> | |
| 56 | + <el-col :span="24" class="text-right"> | |
| 57 | + <el-pagination @current-change="handleCurrentChange" :current-page="pagination.currentPage" | |
| 58 | + :page-size="pagination.pageSize" :total="pagination.total" layout="prev, pager, next, jumper"> | |
| 59 | + </el-pagination> | |
| 60 | + </el-col> | |
| 61 | + </el-row> | |
| 62 | + </div> | |
| 63 | + | |
| 64 | + <add-car-modal ref="addCarModal" @notify="notify"></add-car-modal> | |
| 65 | + <edit-member-car ref="editMemberCar" @notify="notify"></edit-member-car> | |
| 66 | + <delete-owner-car ref="deleteOwnerCar" @notify="notify"></delete-owner-car> | |
| 67 | + </div> | |
| 68 | +</template> | |
| 69 | + | |
| 70 | +<script> | |
| 71 | +import { getOwnerCarDetail } from '@/api/car/carDetailApi' | |
| 72 | +import AddCarModal from '@/components/car/addCarModal' | |
| 73 | +import EditMemberCar from '@/components/car/editMemberCar' | |
| 74 | +import DeleteOwnerCar from '@/components/car/deleteOwnerCar' | |
| 75 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 76 | + | |
| 77 | +export default { | |
| 78 | + name: 'CarDetailMember', | |
| 79 | + components: { | |
| 80 | + AddCarModal, | |
| 81 | + EditMemberCar, | |
| 82 | + DeleteOwnerCar | |
| 83 | + }, | |
| 84 | + data() { | |
| 85 | + return { | |
| 86 | + carDetailMemberInfo: { | |
| 87 | + ownerCars: [], | |
| 88 | + carId: '', | |
| 89 | + carNum: '', | |
| 90 | + memberId: '' | |
| 91 | + }, | |
| 92 | + pagination: { | |
| 93 | + currentPage: 1, | |
| 94 | + pageSize: 10, | |
| 95 | + total: 0 | |
| 96 | + } | |
| 97 | + } | |
| 98 | + }, | |
| 99 | + created() { | |
| 100 | + this.communityId = getCommunityId() | |
| 101 | + }, | |
| 102 | + methods: { | |
| 103 | + switch(data) { | |
| 104 | + this.carDetailMemberInfo.carId = data.carId | |
| 105 | + this.carDetailMemberInfo.carNum = data.carNum | |
| 106 | + this.carDetailMemberInfo.memberId = data.memberId | |
| 107 | + this._loadCarDetailMemberData(1, this.pagination.pageSize) | |
| 108 | + }, | |
| 109 | + notify() { | |
| 110 | + this._loadCarDetailMemberData(this.pagination.currentPage, this.pagination.pageSize) | |
| 111 | + }, | |
| 112 | + handleCurrentChange(val) { | |
| 113 | + this.pagination.currentPage = val | |
| 114 | + this._loadCarDetailMemberData(val, this.pagination.pageSize) | |
| 115 | + }, | |
| 116 | + _loadCarDetailMemberData(page, row) { | |
| 117 | + const params = { | |
| 118 | + communityId: this.communityId, | |
| 119 | + carId: this.carDetailMemberInfo.carId, | |
| 120 | + carTypeCd: '1002', | |
| 121 | + page: page, | |
| 122 | + row: row | |
| 123 | + } | |
| 124 | + | |
| 125 | + getOwnerCarDetail(params).then(response => { | |
| 126 | + this.carDetailMemberInfo.ownerCars = response.data | |
| 127 | + this.pagination.total = response.records | |
| 128 | + }).catch(error => { | |
| 129 | + console.error('请求失败处理', error) | |
| 130 | + }) | |
| 131 | + }, | |
| 132 | + _addOwnerCarMember() { | |
| 133 | + this.$refs.addCarModal.open({ | |
| 134 | + carId: this.carDetailMemberInfo.carId | |
| 135 | + }) | |
| 136 | + }, | |
| 137 | + _openEditOwnerCar(car) { | |
| 138 | + this.$refs.editMemberCar.open(car) | |
| 139 | + }, | |
| 140 | + _openDelOwnerCarModel(car) { | |
| 141 | + this.$refs.deleteOwnerCar.open(car) | |
| 142 | + }, | |
| 143 | + _viewIotStateRemark(car) { | |
| 144 | + const data = { | |
| 145 | + "同步说明": car.iotRemark | |
| 146 | + } | |
| 147 | + this.$emit('viewData', { | |
| 148 | + title: `${car.carNum} 同步物联网详情`, | |
| 149 | + data: data | |
| 150 | + }) | |
| 151 | + } | |
| 152 | + } | |
| 153 | +} | |
| 154 | +</script> | |
| 155 | + | |
| 156 | +<style scoped> | |
| 157 | +.margin-top { | |
| 158 | + margin-top: 20px; | |
| 159 | +} | |
| 160 | + | |
| 161 | +.text-right { | |
| 162 | + text-align: right; | |
| 163 | +} | |
| 164 | +</style> | |
| 0 | 165 | \ No newline at end of file | ... | ... |
src/components/car/carDetailTransactionCar.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="margin-top"> | |
| 3 | + <div class="margin-top-lg"></div> | |
| 4 | + <div class="margin-top"> | |
| 5 | + <el-table :data="carDetailTransactionCarInfo.machineTranslates" border style="width: 100%"> | |
| 6 | + <el-table-column prop="machineTranslateId" :label="$t('carDetailTransactionCar.syncId')" align="center"></el-table-column> | |
| 7 | + <el-table-column prop="machineCode" :label="$t('carDetailTransactionCar.deviceCode')" align="center"></el-table-column> | |
| 8 | + <el-table-column prop="typeCdName" :label="$t('carDetailTransactionCar.objectType')" align="center"></el-table-column> | |
| 9 | + <el-table-column prop="objName" :label="$t('carDetailTransactionCar.objectName')" align="center"></el-table-column> | |
| 10 | + <el-table-column prop="machineCmdName" :label="$t('carDetailTransactionCar.command')" align="center"></el-table-column> | |
| 11 | + <el-table-column prop="stateName" :label="$t('carDetailTransactionCar.status')" align="center"></el-table-column> | |
| 12 | + <el-table-column prop="remark" :label="$t('carDetailTransactionCar.remark')" align="center" width="80px"></el-table-column> | |
| 13 | + <el-table-column prop="updateTime" :label="$t('carDetailTransactionCar.syncTime')" align="center"></el-table-column> | |
| 14 | + <el-table-column :label="$t('carDetailTransactionCar.operation')" align="center"> | |
| 15 | + <template slot-scope="scope"> | |
| 16 | + <el-button size="mini" @click="_openEditMachineTranslateModel(scope.row)"> | |
| 17 | + {{$t('carDetailTransactionCar.resync')}} | |
| 18 | + </el-button> | |
| 19 | + </template> | |
| 20 | + </el-table-column> | |
| 21 | + </el-table> | |
| 22 | + | |
| 23 | + <el-row> | |
| 24 | + <el-col :span="16" :offset="8"> | |
| 25 | + <el-pagination | |
| 26 | + @current-change="handleCurrentChange" | |
| 27 | + :current-page="currentPage" | |
| 28 | + :page-size="pageSize" | |
| 29 | + layout="total, prev, pager, next, jumper" | |
| 30 | + :total="total"> | |
| 31 | + </el-pagination> | |
| 32 | + </el-col> | |
| 33 | + </el-row> | |
| 34 | + </div> | |
| 35 | + | |
| 36 | + <edit-machine-translate ref="editMachineTranslate"></edit-machine-translate> | |
| 37 | + </div> | |
| 38 | +</template> | |
| 39 | + | |
| 40 | +<script> | |
| 41 | +import { getMachineTranslates } from '@/api/car/carDetailTransactionCarApi' | |
| 42 | +import EditMachineTranslate from '@/components/property/editMachineTranslate' | |
| 43 | + | |
| 44 | +export default { | |
| 45 | + name: 'CarDetailTransactionCar', | |
| 46 | + components: { | |
| 47 | + EditMachineTranslate | |
| 48 | + }, | |
| 49 | + data() { | |
| 50 | + return { | |
| 51 | + carDetailTransactionCarInfo: { | |
| 52 | + machineTranslates: [], | |
| 53 | + ownerId: '', | |
| 54 | + carId: '', | |
| 55 | + memberId: '' | |
| 56 | + }, | |
| 57 | + currentPage: 1, | |
| 58 | + pageSize: 10, | |
| 59 | + total: 0 | |
| 60 | + } | |
| 61 | + }, | |
| 62 | + methods: { | |
| 63 | + switch(data) { | |
| 64 | + this.carDetailTransactionCarInfo.carId = data.carId | |
| 65 | + this.carDetailTransactionCarInfo.memberId = data.memberId | |
| 66 | + this._loadCarDetailTransactionCarData(this.currentPage, this.pageSize) | |
| 67 | + }, | |
| 68 | + _loadCarDetailTransactionCarData(page, row) { | |
| 69 | + const params = { | |
| 70 | + page, | |
| 71 | + row, | |
| 72 | + communityId: this.$store.state.community.communityId, | |
| 73 | + objId: this.carDetailTransactionCarInfo.memberId, | |
| 74 | + typeCd: '4455' | |
| 75 | + } | |
| 76 | + | |
| 77 | + getMachineTranslates(params).then(response => { | |
| 78 | + this.carDetailTransactionCarInfo.machineTranslates = response.data.machineTranslates | |
| 79 | + this.total = response.data.total | |
| 80 | + }).catch(error => { | |
| 81 | + console.error('请求失败:', error) | |
| 82 | + }) | |
| 83 | + }, | |
| 84 | + handleCurrentChange(val) { | |
| 85 | + this.currentPage = val | |
| 86 | + this._loadCarDetailTransactionCarData(val, this.pageSize) | |
| 87 | + }, | |
| 88 | + _openEditMachineTranslateModel(machineTranslate) { | |
| 89 | + this.$refs.editMachineTranslate.open(machineTranslate) | |
| 90 | + } | |
| 91 | + } | |
| 92 | +} | |
| 93 | +</script> | |
| 0 | 94 | \ No newline at end of file | ... | ... |
src/components/car/carDetailTransactionCarDemo.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <car-detail-transaction-car ref="carDetailTransactionCar"></car-detail-transaction-car> | |
| 3 | +</template> | |
| 4 | + | |
| 5 | +<script> | |
| 6 | +import CarDetailTransactionCar from '@/components/car/carDetailTransactionCar' | |
| 7 | + | |
| 8 | +export default { | |
| 9 | + components: { | |
| 10 | + CarDetailTransactionCar | |
| 11 | + }, | |
| 12 | + methods: { | |
| 13 | + open(data) { | |
| 14 | + this.$refs.carDetailTransactionCar.switch(data) | |
| 15 | + } | |
| 16 | + } | |
| 17 | +} | |
| 18 | +</script> | |
| 0 | 19 | \ No newline at end of file | ... | ... |
src/components/car/editMemberCar.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog :title="$t('editMemberCar.edit')" :visible.sync="visible" width="50%"> | |
| 3 | + <el-form :model="editMemberCarInfo" :rules="rules" ref="editMemberCarForm"> | |
| 4 | + <el-form-item :label="$t('editMemberCar.licensePlate')" prop="carNum"> | |
| 5 | + <el-input v-model="editMemberCarInfo.carNum" :placeholder="$t('editMemberCar.licensePlateRequired')"></el-input> | |
| 6 | + </el-form-item> | |
| 7 | + <el-form-item :label="$t('editMemberCar.carBrand')"> | |
| 8 | + <el-input v-model="editMemberCarInfo.carBrand" :placeholder="$t('editMemberCar.carBrandOptional')"></el-input> | |
| 9 | + </el-form-item> | |
| 10 | + <el-form-item :label="$t('editMemberCar.carType')" prop="carType"> | |
| 11 | + <el-select v-model="editMemberCarInfo.carType" :placeholder="$t('editMemberCar.carTypeRequired')" style="width:100%"> | |
| 12 | + <el-option v-for="carType in carTypes" :key="carType.statusCd" | |
| 13 | + :label="carType.name" :value="carType.statusCd"></el-option> | |
| 14 | + </el-select> | |
| 15 | + </el-form-item> | |
| 16 | + <el-form-item :label="$t('editMemberCar.color')"> | |
| 17 | + <el-input v-model="editMemberCarInfo.carColor" :placeholder="$t('editMemberCar.colorOptional')"></el-input> | |
| 18 | + </el-form-item> | |
| 19 | + <el-form-item :label="$t('editMemberCar.remark')"> | |
| 20 | + <el-input type="textarea" v-model="editMemberCarInfo.remark" :placeholder="$t('editMemberCar.remarkPlaceholder')" rows="3"></el-input> | |
| 21 | + </el-form-item> | |
| 22 | + </el-form> | |
| 23 | + <div slot="footer" class="dialog-footer"> | |
| 24 | + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button> | |
| 25 | + <el-button type="primary" @click="_submitEditMemberCarInfo">{{ $t('common.save') }}</el-button> | |
| 26 | + </div> | |
| 27 | + </el-dialog> | |
| 28 | +</template> | |
| 29 | + | |
| 30 | +<script> | |
| 31 | +import { editOwnerCar } from '@/api/car/listOwnerCarApi' | |
| 32 | +import { getDict } from '@/api/community/communityApi' | |
| 33 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 34 | + | |
| 35 | +export default { | |
| 36 | + name: 'EditMemberCar', | |
| 37 | + data() { | |
| 38 | + return { | |
| 39 | + visible: false, | |
| 40 | + editMemberCarInfo: { | |
| 41 | + carId: '', | |
| 42 | + memberId: '', | |
| 43 | + carNum: '', | |
| 44 | + carBrand: '', | |
| 45 | + carType: '', | |
| 46 | + carColor: '', | |
| 47 | + remark: "", | |
| 48 | + startTime: '', | |
| 49 | + endTime: '', | |
| 50 | + carNumType: '', | |
| 51 | + leaseType: '', | |
| 52 | + }, | |
| 53 | + carTypes: [], | |
| 54 | + rules: { | |
| 55 | + carNum: [ | |
| 56 | + { required: true, message: this.$t('editMemberCar.licensePlateRequired'), trigger: 'blur' }, | |
| 57 | + { min: 2, max: 12, message: this.$t('editMemberCar.licensePlateInvalid'), trigger: 'blur' } | |
| 58 | + ], | |
| 59 | + carType: [ | |
| 60 | + { required: true, message: this.$t('editMemberCar.carTypeRequired'), trigger: 'change' } | |
| 61 | + ], | |
| 62 | + memberId: [ | |
| 63 | + { required: true, message: this.$t('editMemberCar.carDataError'), trigger: 'blur' } | |
| 64 | + ] | |
| 65 | + } | |
| 66 | + } | |
| 67 | + }, | |
| 68 | + created() { | |
| 69 | + this.communityId = getCommunityId() | |
| 70 | + this.loadCarTypes() | |
| 71 | + }, | |
| 72 | + methods: { | |
| 73 | + async loadCarTypes() { | |
| 74 | + try { | |
| 75 | + const data = await getDict('owner_car', 'car_type') | |
| 76 | + this.carTypes = data | |
| 77 | + } catch (error) { | |
| 78 | + console.error('获取字典数据失败:', error) | |
| 79 | + } | |
| 80 | + }, | |
| 81 | + open(carInfo) { | |
| 82 | + this.editMemberCarInfo = Object.assign({}, carInfo) | |
| 83 | + this.visible = true | |
| 84 | + this.$nextTick(() => { | |
| 85 | + this.$refs.editMemberCarForm.clearValidate() | |
| 86 | + }) | |
| 87 | + }, | |
| 88 | + _submitEditMemberCarInfo() { | |
| 89 | + this.$refs.editMemberCarForm.validate(valid => { | |
| 90 | + if (valid) { | |
| 91 | + this.editMemberCarInfo.communityId = this.communityId | |
| 92 | + editOwnerCar(this.editMemberCarInfo).then(response => { | |
| 93 | + if (response.code === 0) { | |
| 94 | + this.visible = false | |
| 95 | + this.$emit('notify') | |
| 96 | + this.$message.success(this.$t('common.editSuccess')) | |
| 97 | + } else { | |
| 98 | + this.$message.error(response.msg) | |
| 99 | + } | |
| 100 | + }).catch(error => { | |
| 101 | + console.error('请求失败处理', error) | |
| 102 | + this.$message.error(error) | |
| 103 | + }) | |
| 104 | + } | |
| 105 | + }) | |
| 106 | + } | |
| 107 | + } | |
| 108 | +} | |
| 109 | +</script> | |
| 0 | 110 | \ No newline at end of file | ... | ... |
src/components/car/ownerDetailOweFee.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="margin-top"> | |
| 3 | + <el-row class="margin-top-lg"> | |
| 4 | + <el-col :span="24" class="text-right"> | |
| 5 | + <el-button type="primary" size="small" style="margin-left:10px" v-if="hasPrivilege('502020082314267912')" | |
| 6 | + @click="_openBatchPayRoomFeeModal()"> | |
| 7 | + {{ $t('ownerDetailOweFee.batchPayment') }} | |
| 8 | + </el-button> | |
| 9 | + </el-col> | |
| 10 | + </el-row> | |
| 11 | + | |
| 12 | + <div class="margin-top"> | |
| 13 | + <el-table :data="ownerDetailOweFeeInfo.fees" style="width: 100%"> | |
| 14 | + <el-table-column prop="payerObjName" :label="$t('ownerDetailOweFee.paymentObject')" | |
| 15 | + align="center"></el-table-column> | |
| 16 | + <el-table-column prop="ownerName" :label="$t('ownerDetailOweFee.ownerName')" align="center"></el-table-column> | |
| 17 | + <el-table-column prop="ownerTel" :label="$t('ownerDetailOweFee.phone')" align="center"></el-table-column> | |
| 18 | + <el-table-column prop="endTime" :label="$t('ownerDetailOweFee.startTime')" align="center"></el-table-column> | |
| 19 | + <el-table-column prop="deadlineTime" :label="$t('ownerDetailOweFee.endTime')" align="center"></el-table-column> | |
| 20 | + <el-table-column prop="amountOwed" :label="$t('ownerDetailOweFee.totalAmount')" | |
| 21 | + align="center"></el-table-column> | |
| 22 | + <el-table-column prop="updateTime" :label="$t('ownerDetailOweFee.updateTime')" align="center"></el-table-column> | |
| 23 | + </el-table> | |
| 24 | + | |
| 25 | + <el-row class="margin-top"> | |
| 26 | + <el-col :span="12"> | |
| 27 | + <span>{{ $t('ownerDetailOweFee.paymentNotice') }}</span> | |
| 28 | + </el-col> | |
| 29 | + <el-col :span="12" class="text-right"> | |
| 30 | + <el-pagination @current-change="handleCurrentChange" :current-page="pagination.currentPage" | |
| 31 | + :page-size="pagination.pageSize" :total="pagination.total" layout="prev, pager, next, jumper"> | |
| 32 | + </el-pagination> | |
| 33 | + </el-col> | |
| 34 | + </el-row> | |
| 35 | + </div> | |
| 36 | + </div> | |
| 37 | +</template> | |
| 38 | + | |
| 39 | +<script> | |
| 40 | +import { queryReportOweFee } from '@/api/fee/listOweFeeApi' | |
| 41 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 42 | + | |
| 43 | +export default { | |
| 44 | + name: 'OwnerDetailOweFee', | |
| 45 | + data() { | |
| 46 | + return { | |
| 47 | + ownerDetailOweFeeInfo: { | |
| 48 | + fees: [], | |
| 49 | + ownerId: '' | |
| 50 | + }, | |
| 51 | + pagination: { | |
| 52 | + currentPage: 1, | |
| 53 | + pageSize: 10, | |
| 54 | + total: 0 | |
| 55 | + } | |
| 56 | + } | |
| 57 | + }, | |
| 58 | + created() { | |
| 59 | + this.communityId = getCommunityId() | |
| 60 | + }, | |
| 61 | + methods: { | |
| 62 | + switch(data) { | |
| 63 | + this.ownerDetailOweFeeInfo.ownerId = data.ownerId | |
| 64 | + this._loadOwnerDetailOweFeeData(1, this.pagination.pageSize) | |
| 65 | + }, | |
| 66 | + handleCurrentChange(val) { | |
| 67 | + this.pagination.currentPage = val | |
| 68 | + this._loadOwnerDetailOweFeeData(val, this.pagination.pageSize) | |
| 69 | + }, | |
| 70 | + _loadOwnerDetailOweFeeData(page, row) { | |
| 71 | + const params = { | |
| 72 | + communityId: this.communityId, | |
| 73 | + ownerId: this.ownerDetailOweFeeInfo.ownerId, | |
| 74 | + page: page, | |
| 75 | + row: row | |
| 76 | + } | |
| 77 | + | |
| 78 | + queryReportOweFee(params).then(response => { | |
| 79 | + this.ownerDetailOweFeeInfo.fees = response.data | |
| 80 | + this.pagination.total = response.records | |
| 81 | + }).catch(error => { | |
| 82 | + console.error('请求失败处理', error) | |
| 83 | + }) | |
| 84 | + }, | |
| 85 | + _openBatchPayRoomFeeModal() { | |
| 86 | + this.$router.push(`/views/fee/batchPayFeeOrder?ownerId=${this.ownerDetailOweFeeInfo.ownerId}&payerObjType=3333`) | |
| 87 | + }, | |
| 88 | + } | |
| 89 | +} | |
| 90 | +</script> | |
| 91 | + | |
| 92 | +<style scoped> | |
| 93 | +.margin-top { | |
| 94 | + margin-top: 20px; | |
| 95 | +} | |
| 96 | + | |
| 97 | +.margin-top-lg { | |
| 98 | + margin-top: 30px; | |
| 99 | +} | |
| 100 | + | |
| 101 | +.text-right { | |
| 102 | + text-align: right; | |
| 103 | +} | |
| 104 | +</style> | |
| 0 | 105 | \ No newline at end of file | ... | ... |
src/components/fee/carCreateFeeAdd.vue
| 1 | 1 | <template> |
| 2 | - <el-dialog :title="$t('carCreateFeeAdd.createFee')" :visible.sync="visible" width="50%" @close="handleClose"> | |
| 2 | + <el-dialog :title="$t('carCreateFeeAdd.createFee')" :visible.sync="visible" width="40%" @close="handleClose"> | |
| 3 | 3 | <el-form :model="form" label-width="150px" ref="form"> |
| 4 | 4 | <el-form-item v-if="isMore" :label="$t('carCreateFeeAdd.chargeScope')" prop="locationTypeCd" |
| 5 | 5 | :rules="[{ required: true, message: $t('carCreateFeeAdd.requiredChargeScope') }]"> |
| ... | ... | @@ -13,7 +13,8 @@ |
| 13 | 13 | <el-input v-model="form.locationTypeCdName" disabled :placeholder="$t('carCreateFeeAdd.requiredChargeScope')" /> |
| 14 | 14 | </el-form-item> |
| 15 | 15 | |
| 16 | - <el-form-item v-if="form.locationTypeCd === '3000' && isMore" :label="$t('carCreateFeeAdd.parkingLot')" prop="paId"> | |
| 16 | + <el-form-item v-if="form.locationTypeCd === '3000' && isMore" :label="$t('carCreateFeeAdd.parkingLot')" | |
| 17 | + prop="paId"> | |
| 17 | 18 | <parking-area-select2 @change="handleParkingAreaChange" /> |
| 18 | 19 | </el-form-item> |
| 19 | 20 | |
| ... | ... | @@ -194,4 +195,9 @@ export default { |
| 194 | 195 | } |
| 195 | 196 | } |
| 196 | 197 | } |
| 197 | -</script> | |
| 198 | 198 | \ No newline at end of file |
| 199 | +</script> | |
| 200 | +<style scoped> | |
| 201 | +.el-form-item { | |
| 202 | + width: 90%; | |
| 203 | +} | |
| 204 | +</style> | |
| 199 | 205 | \ No newline at end of file | ... | ... |
src/components/fee/feeDetailHisFee.vue
| ... | ... | @@ -101,7 +101,7 @@ export default { |
| 101 | 101 | this._loadFeeDetailHisFeeData() |
| 102 | 102 | }, |
| 103 | 103 | _toRefundFee(detail) { |
| 104 | - this.$router.push(`/pages/property/propertyFee?feeId=${detail.feeId}`) | |
| 104 | + this.$router.push(`/views/fee/propertyFee?feeId=${detail.feeId}`) | |
| 105 | 105 | }, |
| 106 | 106 | dateFormat(date) { |
| 107 | 107 | return this.$moment(date).format('YYYY-MM-DD') | ... | ... |
src/components/fee/simplifyRefundDeposit.vue
| ... | ... | @@ -105,7 +105,7 @@ export default { |
| 105 | 105 | this.$router.push(`/pages/fee/refundDepositFee?roomId=${roomId}`) |
| 106 | 106 | }, |
| 107 | 107 | _toSimplifyFeeDepositFeeDetail(fee) { |
| 108 | - this.$router.push(`/pages/property/propertyFee?feeId=${fee.feeId}`) | |
| 108 | + this.$router.push(`/views/fee/propertyFee?feeId=${fee.feeId}`) | |
| 109 | 109 | }, |
| 110 | 110 | switchData(param) { |
| 111 | 111 | if (!param.roomId) return | ... | ... |
src/components/owner/ownerDetailHisFee.vue
| ... | ... | @@ -109,7 +109,7 @@ export default { |
| 109 | 109 | } |
| 110 | 110 | }, |
| 111 | 111 | _toRefundFee(detail) { |
| 112 | - this.$router.push(`/pages/property/propertyFee?feeId=${detail.feeId}`) | |
| 112 | + this.$router.push(`/views/fee/propertyFee?feeId=${detail.feeId}`) | |
| 113 | 113 | }, |
| 114 | 114 | handleCurrentChange(val) { |
| 115 | 115 | this.currentPage = val | ... | ... |
src/components/owner/ownerDetailRoomFee.vue
| ... | ... | @@ -227,7 +227,7 @@ export default { |
| 227 | 227 | this.$emit('editFee', fee) |
| 228 | 228 | }, |
| 229 | 229 | _payRoomFeeHis(fee) { |
| 230 | - this.$router.push(`/property/propertyFee?${this.objToGetParam(fee)}`) | |
| 230 | + this.$router.push(`/views/fee/propertyFee?${this.objToGetParam(fee)}`) | |
| 231 | 231 | }, |
| 232 | 232 | _deleteRoomFee(fee) { |
| 233 | 233 | this.$emit('deleteFee', { |
| ... | ... | @@ -247,7 +247,7 @@ export default { |
| 247 | 247 | this.$message.warning(this.$t('ownerDetailRoomFee.selectRoom')) |
| 248 | 248 | return |
| 249 | 249 | } |
| 250 | - this.$router.push(`/property/owePayFeeOrder?payObjId=${_ids.join(',')}&payObjType=3333&roomName=`) | |
| 250 | + this.$router.push(`/views/fee/owePayFeeOrder?payObjId=${_ids.join(',')}&payObjType=3333&roomName=`) | |
| 251 | 251 | }, |
| 252 | 252 | _printOwnOrder() { |
| 253 | 253 | const _ids = this.ownerDetailRoomFeeInfo.payerObjIds | ... | ... |
src/components/property/deleteParkingSpaceApply.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog :title="$t('deleteParkingSpaceApply.title')" :visible.sync="visible" width="30%"> | |
| 3 | + <span>{{ $t('deleteParkingSpaceApply.confirmDelete') }}</span> | |
| 4 | + <span slot="footer" class="dialog-footer"> | |
| 5 | + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button> | |
| 6 | + <el-button type="primary" @click="handleConfirm">{{ $t('common.confirm') }}</el-button> | |
| 7 | + </span> | |
| 8 | + </el-dialog> | |
| 9 | +</template> | |
| 10 | + | |
| 11 | +<script> | |
| 12 | +import { deleteParkingSpaceApply } from '@/api/property/deleteParkingSpaceApplyApi' | |
| 13 | + | |
| 14 | +export default { | |
| 15 | + name: 'DeleteParkingSpaceApply', | |
| 16 | + data() { | |
| 17 | + return { | |
| 18 | + visible: false, | |
| 19 | + applyId: '' | |
| 20 | + } | |
| 21 | + }, | |
| 22 | + methods: { | |
| 23 | + open(data) { | |
| 24 | + this.applyId = data.applyId | |
| 25 | + this.visible = true | |
| 26 | + }, | |
| 27 | + handleConfirm() { | |
| 28 | + deleteParkingSpaceApply({ applyId: this.applyId }).then(response => { | |
| 29 | + console.log(response) | |
| 30 | + this.$message.success(this.$t('deleteParkingSpaceApply.deleteSuccess')) | |
| 31 | + this.visible = false | |
| 32 | + this.$emit('refresh') | |
| 33 | + }).catch(error => { | |
| 34 | + this.$message.error(error.message) | |
| 35 | + }) | |
| 36 | + } | |
| 37 | + } | |
| 38 | +} | |
| 39 | +</script> | |
| 0 | 40 | \ No newline at end of file | ... | ... |
src/components/property/editMachineTranslate.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog :title="$t('editMachineTranslate.title')" :visible.sync="visible" width="50%"> | |
| 3 | + <el-form :model="form" label-width="120px"> | |
| 4 | + <el-form-item :label="$t('editMachineTranslate.machineCode')"> | |
| 5 | + <el-input v-model="form.machineCode" disabled></el-input> | |
| 6 | + </el-form-item> | |
| 7 | + <el-form-item :label="$t('editMachineTranslate.objectType')"> | |
| 8 | + <el-input v-model="form.typeCdName" disabled></el-input> | |
| 9 | + </el-form-item> | |
| 10 | + <el-form-item :label="$t('editMachineTranslate.objectName')"> | |
| 11 | + <el-input v-model="form.objName" disabled></el-input> | |
| 12 | + </el-form-item> | |
| 13 | + <el-form-item :label="$t('editMachineTranslate.remark')"> | |
| 14 | + <el-input type="textarea" v-model="form.remark"></el-input> | |
| 15 | + </el-form-item> | |
| 16 | + </el-form> | |
| 17 | + <span slot="footer" class="dialog-footer"> | |
| 18 | + <el-button @click="visible = false">{{$t('common.cancel')}}</el-button> | |
| 19 | + <el-button type="primary" @click="handleSubmit">{{$t('common.confirm')}}</el-button> | |
| 20 | + </span> | |
| 21 | + </el-dialog> | |
| 22 | +</template> | |
| 23 | + | |
| 24 | +<script> | |
| 25 | +import { resyncMachineTranslate } from '@/api/property/editMachineTranslateApi' | |
| 26 | + | |
| 27 | +export default { | |
| 28 | + name: 'EditMachineTranslate', | |
| 29 | + data() { | |
| 30 | + return { | |
| 31 | + visible: false, | |
| 32 | + form: { | |
| 33 | + machineTranslateId: '', | |
| 34 | + machineCode: '', | |
| 35 | + typeCdName: '', | |
| 36 | + objName: '', | |
| 37 | + remark: '' | |
| 38 | + } | |
| 39 | + } | |
| 40 | + }, | |
| 41 | + methods: { | |
| 42 | + open(data) { | |
| 43 | + this.form = { | |
| 44 | + machineTranslateId: data.machineTranslateId, | |
| 45 | + machineCode: data.machineCode, | |
| 46 | + typeCdName: data.typeCdName, | |
| 47 | + objName: data.objName, | |
| 48 | + remark: data.remark || '' | |
| 49 | + } | |
| 50 | + this.visible = true | |
| 51 | + }, | |
| 52 | + handleSubmit() { | |
| 53 | + resyncMachineTranslate(this.form).then(response => { | |
| 54 | + console.log(response) | |
| 55 | + this.$message.success(this.$t('editMachineTranslate.resyncSuccess')) | |
| 56 | + this.visible = false | |
| 57 | + this.$emit('refresh') | |
| 58 | + }).catch(error => { | |
| 59 | + this.$message.error(error.message) | |
| 60 | + }) | |
| 61 | + } | |
| 62 | + } | |
| 63 | +} | |
| 64 | +</script> | |
| 0 | 65 | \ No newline at end of file | ... | ... |
src/components/property/editParkingSpaceApply.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <el-dialog :title="$t('editParkingSpaceApply.title')" :visible.sync="visible" width="50%"> | |
| 3 | + <el-form :model="form" label-width="120px"> | |
| 4 | + <el-form-item :label="$t('editParkingSpaceApply.carNum')"> | |
| 5 | + <el-input v-model="form.carNum" disabled></el-input> | |
| 6 | + </el-form-item> | |
| 7 | + <el-form-item :label="$t('editParkingSpaceApply.carBrand')"> | |
| 8 | + <el-input v-model="form.carBrand"></el-input> | |
| 9 | + </el-form-item> | |
| 10 | + <el-form-item :label="$t('editParkingSpaceApply.carType')"> | |
| 11 | + <el-select v-model="form.carType" style="width:100%"> | |
| 12 | + <el-option v-for="item in carTypes" :key="item.value" :label="item.label" :value="item.value"> | |
| 13 | + </el-option> | |
| 14 | + </el-select> | |
| 15 | + </el-form-item> | |
| 16 | + <el-form-item :label="$t('editParkingSpaceApply.carColor')"> | |
| 17 | + <el-input v-model="form.carColor"></el-input> | |
| 18 | + </el-form-item> | |
| 19 | + <el-form-item :label="$t('editParkingSpaceApply.startTime')"> | |
| 20 | + <el-date-picker v-model="form.startTime" type="datetime" style="width:100%" value-format="yyyy-MM-dd HH:mm:ss"> | |
| 21 | + </el-date-picker> | |
| 22 | + </el-form-item> | |
| 23 | + <el-form-item :label="$t('editParkingSpaceApply.endTime')"> | |
| 24 | + <el-date-picker v-model="form.endTime" type="datetime" style="width:100%" value-format="yyyy-MM-dd HH:mm:ss"> | |
| 25 | + </el-date-picker> | |
| 26 | + </el-form-item> | |
| 27 | + <el-form-item :label="$t('editParkingSpaceApply.remark')"> | |
| 28 | + <el-input type="textarea" v-model="form.remark"></el-input> | |
| 29 | + </el-form-item> | |
| 30 | + </el-form> | |
| 31 | + <span slot="footer" class="dialog-footer"> | |
| 32 | + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button> | |
| 33 | + <el-button type="primary" @click="handleSubmit">{{ $t('common.confirm') }}</el-button> | |
| 34 | + </span> | |
| 35 | + </el-dialog> | |
| 36 | +</template> | |
| 37 | + | |
| 38 | +<script> | |
| 39 | +import { updateParkingSpaceApply } from '@/api/property/editParkingSpaceApplyApi' | |
| 40 | +import { getDict } from '@/api/community/communityApi' | |
| 41 | + | |
| 42 | +export default { | |
| 43 | + name: 'EditParkingSpaceApply', | |
| 44 | + data() { | |
| 45 | + return { | |
| 46 | + visible: false, | |
| 47 | + carTypes: [], | |
| 48 | + form: { | |
| 49 | + applyId: '', | |
| 50 | + carNum: '', | |
| 51 | + carBrand: '', | |
| 52 | + carType: '', | |
| 53 | + carColor: '', | |
| 54 | + startTime: '', | |
| 55 | + endTime: '', | |
| 56 | + remark: '' | |
| 57 | + } | |
| 58 | + } | |
| 59 | + }, | |
| 60 | + created() { | |
| 61 | + this.getCarTypes() | |
| 62 | + }, | |
| 63 | + methods: { | |
| 64 | + getCarTypes() { | |
| 65 | + getDict('car_type').then(response => { | |
| 66 | + this.carTypes = response.data.map(item => ({ | |
| 67 | + value: item.code, | |
| 68 | + label: item.name | |
| 69 | + })) | |
| 70 | + }) | |
| 71 | + }, | |
| 72 | + open(data) { | |
| 73 | + this.form = { | |
| 74 | + applyId: data.applyId, | |
| 75 | + carNum: data.carNum, | |
| 76 | + carBrand: data.carBrand, | |
| 77 | + carType: data.carType, | |
| 78 | + carColor: data.carColor, | |
| 79 | + startTime: data.startTime, | |
| 80 | + endTime: data.endTime, | |
| 81 | + remark: data.remark || '' | |
| 82 | + } | |
| 83 | + this.visible = true | |
| 84 | + }, | |
| 85 | + handleSubmit() { | |
| 86 | + updateParkingSpaceApply(this.form).then(response => { | |
| 87 | + console.log(response) | |
| 88 | + this.$message.success(this.$t('editParkingSpaceApply.updateSuccess')) | |
| 89 | + this.visible = false | |
| 90 | + this.$emit('refresh') | |
| 91 | + }).catch(error => { | |
| 92 | + this.$message.error(error.message) | |
| 93 | + }) | |
| 94 | + } | |
| 95 | + } | |
| 96 | +} | |
| 97 | +</script> | |
| 0 | 98 | \ No newline at end of file | ... | ... |
src/components/simplify/simplifyCarFee.vue
| ... | ... | @@ -265,7 +265,7 @@ export default { |
| 265 | 265 | this.$router.push(`/views/fee/payFeeOrderfeeId=${fee.feeId}`) |
| 266 | 266 | }, |
| 267 | 267 | _simplifyCarPayFeeHis(fee) { |
| 268 | - this.$router.push(`/pages/property/propertyFee?${this.objToGetParam(fee)}`) | |
| 268 | + this.$router.push(`/views/fee/propertyFee?${this.objToGetParam(fee)}`) | |
| 269 | 269 | }, |
| 270 | 270 | _simplifyCarEditFee(fee) { |
| 271 | 271 | this.$emit('editFee', fee) | ... | ... |
src/components/simplify/simplifyOwnerCar.vue
| ... | ... | @@ -15,7 +15,7 @@ |
| 15 | 15 | border> |
| 16 | 16 | <el-table-column :label="$t('simplifyOwnerCar.plateNumber')" align="center"> |
| 17 | 17 | <template #default="{row}"> |
| 18 | - <router-link :to="`/pages/car/carDetail?memberId=${row.memberId}`" target="_blank"> | |
| 18 | + <router-link :to="`/views/car/carDetail?memberId=${row.memberId}`" target="_blank"> | |
| 19 | 19 | {{row.carNum}} |
| 20 | 20 | </router-link> |
| 21 | 21 | </template> | ... | ... |
src/i18n/carI18n.js
| ... | ... | @@ -14,6 +14,7 @@ import { messages as tempCarPaymentMessages } from '../views/car/tempCarPaymentL |
| 14 | 14 | import { messages as parkingSpaceApplyManageMessages } from '../views/car/parkingSpaceApplyManageLang' |
| 15 | 15 | import { messages as addParkingSpaceApplyMessages } from '../views/car/addParkingSpaceApplyLang' |
| 16 | 16 | import { messages as auditParkingSpaceApplyMessages } from '../views/car/auditParkingSpaceApplyLang' |
| 17 | +import { messages as carDetailMessages } from '../views/car/carDetailLang.js' | |
| 17 | 18 | |
| 18 | 19 | export const messages = { |
| 19 | 20 | en: { |
| ... | ... | @@ -33,6 +34,7 @@ export const messages = { |
| 33 | 34 | ...parkingSpaceApplyManageMessages.en, |
| 34 | 35 | ...addParkingSpaceApplyMessages.en, |
| 35 | 36 | ...auditParkingSpaceApplyMessages.en, |
| 37 | + ...carDetailMessages.en, | |
| 36 | 38 | }, |
| 37 | 39 | zh: { |
| 38 | 40 | ...adminCarMessages.zh, |
| ... | ... | @@ -51,5 +53,6 @@ export const messages = { |
| 51 | 53 | ...parkingSpaceApplyManageMessages.zh, |
| 52 | 54 | ...addParkingSpaceApplyMessages.zh, |
| 53 | 55 | ...auditParkingSpaceApplyMessages.zh, |
| 56 | + ...carDetailMessages.zh, | |
| 54 | 57 | } |
| 55 | 58 | } |
| 56 | 59 | \ No newline at end of file | ... | ... |
src/router/carRouter.js
| ... | ... | @@ -79,5 +79,10 @@ export default [ |
| 79 | 79 | name: '/views/car/auditParkingSpaceApply', |
| 80 | 80 | component: () => import('@/views/car/auditParkingSpaceApply.vue') |
| 81 | 81 | }, |
| 82 | + { | |
| 83 | + path:'/views/car/carDetail', | |
| 84 | + name:'/views/car/carDetail', | |
| 85 | + component: () => import('@/views/car/carDetail.vue') | |
| 86 | + }, | |
| 82 | 87 | |
| 83 | 88 | ] |
| 84 | 89 | \ No newline at end of file | ... | ... |
src/views/car/carDetail.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="car-detail-container"> | |
| 3 | + <div class="white-bg padding-left padding-right padding-top border-radius-top"> | |
| 4 | + <el-row type="flex" justify="space-between"> | |
| 5 | + <div class="text-title"> | |
| 6 | + {{ $t('carDetail.vehicleInfo') }} | |
| 7 | + </div> | |
| 8 | + <div> | |
| 9 | + <el-button type="primary" size="small" style="margin-left:10px" v-if="hasPrivilege('502023032804261679')" | |
| 10 | + @click="_openEditDetailOwnerCar()"> | |
| 11 | + {{ $t('common.edit') }} | |
| 12 | + </el-button> | |
| 13 | + </div> | |
| 14 | + </el-row> | |
| 15 | + | |
| 16 | + <!-- Vehicle Information --> | |
| 17 | + <div class="margin-top"> | |
| 18 | + <el-form class="text-left"> | |
| 19 | + <el-row :gutter="20"> | |
| 20 | + <el-col :span="6"> | |
| 21 | + <el-form-item :label="$t('carDetail.licensePlate')"> | |
| 22 | + <label>{{ carDetailInfo.carNum || '-' }}</label> | |
| 23 | + </el-form-item> | |
| 24 | + </el-col> | |
| 25 | + <el-col :span="6"> | |
| 26 | + <el-form-item :label="$t('carDetail.carBrand')"> | |
| 27 | + <label>{{ carDetailInfo.carBrand || '-' }}</label> | |
| 28 | + </el-form-item> | |
| 29 | + </el-col> | |
| 30 | + <el-col :span="6"> | |
| 31 | + <el-form-item :label="$t('carDetail.carType')"> | |
| 32 | + <label>{{ carDetailInfo.leaseTypeName || '-' }}</label> | |
| 33 | + </el-form-item> | |
| 34 | + </el-col> | |
| 35 | + <el-col :span="6"> | |
| 36 | + <el-form-item :label="$t('carDetail.color')"> | |
| 37 | + <label>{{ carDetailInfo.carColor || '-' }}</label> | |
| 38 | + </el-form-item> | |
| 39 | + </el-col> | |
| 40 | + </el-row> | |
| 41 | + | |
| 42 | + <el-row :gutter="20"> | |
| 43 | + <el-col :span="6"> | |
| 44 | + <el-form-item :label="$t('carDetail.licenseType')"> | |
| 45 | + <label>{{ carDetailInfo.carTypeName || '-' }}</label> | |
| 46 | + </el-form-item> | |
| 47 | + </el-col> | |
| 48 | + <el-col :span="6"> | |
| 49 | + <el-form-item :label="$t('carDetail.leaseStart')"> | |
| 50 | + <label>{{ carDetailInfo.startTime || '-' }}</label> | |
| 51 | + </el-form-item> | |
| 52 | + </el-col> | |
| 53 | + <el-col :span="6"> | |
| 54 | + <el-form-item :label="$t('carDetail.leaseEnd')"> | |
| 55 | + <label>{{ carDetailInfo.endTime || '-' }}</label> | |
| 56 | + </el-form-item> | |
| 57 | + </el-col> | |
| 58 | + <el-col :span="6"> | |
| 59 | + <el-form-item :label="$t('carDetail.remark')"> | |
| 60 | + <label>{{ carDetailInfo.remark || '-' }}</label> | |
| 61 | + </el-form-item> | |
| 62 | + </el-col> | |
| 63 | + </el-row> | |
| 64 | + | |
| 65 | + <el-row :gutter="20"> | |
| 66 | + <el-col :span="6"> | |
| 67 | + <el-form-item :label="$t('carDetail.parkingLot')"> | |
| 68 | + <label>{{ carDetailInfo.areaNum || '-' }}</label> | |
| 69 | + </el-form-item> | |
| 70 | + </el-col> | |
| 71 | + <el-col :span="6"> | |
| 72 | + <el-form-item :label="$t('carDetail.parkingSpace')"> | |
| 73 | + <label>{{ carDetailInfo.num || '-' }}</label> | |
| 74 | + </el-form-item> | |
| 75 | + </el-col> | |
| 76 | + <el-col :span="6"> | |
| 77 | + <el-form-item :label="$t('carDetail.status')"> | |
| 78 | + <label>{{ carDetailInfo.stateName || '-' }}</label> | |
| 79 | + </el-form-item> | |
| 80 | + </el-col> | |
| 81 | + <el-col :span="6"> | |
| 82 | + <el-form-item :label="$t('carDetail.relatedHouse')"> | |
| 83 | + <label>{{ carDetailInfo.roomName || '-' }}</label> | |
| 84 | + </el-form-item> | |
| 85 | + </el-col> | |
| 86 | + </el-row> | |
| 87 | + </el-form> | |
| 88 | + </div> | |
| 89 | + | |
| 90 | + <divider/> | |
| 91 | + | |
| 92 | + <div class="margin-top-sm"> | |
| 93 | + <el-tabs v-model="carDetailInfo._currentTab" @tab-click="changeTab(carDetailInfo._currentTab)"> | |
| 94 | + <el-tab-pane :label="$t('carDetail.vehicleFee')" name="carDetailFee"></el-tab-pane> | |
| 95 | + <el-tab-pane :label="$t('carDetail.paymentRecord')" name="ownerDetailHisFee"></el-tab-pane> | |
| 96 | + <el-tab-pane :label="$t('carDetail.modificationRecord')" name="carDetailHis"></el-tab-pane> | |
| 97 | + <el-tab-pane :label="$t('carDetail.memberVehicle')" name="carDetailMember"></el-tab-pane> | |
| 98 | + <el-tab-pane :label="$t('carDetail.ownerInfo')" name="carDetailOwner"></el-tab-pane> | |
| 99 | + <el-tab-pane :label="$t('carDetail.ownerHouse')" name="ownerDetailRoom"></el-tab-pane> | |
| 100 | + <el-tab-pane :label="$t('carDetail.ownerVehicle')" name="ownerDetailCar"></el-tab-pane> | |
| 101 | + <el-tab-pane :label="$t('carDetail.ownerArrears')" name="ownerDetailOweFee"></el-tab-pane> | |
| 102 | + <el-tab-pane :label="$t('carDetail.licenseSync')" name="carDetailTransactionCar"></el-tab-pane> | |
| 103 | + <el-tab-pane :label="$t('carDetail.parkingApplication')" name="carDetailApplyParkingSpace"></el-tab-pane> | |
| 104 | + <el-tab-pane :label="$t('carDetail.accessRecord')" name="carDetailCarInout"></el-tab-pane> | |
| 105 | + <el-tab-pane :label="$t('carDetail.coupon')" name="carDetailCoupon"></el-tab-pane> | |
| 106 | + <el-tab-pane :label="$t('carDetail.couponVerification')" name="carDetailCouponOrder"></el-tab-pane> | |
| 107 | + </el-tabs> | |
| 108 | + </div> | |
| 109 | + </div> | |
| 110 | + | |
| 111 | + <div class="white-bg padding-left padding-right padding-top border-radius-bottom"> | |
| 112 | + <car-detail-fee v-if="carDetailInfo._currentTab === 'carDetailFee'" ref="carDetailFee"></car-detail-fee> | |
| 113 | + <owner-detail-room v-if="carDetailInfo._currentTab === 'ownerDetailRoom'" | |
| 114 | + ref="ownerDetailRoom"></owner-detail-room> | |
| 115 | + <owner-detail-car v-if="carDetailInfo._currentTab === 'ownerDetailCar'" ref="ownerDetailCar"></owner-detail-car> | |
| 116 | + <owner-detail-owe-fee v-if="carDetailInfo._currentTab === 'ownerDetailOweFee'" | |
| 117 | + ref="ownerDetailOweFee"></owner-detail-owe-fee> | |
| 118 | + <owner-detail-his-fee v-if="carDetailInfo._currentTab === 'ownerDetailHisFee'" | |
| 119 | + ref="ownerDetailHisFee"></owner-detail-his-fee> | |
| 120 | + <car-detail-his v-if="carDetailInfo._currentTab === 'carDetailHis'" ref="carDetailHis"></car-detail-his> | |
| 121 | + <car-detail-member v-if="carDetailInfo._currentTab === 'carDetailMember'" | |
| 122 | + ref="carDetailMember"></car-detail-member> | |
| 123 | + <car-detail-owner v-if="carDetailInfo._currentTab === 'carDetailOwner'" ref="carDetailOwner"></car-detail-owner> | |
| 124 | + <car-detail-transaction-car v-if="carDetailInfo._currentTab === 'carDetailTransactionCar'" | |
| 125 | + ref="carDetailTransactionCar"></car-detail-transaction-car> | |
| 126 | + <car-detail-apply-parking-space v-if="carDetailInfo._currentTab === 'carDetailApplyParkingSpace'" | |
| 127 | + ref="carDetailApplyParkingSpace"></car-detail-apply-parking-space> | |
| 128 | + <car-detail-car-inout v-if="carDetailInfo._currentTab === 'carDetailCarInout'" | |
| 129 | + ref="carDetailCarInout"></car-detail-car-inout> | |
| 130 | + <car-detail-coupon v-if="carDetailInfo._currentTab === 'carDetailCoupon'" | |
| 131 | + ref="carDetailCoupon"></car-detail-coupon> | |
| 132 | + <car-detail-coupon-order v-if="carDetailInfo._currentTab === 'carDetailCouponOrder'" | |
| 133 | + ref="carDetailCouponOrder"></car-detail-coupon-order> | |
| 134 | + </div> | |
| 135 | + | |
| 136 | + <edit-car ref="editCar"></edit-car> | |
| 137 | + </div> | |
| 138 | +</template> | |
| 139 | + | |
| 140 | +<script> | |
| 141 | +import CarDetailFee from '@/components/car/carDetailFee' | |
| 142 | +import OwnerDetailRoom from '@/components/owner/ownerDetailRoom' | |
| 143 | +import OwnerDetailCar from '@/components/owner/ownerDetailCar' | |
| 144 | +import OwnerDetailOweFee from '@/components/car/ownerDetailOweFee' | |
| 145 | +import OwnerDetailHisFee from '@/components/owner/ownerDetailHisFee' | |
| 146 | +import CarDetailHis from '@/components/system/carDetailHis' | |
| 147 | +import CarDetailMember from '@/components/car/carDetailMember' | |
| 148 | +import CarDetailOwner from '@/components/fee/carDetailOwner' | |
| 149 | +import CarDetailTransactionCar from '@/components/car/carDetailTransactionCar' | |
| 150 | +import CarDetailApplyParkingSpace from '@/components/car/carDetailApplyParkingSpace' | |
| 151 | +import CarDetailCarInout from '@/components/car/carDetailCarInout' | |
| 152 | +import CarDetailCoupon from '@/components/car/carDetailCoupon' | |
| 153 | +import CarDetailCouponOrder from '@/components/car/carDetailCouponOrder' | |
| 154 | +import EditCar from '@/components/car/editCar' | |
| 155 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 156 | +import { getOwnerCarDetail } from '@/api/car/carDetailApi' | |
| 157 | +import Divider from '@/components/system/divider' | |
| 158 | + | |
| 159 | +export default { | |
| 160 | + name: 'CarDetail', | |
| 161 | + components: { | |
| 162 | + CarDetailFee, | |
| 163 | + OwnerDetailRoom, | |
| 164 | + OwnerDetailCar, | |
| 165 | + OwnerDetailOweFee, | |
| 166 | + OwnerDetailHisFee, | |
| 167 | + CarDetailHis, | |
| 168 | + CarDetailMember, | |
| 169 | + CarDetailOwner, | |
| 170 | + CarDetailTransactionCar, | |
| 171 | + CarDetailApplyParkingSpace, | |
| 172 | + CarDetailCarInout, | |
| 173 | + CarDetailCoupon, | |
| 174 | + CarDetailCouponOrder, | |
| 175 | + EditCar, | |
| 176 | + Divider | |
| 177 | + }, | |
| 178 | + data() { | |
| 179 | + return { | |
| 180 | + carDetailInfo: { | |
| 181 | + memberId: '', | |
| 182 | + carId: '', | |
| 183 | + carNum: '', | |
| 184 | + carTypeCd: '', | |
| 185 | + carTypeCdName: '', | |
| 186 | + carType: '', | |
| 187 | + carTypeName: '', | |
| 188 | + startTime: '', | |
| 189 | + endTime: '', | |
| 190 | + leaseType: '', | |
| 191 | + leaseTypeName: '', | |
| 192 | + areaNum: '', | |
| 193 | + num: '', | |
| 194 | + remark: '', | |
| 195 | + stateName: '', | |
| 196 | + carColor: '', | |
| 197 | + carBrand: '', | |
| 198 | + ownerId: '', | |
| 199 | + roomName: '', | |
| 200 | + carNumType: '', | |
| 201 | + paId: '', | |
| 202 | + _currentTab: 'carDetailFee', | |
| 203 | + needBack: false | |
| 204 | + }, | |
| 205 | + communityId: '' | |
| 206 | + } | |
| 207 | + }, | |
| 208 | + created() { | |
| 209 | + this.communityId = getCommunityId() | |
| 210 | + this.carDetailInfo.memberId = this.$route.query.memberId | |
| 211 | + if (this.carDetailInfo.memberId) { | |
| 212 | + this._loadCarDetailInfo() | |
| 213 | + } | |
| 214 | + }, | |
| 215 | + methods: { | |
| 216 | + _loadCarDetailInfo() { | |
| 217 | + const params = { | |
| 218 | + page: 1, | |
| 219 | + row: 1, | |
| 220 | + memberId: this.carDetailInfo.memberId, | |
| 221 | + communityId: this.communityId | |
| 222 | + } | |
| 223 | + | |
| 224 | + getOwnerCarDetail(params) | |
| 225 | + .then(response => { | |
| 226 | + const carInfo = response.data[0] | |
| 227 | + Object.assign(this.carDetailInfo, carInfo) | |
| 228 | + this.changeTab(this.carDetailInfo._currentTab) | |
| 229 | + }) | |
| 230 | + .catch(error => { | |
| 231 | + console.error('Failed to load car detail:', error) | |
| 232 | + }) | |
| 233 | + }, | |
| 234 | + changeTab(tab) { | |
| 235 | + this.carDetailInfo._currentTab = tab | |
| 236 | + const tabData = { | |
| 237 | + memberId: this.carDetailInfo.memberId, | |
| 238 | + carId: this.carDetailInfo.carId, | |
| 239 | + ownerId: this.carDetailInfo.ownerId, | |
| 240 | + carNum: this.carDetailInfo.carNum, | |
| 241 | + paId: this.carDetailInfo.paId, | |
| 242 | + areaNum: this.carDetailInfo.areaNum | |
| 243 | + } | |
| 244 | + setTimeout(() => { | |
| 245 | + if (this.$refs[tab]) { | |
| 246 | + if(tab === 'ownerDetailHisFee'){ | |
| 247 | + this.$refs[tab].open(this.carDetailInfo.ownerId) | |
| 248 | + }else{ | |
| 249 | + this.$refs[tab].open(tabData) | |
| 250 | + } | |
| 251 | + } | |
| 252 | + }, 100) | |
| 253 | + | |
| 254 | + }, | |
| 255 | + _openEditDetailOwnerCar() { | |
| 256 | + this.$refs.editCar.open(this.carDetailInfo) | |
| 257 | + }, | |
| 258 | + } | |
| 259 | +} | |
| 260 | +</script> | |
| 261 | + | |
| 262 | +<style scoped> | |
| 263 | +.white-bg { | |
| 264 | + background: #fff; | |
| 265 | +} | |
| 266 | + | |
| 267 | +.padding-left { | |
| 268 | + padding-left: 20px; | |
| 269 | +} | |
| 270 | + | |
| 271 | +.padding-right { | |
| 272 | + padding-right: 20px; | |
| 273 | +} | |
| 274 | + | |
| 275 | +.padding-top { | |
| 276 | + padding-top: 20px; | |
| 277 | +} | |
| 278 | + | |
| 279 | +.border-radius-top { | |
| 280 | + border-radius: 4px 4px 0 0; | |
| 281 | +} | |
| 282 | + | |
| 283 | +.border-radius-bottom { | |
| 284 | + border-radius: 0 0 4px 4px; | |
| 285 | +} | |
| 286 | + | |
| 287 | +.margin-top { | |
| 288 | + margin-top: 20px; | |
| 289 | +} | |
| 290 | + | |
| 291 | +.margin-top-sm { | |
| 292 | + margin-top: 10px; | |
| 293 | +} | |
| 294 | + | |
| 295 | +.text-title { | |
| 296 | + font-size: 18px; | |
| 297 | + font-weight: bold; | |
| 298 | +} | |
| 299 | +</style> | |
| 0 | 300 | \ No newline at end of file | ... | ... |
src/views/car/carDetailApplyParkingSpaceLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + carDetailApplyParkingSpace: { | |
| 4 | + applyParkingSpace: 'Apply Parking Space', | |
| 5 | + applyId: 'Apply ID', | |
| 6 | + carNum: 'Car Number', | |
| 7 | + parkingSpace: 'Parking Space', | |
| 8 | + none: 'None', | |
| 9 | + carBrand: 'Car Brand', | |
| 10 | + carType: 'Car Type', | |
| 11 | + color: 'Color', | |
| 12 | + startTime: 'Start Time', | |
| 13 | + endTime: 'End Time', | |
| 14 | + applicant: 'Applicant', | |
| 15 | + phone: 'Phone', | |
| 16 | + auditResult: 'Audit Result', | |
| 17 | + operation: 'Operation', | |
| 18 | + audit: 'Audit', | |
| 19 | + edit: 'Edit', | |
| 20 | + delete: 'Delete', | |
| 21 | + pendingReview: 'Pending Review', | |
| 22 | + pendingPayment: 'Pending Payment', | |
| 23 | + completed: 'Completed', | |
| 24 | + auditFailed: 'Audit Failed', | |
| 25 | + abnormalStatus: 'Abnormal Status', | |
| 26 | + familyCar: 'Family Car', | |
| 27 | + bus: 'Bus', | |
| 28 | + truck: 'Truck', | |
| 29 | + abnormalVehicle: 'Abnormal Vehicle' | |
| 30 | + } | |
| 31 | + }, | |
| 32 | + zh: { | |
| 33 | + carDetailApplyParkingSpace: { | |
| 34 | + applyParkingSpace: '申请车位', | |
| 35 | + applyId: '申请ID', | |
| 36 | + carNum: '车牌号', | |
| 37 | + parkingSpace: '停车位', | |
| 38 | + none: '无', | |
| 39 | + carBrand: '汽车品牌', | |
| 40 | + carType: '车辆类型', | |
| 41 | + color: '颜色', | |
| 42 | + startTime: '起租时间', | |
| 43 | + endTime: '结租时间', | |
| 44 | + applicant: '申请人', | |
| 45 | + phone: '手机号', | |
| 46 | + auditResult: '审核结果', | |
| 47 | + operation: '操作', | |
| 48 | + audit: '审核', | |
| 49 | + edit: '修改', | |
| 50 | + delete: '删除', | |
| 51 | + pendingReview: '待审核', | |
| 52 | + pendingPayment: '待缴费', | |
| 53 | + completed: '完成', | |
| 54 | + auditFailed: '审核失败', | |
| 55 | + abnormalStatus: '状态异常', | |
| 56 | + familyCar: '家用小汽车', | |
| 57 | + bus: '客车', | |
| 58 | + truck: '货车', | |
| 59 | + abnormalVehicle: '异常车辆' | |
| 60 | + } | |
| 61 | + } | |
| 62 | +} | |
| 0 | 63 | \ No newline at end of file | ... | ... |
src/views/car/carDetailCarInoutLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + carDetailCarInout: { | |
| 4 | + entryImage: 'Entry Image', | |
| 5 | + inoutId: 'Inout ID', | |
| 6 | + carStatus: 'Car Status', | |
| 7 | + entry: 'Entry', | |
| 8 | + exit: 'Exit', | |
| 9 | + carNum: 'Car Number', | |
| 10 | + parkingLot: 'Parking Lot', | |
| 11 | + billingRule: 'Billing Rule', | |
| 12 | + carType: 'Car Type', | |
| 13 | + entryTime: 'Entry Time', | |
| 14 | + exitTime: 'Exit Time', | |
| 15 | + parkingTime: 'Parking Time', | |
| 16 | + hour: 'hour', | |
| 17 | + minute: 'minute', | |
| 18 | + chargeAmount: 'Charge Amount', | |
| 19 | + remark: 'Remark' | |
| 20 | + } | |
| 21 | + }, | |
| 22 | + zh: { | |
| 23 | + carDetailCarInout: { | |
| 24 | + entryImage: '进场图', | |
| 25 | + inoutId: '进出场编号', | |
| 26 | + carStatus: '车辆状态', | |
| 27 | + entry: '进场', | |
| 28 | + exit: '出场', | |
| 29 | + carNum: '车牌号', | |
| 30 | + parkingLot: '停车场', | |
| 31 | + billingRule: '计费规则', | |
| 32 | + carType: '车牌类型', | |
| 33 | + entryTime: '进场时间', | |
| 34 | + exitTime: '出场时间', | |
| 35 | + parkingTime: '停车时间', | |
| 36 | + hour: '小时', | |
| 37 | + minute: '分', | |
| 38 | + chargeAmount: '收费金额', | |
| 39 | + remark: '说明' | |
| 40 | + } | |
| 41 | + } | |
| 42 | +} | |
| 0 | 43 | \ No newline at end of file | ... | ... |
src/views/car/carDetailCouponLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + carDetailCoupon: { | |
| 4 | + car: 'Car', | |
| 5 | + coupon: 'Coupon', | |
| 6 | + shop: 'Shop', | |
| 7 | + parkingLot: 'Parking Lot', | |
| 8 | + giveWay: 'Give Way', | |
| 9 | + couponType: 'Coupon Type', | |
| 10 | + value: 'Value', | |
| 11 | + startTime: 'Start Time', | |
| 12 | + endTime: 'End Time', | |
| 13 | + giveTime: 'Give Time', | |
| 14 | + status: 'Status', | |
| 15 | + remark: 'Remark' | |
| 16 | + } | |
| 17 | + }, | |
| 18 | + zh: { | |
| 19 | + carDetailCoupon: { | |
| 20 | + car: '车辆', | |
| 21 | + coupon: '优惠券', | |
| 22 | + shop: '商家店铺', | |
| 23 | + parkingLot: '停车场', | |
| 24 | + giveWay: '赠送方式', | |
| 25 | + couponType: '优惠方式', | |
| 26 | + value: '面值', | |
| 27 | + startTime: '开始时间', | |
| 28 | + endTime: '结束时间', | |
| 29 | + giveTime: '赠送时间', | |
| 30 | + status: '状态', | |
| 31 | + remark: '说明' | |
| 32 | + } | |
| 33 | + } | |
| 34 | +} | |
| 0 | 35 | \ No newline at end of file | ... | ... |
src/views/car/carDetailCouponOrderLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + carDetailCouponOrder: { | |
| 4 | + orderId: 'Order ID', | |
| 5 | + carNum: 'Car Number', | |
| 6 | + coupon: 'Coupon', | |
| 7 | + shop: 'Shop', | |
| 8 | + parkingLot: 'Parking Lot', | |
| 9 | + machine: 'Machine', | |
| 10 | + verifyTime: 'Verify Time', | |
| 11 | + remark: 'Remark' | |
| 12 | + } | |
| 13 | + }, | |
| 14 | + zh: { | |
| 15 | + carDetailCouponOrder: { | |
| 16 | + orderId: '核销订单', | |
| 17 | + carNum: '核销车辆', | |
| 18 | + coupon: '优惠券', | |
| 19 | + shop: '商家店铺', | |
| 20 | + parkingLot: '停车场', | |
| 21 | + machine: '道闸', | |
| 22 | + verifyTime: '核销时间', | |
| 23 | + remark: '说明' | |
| 24 | + } | |
| 25 | + } | |
| 26 | +} | |
| 0 | 27 | \ No newline at end of file | ... | ... |
src/views/car/carDetailFeeLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + carDetailFee: { | |
| 4 | + createFee: 'Create Fee', | |
| 5 | + feeItem: 'Fee Item', | |
| 6 | + feeFlag: 'Fee Flag', | |
| 7 | + feeType: 'Fee Type', | |
| 8 | + amountReceivable: 'Amount Receivable', | |
| 9 | + accountingTime: 'Accounting Time', | |
| 10 | + receivablePeriod: 'Receivable Period', | |
| 11 | + remark: 'Remark', | |
| 12 | + status: 'Status', | |
| 13 | + operation: 'Operation', | |
| 14 | + previousReading: 'Previous Reading', | |
| 15 | + currentReading: 'Current Reading', | |
| 16 | + unitPrice: 'Unit Price', | |
| 17 | + additionalFee: 'Additional Fee', | |
| 18 | + fixedFee: 'Fixed Fee', | |
| 19 | + payment: 'Payment', | |
| 20 | + history: 'History', | |
| 21 | + cancel: 'Cancel', | |
| 22 | + change: 'Change', | |
| 23 | + detail: 'Detail', | |
| 24 | + paymentNotice: 'Please go to the business acceptance page for payment' | |
| 25 | + } | |
| 26 | + }, | |
| 27 | + zh: { | |
| 28 | + carDetailFee: { | |
| 29 | + createFee: '创建费用', | |
| 30 | + feeItem: '费用项目', | |
| 31 | + feeFlag: '费用标识', | |
| 32 | + feeType: '费用类型', | |
| 33 | + amountReceivable: '应收金额', | |
| 34 | + accountingTime: '建账时间', | |
| 35 | + receivablePeriod: '应收时间段', | |
| 36 | + remark: '说明', | |
| 37 | + status: '状态', | |
| 38 | + operation: '操作', | |
| 39 | + previousReading: '上期度数', | |
| 40 | + currentReading: '本期度数', | |
| 41 | + unitPrice: '单价', | |
| 42 | + additionalFee: '附加费', | |
| 43 | + fixedFee: '固定费', | |
| 44 | + payment: '缴费', | |
| 45 | + history: '历史', | |
| 46 | + cancel: '取消', | |
| 47 | + change: '变更', | |
| 48 | + detail: '详情', | |
| 49 | + paymentNotice: '缴费请到业务受理页面缴费' | |
| 50 | + } | |
| 51 | + } | |
| 52 | +} | |
| 0 | 53 | \ No newline at end of file | ... | ... |
src/views/car/carDetailLang.js
0 → 100644
| 1 | + | |
| 2 | +export const messages = { | |
| 3 | + en: { | |
| 4 | + carDetail: { | |
| 5 | + vehicleInfo: 'Vehicle Information', | |
| 6 | + licensePlate: 'License Plate:', | |
| 7 | + carBrand: 'Car Brand:', | |
| 8 | + carType: 'Car Type:', | |
| 9 | + color: 'Color:', | |
| 10 | + licenseType: 'License Type:', | |
| 11 | + leaseStart: 'Lease Start:', | |
| 12 | + leaseEnd: 'Lease End:', | |
| 13 | + remark: 'Remark:', | |
| 14 | + parkingLot: 'Parking Lot:', | |
| 15 | + parkingSpace: 'Parking Space:', | |
| 16 | + status: 'Status:', | |
| 17 | + relatedHouse: 'Related House:', | |
| 18 | + vehicleFee: 'Vehicle Fee', | |
| 19 | + paymentRecord: 'Payment Record', | |
| 20 | + modificationRecord: 'Modification Record', | |
| 21 | + memberVehicle: 'Member Vehicle', | |
| 22 | + ownerInfo: 'Owner Info', | |
| 23 | + ownerHouse: 'Owner House', | |
| 24 | + ownerVehicle: 'Owner Vehicle', | |
| 25 | + ownerArrears: 'Owner Arrears', | |
| 26 | + licenseSync: 'License Sync', | |
| 27 | + parkingApplication: 'Parking Application', | |
| 28 | + accessRecord: 'Access Record', | |
| 29 | + coupon: 'Coupon', | |
| 30 | + couponVerification: 'Coupon Verification' | |
| 31 | + }, | |
| 32 | + carDetailFee: { | |
| 33 | + createFee: 'Create Fee', | |
| 34 | + feeItem: 'Fee Item', | |
| 35 | + feeFlag: 'Fee Flag', | |
| 36 | + feeType: 'Fee Type', | |
| 37 | + amountReceivable: 'Amount Receivable', | |
| 38 | + accountingTime: 'Accounting Time', | |
| 39 | + receivablePeriod: 'Receivable Period', | |
| 40 | + remark: 'Remark', | |
| 41 | + status: 'Status', | |
| 42 | + operation: 'Operation', | |
| 43 | + previousReading: 'Previous Reading', | |
| 44 | + currentReading: 'Current Reading', | |
| 45 | + unitPrice: 'Unit Price', | |
| 46 | + additionalFee: 'Additional Fee', | |
| 47 | + fixedFee: 'Fixed Fee', | |
| 48 | + payment: 'Payment', | |
| 49 | + history: 'History', | |
| 50 | + cancel: 'Cancel', | |
| 51 | + change: 'Change', | |
| 52 | + detail: 'Detail', | |
| 53 | + paymentNotice: 'Please go to the business acceptance page for payment' | |
| 54 | + }, | |
| 55 | + carDetailTransactionCar: { | |
| 56 | + syncId: 'Sync ID', | |
| 57 | + deviceCode: 'Device Code', | |
| 58 | + objectType: 'Object Type', | |
| 59 | + objectName: 'Object Name', | |
| 60 | + command: 'Command', | |
| 61 | + status: 'Status', | |
| 62 | + remark: 'Remark', | |
| 63 | + syncTime: 'Sync Time', | |
| 64 | + operation: 'Operation', | |
| 65 | + resync: 'Resync' | |
| 66 | + }, | |
| 67 | + carDetailApplyParkingSpace: { | |
| 68 | + applyParkingSpace: 'Apply Parking Space', | |
| 69 | + applyId: 'Apply ID', | |
| 70 | + carNum: 'Car Number', | |
| 71 | + parkingSpace: 'Parking Space', | |
| 72 | + none: 'None', | |
| 73 | + carBrand: 'Car Brand', | |
| 74 | + carType: 'Car Type', | |
| 75 | + color: 'Color', | |
| 76 | + startTime: 'Start Time', | |
| 77 | + endTime: 'End Time', | |
| 78 | + applicant: 'Applicant', | |
| 79 | + phone: 'Phone', | |
| 80 | + auditResult: 'Audit Result', | |
| 81 | + operation: 'Operation', | |
| 82 | + audit: 'Audit', | |
| 83 | + edit: 'Edit', | |
| 84 | + delete: 'Delete', | |
| 85 | + pendingReview: 'Pending Review', | |
| 86 | + pendingPayment: 'Pending Payment', | |
| 87 | + completed: 'Completed', | |
| 88 | + auditFailed: 'Audit Failed', | |
| 89 | + abnormalStatus: 'Abnormal Status', | |
| 90 | + familyCar: 'Family Car', | |
| 91 | + bus: 'Bus', | |
| 92 | + truck: 'Truck', | |
| 93 | + abnormalVehicle: 'Abnormal Vehicle' | |
| 94 | + }, | |
| 95 | + carDetailCarInout: { | |
| 96 | + entryImage: 'Entry Image', | |
| 97 | + inoutId: 'Inout ID', | |
| 98 | + carStatus: 'Car Status', | |
| 99 | + entry: 'Entry', | |
| 100 | + exit: 'Exit', | |
| 101 | + carNum: 'Car Number', | |
| 102 | + parkingLot: 'Parking Lot', | |
| 103 | + billingRule: 'Billing Rule', | |
| 104 | + carType: 'Car Type', | |
| 105 | + entryTime: 'Entry Time', | |
| 106 | + exitTime: 'Exit Time', | |
| 107 | + parkingTime: 'Parking Time', | |
| 108 | + hour: 'hour', | |
| 109 | + minute: 'minute', | |
| 110 | + chargeAmount: 'Charge Amount', | |
| 111 | + remark: 'Remark' | |
| 112 | + }, | |
| 113 | + carDetailCoupon: { | |
| 114 | + car: 'Car', | |
| 115 | + coupon: 'Coupon', | |
| 116 | + shop: 'Shop', | |
| 117 | + parkingLot: 'Parking Lot', | |
| 118 | + giveWay: 'Give Way', | |
| 119 | + couponType: 'Coupon Type', | |
| 120 | + value: 'Value', | |
| 121 | + startTime: 'Start Time', | |
| 122 | + endTime: 'End Time', | |
| 123 | + giveTime: 'Give Time', | |
| 124 | + status: 'Status', | |
| 125 | + remark: 'Remark' | |
| 126 | + }, | |
| 127 | + carDetailCouponOrder: { | |
| 128 | + orderId: 'Order ID', | |
| 129 | + carNum: 'Car Number', | |
| 130 | + coupon: 'Coupon', | |
| 131 | + shop: 'Shop', | |
| 132 | + parkingLot: 'Parking Lot', | |
| 133 | + machine: 'Machine', | |
| 134 | + verifyTime: 'Verify Time', | |
| 135 | + remark: 'Remark' | |
| 136 | + } | |
| 137 | + }, | |
| 138 | + zh: { | |
| 139 | + carDetail: { | |
| 140 | + vehicleInfo: '车辆信息', | |
| 141 | + licensePlate: '车牌号:', | |
| 142 | + carBrand: '车品牌:', | |
| 143 | + carType: '车类型:', | |
| 144 | + color: '颜色:', | |
| 145 | + licenseType: '车牌类型:', | |
| 146 | + leaseStart: '起租时间:', | |
| 147 | + leaseEnd: '结租时间:', | |
| 148 | + remark: '备注:', | |
| 149 | + parkingLot: '停车场:', | |
| 150 | + parkingSpace: '车位:', | |
| 151 | + status: '状态:', | |
| 152 | + relatedHouse: '关联房屋:', | |
| 153 | + vehicleFee: '车辆费用', | |
| 154 | + paymentRecord: '缴费记录', | |
| 155 | + modificationRecord: '修改记录', | |
| 156 | + memberVehicle: '成员车辆', | |
| 157 | + ownerInfo: '业主信息', | |
| 158 | + ownerHouse: '业主房屋', | |
| 159 | + ownerVehicle: '业主车辆', | |
| 160 | + ownerArrears: '业主欠费', | |
| 161 | + licenseSync: '车牌同步', | |
| 162 | + parkingApplication: '车位申请', | |
| 163 | + accessRecord: '出入场记录', | |
| 164 | + coupon: '优惠券', | |
| 165 | + couponVerification: '优惠券核销' | |
| 166 | + }, | |
| 167 | + carDetailFee: { | |
| 168 | + createFee: '创建费用', | |
| 169 | + feeItem: '费用项目', | |
| 170 | + feeFlag: '费用标识', | |
| 171 | + feeType: '费用类型', | |
| 172 | + amountReceivable: '应收金额', | |
| 173 | + accountingTime: '建账时间', | |
| 174 | + receivablePeriod: '应收时间段', | |
| 175 | + remark: '说明', | |
| 176 | + status: '状态', | |
| 177 | + operation: '操作', | |
| 178 | + previousReading: '上期度数', | |
| 179 | + currentReading: '本期度数', | |
| 180 | + unitPrice: '单价', | |
| 181 | + additionalFee: '附加费', | |
| 182 | + fixedFee: '固定费', | |
| 183 | + payment: '缴费', | |
| 184 | + history: '历史', | |
| 185 | + cancel: '取消', | |
| 186 | + change: '变更', | |
| 187 | + detail: '详情', | |
| 188 | + paymentNotice: '缴费请到业务受理页面缴费' | |
| 189 | + }, | |
| 190 | + carDetailTransactionCar: { | |
| 191 | + syncId: '同步ID', | |
| 192 | + deviceCode: '设备编码', | |
| 193 | + objectType: '对象类型', | |
| 194 | + objectName: '对象名称', | |
| 195 | + command: '指令', | |
| 196 | + status: '状态', | |
| 197 | + remark: '说明', | |
| 198 | + syncTime: '同步时间', | |
| 199 | + operation: '操作', | |
| 200 | + resync: '重新同步' | |
| 201 | + }, | |
| 202 | + carDetailApplyParkingSpace: { | |
| 203 | + applyParkingSpace: '申请车位', | |
| 204 | + applyId: '申请ID', | |
| 205 | + carNum: '车牌号', | |
| 206 | + parkingSpace: '停车位', | |
| 207 | + none: '无', | |
| 208 | + carBrand: '汽车品牌', | |
| 209 | + carType: '车辆类型', | |
| 210 | + color: '颜色', | |
| 211 | + startTime: '起租时间', | |
| 212 | + endTime: '结租时间', | |
| 213 | + applicant: '申请人', | |
| 214 | + phone: '手机号', | |
| 215 | + auditResult: '审核结果', | |
| 216 | + operation: '操作', | |
| 217 | + audit: '审核', | |
| 218 | + edit: '修改', | |
| 219 | + delete: '删除', | |
| 220 | + pendingReview: '待审核', | |
| 221 | + pendingPayment: '待缴费', | |
| 222 | + completed: '完成', | |
| 223 | + auditFailed: '审核失败', | |
| 224 | + abnormalStatus: '状态异常', | |
| 225 | + familyCar: '家用小汽车', | |
| 226 | + bus: '客车', | |
| 227 | + truck: '货车', | |
| 228 | + abnormalVehicle: '异常车辆' | |
| 229 | + }, | |
| 230 | + carDetailCarInout: { | |
| 231 | + entryImage: '进场图', | |
| 232 | + inoutId: '进出场编号', | |
| 233 | + carStatus: '车辆状态', | |
| 234 | + entry: '进场', | |
| 235 | + exit: '出场', | |
| 236 | + carNum: '车牌号', | |
| 237 | + parkingLot: '停车场', | |
| 238 | + billingRule: '计费规则', | |
| 239 | + carType: '车牌类型', | |
| 240 | + entryTime: '进场时间', | |
| 241 | + exitTime: '出场时间', | |
| 242 | + parkingTime: '停车时间', | |
| 243 | + hour: '小时', | |
| 244 | + minute: '分', | |
| 245 | + chargeAmount: '收费金额', | |
| 246 | + remark: '说明' | |
| 247 | + }, | |
| 248 | + carDetailCoupon: { | |
| 249 | + car: '车辆', | |
| 250 | + coupon: '优惠券', | |
| 251 | + shop: '商家店铺', | |
| 252 | + parkingLot: '停车场', | |
| 253 | + giveWay: '赠送方式', | |
| 254 | + couponType: '优惠方式', | |
| 255 | + value: '面值', | |
| 256 | + startTime: '开始时间', | |
| 257 | + endTime: '结束时间', | |
| 258 | + giveTime: '赠送时间', | |
| 259 | + status: '状态', | |
| 260 | + remark: '说明' | |
| 261 | + }, | |
| 262 | + carDetailCouponOrder: { | |
| 263 | + orderId: '核销订单', | |
| 264 | + carNum: '核销车辆', | |
| 265 | + coupon: '优惠券', | |
| 266 | + shop: '商家店铺', | |
| 267 | + parkingLot: '停车场', | |
| 268 | + machine: '道闸', | |
| 269 | + verifyTime: '核销时间', | |
| 270 | + remark: '说明' | |
| 271 | + } | |
| 272 | + } | |
| 273 | +} | ... | ... |
src/views/car/carDetailTransactionCarLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + carDetailTransactionCar: { | |
| 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 | + operation: 'Operation', | |
| 13 | + resync: 'Resync' | |
| 14 | + } | |
| 15 | + }, | |
| 16 | + zh: { | |
| 17 | + carDetailTransactionCar: { | |
| 18 | + syncId: '同步ID', | |
| 19 | + deviceCode: '设备编码', | |
| 20 | + objectType: '对象类型', | |
| 21 | + objectName: '对象名称', | |
| 22 | + command: '指令', | |
| 23 | + status: '状态', | |
| 24 | + remark: '说明', | |
| 25 | + syncTime: '同步时间', | |
| 26 | + operation: '操作', | |
| 27 | + resync: '重新同步' | |
| 28 | + } | |
| 29 | + } | |
| 30 | +} | |
| 0 | 31 | \ No newline at end of file | ... | ... |
src/views/car/listOwnerCarList.vue
| ... | ... | @@ -72,7 +72,7 @@ |
| 72 | 72 | <el-table :data="ownerCars" border v-loading="loading"> |
| 73 | 73 | <el-table-column prop="carNum" :label="$t('listOwnerCar.carNum')" align="center"> |
| 74 | 74 | <template slot-scope="scope"> |
| 75 | - <router-link :to="`/pages/car/carDetail?memberId=${scope.row.memberId}`" target="_blank"> | |
| 75 | + <router-link :to="`/views/car/carDetail?memberId=${scope.row.memberId}`" target="_blank"> | |
| 76 | 76 | {{ scope.row.carNum }} |
| 77 | 77 | </router-link> |
| 78 | 78 | </template> | ... | ... |
src/views/common/commonLang.js
0 → 100644
src/views/fee/buyCarMonthCardList.vue
| 1 | 1 | <template> |
| 2 | 2 | <el-card class="buy-car-month-card-container"> |
| 3 | - <div slot="header"> | |
| 4 | - <h5>{{ $t('buyCarMonthCard.title') }}</h5> | |
| 3 | + <div slot="header" class="flex justify-between"> | |
| 4 | + <div>{{ $t('buyCarMonthCard.title') }}</div> | |
| 5 | 5 | </div> |
| 6 | 6 | |
| 7 | - <el-form ref="form" :model="buyCarMonthCardInfo" label-width="120px"> | |
| 7 | + <el-form ref="form" :model="buyCarMonthCardInfo" label-width="120px" class="text-left"> | |
| 8 | 8 | <el-form-item :label="$t('buyCarMonthCard.carNum')" prop="carNum" |
| 9 | 9 | :rules="[{ required: true, message: $t('buyCarMonthCard.rules.carNumRequired'), trigger: 'blur' }]"> |
| 10 | 10 | <el-input v-model="buyCarMonthCardInfo.carNum" :placeholder="$t('buyCarMonthCard.placeholders.carNum')" |
| ... | ... | @@ -51,7 +51,7 @@ |
| 51 | 51 | </el-input> |
| 52 | 52 | </el-form-item> |
| 53 | 53 | |
| 54 | - <el-form-item> | |
| 54 | + <el-form-item class="text-right"> | |
| 55 | 55 | <el-button type="primary" @click="saveCarMonthOrderInfo"> |
| 56 | 56 | <i class="el-icon-check"></i>{{ $t('common.submit') }} |
| 57 | 57 | </el-button> | ... | ... |
src/views/fee/contractCreateFeeList.vue
src/views/fee/listCarFeeList.vue
| ... | ... | @@ -191,7 +191,7 @@ export default { |
| 191 | 191 | this.$router.push({ path: '/views/fee/payFeeOrder', query: { feeId: fee.feeId } }) |
| 192 | 192 | }, |
| 193 | 193 | _payFeeHis(fee) { |
| 194 | - this.$router.push({ path: '/property/propertyFee', query: fee }) | |
| 194 | + this.$router.push({ path: '/views/fee/propertyFee', query: fee }) | |
| 195 | 195 | }, |
| 196 | 196 | _editFee(fee) { |
| 197 | 197 | this.$refs.editFee.open(fee) |
| ... | ... | @@ -240,7 +240,7 @@ export default { |
| 240 | 240 | }, |
| 241 | 241 | _viewCarFee(fee) { |
| 242 | 242 | // 查看费用详情逻辑 |
| 243 | - console.log(fee) | |
| 243 | + window.open(`/#/views/fee/feeDetail?feeId=${fee.feeId}`) | |
| 244 | 244 | |
| 245 | 245 | }, |
| 246 | 246 | _splitPayFee(fee) { | ... | ... |
src/views/fee/refundDepositFeeList.vue
| ... | ... | @@ -121,7 +121,7 @@ export default { |
| 121 | 121 | this.listFeeDeposit() |
| 122 | 122 | }, |
| 123 | 123 | toFeeDetail(fee) { |
| 124 | - this.$router.push(`/pages/property/propertyFee?feeId=${fee.feeId}`) | |
| 124 | + this.$router.push(`/views/fee/propertyFee?feeId=${fee.feeId}`) | |
| 125 | 125 | }, |
| 126 | 126 | printRefundFeeReceipt() { |
| 127 | 127 | window.open(`/#/views/owner/ownerDetail?ownerId=${this.refundDepositFeeInfo.ownerId}¤tTab=ownerDetailReceipt`) | ... | ... |
src/views/fee/returnPayFeeManageList.vue
| ... | ... | @@ -289,7 +289,7 @@ export default { |
| 289 | 289 | } |
| 290 | 290 | }, |
| 291 | 291 | _toReturnFeeDetail(payFee) { |
| 292 | - this.$router.push(`/pages/property/propertyFee?feeId=${payFee.feeId}`) | |
| 292 | + this.$router.push(`/views/fee/propertyFee?feeId=${payFee.feeId}`) | |
| 293 | 293 | }, |
| 294 | 294 | notifyAuditInfo(auditInfo) { |
| 295 | 295 | this._auditReturnPayFeeState(auditInfo) | ... | ... |
src/views/property/deleteParkingSpaceApplyLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + deleteParkingSpaceApply: { | |
| 4 | + title: 'Delete Application', | |
| 5 | + confirmDelete: 'Are you sure to delete this application?', | |
| 6 | + deleteSuccess: 'Delete successfully' | |
| 7 | + } | |
| 8 | + }, | |
| 9 | + zh: { | |
| 10 | + deleteParkingSpaceApply: { | |
| 11 | + title: '删除申请', | |
| 12 | + confirmDelete: '确定要删除此申请吗?', | |
| 13 | + deleteSuccess: '删除成功' | |
| 14 | + } | |
| 15 | + } | |
| 16 | +} | |
| 0 | 17 | \ No newline at end of file | ... | ... |
src/views/property/editMachineTranslateLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + editMachineTranslate: { | |
| 4 | + title: 'Resync Device', | |
| 5 | + machineCode: 'Device Code', | |
| 6 | + objectType: 'Object Type', | |
| 7 | + objectName: 'Object Name', | |
| 8 | + remark: 'Remark', | |
| 9 | + resyncSuccess: 'Resync successfully' | |
| 10 | + } | |
| 11 | + }, | |
| 12 | + zh: { | |
| 13 | + editMachineTranslate: { | |
| 14 | + title: '重新同步设备', | |
| 15 | + machineCode: '设备编码', | |
| 16 | + objectType: '对象类型', | |
| 17 | + objectName: '对象名称', | |
| 18 | + remark: '说明', | |
| 19 | + resyncSuccess: '重新同步成功' | |
| 20 | + } | |
| 21 | + } | |
| 22 | +} | |
| 0 | 23 | \ No newline at end of file | ... | ... |
src/views/property/editParkingSpaceApplyLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + editParkingSpaceApply: { | |
| 4 | + title: 'Edit Parking Space Application', | |
| 5 | + carNum: 'Car Number', | |
| 6 | + carBrand: 'Car Brand', | |
| 7 | + carType: 'Car Type', | |
| 8 | + carColor: 'Color', | |
| 9 | + startTime: 'Start Time', | |
| 10 | + endTime: 'End Time', | |
| 11 | + remark: 'Remark', | |
| 12 | + updateSuccess: 'Update successfully' | |
| 13 | + } | |
| 14 | + }, | |
| 15 | + zh: { | |
| 16 | + editParkingSpaceApply: { | |
| 17 | + title: '修改车位申请', | |
| 18 | + carNum: '车牌号', | |
| 19 | + carBrand: '汽车品牌', | |
| 20 | + carType: '车辆类型', | |
| 21 | + carColor: '颜色', | |
| 22 | + startTime: '起租时间', | |
| 23 | + endTime: '结租时间', | |
| 24 | + remark: '说明', | |
| 25 | + updateSuccess: '修改成功' | |
| 26 | + } | |
| 27 | + } | |
| 28 | +} | |
| 0 | 29 | \ No newline at end of file | ... | ... |
src/views/report/reportPayFeeDepositList.vue