Commit f6a81350c3e9fa03bb6929785a5e09d22693897b

Authored by wuxw
1 parent a2547628

运营 业主详情开发完成

Showing 43 changed files with 2217 additions and 78 deletions
src/api/aCommunity/aOwnerDetailAccessControlApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function listAdminMachineTranslates(params) {
  4 + return new Promise((resolve, reject) => {
  5 + return request({
  6 + url: '/machineTranslate.listAdminMachineTranslates',
  7 + method: 'get',
  8 + params
  9 + }).then(res => {
  10 + resolve(res.data)
  11 + }).catch(err => {
  12 + reject(err)
  13 + })
  14 + })
  15 +}
0 \ No newline at end of file 16 \ No newline at end of file
src/api/aCommunity/aOwnerDetailCouponApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function listAdminCouponPropertyUser(params) {
  4 + return new Promise((resolve, reject) => {
  5 + return request({
  6 + url: '/couponProperty.listAdminCouponPropertyUser',
  7 + method: 'get',
  8 + params
  9 + }).then(res => {
  10 + resolve(res.data)
  11 + }).catch(err => {
  12 + reject(err)
  13 + })
  14 + })
  15 +}
0 \ No newline at end of file 16 \ No newline at end of file
src/api/aCommunity/aOwnerDetailHisApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function queryAdminHisOwner(params) {
  4 + return new Promise((resolve, reject) => {
  5 + return request({
  6 + url: '/owner.queryAdminHisOwner',
  7 + method: 'get',
  8 + params
  9 + }).then(res => {
  10 + resolve(res.data)
  11 + }).catch(err => {
  12 + reject(err)
  13 + })
  14 + })
  15 +}
  16 +
  17 +export function getOwnerAttrSpec() {
  18 + return request({
  19 + url: '/attrSpec.queryAttrSpec',
  20 + method: 'get',
  21 + params: {
  22 + specCd: 'building_owner_attr'
  23 + }
  24 + }).then(res => {
  25 + return res.data
  26 + })
  27 +}
0 \ No newline at end of file 28 \ No newline at end of file
src/api/aCommunity/aOwnerDetailRoomFeeApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function listAdminFee(params) {
  4 + return new Promise((resolve, reject) => {
  5 + return request({
  6 + url: '/fee.listAdminFee',
  7 + method: 'get',
  8 + params
  9 + }).then(res => {
  10 + resolve(res.data)
  11 + }).catch(err => {
  12 + reject(err)
  13 + })
  14 + })
  15 +}
  16 +
  17 +export function queryAdminOwnerRooms(params) {
  18 + return new Promise((resolve, reject) => {
  19 + return request({
  20 + url: '/room.queryAdminOwnerRooms',
  21 + method: 'get',
  22 + params
  23 + }).then(res => {
  24 + resolve(res.data)
  25 + }).catch(err => {
  26 + reject(err)
  27 + })
  28 + })
  29 +}
0 \ No newline at end of file 30 \ No newline at end of file
src/api/aCommunity/aOwnerDetailVisitApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function listAdminVisits(params) {
  4 + return new Promise((resolve, reject) => {
  5 + return request({
  6 + url: '/visit.listAdminVisits',
  7 + method: 'get',
  8 + params
  9 + }).then(res => {
  10 + resolve(res.data)
  11 + }).catch(err => {
  12 + reject(err)
  13 + })
  14 + })
  15 +}
0 \ No newline at end of file 16 \ No newline at end of file
src/api/aCommunity/adminOwnerDetailAccessControlRecordApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function listAdminMachineRecords(params) {
  4 + return request({
  5 + url: '/machineRecord.listAdminMachineRecords',
  6 + method: 'get',
  7 + params
  8 + }).then(res => {
  9 + return res.data
  10 + })
  11 +}
0 \ No newline at end of file 12 \ No newline at end of file
src/api/aCommunity/adminOwnerDetailApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +// 获取业主详情
  4 +export function getOwnerDetail(params) {
  5 + return new Promise((resolve, reject) => {
  6 + request({
  7 + url: '/owner.queryAdminOwners',
  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 updateOwnerInfo(data) {
  25 + return new Promise((resolve, reject) => {
  26 + request({
  27 + url: '/owner.updateOwner',
  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 || '更新业主信息失败'))
  36 + }
  37 + }).catch(error => {
  38 + reject(error)
  39 + })
  40 + })
  41 +}
  42 +
  43 +// 获取业主属性列表
  44 +export function getOwnerAttributes(params) {
  45 + return new Promise((resolve, reject) => {
  46 + request({
  47 + url: '/owner.listOwnerAttributes',
  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 +}
0 \ No newline at end of file 62 \ No newline at end of file
src/api/aCommunity/adminOwnerDetailChargeMachineOrderApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function listAdminMachineOrders(params) {
  4 + return request({
  5 + url: '/machineOrder.listAdminMachineOrders',
  6 + method: 'get',
  7 + params
  8 + }).then(res => {
  9 + return res.data
  10 + })
  11 +}
0 \ No newline at end of file 12 \ No newline at end of file
src/components/aCommunity/aOwnerDetailAccessControl.vue 0 → 100644
  1 +<template>
  2 + <div class="owner-detail-access-control">
  3 + <div class="margin-top">
  4 + <el-table :data="aOwnerDetailAccessControlInfo.translates" border style="width: 100%">
  5 + <el-table-column prop="typeCdName" :label="$t('aOwnerDetailAccessControl.objectType')" align="center" />
  6 + <el-table-column prop="objName" :label="$t('aOwnerDetailAccessControl.objectName')" align="center" />
  7 + <el-table-column prop="machineCmdName" :label="$t('aOwnerDetailAccessControl.command')" align="center" />
  8 + <el-table-column prop="stateName" :label="$t('aOwnerDetailAccessControl.status')" align="center" />
  9 + <el-table-column prop="remark" :label="$t('aOwnerDetailAccessControl.description')" align="center">
  10 + <template #default="{ row }">
  11 + <div class="hc-td">{{ row.remark }}</div>
  12 + </template>
  13 + </el-table-column>
  14 + <el-table-column prop="updateTime" :label="$t('aOwnerDetailAccessControl.syncTime')" align="center" />
  15 + </el-table>
  16 +
  17 + <el-row class="margin-top">
  18 + <el-col :span="16"></el-col>
  19 + <el-col :span="8">
  20 + <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize"
  21 + layout="total, prev, pager, next" :total="total" />
  22 + </el-col>
  23 + </el-row>
  24 + </div>
  25 + </div>
  26 +</template>
  27 +
  28 +<script>
  29 +import { listAdminMachineTranslates } from '@/api/aCommunity/aOwnerDetailAccessControlApi'
  30 +export default {
  31 + name: 'AOwnerDetailAccessControl',
  32 + data() {
  33 + return {
  34 + DEFAULT_PAGE: 1,
  35 + DEFAULT_ROWS: 10,
  36 + aOwnerDetailAccessControlInfo: {
  37 + translates: [],
  38 + ownerId: ''
  39 + },
  40 + currentPage: 1,
  41 + pageSize: 10,
  42 + total: 0
  43 + }
  44 + },
  45 + methods: {
  46 + open(data) {
  47 + this.aOwnerDetailAccessControlInfo.ownerId = data.ownerId
  48 + this._loadAOwnerDetailAccessControlData(this.DEFAULT_PAGE, this.DEFAULT_ROWS)
  49 + },
  50 + handleCurrentChange(val) {
  51 + this.currentPage = val
  52 + this._loadAOwnerDetailAccessControlData(val, this.DEFAULT_ROWS)
  53 + },
  54 + async _loadAOwnerDetailAccessControlData(page, row) {
  55 + const param = {
  56 + page,
  57 + row,
  58 + objId: this.aOwnerDetailAccessControlInfo.ownerId,
  59 + typeCd: '8899'
  60 + }
  61 +
  62 + try {
  63 + const response = await listAdminMachineTranslates(param)
  64 + this.aOwnerDetailAccessControlInfo.translates = response.machineTranslates
  65 + this.total = response.records
  66 + this.currentPage = page
  67 + } catch (error) {
  68 + console.error('请求失败:', error)
  69 + }
  70 + }
  71 + }
  72 +}
  73 +</script>
  74 +
  75 +<style scoped>
  76 +.margin-top {
  77 + margin-top: 20px;
  78 +}
  79 +
  80 +.hc-td {
  81 + white-space: nowrap;
  82 + overflow: hidden;
  83 + text-overflow: ellipsis;
  84 + max-width: 200px;
  85 +}
  86 +</style>
0 \ No newline at end of file 87 \ No newline at end of file
src/components/aCommunity/aOwnerDetailAccessControlDemo.vue 0 → 100644
  1 +<template>
  2 + <a-owner-detail-access-control ref="accessControlComponent" />
  3 +</template>
  4 +
  5 +<script>
  6 +import AOwnerDetailAccessControl from './aOwnerDetailAccessControl'
  7 +
  8 +export default {
  9 + components: {
  10 + AOwnerDetailAccessControl
  11 + },
  12 + methods: {
  13 + open(data) {
  14 + this.$refs.accessControlComponent.handleSwitch(data)
  15 + }
  16 + }
  17 +}
  18 +</script>
0 \ No newline at end of file 19 \ No newline at end of file
src/components/aCommunity/aOwnerDetailCoupon.vue 0 → 100644
  1 +<template>
  2 + <div class="owner-detail-coupon">
  3 + <div class="margin-top">
  4 + <el-table :data="aOwnerDetailCouponInfo.coupons" border style="width: 100%">
  5 + <el-table-column prop="couponId" :label="$t('aOwnerDetailCoupon.id')" align="center" />
  6 + <el-table-column prop="couponName" :label="$t('aOwnerDetailCoupon.couponName')" align="center" />
  7 + <el-table-column prop="value" :label="$t('aOwnerDetailCoupon.faceValue')" align="center" />
  8 + <el-table-column prop="validityDay" :label="$t('aOwnerDetailCoupon.validity')" align="center" />
  9 + <el-table-column prop="userName" :label="$t('aOwnerDetailCoupon.userName')" align="center" />
  10 + <el-table-column prop="tel" :label="$t('aOwnerDetailCoupon.phone')" align="center" />
  11 + <el-table-column prop="toTypeName" :label="$t('aOwnerDetailCoupon.purpose')" align="center" />
  12 + <el-table-column prop="stock" :label="$t('aOwnerDetailCoupon.quantity')" align="center">
  13 + <template #default="{ row }">
  14 + {{ row.stock }}{{ $t('aOwnerDetailCoupon.sheet') }}
  15 + </template>
  16 + </el-table-column>
  17 + <el-table-column prop="state" :label="$t('aOwnerDetailCoupon.status')" align="center">
  18 + <template #default="{ row }">
  19 + {{ row.state === '1001' ? $t('aOwnerDetailCoupon.unused') : $t('aOwnerDetailCoupon.used') }}
  20 + </template>
  21 + </el-table-column>
  22 + <el-table-column prop="startTime" :label="$t('aOwnerDetailCoupon.effectiveTime')" align="center" />
  23 + </el-table>
  24 +
  25 + <el-row class="margin-top">
  26 + <el-col :span="16"></el-col>
  27 + <el-col :span="8">
  28 + <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize"
  29 + layout="total, prev, pager, next" :total="total" />
  30 + </el-col>
  31 + </el-row>
  32 + </div>
  33 + </div>
  34 +</template>
  35 +
  36 +<script>
  37 +import { listAdminCouponPropertyUser } from '@/api/aCommunity/aOwnerDetailCouponApi'
  38 +export default {
  39 + name: 'AOwnerDetailCoupon',
  40 + data() {
  41 + return {
  42 + DEFAULT_PAGE: 1,
  43 + DEFAULT_ROWS: 10,
  44 + aOwnerDetailCouponInfo: {
  45 + coupons: [],
  46 + ownerId: '',
  47 + link: ''
  48 + },
  49 + currentPage: 1,
  50 + pageSize: 10,
  51 + total: 0
  52 + }
  53 + },
  54 + methods: {
  55 + open(data) {
  56 + this.aOwnerDetailCouponInfo.ownerId = data.ownerId
  57 + this.aOwnerDetailCouponInfo.link = data.link
  58 + this._loadAOwnerDetailCouponData(this.DEFAULT_PAGE, this.DEFAULT_ROWS)
  59 + },
  60 + handleCurrentChange(val) {
  61 + this.currentPage = val
  62 + this._loadAOwnerDetailCouponData(val, this.DEFAULT_ROWS)
  63 + },
  64 + async _loadAOwnerDetailCouponData(page, row) {
  65 + const param = {
  66 + page,
  67 + row,
  68 + tel: this.aOwnerDetailCouponInfo.link
  69 + }
  70 +
  71 + try {
  72 + const response = await listAdminCouponPropertyUser(param)
  73 + this.aOwnerDetailCouponInfo.coupons = response.data
  74 + this.total = response.records
  75 + this.currentPage = page
  76 + } catch (error) {
  77 + console.error('请求失败:', error)
  78 + }
  79 + }
  80 + }
  81 +}
  82 +</script>
  83 +
  84 +<style scoped>
  85 +.margin-top {
  86 + margin-top: 20px;
  87 +}
  88 +</style>
0 \ No newline at end of file 89 \ No newline at end of file
src/components/aCommunity/aOwnerDetailCouponDemo.vue 0 → 100644
  1 +<template>
  2 + <a-owner-detail-coupon ref="couponComponent" />
  3 +</template>
  4 +
  5 +<script>
  6 +import AOwnerDetailCoupon from './aOwnerDetailCoupon'
  7 +
  8 +export default {
  9 + components: {
  10 + AOwnerDetailCoupon
  11 + },
  12 + methods: {
  13 + open(data) {
  14 + this.$refs.couponComponent.handleSwitch(data)
  15 + }
  16 + }
  17 +}
  18 +</script>
0 \ No newline at end of file 19 \ No newline at end of file
src/components/aCommunity/aOwnerDetailHis.vue 0 → 100644
  1 +<template>
  2 + <div class="owner-detail-his">
  3 + <div class="margin-top">
  4 + <el-table :data="aOwnerDetailHisInfo.owners" border style="width: 100%">
  5 + <el-table-column prop="operate" :label="$t('aOwnerDetailHis.action')" align="center">
  6 + <template #default="{ row }">
  7 + {{ _getHisOwnerOperate(row) }}
  8 + </template>
  9 + </el-table-column>
  10 + <el-table-column prop="userName" :label="$t('aOwnerDetailHis.operator')" align="center">
  11 + <template #default="{ row }">
  12 + {{ row.userName || '-' }}
  13 + </template>
  14 + </el-table-column>
  15 + <el-table-column prop="createTime" :label="$t('aOwnerDetailHis.operateTime')" align="center" />
  16 + <el-table-column prop="name" :label="$t('aOwnerDetailHis.name')" align="center">
  17 + <template #default="{ row }">
  18 + {{ row.name }}({{ row.link }})
  19 + </template>
  20 + </el-table-column>
  21 + <el-table-column prop="sex" :label="$t('aOwnerDetailHis.gender')" align="center">
  22 + <template #default="{ row }">
  23 + {{ row.sex == 0 ? $t('common.male') : $t('common.female') }}
  24 + </template>
  25 + </el-table-column>
  26 + <el-table-column prop="idCard" :label="$t('aOwnerDetailHis.idCard')" align="center">
  27 + <template #default="{ row }">
  28 + {{ row.idCard || '-' }}
  29 + </template>
  30 + </el-table-column>
  31 + <el-table-column prop="address" :label="$t('aOwnerDetailHis.address')" align="center">
  32 + <template #default="{ row }">
  33 + {{ row.address || '-' }}
  34 + </template>
  35 + </el-table-column>
  36 + <el-table-column v-for="(item, index) in aOwnerDetailHisInfo.listColumns" :key="index" :label="item"
  37 + align="center">
  38 + <template #default="{ row }">
  39 + {{ row.listValues[index] || '-' }}
  40 + </template>
  41 + </el-table-column>
  42 + </el-table>
  43 +
  44 + <el-row class="margin-top">
  45 + <el-col :span="4"></el-col>
  46 + <el-col :span="20" class="text-right">
  47 + <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize"
  48 + layout="total, prev, pager, next" :total="total" />
  49 + </el-col>
  50 + </el-row>
  51 + </div>
  52 + </div>
  53 +</template>
  54 +
  55 +<script>
  56 +import { getDict } from '@/api/community/communityApi'
  57 +import { queryAdminHisOwner } from '@/api/aCommunity/aOwnerDetailHisApi'
  58 +
  59 +export default {
  60 + name: 'AOwnerDetailHis',
  61 + data() {
  62 + return {
  63 + DEFAULT_PAGE: 1,
  64 + DEFAULT_ROWS: 10,
  65 + aOwnerDetailHisInfo: {
  66 + owners: [],
  67 + ownerId: '',
  68 + ownerName: '',
  69 + carNum: '',
  70 + listColumns: [],
  71 + logStartTime: '',
  72 + logEndTime: '',
  73 + ownerNameLike: '',
  74 + staffNameLike: ''
  75 + },
  76 + currentPage: 1,
  77 + pageSize: 10,
  78 + total: 0
  79 + }
  80 + },
  81 + methods: {
  82 + open(data) {
  83 + this.aOwnerDetailHisInfo.ownerId = data.ownerId
  84 + this.aOwnerDetailHisInfo.ownerName = data.ownerName
  85 + this.aOwnerDetailHisInfo.ownerNameLike = data.ownerNameLike
  86 + this.aOwnerDetailHisInfo.logStartTime = data.logStartTime
  87 + this.aOwnerDetailHisInfo.logEndTime = data.logEndTime
  88 + this.aOwnerDetailHisInfo.staffNameLike = data.staffNameLike
  89 + this._getHisColumns(() => {
  90 + this._loadAOwnerDetailHisData(this.DEFAULT_PAGE, this.DEFAULT_ROWS)
  91 + })
  92 + },
  93 + handleNotify() {
  94 + this._loadAOwnerDetailHisData(this.DEFAULT_PAGE, this.DEFAULT_ROWS)
  95 + },
  96 + handleCurrentChange(val) {
  97 + this.currentPage = val
  98 + this._loadAOwnerDetailHisData(val, this.DEFAULT_ROWS)
  99 + },
  100 + async _loadAOwnerDetailHisData(page, row) {
  101 + const param = {
  102 + memberId: this.aOwnerDetailHisInfo.ownerId,
  103 + ownerNameLike: this.aOwnerDetailHisInfo.ownerNameLike,
  104 + logStartTime: this.aOwnerDetailHisInfo.logStartTime,
  105 + logEndTime: this.aOwnerDetailHisInfo.logEndTime,
  106 + staffNameLike: this.aOwnerDetailHisInfo.staffNameLike,
  107 + page,
  108 + row
  109 + }
  110 +
  111 + try {
  112 + const response = await queryAdminHisOwner(param)
  113 + this.aOwnerDetailHisInfo.owners = response.data
  114 + this.dealOwnerAttr(response.data)
  115 + this.total = response.records
  116 + this.currentPage = page
  117 + } catch (error) {
  118 + console.error('请求失败:', error)
  119 + }
  120 + },
  121 + dealOwnerAttr(owners) {
  122 + if (!owners) return
  123 + owners.forEach(item => {
  124 + this._getHisColumnsValue(item)
  125 + })
  126 + },
  127 + _getHisColumnsValue(owner) {
  128 + owner.listValues = []
  129 + if (!Object.prototype.hasOwnProperty.call(owner, 'ownerAttrDtos') || owner.ownerAttrDtos.length < 1) {
  130 + this.aOwnerDetailHisInfo.listColumns.forEach(() => {
  131 + owner.listValues.push('')
  132 + })
  133 + return
  134 + }
  135 + const ownerAttrDtos = owner.ownerAttrDtos
  136 + this.aOwnerDetailHisInfo.listColumns.forEach(value => {
  137 + let tmpValue = ''
  138 + ownerAttrDtos.forEach(attrItem => {
  139 + if (value === attrItem.specName) {
  140 + tmpValue = attrItem.valueName
  141 + }
  142 + })
  143 + owner.listValues.push(tmpValue)
  144 + })
  145 + },
  146 + async _getHisColumns(callback) {
  147 + this.aOwnerDetailHisInfo.listColumns = []
  148 + try {
  149 + const data = await getDict('building_owner_attr')
  150 + this.aOwnerDetailHisInfo.listColumns = data.filter(item => item.listShow === 'Y').map(item => item.specName)
  151 + callback()
  152 + } catch (error) {
  153 + console.error('获取属性规格失败:', error)
  154 + }
  155 + },
  156 + _getHisOwnerOperate(owner) {
  157 + let ownerCount = 0
  158 + this.aOwnerDetailHisInfo.owners.forEach(item => {
  159 + if (owner.bId === item.bId) {
  160 + ownerCount += 1
  161 + }
  162 + })
  163 + if (ownerCount <= 1) {
  164 + if (owner.operate === 'ADD') return this.$t('aOwnerDetailHis.add')
  165 + if (owner.operate === 'DEL') return this.$t('aOwnerDetailHis.delete')
  166 + return '-'
  167 + }
  168 + if (owner.operate === 'ADD') return this.$t('aOwnerDetailHis.modifyNew')
  169 + if (owner.operate === 'DEL') return this.$t('aOwnerDetailHis.modifyOld')
  170 + return '-'
  171 + }
  172 + }
  173 +}
  174 +</script>
  175 +
  176 +<style scoped>
  177 +.margin-top {
  178 + margin-top: 20px;
  179 +}
  180 +
  181 +.text-right {
  182 + text-align: right;
  183 +}
  184 +</style>
0 \ No newline at end of file 185 \ No newline at end of file
src/components/aCommunity/aOwnerDetailHisDemo.vue 0 → 100644
  1 +<template>
  2 + <a-owner-detail-his ref="hisComponent" />
  3 +</template>
  4 +
  5 +<script>
  6 +import AOwnerDetailHis from './aOwnerDetailHis'
  7 +
  8 +export default {
  9 + components: {
  10 + AOwnerDetailHis
  11 + },
  12 + methods: {
  13 + open(data) {
  14 + this.$refs.hisComponent.handleSwitch(data)
  15 + },
  16 + refresh() {
  17 + this.$refs.hisComponent.handleNotify()
  18 + }
  19 + }
  20 +}
  21 +</script>
0 \ No newline at end of file 22 \ No newline at end of file
src/components/aCommunity/aOwnerDetailRoomFee.vue 0 → 100644
  1 +<template>
  2 + <div class="owner-detail-room-fee">
  3 + <div class="margin-top">
  4 + <el-row class="margin-top-lg">
  5 + <el-col :span="16">
  6 + <span class="margin-right" v-for="(item, index) in aOwnerDetailRoomFeeInfo.payObjs" :key="index">
  7 + <el-checkbox class="checkRoomItem" :value="item.roomId" v-model="aOwnerDetailRoomFeeInfo.payerObjIds"
  8 + @change="_chanagePayerObjId">
  9 + {{ item.floorNum }}-{{ item.unitNum }}-{{ item.roomNum }}
  10 + </el-checkbox>
  11 + </span>
  12 + </el-col>
  13 + <el-col :span="8">
  14 + <el-select v-model="aOwnerDetailRoomFeeInfo.state" @change="_changeContractConfigId" size="small">
  15 + <el-option :label="$t('aOwnerDetailRoomFee.selectStatus')" value="" />
  16 + <el-option :label="$t('aOwnerDetailRoomFee.valid')" value="2008001" />
  17 + <el-option :label="$t('aOwnerDetailRoomFee.chargeEnd')" value="2009001" />
  18 + </el-select>
  19 + </el-col>
  20 + </el-row>
  21 +
  22 + <div class="margin-top">
  23 + <el-table :data="aOwnerDetailRoomFeeInfo.fees" border style="width: 100%">
  24 + <el-table-column prop="payerObjName" :label="$t('aOwnerDetailRoomFee.room')" align="center" />
  25 + <el-table-column prop="feeName" :label="$t('aOwnerDetailRoomFee.feeItem')" align="center" />
  26 + <el-table-column prop="feeFlagName" :label="$t('aOwnerDetailRoomFee.feeFlag')" align="center" />
  27 + <el-table-column prop="feeTypeCdName" :label="$t('aOwnerDetailRoomFee.feeType')" align="center" />
  28 + <el-table-column prop="amountOwed" :label="$t('aOwnerDetailRoomFee.amountReceivable')" align="center" />
  29 + <el-table-column prop="startTime" :label="$t('aOwnerDetailRoomFee.accountTime')" align="center" />
  30 + <el-table-column :label="$t('aOwnerDetailRoomFee.receivablePeriod')" align="center">
  31 + <template #default="{ row }">
  32 + {{ _getRoomEndTime(row) }}~<br>{{ _getRoomDeadlineTime(row) }}
  33 + </template>
  34 + </el-table-column>
  35 + <el-table-column :label="$t('aOwnerDetailRoomFee.description')" align="center">
  36 + <template #default="{ row }">
  37 + <div v-if="row.computingFormula === '5005' || row.computingFormula === '9009'">
  38 + <div>{{ $t('aOwnerDetailRoomFee.lastDegree') }}: {{ row.preDegrees }}</div>
  39 + <div>{{ $t('aOwnerDetailRoomFee.currentDegree') }}: {{ row.curDegrees }}</div>
  40 + <div>{{ $t('aOwnerDetailRoomFee.unitPrice') }}: {{ row.mwPrice ? row.mwPrice : row.squarePrice }}</div>
  41 + <div>{{ $t('aOwnerDetailRoomFee.additionalFee') }}: {{ row.additionalAmount }}</div>
  42 + </div>
  43 + <div v-else-if="row.computingFormula === '6006'">
  44 + <div>{{ $t('aOwnerDetailRoomFee.usage') }}: {{ _getRoomAttrValue(row.feeAttrs, '390006') }}</div>
  45 + <div>{{ $t('aOwnerDetailRoomFee.unitPrice') }}: {{ row.squarePrice }}</div>
  46 + <div>{{ $t('aOwnerDetailRoomFee.additionalFee') }}: {{ row.additionalAmount }}</div>
  47 + </div>
  48 + <div v-else-if="row.feeTypeCd === '888800010017'" style="width: 150px">
  49 + <div>{{ $t('aOwnerDetailRoomFee.algorithm') }}: {{ _getRoomAttrValue(row.feeAttrs, '390005') }}</div>
  50 + <div>{{ $t('aOwnerDetailRoomFee.usage') }}: {{ _getRoomAttrValue(row.feeAttrs, '390003') }}</div>
  51 + </div>
  52 + <div v-else-if="row.computingFormula === '4004'" style="width: 150px">
  53 + <div>{{ $t('aOwnerDetailRoomFee.feeBasedOnActual') }}</div>
  54 + </div>
  55 + <div v-else>
  56 + <div>{{ $t('aOwnerDetailRoomFee.unitPrice') }}: {{ row.squarePrice }}</div>
  57 + <div v-if="row.feeFlag === '1003006'">{{ $t('aOwnerDetailRoomFee.additionalFee') }}:
  58 + {{ row.additionalAmount }}</div>
  59 + <div v-else>{{ $t('aOwnerDetailRoomFee.fixedFee') }}: {{ row.additionalAmount }}</div>
  60 + </div>
  61 + </template>
  62 + </el-table-column>
  63 + <el-table-column prop="stateName" :label="$t('aOwnerDetailRoomFee.status')" align="center" />
  64 + <el-table-column :label="$t('aOwnerDetailRoomFee.operation')" align="center" />
  65 + </el-table>
  66 +
  67 + <el-row class="margin-top">
  68 + <el-col :span="12">
  69 + <div>{{ $t('aOwnerDetailRoomFee.note1') }}</div>
  70 + <div>{{ $t('aOwnerDetailRoomFee.note2') }}</div>
  71 + </el-col>
  72 + <el-col :span="4">
  73 + <span>{{ $t('aOwnerDetailRoomFee.arrearsSubtotal') }}</span>
  74 + {{ aOwnerDetailRoomFeeInfo.totalAmount }}
  75 + </el-col>
  76 + <el-col :span="8">
  77 + <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize"
  78 + layout="total, prev, pager, next" :total="total" />
  79 + </el-col>
  80 + </el-row>
  81 + </div>
  82 + </div>
  83 + </div>
  84 +</template>
  85 +
  86 +<script>
  87 +import { listAdminFee,queryAdminOwnerRooms } from '@/api/aCommunity/aOwnerDetailRoomFeeApi'
  88 +//import { getCommunityId } from '@/api/community/communityApi'
  89 +import { dateFormat } from '@/utils/dateUtil'
  90 +
  91 +export default {
  92 + name: 'AOwnerDetailRoomFee',
  93 + data() {
  94 + return {
  95 + DEFAULT_PAGE: 1,
  96 + DEFAULT_ROWS: 30,
  97 + aOwnerDetailRoomFeeInfo: {
  98 + fees: [],
  99 + roomNum: '',
  100 + allOweFeeAmount: '0',
  101 + payObjs: [],
  102 + payerObjIds: [],
  103 + ownerId: '',
  104 + state: '2008001',
  105 + totalAmount: 0
  106 + },
  107 + currentPage: 1,
  108 + pageSize: 10,
  109 + total: 0
  110 + }
  111 + },
  112 + methods: {
  113 + open(data) {
  114 + this.aOwnerDetailRoomFeeInfo.ownerId = data.ownerId
  115 + this._loadDetailRoomsData()
  116 + },
  117 + handleNotify() {
  118 + this._loadAOwnerDetailRoomFeeData(this.DEFAULT_PAGE, this.DEFAULT_ROWS)
  119 + },
  120 + handleCurrentChange(val) {
  121 + this.currentPage = val
  122 + this._loadAOwnerDetailRoomFeeData(val, this.DEFAULT_ROWS)
  123 + },
  124 + async _loadAOwnerDetailRoomFeeData(page, row) {
  125 + const payerObjIds = this.aOwnerDetailRoomFeeInfo.payerObjIds.join(',')
  126 + const param = {
  127 + page,
  128 + row,
  129 + payerObjIds,
  130 + state: this.aOwnerDetailRoomFeeInfo.state
  131 + }
  132 +
  133 + try {
  134 + const response = await listAdminFee(param)
  135 + this.total = response.records
  136 + this.aOwnerDetailRoomFeeInfo.fees = response.fees
  137 + this.currentPage = page
  138 +
  139 + let totalAmount = 0.0
  140 + this.aOwnerDetailRoomFeeInfo.fees.forEach(item => {
  141 + totalAmount += parseFloat(item.amountOwed)
  142 + })
  143 + this.aOwnerDetailRoomFeeInfo.totalAmount = totalAmount.toFixed(2)
  144 + } catch (error) {
  145 + console.error('请求失败:', error)
  146 + }
  147 + },
  148 + _getRoomAttrValue(attrs, specCd) {
  149 + let value = ""
  150 + attrs.forEach(item => {
  151 + if (item.specCd === specCd) {
  152 + value = item.value
  153 + return
  154 + }
  155 + })
  156 + return value
  157 + },
  158 + _getRoomDeadlineTime(fee) {
  159 + if (fee.amountOwed === 0 && fee.endTime === fee.deadlineTime) {
  160 + return "-"
  161 + }
  162 + if (fee.state === '2009001') {
  163 + return "-"
  164 + }
  165 + return dateFormat(fee.deadlineTime)
  166 + },
  167 + _getRoomEndTime(fee) {
  168 + if (fee.state === '2009001') {
  169 + return "-"
  170 + }
  171 + return dateFormat(fee.endTime)
  172 + },
  173 + _chanagePayerObjId() {
  174 + this._loadAOwnerDetailRoomFeeData(this.DEFAULT_PAGE, this.DEFAULT_ROWS)
  175 + },
  176 + _changeContractConfigId() {
  177 + this._loadAOwnerDetailRoomFeeData(this.DEFAULT_PAGE, this.DEFAULT_ROWS)
  178 + },
  179 + async _loadDetailRoomsData() {
  180 + const param = {
  181 + ownerId: this.aOwnerDetailRoomFeeInfo.ownerId,
  182 + page: 1,
  183 + row: 100
  184 + }
  185 + this.aOwnerDetailRoomFeeInfo.payerObjIds = []
  186 +
  187 + try {
  188 + const response = await queryAdminOwnerRooms(param)
  189 + this.aOwnerDetailRoomFeeInfo.payObjs = response.rooms
  190 + response.rooms.forEach(room => {
  191 + this.aOwnerDetailRoomFeeInfo.payerObjIds.push(room.roomId)
  192 + })
  193 + this._loadAOwnerDetailRoomFeeData(this.DEFAULT_PAGE, this.DEFAULT_ROWS)
  194 + } catch (error) {
  195 + console.error('请求失败:', error)
  196 + }
  197 + }
  198 + }
  199 +}
  200 +</script>
  201 +
  202 +<style scoped>
  203 +.margin-top {
  204 + margin-top: 20px;
  205 +}
  206 +
  207 +.margin-top-lg {
  208 + margin-top: 30px;
  209 +}
  210 +
  211 +.margin-right {
  212 + margin-right: 15px;
  213 +}
  214 +</style>
0 \ No newline at end of file 215 \ No newline at end of file
src/components/aCommunity/aOwnerDetailRoomFeeDemo.vue 0 → 100644
  1 +<template>
  2 + <a-owner-detail-room-fee ref="roomFeeComponent" />
  3 +</template>
  4 +
  5 +<script>
  6 +import AOwnerDetailRoomFee from './aOwnerDetailRoomFee'
  7 +
  8 +export default {
  9 + components: {
  10 + AOwnerDetailRoomFee
  11 + },
  12 + methods: {
  13 + open(data) {
  14 + this.$refs.roomFeeComponent.handleSwitch(data)
  15 + },
  16 + refresh() {
  17 + this.$refs.roomFeeComponent.handleNotify()
  18 + }
  19 + }
  20 +}
  21 +</script>
0 \ No newline at end of file 22 \ No newline at end of file
src/components/aCommunity/aOwnerDetailVisit.vue 0 → 100644
  1 +<template>
  2 + <div class="owner-detail-visit">
  3 + <div class="margin-top">
  4 + <el-table :data="aOwnerDetailVisitInfo.visits" border style="width: 100%">
  5 + <el-table-column prop="vId" :label="$t('aOwnerDetailVisit.visitorId')" align="center" />
  6 + <el-table-column :label="$t('aOwnerDetailVisit.photo')" align="center">
  7 + <template #default="{ row }">
  8 + <div style="position: relative; display: inline-block;"
  9 + @click="showVisitImg(row.url ? row.url : '/img/noPhoto.jpg')">
  10 + <img width="50" height="50" :src="row.url ? row.url : '/img/noPhoto.jpg'" @error="handleImageError">
  11 + <img src="/img/icon-bigimg.png" style="position: absolute;right: 0;bottom: 0;" width="50" height="50"
  12 + alt="">
  13 + </div>
  14 + </template>
  15 + </el-table-column>
  16 + <el-table-column :label="$t('aOwnerDetailVisit.visitor')" align="center">
  17 + <template #default="{ row }">
  18 + {{ row.vName }}({{ row.phoneNumber }})/{{ row.visitGender === '0' ? $t('common.male') : $t('common.female') }}
  19 + </template>
  20 + </el-table-column>
  21 + <el-table-column prop="ownerName" :label="$t('aOwnerDetailVisit.ownerName')" align="center" />
  22 + <el-table-column :label="$t('aOwnerDetailVisit.visitReason')" align="center">
  23 + <template #default="{ row }">
  24 + {{ row.visitCase }}({{ row.reasonTypeName }})
  25 + </template>
  26 + </el-table-column>
  27 + <el-table-column :label="$t('aOwnerDetailVisit.carNum')" align="center">
  28 + <template #default="{ row }">
  29 + <div v-if="row.carState === '1' && row.psId != null && row.psId !== '' && row.psId !== undefined">
  30 + {{ row.carNum }}<br />({{ row.parkAreaNum }}{{ $t('aOwnerDetailVisit.parkingLot') }}-{{ row.parkingSpaceNum }}{{ $t('aOwnerDetailVisit.parkingSpace') }})
  31 + </div>
  32 + <div v-else>{{ row.carNum }}</div>
  33 + </template>
  34 + </el-table-column>
  35 + <el-table-column prop="entourage" :label="$t('aOwnerDetailVisit.entourage')" align="center" />
  36 + <el-table-column prop="createTime" :label="$t('aOwnerDetailVisit.createTime')" align="center" />
  37 + <el-table-column :label="$t('aOwnerDetailVisit.visitTime')" align="center">
  38 + <template #default="{ row }">
  39 + {{ row.visitTime }}<br />{{ row.departureTime }}
  40 + </template>
  41 + </el-table-column>
  42 + <el-table-column prop="stateName" :label="$t('aOwnerDetailVisit.visitorStatus')" align="center" />
  43 + <el-table-column prop="carStateName" :label="$t('aOwnerDetailVisit.carStatus')" align="center" />
  44 + <el-table-column :label="$t('aOwnerDetailVisit.operation')" align="center" />
  45 + </el-table>
  46 +
  47 + <el-row class="margin-top">
  48 + <el-col :span="16"></el-col>
  49 + <el-col :span="8">
  50 + <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize"
  51 + layout="total, prev, pager, next" :total="total" />
  52 + </el-col>
  53 + </el-row>
  54 + </div>
  55 + </div>
  56 +</template>
  57 +
  58 +<script>
  59 +import { listAdminVisits } from '@/api/aCommunity/aOwnerDetailVisitApi'
  60 +export default {
  61 + name: 'AOwnerDetailVisit',
  62 + data() {
  63 + return {
  64 + DEFAULT_PAGE: 1,
  65 + DEFAULT_ROWS: 10,
  66 + aOwnerDetailVisitInfo: {
  67 + visits: [],
  68 + ownerId: '',
  69 + link: ''
  70 + },
  71 + currentPage: 1,
  72 + pageSize: 10,
  73 + total: 0
  74 + }
  75 + },
  76 + methods: {
  77 + open(data) {
  78 + this.aOwnerDetailVisitInfo.ownerId = data.ownerId
  79 + this.aOwnerDetailVisitInfo.link = data.link
  80 + this._loadAOwnerDetailVisitData(this.DEFAULT_PAGE, this.DEFAULT_ROWS)
  81 + },
  82 + handleCurrentChange(val) {
  83 + this.currentPage = val
  84 + this._loadAOwnerDetailVisitData(val, this.DEFAULT_ROWS)
  85 + },
  86 + async _loadAOwnerDetailVisitData(page, row) {
  87 + const param = {
  88 + page,
  89 + row,
  90 + ownerTel: this.aOwnerDetailVisitInfo.link,
  91 + channel: 'PC'
  92 + }
  93 +
  94 + try {
  95 + const response = await listAdminVisits(param)
  96 + this.aOwnerDetailVisitInfo.visits = response.visits
  97 + this.total = response.records
  98 + this.currentPage = page
  99 + } catch (error) {
  100 + console.error('请求失败:', error)
  101 + }
  102 + },
  103 + showVisitImg(url) {
  104 + if (!url) {
  105 + url = '/img/noPhoto.jpg'
  106 + }
  107 + this.$emit('viewImage', url)
  108 + },
  109 + handleImageError(e) {
  110 + e.target.src = '/img/noPhoto.jpg'
  111 + },
  112 + _openVisitDetail(item) {
  113 + const flowId = item.flowId || ''
  114 + this.$router.push(`/pages/property/visitDetail?vId=${item.vId}&flowId=${flowId}`)
  115 + }
  116 + }
  117 +}
  118 +</script>
  119 +
  120 +<style scoped>
  121 +.margin-top {
  122 + margin-top: 20px;
  123 +}
  124 +</style>
0 \ No newline at end of file 125 \ No newline at end of file
src/components/aCommunity/aOwnerDetailVisitDemo.vue 0 → 100644
  1 +<template>
  2 + <a-owner-detail-visit
  3 + ref="visitComponent"
  4 + @viewImage="handleViewImage"
  5 + />
  6 +</template>
  7 +
  8 +<script>
  9 +import AOwnerDetailVisit from './aOwnerDetailVisit'
  10 +
  11 +export default {
  12 + components: {
  13 + AOwnerDetailVisit
  14 + },
  15 + methods: {
  16 + open(data) {
  17 + this.$refs.visitComponent.handleSwitch(data)
  18 + },
  19 + handleViewImage(url) {
  20 + // Handle image view logic here
  21 + }
  22 + }
  23 +}
  24 +</script>
0 \ No newline at end of file 25 \ No newline at end of file
src/components/aCommunity/adminOwnerDetailAccessControlRecord.vue 0 → 100644
  1 +<template>
  2 + <div class="admin-owner-detail-access-control-record">
  3 + <div class="margin-top">
  4 + <el-table
  5 + :data="accessControlRecordInfo.records"
  6 + border
  7 + style="width: 100%"
  8 + >
  9 + <el-table-column
  10 + prop="recordTypeName"
  11 + :label="$t('adminOwnerDetailAccessControlRecord.recordType')"
  12 + align="center"
  13 + />
  14 + <el-table-column
  15 + prop="machineName"
  16 + :label="$t('adminOwnerDetailAccessControlRecord.machineName')"
  17 + align="center"
  18 + />
  19 + <el-table-column
  20 + prop="userName"
  21 + :label="$t('adminOwnerDetailAccessControlRecord.userName')"
  22 + align="center"
  23 + />
  24 + <el-table-column
  25 + prop="openTypeCdName"
  26 + :label="$t('adminOwnerDetailAccessControlRecord.openType')"
  27 + align="center"
  28 + />
  29 + <el-table-column
  30 + prop="createTime"
  31 + :label="$t('adminOwnerDetailAccessControlRecord.createTime')"
  32 + align="center"
  33 + />
  34 + </el-table>
  35 +
  36 + <el-row class="margin-top">
  37 + <el-col :span="16"></el-col>
  38 + <el-col :span="8">
  39 + <el-pagination
  40 + @current-change="handleCurrentChange"
  41 + :current-page="currentPage"
  42 + :page-size="pageSize"
  43 + layout="total, prev, pager, next"
  44 + :total="total"
  45 + />
  46 + </el-col>
  47 + </el-row>
  48 + </div>
  49 + </div>
  50 +</template>
  51 +
  52 +<script>
  53 +export default {
  54 + name: 'AdminOwnerDetailAccessControlRecord',
  55 + data() {
  56 + return {
  57 + DEFAULT_PAGE: 1,
  58 + DEFAULT_ROWS: 10,
  59 + accessControlRecordInfo: {
  60 + records: [],
  61 + ownerId: ''
  62 + },
  63 + currentPage: 1,
  64 + pageSize: 10,
  65 + total: 0
  66 + }
  67 + },
  68 + methods: {
  69 + handleSwitch(data) {
  70 + this.accessControlRecordInfo.ownerId = data.ownerId
  71 + this._loadAccessControlRecordData(this.DEFAULT_PAGE, this.DEFAULT_ROWS)
  72 + },
  73 + handleCurrentChange(val) {
  74 + this.currentPage = val
  75 + this._loadAccessControlRecordData(val, this.DEFAULT_ROWS)
  76 + },
  77 + async _loadAccessControlRecordData(page, row) {
  78 + const param = {
  79 + page,
  80 + row,
  81 + objId: this.accessControlRecordInfo.ownerId,
  82 + objType: '8899'
  83 + }
  84 +
  85 + try {
  86 + const response = await this.$http.get('/machineRecord.listAdminMachineRecords', { params: param })
  87 + const recordInfo = response.data
  88 + this.accessControlRecordInfo.records = recordInfo.machineRecords
  89 + this.total = recordInfo.records
  90 + this.currentPage = page
  91 + } catch (error) {
  92 + console.error('请求失败:', error)
  93 + }
  94 + }
  95 + }
  96 +}
  97 +</script>
  98 +
  99 +<style scoped>
  100 +.margin-top {
  101 + margin-top: 20px;
  102 +}
  103 +</style>
0 \ No newline at end of file 104 \ No newline at end of file
src/components/aCommunity/adminOwnerDetailAccessControlRecordDemo.vue 0 → 100644
  1 +<template>
  2 + <admin-owner-detail-access-control-record ref="accessControlRecordComponent" />
  3 +</template>
  4 +
  5 +<script>
  6 +import AdminOwnerDetailAccessControlRecord from './adminOwnerDetailAccessControlRecord'
  7 +
  8 +export default {
  9 + components: {
  10 + AdminOwnerDetailAccessControlRecord
  11 + },
  12 + methods: {
  13 + open(data) {
  14 + this.$refs.accessControlRecordComponent.handleSwitch(data)
  15 + }
  16 + }
  17 +}
  18 +</script>
0 \ No newline at end of file 19 \ No newline at end of file
src/components/aCommunity/adminOwnerDetailChargeMachineOrder.vue 0 → 100644
  1 +<template>
  2 + <div class="admin-owner-detail-charge-machine-order">
  3 + <div class="margin-top">
  4 + <el-table
  5 + :data="chargeMachineOrderInfo.orders"
  6 + border
  7 + style="width: 100%"
  8 + >
  9 + <el-table-column
  10 + prop="machineName"
  11 + :label="$t('adminOwnerDetailChargeMachineOrder.machineName')"
  12 + align="center"
  13 + />
  14 + <el-table-column
  15 + prop="orderTypeName"
  16 + :label="$t('adminOwnerDetailChargeMachineOrder.orderType')"
  17 + align="center"
  18 + />
  19 + <el-table-column
  20 + prop="userName"
  21 + :label="$t('adminOwnerDetailChargeMachineOrder.userName')"
  22 + align="center"
  23 + />
  24 + <el-table-column
  25 + prop="tel"
  26 + :label="$t('adminOwnerDetailChargeMachineOrder.phone')"
  27 + align="center"
  28 + />
  29 + <el-table-column
  30 + prop="createTime"
  31 + :label="$t('adminOwnerDetailChargeMachineOrder.createTime')"
  32 + align="center"
  33 + />
  34 + <el-table-column
  35 + prop="stateName"
  36 + :label="$t('adminOwnerDetailChargeMachineOrder.status')"
  37 + align="center"
  38 + />
  39 + </el-table>
  40 +
  41 + <el-row class="margin-top">
  42 + <el-col :span="16"></el-col>
  43 + <el-col :span="8">
  44 + <el-pagination
  45 + @current-change="handleCurrentChange"
  46 + :current-page="currentPage"
  47 + :page-size="pageSize"
  48 + layout="total, prev, pager, next"
  49 + :total="total"
  50 + />
  51 + </el-col>
  52 + </el-row>
  53 + </div>
  54 + </div>
  55 +</template>
  56 +
  57 +<script>
  58 +export default {
  59 + name: 'AdminOwnerDetailChargeMachineOrder',
  60 + data() {
  61 + return {
  62 + DEFAULT_PAGE: 1,
  63 + DEFAULT_ROWS: 10,
  64 + chargeMachineOrderInfo: {
  65 + orders: [],
  66 + ownerId: ''
  67 + },
  68 + currentPage: 1,
  69 + pageSize: 10,
  70 + total: 0
  71 + }
  72 + },
  73 + methods: {
  74 + handleSwitch(data) {
  75 + this.chargeMachineOrderInfo.ownerId = data.ownerId
  76 + this._loadChargeMachineOrderData(this.DEFAULT_PAGE, this.DEFAULT_ROWS)
  77 + },
  78 + handleCurrentChange(val) {
  79 + this.currentPage = val
  80 + this._loadChargeMachineOrderData(val, this.DEFAULT_ROWS)
  81 + },
  82 + async _loadChargeMachineOrderData(page, row) {
  83 + const param = {
  84 + page,
  85 + row,
  86 + objId: this.chargeMachineOrderInfo.ownerId,
  87 + objType: '8899'
  88 + }
  89 +
  90 + try {
  91 + const response = await this.$http.get('/machineOrder.listAdminMachineOrders', { params: param })
  92 + const orderInfo = response.data
  93 + this.chargeMachineOrderInfo.orders = orderInfo.machineOrders
  94 + this.total = orderInfo.records
  95 + this.currentPage = page
  96 + } catch (error) {
  97 + console.error('请求失败:', error)
  98 + }
  99 + }
  100 + }
  101 +}
  102 +</script>
  103 +
  104 +<style scoped>
  105 +.margin-top {
  106 + margin-top: 20px;
  107 +}
  108 +</style>
0 \ No newline at end of file 109 \ No newline at end of file
src/components/aCommunity/adminOwnerDetailChargeMachineOrderDemo.vue 0 → 100644
  1 +<template>
  2 + <admin-owner-detail-charge-machine-order ref="chargeMachineOrderComponent" />
  3 +</template>
  4 +
  5 +<script>
  6 +import AdminOwnerDetailChargeMachineOrder from './adminOwnerDetailChargeMachineOrder'
  7 +
  8 +export default {
  9 + components: {
  10 + AdminOwnerDetailChargeMachineOrder
  11 + },
  12 + methods: {
  13 + open(data) {
  14 + this.$refs.chargeMachineOrderComponent.handleSwitch(data)
  15 + }
  16 + }
  17 +}
  18 +</script>
0 \ No newline at end of file 19 \ No newline at end of file
src/components/fee/aOwnerDetailAccount.vue
@@ -32,12 +32,7 @@ import { queryAdminOwnerAccount } from &#39;@/api/fee/adminRoomFeeApi&#39; @@ -32,12 +32,7 @@ import { queryAdminOwnerAccount } from &#39;@/api/fee/adminRoomFeeApi&#39;
32 32
33 export default { 33 export default {
34 name: 'AOwnerDetailAccount', 34 name: 'AOwnerDetailAccount',
35 - props: {  
36 - ownerId: {  
37 - type: String,  
38 - default: ''  
39 - }  
40 - }, 35 +
41 data() { 36 data() {
42 return { 37 return {
43 accounts: [], 38 accounts: [],
@@ -49,7 +44,8 @@ export default { @@ -49,7 +44,8 @@ export default {
49 } 44 }
50 }, 45 },
51 methods: { 46 methods: {
52 - open() { 47 + open(params) {
  48 + this.ownerId = params.ownerId
53 this.page.current = 1 49 this.page.current = 1
54 this.loadData() 50 this.loadData()
55 }, 51 },
src/components/fee/aRoomDetailHisFee.vue
@@ -7,10 +7,10 @@ @@ -7,10 +7,10 @@
7 <el-table-column :label="$t('adminRoomFee.amount')" align="center"> 7 <el-table-column :label="$t('adminRoomFee.amount')" align="center">
8 <template slot-scope="scope"> 8 <template slot-scope="scope">
9 {{ scope.row.receivableAmount }}/{{ scope.row.receivedAmount }}<br> 9 {{ scope.row.receivableAmount }}/{{ scope.row.receivedAmount }}<br>
10 - <div v-if="scope.row.acctAmount>0"> 10 + <div v-if="scope.row.acctAmount > 0">
11 {{ $t('adminRoomFee.accountDeduction') }}: {{ scope.row.acctAmount }}<br> 11 {{ $t('adminRoomFee.accountDeduction') }}: {{ scope.row.acctAmount }}<br>
12 </div> 12 </div>
13 - <div v-for="(item,index) in scope.row.payFeeDetailDiscountDtoList" :key="index"> 13 + <div v-for="(item, index) in scope.row.payFeeDetailDiscountDtoList" :key="index">
14 {{ item.discountName }}: {{ Math.abs(item.discountPrice) }}<br> 14 {{ item.discountName }}: {{ Math.abs(item.discountPrice) }}<br>
15 </div> 15 </div>
16 </template> 16 </template>
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 <el-table-column :label="$t('adminRoomFee.paymentPeriod')" align="center"> 19 <el-table-column :label="$t('adminRoomFee.paymentPeriod')" align="center">
20 <template slot-scope="scope"> 20 <template slot-scope="scope">
21 {{ dfTime(scope.row.startTime) }}~<br> 21 {{ dfTime(scope.row.startTime) }}~<br>
22 - {{ dfTime(scope.row.endTime)}} 22 + {{ dfTime(scope.row.endTime) }}
23 </template> 23 </template>
24 </el-table-column> 24 </el-table-column>
25 <el-table-column prop="createTime" :label="$t('adminRoomFee.paymentTime')" align="center" /> 25 <el-table-column prop="createTime" :label="$t('adminRoomFee.paymentTime')" align="center" />
@@ -28,35 +28,20 @@ @@ -28,35 +28,20 @@
28 <el-table-column prop="remark" :label="$t('adminRoomFee.remark')" align="center" /> 28 <el-table-column prop="remark" :label="$t('adminRoomFee.remark')" align="center" />
29 </el-table> 29 </el-table>
30 30
31 - <el-pagination  
32 - class="margin-top"  
33 - :current-page="page.current"  
34 - :page-size="page.size"  
35 - :total="page.total"  
36 - layout="total, sizes, prev, pager, next, jumper"  
37 - @size-change="handleSizeChange"  
38 - @current-change="handleCurrentChange"  
39 - /> 31 + <el-pagination class="margin-top" :current-page="page.current" :page-size="page.size" :total="page.total"
  32 + layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
  33 + @current-change="handleCurrentChange" />
40 </div> 34 </div>
41 </template> 35 </template>
42 36
43 <script> 37 <script>
44 import { queryAdminFeeDetail } from '@/api/fee/adminRoomFeeApi' 38 import { queryAdminFeeDetail } from '@/api/fee/adminRoomFeeApi'
45 -import {dateFormat} from '@/utils/dateUtil' 39 +import { dateFormat } from '@/utils/dateUtil'
46 40
47 41
48 export default { 42 export default {
49 name: 'ARoomDetailHisFee', 43 name: 'ARoomDetailHisFee',
50 - props: {  
51 - ownerId: {  
52 - type: String,  
53 - default: ''  
54 - },  
55 - feeId: {  
56 - type: String,  
57 - default: ''  
58 - }  
59 - }, 44 +
60 data() { 45 data() {
61 return { 46 return {
62 feeDetails: [], 47 feeDetails: [],
@@ -68,22 +53,23 @@ export default { @@ -68,22 +53,23 @@ export default {
68 } 53 }
69 }, 54 },
70 methods: { 55 methods: {
71 - open(ownerId, roomId) {  
72 - console.log(ownerId, roomId) 56 + open(params) {
  57 + this.ownerId = params.ownerId
  58 + this.feeId = params.feeId
73 this.loadData() 59 this.loadData()
74 }, 60 },
75 - async loadData() { 61 + async loadData() {
76 const params = { 62 const params = {
77 page: this.page.current, 63 page: this.page.current,
78 row: this.page.size, 64 row: this.page.size,
79 ownerId: this.ownerId, 65 ownerId: this.ownerId,
80 feeId: this.feeId 66 feeId: this.feeId
81 } 67 }
82 -  
83 - const res = await queryAdminFeeDetail(params)  
84 - this.feeDetails = res.feeDetails  
85 - this.page.total = res.total  
86 - 68 +
  69 + const res = await queryAdminFeeDetail(params)
  70 + this.feeDetails = res.feeDetails
  71 + this.page.total = res.total
  72 +
87 }, 73 },
88 handleSizeChange(val) { 74 handleSizeChange(val) {
89 this.page.size = val 75 this.page.size = val
src/components/fee/aRoomDetailOwner.vue
@@ -80,7 +80,7 @@ export default { @@ -80,7 +80,7 @@ export default {
80 80
81 }, 81 },
82 toDetail(owner) { 82 toDetail(owner) {
83 - window.open(`/#/pages/owner/adminOwnerDetail?ownerId=${owner.ownerId}`) 83 + window.open(`/#/views/aCommunity/adminOwnerDetail?ownerId=${owner.ownerId}`)
84 }, 84 },
85 handleSizeChange(val) { 85 handleSizeChange(val) {
86 this.page.size = val 86 this.page.size = val
src/components/fee/aRoomDetailRoom.vue
@@ -53,16 +53,6 @@ import { queryAdminOwnerRooms } from &#39;@/api/fee/adminRoomFeeApi&#39; @@ -53,16 +53,6 @@ import { queryAdminOwnerRooms } from &#39;@/api/fee/adminRoomFeeApi&#39;
53 53
54 export default { 54 export default {
55 name: 'ARoomDetailRoom', 55 name: 'ARoomDetailRoom',
56 - props: {  
57 - ownerId: {  
58 - type: String,  
59 - default: ''  
60 - },  
61 - roomId: {  
62 - type: String,  
63 - default: ''  
64 - }  
65 - },  
66 data() { 56 data() {
67 return { 57 return {
68 rooms: [], 58 rooms: [],
@@ -75,7 +65,9 @@ export default { @@ -75,7 +65,9 @@ export default {
75 } 65 }
76 }, 66 },
77 methods: { 67 methods: {
78 - open() { 68 + open(data) {
  69 + this.ownerId = data.ownerId
  70 + this.roomId = data.roomId
79 this.loadData() 71 this.loadData()
80 }, 72 },
81 async loadData() { 73 async loadData() {
src/components/staff/AOwnerDetailAppUser.vue
@@ -52,6 +52,7 @@ export default { @@ -52,6 +52,7 @@ export default {
52 return { 52 return {
53 appUsers: [], 53 appUsers: [],
54 currentAppUserId: '', 54 currentAppUserId: '',
  55 + ownerId: '',
55 page: { 56 page: {
56 current: 1, 57 current: 1,
57 size: 10, 58 size: 10,
@@ -60,12 +61,17 @@ export default { @@ -60,12 +61,17 @@ export default {
60 } 61 }
61 }, 62 },
62 methods: { 63 methods: {
  64 + open(params) {
  65 + this.ownerId = params.ownerId
  66 + this.loadData()
  67 + },
63 async loadData() { 68 async loadData() {
64 try { 69 try {
65 const params = { 70 const params = {
66 page: this.page.current, 71 page: this.page.current,
67 row: this.page.size, 72 row: this.page.size,
68 - systemUserId: this.userId 73 + systemUserId: this.userId,
  74 + ownerId: this.ownerId
69 } 75 }
70 const res = await listAdminAppUserOwners(params) 76 const res = await listAdminAppUserOwners(params)
71 if (res.code === 0) { 77 if (res.code === 0) {
@@ -85,7 +91,7 @@ export default { @@ -85,7 +91,7 @@ export default {
85 this.loadData() 91 this.loadData()
86 }, 92 },
87 toOwnerDetail(row) { 93 toOwnerDetail(row) {
88 - window.open(`/#/pages/owner/adminOwnerDetail?ownerId=${row.ownerId}`) 94 + window.open(`/#/views/aCommunity/adminOwnerDetail?ownerId=${row.ownerId}`)
89 }, 95 },
90 openAuditModal(appUserId) { 96 openAuditModal(appUserId) {
91 this.currentAppUserId = appUserId 97 this.currentAppUserId = appUserId
src/i18n/communityI18n.js
@@ -8,6 +8,7 @@ import { messages as editCommunityPublicityMessages } from &#39;../views/community/e @@ -8,6 +8,7 @@ import { messages as editCommunityPublicityMessages } from &#39;../views/community/e
8 import { messages as handoverMessages } from '../views/room/handoverLang' 8 import { messages as handoverMessages } from '../views/room/handoverLang'
9 import { messages as ownerExitRoomMessages } from '../views/room/ownerExitRoomLang' 9 import { messages as ownerExitRoomMessages } from '../views/room/ownerExitRoomLang'
10 import { messages as adminRoomDetailMessages } from '../views/aCommunity/adminRoomDetailLang.js' 10 import { messages as adminRoomDetailMessages } from '../views/aCommunity/adminRoomDetailLang.js'
  11 +import { messages as adminOwnerDetailMessages } from '../views/aCommunity/adminOwnerDetailLang.js'
11 export const messages = { 12 export const messages = {
12 en: { 13 en: {
13 ...roomStructureMessages.en, 14 ...roomStructureMessages.en,
@@ -20,6 +21,7 @@ export const messages = { @@ -20,6 +21,7 @@ export const messages = {
20 ...handoverMessages.en, 21 ...handoverMessages.en,
21 ...ownerExitRoomMessages.en, 22 ...ownerExitRoomMessages.en,
22 ...adminRoomDetailMessages.en, 23 ...adminRoomDetailMessages.en,
  24 + ...adminOwnerDetailMessages.en,
23 }, 25 },
24 zh: { 26 zh: {
25 ...roomStructureMessages.zh, 27 ...roomStructureMessages.zh,
@@ -32,5 +34,6 @@ export const messages = { @@ -32,5 +34,6 @@ export const messages = {
32 ...handoverMessages.zh, 34 ...handoverMessages.zh,
33 ...ownerExitRoomMessages.zh, 35 ...ownerExitRoomMessages.zh,
34 ...adminRoomDetailMessages.zh, 36 ...adminRoomDetailMessages.zh,
  37 + ...adminOwnerDetailMessages.zh,
35 } 38 }
36 } 39 }
37 \ No newline at end of file 40 \ No newline at end of file
src/router/communityRouter.js
@@ -49,4 +49,9 @@ export default [ @@ -49,4 +49,9 @@ export default [
49 name: '/pages/community/adminRoomDetail', 49 name: '/pages/community/adminRoomDetail',
50 component: () => import('@/views/aCommunity/adminRoomDetail.vue') 50 component: () => import('@/views/aCommunity/adminRoomDetail.vue')
51 }, 51 },
  52 + {
  53 + path:'/views/aCommunity/adminOwnerDetail',
  54 + name:'/views/aCommunity/adminOwnerDetail',
  55 + component: () => import('@/views/aCommunity/adminOwnerDetail.vue')
  56 + },
52 ] 57 ]
53 \ No newline at end of file 58 \ No newline at end of file
src/views/aCommunity/aOwnerDetailAccessControlLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + aOwnerDetailAccessControl: {
  4 + objectType: 'Object Type',
  5 + objectName: 'Object Name',
  6 + command: 'Command',
  7 + status: 'Status',
  8 + description: 'Description',
  9 + syncTime: 'Sync Time'
  10 + }
  11 + },
  12 + zh: {
  13 + aOwnerDetailAccessControl: {
  14 + objectType: '对象类型',
  15 + objectName: '对象名称',
  16 + command: '指令',
  17 + status: '状态',
  18 + description: '说明',
  19 + syncTime: '同步时间'
  20 + }
  21 + }
  22 +}
0 \ No newline at end of file 23 \ No newline at end of file
src/views/aCommunity/aOwnerDetailCouponLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + aOwnerDetailCoupon: {
  4 + id: 'ID',
  5 + couponName: 'Coupon Name',
  6 + faceValue: 'Face Value',
  7 + validity: 'Validity',
  8 + userName: 'User Name',
  9 + phone: 'Phone',
  10 + purpose: 'Purpose',
  11 + quantity: 'Quantity',
  12 + status: 'Status',
  13 + effectiveTime: 'Effective Time',
  14 + unused: 'Unused',
  15 + used: 'Used',
  16 + sheet: 'sheet'
  17 + }
  18 + },
  19 + zh: {
  20 + aOwnerDetailCoupon: {
  21 + id: '编号',
  22 + couponName: '优惠券名称',
  23 + faceValue: '面值',
  24 + validity: '有效期',
  25 + userName: '用户名称',
  26 + phone: '手机号',
  27 + purpose: '用途',
  28 + quantity: '数量',
  29 + status: '状态',
  30 + effectiveTime: '生效时间',
  31 + unused: '未使用',
  32 + used: '已使用',
  33 + sheet: '张'
  34 + }
  35 + }
  36 +}
0 \ No newline at end of file 37 \ No newline at end of file
src/views/aCommunity/aOwnerDetailHisLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + aOwnerDetailHis: {
  4 + action: 'Action',
  5 + operator: 'Operator',
  6 + operateTime: 'Operate Time',
  7 + name: 'Name',
  8 + gender: 'Gender',
  9 + idCard: 'ID Card',
  10 + address: 'Address',
  11 + add: 'Add',
  12 + delete: 'Delete',
  13 + modifyNew: 'Modify(New)',
  14 + modifyOld: 'Modify(Old)'
  15 + }
  16 + },
  17 + zh: {
  18 + aOwnerDetailHis: {
  19 + action: '动作',
  20 + operator: '操作人',
  21 + operateTime: '操作时间',
  22 + name: '姓名',
  23 + gender: '性别',
  24 + idCard: '身份证',
  25 + address: '家庭住址',
  26 + add: '添加',
  27 + delete: '删除',
  28 + modifyNew: '修改(新)',
  29 + modifyOld: '修改(旧)'
  30 + }
  31 + }
  32 +}
0 \ No newline at end of file 33 \ No newline at end of file
src/views/aCommunity/aOwnerDetailRoomFeeLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + aOwnerDetailRoomFee: {
  4 + room: 'Room',
  5 + feeItem: 'Fee Item',
  6 + feeFlag: 'Fee Flag',
  7 + feeType: 'Fee Type',
  8 + amountReceivable: 'Amount Receivable',
  9 + accountTime: 'Account Time',
  10 + receivablePeriod: 'Receivable Period',
  11 + description: 'Description',
  12 + status: 'Status',
  13 + operation: 'Operation',
  14 + selectStatus: 'Select Status',
  15 + valid: 'Valid',
  16 + chargeEnd: 'Charge End',
  17 + lastDegree: 'Last Degree',
  18 + currentDegree: 'Current Degree',
  19 + unitPrice: 'Unit Price',
  20 + additionalFee: 'Additional Fee',
  21 + usage: 'Usage',
  22 + algorithm: 'Algorithm',
  23 + feeBasedOnActual: 'Fee based on actual situation',
  24 + fixedFee: 'Fixed Fee',
  25 + arrearsSubtotal: 'Arrears Subtotal:',
  26 + note1: 'Note: The receivable end time "-" means not yet receivable or charge has ended',
  27 + note2: 'The receivable amount is -1, usually the fee item formula setting is wrong, please check'
  28 + }
  29 + },
  30 + zh: {
  31 + aOwnerDetailRoomFee: {
  32 + room: '房屋',
  33 + feeItem: '费用项目',
  34 + feeFlag: '费用标识',
  35 + feeType: '费用类型',
  36 + amountReceivable: '应收金额',
  37 + accountTime: '建账时间',
  38 + receivablePeriod: '应收时间段',
  39 + description: '说明',
  40 + status: '状态',
  41 + operation: '操作',
  42 + selectStatus: '请选择状态',
  43 + valid: '有效',
  44 + chargeEnd: '收费结束',
  45 + lastDegree: '上期度数',
  46 + currentDegree: '本期度数',
  47 + unitPrice: '单价',
  48 + additionalFee: '附加费',
  49 + usage: '用量',
  50 + algorithm: '算法',
  51 + feeBasedOnActual: '费用根据实际情况而定',
  52 + fixedFee: '固定费',
  53 + arrearsSubtotal: '欠费小计:',
  54 + note1: '注意:应收结束时间 "-" 表示未到应收时间或收费已结束',
  55 + note2: '应收金额为-1 一般为费用项公式设置出错请检查'
  56 + }
  57 + }
  58 +}
0 \ No newline at end of file 59 \ No newline at end of file
src/views/aCommunity/aOwnerDetailVisitLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + aOwnerDetailVisit: {
  4 + visitorId: 'Visitor ID',
  5 + photo: 'Photo',
  6 + visitor: 'Visitor',
  7 + ownerName: 'Owner Name',
  8 + visitReason: 'Visit Reason/Type',
  9 + carNum: 'Car Number',
  10 + entourage: 'Entourage',
  11 + createTime: 'Create Time',
  12 + visitTime: 'Visit/Departure Time',
  13 + visitorStatus: 'Visitor Status',
  14 + carStatus: 'Car Status',
  15 + operation: 'Operation',
  16 + parkingLot: ' parking lot-',
  17 + parkingSpace: ' parking space'
  18 + }
  19 + },
  20 + zh: {
  21 + aOwnerDetailVisit: {
  22 + visitorId: '访客ID',
  23 + photo: '照片',
  24 + visitor: '访客',
  25 + ownerName: '业主姓名',
  26 + visitReason: '来访事由/类型',
  27 + carNum: '车牌号',
  28 + entourage: '随行人数',
  29 + createTime: '创建时间',
  30 + visitTime: '来访/离开时间',
  31 + visitorStatus: '访客状态',
  32 + carStatus: '车辆状态',
  33 + operation: '操作',
  34 + parkingLot: '停车场-',
  35 + parkingSpace: '停车位'
  36 + }
  37 + }
  38 +}
0 \ No newline at end of file 39 \ No newline at end of file
src/views/aCommunity/adminOwnerDetail.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('adminOwnerDetail.ownerInfo') }}</div>
  5 + <div>
  6 + <el-button type="primary" size="small" style="margin-left:10px" @click="goBack">
  7 + <i class="el-icon-close"></i>{{ $t('common.back') }}
  8 + </el-button>
  9 + </div>
  10 + </div>
  11 +
  12 + <div class="flex justify-start margin-top">
  13 + <div class="text-center vc-float-left" style="width: 150px;" v-if="adminOwnerDetailInfo.faceUrl">
  14 + <img width="120px" height="140px" class="border-radius" :src="adminOwnerDetailInfo.faceUrl"
  15 + @error="errorLoadImg" />
  16 + </div>
  17 + <div class="text-center vc-float-left" style="width: 150px;" v-else>
  18 + <img width="120px" height="140px" class="border-radius" src="/img/noPhoto.jpg" />
  19 + </div>
  20 +
  21 + <el-row style="min-height: 160px;width: 100%;" class="text-left margin-left">
  22 + <el-col :span="24">
  23 + <el-row>
  24 + <el-col :span="6">
  25 + <div class="form-group">
  26 + <label class="col-form-label">{{ $t('adminOwnerDetail.name') }}:</label>
  27 + <label>{{ adminOwnerDetailInfo.name }}</label>
  28 + </div>
  29 + </el-col>
  30 + <el-col :span="6" v-if="adminOwnerDetailInfo.personType == 'P'">
  31 + <div class="form-group">
  32 + <label class="col-form-label">{{ $t('adminOwnerDetail.sex') }}:</label>
  33 + <label>{{ adminOwnerDetailInfo.sex == '0' ? $t('common.male') : (adminOwnerDetailInfo.sex == '1' ?
  34 + $t('common.female') : '') }}</label>
  35 + </div>
  36 + </el-col>
  37 + <el-col :span="6">
  38 + <div class="form-group">
  39 + <label class="col-form-label">{{ $t('adminOwnerDetail.communityName') }}:</label>
  40 + <label>{{ adminOwnerDetailInfo.communityName }}</label>
  41 + </div>
  42 + </el-col>
  43 + <el-col :span="6">
  44 + <div class="form-group">
  45 + <label class="col-form-label">{{ $t('adminOwnerDetail.personType') }}:</label>
  46 + <label>{{ adminOwnerDetailInfo.personTypeName }}</label>
  47 + </div>
  48 + </el-col>
  49 + <el-col :span="6">
  50 + <div class="form-group">
  51 + <label class="col-form-label">{{ $t('adminOwnerDetail.personRole') }}:</label>
  52 + <label>{{ adminOwnerDetailInfo.personRoleName }}</label>
  53 + </div>
  54 + </el-col>
  55 + <el-col :span="6">
  56 + <div class="form-group">
  57 + <label class="col-form-label">{{ $t('adminOwnerDetail.idCard') }}:</label>
  58 + <label>{{ adminOwnerDetailInfo.idCard }}</label>
  59 + </div>
  60 + </el-col>
  61 + <el-col :span="6">
  62 + <div class="form-group">
  63 + <label class="col-form-label">{{ $t('adminOwnerDetail.contact') }}:</label>
  64 + <label>{{ adminOwnerDetailInfo.link }}</label>
  65 + </div>
  66 + </el-col>
  67 + <el-col :span="6">
  68 + <div class="form-group">
  69 + <label class="col-form-label">{{ $t('adminOwnerDetail.backupPhone') }}:</label>
  70 + <label>{{ adminOwnerDetailInfo.concactLink }}</label>
  71 + </div>
  72 + </el-col>
  73 + <el-col :span="6" v-if="adminOwnerDetailInfo.personType == 'C'">
  74 + <div class="form-group">
  75 + <label class="col-form-label">{{ $t('adminOwnerDetail.contactPerson') }}:</label>
  76 + <label>{{ adminOwnerDetailInfo.concactPerson }}</label>
  77 + </div>
  78 + </el-col>
  79 + <el-col :span="6">
  80 + <div class="form-group">
  81 + <label class="col-form-label">{{ $t('adminOwnerDetail.creator') }}:</label>
  82 + <label>{{ adminOwnerDetailInfo.userName }}</label>
  83 + </div>
  84 + </el-col>
  85 + <el-col :span="12">
  86 + <div class="form-group">
  87 + <label class="col-form-label">{{ $t('adminOwnerDetail.remark') }}:</label>
  88 + <label>{{ adminOwnerDetailInfo.remark }}</label>
  89 + </div>
  90 + </el-col>
  91 + </el-row>
  92 +
  93 + <div v-for="(item, index) in adminOwnerDetailInfo.ownerAttrDtos" :key="index">
  94 + <el-row v-if="index % 4 == 0">
  95 + <el-col :span="6">
  96 + <div class="form-group">
  97 + <label class="col-form-label">{{ item.specName }}:</label>
  98 + <label>{{ item.valueName }}</label>
  99 + </div>
  100 + </el-col>
  101 + <el-col :span="6" v-if="index < adminOwnerDetailInfo.ownerAttrDtos.length - 1">
  102 + <div class="form-group">
  103 + <label class="col-form-label">{{ adminOwnerDetailInfo.ownerAttrDtos[index + 1].specName }}:</label>
  104 + <label>{{ adminOwnerDetailInfo.ownerAttrDtos[index + 1].valueName }}</label>
  105 + </div>
  106 + </el-col>
  107 + <el-col :span="6" v-if="index < adminOwnerDetailInfo.ownerAttrDtos.length - 2">
  108 + <div class="form-group">
  109 + <label class="col-form-label">{{ adminOwnerDetailInfo.ownerAttrDtos[index + 2].specName }}:</label>
  110 + <label>{{ adminOwnerDetailInfo.ownerAttrDtos[index + 2].valueName }}</label>
  111 + </div>
  112 + </el-col>
  113 + <el-col :span="6" v-if="index < adminOwnerDetailInfo.ownerAttrDtos.length - 3">
  114 + <div class="form-group">
  115 + <label class="col-form-label">{{ adminOwnerDetailInfo.ownerAttrDtos[index + 3].specName }}:</label>
  116 + <label>{{ adminOwnerDetailInfo.ownerAttrDtos[index + 3].valueName }}</label>
  117 + </div>
  118 + </el-col>
  119 + </el-row>
  120 + </div>
  121 + </el-col>
  122 + </el-row>
  123 + </div>
  124 +
  125 + <Divider />
  126 +
  127 + <div class="margin-top-sm">
  128 + <el-tabs v-model="adminOwnerDetailInfo._currentTab" @tab-click="handleTabClick(adminOwnerDetailInfo._currentTab)">
  129 + <el-tab-pane :label="$t('adminOwnerDetail.house')" name="aRoomDetailRoom"></el-tab-pane>
  130 + <el-tab-pane :label="$t('adminOwnerDetail.car')" name="aRoomDetailCar"></el-tab-pane>
  131 + <el-tab-pane :label="$t('adminOwnerDetail.contract')" name="aRoomDetailContract"></el-tab-pane>
  132 + <el-tab-pane :label="$t('adminOwnerDetail.member')" name="aRoomDetailMember"></el-tab-pane>
  133 + <el-tab-pane :label="$t('adminOwnerDetail.modifyRecord')" name="aOwnerDetailHis"></el-tab-pane>
  134 + <el-tab-pane :label="$t('adminOwnerDetail.houseFee')" name="aOwnerDetailRoomFee"></el-tab-pane>
  135 + <el-tab-pane :label="$t('adminOwnerDetail.paymentHistory')" name="aRoomDetailHisFee"></el-tab-pane>
  136 + <el-tab-pane :label="$t('adminOwnerDetail.account')" name="aOwnerDetailAccount"></el-tab-pane>
  137 + <el-tab-pane :label="$t('adminOwnerDetail.coupon')" name="aOwnerDetailCoupon"></el-tab-pane>
  138 + <el-tab-pane :label="$t('adminOwnerDetail.ownerBinding')" name="aOwnerDetailAppUser"></el-tab-pane>
  139 + <el-tab-pane :label="$t('adminOwnerDetail.complaint')" name="aRoomDetailComplaint"></el-tab-pane>
  140 + <el-tab-pane :label="$t('adminOwnerDetail.repair')" name="aRoomDetailRepair"></el-tab-pane>
  141 + <el-tab-pane :label="$t('adminOwnerDetail.visitor')" name="aOwnerDetailVisit"
  142 + v-if="adminOwnerDetailInfo.link"></el-tab-pane>
  143 + <el-tab-pane :label="$t('adminOwnerDetail.paymentReceipt')" name="aRoomDetailReceipt"></el-tab-pane>
  144 + <el-tab-pane :label="$t('adminOwnerDetail.depositReceipt')" name="aOwnerDetailAcctReceipt"></el-tab-pane>
  145 + <el-tab-pane :label="$t('adminOwnerDetail.faceSync')" name="aOwnerDetailAccessControl"></el-tab-pane>
  146 + </el-tabs>
  147 + </div>
  148 +
  149 + <component :is="adminOwnerDetailInfo._currentTab" :ref="adminOwnerDetailInfo._currentTab"></component>
  150 + </div>
  151 +</template>
  152 +
  153 +<script>
  154 +import { getOwnerDetail } from '@/api/aCommunity/adminOwnerDetailApi'
  155 +import { getCommunityId } from '@/api/community/communityApi'
  156 +//import { getDict } from '@/api/community/communityApi'
  157 +
  158 +// 导入所有子组件
  159 +import ARoomDetailRoom from '@/components/fee/aRoomDetailRoom'
  160 +import ARoomDetailCar from '@/components/aCommunity/aRoomDetailCar'
  161 +import ARoomDetailContract from '@/components/aCommunity/aRoomDetailContract'
  162 +import ARoomDetailMember from '@/components/aCommunity/aRoomDetailMember'
  163 +import ARoomDetailHisFee from '@/components/fee/aRoomDetailHisFee'
  164 +import ARoomDetailComplaint from '@/components/aCommunity/aRoomDetailComplaint'
  165 +import ARoomDetailRepair from '@/components/aCommunity/aRoomDetailRepair'
  166 +import ARoomDetailReceipt from '@/components/fee/aRoomDetailReceipt'
  167 +import AOwnerDetailHis from '@/components/aCommunity/aOwnerDetailHis'
  168 +import AOwnerDetailRoomFee from '@/components/aCommunity/aOwnerDetailRoomFee'
  169 +import AOwnerDetailAccount from '@/components/fee/aOwnerDetailAccount'
  170 +import AOwnerDetailCoupon from '@/components/aCommunity/aOwnerDetailCoupon'
  171 +import AOwnerDetailAppUser from '@/components/staff/AOwnerDetailAppUser'
  172 +import AOwnerDetailVisit from '@/components/aCommunity/aOwnerDetailVisit'
  173 +import AOwnerDetailAcctReceipt from '@/components/fee/aOwnerDetailAcctReceipt'
  174 +import AOwnerDetailAccessControl from '@/components/aCommunity/aOwnerDetailAccessControl'
  175 +import Divider from '@/components/system/divider'
  176 +
  177 +export default {
  178 + name: 'AdminOwnerDetail',
  179 + components: {
  180 + ARoomDetailRoom,
  181 + ARoomDetailCar,
  182 + ARoomDetailContract,
  183 + ARoomDetailMember,
  184 + ARoomDetailHisFee,
  185 + ARoomDetailComplaint,
  186 + ARoomDetailRepair,
  187 + ARoomDetailReceipt,
  188 + AOwnerDetailHis,
  189 + AOwnerDetailRoomFee,
  190 + AOwnerDetailAccount,
  191 + AOwnerDetailCoupon,
  192 + AOwnerDetailAppUser,
  193 + AOwnerDetailVisit,
  194 + AOwnerDetailAcctReceipt,
  195 + AOwnerDetailAccessControl,
  196 + Divider
  197 + },
  198 + data() {
  199 + return {
  200 + adminOwnerDetailInfo: {
  201 + viewOwnerFlag: '',
  202 + ownerId: "",
  203 + memberId: '',
  204 + name: "",
  205 + age: "",
  206 + sex: "",
  207 + userName: "",
  208 + remark: "",
  209 + idCard: "",
  210 + link: "",
  211 + ownerPhoto: "/img/noPhoto.jpg",
  212 + ownerAttrDtos: [],
  213 + faceUrl: '',
  214 + _currentTab: 'aRoomDetailRoom',
  215 + personType: '',
  216 + personTypeName: '',
  217 + personRole: '',
  218 + personRoleName: '',
  219 + concactLink: '',
  220 + concactPerson: '',
  221 + communityName: '',
  222 + needBack: false
  223 + },
  224 + communityId: ''
  225 + }
  226 + },
  227 + created() {
  228 + this.communityId = getCommunityId()
  229 + this.adminOwnerDetailInfo.ownerId = this.$route.query.ownerId
  230 + this.adminOwnerDetailInfo.needBack = this.$route.query.needBack
  231 +
  232 + if (!this.adminOwnerDetailInfo.ownerId) {
  233 + return
  234 + }
  235 +
  236 + const currentTab = this.$route.query.currentTab
  237 + if (currentTab) {
  238 + this.adminOwnerDetailInfo._currentTab = currentTab
  239 + }
  240 +
  241 + this.loadAdminOwnerInfo()
  242 + },
  243 + methods: {
  244 + async loadAdminOwnerInfo() {
  245 + try {
  246 + const params = {
  247 + ownerId: this.adminOwnerDetailInfo.ownerId,
  248 + page: 1,
  249 + row: 1,
  250 + ownerTypeCd: '1001'
  251 + }
  252 +
  253 + const response = await getOwnerDetail(params)
  254 + const data = response.data[0]
  255 + Object.assign(this.adminOwnerDetailInfo, data)
  256 + this.adminOwnerDetailInfo.ownerAttrDtos = response.data[0].ownerAttrDtos
  257 +
  258 + // 加载当前标签页组件
  259 + this.handleTabClick(this.adminOwnerDetailInfo._currentTab)
  260 + } catch (error) {
  261 + console.error('获取业主详情失败:', error)
  262 + }
  263 + },
  264 + handleTabClick(tab) {
  265 + this.adminOwnerDetailInfo._currentTab = tab
  266 + setTimeout(() => {
  267 + if (this.$refs[tab] && this.$refs[tab].open) {
  268 + this.$refs[tab].open({
  269 + ownerId: this.adminOwnerDetailInfo.ownerId,
  270 + ownerName: this.adminOwnerDetailInfo.name,
  271 + link: this.adminOwnerDetailInfo.link,
  272 + })
  273 + }
  274 + }, 500)
  275 + },
  276 + goBack() {
  277 + this.$router.go(-1)
  278 + },
  279 + errorLoadImg() {
  280 + this.adminOwnerDetailInfo.ownerPhoto = "/img/noPhoto.jpg"
  281 + }
  282 + }
  283 +}
  284 +</script>
  285 +
  286 +<style scoped>
  287 +.white-bg {
  288 + background-color: #fff;
  289 +}
  290 +
  291 +.padding-lg {
  292 + padding: 20px;
  293 +}
  294 +
  295 +.padding-top {
  296 + padding-top: 15px;
  297 +}
  298 +
  299 +.border-radius {
  300 + border-radius: 4px;
  301 +}
  302 +
  303 +.flex {
  304 + display: flex;
  305 +}
  306 +
  307 +.justify-between {
  308 + justify-content: space-between;
  309 +}
  310 +
  311 +.text-title {
  312 + font-size: 18px;
  313 + font-weight: bold;
  314 +}
  315 +
  316 +.margin-top {
  317 + margin-top: 15px;
  318 +}
  319 +
  320 +.margin-top-sm {
  321 + margin-top: 10px;
  322 +}
  323 +
  324 +.vc-float-left {
  325 + float: left;
  326 +}
  327 +
  328 +.text-center {
  329 + text-align: center;
  330 +}
  331 +
  332 +.vc-line-primary {
  333 + border-top: 1px solid #409EFF;
  334 +}
  335 +
  336 +.form-group {
  337 + margin-bottom: 15px;
  338 +}
  339 +
  340 +.col-form-label {
  341 + margin-right: 5px;
  342 +}
  343 +</style>
0 \ No newline at end of file 344 \ No newline at end of file
src/views/aCommunity/adminOwnerDetailAccessControlRecordLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + adminOwnerDetailAccessControlRecord: {
  4 + recordType: 'Record Type',
  5 + machineName: 'Machine Name',
  6 + userName: 'User Name',
  7 + openType: 'Open Type',
  8 + createTime: 'Create Time'
  9 + }
  10 + },
  11 + zh: {
  12 + adminOwnerDetailAccessControlRecord: {
  13 + recordType: '记录类型',
  14 + machineName: '设备名称',
  15 + userName: '用户名称',
  16 + openType: '开门方式',
  17 + createTime: '创建时间'
  18 + }
  19 + }
  20 +}
0 \ No newline at end of file 21 \ No newline at end of file
src/views/aCommunity/adminOwnerDetailChargeMachineOrderLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + adminOwnerDetailChargeMachineOrder: {
  4 + machineName: 'Machine Name',
  5 + orderType: 'Order Type',
  6 + userName: 'User Name',
  7 + phone: 'Phone',
  8 + createTime: 'Create Time',
  9 + status: 'Status'
  10 + }
  11 + },
  12 + zh: {
  13 + adminOwnerDetailChargeMachineOrder: {
  14 + machineName: '设备名称',
  15 + orderType: '订单类型',
  16 + userName: '用户名称',
  17 + phone: '手机号',
  18 + createTime: '创建时间',
  19 + status: '状态'
  20 + }
  21 + }
  22 +}
0 \ No newline at end of file 23 \ No newline at end of file
src/views/aCommunity/adminOwnerDetailLang.js 0 → 100644
  1 +
  2 +export const messages = {
  3 + en: {
  4 + adminOwnerDetail: {
  5 + ownerInfo: 'Owner Information',
  6 + name: 'Name',
  7 + sex: 'Gender',
  8 + communityName: 'Community Name',
  9 + personType: 'Person Type',
  10 + personRole: 'Person Role',
  11 + idCard: 'ID Card',
  12 + contact: 'Contact',
  13 + backupPhone: 'Backup Phone',
  14 + contactPerson: 'Contact Person',
  15 + creator: 'Creator',
  16 + remark: 'Remark',
  17 + house: 'House',
  18 + car: 'Car',
  19 + contract: 'Contract',
  20 + member: 'Member',
  21 + modifyRecord: 'Modify Record',
  22 + houseFee: 'House Fee',
  23 + paymentHistory: 'Payment History',
  24 + account: 'Account',
  25 + coupon: 'Coupon',
  26 + ownerBinding: 'Owner Binding',
  27 + complaint: 'Complaint',
  28 + repair: 'Repair',
  29 + visitor: 'Visitor',
  30 + paymentReceipt: 'Payment Receipt',
  31 + depositReceipt: 'Deposit Receipt',
  32 + faceSync: 'Face Sync'
  33 + },
  34 + aRoomDetailCar: {
  35 + placeholderCarNum: 'Please enter license plate number',
  36 + carNum: 'License Plate',
  37 + leaseType: 'Plate Type',
  38 + tempCar: 'Temporary Car',
  39 + carType: 'Vehicle Type',
  40 + color: 'Color',
  41 + owner: 'Owner',
  42 + parkingSpace: 'Parking Space',
  43 + released: 'Released',
  44 + validity: 'Validity'
  45 + },
  46 + aRoomDetailMember: {
  47 + placeholderName: 'Please enter member name',
  48 + face: 'Face',
  49 + name: 'Name',
  50 + sex: 'Gender',
  51 + personRole: 'Person Role',
  52 + idCard: 'ID Card',
  53 + contact: 'Contact',
  54 + address: 'Address'
  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 + aRoomDetailComplaint: {
  69 + type: 'Type',
  70 + room: 'Room',
  71 + contact: 'Contact',
  72 + phone: 'Phone',
  73 + status: 'Status',
  74 + handler: 'Handler',
  75 + handlerPhone: 'Handler Phone',
  76 + createTime: 'Create Time',
  77 + actions: 'Actions',
  78 + detail: 'Detail',
  79 + flowChart: 'Flow Chart',
  80 + none: 'None'
  81 + },
  82 + aRoomDetailRepair: {
  83 + repairId: 'Work Order Code',
  84 + location: 'Location',
  85 + repairType: 'Repair Type',
  86 + repairPerson: 'Repair Person',
  87 + contact: 'Contact',
  88 + appointmentTime: 'Appointment Time',
  89 + state: 'Status',
  90 + taskProcessing: 'Task Processing',
  91 + detail: 'Detail'
  92 + },
  93 + aOwnerDetailHis: {
  94 + action: 'Action',
  95 + operator: 'Operator',
  96 + operateTime: 'Operate Time',
  97 + name: 'Name',
  98 + gender: 'Gender',
  99 + idCard: 'ID Card',
  100 + address: 'Address',
  101 + add: 'Add',
  102 + delete: 'Delete',
  103 + modifyNew: 'Modify(New)',
  104 + modifyOld: 'Modify(Old)'
  105 + },
  106 + aOwnerDetailRoomFee: {
  107 + room: 'Room',
  108 + feeItem: 'Fee Item',
  109 + feeFlag: 'Fee Flag',
  110 + feeType: 'Fee Type',
  111 + amountReceivable: 'Amount Receivable',
  112 + accountTime: 'Account Time',
  113 + receivablePeriod: 'Receivable Period',
  114 + description: 'Description',
  115 + status: 'Status',
  116 + operation: 'Operation',
  117 + selectStatus: 'Select Status',
  118 + valid: 'Valid',
  119 + chargeEnd: 'Charge End',
  120 + lastDegree: 'Last Degree',
  121 + currentDegree: 'Current Degree',
  122 + unitPrice: 'Unit Price',
  123 + additionalFee: 'Additional Fee',
  124 + usage: 'Usage',
  125 + algorithm: 'Algorithm',
  126 + feeBasedOnActual: 'Fee based on actual situation',
  127 + fixedFee: 'Fixed Fee',
  128 + arrearsSubtotal: 'Arrears Subtotal:',
  129 + note1: 'Note: The receivable end time "-" means not yet receivable or charge has ended',
  130 + note2: 'The receivable amount is -1, usually the fee item formula setting is wrong, please check'
  131 + },
  132 + aOwnerDetailCoupon: {
  133 + id: 'ID',
  134 + couponName: 'Coupon Name',
  135 + faceValue: 'Face Value',
  136 + validity: 'Validity',
  137 + userName: 'User Name',
  138 + phone: 'Phone',
  139 + purpose: 'Purpose',
  140 + quantity: 'Quantity',
  141 + status: 'Status',
  142 + effectiveTime: 'Effective Time',
  143 + unused: 'Unused',
  144 + used: 'Used',
  145 + sheet: 'sheet'
  146 + },
  147 + aOwnerDetailVisit: {
  148 + visitorId: 'Visitor ID',
  149 + photo: 'Photo',
  150 + visitor: 'Visitor',
  151 + ownerName: 'Owner Name',
  152 + visitReason: 'Visit Reason/Type',
  153 + carNum: 'Car Number',
  154 + entourage: 'Entourage',
  155 + createTime: 'Create Time',
  156 + visitTime: 'Visit/Departure Time',
  157 + visitorStatus: 'Visitor Status',
  158 + carStatus: 'Car Status',
  159 + operation: 'Operation',
  160 + parkingLot: ' parking lot-',
  161 + parkingSpace: ' parking space'
  162 + },
  163 + aOwnerDetailAccessControl: {
  164 + objectType: 'Object Type',
  165 + objectName: 'Object Name',
  166 + command: 'Command',
  167 + status: 'Status',
  168 + description: 'Description',
  169 + syncTime: 'Sync Time'
  170 + },
  171 + adminOwnerDetailAccessControlRecord: {
  172 + recordType: 'Record Type',
  173 + machineName: 'Machine Name',
  174 + userName: 'User Name',
  175 + openType: 'Open Type',
  176 + createTime: 'Create Time'
  177 + },
  178 + adminOwnerDetailChargeMachineOrder: {
  179 + machineName: 'Machine Name',
  180 + orderType: 'Order Type',
  181 + userName: 'User Name',
  182 + phone: 'Phone',
  183 + createTime: 'Create Time',
  184 + status: 'Status'
  185 + }
  186 + },
  187 + zh: {
  188 + adminOwnerDetail: {
  189 + ownerInfo: '业主信息',
  190 + name: '名称',
  191 + sex: '性别',
  192 + communityName: '小区名称',
  193 + personType: '人员类型',
  194 + personRole: '人员角色',
  195 + idCard: '证件号',
  196 + contact: '联系方式',
  197 + backupPhone: '备用手机',
  198 + contactPerson: '联系人',
  199 + creator: '创建员工',
  200 + remark: '备注',
  201 + house: '房屋',
  202 + car: '车辆',
  203 + contract: '合同',
  204 + member: '成员',
  205 + modifyRecord: '修改记录',
  206 + houseFee: '房屋费用',
  207 + paymentHistory: '缴费历史',
  208 + account: '账户',
  209 + coupon: '优惠券',
  210 + ownerBinding: '业主绑定',
  211 + complaint: '投诉',
  212 + repair: '报修',
  213 + visitor: '访客',
  214 + paymentReceipt: '缴费收据',
  215 + depositReceipt: '预存收据',
  216 + faceSync: '人脸同步'
  217 + },
  218 + aRoomDetailCar: {
  219 + placeholderCarNum: '请填写车牌号',
  220 + carNum: '车牌号',
  221 + leaseType: '车牌类型',
  222 + tempCar: '临时车',
  223 + carType: '车辆类型',
  224 + color: '颜色',
  225 + owner: '业主',
  226 + parkingSpace: '车位',
  227 + released: '车位已释放',
  228 + validity: '有效期'
  229 + },
  230 + aRoomDetailMember: {
  231 + placeholderName: '请填写成员名称',
  232 + face: '人脸',
  233 + name: '名称',
  234 + sex: '性别',
  235 + personRole: '人员角色',
  236 + idCard: '身份证',
  237 + contact: '联系方式',
  238 + address: '地址'
  239 + },
  240 + aRoomDetailContract: {
  241 + contractName: '合同名称',
  242 + contractCode: '合同编号',
  243 + parentContractCode: '父合同编号',
  244 + contractType: '合同类型',
  245 + operator: '经办人',
  246 + amount: '合同金额',
  247 + startTime: '开始时间',
  248 + endTime: '结束时间',
  249 + createTime: '起草时间',
  250 + state: '状态'
  251 + },
  252 + aRoomDetailComplaint: {
  253 + type: '类型',
  254 + room: '房屋',
  255 + contact: '联系人',
  256 + phone: '联系电话',
  257 + status: '状态',
  258 + handler: '处理人',
  259 + handlerPhone: '处理人电话',
  260 + createTime: '创建时间',
  261 + actions: '操作',
  262 + detail: '详情',
  263 + flowChart: '流程图',
  264 + none: '无'
  265 + },
  266 + aRoomDetailRepair: {
  267 + repairId: '工单编码',
  268 + location: '位置',
  269 + repairType: '报修类型',
  270 + repairPerson: '报修人',
  271 + contact: '联系方式',
  272 + appointmentTime: '预约时间',
  273 + state: '状态',
  274 + taskProcessing: '定时任务处理',
  275 + detail: '详情'
  276 + },
  277 + aOwnerDetailHis: {
  278 + action: '动作',
  279 + operator: '操作人',
  280 + operateTime: '操作时间',
  281 + name: '姓名',
  282 + gender: '性别',
  283 + idCard: '身份证',
  284 + address: '家庭住址',
  285 + add: '添加',
  286 + delete: '删除',
  287 + modifyNew: '修改(新)',
  288 + modifyOld: '修改(旧)'
  289 + },
  290 + aOwnerDetailRoomFee: {
  291 + room: '房屋',
  292 + feeItem: '费用项目',
  293 + feeFlag: '费用标识',
  294 + feeType: '费用类型',
  295 + amountReceivable: '应收金额',
  296 + accountTime: '建账时间',
  297 + receivablePeriod: '应收时间段',
  298 + description: '说明',
  299 + status: '状态',
  300 + operation: '操作',
  301 + selectStatus: '请选择状态',
  302 + valid: '有效',
  303 + chargeEnd: '收费结束',
  304 + lastDegree: '上期度数',
  305 + currentDegree: '本期度数',
  306 + unitPrice: '单价',
  307 + additionalFee: '附加费',
  308 + usage: '用量',
  309 + algorithm: '算法',
  310 + feeBasedOnActual: '费用根据实际情况而定',
  311 + fixedFee: '固定费',
  312 + arrearsSubtotal: '欠费小计:',
  313 + note1: '注意:应收结束时间 "-" 表示未到应收时间或收费已结束',
  314 + note2: '应收金额为-1 一般为费用项公式设置出错请检查'
  315 + },
  316 + aOwnerDetailCoupon: {
  317 + id: '编号',
  318 + couponName: '优惠券名称',
  319 + faceValue: '面值',
  320 + validity: '有效期',
  321 + userName: '用户名称',
  322 + phone: '手机号',
  323 + purpose: '用途',
  324 + quantity: '数量',
  325 + status: '状态',
  326 + effectiveTime: '生效时间',
  327 + unused: '未使用',
  328 + used: '已使用',
  329 + sheet: '张'
  330 + },
  331 + aOwnerDetailVisit: {
  332 + visitorId: '访客ID',
  333 + photo: '照片',
  334 + visitor: '访客',
  335 + ownerName: '业主姓名',
  336 + visitReason: '来访事由/类型',
  337 + carNum: '车牌号',
  338 + entourage: '随行人数',
  339 + createTime: '创建时间',
  340 + visitTime: '来访/离开时间',
  341 + visitorStatus: '访客状态',
  342 + carStatus: '车辆状态',
  343 + operation: '操作',
  344 + parkingLot: '停车场-',
  345 + parkingSpace: '停车位'
  346 + },
  347 + aOwnerDetailAccessControl: {
  348 + objectType: '对象类型',
  349 + objectName: '对象名称',
  350 + command: '指令',
  351 + status: '状态',
  352 + description: '说明',
  353 + syncTime: '同步时间'
  354 + },
  355 + adminOwnerDetailAccessControlRecord: {
  356 + recordType: '记录类型',
  357 + machineName: '设备名称',
  358 + userName: '用户名称',
  359 + openType: '开门方式',
  360 + createTime: '创建时间'
  361 + },
  362 + adminOwnerDetailChargeMachineOrder: {
  363 + machineName: '设备名称',
  364 + orderType: '订单类型',
  365 + userName: '用户名称',
  366 + phone: '手机号',
  367 + createTime: '创建时间',
  368 + status: '状态'
  369 + },
  370 + }
  371 +}
src/views/aCommunity/adminRoomDetail.vue
@@ -205,7 +205,7 @@ export default { @@ -205,7 +205,7 @@ export default {
205 row: 1 205 row: 1
206 }).then(res => { 206 }).then(res => {
207 Object.assign(this.adminRoomDetailInfo, res.data[0]) 207 Object.assign(this.adminRoomDetailInfo, res.data[0])
208 - 208 +
209 this.handleTabClick(this.adminRoomDetailInfo._currentTab) 209 this.handleTabClick(this.adminRoomDetailInfo._currentTab)
210 }).catch(err => { 210 }).catch(err => {
211 console.error('请求失败:', err) 211 console.error('请求失败:', err)
src/views/car/adminCarList.vue
@@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
40 <el-table-column prop="carColor" :label="$t('adminCar.table.color')" align="center" /> 40 <el-table-column prop="carColor" :label="$t('adminCar.table.color')" align="center" />
41 <el-table-column :label="$t('adminCar.table.owner')" align="center"> 41 <el-table-column :label="$t('adminCar.table.owner')" align="center">
42 <template slot-scope="scope"> 42 <template slot-scope="scope">
43 - <el-link type="primary" :href="`/#/pages/owner/adminOwnerDetail?ownerId=${scope.row.ownerId}`" target="_blank"> 43 + <el-link type="primary" :href="`/#/views/aCommunity/adminOwnerDetail?ownerId=${scope.row.ownerId}`" target="_blank">
44 {{ scope.row.ownerName }}({{ scope.row.link }}) 44 {{ scope.row.ownerName }}({{ scope.row.link }})
45 </el-link> 45 </el-link>
46 </template> 46 </template>
src/views/community/adminRoomList.vue
@@ -51,7 +51,7 @@ @@ -51,7 +51,7 @@
51 <el-table-column prop="ownerName" :label="$t('adminRoom.table.owner')"> 51 <el-table-column prop="ownerName" :label="$t('adminRoom.table.owner')">
52 <template slot-scope="scope"> 52 <template slot-scope="scope">
53 <router-link v-if="scope.row.ownerName" 53 <router-link v-if="scope.row.ownerName"
54 - :to="`/pages/owner/adminOwnerDetail?ownerId=${scope.row.ownerId}`"> 54 + :to="`/views/aCommunity/adminOwnerDetail?ownerId=${scope.row.ownerId}`">
55 {{ scope.row.ownerName }}({{ scope.row.link }}) 55 {{ scope.row.ownerName }}({{ scope.row.link }})
56 </router-link> 56 </router-link>
57 <span v-else>-</span> 57 <span v-else>-</span>
src/views/owner/adminOwnerList.vue
@@ -217,7 +217,7 @@ export default { @@ -217,7 +217,7 @@ export default {
217 this.queryOwner() 217 this.queryOwner()
218 }, 218 },
219 toOwnerDetail(owner) { 219 toOwnerDetail(owner) {
220 - this.$router.push(`/owner/adminOwnerDetail?ownerId=${owner.ownerId}`) 220 + this.$router.push(`/views/aCommunity/adminOwnerDetail?ownerId=${owner.ownerId}`)
221 }, 221 },
222 viewOwnerFace(url) { 222 viewOwnerFace(url) {
223 this.$refs.viewImage.open(url) 223 this.$refs.viewImage.open(url)
src/views/owner/ownerDetailLang.js
@@ -54,17 +54,7 @@ export const messages = { @@ -54,17 +54,7 @@ export const messages = {
54 prestore: 'Prestore', 54 prestore: 'Prestore',
55 detail: 'Account Detail' 55 detail: 'Account Detail'
56 }, 56 },
57 - ownerDetailAppUser: {  
58 - communityName: 'Community Name',  
59 - relatedOwner: 'Related Owner',  
60 - idCard: 'ID Card',  
61 - phone: 'Phone',  
62 - status: 'Status',  
63 - applyTime: 'Apply Time',  
64 - appType: 'App Type',  
65 - unbind: 'Unbind',  
66 - resetPwd: 'Reset Password'  
67 - }, 57 +
68 ownerDetailRepair: { 58 ownerDetailRepair: {
69 repairId: 'Work Order ID', 59 repairId: 'Work Order ID',
70 location: 'Location', 60 location: 'Location',
@@ -290,17 +280,7 @@ export const messages = { @@ -290,17 +280,7 @@ export const messages = {
290 prestore: '预存', 280 prestore: '预存',
291 detail: '账户明细' 281 detail: '账户明细'
292 }, 282 },
293 - ownerDetailAppUser: {  
294 - communityName: '小区名称',  
295 - relatedOwner: '关联业主',  
296 - idCard: '身份证',  
297 - phone: '手机号',  
298 - status: '状态',  
299 - applyTime: '申请时间',  
300 - appType: '手机端类型',  
301 - unbind: '解绑',  
302 - resetPwd: '重置密码'  
303 - }, 283 +
304 ownerDetailRepair: { 284 ownerDetailRepair: {
305 repairId: '工单编码', 285 repairId: '工单编码',
306 location: '位置', 286 location: '位置',