Square2.0.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  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 v-if="!projectAndTaskArr.length" style="text-align: center;padding: 5px 0"><span>暂无数据</span></el-col>
  44. <el-col :span="8" v-for="(item,index) in projectAndTaskArr" :key="index" style="margin-bottom: 15px">
  45. <SquareCard :card="item"></SquareCard>
  46. </el-col>
  47. </el-row>
  48. <el-pagination
  49. v-if="currTab!=='squareHome'&&projectAndTaskArr&&projectAndTaskArr.length"
  50. :page-size="12"
  51. layout="prev, pager, next"
  52. :total="totalElements"
  53. :current-page = "activePage"
  54. @current-change="handlePageChange"
  55. class="pull-right"
  56. >
  57. </el-pagination>
  58. </el-col>
  59. <el-col :span="6" class="popular-modules" style="padding-left: 15px">
  60. <PopularProject :hotCrowdTestProjectVOs="hotCrowdTestProjectVOs" style="margin-bottom: 15px"/>
  61. <PopularTask :hotCrowdTaskVOs="hotCrowdTaskVOs"/>
  62. </el-col>
  63. </el-row>
  64. </div>
  65. </div>
  66. </template>
  67. <script>
  68. import Http from '@/js/http.js'
  69. import Apis from '@/js/api.js'
  70. import SearchBar from '../../components/commons/SearchBar'
  71. import SquareCard from './SquareCard'
  72. import PopularProject from './PopularProject'
  73. import PopularTask from './PopularTask'
  74. import {storageGet} from '@/js/index.js'
  75. import {notify} from "../../constants";
  76. export default {
  77. name: 'Square2.0',
  78. data(){
  79. return {
  80. user: {},
  81. isLogin: false,
  82. searchType:'project',
  83. searchVal: '',
  84. currTab:'squareHome',
  85. tabArr : [
  86. {label:"项目",name:"project"},
  87. {label:"任务",name:"task"}
  88. ],
  89. menuArr: [
  90. {label:"首页",name:"squareHome"},
  91. {label:"测试项目",name:"project"},
  92. {label:"测试任务",name:"task"}
  93. ],
  94. projectAndTaskArr:[],
  95. type: 0,
  96. hotCrowdTestProjectVOs:[],
  97. hotCrowdTaskVOs:[],
  98. activePage:1,
  99. totalElements:0
  100. }
  101. },
  102. components: {
  103. SearchBar,
  104. SquareCard,
  105. PopularProject,
  106. PopularTask
  107. },
  108. computed:{
  109. },
  110. methods:{
  111. gotoHome(){
  112. this.$router.push('/home');
  113. },
  114. handleTabClick(tab){
  115. console.log("handleTabClick ");
  116. this.currTab = tab.name
  117. this.activePage = 1;
  118. this.searchVal = '';
  119. this.searchData()
  120. },
  121. handleTabClickSearch(){
  122. this.activePage = 1;
  123. this.searchData()
  124. },
  125. searchData(index){
  126. if(this.currTab === 'squareHome'){
  127. this.getData();
  128. }else{
  129. this.searchType = this.currTab;
  130. this.handleSearchData();
  131. }
  132. },
  133. handleTypeClick(tab){
  134. this.searchType = tab.name;
  135. this.activePage = 1;
  136. },
  137. loadData(){
  138. if (storageGet('user') != null) {
  139. this.isLogin = true;
  140. }
  141. // this.projectAndTaskArr = this.$route.params.projectAndTaskArr;
  142. // this.type = this.$route.params.type;
  143. // 从首页项目搜索框跳转过来
  144. this.currTab = this.$route.params.currTab;
  145. if(this.currTab === "project"){
  146. this.searchVal = this.$route.params.searchVal;
  147. this.searchType = this.$route.params.searchType;
  148. this.getHotData();
  149. this.handleTabClickSearch();
  150. }
  151. // // 从热门项目和任务跳转过来
  152. // else if(this.type == 1){
  153. // console.log("type " + this.type);
  154. // this.getHotData();
  155. // }
  156. // 正常点击众测广场跳转过来
  157. else{
  158. this.searchVal = this.$route.params.searchVal;
  159. this.searchType = 'project';
  160. this.currTab = "squareHome"
  161. this.getData();
  162. }
  163. },
  164. getData(){
  165. Http.get('/api/square/list').then((res)=>{
  166. let crowdTestProjectVOs = res.data.crowdTestProjectVOs;
  167. let crowdTestTaskVOS = res.data.crowdTestTaskVOS;
  168. let projectAndTaskArr = crowdTestProjectVOs.concat(crowdTestTaskVOS);
  169. this.hotCrowdTestProjectVOs = res.data.hotCrowdTestProjectVOs;
  170. this.hotCrowdTaskVOs = res.data.hotCrowdTaskVOs;
  171. this.projectAndTaskArr = projectAndTaskArr;
  172. })
  173. },
  174. getHotData(){
  175. Http.get('/api/square/list').then((res)=>{
  176. this.hotCrowdTestProjectVOs = res.data.hotCrowdTestProjectVOs;
  177. this.hotCrowdTaskVOs = res.data.hotCrowdTaskVOs;
  178. })
  179. },
  180. checkLogin() {
  181. this.checkCreateProjectAuth();
  182. },
  183. checkCreateProjectAuth() {
  184. if (!this.isLogin) {
  185. console.log("请登录后访问");
  186. notify('warning', '请登录后访问');
  187. } else if (this.isLogin) {
  188. Http.get(Apis.USER.IS_PART.replace('{userId}', this.user.id)).then((res) => {
  189. this.$router.push('/project/create');
  190. }).catch((error) => {
  191. notify('error', error.data)
  192. })
  193. }
  194. },
  195. handleSearchData(){
  196. let url = '/api/square/search/list';
  197. let params = {
  198. "keyword": this.searchVal,//搜索关键字
  199. "activePage": this.activePage,//指定页面
  200. "columnFilters":
  201. [
  202. {
  203. "type": this.searchType // 查询项目就是project,任务就是task
  204. }
  205. ]
  206. };
  207. Http.post(url,params).then((res)=>{
  208. this.currTab = this.searchType;
  209. this.projectAndTaskArr = res.data.content;
  210. this.totalElements=res.data.totalElements;
  211. })
  212. },
  213. handlePageChange(index){
  214. this.activePage = index;
  215. this.searchData();
  216. },
  217. setUserInfo() {
  218. this.user = storageGet('user') && storageGet('user').userVO;
  219. }
  220. },
  221. mounted() {
  222. this.setUserInfo();
  223. this.loadData();
  224. }
  225. }
  226. </script>
  227. <style lang="less">
  228. @import "../../style/search-nav";
  229. .project-task {
  230. padding: 15px 0;
  231. .el-card {
  232. border: none;
  233. }
  234. }
  235. .popular-modules {
  236. padding: 15px 0 15px 15px;
  237. }
  238. </style>