Square2.0.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <template>
  2. <div>
  3. <div class="nav" stype="height:500px">
  4. <!--搜索框-->
  5. <el-row class="search-nav" style="padding: 30px 0 20px 0">
  6. <el-col :span="6">
  7. <div class="pull-left" @click="gotoHome" style="cursor: pointer">
  8. <img class="logo-img" src="../../assets/img/logo-blue.png" />
  9. <span class="logo-title">群智众测平台</span>
  10. </div>
  11. </el-col>
  12. <el-col :span="12">
  13. <div class="search-nav">
  14. <div id="search-block " class="">
  15. <el-tabs v-model="searchType" type="card" @tab-click="handleTypeClick">
  16. <el-tab-pane v-for="item in tabArr" :label="item.label" :name="item.name" :key="item.label"></el-tab-pane>
  17. </el-tabs>
  18. <div class="search-input">
  19. <el-input placeholder="请输入内容" v-model="searchVal" class="input-with-select">
  20. <el-button class="search-button" slot="append" type="primary" @click="handleSearchData">搜索</el-button>
  21. </el-input>
  22. </div>
  23. </div>
  24. </div>
  25. </el-col>
  26. <el-col :span="6">
  27. <el-button type="primary pull-right" class="releaseBtn" @click="checkLogin()">免费发布众测需求</el-button>
  28. </el-col>
  29. </el-row>
  30. <!--TabNav-->
  31. <el-tabs v-model="currTab" @tab-click="handleTabClick" class="square-tab" >
  32. <el-tab-pane v-for="item in menuArr" :name="item.name" :key="item.name">
  33. <span slot="label" style="font-size: 18px">{{item.label}}</span>
  34. </el-tab-pane>
  35. </el-tabs>
  36. <div>
  37. </div>
  38. </div>
  39. <div class="container">
  40. <el-row>
  41. <el-col :span="18" class="project-task">
  42. <el-row :gutter="15" style="margin-bottom: 10px">
  43. <el-col :span="8" v-for="(item,index) in projectAndTaskArr" :key="index" style="margin-bottom: 15px">
  44. <SquareCard :card="item"></SquareCard>
  45. </el-col>
  46. </el-row>
  47. <el-pagination
  48. v-if="currTab!=='squareHome'&&projectAndTaskArr&&projectAndTaskArr.length"
  49. :page-size="12"
  50. layout="prev, pager, next"
  51. :total="totalElements"
  52. :current-page = "activePage"
  53. @current-change="handlePageChange"
  54. class="pull-right"
  55. >
  56. </el-pagination>
  57. </el-col>
  58. <el-col :span="6" class="popular-modules" style="padding-left: 15px">
  59. <PopularProject :hotCrowdTestProjectVOs="hotCrowdTestProjectVOs" style="margin-bottom: 15px"/>
  60. <PopularTask :hotCrowdTaskVOs="hotCrowdTaskVOs"/>
  61. </el-col>
  62. </el-row>
  63. </div>
  64. </div>
  65. </template>
  66. <script>
  67. import Http from '@/js/http.js'
  68. import SearchBar from '../../components/commons/SearchBar'
  69. import SquareCard from './SquareCard'
  70. import PopularProject from './PopularProject'
  71. import PopularTask from './PopularTask'
  72. import {storageGet} from '@/js/index.js'
  73. import {notify} from "../../constants";
  74. import { mapActions ,mapGetters} from 'vuex';
  75. export default {
  76. name: 'Square2.0',
  77. data(){
  78. return {
  79. isLogin: false,
  80. searchType:'project',
  81. searchVal: '',
  82. currTab:'squareHome',
  83. tabArr : [
  84. {label:"项目",name:"project"},
  85. {label:"任务",name:"task"}
  86. ],
  87. menuArr: [
  88. {label:"首页",name:"squareHome"},
  89. {label:"测试项目",name:"project"},
  90. {label:"测试任务",name:"task"}
  91. ],
  92. projectAndTaskArr:[],
  93. type: 0,
  94. hotCrowdTestProjectVOs:[],
  95. hotCrowdTaskVOs:[],
  96. activePage:1,
  97. totalElements:0
  98. }
  99. },
  100. components: {
  101. SearchBar,
  102. SquareCard,
  103. PopularProject,
  104. PopularTask
  105. },
  106. computed:{
  107. },
  108. methods:{
  109. gotoHome(){
  110. this.$router.push('/home');
  111. },
  112. handleTabClick(tab){
  113. console.log("handleTabClick ");
  114. this.currTab = tab.name
  115. this.activePage = 1;
  116. this.searchVal = '';
  117. this.searchData()
  118. },
  119. handleTabClickSearch(){
  120. this.activePage = 1;
  121. this.searchData()
  122. },
  123. searchData(index){
  124. if(this.currTab === 'squareHome'){
  125. this.getData();
  126. }else{
  127. this.searchType = this.currTab;
  128. this.handleSearchData();
  129. }
  130. },
  131. handleTypeClick(tab){
  132. this.searchType = tab.name;
  133. this.activePage = 1;
  134. },
  135. loadData(){
  136. if (storageGet('user') != null) {
  137. this.isLogin = true;
  138. }
  139. // this.projectAndTaskArr = this.$route.params.projectAndTaskArr;
  140. // this.type = this.$route.params.type;
  141. // 从首页项目搜索框跳转过来
  142. this.currTab = this.$route.params.currTab;
  143. if(this.currTab === "project"){
  144. this.searchVal = this.$route.params.searchVal;
  145. this.searchType = this.$route.params.searchType;
  146. this.getHotData();
  147. this.handleTabClickSearch();
  148. }
  149. // // 从热门项目和任务跳转过来
  150. // else if(this.type == 1){
  151. // console.log("type " + this.type);
  152. // this.getHotData();
  153. // }
  154. // 正常点击众测广场跳转过来
  155. else{
  156. this.searchVal = this.$route.params.searchVal;
  157. this.searchType = this.$route.params.searchType;
  158. this.currTab = "squareHome"
  159. this.getData();
  160. }
  161. },
  162. getData(){
  163. Http.get('/api/square/list').then((res)=>{
  164. let crowdTestProjectVOs = res.data.crowdTestProjectVOs;
  165. let crowdTestTaskVOS = res.data.crowdTestTaskVOS;
  166. let projectAndTaskArr = crowdTestProjectVOs.concat(crowdTestTaskVOS);
  167. this.hotCrowdTestProjectVOs = res.data.hotCrowdTestProjectVOs;
  168. this.hotCrowdTaskVOs = res.data.hotCrowdTaskVOs;
  169. this.projectAndTaskArr = projectAndTaskArr;
  170. })
  171. },
  172. getHotData(){
  173. Http.get('/api/square/list').then((res)=>{
  174. this.hotCrowdTestProjectVOs = res.data.hotCrowdTestProjectVOs;
  175. this.hotCrowdTaskVOs = res.data.hotCrowdTaskVOs;
  176. })
  177. },
  178. checkLogin(){
  179. if(!this.isLogin){
  180. console.log("请登录后访问");
  181. notify('warning','请登录后访问');
  182. }else{
  183. console.log("已登录");
  184. this.$router.push('/project/create');
  185. }
  186. },
  187. handleSearchData(){
  188. let url = '/api/square/search/list';
  189. let params = {
  190. "keyword": this.searchVal,//搜索关键字
  191. "activePage": this.activePage,//指定页面
  192. "columnFilters":
  193. [
  194. {
  195. "type": this.searchType // 查询项目就是project,任务就是task
  196. }
  197. ]
  198. };
  199. Http.post(url,params).then((res)=>{
  200. this.currTab = this.searchType;
  201. this.projectAndTaskArr = res.data.content;
  202. this.totalElements=res.data.totalElements;
  203. })
  204. },
  205. handlePageChange(index){
  206. this.activePage = index;
  207. this.searchData();
  208. }
  209. },
  210. mounted() {
  211. this.loadData();
  212. }
  213. }
  214. </script>
  215. <style lang="less">
  216. @import "../../style/search-nav";
  217. .project-task {
  218. padding: 15px 0;
  219. .el-card {
  220. border: none;
  221. }
  222. }
  223. .popular-modules {
  224. padding: 15px 0 15px 15px;
  225. }
  226. </style>