Commit 0e3df9ef62d561bb32279c8bf5242cb703ced1ec
1 parent
65dba003
优化物业账号下切换小区功能
Showing
5 changed files
with
214 additions
and
13 deletions
src/api/community/communityApi.js
| 1 | -import { setCommunitys,setCurrentCommunity } from "@/utils/vc" | |
| 1 | +import { setCommunitys,setCurrentCommunity,getCurrentCommunity } from "@/utils/vc" | |
| 2 | 2 | import request from '@/utils/request' |
| 3 | 3 | export function _loadCommunityInfo(_param) { |
| 4 | 4 | return new Promise((resolve, reject) => { |
| ... | ... | @@ -51,4 +51,32 @@ export function getDict(tableName,tableColumns) { |
| 51 | 51 | reject(error) |
| 52 | 52 | }) |
| 53 | 53 | }) |
| 54 | +} | |
| 55 | + | |
| 56 | +export function getCommunityId() { | |
| 57 | + return getCurrentCommunity().communityId | |
| 58 | +} | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | +export function getCommunityName() { | |
| 63 | + return getCurrentCommunity().name | |
| 64 | +} | |
| 65 | + | |
| 66 | +export function getMyEnteredCommunitys(_param) { | |
| 67 | + return new Promise((resolve, reject) => { | |
| 68 | + request({ | |
| 69 | + url: '/community.listMyEnteredCommunitys', | |
| 70 | + method: 'get', | |
| 71 | + params: { | |
| 72 | + ..._param | |
| 73 | + } | |
| 74 | + }).then(response => { | |
| 75 | + const res = response.data | |
| 76 | + // 获取验证码成功 | |
| 77 | + resolve(res) | |
| 78 | + }).catch(error => { | |
| 79 | + reject(error) | |
| 80 | + }) | |
| 81 | + }) | |
| 54 | 82 | } |
| 55 | 83 | \ No newline at end of file | ... | ... |
src/components/community/moreCommunity.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <el-dialog title="切换小区" :visible.sync="dialogVisible" width="70%" :close-on-click-modal="false"> | |
| 4 | + <div class="filter-container text-right"> | |
| 5 | + <el-input :placeholder="$t('communityManage.table.name')" v-model="navCommunityInfo.searchCommunityName" | |
| 6 | + style="width: 300px;" class="filter-item"></el-input> | |
| 7 | + <el-button class="filter-item" type="primary" icon="el-icon-search" @click="_queryEnterCommunity"> | |
| 8 | + {{ $t('common.search') }} | |
| 9 | + </el-button> | |
| 10 | + </div> | |
| 11 | + | |
| 12 | + <el-table :data="communitys" border fit highlight-current-row style="width: 100%; margin-top: 20px;"> | |
| 13 | + <el-table-column :label="$t('communityManage.table.communityId')" prop="communityId" | |
| 14 | + align="center"></el-table-column> | |
| 15 | + <el-table-column :label="$t('communityManage.table.name')" prop="name" align="center"></el-table-column> | |
| 16 | + <el-table-column :label="$t('common.operation')" align="center"> | |
| 17 | + <template slot-scope="scope"> | |
| 18 | + <el-button size="mini" @click="_chooseCurrentCommunity(scope.row)"> | |
| 19 | + {{ $t('common.select') }} | |
| 20 | + </el-button> | |
| 21 | + </template> | |
| 22 | + </el-table-column> | |
| 23 | + </el-table> | |
| 24 | + | |
| 25 | + <div class="pagination-container"> | |
| 26 | + <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-size="pageSize" | |
| 27 | + layout="total, prev, pager, next" :total="total"></el-pagination> | |
| 28 | + </div> | |
| 29 | + </el-dialog> | |
| 30 | + </div> | |
| 31 | +</template> | |
| 32 | + | |
| 33 | +<script> | |
| 34 | +import { getMyEnteredCommunitys } from '@/api/community/communityApi' | |
| 35 | +import { setCurrentCommunity } from "@/utils/vc" | |
| 36 | + | |
| 37 | +const DEFAULT_PAGE = 1; | |
| 38 | +const DEFAULT_ROW = 10; | |
| 39 | + | |
| 40 | + | |
| 41 | +export default { | |
| 42 | + name: 'ChooseEnterCommunity', | |
| 43 | + data() { | |
| 44 | + return { | |
| 45 | + dialogVisible: false, | |
| 46 | + currentPage: DEFAULT_PAGE, | |
| 47 | + pageSize: DEFAULT_ROW, | |
| 48 | + total: 0, | |
| 49 | + communitys: [], | |
| 50 | + navCommunityInfo: { | |
| 51 | + _currentCommunity: {}, | |
| 52 | + communityInfos: [], | |
| 53 | + communityInfo: [], | |
| 54 | + errorInfo: '', | |
| 55 | + searchCommunityName: '' | |
| 56 | + } | |
| 57 | + } | |
| 58 | + }, | |
| 59 | + created() { | |
| 60 | + }, | |
| 61 | + methods: { | |
| 62 | + open() { | |
| 63 | + this.dialogVisible = true; | |
| 64 | + this.navCommunityInfo.searchCommunityName = ''; | |
| 65 | + this.listEnterCommunity(DEFAULT_PAGE, DEFAULT_ROW); | |
| 66 | + }, | |
| 67 | + handleCurrentChange(val) { | |
| 68 | + this.currentPage = val; | |
| 69 | + this.listEnterCommunity(val, DEFAULT_ROW); | |
| 70 | + }, | |
| 71 | + async listEnterCommunity(_page, _row) { | |
| 72 | + | |
| 73 | + const { communitys, records } = await getMyEnteredCommunitys({ | |
| 74 | + _uid: '123mlkdinkldldijdhuudjdjkkd', | |
| 75 | + page: _page, | |
| 76 | + row: _row, | |
| 77 | + communityName: this.navCommunityInfo.searchCommunityName | |
| 78 | + }) | |
| 79 | + this.communitys = communitys | |
| 80 | + this.total = records; | |
| 81 | + this.currentPage = _page; | |
| 82 | + | |
| 83 | + }, | |
| 84 | + _chooseCurrentCommunity(_currentCommunity) { | |
| 85 | + setCurrentCommunity(_currentCommunity) | |
| 86 | + | |
| 87 | + this.dialogVisible = false; | |
| 88 | + window.location.href="/" | |
| 89 | + }, | |
| 90 | + _queryEnterCommunity() { | |
| 91 | + this.listEnterCommunity(DEFAULT_PAGE, DEFAULT_ROW); | |
| 92 | + } | |
| 93 | + } | |
| 94 | +} | |
| 95 | +</script> | |
| 96 | + | |
| 97 | +<style scoped> | |
| 98 | +.filter-container { | |
| 99 | + margin-bottom: 20px; | |
| 100 | +} | |
| 101 | + | |
| 102 | +.pagination-container { | |
| 103 | + margin-top: 20px; | |
| 104 | + text-align: center; | |
| 105 | +} | |
| 106 | +</style> | |
| 0 | 107 | \ No newline at end of file | ... | ... |
src/main.js
| ... | ... | @@ -4,6 +4,15 @@ import router from './router' |
| 4 | 4 | import ElementUI from 'element-ui' |
| 5 | 5 | import 'element-ui/lib/theme-chalk/index.css' |
| 6 | 6 | import i18n from './i18n' |
| 7 | +import {getCommunityName,getCommunityId} from '@/api/community/communityApi' | |
| 8 | + | |
| 9 | +Vue.prototype.getCommunityId = function(){ | |
| 10 | + return getCommunityId() | |
| 11 | +} | |
| 12 | +Vue.prototype.getCommunityName = function(){ | |
| 13 | + return getCommunityName() | |
| 14 | +} | |
| 15 | + | |
| 7 | 16 | |
| 8 | 17 | Vue.prototype.hasPrivilege = function(_privaleges) { |
| 9 | 18 | // 确保 _privaleges 是数组,如果不是则转换为数组 | ... | ... |
src/views/layout/LayoutLang.js
| ... | ... | @@ -44,7 +44,8 @@ export const messages = { |
| 44 | 44 | tip: 'Tip', |
| 45 | 45 | fetchError: 'Failed to fetch data', |
| 46 | 46 | deleteError: 'Failed to delete', |
| 47 | - submitError: 'Failed to submit' | |
| 47 | + submitError: 'Failed to submit', | |
| 48 | + moreCommunity:'More Community' | |
| 48 | 49 | } |
| 49 | 50 | }, |
| 50 | 51 | zh: { |
| ... | ... | @@ -92,7 +93,8 @@ export const messages = { |
| 92 | 93 | tip: '提示', |
| 93 | 94 | fetchError: '获取数据失败', |
| 94 | 95 | deleteError: '删除失败', |
| 95 | - submitError: '提交失败' | |
| 96 | + submitError: '提交失败', | |
| 97 | + moreCommunity:'更多小区' | |
| 96 | 98 | } |
| 97 | 99 | } |
| 98 | 100 | } |
| 99 | 101 | \ No newline at end of file | ... | ... |
src/views/layout/layout.vue
| ... | ... | @@ -11,6 +11,16 @@ |
| 11 | 11 | </el-menu> |
| 12 | 12 | </div> |
| 13 | 13 | <div class="header-right"> |
| 14 | + <el-dropdown @command="changeCommunity" v-if="storeInfo.storeTypeCd == '800900000003'" class="margin-right"> | |
| 15 | + <span class="user-info"> | |
| 16 | + {{ curCommunityName }} | |
| 17 | + <i class="el-icon-arrow-down el-icon--right"></i> | |
| 18 | + </span> | |
| 19 | + <el-dropdown-menu slot="dropdown"> | |
| 20 | + <el-dropdown-item :command="c" v-for="(c,index) in communitys" :key="index">{{ c.name }}</el-dropdown-item> | |
| 21 | + <el-dropdown-item command="moreCommunity" class="moreCommunity">{{ $t('layout.moreCommunity') }}</el-dropdown-item> | |
| 22 | + </el-dropdown-menu> | |
| 23 | + </el-dropdown> | |
| 14 | 24 | <el-dropdown @command="handleCommand"> |
| 15 | 25 | <span class="user-info"> |
| 16 | 26 | {{ username }} |
| ... | ... | @@ -59,11 +69,17 @@ |
| 59 | 69 | <router-view /> |
| 60 | 70 | </el-main> |
| 61 | 71 | </el-container> |
| 72 | + <more-community ref="moreCommunity"/> | |
| 62 | 73 | </el-container> |
| 63 | 74 | </template> |
| 64 | 75 | |
| 65 | 76 | <script> |
| 66 | 77 | import { _getMenuCatalog, getMenuTree } from '@/api/user/menuApi' |
| 78 | +import { getStoreInfo } from "@/api/user/indexApi" | |
| 79 | +import { deepCopy,setCurrentCommunity } from "@/utils/vc" | |
| 80 | +import {getCommunityName,_loadCommunityInfo} from '@/api/community/communityApi' | |
| 81 | +import moreCommunity from '@/components/community/moreCommunity.vue' | |
| 82 | + | |
| 67 | 83 | export default { |
| 68 | 84 | name: 'Layout', |
| 69 | 85 | data() { |
| ... | ... | @@ -71,22 +87,50 @@ export default { |
| 71 | 87 | catalogs: [], |
| 72 | 88 | menuTree: [], |
| 73 | 89 | subMenus: [], |
| 74 | - menuWidth:80, | |
| 90 | + menuWidth: 80, | |
| 75 | 91 | menuId: '', |
| 76 | 92 | curMenuName: '', |
| 77 | 93 | activeMenu: '', |
| 78 | 94 | activeSubMenu: 'communityList', |
| 79 | 95 | searchText: '', |
| 80 | 96 | username: '', |
| 97 | + curCommunityName:'', | |
| 98 | + communitys:[], | |
| 99 | + storeInfo: { | |
| 100 | + storeTypeCd: '', | |
| 101 | + storeId: '' | |
| 102 | + }, | |
| 81 | 103 | |
| 82 | 104 | } |
| 83 | 105 | }, |
| 84 | 106 | created() { |
| 85 | 107 | let _user = JSON.parse(localStorage.getItem('user')); |
| 86 | 108 | this.username = _user.name |
| 109 | + this._loadStoreInfo() | |
| 87 | 110 | this.loadCatalogs() |
| 111 | + this.curCommunityName = getCommunityName() | |
| 112 | + this.loadCommunity() | |
| 113 | + }, | |
| 114 | + components:{ | |
| 115 | + moreCommunity | |
| 88 | 116 | }, |
| 89 | 117 | methods: { |
| 118 | + async loadCommunity(){ | |
| 119 | + const {communitys} = await _loadCommunityInfo() | |
| 120 | + this.communitys = communitys | |
| 121 | + }, | |
| 122 | + async _loadStoreInfo() { | |
| 123 | + this.loading = true | |
| 124 | + try { | |
| 125 | + const res = await getStoreInfo() | |
| 126 | + deepCopy(res, this.storeInfo); | |
| 127 | + } catch (error) { | |
| 128 | + console.error('登录失败:', error) | |
| 129 | + } finally { | |
| 130 | + this.loading = false | |
| 131 | + } | |
| 132 | + | |
| 133 | + }, | |
| 90 | 134 | async loadCatalogs() { |
| 91 | 135 | this.loading = true |
| 92 | 136 | try { |
| ... | ... | @@ -95,7 +139,7 @@ export default { |
| 95 | 139 | return; |
| 96 | 140 | } |
| 97 | 141 | this.catalogs = res.data; |
| 98 | - if(this.catalogs && this.catalogs.length>0){ | |
| 142 | + if (this.catalogs && this.catalogs.length > 0) { | |
| 99 | 143 | this._changeMenuCatalog(this.catalogs[0]) |
| 100 | 144 | } |
| 101 | 145 | } catch (error) { |
| ... | ... | @@ -134,6 +178,14 @@ export default { |
| 134 | 178 | localStorage.setItem('language', command) |
| 135 | 179 | } |
| 136 | 180 | }, |
| 181 | + changeCommunity(community){ | |
| 182 | + if(community == 'moreCommunity'){ | |
| 183 | + this.$refs.moreCommunity.open() | |
| 184 | + return | |
| 185 | + } | |
| 186 | + setCurrentCommunity(community); | |
| 187 | + this.curCommunityName = getCommunityName() | |
| 188 | + }, | |
| 137 | 189 | handleMenuSelect(index) { |
| 138 | 190 | // 处理菜单选择 |
| 139 | 191 | this.$router.push({ name: index }) |
| ... | ... | @@ -141,9 +193,9 @@ export default { |
| 141 | 193 | loadMenuTree(_catalog) { |
| 142 | 194 | getMenuTree(_catalog).then(res => { |
| 143 | 195 | let _menus = res.data; |
| 144 | - _menus.sort(function(a, b) { | |
| 145 | - return a.seq - b.seq | |
| 146 | - }); | |
| 196 | + _menus.sort(function (a, b) { | |
| 197 | + return a.seq - b.seq | |
| 198 | + }); | |
| 147 | 199 | this.menuTree = _menus; |
| 148 | 200 | }) |
| 149 | 201 | }, |
| ... | ... | @@ -204,19 +256,18 @@ export default { |
| 204 | 256 | // } else { |
| 205 | 257 | // _href += ("?tab=" + _tabName) |
| 206 | 258 | // } |
| 207 | - if(_href.indexOf('/#/')>-1){ | |
| 208 | - _href = _href.replace('/#/','/') | |
| 259 | + if (_href.indexOf('/#/') > -1) { | |
| 260 | + _href = _href.replace('/#/', '/') | |
| 209 | 261 | } |
| 210 | - console.log(_href,_tabName) | |
| 262 | + console.log(_href, _tabName) | |
| 211 | 263 | |
| 212 | - this.$router.push(_href) | |
| 264 | + this.$router.push(_href) | |
| 213 | 265 | }, |
| 214 | 266 | } |
| 215 | 267 | } |
| 216 | 268 | </script> |
| 217 | 269 | |
| 218 | 270 | <style lang="scss" scoped> |
| 219 | - | |
| 220 | 271 | .app-wrapper { |
| 221 | 272 | height: 100vh; |
| 222 | 273 | } |
| ... | ... | @@ -369,6 +420,11 @@ export default { |
| 369 | 420 | } |
| 370 | 421 | } |
| 371 | 422 | |
| 423 | +.moreCommunity{ | |
| 424 | + font-weight: 600; | |
| 425 | + color: #212529; | |
| 426 | + font-size: 12px; | |
| 427 | +} | |
| 372 | 428 | .vc-menu-main ul li { |
| 373 | 429 | height: 45px; |
| 374 | 430 | line-height: 45px; | ... | ... |