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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 105 | \ No newline at end of file |
src/components/fee/carCreateFeeAdd.vue
| 1 | <template> | 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 | <el-form :model="form" label-width="150px" ref="form"> | 3 | <el-form :model="form" label-width="150px" ref="form"> |
| 4 | <el-form-item v-if="isMore" :label="$t('carCreateFeeAdd.chargeScope')" prop="locationTypeCd" | 4 | <el-form-item v-if="isMore" :label="$t('carCreateFeeAdd.chargeScope')" prop="locationTypeCd" |
| 5 | :rules="[{ required: true, message: $t('carCreateFeeAdd.requiredChargeScope') }]"> | 5 | :rules="[{ required: true, message: $t('carCreateFeeAdd.requiredChargeScope') }]"> |
| @@ -13,7 +13,8 @@ | @@ -13,7 +13,8 @@ | ||
| 13 | <el-input v-model="form.locationTypeCdName" disabled :placeholder="$t('carCreateFeeAdd.requiredChargeScope')" /> | 13 | <el-input v-model="form.locationTypeCdName" disabled :placeholder="$t('carCreateFeeAdd.requiredChargeScope')" /> |
| 14 | </el-form-item> | 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 | <parking-area-select2 @change="handleParkingAreaChange" /> | 18 | <parking-area-select2 @change="handleParkingAreaChange" /> |
| 18 | </el-form-item> | 19 | </el-form-item> |
| 19 | 20 | ||
| @@ -194,4 +195,9 @@ export default { | @@ -194,4 +195,9 @@ export default { | ||
| 194 | } | 195 | } |
| 195 | } | 196 | } |
| 196 | } | 197 | } |
| 197 | -</script> | ||
| 198 | \ No newline at end of file | 198 | \ No newline at end of file |
| 199 | +</script> | ||
| 200 | +<style scoped> | ||
| 201 | +.el-form-item { | ||
| 202 | + width: 90%; | ||
| 203 | +} | ||
| 204 | +</style> | ||
| 199 | \ No newline at end of file | 205 | \ No newline at end of file |
src/components/fee/feeDetailHisFee.vue
| @@ -101,7 +101,7 @@ export default { | @@ -101,7 +101,7 @@ export default { | ||
| 101 | this._loadFeeDetailHisFeeData() | 101 | this._loadFeeDetailHisFeeData() |
| 102 | }, | 102 | }, |
| 103 | _toRefundFee(detail) { | 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 | dateFormat(date) { | 106 | dateFormat(date) { |
| 107 | return this.$moment(date).format('YYYY-MM-DD') | 107 | return this.$moment(date).format('YYYY-MM-DD') |
src/components/fee/simplifyRefundDeposit.vue
| @@ -105,7 +105,7 @@ export default { | @@ -105,7 +105,7 @@ export default { | ||
| 105 | this.$router.push(`/pages/fee/refundDepositFee?roomId=${roomId}`) | 105 | this.$router.push(`/pages/fee/refundDepositFee?roomId=${roomId}`) |
| 106 | }, | 106 | }, |
| 107 | _toSimplifyFeeDepositFeeDetail(fee) { | 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 | switchData(param) { | 110 | switchData(param) { |
| 111 | if (!param.roomId) return | 111 | if (!param.roomId) return |
src/components/owner/ownerDetailHisFee.vue
| @@ -109,7 +109,7 @@ export default { | @@ -109,7 +109,7 @@ export default { | ||
| 109 | } | 109 | } |
| 110 | }, | 110 | }, |
| 111 | _toRefundFee(detail) { | 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 | handleCurrentChange(val) { | 114 | handleCurrentChange(val) { |
| 115 | this.currentPage = val | 115 | this.currentPage = val |
src/components/owner/ownerDetailRoomFee.vue
| @@ -227,7 +227,7 @@ export default { | @@ -227,7 +227,7 @@ export default { | ||
| 227 | this.$emit('editFee', fee) | 227 | this.$emit('editFee', fee) |
| 228 | }, | 228 | }, |
| 229 | _payRoomFeeHis(fee) { | 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 | _deleteRoomFee(fee) { | 232 | _deleteRoomFee(fee) { |
| 233 | this.$emit('deleteFee', { | 233 | this.$emit('deleteFee', { |
| @@ -247,7 +247,7 @@ export default { | @@ -247,7 +247,7 @@ export default { | ||
| 247 | this.$message.warning(this.$t('ownerDetailRoomFee.selectRoom')) | 247 | this.$message.warning(this.$t('ownerDetailRoomFee.selectRoom')) |
| 248 | return | 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 | _printOwnOrder() { | 252 | _printOwnOrder() { |
| 253 | const _ids = this.ownerDetailRoomFeeInfo.payerObjIds | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 98 | \ No newline at end of file |
src/components/simplify/simplifyCarFee.vue
| @@ -265,7 +265,7 @@ export default { | @@ -265,7 +265,7 @@ export default { | ||
| 265 | this.$router.push(`/views/fee/payFeeOrderfeeId=${fee.feeId}`) | 265 | this.$router.push(`/views/fee/payFeeOrderfeeId=${fee.feeId}`) |
| 266 | }, | 266 | }, |
| 267 | _simplifyCarPayFeeHis(fee) { | 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 | _simplifyCarEditFee(fee) { | 270 | _simplifyCarEditFee(fee) { |
| 271 | this.$emit('editFee', fee) | 271 | this.$emit('editFee', fee) |
src/components/simplify/simplifyOwnerCar.vue
| @@ -15,7 +15,7 @@ | @@ -15,7 +15,7 @@ | ||
| 15 | border> | 15 | border> |
| 16 | <el-table-column :label="$t('simplifyOwnerCar.plateNumber')" align="center"> | 16 | <el-table-column :label="$t('simplifyOwnerCar.plateNumber')" align="center"> |
| 17 | <template #default="{row}"> | 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 | {{row.carNum}} | 19 | {{row.carNum}} |
| 20 | </router-link> | 20 | </router-link> |
| 21 | </template> | 21 | </template> |
src/i18n/carI18n.js
| @@ -14,6 +14,7 @@ import { messages as tempCarPaymentMessages } from '../views/car/tempCarPaymentL | @@ -14,6 +14,7 @@ import { messages as tempCarPaymentMessages } from '../views/car/tempCarPaymentL | ||
| 14 | import { messages as parkingSpaceApplyManageMessages } from '../views/car/parkingSpaceApplyManageLang' | 14 | import { messages as parkingSpaceApplyManageMessages } from '../views/car/parkingSpaceApplyManageLang' |
| 15 | import { messages as addParkingSpaceApplyMessages } from '../views/car/addParkingSpaceApplyLang' | 15 | import { messages as addParkingSpaceApplyMessages } from '../views/car/addParkingSpaceApplyLang' |
| 16 | import { messages as auditParkingSpaceApplyMessages } from '../views/car/auditParkingSpaceApplyLang' | 16 | import { messages as auditParkingSpaceApplyMessages } from '../views/car/auditParkingSpaceApplyLang' |
| 17 | +import { messages as carDetailMessages } from '../views/car/carDetailLang.js' | ||
| 17 | 18 | ||
| 18 | export const messages = { | 19 | export const messages = { |
| 19 | en: { | 20 | en: { |
| @@ -33,6 +34,7 @@ export const messages = { | @@ -33,6 +34,7 @@ export const messages = { | ||
| 33 | ...parkingSpaceApplyManageMessages.en, | 34 | ...parkingSpaceApplyManageMessages.en, |
| 34 | ...addParkingSpaceApplyMessages.en, | 35 | ...addParkingSpaceApplyMessages.en, |
| 35 | ...auditParkingSpaceApplyMessages.en, | 36 | ...auditParkingSpaceApplyMessages.en, |
| 37 | + ...carDetailMessages.en, | ||
| 36 | }, | 38 | }, |
| 37 | zh: { | 39 | zh: { |
| 38 | ...adminCarMessages.zh, | 40 | ...adminCarMessages.zh, |
| @@ -51,5 +53,6 @@ export const messages = { | @@ -51,5 +53,6 @@ export const messages = { | ||
| 51 | ...parkingSpaceApplyManageMessages.zh, | 53 | ...parkingSpaceApplyManageMessages.zh, |
| 52 | ...addParkingSpaceApplyMessages.zh, | 54 | ...addParkingSpaceApplyMessages.zh, |
| 53 | ...auditParkingSpaceApplyMessages.zh, | 55 | ...auditParkingSpaceApplyMessages.zh, |
| 56 | + ...carDetailMessages.zh, | ||
| 54 | } | 57 | } |
| 55 | } | 58 | } |
| 56 | \ No newline at end of file | 59 | \ No newline at end of file |
src/router/carRouter.js
| @@ -79,5 +79,10 @@ export default [ | @@ -79,5 +79,10 @@ export default [ | ||
| 79 | name: '/views/car/auditParkingSpaceApply', | 79 | name: '/views/car/auditParkingSpaceApply', |
| 80 | component: () => import('@/views/car/auditParkingSpaceApply.vue') | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 31 | \ No newline at end of file |
src/views/car/listOwnerCarList.vue
| @@ -72,7 +72,7 @@ | @@ -72,7 +72,7 @@ | ||
| 72 | <el-table :data="ownerCars" border v-loading="loading"> | 72 | <el-table :data="ownerCars" border v-loading="loading"> |
| 73 | <el-table-column prop="carNum" :label="$t('listOwnerCar.carNum')" align="center"> | 73 | <el-table-column prop="carNum" :label="$t('listOwnerCar.carNum')" align="center"> |
| 74 | <template slot-scope="scope"> | 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 | {{ scope.row.carNum }} | 76 | {{ scope.row.carNum }} |
| 77 | </router-link> | 77 | </router-link> |
| 78 | </template> | 78 | </template> |
src/views/common/commonLang.js
0 → 100644
src/views/fee/buyCarMonthCardList.vue
| 1 | <template> | 1 | <template> |
| 2 | <el-card class="buy-car-month-card-container"> | 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 | </div> | 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 | <el-form-item :label="$t('buyCarMonthCard.carNum')" prop="carNum" | 8 | <el-form-item :label="$t('buyCarMonthCard.carNum')" prop="carNum" |
| 9 | :rules="[{ required: true, message: $t('buyCarMonthCard.rules.carNumRequired'), trigger: 'blur' }]"> | 9 | :rules="[{ required: true, message: $t('buyCarMonthCard.rules.carNumRequired'), trigger: 'blur' }]"> |
| 10 | <el-input v-model="buyCarMonthCardInfo.carNum" :placeholder="$t('buyCarMonthCard.placeholders.carNum')" | 10 | <el-input v-model="buyCarMonthCardInfo.carNum" :placeholder="$t('buyCarMonthCard.placeholders.carNum')" |
| @@ -51,7 +51,7 @@ | @@ -51,7 +51,7 @@ | ||
| 51 | </el-input> | 51 | </el-input> |
| 52 | </el-form-item> | 52 | </el-form-item> |
| 53 | 53 | ||
| 54 | - <el-form-item> | 54 | + <el-form-item class="text-right"> |
| 55 | <el-button type="primary" @click="saveCarMonthOrderInfo"> | 55 | <el-button type="primary" @click="saveCarMonthOrderInfo"> |
| 56 | <i class="el-icon-check"></i>{{ $t('common.submit') }} | 56 | <i class="el-icon-check"></i>{{ $t('common.submit') }} |
| 57 | </el-button> | 57 | </el-button> |
src/views/fee/contractCreateFeeList.vue
| @@ -216,7 +216,7 @@ export default { | @@ -216,7 +216,7 @@ export default { | ||
| 216 | }, | 216 | }, |
| 217 | handlePayFee(row) { | 217 | handlePayFee(row) { |
| 218 | this.$router.push({ | 218 | this.$router.push({ |
| 219 | - path: '/property/owePayFeeOrder', | 219 | + path: '/views/fee/owePayFeeOrder', |
| 220 | query: { | 220 | query: { |
| 221 | payObjId: row.contractId, | 221 | payObjId: row.contractId, |
| 222 | payObjType: '7777', | 222 | payObjType: '7777', |
src/views/fee/listCarFeeList.vue
| @@ -191,7 +191,7 @@ export default { | @@ -191,7 +191,7 @@ export default { | ||
| 191 | this.$router.push({ path: '/views/fee/payFeeOrder', query: { feeId: fee.feeId } }) | 191 | this.$router.push({ path: '/views/fee/payFeeOrder', query: { feeId: fee.feeId } }) |
| 192 | }, | 192 | }, |
| 193 | _payFeeHis(fee) { | 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 | _editFee(fee) { | 196 | _editFee(fee) { |
| 197 | this.$refs.editFee.open(fee) | 197 | this.$refs.editFee.open(fee) |
| @@ -240,7 +240,7 @@ export default { | @@ -240,7 +240,7 @@ export default { | ||
| 240 | }, | 240 | }, |
| 241 | _viewCarFee(fee) { | 241 | _viewCarFee(fee) { |
| 242 | // 查看费用详情逻辑 | 242 | // 查看费用详情逻辑 |
| 243 | - console.log(fee) | 243 | + window.open(`/#/views/fee/feeDetail?feeId=${fee.feeId}`) |
| 244 | 244 | ||
| 245 | }, | 245 | }, |
| 246 | _splitPayFee(fee) { | 246 | _splitPayFee(fee) { |
src/views/fee/refundDepositFeeList.vue
| @@ -121,7 +121,7 @@ export default { | @@ -121,7 +121,7 @@ export default { | ||
| 121 | this.listFeeDeposit() | 121 | this.listFeeDeposit() |
| 122 | }, | 122 | }, |
| 123 | toFeeDetail(fee) { | 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 | printRefundFeeReceipt() { | 126 | printRefundFeeReceipt() { |
| 127 | window.open(`/#/views/owner/ownerDetail?ownerId=${this.refundDepositFeeInfo.ownerId}¤tTab=ownerDetailReceipt`) | 127 | window.open(`/#/views/owner/ownerDetail?ownerId=${this.refundDepositFeeInfo.ownerId}¤tTab=ownerDetailReceipt`) |
src/views/fee/returnPayFeeManageList.vue
| @@ -289,7 +289,7 @@ export default { | @@ -289,7 +289,7 @@ export default { | ||
| 289 | } | 289 | } |
| 290 | }, | 290 | }, |
| 291 | _toReturnFeeDetail(payFee) { | 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 | notifyAuditInfo(auditInfo) { | 294 | notifyAuditInfo(auditInfo) { |
| 295 | this._auditReturnPayFeeState(auditInfo) | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 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 | \ No newline at end of file | 29 | \ No newline at end of file |
src/views/report/reportPayFeeDepositList.vue
| @@ -397,7 +397,7 @@ export default { | @@ -397,7 +397,7 @@ export default { | ||
| 397 | } | 397 | } |
| 398 | }, | 398 | }, |
| 399 | openPayFeeDetail(fee) { | 399 | openPayFeeDetail(fee) { |
| 400 | - this.$router.push(`/pages/property/propertyFee?feeId=${fee.feeId}`) | 400 | + this.$router.push(`/views/fee/propertyFee?feeId=${fee.feeId}`) |
| 401 | } | 401 | } |
| 402 | } | 402 | } |
| 403 | } | 403 | } |