|
|
@@ -1,15 +1,281 @@
|
|
|
<template>
|
|
|
- <div class="hello">
|
|
|
- <h1>{{ msg }}123</h1>
|
|
|
+ <div>
|
|
|
+ <div class="x-container">
|
|
|
+ <div class="container">
|
|
|
+ <div class="row">
|
|
|
+ <div class="x-content-wrap clearfix">
|
|
|
+ <div class="col-sm-12 col-md-9 x-content">
|
|
|
+ <div class="nav nav-tabs x-nav-tabs hidden-xs">
|
|
|
+ <h2 class="btn-group">
|
|
|
+ <span class="btn btn-lg x-btn-search" @click="showSearch = !showSearch"><i class="fa fa-search"></i>
|
|
|
+ 用户</span>
|
|
|
+ <div class="dropdown-menu" id="searchlist" style="padding: 15px; width: 240px; display: block;" v-if="showSearch" @click.native="closeSearchDialog($event)">
|
|
|
+ <form>
|
|
|
+ <div class="form-group">
|
|
|
+ <label>姓名</label>
|
|
|
+ <input type="text" class="form-control" name="name" placeholder="输入姓名"
|
|
|
+ v-model="pageParams.name">
|
|
|
+ </div>
|
|
|
+ <div class="form-group">
|
|
|
+ <label>手机号</label>
|
|
|
+ <input type="text" class="form-control" name="mobile" placeholder="输入手机号"
|
|
|
+ v-model="pageParams.phone">
|
|
|
+ </div>
|
|
|
+ <div class="form-group">
|
|
|
+ <div>
|
|
|
+ <label>分页设置</label>
|
|
|
+ </div>
|
|
|
+ <label class="radio-inline">
|
|
|
+ <input type="radio" name="pageSize" value="20" v-model.number="pageParams.size"> 20
|
|
|
+ </label>
|
|
|
+ <label class="radio-inline">
|
|
|
+ <input type="radio" name="pageSize" value="50" v-model.number="pageParams.size"> 50
|
|
|
+ </label>
|
|
|
+ <label class="radio-inline">
|
|
|
+ <input type="radio" name="pageSize" value="100" v-model.number="pageParams.size"> 100
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ <button class="btn btn-default btn-block btn-search" type="button" @click="searchUserInfo()">搜索</button>
|
|
|
+ </form>
|
|
|
+ </div>
|
|
|
+ </h2>
|
|
|
+ </div>
|
|
|
+ <!-- 列表 start -->
|
|
|
+ <div class="x-mod x-list x-list-2x x-data-list-wrap">
|
|
|
+ <div class="x-mod-body">
|
|
|
+ <div class="x-data-list" v-if="userList.length > 0">
|
|
|
+ <div class="x-item" v-for="user in userList">
|
|
|
+ <div class="x-icon"><i class="fa fa-user"></i></div>
|
|
|
+ <p>
|
|
|
+ <a class="x-title x-editor-trigger" href="javascript:void(0)"
|
|
|
+ data-mobile=" 0756-3610188 " data-email="headcon001@headcon.cn"
|
|
|
+ v-text="user.realName || '姓名'">姓名</a>
|
|
|
+ </p>
|
|
|
+ <div class="x-text-muted" v-text="user.mobile">0756-3610188</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="x-empty" v-if="userList.length === 0">
|
|
|
+ <i class="fa fa-coffee"></i>
|
|
|
+ <p>这里很干净!</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- pagination start -->
|
|
|
+ <div class="x-mod-footer">
|
|
|
+ <div class="text-center" v-if="userList.length > 0">
|
|
|
+ <!-- 0 < page <= 8 -->
|
|
|
+ <ul class="pagination pull-right" v-if="showFirstKindPageNumbersBar">
|
|
|
+ <li v-if="pageParams.page > 1"><a @click="jumpPage(pageParams.page - 1)">上一页</a></li>
|
|
|
+ <li :class="{active: 1 === pageParams.page}"><a role="page" @click="jumpPage(1)">1</a></li>
|
|
|
+ <li v-for="num in numbersOnePage" :class="{active: num === pageParams.page}"><a role="page" @click="jumpPage(num)">{{num}}</a></li>
|
|
|
+ <li v-if="totalPages > 8"><a>...</a></li>
|
|
|
+ <li v-if="totalPages > 8"><a v-text="totalPages" @click="jumpPage(totalPages)"></a></li>
|
|
|
+ <li v-if="pageParams.page < totalPages"><a @click="jumpPage(pageParams.page + 1)">下一页</a></li>
|
|
|
+ </ul>
|
|
|
+ <!-- 8 < page <= (totalPages - totalPages % 8) -->
|
|
|
+ <ul class="pagination pull-right" v-if="showSecondKindPageNumbersBar">
|
|
|
+ <li v-if="pageParams.page > 1"><a @click="jumpPage(pageParams.page - 1)">上一页</a></li>
|
|
|
+ <li><a role="page" @click="jumpPage(1)">1</a></li>
|
|
|
+ <li><a>...</a></li>
|
|
|
+ <li v-for="num in numbersOnePage" :class="{active: num === pageParams.page}"><a role="page" @click="jumpPage(num)">{{num}}</a></li>
|
|
|
+ <li><a>...</a></li>
|
|
|
+ <li><a role="page" @click="jumpPage(totalPages)">{{totalPages}}</a></li>
|
|
|
+ <li v-if="pageParams.page < totalPages"><a @click="jumpPage(pageParams.page + 1)">下一页</a></li>
|
|
|
+ </ul>
|
|
|
+ <!-- (totalPages - totalPages % 8) < page <= totalPages -->
|
|
|
+ <ul class="pagination pull-right" v-if="showThirdKindPageNumbersBar">
|
|
|
+ <li v-if="pageParams.page > 1"><a @click="jumpPage(pageParams.page - 1)">上一页</a></li>
|
|
|
+ <li><a role="page" @click="jumpPage(1)">1</a></li>
|
|
|
+ <li><a>...</a></li>
|
|
|
+ <li v-for="num in numbersOnePage" :class="{active: num === pageParams.page}"><a role="page" @click="jumpPage(num)">{{num}}</a></li>
|
|
|
+ <!--<li><a role="page">{{totalPages}}</a></li>-->
|
|
|
+ <li v-if="pageParams.page < totalPages"><a @click="jumpPage(pageParams.page + 1)">下一页</a></li>
|
|
|
+ </ul>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- pagination end -->
|
|
|
+ </div>
|
|
|
+ <!-- 列表 end -->
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 侧边统计栏 start-->
|
|
|
+ <div class="col-sm-12 col-md-3 x-side-bar hidden-xs hidden-sm">
|
|
|
+ <!-- 开通应用统计 -->
|
|
|
+ <div class="x-mod text-justify" id="userAppCount">
|
|
|
+ <div class="x-mod-head">
|
|
|
+ <h4>统计</h4>
|
|
|
+ </div>
|
|
|
+ <div class="x-mod-body">
|
|
|
+ <div class="x-progress-wrap">
|
|
|
+ <div class="x-progress-title">全部<span class="pull-right">12397</span></div>
|
|
|
+ <div class="progress">
|
|
|
+ <div class="progress-bar progress-bar-success" role="progressbar"
|
|
|
+ aria-valuenow="12397" aria-valuemin="0" aria-valuemax="12397"
|
|
|
+ style="width: 100%"><span class="sr-only"></span></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="x-progress-wrap">
|
|
|
+ <div class="x-progress-title">优软平台<span class="pull-right">9287</span></div>
|
|
|
+ <div class="progress">
|
|
|
+ <div class="progress-bar progress-bar-info" role="progressbar"
|
|
|
+ aria-valuenow="9287" aria-valuemin="0" aria-valuemax="12397"
|
|
|
+ style="width: 75%"><span class="sr-only"></span></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="x-progress-wrap">
|
|
|
+ <div class="x-progress-title">优软商城<span class="pull-right">9225</span></div>
|
|
|
+ <div class="progress">
|
|
|
+ <div class="progress-bar progress-bar-info" role="progressbar"
|
|
|
+ aria-valuenow="9225" aria-valuemin="0" aria-valuemax="12397"
|
|
|
+ style="width: 74%"><span class="sr-only"></span></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="x-progress-wrap">
|
|
|
+ <div class="x-progress-title">UU互联<span class="pull-right">8192</span></div>
|
|
|
+ <div class="progress">
|
|
|
+ <div class="progress-bar progress-bar-info" role="progressbar"
|
|
|
+ aria-valuenow="8192" aria-valuemin="0" aria-valuemax="12397"
|
|
|
+ style="width: 66%"><span class="sr-only"></span></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="x-progress-wrap">
|
|
|
+ <div class="x-progress-title">优软UAS<span class="pull-right">2257</span></div>
|
|
|
+ <div class="progress">
|
|
|
+ <div class="progress-bar progress-bar-danger" role="progressbar"
|
|
|
+ aria-valuenow="2257" aria-valuemin="0" aria-valuemax="12397"
|
|
|
+ style="width: 18%"><span class="sr-only"></span></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="x-progress-wrap">
|
|
|
+ <div class="x-progress-title">SAAS服务<span class="pull-right">225</span></div>
|
|
|
+ <div class="progress">
|
|
|
+ <div class="progress-bar progress-bar-danger" role="progressbar"
|
|
|
+ aria-valuenow="225" aria-valuemin="0" aria-valuemax="12397"
|
|
|
+ style="width: 2%"><span class="sr-only"></span></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="x-progress-wrap">
|
|
|
+ <div class="x-progress-title">优软众创<span class="pull-right">2</span></div>
|
|
|
+ <div class="progress">
|
|
|
+ <div class="progress-bar progress-bar-danger" role="progressbar"
|
|
|
+ aria-valuenow="2" aria-valuemin="0" aria-valuemax="12397"
|
|
|
+ style="width: 0%"><span class="sr-only"></span></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import _ from 'lodash'
|
|
|
+import axios from '@/assets/js/axios'
|
|
|
+
|
|
|
export default {
|
|
|
name: 'AppHome',
|
|
|
data () {
|
|
|
return {
|
|
|
- msg: '用户管理'
|
|
|
+ pageParams: {
|
|
|
+ page: 1,
|
|
|
+ size: 20,
|
|
|
+ name: '',
|
|
|
+ phone: ''
|
|
|
+ },
|
|
|
+ showSearch: false,
|
|
|
+ userList: [],
|
|
|
+ totalPages: 1,
|
|
|
+ numberPage: 1
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ lastPageNumber () {
|
|
|
+ return this.totalPages % 8 !== 0 ? this.totalPages - this.totalPages % 8 : this.totalPages - 8
|
|
|
+ },
|
|
|
+ showFirstKindPageNumbersBar () {
|
|
|
+ if (this.totalPages <= 8) {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ return this.pageParams.page > 0 && this.pageParams.page <= 8
|
|
|
+ },
|
|
|
+ showSecondKindPageNumbersBar () {
|
|
|
+ if (this.totalPages <= 16) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ return this.pageParams.page > 8 && this.pageParams.page <= this.lastPageNumber
|
|
|
+ },
|
|
|
+ showThirdKindPageNumbersBar () {
|
|
|
+ if (this.totalPages <= 8) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ return this.pageParams.page > this.lastPageNumber && this.pageParams.page <= this.totalPages
|
|
|
+ },
|
|
|
+ numbersOnePage () {
|
|
|
+ const page = this.pageParams.page - 1
|
|
|
+
|
|
|
+ if (this.pageParams.page > 0 && this.pageParams.page <= 8) {
|
|
|
+ const max = this.totalPages > 8 ? 9 : this.totalPages + 1
|
|
|
+ return _.range(2, max)
|
|
|
+ }
|
|
|
+ if (this.pageParams.page > 8 && this.pageParams.page <= this.lastPageNumber) {
|
|
|
+ const min = page - page % 8
|
|
|
+ return _.range(min + 1, min + 1 + 8)
|
|
|
+ }
|
|
|
+ if (this.pageParams.page > this.lastPageNumber && this.pageParams.page <= this.totalPages) {
|
|
|
+ const min = page - page % 8
|
|
|
+ return _.range(min + 1, this.totalPages + 1)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created () {
|
|
|
+ this.fetchData()
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ '$route': 'fetchData'
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ fetchData () {
|
|
|
+ this.loadUserList()
|
|
|
+ },
|
|
|
+ loadUserList () {
|
|
|
+ const params = _.defaultsDeep({}, this.pageParams)
|
|
|
+ params.page = params.page - 1
|
|
|
+
|
|
|
+ const success = page => {
|
|
|
+ this.userList = page.content || []
|
|
|
+ this.totalPages = page.totalPages
|
|
|
+ }
|
|
|
+ const error = response => {
|
|
|
+ console.log('error', response)
|
|
|
+ }
|
|
|
+
|
|
|
+ axios.get('/api/user//showUserByPagination', { params }).then(success).catch(
|
|
|
+ error)
|
|
|
+ },
|
|
|
+ closeSearchDialog (event) {
|
|
|
+ console.log(event)
|
|
|
+ },
|
|
|
+ searchUserInfo () {
|
|
|
+ this.loadUserList()
|
|
|
+
|
|
|
+ this.showSearch = false
|
|
|
+ this.pageParams.name = ''
|
|
|
+ this.pageParams.phone = ''
|
|
|
+ },
|
|
|
+ jumpPage (page) {
|
|
|
+ console.log('page', page)
|
|
|
+ if (!page || page <= 0) {
|
|
|
+ this.pageParams.page = 1
|
|
|
+ } else if (page > this.totalPages) {
|
|
|
+ this.pageParams.page = this.totalPages
|
|
|
+ } else {
|
|
|
+ this.pageParams.page = page
|
|
|
+ }
|
|
|
+
|
|
|
+ this.loadUserList()
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -17,18 +283,5 @@ export default {
|
|
|
|
|
|
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
|
|
<style scoped>
|
|
|
-h1, h2 {
|
|
|
- font-weight: normal;
|
|
|
-}
|
|
|
-ul {
|
|
|
- list-style-type: none;
|
|
|
- padding: 0;
|
|
|
-}
|
|
|
-li {
|
|
|
- display: inline-block;
|
|
|
- margin: 0 10px;
|
|
|
-}
|
|
|
-a {
|
|
|
- color: #42b983;
|
|
|
-}
|
|
|
+
|
|
|
</style>
|