Commit 96361cb7bf801efc0b631749831f31ee42114165
1 parent
35184bf6
完成业主认证功能
Showing
8 changed files
with
427 additions
and
2 deletions
src/api/owner/auditAuthOwnerUndoApi.js
0 → 100644
| 1 | +import request from '@/utils/request' | |
| 2 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 3 | + | |
| 4 | +// 获取房间信息 | |
| 5 | +export function getRoomInfo(params) { | |
| 6 | + return new Promise((resolve, reject) => { | |
| 7 | + request({ | |
| 8 | + url: '/room.queryRooms', | |
| 9 | + method: 'get', | |
| 10 | + params: { | |
| 11 | + ...params, | |
| 12 | + communityId: getCommunityId() | |
| 13 | + } | |
| 14 | + }).then(response => { | |
| 15 | + const res = response.data | |
| 16 | + resolve(res) | |
| 17 | + }).catch(error => { | |
| 18 | + reject(error) | |
| 19 | + }) | |
| 20 | + }) | |
| 21 | +} | |
| 22 | + | |
| 23 | +// 获取业主列表 | |
| 24 | +export function getOwnerList(params) { | |
| 25 | + return new Promise((resolve, reject) => { | |
| 26 | + request({ | |
| 27 | + url: '/owner.queryOwners', | |
| 28 | + method: 'get', | |
| 29 | + params: { | |
| 30 | + ...params, | |
| 31 | + communityId: getCommunityId() | |
| 32 | + } | |
| 33 | + }).then(response => { | |
| 34 | + const res = response.data | |
| 35 | + resolve(res) | |
| 36 | + }).catch(error => { | |
| 37 | + reject(error) | |
| 38 | + }) | |
| 39 | + }) | |
| 40 | +} | |
| 41 | + | |
| 42 | +// 提交审核 | |
| 43 | +export function auditAuthOwner(data) { | |
| 44 | + return new Promise((resolve, reject) => { | |
| 45 | + request({ | |
| 46 | + url: '/owner.auditAuthOwner', | |
| 47 | + method: 'post', | |
| 48 | + data: { | |
| 49 | + ...data, | |
| 50 | + communityId: getCommunityId() | |
| 51 | + } | |
| 52 | + }).then(response => { | |
| 53 | + const res = response.data | |
| 54 | + resolve(res) | |
| 55 | + }).catch(error => { | |
| 56 | + reject(error) | |
| 57 | + }) | |
| 58 | + }) | |
| 59 | +} | |
| 0 | 60 | \ No newline at end of file | ... | ... |
src/components/owner/ResetStaffPwd.vue
src/i18n/userI18n.js
| ... | ... | @@ -9,6 +9,7 @@ import { messages as scheduleClassesPageMessages } from '../views/org/scheduleCl |
| 9 | 9 | import { messages as workflowManageMessages } from '../views/system/workflowManageLang' |
| 10 | 10 | import { messages as workflowSettingManageMessages } from '../views/system/workflowSettingManageLang' |
| 11 | 11 | import { messages as ownerDetailMessages } from '../views/owner/ownerDetailLang' |
| 12 | +import { messages as auditAuthOwnerUndoMessages } from '../views/owner/auditAuthOwnerUndoLang' | |
| 12 | 13 | |
| 13 | 14 | export const messages = { |
| 14 | 15 | en: { |
| ... | ... | @@ -23,6 +24,7 @@ export const messages = { |
| 23 | 24 | ...workflowManageMessages.en, |
| 24 | 25 | ...workflowSettingManageMessages.en, |
| 25 | 26 | ...ownerDetailMessages.en, |
| 27 | + ...auditAuthOwnerUndoMessages.en, | |
| 26 | 28 | }, |
| 27 | 29 | zh: { |
| 28 | 30 | ...staffCommunityMessages.zh, |
| ... | ... | @@ -36,5 +38,6 @@ export const messages = { |
| 36 | 38 | ...workflowManageMessages.zh, |
| 37 | 39 | ...workflowSettingManageMessages.zh, |
| 38 | 40 | ...ownerDetailMessages.zh, |
| 41 | + ...auditAuthOwnerUndoMessages.zh, | |
| 39 | 42 | } |
| 40 | 43 | } |
| 41 | 44 | \ No newline at end of file | ... | ... |
src/lang/owner/auditAuthOwnerUndoLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + auditAuthOwnerUndo: { | |
| 4 | + title: 'Authentication Review', | |
| 5 | + back: 'Back', | |
| 6 | + roomNumber: 'Room Number:', | |
| 7 | + roomArea: 'Room Area:', | |
| 8 | + roomType: 'Room Type:', | |
| 9 | + roomStatus: 'Room Status:', | |
| 10 | + owner: 'Owner:', | |
| 11 | + ownerPhone: 'Owner Phone:', | |
| 12 | + authPerson: 'Authenticator:', | |
| 13 | + housePersonnel: 'House Personnel', | |
| 14 | + ownerFace: 'Owner Face', | |
| 15 | + name: 'Name', | |
| 16 | + contact: 'Contact', | |
| 17 | + address: 'Address', | |
| 18 | + idCard: 'ID Card', | |
| 19 | + audit: 'Audit', | |
| 20 | + action: 'Action', | |
| 21 | + selectAudit: 'Please Audit', | |
| 22 | + agree: 'Agree', | |
| 23 | + reject: 'Reject', | |
| 24 | + auditRemark: 'Audit Remark', | |
| 25 | + requiredRemark: 'Required, please fill in the work order description', | |
| 26 | + submit: 'Submit', | |
| 27 | + submitSuccess: 'Submitted successfully', | |
| 28 | + submitFailed: 'Submission failed:' | |
| 29 | + } | |
| 30 | + }, | |
| 31 | + zh: { | |
| 32 | + auditAuthOwnerUndo: { | |
| 33 | + title: '认证审核', | |
| 34 | + back: '返回', | |
| 35 | + roomNumber: '房屋编号:', | |
| 36 | + roomArea: '房屋面积:', | |
| 37 | + roomType: '房屋类型:', | |
| 38 | + roomStatus: '房屋状态:', | |
| 39 | + owner: '业主:', | |
| 40 | + ownerPhone: '业主电话:', | |
| 41 | + authPerson: '认证人员:', | |
| 42 | + housePersonnel: '房屋人员', | |
| 43 | + ownerFace: '业主人脸', | |
| 44 | + name: '姓名', | |
| 45 | + contact: '联系方式', | |
| 46 | + address: '家庭住址', | |
| 47 | + idCard: '身份证', | |
| 48 | + audit: '审核', | |
| 49 | + action: '动作', | |
| 50 | + selectAudit: '请审核', | |
| 51 | + agree: '同意', | |
| 52 | + reject: '拒绝', | |
| 53 | + auditRemark: '审核说明', | |
| 54 | + requiredRemark: '必填,请填写工单说明', | |
| 55 | + submit: '提交', | |
| 56 | + submitSuccess: '提交成功', | |
| 57 | + submitFailed: '提交失败:' | |
| 58 | + } | |
| 59 | + } | |
| 60 | +} | |
| 0 | 61 | \ No newline at end of file | ... | ... |
src/router/userRouter.js
| ... | ... | @@ -44,4 +44,9 @@ export default [ |
| 44 | 44 | name: '/views/owner/ownerDetail', |
| 45 | 45 | component: () => import('@/views/owner/ownerDetail.vue') |
| 46 | 46 | }, |
| 47 | + { | |
| 48 | + path:'/views/owner/auditAuthOwnerUndo', | |
| 49 | + name:'/views/owner/auditAuthOwnerUndo', | |
| 50 | + component: () => import('@/views/owner/auditAuthOwnerUndoList.vue') | |
| 51 | + }, | |
| 47 | 52 | ] |
| 48 | 53 | \ No newline at end of file | ... | ... |
src/views/owner/auditAuthOwnerList.vue
| ... | ... | @@ -179,7 +179,7 @@ export default { |
| 179 | 179 | }, |
| 180 | 180 | _openAuditAuthOwnerModel(appUser) { |
| 181 | 181 | this.$router.push({ |
| 182 | - path: '/owner/auditAuthOwnerUndo', | |
| 182 | + path: '/views/owner/auditAuthOwnerUndo', | |
| 183 | 183 | query: { |
| 184 | 184 | appUserId: appUser.appUserId, |
| 185 | 185 | roomId: appUser.roomId, | ... | ... |
src/views/owner/auditAuthOwnerUndoLang.js
0 → 100644
| 1 | +export const messages = { | |
| 2 | + en: { | |
| 3 | + auditAuthOwnerUndo: { | |
| 4 | + title: 'Authentication Review', | |
| 5 | + back: 'Back', | |
| 6 | + roomNumber: 'Room Number:', | |
| 7 | + roomArea: 'Room Area:', | |
| 8 | + roomType: 'Room Type:', | |
| 9 | + roomStatus: 'Room Status:', | |
| 10 | + owner: 'Owner:', | |
| 11 | + ownerPhone: 'Owner Phone:', | |
| 12 | + authPerson: 'Authenticator:', | |
| 13 | + housePersonnel: 'House Personnel', | |
| 14 | + ownerFace: 'Owner Face', | |
| 15 | + name: 'Name', | |
| 16 | + contact: 'Contact', | |
| 17 | + address: 'Address', | |
| 18 | + idCard: 'ID Card', | |
| 19 | + audit: 'Audit', | |
| 20 | + action: 'Action', | |
| 21 | + selectAudit: 'Please Audit', | |
| 22 | + agree: 'Agree', | |
| 23 | + reject: 'Reject', | |
| 24 | + auditRemark: 'Audit Remark', | |
| 25 | + requiredRemark: 'Required, please fill in the work order description', | |
| 26 | + submit: 'Submit', | |
| 27 | + submitSuccess: 'Submitted successfully', | |
| 28 | + submitFailed: 'Submission failed:' | |
| 29 | + } | |
| 30 | + }, | |
| 31 | + zh: { | |
| 32 | + auditAuthOwnerUndo: { | |
| 33 | + title: '认证审核', | |
| 34 | + back: '返回', | |
| 35 | + roomNumber: '房屋编号:', | |
| 36 | + roomArea: '房屋面积:', | |
| 37 | + roomType: '房屋类型:', | |
| 38 | + roomStatus: '房屋状态:', | |
| 39 | + owner: '业主:', | |
| 40 | + ownerPhone: '业主电话:', | |
| 41 | + authPerson: '认证人员:', | |
| 42 | + housePersonnel: '房屋人员', | |
| 43 | + ownerFace: '业主人脸', | |
| 44 | + name: '姓名', | |
| 45 | + contact: '联系方式', | |
| 46 | + address: '家庭住址', | |
| 47 | + idCard: '身份证', | |
| 48 | + audit: '审核', | |
| 49 | + action: '动作', | |
| 50 | + selectAudit: '请审核', | |
| 51 | + agree: '同意', | |
| 52 | + reject: '拒绝', | |
| 53 | + auditRemark: '审核说明', | |
| 54 | + requiredRemark: '必填,请填写工单说明', | |
| 55 | + submit: '提交', | |
| 56 | + submitSuccess: '提交成功', | |
| 57 | + submitFailed: '提交失败:' | |
| 58 | + } | |
| 59 | + } | |
| 60 | + } | |
| 0 | 61 | \ No newline at end of file | ... | ... |
src/views/owner/auditAuthOwnerUndoList.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div class="audit-auth-owner-undo-container"> | |
| 3 | + <el-card class="box-card"> | |
| 4 | + <div slot="header" class="flex justify-between"> | |
| 5 | + <span>{{ $t('auditAuthOwnerUndo.title') }}</span> | |
| 6 | + <el-button style="float: right; padding: 3px 0" type="text" @click="goBack"> | |
| 7 | + {{ $t('auditAuthOwnerUndo.back') }} | |
| 8 | + </el-button> | |
| 9 | + </div> | |
| 10 | + <el-row :gutter="20" v-if="auditAuthOwnerUndoInfo.room"> | |
| 11 | + <el-col :span="6"> | |
| 12 | + <div class="form-item"> | |
| 13 | + <label class="form-label">{{ $t('auditAuthOwnerUndo.roomNumber') }}</label> | |
| 14 | + <div class="form-content">{{ auditAuthOwnerUndoInfo.room.roomName }}</div> | |
| 15 | + </div> | |
| 16 | + </el-col> | |
| 17 | + <el-col :span="6"> | |
| 18 | + <div class="form-item"> | |
| 19 | + <label class="form-label">{{ $t('auditAuthOwnerUndo.roomArea') }}</label> | |
| 20 | + <div class="form-content">{{ auditAuthOwnerUndoInfo.room.builtUpArea }}</div> | |
| 21 | + </div> | |
| 22 | + </el-col> | |
| 23 | + <el-col :span="6"> | |
| 24 | + <div class="form-item"> | |
| 25 | + <label class="form-label">{{ $t('auditAuthOwnerUndo.roomType') }}</label> | |
| 26 | + <div class="form-content">{{ auditAuthOwnerUndoInfo.room.roomSubTypeName }}</div> | |
| 27 | + </div> | |
| 28 | + </el-col> | |
| 29 | + <el-col :span="6"> | |
| 30 | + <div class="form-item"> | |
| 31 | + <label class="form-label">{{ $t('auditAuthOwnerUndo.roomStatus') }}</label> | |
| 32 | + <div class="form-content">{{ auditAuthOwnerUndoInfo.room.stateName }}</div> | |
| 33 | + </div> | |
| 34 | + </el-col> | |
| 35 | + <el-col :span="6"> | |
| 36 | + <div class="form-item"> | |
| 37 | + <label class="form-label">{{ $t('auditAuthOwnerUndo.owner') }}</label> | |
| 38 | + <div class="form-content">{{ auditAuthOwnerUndoInfo.room.ownerName }}</div> | |
| 39 | + </div> | |
| 40 | + </el-col> | |
| 41 | + <el-col :span="6"> | |
| 42 | + <div class="form-item"> | |
| 43 | + <label class="form-label">{{ $t('auditAuthOwnerUndo.ownerPhone') }}</label> | |
| 44 | + <div class="form-content">{{ auditAuthOwnerUndoInfo.room.link }}</div> | |
| 45 | + </div> | |
| 46 | + </el-col> | |
| 47 | + <el-col :span="6"> | |
| 48 | + <div class="form-item"> | |
| 49 | + <label class="form-label">{{ $t('auditAuthOwnerUndo.authPerson') }}</label> | |
| 50 | + <div class="form-content">{{ auditAuthOwnerUndoInfo.appUserName }}</div> | |
| 51 | + </div> | |
| 52 | + </el-col> | |
| 53 | + <el-col :span="6"> | |
| 54 | + <div class="form-item"> | |
| 55 | + <label class="form-label">{{ $t('auditAuthOwnerUndo.ownerPhone') }}</label> | |
| 56 | + <div class="form-content">{{ auditAuthOwnerUndoInfo.link }}</div> | |
| 57 | + </div> | |
| 58 | + </el-col> | |
| 59 | + </el-row> | |
| 60 | + </el-card> | |
| 61 | + | |
| 62 | + <el-card class="box-card"> | |
| 63 | + <div slot="header" class="flex justify-between"> | |
| 64 | + <span>{{ $t('auditAuthOwnerUndo.housePersonnel') }}</span> | |
| 65 | + </div> | |
| 66 | + <el-table :data="auditAuthOwnerUndoInfo.owners" border style="width: 100%"> | |
| 67 | + <el-table-column prop="url" :label="$t('auditAuthOwnerUndo.ownerFace')" align="center"> | |
| 68 | + <template slot-scope="scope"> | |
| 69 | + <el-image | |
| 70 | + style="width: 60px; height: 60px;" | |
| 71 | + :src="scope.row.url || '/img/noPhoto.jpg'" | |
| 72 | + :preview-src-list="[scope.row.url]" | |
| 73 | + fit="cover" | |
| 74 | + class="border-radius" | |
| 75 | + @click="viewOwnerFace(scope.row.url)" | |
| 76 | + ></el-image> | |
| 77 | + </template> | |
| 78 | + </el-table-column> | |
| 79 | + <el-table-column prop="name" :label="$t('auditAuthOwnerUndo.name')" align="center"></el-table-column> | |
| 80 | + <el-table-column prop="link" :label="$t('auditAuthOwnerUndo.contact')" align="center"></el-table-column> | |
| 81 | + <el-table-column prop="address" :label="$t('auditAuthOwnerUndo.address')" align="center"> | |
| 82 | + <template slot-scope="scope"> | |
| 83 | + {{ scope.row.address || '-' }} | |
| 84 | + </template> | |
| 85 | + </el-table-column> | |
| 86 | + <el-table-column prop="idCard" :label="$t('auditAuthOwnerUndo.idCard')" align="center"> | |
| 87 | + <template slot-scope="scope"> | |
| 88 | + {{ scope.row.idCard || '-' }} | |
| 89 | + </template> | |
| 90 | + </el-table-column> | |
| 91 | + </el-table> | |
| 92 | + </el-card> | |
| 93 | + | |
| 94 | + <el-card class="box-card"> | |
| 95 | + <div slot="header" class="flex justify-between"> | |
| 96 | + <span>{{ $t('auditAuthOwnerUndo.audit') }}</span> | |
| 97 | + </div> | |
| 98 | + <el-form label-width="120px"> | |
| 99 | + <el-form-item :label="$t('auditAuthOwnerUndo.action')"> | |
| 100 | + <el-select v-model="auditAuthOwnerUndoInfo.audit.state" style="width: 100%"> | |
| 101 | + <el-option disabled :value="''" :label="$t('auditAuthOwnerUndo.selectAudit')"></el-option> | |
| 102 | + <el-option value="1100" :label="$t('auditAuthOwnerUndo.agree')"></el-option> | |
| 103 | + <el-option value="1200" :label="$t('auditAuthOwnerUndo.reject')"></el-option> | |
| 104 | + </el-select> | |
| 105 | + </el-form-item> | |
| 106 | + <el-form-item :label="$t('auditAuthOwnerUndo.auditRemark')"> | |
| 107 | + <el-input | |
| 108 | + type="textarea" | |
| 109 | + :placeholder="$t('auditAuthOwnerUndo.requiredRemark')" | |
| 110 | + v-model="auditAuthOwnerUndoInfo.audit.remark" | |
| 111 | + :rows="4" | |
| 112 | + ></el-input> | |
| 113 | + </el-form-item> | |
| 114 | + <el-form-item> | |
| 115 | + <el-button type="primary" @click="auditSubmit">{{ $t('auditAuthOwnerUndo.submit') }}</el-button> | |
| 116 | + </el-form-item> | |
| 117 | + </el-form> | |
| 118 | + </el-card> | |
| 119 | + </div> | |
| 120 | +</template> | |
| 121 | + | |
| 122 | +<script> | |
| 123 | +import { getCommunityId } from '@/api/community/communityApi' | |
| 124 | +import { getRoomInfo, getOwnerList, auditAuthOwner } from '@/api/owner/auditAuthOwnerUndoApi' | |
| 125 | + | |
| 126 | +export default { | |
| 127 | + name: 'AuditAuthOwnerUndoList', | |
| 128 | + data() { | |
| 129 | + return { | |
| 130 | + auditAuthOwnerUndoInfo: { | |
| 131 | + room: {}, | |
| 132 | + roomId: '', | |
| 133 | + owners: [], | |
| 134 | + appUserName: '', | |
| 135 | + link: '', | |
| 136 | + audit: { | |
| 137 | + state: '', | |
| 138 | + remark: '', | |
| 139 | + appUserId: '' | |
| 140 | + } | |
| 141 | + } | |
| 142 | + } | |
| 143 | + }, | |
| 144 | + created() { | |
| 145 | + this.initData() | |
| 146 | + }, | |
| 147 | + methods: { | |
| 148 | + initData() { | |
| 149 | + this.auditAuthOwnerUndoInfo.audit.appUserId = this.$route.query.appUserId | |
| 150 | + this.auditAuthOwnerUndoInfo.roomId = this.$route.query.roomId | |
| 151 | + this.auditAuthOwnerUndoInfo.appUserName = this.$route.query.appUserName | |
| 152 | + this.auditAuthOwnerUndoInfo.link = this.$route.query.link | |
| 153 | + this.loadRoom() | |
| 154 | + this.loadOwners() | |
| 155 | + }, | |
| 156 | + async loadRoom() { | |
| 157 | + try { | |
| 158 | + const params = { | |
| 159 | + page: 1, | |
| 160 | + row: 1, | |
| 161 | + roomId: this.auditAuthOwnerUndoInfo.roomId, | |
| 162 | + communityId: getCommunityId() | |
| 163 | + } | |
| 164 | + const res = await getRoomInfo(params) | |
| 165 | + this.auditAuthOwnerUndoInfo.room = res.rooms[0] | |
| 166 | + } catch (error) { | |
| 167 | + console.error('Failed to load room info:', error) | |
| 168 | + } | |
| 169 | + }, | |
| 170 | + async loadOwners() { | |
| 171 | + try { | |
| 172 | + const params = { | |
| 173 | + page: 1, | |
| 174 | + row: 100, | |
| 175 | + roomId: this.auditAuthOwnerUndoInfo.roomId, | |
| 176 | + communityId: getCommunityId() | |
| 177 | + } | |
| 178 | + const res = await getOwnerList(params) | |
| 179 | + this.auditAuthOwnerUndoInfo.owners = res.data | |
| 180 | + } catch (error) { | |
| 181 | + console.error('Failed to load owners:', error) | |
| 182 | + } | |
| 183 | + }, | |
| 184 | + viewOwnerFace(url) { | |
| 185 | + if (url) { | |
| 186 | + // 预览图片逻辑 | |
| 187 | + } | |
| 188 | + }, | |
| 189 | + async auditSubmit() { | |
| 190 | + try { | |
| 191 | + const auditInfo = { | |
| 192 | + ...this.auditAuthOwnerUndoInfo.audit, | |
| 193 | + communityId: getCommunityId() | |
| 194 | + } | |
| 195 | + const res = await auditAuthOwner(auditInfo) | |
| 196 | + if (res.code !== 0) { | |
| 197 | + this.$message.error(res.msg) | |
| 198 | + return | |
| 199 | + } | |
| 200 | + this.$message.success(this.$t('auditAuthOwnerUndo.submitSuccess')) | |
| 201 | + this.$router.go(-1) | |
| 202 | + } catch (error) { | |
| 203 | + this.$message.error(this.$t('auditAuthOwnerUndo.submitFailed') + error) | |
| 204 | + } | |
| 205 | + }, | |
| 206 | + goBack() { | |
| 207 | + this.$router.go(-1) | |
| 208 | + } | |
| 209 | + } | |
| 210 | +} | |
| 211 | +</script> | |
| 212 | + | |
| 213 | +<style lang="scss" scoped> | |
| 214 | +.audit-auth-owner-undo-container { | |
| 215 | + padding: 20px; | |
| 216 | + | |
| 217 | + .box-card { | |
| 218 | + margin-bottom: 20px; | |
| 219 | + } | |
| 220 | + | |
| 221 | + .form-item { | |
| 222 | + margin-bottom: 18px; | |
| 223 | + | |
| 224 | + .form-label { | |
| 225 | + color: #606266; | |
| 226 | + margin-right: 10px; | |
| 227 | + } | |
| 228 | + | |
| 229 | + .form-content { | |
| 230 | + display: inline-block; | |
| 231 | + } | |
| 232 | + } | |
| 233 | + | |
| 234 | + .border-radius { | |
| 235 | + border-radius: 4px; | |
| 236 | + } | |
| 237 | +} | |
| 238 | +</style> | |
| 0 | 239 | \ No newline at end of file | ... | ... |