Commit a254762819528629e55f91a51698de1c3d172fc3

Authored by wuxw
1 parent 8c078200

运营加入房屋详情页面

Showing 34 changed files with 1964 additions and 7 deletions
src/api/aCommunity/aRoomDetailCarApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function queryAdminOwnerCars(params) {
  4 + return request({
  5 + url: '/owner.queryAdminOwnerCars',
  6 + method: 'get',
  7 + params
  8 + }).then(res => {
  9 + return res.data
  10 + })
  11 +}
0 12 \ No newline at end of file
... ...
src/api/aCommunity/aRoomDetailCarFeeApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function listAdminFee(params) {
  4 + return request({
  5 + url: '/fee.listAdminFee',
  6 + method: 'get',
  7 + params
  8 + }).then(res => {
  9 + return res.data
  10 + })
  11 +}
  12 +
  13 +export function queryAdminOwnerCars(params) {
  14 + return request({
  15 + url: '/owner.queryAdminOwnerCars',
  16 + method: 'get',
  17 + params
  18 + }).then(res => {
  19 + return res.data
  20 + })
  21 +}
0 22 \ No newline at end of file
... ...
src/api/aCommunity/aRoomDetailComplaintApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function listAdminComplaints(params) {
  4 + return new Promise((resolve, reject) => {
  5 + request({
  6 + url: '/complaint.listAdminComplaints',
  7 + method: 'get',
  8 + params
  9 + }).then(response => {
  10 + const res = response.data
  11 + if (res.code === 0) {
  12 + resolve(res)
  13 + } else {
  14 + reject(new Error(res.msg || 'Failed to get complaint list'))
  15 + }
  16 + }).catch(error => {
  17 + reject(error)
  18 + })
  19 + })
  20 +}
0 21 \ No newline at end of file
... ...
src/api/aCommunity/aRoomDetailContractApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function queryAdminOwnerContract(params) {
  4 + return request({
  5 + url: '/contract.queryAdminOwnerContract',
  6 + method: 'get',
  7 + params
  8 + }).then(res => {
  9 + return res.data
  10 + })
  11 +}
0 12 \ No newline at end of file
... ...
src/api/aCommunity/aRoomDetailHisOwnerApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function queryAdminRoomHisOwner(params) {
  4 + return new Promise((resolve, reject) => {
  5 + request({
  6 + url: '/owner.queryAdminRoomHisOwner',
  7 + method: 'get',
  8 + params
  9 + }).then(response => {
  10 + const res = response.data
  11 + if (res.code === 0) {
  12 + resolve(res)
  13 + } else {
  14 + reject(new Error(res.msg || 'Failed to get owner history'))
  15 + }
  16 + }).catch(error => {
  17 + reject(error)
  18 + })
  19 + })
  20 +}
0 21 \ No newline at end of file
... ...
src/api/aCommunity/aRoomDetailMemberApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function queryAdminOwnerMembers(params) {
  4 + return request({
  5 + url: '/owner.queryAdminOwnerMembers',
  6 + method: 'get',
  7 + params
  8 + }).then(res => {
  9 + return res.data
  10 + })
  11 +}
0 12 \ No newline at end of file
... ...
src/api/aCommunity/aRoomDetailRepairApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function listAdminOwnerRepairs(params) {
  4 + return request({
  5 + url: '/ownerRepair.listAdminOwnerRepairs',
  6 + method: 'get',
  7 + params
  8 + }).then(res => {
  9 + return res.data
  10 + })
  11 +}
0 12 \ No newline at end of file
... ...
src/api/aCommunity/adminRoomDetailApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +// 获取房屋详情
  4 +export function getRoomDetail(params) {
  5 + return new Promise((resolve, reject) => {
  6 + request({
  7 + url: '/room.queryAdminRoom',
  8 + method: 'get',
  9 + params
  10 + }).then(response => {
  11 + const res = response.data
  12 + if (res.code === 0) {
  13 + resolve(res)
  14 + } else {
  15 + reject(new Error(res.msg || '获取房屋详情失败'))
  16 + }
  17 + }).catch(error => {
  18 + reject(error)
  19 + })
  20 + })
  21 +}
  22 +
  23 +// 获取业主信息
  24 +export function getOwnerInfo(params) {
  25 + return new Promise((resolve, reject) => {
  26 + request({
  27 + url: '/owner.queryOwner',
  28 + method: 'get',
  29 + params
  30 + }).then(response => {
  31 + const res = response.data
  32 + if (res.code === 0) {
  33 + resolve(res)
  34 + } else {
  35 + reject(new Error(res.msg || '获取业主信息失败'))
  36 + }
  37 + }).catch(error => {
  38 + reject(error)
  39 + })
  40 + })
  41 +}
  42 +
  43 +// 获取家庭成员列表
  44 +export function getMemberList(params) {
  45 + return new Promise((resolve, reject) => {
  46 + request({
  47 + url: '/member.queryMember',
  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 || '获取家庭成员列表失败'))
  56 + }
  57 + }).catch(error => {
  58 + reject(error)
  59 + })
  60 + })
  61 +}
  62 +
  63 +// 获取业主车辆列表
  64 +export function getCarList(params) {
  65 + return new Promise((resolve, reject) => {
  66 + request({
  67 + url: '/car.queryCar',
  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 || '获取业主车辆列表失败'))
  76 + }
  77 + }).catch(error => {
  78 + reject(error)
  79 + })
  80 + })
  81 +}
0 82 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailCar.vue 0 → 100644
  1 +<template>
  2 + <div class="margin-top">
  3 + <el-row class="margin-top-lg">
  4 + <el-col :span="4" class="padding-right-xs padding-left-xl">
  5 + <el-input v-model="aRoomDetailCarInfo.carNum" type="text"
  6 + :placeholder="$t('aRoomDetailCar.placeholderCarNum')"></el-input>
  7 + </el-col>
  8 + <el-col :span="4" class="padding-right-xs padding-right-xl">
  9 + <el-button type="primary" size="small" style="margin-left:10px" @click="_qureyARoomDetailCar()">
  10 + <i class="el-icon-search"></i>{{ $t('common.search') }}
  11 + </el-button>
  12 + </el-col>
  13 + <el-col :span="16" class="text-right"></el-col>
  14 + </el-row>
  15 + <div class="margin-top">
  16 + <el-table :data="aRoomDetailCarInfo.cars" style="width: 100%">
  17 + <el-table-column prop="carNum" :label="$t('aRoomDetailCar.carNum')" align="center"></el-table-column>
  18 + <el-table-column prop="leaseType" :label="$t('aRoomDetailCar.leaseType')" align="center">
  19 + <template slot-scope="scope">
  20 + {{ scope.row.leaseType == 'T' ? $t('aRoomDetailCar.tempCar') : scope.row.leaseTypeName }}
  21 + </template>
  22 + </el-table-column>
  23 + <el-table-column prop="carTypeName" :label="$t('aRoomDetailCar.carType')" align="center"></el-table-column>
  24 + <el-table-column prop="carColor" :label="$t('aRoomDetailCar.color')" align="center"></el-table-column>
  25 + <el-table-column prop="ownerName" :label="$t('aRoomDetailCar.owner')" align="center">
  26 + <template slot-scope="scope">{{ scope.row.ownerName }}({{ scope.row.link }})</template>
  27 + </el-table-column>
  28 + <el-table-column prop="areaNum" :label="$t('aRoomDetailCar.parkingSpace')" align="center">
  29 + <template slot-scope="scope">
  30 + {{ scope.row.areaNum && scope.row.state == '1001' ? `${scope.row.areaNum}-${scope.row.num}` :
  31 + $t('aRoomDetailCar.released')}}
  32 + </template>
  33 + </el-table-column>
  34 + <el-table-column :label="$t('aRoomDetailCar.validity')" align="center">
  35 + <template slot-scope="scope">
  36 + {{ scope.row.startTime }}<br />~{{ scope.row.endTime }}
  37 + </template>
  38 + </el-table-column>
  39 + </el-table>
  40 + <el-row>
  41 + <el-col :span="16" :offset="8">
  42 + <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize"
  43 + layout="total, prev, pager, next" :total="total">
  44 + </el-pagination>
  45 + </el-col>
  46 + </el-row>
  47 + </div>
  48 + </div>
  49 +</template>
  50 +
  51 +<script>
  52 +import { queryAdminOwnerCars } from '@/api/aCommunity/aRoomDetailCarApi'
  53 +
  54 +export default {
  55 + name: 'ARoomDetailCar',
  56 + data() {
  57 + return {
  58 + aRoomDetailCarInfo: {
  59 + cars: [],
  60 + ownerId: '',
  61 + ownerName: '',
  62 + carNum: '',
  63 + memberId: ''
  64 + },
  65 + currentPage: 1,
  66 + pageSize: 10,
  67 + total: 0
  68 + }
  69 + },
  70 + created() {
  71 + },
  72 + methods: {
  73 + open(data) {
  74 + this.aRoomDetailCarInfo.ownerId = data.ownerId
  75 + this.aRoomDetailCarInfo.memberId = data.carId
  76 + this.aRoomDetailCarInfo.ownerName = data.ownerName
  77 + this._loadARoomDetailCarData(this.currentPage, this.pageSize)
  78 + },
  79 + handleSwitch(data) {
  80 + this.aRoomDetailCarInfo.ownerId = data.ownerId
  81 + this.aRoomDetailCarInfo.memberId = data.carId
  82 + this.aRoomDetailCarInfo.ownerName = data.ownerName
  83 + this._loadARoomDetailCarData(this.currentPage, this.pageSize)
  84 + },
  85 + handleNotify() {
  86 + this._loadARoomDetailCarData(this.currentPage, this.pageSize)
  87 + },
  88 + handleCurrentChange(val) {
  89 + this.currentPage = val
  90 + this._loadARoomDetailCarData(val, this.pageSize)
  91 + },
  92 + async _loadARoomDetailCarData(page, row) {
  93 + try {
  94 + const res = await queryAdminOwnerCars({
  95 + ownerId: this.aRoomDetailCarInfo.ownerId,
  96 + carNum: this.aRoomDetailCarInfo.carNum,
  97 + memberId: this.aRoomDetailCarInfo.memberId,
  98 + page,
  99 + row
  100 + })
  101 + this.aRoomDetailCarInfo.cars = res.data
  102 + this.total = res.records
  103 + } catch (error) {
  104 + console.error('请求失败:', error)
  105 + }
  106 + },
  107 + _qureyARoomDetailCar() {
  108 + this.currentPage = 1
  109 + this._loadARoomDetailCarData(1, this.pageSize)
  110 + }
  111 + }
  112 +}
  113 +</script>
  114 +
  115 +<style scoped>
  116 +/* Same styles as aRoomDetailMember */
  117 +</style>
0 118 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailCarDemo.vue 0 → 100644
  1 +<template>
  2 + <a-room-detail-car ref="carComponent" />
  3 +</template>
  4 +
  5 +<script>
  6 +import ARoomDetailCar from './aRoomDetailCar'
  7 +
  8 +export default {
  9 + components: {
  10 + ARoomDetailCar
  11 + },
  12 + methods: {
  13 + open(data) {
  14 + this.$refs.carComponent.handleSwitch(data)
  15 + },
  16 + refresh() {
  17 + this.$refs.carComponent.handleNotify()
  18 + }
  19 + }
  20 +}
  21 +</script>
0 22 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailCarFee.vue 0 → 100644
  1 +<template>
  2 + <div>
  3 + <el-row class="margin-top">
  4 + <el-col :span="4" class="text-left">
  5 + <el-select v-model="aRoomDetailCarFeeInfo.carId" @change="changeARoomDetailCar"
  6 + :placeholder="$t('aRoomDetailCarFee.selectCar')">
  7 + <el-option v-for="item in aRoomDetailCarFeeInfo.ownerCars" :key="item.carId" :label="item.carNum"
  8 + :value="item.carId">
  9 + </el-option>
  10 + </el-select>
  11 + </el-col>
  12 + <el-col :span="16" class="text-right"></el-col>
  13 + </el-row>
  14 + <div>
  15 + <el-table :data="aRoomDetailCarFeeInfo.fees" style="margin-top:10px">
  16 + <el-table-column prop="feeName" :label="$t('aRoomDetailCarFee.feeItem')" align="center">
  17 + <template slot-scope="scope">
  18 + <span class="hand">{{ scope.row.feeName }}</span>
  19 + <i class="el-icon-info"></i>
  20 + </template>
  21 + </el-table-column>
  22 + <el-table-column prop="feeFlagName" :label="$t('aRoomDetailCarFee.feeFlag')" align="center"></el-table-column>
  23 + <el-table-column prop="feeTypeCdName" :label="$t('aRoomDetailCarFee.feeType')" align="center"></el-table-column>
  24 + <el-table-column prop="amountOwed" :label="$t('aRoomDetailCarFee.amount')" align="center"></el-table-column>
  25 + <el-table-column prop="startTime" :label="$t('aRoomDetailCarFee.createTime')" align="center"></el-table-column>
  26 + <el-table-column :label="$t('aRoomDetailCarFee.timeRange')" align="center">
  27 + <template slot-scope="scope">
  28 + {{ _getEndTime(scope.row) }}~<br />{{ _getDeadlineTime(scope.row) }}
  29 + </template>
  30 + </el-table-column>
  31 + <el-table-column :label="$t('aRoomDetailCarFee.description')" align="center" width="150">
  32 + <template slot-scope="scope">
  33 + <div v-if="scope.row.feeTypeCd == '888800010015' || scope.row.feeTypeCd == '888800010016'">
  34 + <div>{{ $t('aRoomDetailCarFee.preDegrees') }}:{{ scope.row.preDegrees }}</div>
  35 + <div>{{ $t('aRoomDetailCarFee.curDegrees') }}:{{ scope.row.curDegrees }}</div>
  36 + <div>{{ $t('aRoomDetailCarFee.unitPrice') }}:{{ scope.row.squarePrice }}</div>
  37 + <div>{{ $t('aRoomDetailCarFee.additionalFee') }}:{{ scope.row.additionalAmount }}</div>
  38 + </div>
  39 + <div v-else-if="scope.row.feeTypeCd == '888800010017'">
  40 + <div>{{ $t('aRoomDetailCarFee.algorithm') }}:{{ _getAttrValue(scope.row.feeAttrs, '390005') }}</div>
  41 + <div>{{ $t('aRoomDetailCarFee.usage') }}:{{ _getAttrValue(scope.row.feeAttrs, '390003') }}</div>
  42 + </div>
  43 + <div v-else>
  44 + <div>{{ $t('aRoomDetailCarFee.unitPrice') }}:{{ scope.row.squarePrice }}</div>
  45 + <div>{{ $t('aRoomDetailCarFee.fixedFee') }}:{{ scope.row.additionalAmount }}</div>
  46 + </div>
  47 + </template>
  48 + </el-table-column>
  49 + <el-table-column prop="stateName" :label="$t('aRoomDetailCarFee.state')" align="center"></el-table-column>
  50 + <el-table-column :label="$t('common.operation')" align="center"></el-table-column>
  51 + </el-table>
  52 + <el-row>
  53 + <el-col :span="12">
  54 + <div>
  55 + {{ $t('aRoomDetailCarFee.note1') }}
  56 + </div>
  57 + <div>
  58 + {{ $t('aRoomDetailCarFee.note2') }}
  59 + </div>
  60 + </el-col>
  61 + <el-col :span="4">
  62 + <span> {{ $t('aRoomDetailCarFee.totalArrears') }}: {{ aRoomDetailCarFeeInfo.totalAmount }}</span>
  63 + </el-col>
  64 + <el-col :span="8">
  65 + <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize"
  66 + layout="total, prev, pager, next" :total="total">
  67 + </el-pagination>
  68 + </el-col>
  69 + </el-row>
  70 + </div>
  71 + </div>
  72 +</template>
  73 +
  74 +<script>
  75 +import { listAdminFee, queryAdminOwnerCars } from '@/api/aCommunity/aRoomDetailCarFeeApi'
  76 +
  77 +export default {
  78 + name: 'ARoomDetailCarFee',
  79 + data() {
  80 + return {
  81 + aRoomDetailCarFeeInfo: {
  82 + fees: [],
  83 + ownerCars: [],
  84 + ownerId: '',
  85 + name: '',
  86 + carNum: '',
  87 + carId: '',
  88 + total: 0,
  89 + records: 1,
  90 + areaNum: '',
  91 + num: '',
  92 + parkingName: '',
  93 + totalAmount: 0.0
  94 + },
  95 + currentPage: 1,
  96 + pageSize: 100,
  97 + total: 0
  98 + }
  99 + },
  100 + created() {
  101 + },
  102 + methods: {
  103 + open(data) {
  104 + if (!data.ownerId) return
  105 + this.clearARoomDetailCarFeeInfo()
  106 + Object.assign(this.aRoomDetailCarFeeInfo, data)
  107 + this._listOwnerCar()
  108 + .then(() => {
  109 + this._listARoomDetailCarFee(this.currentPage, this.pageSize)
  110 + })
  111 + .catch(err => {
  112 + this.$message.error(err)
  113 + })
  114 + },
  115 + handleNotify() {
  116 + this._listARoomDetailCarFee(this.currentPage, this.pageSize)
  117 + },
  118 + handleCurrentChange(val) {
  119 + this.currentPage = val
  120 + this._listARoomDetailCarFee(val, this.pageSize)
  121 + },
  122 + async _listARoomDetailCarFee(page, row) {
  123 + if (!this.aRoomDetailCarFeeInfo.carId) return
  124 +
  125 + try {
  126 + const res = await listAdminFee({
  127 + page,
  128 + row,
  129 + payerObjId: this.aRoomDetailCarFeeInfo.carId
  130 + })
  131 + this.aRoomDetailCarFeeInfo.fees = res.fees
  132 + this.total = res.records
  133 + let totalAmount = 0.0
  134 + res.fees.forEach(item => {
  135 + totalAmount += parseFloat(item.amountOwed)
  136 + })
  137 + this.aRoomDetailCarFeeInfo.totalAmount = totalAmount
  138 + } catch (error) {
  139 + console.error('请求失败:', error)
  140 + }
  141 + },
  142 + _getDeadlineTime(fee) {
  143 + if (fee.amountOwed == 0 && fee.endTime == fee.deadlineTime) {
  144 + return "-"
  145 + }
  146 + if (fee.state == '2009001') {
  147 + return "-"
  148 + }
  149 + return fee.deadlineTime
  150 + },
  151 + _getEndTime(fee) {
  152 + if (fee.state == '2009001') {
  153 + return "-"
  154 + }
  155 + return fee.endTime
  156 + },
  157 + async _listOwnerCar() {
  158 + return new Promise((resolve, reject) => {
  159 + queryAdminOwnerCars({
  160 + page: 1,
  161 + row: 50,
  162 + ownerId: this.aRoomDetailCarFeeInfo.ownerId,
  163 + carTypeCd: '1001',
  164 + })
  165 + .then(res => {
  166 + this.aRoomDetailCarFeeInfo.ownerCars = res.data
  167 + if (res.data.length > 0) {
  168 + this.aRoomDetailCarFeeInfo.carId = res.data[0].carId
  169 + this.aRoomDetailCarFeeInfo.carNum = res.data[0].carNum
  170 + this.aRoomDetailCarFeeInfo.num = res.data[0].num
  171 + this.aRoomDetailCarFeeInfo.parkingName = `${res.data[0].areaNum}${this.$t('aRoomDetailCarFee.parkingLot')}${res.data[0].num}${this.$t('aRoomDetailCarFee.parkingSpace')}`
  172 + resolve(res.data)
  173 + return
  174 + }
  175 + reject(this.$t('aRoomDetailCarFee.noParkingSpace'))
  176 + })
  177 + .catch(err => {
  178 + reject(err)
  179 + })
  180 + })
  181 + },
  182 + changeARoomDetailCar() {
  183 + const car = this.aRoomDetailCarFeeInfo.ownerCars.find(item => item.carId == this.aRoomDetailCarFeeInfo.carId)
  184 + if (!car) return
  185 +
  186 + this.aRoomDetailCarFeeInfo.carNum = car.carNum
  187 + this.aRoomDetailCarFeeInfo.num = car.num
  188 + this.aRoomDetailCarFeeInfo.parkingName = `${car.areaNum}${this.$t('aRoomDetailCarFee.parkingLot')}${car.num}${this.$t('aRoomDetailCarFee.parkingSpace')}`
  189 + this._listARoomDetailCarFee(this.currentPage, this.pageSize)
  190 + },
  191 + clearARoomDetailCarFeeInfo() {
  192 + this.aRoomDetailCarFeeInfo = {
  193 + fees: [],
  194 + ownerCars: [],
  195 + ownerId: '',
  196 + name: '',
  197 + carNum: '',
  198 + carId: '',
  199 + total: 0,
  200 + records: 1,
  201 + areaNum: '',
  202 + num: '',
  203 + parkingName: '',
  204 + totalAmount: 0.0
  205 + }
  206 + },
  207 + _simplifyCarGetFeeOwnerInfo(attrs) {
  208 + const ownerName = this._getAttrValue(attrs, '390008')
  209 + const ownerLink = this._getAttrValue(attrs, '390009')
  210 + return `${this.$t('aRoomDetailCarFee.owner')}:${ownerName},${this.$t('aRoomDetailCarFee.phone')}:${ownerLink}`
  211 + },
  212 + _getAttrValue(attrs, attrId) {
  213 + if (!attrs) return ''
  214 + const attr = attrs.find(item => item.attrId == attrId)
  215 + return attr ? attr.value : ''
  216 + }
  217 + }
  218 +}
  219 +</script>
  220 +
  221 +<style scoped>
  222 +.hand {
  223 + cursor: pointer;
  224 +}
  225 +
  226 +/* Other styles same as previous components */
  227 +</style>
0 228 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailCarFeeDemo.vue 0 → 100644
  1 +<template>
  2 + <a-room-detail-car-fee ref="carFeeComponent" />
  3 +</template>
  4 +
  5 +<script>
  6 +import ARoomDetailCarFee from './aRoomDetailCarFee'
  7 +
  8 +export default {
  9 + components: {
  10 + ARoomDetailCarFee
  11 + },
  12 + methods: {
  13 + open(data) {
  14 + this.$refs.carFeeComponent.handleSwitch(data)
  15 + },
  16 + refresh() {
  17 + this.$refs.carFeeComponent.handleNotify()
  18 + }
  19 + }
  20 +}
  21 +</script>
0 22 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailComplaint.vue 0 → 100644
  1 +<template>
  2 + <div class="margin-top">
  3 + <el-table :data="aRoomDetailComplaintInfo.complaints" border style="width: 100%" class="margin-top">
  4 + <el-table-column prop="typeCdName" :label="$t('aRoomDetailComplaint.type')" align="center" />
  5 + <el-table-column :label="$t('aRoomDetailComplaint.room')" align="center">
  6 + <template slot-scope="scope">
  7 + {{ scope.row.floorNum }}-{{ scope.row.unitNum }}-{{ scope.row.roomNum }}
  8 + </template>
  9 + </el-table-column>
  10 + <el-table-column prop="complaintName" :label="$t('aRoomDetailComplaint.contact')" align="center" />
  11 + <el-table-column prop="tel" :label="$t('aRoomDetailComplaint.phone')" align="center" />
  12 + <el-table-column prop="stateName" :label="$t('aRoomDetailComplaint.status')" align="center" />
  13 + <el-table-column :label="$t('aRoomDetailComplaint.handler')" align="center">
  14 + <template slot-scope="scope">
  15 + {{ scope.row.currentUserName || $t('aRoomDetailComplaint.none') }}
  16 + </template>
  17 + </el-table-column>
  18 + <el-table-column :label="$t('aRoomDetailComplaint.handlerPhone')" align="center">
  19 + <template slot-scope="scope">
  20 + {{ scope.row.currentUserTel || $t('aRoomDetailComplaint.none') }}
  21 + </template>
  22 + </el-table-column>
  23 + <el-table-column prop="createTime" :label="$t('aRoomDetailComplaint.createTime')" align="center" />
  24 + <el-table-column :label="$t('aRoomDetailComplaint.actions')" align="center" width="180">
  25 + <template slot-scope="scope">
  26 + <el-button size="mini" @click="handleOpenComplaintDetail(scope.row)">
  27 + {{ $t('aRoomDetailComplaint.detail') }}
  28 + </el-button>
  29 + <el-button size="mini" @click="handleOpenWorkflowImage(scope.row)">
  30 + {{ $t('aRoomDetailComplaint.flowChart') }}
  31 + </el-button>
  32 + </template>
  33 + </el-table-column>
  34 + </el-table>
  35 +
  36 + <el-row class="margin-top">
  37 + <el-col :span="24" class="text-right">
  38 + <el-pagination @current-change="handlePageChange" :current-page="pagination.currentPage"
  39 + :page-size="pagination.pageSize" layout="total, prev, pager, next" :total="pagination.total" />
  40 + </el-col>
  41 + </el-row>
  42 +
  43 + <complaint-detail ref="complaintDetail" />
  44 + <view-image ref="viewImage" />
  45 + </div>
  46 +</template>
  47 +
  48 +<script>
  49 +import { listAdminComplaints } from '@/api/aCommunity/aRoomDetailComplaintApi'
  50 +import ComplaintDetail from '@/components/oa/complaintDetail'
  51 +import ViewImage from '@/components/system/viewImage'
  52 +
  53 +export default {
  54 + name: 'ARoomDetailComplaint',
  55 + components: {
  56 + ComplaintDetail,
  57 + ViewImage
  58 + },
  59 + data() {
  60 + return {
  61 + aRoomDetailComplaintInfo: {
  62 + complaints: [],
  63 + ownerId: '',
  64 + name: '',
  65 + currentAppUserId: ''
  66 + },
  67 + pagination: {
  68 + currentPage: 1,
  69 + pageSize: 10,
  70 + total: 0
  71 + }
  72 + }
  73 + },
  74 + methods: {
  75 + open(data) {
  76 + this.aRoomDetailComplaintInfo.ownerId = data.ownerId
  77 + this.loadComplaintData()
  78 + },
  79 + loadComplaintData() {
  80 + const params = {
  81 + memberId: this.aRoomDetailComplaintInfo.ownerId,
  82 + page: this.pagination.currentPage,
  83 + row: this.pagination.pageSize
  84 + }
  85 +
  86 + listAdminComplaints(params).then(response => {
  87 + this.aRoomDetailComplaintInfo.complaints = response.data
  88 + this.pagination.total = response.records
  89 + }).catch(error => {
  90 + console.error('Failed to load complaints:', error)
  91 + })
  92 + },
  93 + handlePageChange(currentPage) {
  94 + this.pagination.currentPage = currentPage
  95 + this.loadComplaintData()
  96 + },
  97 + handleOpenComplaintDetail(complaint) {
  98 + this.$refs.complaintDetail.open(complaint)
  99 + },
  100 + handleOpenWorkflowImage(complaint) {
  101 + this.$refs.viewImage.open(complaint.workflowImageUrl)
  102 + }
  103 + }
  104 +}
  105 +</script>
  106 +
  107 +<style scoped>
  108 +.margin-top {
  109 + margin-top: 20px;
  110 +}
  111 +
  112 +.text-right {
  113 + text-align: right;
  114 +}
  115 +</style>
0 116 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailComplaintDemo.vue 0 → 100644
  1 +<template>
  2 + <a-room-detail-complaint ref="complaintComponent" />
  3 +</template>
  4 +
  5 +<script>
  6 +import ARoomDetailComplaint from './aRoomDetailComplaint'
  7 +
  8 +export default {
  9 + components: {
  10 + ARoomDetailComplaint
  11 + },
  12 + methods: {
  13 + open(ownerId) {
  14 + this.$refs.complaintComponent.handleSwitch({ ownerId })
  15 + }
  16 + }
  17 +}
  18 +</script>
0 19 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailContract.vue 0 → 100644
  1 +<template>
  2 + <div class="margin-top">
  3 + <div class="margin-top">
  4 + <el-table :data="aRoomDetailContractInfo.contracts" style="width: 100%">
  5 + <el-table-column prop="contractName" :label="$t('aRoomDetailContract.contractName')" align="center"></el-table-column>
  6 + <el-table-column prop="contractCode" :label="$t('aRoomDetailContract.contractCode')" align="center"></el-table-column>
  7 + <el-table-column prop="parentContractCode" :label="$t('aRoomDetailContract.parentContractCode')" align="center">
  8 + <template slot-scope="scope">
  9 + {{scope.row.parentContractCode || '-'}}
  10 + </template>
  11 + </el-table-column>
  12 + <el-table-column prop="contractTypeName" :label="$t('aRoomDetailContract.contractType')" align="center"></el-table-column>
  13 + <el-table-column prop="operator" :label="$t('aRoomDetailContract.operator')" align="center"></el-table-column>
  14 + <el-table-column prop="amount" :label="$t('aRoomDetailContract.amount')" align="center"></el-table-column>
  15 + <el-table-column prop="startTime" :label="$t('aRoomDetailContract.startTime')" align="center"></el-table-column>
  16 + <el-table-column prop="endTime" :label="$t('aRoomDetailContract.endTime')" align="center"></el-table-column>
  17 + <el-table-column prop="createTime" :label="$t('aRoomDetailContract.createTime')" align="center"></el-table-column>
  18 + <el-table-column prop="stateName" :label="$t('aRoomDetailContract.state')" align="center"></el-table-column>
  19 + </el-table>
  20 + <el-row>
  21 + <el-col :span="16" :offset="8">
  22 + <el-pagination
  23 + @current-change="handleCurrentChange"
  24 + :current-page="currentPage"
  25 + :page-size="pageSize"
  26 + layout="total, prev, pager, next"
  27 + :total="total">
  28 + </el-pagination>
  29 + </el-col>
  30 + </el-row>
  31 + </div>
  32 + </div>
  33 +</template>
  34 +
  35 +<script>
  36 +import { queryAdminOwnerContract } from '@/api/aCommunity/aRoomDetailContractApi'
  37 +import { getCommunityId } from '@/api/community/communityApi'
  38 +
  39 +export default {
  40 + name: 'ARoomDetailContract',
  41 + data() {
  42 + return {
  43 + aRoomDetailContractInfo: {
  44 + contracts: [],
  45 + ownerId: ''
  46 + },
  47 + currentPage: 1,
  48 + pageSize: 10,
  49 + total: 0,
  50 + communityId: ''
  51 + }
  52 + },
  53 + created() {
  54 + this.communityId = getCommunityId()
  55 + },
  56 + methods: {
  57 + open(data) {
  58 + this.aRoomDetailContractInfo.ownerId = data.ownerId
  59 + this._loadARoomDetailContractData(this.currentPage, this.pageSize)
  60 + },
  61 + handleCurrentChange(val) {
  62 + this.currentPage = val
  63 + this._loadARoomDetailContractData(val, this.pageSize)
  64 + },
  65 + async _loadARoomDetailContractData(page, row) {
  66 + try {
  67 + const res = await queryAdminOwnerContract({
  68 + communityId: this.communityId,
  69 + ownerId: this.aRoomDetailContractInfo.ownerId,
  70 + page,
  71 + row
  72 + })
  73 + this.aRoomDetailContractInfo.contracts = res.data
  74 + this.total = res.records
  75 + } catch (error) {
  76 + console.error('请求失败:', error)
  77 + }
  78 + },
  79 + _qureyARoomDetailContract() {
  80 + this.currentPage = 1
  81 + this._loadARoomDetailContractData(1, this.pageSize)
  82 + }
  83 + }
  84 +}
  85 +</script>
  86 +
  87 +<style scoped>
  88 +/* Same styles as aRoomDetailMember */
  89 +</style>
0 90 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailContractDemo.vue 0 → 100644
  1 +<template>
  2 + <a-room-detail-contract ref="contractComponent" />
  3 +</template>
  4 +
  5 +<script>
  6 +import ARoomDetailContract from './aRoomDetailContract'
  7 +
  8 +export default {
  9 + components: {
  10 + ARoomDetailContract
  11 + },
  12 + methods: {
  13 + open(ownerId) {
  14 + this.$refs.contractComponent.handleSwitch({ ownerId })
  15 + }
  16 + }
  17 +}
  18 +</script>
0 19 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailHisOwner.vue 0 → 100644
  1 +<template>
  2 + <div>
  3 + <el-table
  4 + :data="aRoomDetailHisOwnerInfo.owners"
  5 + border
  6 + style="width: 100%; margin-top: 10px"
  7 + >
  8 + <el-table-column prop="name" :label="$t('aRoomDetailHisOwner.ownerName')" align="center" />
  9 + <el-table-column prop="link" :label="$t('aRoomDetailHisOwner.ownerPhone')" align="center" />
  10 + <el-table-column prop="startTime" :label="$t('aRoomDetailHisOwner.startTime')" align="center" />
  11 + <el-table-column prop="endTime" :label="$t('aRoomDetailHisOwner.endTime')" align="center" />
  12 + <el-table-column prop="createTime" :label="$t('aRoomDetailHisOwner.createTime')" align="center" />
  13 + <el-table-column :label="$t('aRoomDetailHisOwner.status')" align="center">
  14 + <template slot-scope="scope">
  15 + {{scope.row.statusCd === '0' ? $t('aRoomDetailHisOwner.active') : $t('aRoomDetailHisOwner.inactive')}}
  16 + </template>
  17 + </el-table-column>
  18 + </el-table>
  19 +
  20 + <el-row class="margin-top">
  21 + <el-col :span="24" class="text-right">
  22 + <el-pagination
  23 + @current-change="handlePageChange"
  24 + :current-page="pagination.currentPage"
  25 + :page-size="pagination.pageSize"
  26 + layout="total, prev, pager, next"
  27 + :total="pagination.total"
  28 + />
  29 + </el-col>
  30 + </el-row>
  31 + </div>
  32 +</template>
  33 +
  34 +<script>
  35 +import { queryAdminRoomHisOwner } from '@/api/aCommunity/aRoomDetailHisOwnerApi'
  36 +
  37 +export default {
  38 + name: 'ARoomDetailHisOwner',
  39 + data() {
  40 + return {
  41 + aRoomDetailHisOwnerInfo: {
  42 + owners: [],
  43 + ownerId: '',
  44 + roomId: ''
  45 + },
  46 + pagination: {
  47 + currentPage: 1,
  48 + pageSize: 10,
  49 + total: 0
  50 + }
  51 + }
  52 + },
  53 + methods: {
  54 + open(data) {
  55 + if (!data.roomId) return
  56 + this.clearData()
  57 + this.aRoomDetailHisOwnerInfo.roomId = data.roomId
  58 + this.loadOwnerData()
  59 + },
  60 + loadOwnerData() {
  61 + const params = {
  62 + page: this.pagination.currentPage,
  63 + row: this.pagination.pageSize,
  64 + roomId: this.aRoomDetailHisOwnerInfo.roomId
  65 + }
  66 +
  67 + queryAdminRoomHisOwner(params).then(response => {
  68 + this.aRoomDetailHisOwnerInfo.owners = response.data
  69 + this.pagination.total = response.records
  70 + }).catch(error => {
  71 + console.error('Failed to load owner history:', error)
  72 + })
  73 + },
  74 + handlePageChange(currentPage) {
  75 + this.pagination.currentPage = currentPage
  76 + this.loadOwnerData()
  77 + },
  78 + clearData() {
  79 + this.aRoomDetailHisOwnerInfo = {
  80 + owners: [],
  81 + ownerId: '',
  82 + roomId: ''
  83 + }
  84 + }
  85 + }
  86 +}
  87 +</script>
  88 +
  89 +<style scoped>
  90 +.margin-top {
  91 + margin-top: 20px;
  92 +}
  93 +.text-right {
  94 + text-align: right;
  95 +}
  96 +</style>
0 97 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailHisOwnerDemo.vue 0 → 100644
  1 +<template>
  2 + <a-room-detail-his-owner ref="hisOwnerComponent" />
  3 +</template>
  4 +
  5 +<script>
  6 +import ARoomDetailHisOwner from './aRoomDetailHisOwner'
  7 +
  8 +export default {
  9 + components: {
  10 + ARoomDetailHisOwner
  11 + },
  12 + methods: {
  13 + open(data) {
  14 + this.$refs.hisOwnerComponent.handleSwitch(data)
  15 + }
  16 + }
  17 +}
  18 +</script>
0 19 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailMember.vue 0 → 100644
  1 +<template>
  2 + <div class="margin-top">
  3 + <el-row class="margin-top-lg">
  4 + <el-col :span="4" class="padding-right-xs padding-left-xl">
  5 + <el-input v-model="aRoomDetailMemberInfo.name" type="text"
  6 + :placeholder="$t('aRoomDetailMember.placeholderName')"></el-input>
  7 + </el-col>
  8 + <el-col :span="4" class="padding-right-xs padding-right-xl">
  9 + <el-button type="primary" size="small" style="margin-left:10px" @click="_qureyARoomDetailMember()">
  10 + <i class="el-icon-search"></i>{{ $t('common.search') }}
  11 + </el-button>
  12 + </el-col>
  13 + <el-col :span="16" class="text-right"></el-col>
  14 + </el-row>
  15 + <div class="margin-top">
  16 + <el-table :data="aRoomDetailMemberInfo.members" style="width: 100%">
  17 + <el-table-column prop="faceUrl" :label="$t('aRoomDetailMember.face')" align="center">
  18 + <template slot-scope="scope">
  19 + <img style="width: 60px; height: 60px;" class="border-radius" v-if="scope.row.faceUrl"
  20 + :src="scope.row.faceUrl" @click="_viewOwnerFace(scope.row.faceUrl)" />
  21 + <img style="width: 60px; height: 60px;" class="border-radius" v-else src="/img/noPhoto.jpg" />
  22 + </template>
  23 + </el-table-column>
  24 + <el-table-column prop="name" :label="$t('aRoomDetailMember.name')" align="center"></el-table-column>
  25 + <el-table-column prop="sex" :label="$t('aRoomDetailMember.sex')" align="center">
  26 + <template slot-scope="scope">{{ scope.row.sex == 0 ? $t('common.male') : $t('common.female') }}</template>
  27 + </el-table-column>
  28 + <el-table-column prop="personRoleName" :label="$t('aRoomDetailMember.personRole')"
  29 + align="center"></el-table-column>
  30 + <el-table-column prop="idCard" :label="$t('aRoomDetailMember.idCard')" align="center"></el-table-column>
  31 + <el-table-column prop="link" :label="$t('aRoomDetailMember.contact')" align="center"></el-table-column>
  32 + <el-table-column prop="address" :label="$t('aRoomDetailMember.address')" align="center"></el-table-column>
  33 + </el-table>
  34 + <el-row>
  35 + <el-col :span="16" :offset="8">
  36 + <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize"
  37 + layout="total, prev, pager, next" :total="total">
  38 + </el-pagination>
  39 + </el-col>
  40 + </el-row>
  41 + </div>
  42 + </div>
  43 +</template>
  44 +
  45 +<script>
  46 +import { queryAdminOwnerMembers } from '@/api/aCommunity/aRoomDetailMemberApi'
  47 +
  48 +export default {
  49 + name: 'ARoomDetailMember',
  50 + data() {
  51 + return {
  52 + aRoomDetailMemberInfo: {
  53 + members: [],
  54 + ownerId: '',
  55 + name: '',
  56 + },
  57 + currentPage: 1,
  58 + pageSize: 10,
  59 + total: 0
  60 + }
  61 + },
  62 + created() {
  63 + },
  64 + methods: {
  65 + open(data) {
  66 + this.aRoomDetailMemberInfo.ownerId = data.ownerId
  67 + this._loadARoomDetailMemberData(this.currentPage, this.pageSize)
  68 + },
  69 + handleSwitch(data) {
  70 + this.aRoomDetailMemberInfo.ownerId = data.ownerId
  71 + this._loadARoomDetailMemberData(this.currentPage, this.pageSize)
  72 + },
  73 + handleCurrentChange(val) {
  74 + this.currentPage = val
  75 + this._loadARoomDetailMemberData(val, this.pageSize)
  76 + },
  77 + async _loadARoomDetailMemberData(page, row) {
  78 + if (!this.aRoomDetailMemberInfo.ownerId) return
  79 +
  80 + try {
  81 + const res = await queryAdminOwnerMembers({
  82 + ownerId: this.aRoomDetailMemberInfo.ownerId,
  83 + name: this.aRoomDetailMemberInfo.name,
  84 + page,
  85 + row
  86 + })
  87 + this.aRoomDetailMemberInfo.members = res.data
  88 + this.total = res.records
  89 + } catch (error) {
  90 + console.error('请求失败:', error)
  91 + }
  92 + },
  93 + _qureyARoomDetailMember() {
  94 + this.currentPage = 1
  95 + this._loadARoomDetailMemberData(1, this.pageSize)
  96 + },
  97 + _viewOwnerFace(url) {
  98 + this.$emit('viewImage', url)
  99 + }
  100 + }
  101 +}
  102 +</script>
  103 +
  104 +<style scoped>
  105 +.margin-top {
  106 + margin-top: 20px;
  107 +}
  108 +
  109 +.margin-top-lg {
  110 + margin-top: 30px;
  111 +}
  112 +
  113 +.padding-right-xs {
  114 + padding-right: 10px;
  115 +}
  116 +
  117 +.padding-left-xl {
  118 + padding-left: 20px;
  119 +}
  120 +
  121 +.border-radius {
  122 + border-radius: 4px;
  123 +}
  124 +</style>
0 125 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailMemberDemo.vue 0 → 100644
  1 +<template>
  2 + <a-room-detail-member ref="memberComponent" @viewImage="handleViewImage" />
  3 +</template>
  4 +
  5 +<script>
  6 +import ARoomDetailMember from './aRoomDetailMember'
  7 +
  8 +export default {
  9 + components: {
  10 + ARoomDetailMember
  11 + },
  12 + methods: {
  13 + open(ownerId) {
  14 + this.$refs.memberComponent.handleSwitch({ ownerId })
  15 + },
  16 + handleViewImage(url) {
  17 + // Handle image view
  18 + }
  19 + }
  20 +}
  21 +</script>
0 22 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailRepair.vue 0 → 100644
  1 +<template>
  2 + <div class="margin-top">
  3 + <div class="margin-top">
  4 + <el-table :data="aRoomDetailRepairInfo.repairs" style="width: 100%">
  5 + <el-table-column prop="repairId" :label="$t('aRoomDetailRepair.repairId')" align="center"></el-table-column>
  6 + <el-table-column prop="repairObjName" :label="$t('aRoomDetailRepair.location')" align="center"></el-table-column>
  7 + <el-table-column prop="repairTypeName" :label="$t('aRoomDetailRepair.repairType')" align="center"></el-table-column>
  8 + <el-table-column prop="repairName" :label="$t('aRoomDetailRepair.repairPerson')" align="center"></el-table-column>
  9 + <el-table-column prop="tel" :label="$t('aRoomDetailRepair.contact')" align="center"></el-table-column>
  10 + <el-table-column prop="appointmentTime" :label="$t('aRoomDetailRepair.appointmentTime')" align="center"></el-table-column>
  11 + <el-table-column prop="stateName" :label="$t('aRoomDetailRepair.state')" align="center">
  12 + <template slot-scope="scope">
  13 + {{scope.row.state == '1800' && (scope.row.returnVisitFlag == '001' || scope.row.returnVisitFlag == '002') ?
  14 + `${scope.row.stateName}(${$t('aRoomDetailRepair.taskProcessing')})` : scope.row.stateName}}
  15 + </template>
  16 + </el-table-column>
  17 + <el-table-column :label="$t('common.operation')" align="center">
  18 + <template slot-scope="scope">
  19 + <el-button size="mini" @click="_openRepairDetail(scope.row)">
  20 + {{$t('common.detail')}}
  21 + </el-button>
  22 + </template>
  23 + </el-table-column>
  24 + </el-table>
  25 + <el-row>
  26 + <el-col :span="16" :offset="8">
  27 + <el-pagination
  28 + @current-change="handleCurrentChange"
  29 + :current-page="currentPage"
  30 + :page-size="pageSize"
  31 + layout="total, prev, pager, next"
  32 + :total="total">
  33 + </el-pagination>
  34 + </el-col>
  35 + </el-row>
  36 + </div>
  37 + </div>
  38 +</template>
  39 +
  40 +<script>
  41 +import { listAdminOwnerRepairs } from '@/api/aCommunity/aRoomDetailRepairApi'
  42 +
  43 +export default {
  44 + name: 'ARoomDetailRepair',
  45 + data() {
  46 + return {
  47 + aRoomDetailRepairInfo: {
  48 + repairs: [],
  49 + ownerId: '',
  50 + link: ''
  51 + },
  52 + currentPage: 1,
  53 + pageSize: 10,
  54 + total: 0
  55 + }
  56 + },
  57 + created() {
  58 + },
  59 + methods: {
  60 + open(data) {
  61 + this.aRoomDetailRepairInfo.ownerId = data.ownerId
  62 + this.aRoomDetailRepairInfo.link = data.link
  63 + this._loadARoomDetailRepairData(this.currentPage, this.pageSize)
  64 + },
  65 + handleCurrentChange(val) {
  66 + this.currentPage = val
  67 + this._loadARoomDetailRepairData(val, this.pageSize)
  68 + },
  69 + async _loadARoomDetailRepairData(page, row) {
  70 + try {
  71 + const res = await listAdminOwnerRepairs({
  72 + tel: this.aRoomDetailRepairInfo.link,
  73 + page,
  74 + row
  75 + })
  76 + this.aRoomDetailRepairInfo.repairs = res.data
  77 + this.total = res.records
  78 + } catch (error) {
  79 + console.error('请求失败:', error)
  80 + }
  81 + },
  82 + _qureyARoomDetailRepair() {
  83 + this.currentPage = 1
  84 + this._loadARoomDetailRepairData(1, this.pageSize)
  85 + },
  86 + _openRepairDetail(repairPool) {
  87 + this.$router.push(`/pages/property/ownerRepairDetail?repairId=${repairPool.repairId}`)
  88 + }
  89 + }
  90 +}
  91 +</script>
  92 +
  93 +<style scoped>
  94 +/* Same styles as previous components */
  95 +</style>
0 96 \ No newline at end of file
... ...
src/components/aCommunity/aRoomDetailRepairDemo.vue 0 → 100644
  1 +<template>
  2 + <a-room-detail-repair ref="repairComponent" />
  3 +</template>
  4 +
  5 +<script>
  6 +import ARoomDetailRepair from './aRoomDetailRepair'
  7 +
  8 +export default {
  9 + components: {
  10 + ARoomDetailRepair
  11 + },
  12 + methods: {
  13 + open(data) {
  14 + this.$refs.repairComponent.handleSwitch(data)
  15 + }
  16 + }
  17 +}
  18 +</script>
0 19 \ No newline at end of file
... ...
src/i18n/communityI18n.js
... ... @@ -7,6 +7,7 @@ import { messages as addCommunityPublicityMessages } from &#39;../views/community/ad
7 7 import { messages as editCommunityPublicityMessages } from '../views/community/editCommunityPublicityLang'
8 8 import { messages as handoverMessages } from '../views/room/handoverLang'
9 9 import { messages as ownerExitRoomMessages } from '../views/room/ownerExitRoomLang'
  10 +import { messages as adminRoomDetailMessages } from '../views/aCommunity/adminRoomDetailLang.js'
10 11 export const messages = {
11 12 en: {
12 13 ...roomStructureMessages.en,
... ... @@ -18,6 +19,7 @@ export const messages = {
18 19 ...editCommunityPublicityMessages.en,
19 20 ...handoverMessages.en,
20 21 ...ownerExitRoomMessages.en,
  22 + ...adminRoomDetailMessages.en,
21 23 },
22 24 zh: {
23 25 ...roomStructureMessages.zh,
... ... @@ -29,5 +31,6 @@ export const messages = {
29 31 ...editCommunityPublicityMessages.zh,
30 32 ...handoverMessages.zh,
31 33 ...ownerExitRoomMessages.zh,
  34 + ...adminRoomDetailMessages.zh,
32 35 }
33 36 }
34 37 \ No newline at end of file
... ...
src/router/communityRouter.js
... ... @@ -44,4 +44,9 @@ export default [
44 44 name: '/views/room/ownerExitRoom',
45 45 component: () => import('@/views/room/ownerExitRoomList.vue')
46 46 },
  47 + {
  48 + path: '/pages/community/adminRoomDetail',
  49 + name: '/pages/community/adminRoomDetail',
  50 + component: () => import('@/views/aCommunity/adminRoomDetail.vue')
  51 + },
47 52 ]
48 53 \ No newline at end of file
... ...
src/views/aCommunity/aRoomDetailCarFeeLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + aRoomDetailCarFee: {
  4 + selectCar: 'Select Car',
  5 + feeItem: 'Fee Item',
  6 + feeFlag: 'Fee Flag',
  7 + feeType: 'Fee Type',
  8 + amount: 'Amount',
  9 + createTime: 'Create Time',
  10 + timeRange: 'Time Range',
  11 + description: 'Description',
  12 + state: 'Status',
  13 + operation: 'Operation',
  14 + preDegrees: 'Previous Degrees',
  15 + curDegrees: 'Current Degrees',
  16 + unitPrice: 'Unit Price',
  17 + additionalFee: 'Additional Fee',
  18 + algorithm: 'Algorithm',
  19 + usage: 'Usage',
  20 + fixedFee: 'Fixed Fee',
  21 + note1: 'Note: The end time "-" means the charging time has not arrived or the charging has ended',
  22 + note2: 'Note: The amount -1 generally means an error in the fee formula setting, please check',
  23 + totalArrears: 'Total Arrears',
  24 + parkingLot: ' Parking Lot ',
  25 + parkingSpace: ' Parking Space',
  26 + owner: 'Owner',
  27 + phone: 'Phone',
  28 + noParkingSpace: 'No parking space'
  29 + }
  30 + },
  31 + zh: {
  32 + aRoomDetailCarFee: {
  33 + selectCar: '选择车辆',
  34 + feeItem: '费用项目',
  35 + feeFlag: '费用标识',
  36 + feeType: '费用类型',
  37 + amount: '应收金额',
  38 + createTime: '建账时间',
  39 + timeRange: '应收时间段',
  40 + description: '说明',
  41 + state: '状态',
  42 + operation: '操作',
  43 + preDegrees: '上期度数',
  44 + curDegrees: '本期度数',
  45 + unitPrice: '单价',
  46 + additionalFee: '附加费',
  47 + algorithm: '算法',
  48 + usage: '用量',
  49 + fixedFee: '固定费',
  50 + note1: '注意: 应收结束时间 "-" 表示未到应收时间 或 收费已结束',
  51 + note2: '注意: 应收金额 为-1 一般为费用项公式设置出错请检查',
  52 + totalArrears: '欠费小计',
  53 + parkingLot: '停车场',
  54 + parkingSpace: '停车位',
  55 + owner: '业主',
  56 + phone: '电话',
  57 + noParkingSpace: '没有车位'
  58 + }
  59 + }
  60 +}
0 61 \ No newline at end of file
... ...
src/views/aCommunity/aRoomDetailCarLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + aRoomDetailCar: {
  4 + placeholderCarNum: 'Please enter license plate number',
  5 + carNum: 'License Plate',
  6 + leaseType: 'Plate Type',
  7 + tempCar: 'Temporary Car',
  8 + carType: 'Vehicle Type',
  9 + color: 'Color',
  10 + owner: 'Owner',
  11 + parkingSpace: 'Parking Space',
  12 + released: 'Released',
  13 + validity: 'Validity'
  14 + }
  15 + },
  16 + zh: {
  17 + aRoomDetailCar: {
  18 + placeholderCarNum: '请填写车牌号',
  19 + carNum: '车牌号',
  20 + leaseType: '车牌类型',
  21 + tempCar: '临时车',
  22 + carType: '车辆类型',
  23 + color: '颜色',
  24 + owner: '业主',
  25 + parkingSpace: '车位',
  26 + released: '车位已释放',
  27 + validity: '有效期'
  28 + }
  29 + }
  30 +}
0 31 \ No newline at end of file
... ...
src/views/aCommunity/aRoomDetailComplaintLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + aRoomDetailComplaint: {
  4 + type: 'Type',
  5 + room: 'Room',
  6 + contact: 'Contact',
  7 + phone: 'Phone',
  8 + status: 'Status',
  9 + handler: 'Handler',
  10 + handlerPhone: 'Handler Phone',
  11 + createTime: 'Create Time',
  12 + actions: 'Actions',
  13 + detail: 'Detail',
  14 + flowChart: 'Flow Chart',
  15 + none: 'None'
  16 + }
  17 + },
  18 + zh: {
  19 + aRoomDetailComplaint: {
  20 + type: '类型',
  21 + room: '房屋',
  22 + contact: '联系人',
  23 + phone: '联系电话',
  24 + status: '状态',
  25 + handler: '处理人',
  26 + handlerPhone: '处理人电话',
  27 + createTime: '创建时间',
  28 + actions: '操作',
  29 + detail: '详情',
  30 + flowChart: '流程图',
  31 + none: '无'
  32 + }
  33 + }
  34 +}
0 35 \ No newline at end of file
... ...
src/views/aCommunity/aRoomDetailContractLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + aRoomDetailContract: {
  4 + contractName: 'Contract Name',
  5 + contractCode: 'Contract Code',
  6 + parentContractCode: 'Parent Contract Code',
  7 + contractType: 'Contract Type',
  8 + operator: 'Operator',
  9 + amount: 'Amount',
  10 + startTime: 'Start Time',
  11 + endTime: 'End Time',
  12 + createTime: 'Create Time',
  13 + state: 'Status'
  14 + }
  15 + },
  16 + zh: {
  17 + aRoomDetailContract: {
  18 + contractName: '合同名称',
  19 + contractCode: '合同编号',
  20 + parentContractCode: '父合同编号',
  21 + contractType: '合同类型',
  22 + operator: '经办人',
  23 + amount: '合同金额',
  24 + startTime: '开始时间',
  25 + endTime: '结束时间',
  26 + createTime: '起草时间',
  27 + state: '状态'
  28 + }
  29 + }
  30 +}
0 31 \ No newline at end of file
... ...
src/views/aCommunity/aRoomDetailHisOwnerLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + aRoomDetailHisOwner: {
  4 + ownerName: 'Owner Name',
  5 + ownerPhone: 'Owner Phone',
  6 + startTime: 'Start Time',
  7 + endTime: 'End Time',
  8 + createTime: 'Create Time',
  9 + status: 'Status',
  10 + active: 'Active',
  11 + inactive: 'Inactive'
  12 + }
  13 + },
  14 + zh: {
  15 + aRoomDetailHisOwner: {
  16 + ownerName: '业主名称',
  17 + ownerPhone: '业主电话',
  18 + startTime: '开始时间',
  19 + endTime: '结束时间',
  20 + createTime: '创建时间',
  21 + status: '状态',
  22 + active: '在用',
  23 + inactive: '失效'
  24 + }
  25 + }
  26 +}
0 27 \ No newline at end of file
... ...
src/views/aCommunity/aRoomDetailMemberLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + aRoomDetailMember: {
  4 + placeholderName: 'Please enter member name',
  5 + face: 'Face',
  6 + name: 'Name',
  7 + sex: 'Gender',
  8 + personRole: 'Person Role',
  9 + idCard: 'ID Card',
  10 + contact: 'Contact',
  11 + address: 'Address'
  12 + }
  13 + },
  14 + zh: {
  15 + aRoomDetailMember: {
  16 + placeholderName: '请填写成员名称',
  17 + face: '人脸',
  18 + name: '名称',
  19 + sex: '性别',
  20 + personRole: '人员角色',
  21 + idCard: '身份证',
  22 + contact: '联系方式',
  23 + address: '地址'
  24 + }
  25 + }
  26 +}
0 27 \ No newline at end of file
... ...
src/views/aCommunity/aRoomDetailRepairLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + aRoomDetailRepair: {
  4 + repairId: 'Work Order Code',
  5 + location: 'Location',
  6 + repairType: 'Repair Type',
  7 + repairPerson: 'Repair Person',
  8 + contact: 'Contact',
  9 + appointmentTime: 'Appointment Time',
  10 + state: 'Status',
  11 + taskProcessing: 'Task Processing',
  12 + detail: 'Detail'
  13 + }
  14 + },
  15 + zh: {
  16 + aRoomDetailRepair: {
  17 + repairId: '工单编码',
  18 + location: '位置',
  19 + repairType: '报修类型',
  20 + repairPerson: '报修人',
  21 + contact: '联系方式',
  22 + appointmentTime: '预约时间',
  23 + state: '状态',
  24 + taskProcessing: '定时任务处理',
  25 + detail: '详情'
  26 + }
  27 + }
  28 +}
0 29 \ No newline at end of file
... ...
src/views/aCommunity/adminRoomDetail.vue 0 → 100644
  1 +<template>
  2 + <div class="white-bg padding-lg padding-top border-radius">
  3 + <div class="flex justify-between">
  4 + <div class="text-title">{{ $t('adminRoomDetail.title') }}</div>
  5 + <div>
  6 + <el-button type="primary" size="small" style="margin-left:10px" @click="goBack">
  7 + <i class="el-icon-close"></i>{{ $t('adminRoomDetail.back') }}
  8 + </el-button>
  9 + </div>
  10 + </div>
  11 +
  12 + <!-- 房屋信息 -->
  13 + <div class="margin-top">
  14 + <el-row style="min-height: 160px;">
  15 + <el-col :span="24">
  16 + <el-form class="text-left">
  17 + <el-row>
  18 + <el-col :span="6">
  19 + <el-form-item :label="$t('adminRoomDetailInfo.roomCode')">
  20 + <label>{{ adminRoomDetailInfo.floorNum }}-{{ adminRoomDetailInfo.unitNum }}-{{
  21 + adminRoomDetailInfo.roomNum }}</label>
  22 + </el-form-item>
  23 + </el-col>
  24 + <el-col :span="6">
  25 + <el-form-item :label="$t('adminRoomDetailInfo.floor')">
  26 + <label>{{ adminRoomDetailInfo.layer }}</label>
  27 + </el-form-item>
  28 + </el-col>
  29 + <el-col :span="6">
  30 + <el-form-item :label="$t('adminRoomDetailInfo.roomArea')">
  31 + <label>{{ adminRoomDetailInfo.builtUpArea }}</label>
  32 + </el-form-item>
  33 + </el-col>
  34 + <el-col :span="6">
  35 + <el-form-item :label="$t('adminRoomDetailInfo.roomType')">
  36 + <label>{{ adminRoomDetailInfo.roomSubTypeName }}</label>
  37 + </el-form-item>
  38 + </el-col>
  39 + <el-col :span="6">
  40 + <el-form-item :label="$t('adminRoomDetailInfo.roomStatus')">
  41 + <label>{{ adminRoomDetailInfo.stateName }}</label>
  42 + </el-form-item>
  43 + </el-col>
  44 + <el-col :span="6">
  45 + <el-form-item :label="$t('adminRoomDetailInfo.indoorArea')">
  46 + <label>{{ adminRoomDetailInfo.roomArea }}</label>
  47 + </el-form-item>
  48 + </el-col>
  49 + <el-col :span="6">
  50 + <el-form-item :label="$t('adminRoomDetailInfo.rent')">
  51 + <label>{{ adminRoomDetailInfo.roomRent }}</label>
  52 + </el-form-item>
  53 + </el-col>
  54 + <el-col :span="6">
  55 + <el-form-item :label="$t('adminRoomDetailInfo.validity')">
  56 + <label>{{ adminRoomDetailInfo.startTime }}~{{ adminRoomDetailInfo.endTime }}</label>
  57 + </el-form-item>
  58 + </el-col>
  59 + <el-col :span="6">
  60 + <el-form-item :label="$t('adminRoomDetailInfo.ownerName')">
  61 + <label>{{ adminRoomDetailInfo.ownerName }}</label>
  62 + </el-form-item>
  63 + </el-col>
  64 + <el-col :span="6">
  65 + <el-form-item :label="$t('adminRoomDetailInfo.contact')">
  66 + <label>{{ adminRoomDetailInfo.link }}</label>
  67 + </el-form-item>
  68 + </el-col>
  69 + <el-col :span="12">
  70 + <el-form-item :label="$t('adminRoomDetailInfo.remark')">
  71 + <label>{{ adminRoomDetailInfo.remark }}</label>
  72 + </el-form-item>
  73 + </el-col>
  74 + <el-col :span="6">
  75 + <el-form-item :label="$t('adminRoomDetailInfo.communityName')">
  76 + <label>{{ adminRoomDetailInfo.communityName }}</label>
  77 + </el-form-item>
  78 + </el-col>
  79 + </el-row>
  80 + </el-form>
  81 + </el-col>
  82 + </el-row>
  83 + </div>
  84 +
  85 + <divider></divider>
  86 +
  87 + <div class="margin-top-sm">
  88 + <el-tabs v-model="adminRoomDetailInfo._currentTab" @tab-click="handleTabClick(adminRoomDetailInfo._currentTab)">
  89 + <el-tab-pane :label="$t('adminRoomDetail.owner')" name="aRoomDetailOwner"></el-tab-pane>
  90 + <el-tab-pane v-if="adminRoomDetailInfo.ownerId" :label="$t('adminRoomDetail.member')" name="aRoomDetailMember">
  91 + </el-tab-pane>
  92 + <el-tab-pane v-if="adminRoomDetailInfo.ownerId" :label="$t('adminRoomDetail.ownerRoom')" name="aRoomDetailRoom">
  93 + </el-tab-pane>
  94 + <el-tab-pane v-if="adminRoomDetailInfo.ownerId" :label="$t('adminRoomDetail.ownerCar')" name="aRoomDetailCar">
  95 + </el-tab-pane>
  96 + <el-tab-pane v-if="adminRoomDetailInfo.ownerId" :label="$t('adminRoomDetail.contract')"
  97 + name="aRoomDetailContract">
  98 + </el-tab-pane>
  99 + <el-tab-pane :label="$t('adminRoomDetail.roomFee')" name="aRoomDetailRoomFee">
  100 + </el-tab-pane>
  101 + <el-tab-pane v-if="adminRoomDetailInfo.ownerId" :label="$t('adminRoomDetail.carFee')" name="aRoomDetailCarFee">
  102 + </el-tab-pane>
  103 + <el-tab-pane v-if="adminRoomDetailInfo.ownerId" :label="$t('adminRoomDetail.paymentHistory')"
  104 + name="aRoomDetailHisFee">
  105 + </el-tab-pane>
  106 + <el-tab-pane v-if="adminRoomDetailInfo.ownerId" :label="$t('adminRoomDetail.receipt')"
  107 + name="aRoomDetailReceipt">
  108 + </el-tab-pane>
  109 + <el-tab-pane v-if="adminRoomDetailInfo.ownerId" :label="$t('adminRoomDetail.repair')" name="aRoomDetailRepair">
  110 + </el-tab-pane>
  111 + <el-tab-pane v-if="adminRoomDetailInfo.ownerId" :label="$t('adminRoomDetail.complaint')"
  112 + name="aRoomDetailComplaint">
  113 + </el-tab-pane>
  114 + <el-tab-pane :label="$t('adminRoomDetail.meterReading')" name="aRoomDetailMeterWaterLog">
  115 + </el-tab-pane>
  116 + <el-tab-pane :label="$t('adminRoomDetail.historyOwner')" name="aRoomDetailHisOwner">
  117 + </el-tab-pane>
  118 + </el-tabs>
  119 + </div>
  120 +
  121 + <component :is="adminRoomDetailInfo._currentTab" :ref="adminRoomDetailInfo._currentTab"
  122 + :roomId="adminRoomDetailInfo.roomId" :ownerId="adminRoomDetailInfo.ownerId"
  123 + :ownerName="adminRoomDetailInfo.ownerName" :link="adminRoomDetailInfo.link"></component>
  124 + </div>
  125 +</template>
  126 +
  127 +<script>
  128 +import { getCommunityId } from '@/api/community/communityApi'
  129 +import { getRoomDetail } from '@/api/aCommunity/adminRoomDetailApi'
  130 +import ARoomDetailOwner from '@/components/fee/aRoomDetailOwner'
  131 +import ARoomDetailMember from '@/components/aCommunity/aRoomDetailMember'
  132 +import ARoomDetailRoom from '@/components/fee/aRoomDetailRoom'
  133 +import ARoomDetailCar from '@/components/aCommunity/aRoomDetailCar'
  134 +import ARoomDetailContract from '@/components/aCommunity/aRoomDetailContract'
  135 +import ARoomDetailRoomFee from '@/components/fee/aRoomDetailRoomFee'
  136 +import ARoomDetailCarFee from '@/components/aCommunity/aRoomDetailCarFee'
  137 +import ARoomDetailHisFee from '@/components/fee/aRoomDetailHisFee'
  138 +import ARoomDetailReceipt from '@/components/fee/aRoomDetailReceipt'
  139 +import ARoomDetailRepair from '@/components/aCommunity/aRoomDetailRepair'
  140 +import ARoomDetailComplaint from '@/components/aCommunity/aRoomDetailComplaint'
  141 +import ARoomDetailMeterWaterLog from '@/components/fee/aRoomDetailMeterWaterLog'
  142 +import ARoomDetailHisOwner from '@/components/aCommunity/aRoomDetailHisOwner'
  143 +import Divider from '@/components/system/divider'
  144 +
  145 +export default {
  146 + components: {
  147 + ARoomDetailOwner,
  148 + ARoomDetailMember,
  149 + ARoomDetailRoom,
  150 + ARoomDetailCar,
  151 + ARoomDetailContract,
  152 + ARoomDetailRoomFee,
  153 + ARoomDetailCarFee,
  154 + ARoomDetailHisFee,
  155 + ARoomDetailReceipt,
  156 + ARoomDetailRepair,
  157 + ARoomDetailComplaint,
  158 + ARoomDetailMeterWaterLog,
  159 + ARoomDetailHisOwner,
  160 + Divider
  161 + },
  162 + data() {
  163 + return {
  164 + adminRoomDetailInfo: {
  165 + viewOwnerFlag: '',
  166 + roomId: "",
  167 + floorNum: '',
  168 + unitNum: '',
  169 + roomNum: '',
  170 + layer: "",
  171 + builtUpArea: "",
  172 + roomSubTypeName: "",
  173 + stateName: "",
  174 + roomArea: "",
  175 + roomRent: "",
  176 + startTime: "",
  177 + endTime: "",
  178 + _currentTab: 'aRoomDetailOwner',
  179 + remark: '',
  180 + ownerId: '',
  181 + ownerName: '',
  182 + link: '',
  183 + communityId: '',
  184 + communityName: ''
  185 + }
  186 + }
  187 + },
  188 + created() {
  189 + this.adminRoomDetailInfo.roomId = this.$route.query.roomId
  190 + if (!this.adminRoomDetailInfo.roomId) {
  191 + return
  192 + }
  193 + const currentTab = this.$route.query.currentTab
  194 + if (currentTab) {
  195 + this.adminRoomDetailInfo._currentTab = currentTab
  196 + }
  197 + this.loadAdminRoomInfo()
  198 + this.communityId = getCommunityId()
  199 + },
  200 + methods: {
  201 + loadAdminRoomInfo() {
  202 + getRoomDetail({
  203 + roomId: this.adminRoomDetailInfo.roomId,
  204 + page: 1,
  205 + row: 1
  206 + }).then(res => {
  207 + Object.assign(this.adminRoomDetailInfo, res.data[0])
  208 +
  209 + this.handleTabClick(this.adminRoomDetailInfo._currentTab)
  210 + }).catch(err => {
  211 + console.error('请求失败:', err)
  212 + })
  213 + },
  214 + handleTabClick(tab) {
  215 + this.adminRoomDetailInfo._currentTab = tab
  216 + setTimeout(() => {
  217 + if (this.$refs[tab] && this.$refs[tab].open) {
  218 + this.$refs[tab].open({
  219 + roomId: this.adminRoomDetailInfo.roomId,
  220 + ownerId: this.adminRoomDetailInfo.ownerId,
  221 + ownerName: this.adminRoomDetailInfo.ownerName,
  222 + link: this.adminRoomDetailInfo.link
  223 + })
  224 + }
  225 + }, 500)
  226 + },
  227 + goBack() {
  228 + this.$router.go(-1)
  229 + }
  230 + }
  231 +}
  232 +</script>
  233 +
  234 +<style scoped>
  235 +.white-bg {
  236 + background: #fff;
  237 +}
  238 +
  239 +.padding-lg {
  240 + padding: 20px;
  241 +}
  242 +
  243 +.padding-top {
  244 + padding-top: 20px;
  245 +}
  246 +
  247 +.border-radius {
  248 + border-radius: 4px;
  249 +}
  250 +
  251 +.margin-top {
  252 + margin-top: 20px;
  253 +}
  254 +
  255 +.margin-top-sm {
  256 + margin-top: 10px;
  257 +}
  258 +
  259 +.flex {
  260 + display: flex;
  261 +}
  262 +
  263 +.justify-between {
  264 + justify-content: space-between;
  265 +}
  266 +
  267 +.text-title {
  268 + font-size: 18px;
  269 + font-weight: bold;
  270 +}
  271 +</style>
0 272 \ No newline at end of file
... ...
src/views/aCommunity/adminRoomDetailLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + adminRoomDetail: {
  4 + title: 'Room Details',
  5 + back: 'Back',
  6 + owner: 'Owner',
  7 + member: 'Family Member',
  8 + ownerRoom: 'Owner Room',
  9 + ownerCar: 'Owner Car',
  10 + contract: 'Contract',
  11 + roomFee: 'Room Fee',
  12 + carFee: 'Car Fee',
  13 + paymentHistory: 'Payment History',
  14 + receipt: 'Receipt',
  15 + repair: 'Repair',
  16 + complaint: 'Complaint',
  17 + meterReading: 'Meter Reading',
  18 + historyOwner: 'History Owner'
  19 + },
  20 + adminRoomDetailInfo: {
  21 + roomCode: 'Room Code:',
  22 + floor: 'Floor:',
  23 + roomArea: 'Room Area:',
  24 + roomType: 'Room Type:',
  25 + roomStatus: 'Room Status:',
  26 + indoorArea: 'Indoor Area:',
  27 + rent: 'Rent:',
  28 + validity: 'Validity:',
  29 + ownerName: 'Owner Name:',
  30 + contact: 'Contact:',
  31 + remark: 'Remark:',
  32 + communityName: 'Community Name:'
  33 + },
  34 + aRoomDetailMember: {
  35 + placeholderName: 'Please enter member name',
  36 + face: 'Face',
  37 + name: 'Name',
  38 + sex: 'Gender',
  39 + personRole: 'Person Role',
  40 + idCard: 'ID Card',
  41 + contact: 'Contact',
  42 + address: 'Address'
  43 + },
  44 + aRoomDetailCar: {
  45 + placeholderCarNum: 'Please enter license plate number',
  46 + carNum: 'License Plate',
  47 + leaseType: 'Plate Type',
  48 + tempCar: 'Temporary Car',
  49 + carType: 'Vehicle Type',
  50 + color: 'Color',
  51 + owner: 'Owner',
  52 + parkingSpace: 'Parking Space',
  53 + released: 'Released',
  54 + validity: 'Validity'
  55 + },
  56 + aRoomDetailContract: {
  57 + contractName: 'Contract Name',
  58 + contractCode: 'Contract Code',
  59 + parentContractCode: 'Parent Contract Code',
  60 + contractType: 'Contract Type',
  61 + operator: 'Operator',
  62 + amount: 'Amount',
  63 + startTime: 'Start Time',
  64 + endTime: 'End Time',
  65 + createTime: 'Create Time',
  66 + state: 'Status'
  67 + },
  68 + aRoomDetailCarFee: {
  69 + selectCar: 'Select Car',
  70 + feeItem: 'Fee Item',
  71 + feeFlag: 'Fee Flag',
  72 + feeType: 'Fee Type',
  73 + amount: 'Amount',
  74 + createTime: 'Create Time',
  75 + timeRange: 'Time Range',
  76 + description: 'Description',
  77 + state: 'Status',
  78 + operation: 'Operation',
  79 + preDegrees: 'Previous Degrees',
  80 + curDegrees: 'Current Degrees',
  81 + unitPrice: 'Unit Price',
  82 + additionalFee: 'Additional Fee',
  83 + algorithm: 'Algorithm',
  84 + usage: 'Usage',
  85 + fixedFee: 'Fixed Fee',
  86 + note1: 'Note: The end time "-" means the charging time has not arrived or the charging has ended',
  87 + note2: 'Note: The amount -1 generally means an error in the fee formula setting, please check',
  88 + totalArrears: 'Total Arrears',
  89 + parkingLot: ' Parking Lot ',
  90 + parkingSpace: ' Parking Space',
  91 + owner: 'Owner',
  92 + phone: 'Phone',
  93 + noParkingSpace: 'No parking space'
  94 + },
  95 + aRoomDetailRepair: {
  96 + repairId: 'Work Order Code',
  97 + location: 'Location',
  98 + repairType: 'Repair Type',
  99 + repairPerson: 'Repair Person',
  100 + contact: 'Contact',
  101 + appointmentTime: 'Appointment Time',
  102 + state: 'Status',
  103 + taskProcessing: 'Task Processing',
  104 + detail: 'Detail'
  105 + },
  106 + aRoomDetailComplaint: {
  107 + type: 'Type',
  108 + room: 'Room',
  109 + contact: 'Contact',
  110 + phone: 'Phone',
  111 + status: 'Status',
  112 + handler: 'Handler',
  113 + handlerPhone: 'Handler Phone',
  114 + createTime: 'Create Time',
  115 + actions: 'Actions',
  116 + detail: 'Detail',
  117 + flowChart: 'Flow Chart',
  118 + none: 'None'
  119 + },
  120 + aRoomDetailHisOwner: {
  121 + ownerName: 'Owner Name',
  122 + ownerPhone: 'Owner Phone',
  123 + startTime: 'Start Time',
  124 + endTime: 'End Time',
  125 + createTime: 'Create Time',
  126 + status: 'Status',
  127 + active: 'Active',
  128 + inactive: 'Inactive'
  129 + }
  130 + },
  131 + zh: {
  132 + adminRoomDetail: {
  133 + title: '房屋详情',
  134 + back: '返回',
  135 + owner: '业主',
  136 + member: '家庭成员',
  137 + ownerRoom: '业主房屋',
  138 + ownerCar: '业主车辆',
  139 + contract: '合同',
  140 + roomFee: '房屋费用',
  141 + carFee: '车辆费用',
  142 + paymentHistory: '缴费历史',
  143 + receipt: '收据',
  144 + repair: '报修',
  145 + complaint: '投诉',
  146 + meterReading: '抄表记录',
  147 + historyOwner: '历史业主'
  148 + },
  149 + adminRoomDetailInfo: {
  150 + roomCode: '房屋编号:',
  151 + floor: '楼层:',
  152 + roomArea: '房屋面积:',
  153 + roomType: '房屋类型:',
  154 + roomStatus: '房屋状态:',
  155 + indoorArea: '室内面积:',
  156 + rent: '租金:',
  157 + validity: '有效期:',
  158 + ownerName: '业主名称:',
  159 + contact: '联系电话:',
  160 + remark: '备注:',
  161 + communityName: '小区名称:'
  162 + },
  163 + aRoomDetailMember: {
  164 + placeholderName: '请填写成员名称',
  165 + face: '人脸',
  166 + name: '名称',
  167 + sex: '性别',
  168 + personRole: '人员角色',
  169 + idCard: '身份证',
  170 + contact: '联系方式',
  171 + address: '地址'
  172 + },
  173 + aRoomDetailCar: {
  174 + placeholderCarNum: '请填写车牌号',
  175 + carNum: '车牌号',
  176 + leaseType: '车牌类型',
  177 + tempCar: '临时车',
  178 + carType: '车辆类型',
  179 + color: '颜色',
  180 + owner: '业主',
  181 + parkingSpace: '车位',
  182 + released: '车位已释放',
  183 + validity: '有效期'
  184 + },
  185 + aRoomDetailContract: {
  186 + contractName: '合同名称',
  187 + contractCode: '合同编号',
  188 + parentContractCode: '父合同编号',
  189 + contractType: '合同类型',
  190 + operator: '经办人',
  191 + amount: '合同金额',
  192 + startTime: '开始时间',
  193 + endTime: '结束时间',
  194 + createTime: '起草时间',
  195 + state: '状态'
  196 + },
  197 + aRoomDetailCarFee: {
  198 + selectCar: '选择车辆',
  199 + feeItem: '费用项目',
  200 + feeFlag: '费用标识',
  201 + feeType: '费用类型',
  202 + amount: '应收金额',
  203 + createTime: '建账时间',
  204 + timeRange: '应收时间段',
  205 + description: '说明',
  206 + state: '状态',
  207 + operation: '操作',
  208 + preDegrees: '上期度数',
  209 + curDegrees: '本期度数',
  210 + unitPrice: '单价',
  211 + additionalFee: '附加费',
  212 + algorithm: '算法',
  213 + usage: '用量',
  214 + fixedFee: '固定费',
  215 + note1: '注意: 应收结束时间 "-" 表示未到应收时间 或 收费已结束',
  216 + note2: '注意: 应收金额 为-1 一般为费用项公式设置出错请检查',
  217 + totalArrears: '欠费小计',
  218 + parkingLot: '停车场',
  219 + parkingSpace: '停车位',
  220 + owner: '业主',
  221 + phone: '电话',
  222 + noParkingSpace: '没有车位'
  223 + },
  224 + aRoomDetailRepair: {
  225 + repairId: '工单编码',
  226 + location: '位置',
  227 + repairType: '报修类型',
  228 + repairPerson: '报修人',
  229 + contact: '联系方式',
  230 + appointmentTime: '预约时间',
  231 + state: '状态',
  232 + taskProcessing: '定时任务处理',
  233 + detail: '详情'
  234 + },
  235 + aRoomDetailComplaint: {
  236 + type: '类型',
  237 + room: '房屋',
  238 + contact: '联系人',
  239 + phone: '联系电话',
  240 + status: '状态',
  241 + handler: '处理人',
  242 + handlerPhone: '处理人电话',
  243 + createTime: '创建时间',
  244 + actions: '操作',
  245 + detail: '详情',
  246 + flowChart: '流程图',
  247 + none: '无'
  248 + },
  249 + aRoomDetailHisOwner: {
  250 + ownerName: '业主名称',
  251 + ownerPhone: '业主电话',
  252 + startTime: '开始时间',
  253 + endTime: '结束时间',
  254 + createTime: '创建时间',
  255 + status: '状态',
  256 + active: '在用',
  257 + inactive: '失效'
  258 + }
  259 + }
  260 +}
... ...
src/views/dev/routeList.vue
1 1 <template>
2   - <div class="route-container">
  2 + <div class="route-container padding">
3 3 <!-- 左侧菜单组列表 -->
4 4 <div class="menu-group-wrapper">
5 5 <div class="group-content">
... ... @@ -40,7 +40,8 @@
40 40 <el-table-column prop="orderTypeCd" :label="$t('route.table.orderTypeCd')" />
41 41 <el-table-column :label="$t('common.operation')" width="200" fixed="right">
42 42 <template slot-scope="scope">
43   - <el-button size="mini" type="danger" @click="handleDelete(scope.row)">{{ $t('common.delete') }}</el-button>
  43 + <el-button size="mini" type="danger" @click="handleDelete(scope.row)">{{ $t('common.delete')
  44 + }}</el-button>
44 45 </template>
45 46 </el-table-column>
46 47 </el-table>
... ... @@ -89,7 +90,7 @@ export default {
89 90 },
90 91 created() {
91 92 this.getApps()
92   -
  93 +
93 94 },
94 95 methods: {
95 96 async getApps() {
... ... @@ -101,7 +102,7 @@ export default {
101 102 }
102 103 const { apps } = await getAppList(params)
103 104 this.apps = apps
104   - if(apps && apps.length>0){
  105 + if (apps && apps.length > 0) {
105 106 this.searchForm.appId = apps[0].appId
106 107 this.getList()
107 108 }
... ... @@ -136,7 +137,7 @@ export default {
136 137 this.getList()
137 138 },
138 139 handleAdd() {
139   - this.$router.push('/views/dev/addRoute?appId='+this.searchForm.appId)
  140 + this.$router.push('/views/dev/addRoute?appId=' + this.searchForm.appId)
140 141 },
141 142 handleEdit(row) {
142 143 this.currentRow = { ...row }
... ... @@ -167,8 +168,7 @@ export default {
167 168  
168 169 <style lang="scss" scoped>
169 170 .route-container {
170   - padding: 0;
171   - margin: 0;
  171 +
172 172 display: flex;
173 173 background-color: #f0f2f5;
174 174  
... ...