Commit f6a81350c3e9fa03bb6929785a5e09d22693897b
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 '@/api/fee/adminRoomFeeApi' | @@ -32,12 +32,7 @@ import { queryAdminOwnerAccount } from '@/api/fee/adminRoomFeeApi' | ||
| 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 '@/api/fee/adminRoomFeeApi' | @@ -53,16 +53,6 @@ import { queryAdminOwnerRooms } from '@/api/fee/adminRoomFeeApi' | ||
| 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 '../views/community/e | @@ -8,6 +8,7 @@ import { messages as editCommunityPublicityMessages } from '../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: '位置', |