Explorar el Código

后台管理企业管理首页界面和列表数据获取

huxz hace 8 años
padre
commit
be367d2b34

+ 98 - 0
sso-manage-console-web/src/components/common/PageBar.vue

@@ -0,0 +1,98 @@
+<template>
+  <!-- pagination start -->
+  <div class="x-mod-footer">
+    <div class="text-center" v-show="total > 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 -->
+</template>
+
+<script>
+import _ from 'lodash'
+
+export default {
+  name: 'PageBar',
+  props: {
+    pageParams: Object,
+    totalPages: Number,
+    total: Number
+  },
+  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)
+      }
+    }
+  },
+  methods: {
+    jumpPage (page) {
+      this.$emit('changePage', page)
+      console.log('changePage', page)
+    }
+  }
+}
+</script>
+
+<style>
+
+</style>

+ 6 - 75
sso-manage-console-web/src/components/user/UserHome.vue

@@ -59,40 +59,7 @@
                     <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 -->
+                <page-bar :pageParams="pageParams" :totalPages="totalPages" :total="totalElements" @changePage="jumpPage"/>
               </div>
               <!-- 列表 end -->
             </div>
@@ -178,11 +145,13 @@
 <script>
 import _ from 'lodash'
 import axios from '@/assets/js/axios'
+import PageBar from '@/components/common/PageBar'
 import UserEditModal from './modal/UserEditModal'
 
 export default {
   name: 'AppHome',
   components: {
+    PageBar,
     UserEditModal
   },
   data () {
@@ -196,49 +165,11 @@ export default {
       showSearch: false,
       userList: [],
       totalPages: 1,
+      totalElements: 0,
       showModal: false,
       selectedUser: {}
     }
   },
-  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()
   },
@@ -256,6 +187,7 @@ export default {
       const success = page => {
         this.userList = page.content || []
         this.totalPages = page.totalPages
+        this.totalElements = page.totalElements
       }
       const error = response => {
         console.log('error', response)
@@ -275,7 +207,6 @@ export default {
       this.pageParams.phone = ''
     },
     jumpPage (page) {
-      console.log('page', page)
       if (!page || page <= 0) {
         this.pageParams.page = 1
       } else if (page > this.totalPages) {
@@ -295,6 +226,6 @@ export default {
 </script>
 
 <!-- Add "scoped" attribute to limit CSS to this component only -->
-<style scoped>
+<style>
 
 </style>

+ 171 - 18
sso-manage-console-web/src/components/userspace/UserSpaceHome.vue

@@ -1,34 +1,187 @@
 <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">
+              <!-- tab切换 start-->
+              <ul class="nav nav-tabs x-nav-tabs x-navbar-right hidden-xs">
+                <li :class="{active: pageParams.validCode === 'UNAPPLY'}"><a @click="switchStatus('UNAPPLY')">未通过</a></li>
+                <li :class="{active: pageParams.validCode === 'ENABLED'}"><a @click="switchStatus('ENABLED')">已激活</a></li>
+                <li :class="{active: pageParams.validCode === 'UNACT'}"><a @click="switchStatus('UNACT')">待激活</a></li>
+                <li :class="{active: pageParams.validCode === 'UNAUDIT'}"><a @click="switchStatus('UNAUDIT')">待审批</a></li>
+
+                <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">
+                    <form>
+                      <div class="form-group">
+                        <label>名称</label> <input type="text" class="form-control" name="name" placeholder="输入企业名称关键字" v-model.trim="pageParams.spaceName">
+                      </div>
+                      <div class="form-group">
+                        <label>营业执照</label> <input type="text" class="form-control" name="businessCode" placeholder="输入营业执照" v-model.trim="pageParams.businessCode">
+                      </div>
+                      <div class="form-group">
+                        <div>
+                          <label>分页设置</label>
+                        </div>
+                        <label class="radio-inline">
+                          <input type="radio" name="pageSize" value="10" v-model.number="pageParams.size"> 10
+                        </label>
+                        <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>
+                      </div>
+                      <button class="btn btn-default btn-block btn-search" type="button" @click="searchSpaceInfo()">搜索</button>
+                    </form>
+                  </div>
+                </h2>
+              </ul>
+              <!-- tab切换 end-->
+              <!-- 列表 start -->
+              <div class="x-mod x-list x-data-list-wrap">
+                <div class="x-mod-body">
+                  <div class="x-data-list" v-if="spaceList.length > 0">
+                    <div class="x-item" v-for="space in spaceList">
+                      <div class="x-icon"><i class="fa fa-user"></i></div>
+                      <p><a class="x-title x-editor-trigger" href="javascript:void(0)"
+                            data-id="4327" v-text="space.spaceName">公司名称</a><span
+                        class="pull-right x-text-muted" v-text="space.registerDate || '2016-11-30'">2016-11-30</span>
+                      </p>
+                      <div class="x-text-muted" v-text="space.businessCode">营业执照</div>
+                    </div>
+                  </div>
+                  <div class="x-empty" style="display: block;" v-if="spaceList.length === 0">
+                    <i class="fa fa-coffee"></i>
+                    <p>这里很干净!</p>
+                  </div>
+                </div>
+                <div class="x-mod-footer">
+                  <page-bar :pageParams="pageParams" :totalPages="totalPages" :total="totalElements" @changePage="jumpPage"/>
+                </div>
+              </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="userSpaceAppCount">
+                <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">8792</span></div><div class="progress"><div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="8792" aria-valuemin="0" aria-valuemax="8792" 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">4871</span></div><div class="progress"><div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="4871" aria-valuemin="0" aria-valuemax="8792" style="width: 55%"><span class="sr-only"></span></div></div></div><div class="x-progress-wrap"><div class="x-progress-title">SAAS服务<span class="pull-right">110</span></div><div class="progress"><div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="110" aria-valuemin="0" aria-valuemax="8792" style="width: 1%"><span class="sr-only"></span></div></div></div><div class="x-progress-wrap"><div class="x-progress-title">优软UAS<span class="pull-right">91</span></div><div class="progress"><div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="91" aria-valuemin="0" aria-valuemax="8792" style="width: 1%"><span class="sr-only"></span></div></div></div><div class="x-progress-wrap"><div class="x-progress-title">优软商城<span class="pull-right">19</span></div><div class="progress"><div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="19" aria-valuemin="0" aria-valuemax="8792" 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'
+import PageBar from '@/components/common/PageBar'
+
 export default {
   name: 'AppHome',
+  components: {
+    PageBar
+  },
   data () {
     return {
-      msg: '企业管理'
+      pageParams: {
+        page: 1,
+        size: 10,
+        spaceName: '',
+        businessCode: '',
+        validCode: 'UNAUDIT'
+      },
+      totalElements: 0,
+      totalPages: 1,
+      showSearch: false,
+      spaceList: []
+    }
+  },
+  created () {
+    this.fetchData()
+  },
+  watch: {
+    '$route': 'fetchData'
+  },
+  methods: {
+    fetchData () {
+      this.loadSpaceList()
+    },
+    loadSpaceList () {
+      const params = _.defaultsDeep({}, this.pageParams)
+      params.page = params.page - 1
+
+      switch (params.validCode) {
+        case 'UNAUDIT':
+          params.validCode = 1
+          break
+        case 'UNACT':
+          params.validCode = 2
+          break
+        case 'ENABLED':
+          params.validCode = 3
+          break
+        case 'UNAPPLY':
+          params.validCode = 4
+          break
+        default:
+          params.validCode = 0
+      }
+
+      const success = page => {
+        console.log(page)
+        this.spaceList = page.content || []
+        this.totalPages = page.totalPages
+        this.totalElements = page.totalElements
+      }
+      const error = response => {
+        console.log('error', response)
+      }
+
+      axios.get('/api/user/space//showSpaceByPagination', { params }).then(success).catch(
+        error)
+    },
+    jumpPage (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.loadSpaceList()
+    },
+    searchSpaceInfo () {
+      this.loadSpaceList()
+
+      this.showSearch = false
+      this.pageParams.spaceName = ''
+      this.pageParams.businessCode = ''
+    },
+    switchStatus (status) {
+      this.pageParams.validCode = status
+
+      this.loadSpaceList()
     }
   }
 }
 </script>
 
 <!-- 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>
+
 </style>

+ 39 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/api/UserSpaceManageController.java

@@ -0,0 +1,39 @@
+package com.uas.sso.sso.backend.api;
+
+import com.uas.sso.entity.Userspace;
+import com.uas.sso.sso.backend.service.UserSpaceService;
+import com.uas.sso.sso.backend.support.ResultBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Pageable;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Api interface implementations for managing user space.
+ *
+ * @author huxz
+ */
+@RestController
+@RequestMapping(path = "/api/user/space")
+public class UserSpaceManageController {
+
+    private final UserSpaceService spaceService;
+
+    @Autowired
+    public UserSpaceManageController(UserSpaceService spaceService) {
+        this.spaceService = spaceService;
+    }
+
+    @RequestMapping(method = RequestMethod.GET, path = "//showSpaceByPagination",
+            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public ResultBean<org.springframework.data.domain.Page<Userspace>> showUserByPagination(Pageable page,
+            Short validCode,
+            @RequestParam(required = false) String spaceName,
+            @RequestParam(required = false) String businessCode) {
+
+        return new ResultBean<>(spaceService.showSpaceByPagination(page, spaceName, businessCode, validCode));
+    }
+}

+ 15 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/UserSpaceService.java

@@ -0,0 +1,15 @@
+package com.uas.sso.sso.backend.service;
+
+import com.uas.sso.entity.Userspace;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * Abstract class for operations of user space when admin operates.
+ *
+ * @author huxz
+ */
+public interface UserSpaceService {
+
+    Page<Userspace> showSpaceByPagination(Pageable page, String spaceName, String businessCode, Short validCode);
+}

+ 64 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/impl/UserSpaceServiceImpl.java

@@ -0,0 +1,64 @@
+package com.uas.sso.sso.backend.service.impl;
+
+import com.uas.sso.dao.UserspaceDao;
+import com.uas.sso.entity.Userspace;
+import com.uas.sso.sso.backend.exceptions.ValidationFailedException;
+import com.uas.sso.sso.backend.service.UserSpaceService;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.persistence.criteria.Predicate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+/**
+ * An implementations of {@code UserSpaceService}.
+ *
+ * @author huxz
+ */
+@Service
+public class UserSpaceServiceImpl implements UserSpaceService {
+
+    private final UserspaceDao userspaceDao;
+
+    @Autowired
+    public UserSpaceServiceImpl(UserspaceDao userspaceDao) {
+        this.userspaceDao = userspaceDao;
+    }
+
+    @Override
+    public Page<Userspace> showSpaceByPagination(Pageable page, String spaceName, String businessCode,
+            Short validCode) {
+        if (validCode == null) {
+            throw new ValidationFailedException("企业信息认证状态必须指定");
+        }
+
+        return userspaceDao.findAll((root, query, builder) -> {
+            List<Predicate> predicates = new ArrayList<>();
+
+            // 根据企业认证状态进行过滤
+            predicates.add(builder.equal(root.get("validCode"), validCode));
+
+            if (!StringUtils.isEmpty(spaceName)) {
+                Predicate predicate = builder.like(root.get("spaceName"), "%" + spaceName + "%");
+                predicates.add(predicate);
+            }
+
+            if (!StringUtils.isEmpty(businessCode)) {
+                Predicate predicate = builder.like(root.get("businessCode"), businessCode + "%");
+                predicates.add(predicate);
+            }
+
+            predicates.removeAll(Collections.singletonList(null));
+
+            Predicate[] array = new Predicate[predicates.size()];
+            predicates.toArray(array);
+            Predicate predicate = builder.and(array);
+            query.where(predicate);
+            return null;
+        }, page);
+    }
+}