Forráskód Böngészése

Merge branch 'Dev' into 'Test'

Dev

See merge request crowd-2019/crowd-test-service-front!74
郭超 5 éve
szülő
commit
a6f8b8f3d2
59 módosított fájl, 3908 hozzáadás és 113 törlés
  1. 2 1
      config/dev.env.js
  2. 2 1
      config/prod.env.js
  3. 3 2
      config/test.env.js
  4. 59 45
      package-lock.json
  5. BIN
      src/assets/img/bankimg.png
  6. BIN
      src/assets/img/count-security.png
  7. BIN
      src/assets/img/idcard-example1.png
  8. BIN
      src/assets/img/idcard-example2.png
  9. BIN
      src/assets/img/idcard1.png
  10. BIN
      src/assets/img/idcard2.png
  11. BIN
      src/assets/img/phoneBinding.png
  12. BIN
      src/assets/img/phoneUnbinding.png
  13. BIN
      src/assets/img/project-manager.png
  14. BIN
      src/assets/img/selectAuthentication.png
  15. BIN
      src/assets/img/user-info.png
  16. 4 4
      src/components/commons/Footer2.0.vue
  17. 339 7
      src/components/commons/Header2.0.vue
  18. 33 0
      src/components/commons/MidTab.vue
  19. 0 1
      src/components/commons/SearchBar.vue
  20. 103 0
      src/components/commons/TopSearch.vue
  21. 0 1
      src/constants/tabMenu.js
  22. 10 0
      src/js/api.js
  23. 5 1
      src/main.js
  24. 165 0
      src/pages/DetailPage/AgencyDetail.vue
  25. 108 0
      src/pages/DetailPage/ExpertDetail.vue
  26. 110 0
      src/pages/DetailPage/ResourceDetail.vue
  27. 109 0
      src/pages/DetailPage/UserDetail.vue
  28. 10 3
      src/pages/Homepage/BrandCard.vue
  29. 38 29
      src/pages/Homepage/Homepage.vue
  30. 12 4
      src/pages/Homepage/HotAgency.vue
  31. 9 4
      src/pages/Homepage/HotContest.vue
  32. 9 2
      src/pages/Homepage/HotCrowd.vue
  33. 9 2
      src/pages/Homepage/HotUser.vue
  34. 9 2
      src/pages/Homepage/ResourceAndTool.vue
  35. 231 0
      src/pages/HomepageSearch/AgencyList.vue
  36. 194 0
      src/pages/HomepageSearch/AgencyResidentList.vue
  37. 179 0
      src/pages/HomepageSearch/CompetitionList.vue
  38. 172 0
      src/pages/HomepageSearch/CrowdList.vue
  39. 106 0
      src/pages/HomepageSearch/ExpertCard.vue
  40. 183 0
      src/pages/HomepageSearch/ExpertList.vue
  41. 230 0
      src/pages/HomepageSearch/ResourceList.vue
  42. 198 0
      src/pages/HomepageSearch/UserList.vue
  43. 18 1
      src/pages/Square/Square2.0.vue
  44. 19 1
      src/pages/Technology/Technology2.0.vue
  45. 102 0
      src/pages/UserCenter/Authentication.vue
  46. 49 0
      src/pages/UserCenter/BankCard.vue
  47. 132 0
      src/pages/UserCenter/EnterpriseAuth.vue
  48. 74 0
      src/pages/UserCenter/MailBinding.vue
  49. 40 0
      src/pages/UserCenter/Mine.vue
  50. 57 0
      src/pages/UserCenter/ModifyPsw.vue
  51. 86 0
      src/pages/UserCenter/MyBankCard.vue
  52. 88 0
      src/pages/UserCenter/MyQualification.vue
  53. 74 0
      src/pages/UserCenter/PhoneBinding.vue
  54. 51 0
      src/pages/UserCenter/QualificationCard.vue
  55. 99 0
      src/pages/UserCenter/UserCenter.vue
  56. 225 0
      src/pages/UserCenter/individualAuth.vue
  57. 151 0
      src/router/index.js
  58. 1 1
      src/style/main.scss
  59. 1 1
      tool4deploy-test/Dockerfile

+ 2 - 1
config/dev.env.js

@@ -6,5 +6,6 @@ module.exports = merge(prodEnv, {
   NODE_ENV: '"development"',
   NODE_ENV: '"development"',
   ENV_CONFIG: "'dev'",
   ENV_CONFIG: "'dev'",
   API_ROOT: '"//crowd.dev.mooctest.net"',
   API_ROOT: '"//crowd.dev.mooctest.net"',
-  LOGIN_URL: '"http://user.mooctest.net:8081/page/login?redirect=http%3a%2f%2fcrowd.dev.mooctest.net%2f%23%2fmine"'
+  LOGIN_URL: '"http://user.mooctest.net:8081/page/login?redirect=http%3a%2f%2fcrowd.dev.mooctest.net%2f%23%2fhome"',
+  REGISTER_URL: '"http://user.mooctest.net:8081/page/register"'
 })
 })

+ 2 - 1
config/prod.env.js

@@ -3,5 +3,6 @@ module.exports = {
   NODE_ENV: '"production"',
   NODE_ENV: '"production"',
   ENV_CONFIG: "'prod'",
   ENV_CONFIG: "'prod'",
   API_ROOT: '"//www.cofortest.com"',
   API_ROOT: '"//www.cofortest.com"',
-  LOGIN_URL:'"http://user.cofortest.com/page/login?redirect=http%3a%2f%2fwww.cofortest.com%2f%23%2fmine"'
+  LOGIN_URL:'"http://user.cofortest.com/page/login?redirect=http%3a%2f%2fwww.cofortest.com%2f%23%2fmine"',
+  REGISTER_URL: '"http://user.cofortest.com/page/register"'
 }
 }

+ 3 - 2
config/test.env.js

@@ -3,5 +3,6 @@ module.exports = {
   NODE_ENV: '"test"',
   NODE_ENV: '"test"',
   ENV_CONFIG: "'test'",
   ENV_CONFIG: "'test'",
   API_ROOT: '"//crowd.mooctest.net:8083"',
   API_ROOT: '"//crowd.mooctest.net:8083"',
-  LOGIN_URL:'"http://user.mooctest.net:8081/page/login?redirect=http%3a%2f%2fcrowd.mooctest.net:8083%2f%23%2fmine"'
-}
+  LOGIN_URL:'"http://user.mooctest.net:8081/page/login?redirect=http%3a%2f%2fcrowd.mooctest.net:8083%2f%23%2fmine"',
+  REGISTER_URL: '"http://user.mooctest.net:8081/page/register"'
+}

+ 59 - 45
package-lock.json

@@ -168,7 +168,7 @@
     },
     },
     "@types/q": {
     "@types/q": {
       "version": "1.5.2",
       "version": "1.5.2",
-      "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.2.tgz?cache=0&sync_timestamp=1567534086032&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.2.tgz",
       "integrity": "sha1-aQoUdbhPKohP0HzXl8APXzE1bqg=",
       "integrity": "sha1-aQoUdbhPKohP0HzXl8APXzE1bqg=",
       "dev": true
       "dev": true
     },
     },
@@ -550,7 +550,7 @@
     },
     },
     "axios": {
     "axios": {
       "version": "0.19.0",
       "version": "0.19.0",
-      "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.19.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.19.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.19.0.tgz",
       "integrity": "sha1-jgm/89kSLhM/e4EByPvdAO09Krg=",
       "integrity": "sha1-jgm/89kSLhM/e4EByPvdAO09Krg=",
       "requires": {
       "requires": {
         "follow-redirects": "1.5.10",
         "follow-redirects": "1.5.10",
@@ -1893,7 +1893,7 @@
     },
     },
     "caniuse-api": {
     "caniuse-api": {
       "version": "3.0.0",
       "version": "3.0.0",
-      "resolved": "http://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz",
       "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=",
       "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -2117,7 +2117,7 @@
     },
     },
     "coa": {
     "coa": {
       "version": "2.0.2",
       "version": "2.0.2",
-      "resolved": "http://registry.npm.taobao.org/coa/download/coa-2.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/coa/download/coa-2.0.2.tgz",
       "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=",
       "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -2150,7 +2150,7 @@
     },
     },
     "color": {
     "color": {
       "version": "3.1.2",
       "version": "3.1.2",
-      "resolved": "https://registry.npm.taobao.org/color/download/color-3.1.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/color/download/color-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor%2Fdownload%2Fcolor-3.1.2.tgz",
       "integrity": "sha1-aBSOf4XUGtdknF+oyBBvCY0inhA=",
       "integrity": "sha1-aBSOf4XUGtdknF+oyBBvCY0inhA=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -2175,7 +2175,7 @@
     },
     },
     "color-string": {
     "color-string": {
       "version": "1.5.3",
       "version": "1.5.3",
-      "resolved": "http://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz",
       "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=",
       "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -2653,7 +2653,7 @@
       "dependencies": {
       "dependencies": {
         "source-map": {
         "source-map": {
           "version": "0.5.7",
           "version": "0.5.7",
-          "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz",
           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
           "dev": true
           "dev": true
         }
         }
@@ -2679,7 +2679,7 @@
     },
     },
     "cssnano": {
     "cssnano": {
       "version": "4.1.10",
       "version": "4.1.10",
-      "resolved": "http://registry.npm.taobao.org/cssnano/download/cssnano-4.1.10.tgz",
+      "resolved": "https://registry.npm.taobao.org/cssnano/download/cssnano-4.1.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano%2Fdownload%2Fcssnano-4.1.10.tgz",
       "integrity": "sha1-CsQfCxPRPUZUh+ERt3jULaYxuLI=",
       "integrity": "sha1-CsQfCxPRPUZUh+ERt3jULaYxuLI=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -2844,7 +2844,7 @@
     },
     },
     "csso": {
     "csso": {
       "version": "3.5.1",
       "version": "3.5.1",
-      "resolved": "http://registry.npm.taobao.org/csso/download/csso-3.5.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/csso/download/csso-3.5.1.tgz",
       "integrity": "sha1-e564vmFiiXPBsmHhadLwJACOdYs=",
       "integrity": "sha1-e564vmFiiXPBsmHhadLwJACOdYs=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -5344,7 +5344,7 @@
     },
     },
     "html-comment-regex": {
     "html-comment-regex": {
       "version": "1.1.2",
       "version": "1.1.2",
-      "resolved": "http://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz",
       "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=",
       "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=",
       "dev": true
       "dev": true
     },
     },
@@ -5571,7 +5571,7 @@
     },
     },
     "import-fresh": {
     "import-fresh": {
       "version": "2.0.0",
       "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz?cache=0&sync_timestamp=1561888919431&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-2.0.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz",
       "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
       "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -5581,7 +5581,7 @@
       "dependencies": {
       "dependencies": {
         "caller-path": {
         "caller-path": {
           "version": "2.0.0",
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz",
           "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
           "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
           "dev": true,
           "dev": true,
           "requires": {
           "requires": {
@@ -6779,6 +6779,11 @@
         "commander": "*"
         "commander": "*"
       }
       }
     },
     },
+    "moment": {
+      "version": "2.27.0",
+      "resolved": "https://registry.npm.taobao.org/moment/download/moment-2.27.0.tgz?cache=0&sync_timestamp=1592516084857&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmoment%2Fdownload%2Fmoment-2.27.0.tgz",
+      "integrity": "sha1-i/9OPiaiNiIN/j423nVrbrqgEF0="
+    },
     "move-concurrently": {
     "move-concurrently": {
       "version": "1.0.1",
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
       "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
@@ -7078,7 +7083,7 @@
     },
     },
     "normalize-url": {
     "normalize-url": {
       "version": "3.3.0",
       "version": "3.3.0",
-      "resolved": "http://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz",
       "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
       "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
       "dev": true
       "dev": true
     },
     },
@@ -7186,7 +7191,7 @@
     },
     },
     "object.getownpropertydescriptors": {
     "object.getownpropertydescriptors": {
       "version": "2.0.3",
       "version": "2.0.3",
-      "resolved": "http://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.0.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.0.3.tgz",
       "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
       "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -7600,7 +7605,7 @@
     },
     },
     "postcss-calc": {
     "postcss-calc": {
       "version": "7.0.1",
       "version": "7.0.1",
-      "resolved": "http://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.1.tgz",
       "integrity": "sha1-Ntd7qwI7Dsu5eJ2E3LI8SUEUVDY=",
       "integrity": "sha1-Ntd7qwI7Dsu5eJ2E3LI8SUEUVDY=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -7612,7 +7617,7 @@
       "dependencies": {
       "dependencies": {
         "cssesc": {
         "cssesc": {
           "version": "2.0.0",
           "version": "2.0.0",
-          "resolved": "http://registry.npm.taobao.org/cssesc/download/cssesc-2.0.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-2.0.0.tgz",
           "integrity": "sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM=",
           "integrity": "sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM=",
           "dev": true
           "dev": true
         },
         },
@@ -7629,7 +7634,7 @@
         },
         },
         "postcss-selector-parser": {
         "postcss-selector-parser": {
           "version": "5.0.0",
           "version": "5.0.0",
-          "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-5.0.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-5.0.0.tgz",
           "integrity": "sha1-JJBENWaXsztk8aj3yAki3d7nGVw=",
           "integrity": "sha1-JJBENWaXsztk8aj3yAki3d7nGVw=",
           "dev": true,
           "dev": true,
           "requires": {
           "requires": {
@@ -7651,7 +7656,7 @@
     },
     },
     "postcss-colormin": {
     "postcss-colormin": {
       "version": "4.0.3",
       "version": "4.0.3",
-      "resolved": "http://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.3.tgz",
       "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=",
       "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -7709,7 +7714,7 @@
     },
     },
     "postcss-convert-values": {
     "postcss-convert-values": {
       "version": "4.0.1",
       "version": "4.0.1",
-      "resolved": "http://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz",
       "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=",
       "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -7741,7 +7746,7 @@
     },
     },
     "postcss-discard-comments": {
     "postcss-discard-comments": {
       "version": "4.0.2",
       "version": "4.0.2",
-      "resolved": "http://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz",
       "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=",
       "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -7772,7 +7777,7 @@
     },
     },
     "postcss-discard-duplicates": {
     "postcss-discard-duplicates": {
       "version": "4.0.2",
       "version": "4.0.2",
-      "resolved": "http://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz",
       "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=",
       "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -7803,7 +7808,7 @@
     },
     },
     "postcss-discard-empty": {
     "postcss-discard-empty": {
       "version": "4.0.1",
       "version": "4.0.1",
-      "resolved": "http://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz",
       "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=",
       "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -7834,7 +7839,7 @@
     },
     },
     "postcss-discard-overridden": {
     "postcss-discard-overridden": {
       "version": "4.0.1",
       "version": "4.0.1",
-      "resolved": "http://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz",
       "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=",
       "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8019,7 +8024,7 @@
     },
     },
     "postcss-merge-longhand": {
     "postcss-merge-longhand": {
       "version": "4.0.11",
       "version": "4.0.11",
-      "resolved": "http://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz",
       "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=",
       "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8053,7 +8058,7 @@
     },
     },
     "postcss-merge-rules": {
     "postcss-merge-rules": {
       "version": "4.0.3",
       "version": "4.0.3",
-      "resolved": "http://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz",
       "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=",
       "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8101,7 +8106,7 @@
         },
         },
         "postcss-selector-parser": {
         "postcss-selector-parser": {
           "version": "3.1.1",
           "version": "3.1.1",
-          "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz",
           "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
           "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
           "dev": true,
           "dev": true,
           "requires": {
           "requires": {
@@ -8123,7 +8128,7 @@
     },
     },
     "postcss-minify-font-values": {
     "postcss-minify-font-values": {
       "version": "4.0.2",
       "version": "4.0.2",
-      "resolved": "http://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz",
       "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=",
       "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8155,7 +8160,7 @@
     },
     },
     "postcss-minify-gradients": {
     "postcss-minify-gradients": {
       "version": "4.0.2",
       "version": "4.0.2",
-      "resolved": "http://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz",
       "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=",
       "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8189,7 +8194,7 @@
     },
     },
     "postcss-minify-params": {
     "postcss-minify-params": {
       "version": "4.0.2",
       "version": "4.0.2",
-      "resolved": "http://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz",
       "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=",
       "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8248,7 +8253,7 @@
     },
     },
     "postcss-minify-selectors": {
     "postcss-minify-selectors": {
       "version": "4.0.2",
       "version": "4.0.2",
-      "resolved": "http://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz",
       "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=",
       "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8271,7 +8276,7 @@
         },
         },
         "postcss-selector-parser": {
         "postcss-selector-parser": {
           "version": "3.1.1",
           "version": "3.1.1",
-          "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz",
           "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
           "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
           "dev": true,
           "dev": true,
           "requires": {
           "requires": {
@@ -8450,7 +8455,7 @@
     },
     },
     "postcss-normalize-charset": {
     "postcss-normalize-charset": {
       "version": "4.0.1",
       "version": "4.0.1",
-      "resolved": "http://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz",
       "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=",
       "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8704,7 +8709,7 @@
     },
     },
     "postcss-normalize-url": {
     "postcss-normalize-url": {
       "version": "4.0.1",
       "version": "4.0.1",
-      "resolved": "http://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz",
       "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=",
       "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8770,7 +8775,7 @@
     },
     },
     "postcss-ordered-values": {
     "postcss-ordered-values": {
       "version": "4.1.2",
       "version": "4.1.2",
-      "resolved": "http://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz",
       "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=",
       "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8803,7 +8808,7 @@
     },
     },
     "postcss-reduce-initial": {
     "postcss-reduce-initial": {
       "version": "4.0.3",
       "version": "4.0.3",
-      "resolved": "http://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz",
       "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=",
       "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8860,7 +8865,7 @@
     },
     },
     "postcss-reduce-transforms": {
     "postcss-reduce-transforms": {
       "version": "4.0.2",
       "version": "4.0.2",
-      "resolved": "http://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz",
       "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=",
       "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8905,7 +8910,7 @@
     },
     },
     "postcss-svgo": {
     "postcss-svgo": {
       "version": "4.0.2",
       "version": "4.0.2",
-      "resolved": "http://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-4.0.2.tgz",
       "integrity": "sha1-F7mXvHEbMzurFDqu07jT1uPTglg=",
       "integrity": "sha1-F7mXvHEbMzurFDqu07jT1uPTglg=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -8939,7 +8944,7 @@
     },
     },
     "postcss-unique-selectors": {
     "postcss-unique-selectors": {
       "version": "4.0.1",
       "version": "4.0.1",
-      "resolved": "http://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz",
       "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=",
       "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -9135,8 +9140,7 @@
     "querystring": {
     "querystring": {
       "version": "0.2.0",
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
       "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
-      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
-      "dev": true
+      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
     },
     },
     "querystring-es3": {
     "querystring-es3": {
       "version": "0.2.1",
       "version": "0.2.1",
@@ -9825,7 +9829,7 @@
     },
     },
     "sax": {
     "sax": {
       "version": "1.2.4",
       "version": "1.2.4",
-      "resolved": "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz",
+      "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz",
       "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=",
       "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=",
       "dev": true
       "dev": true
     },
     },
@@ -10081,7 +10085,7 @@
       "dependencies": {
       "dependencies": {
         "is-arrayish": {
         "is-arrayish": {
           "version": "0.3.2",
           "version": "0.3.2",
-          "resolved": "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz",
+          "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz",
           "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=",
           "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=",
           "dev": true
           "dev": true
         }
         }
@@ -10644,7 +10648,7 @@
         },
         },
         "postcss-selector-parser": {
         "postcss-selector-parser": {
           "version": "3.1.1",
           "version": "3.1.1",
-          "resolved": "http://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.1.tgz",
           "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
           "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
           "dev": true,
           "dev": true,
           "requires": {
           "requires": {
@@ -10696,7 +10700,7 @@
       "dependencies": {
       "dependencies": {
         "css-select": {
         "css-select": {
           "version": "2.0.2",
           "version": "2.0.2",
-          "resolved": "http://registry.npm.taobao.org/css-select/download/css-select-2.0.2.tgz",
+          "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-2.0.2.tgz",
           "integrity": "sha1-q0OGzsnh9miFVWSxfDcztDsqXt4=",
           "integrity": "sha1-q0OGzsnh9miFVWSxfDcztDsqXt4=",
           "dev": true,
           "dev": true,
           "requires": {
           "requires": {
@@ -11288,7 +11292,7 @@
     },
     },
     "util.promisify": {
     "util.promisify": {
       "version": "1.0.0",
       "version": "1.0.0",
-      "resolved": "http://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.0.tgz",
       "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=",
       "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
@@ -11491,6 +11495,16 @@
       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
       "dev": true
       "dev": true
     },
     },
+    "vue-waterfall": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npm.taobao.org/vue-waterfall/download/vue-waterfall-1.0.6.tgz",
+      "integrity": "sha1-ADJKj5f0Sb9vjN67SXS2DP+snu0="
+    },
+    "vue-waterfall-easy": {
+      "version": "2.4.4",
+      "resolved": "https://registry.npm.taobao.org/vue-waterfall-easy/download/vue-waterfall-easy-2.4.4.tgz",
+      "integrity": "sha1-qZDvP39+uI3txe9A4GTE5okI6Ew="
+    },
     "vuex": {
     "vuex": {
       "version": "3.1.1",
       "version": "3.1.1",
       "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.1.1.tgz",
       "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.1.1.tgz",

BIN
src/assets/img/bankimg.png


BIN
src/assets/img/count-security.png


BIN
src/assets/img/idcard-example1.png


BIN
src/assets/img/idcard-example2.png


BIN
src/assets/img/idcard1.png


BIN
src/assets/img/idcard2.png


BIN
src/assets/img/phoneBinding.png


BIN
src/assets/img/phoneUnbinding.png


BIN
src/assets/img/project-manager.png


BIN
src/assets/img/selectAuthentication.png


BIN
src/assets/img/user-info.png


+ 4 - 4
src/components/commons/Footer2.0.vue

@@ -13,10 +13,10 @@
         </el-col>
         </el-col>
         <el-col :span="19" style="padding-left: 15%">
         <el-col :span="19" style="padding-left: 15%">
           <div class="copyright-block pull-left" style="margin: 12px 0">
           <div class="copyright-block pull-left" style="margin: 12px 0">
-            版权所有 © 信息产品及科技服务集成化众测服务平台研发与应用项目组<br/>
-            京ICP备xxxxxxx号 文保网安备xxxxxxx<br/>
-            电话:86-10-xxxxxxxx 传真:86-10-xxxxxxx<br/>
-            电子邮箱:xxx@xxxxxxx.com
+            版权所有©信息产品及科技服务集成化众测服务平台与应用项目组<br/>
+            <a href="http://www.beian.miit.gov.cn/" style="color: white; font-size: 16px">粤ICP备09019504号</a><br/>
+            电话:020-32068333-223  传真:020-32068111<br/>
+            电子邮箱:topstest@gdsoftpark.com
           </div>
           </div>
           <div class="code-block pull-right">
           <div class="code-block pull-right">
             <img src="../../assets/img/QRcode.png" alt="QRcode" class="mooctest-code" style="width: 110px;height: 110px;display: block">
             <img src="../../assets/img/QRcode.png" alt="QRcode" class="mooctest-code" style="width: 110px;height: 110px;display: block">

+ 339 - 7
src/components/commons/Header2.0.vue

@@ -7,16 +7,78 @@
         </div>
         </div>
         <div class="nav-list pull-right">
         <div class="nav-list pull-right">
           <ul>
           <ul>
-            <li>
-              <a href="#">请登录</a>
+            <li v-if="isLogin">
+              <el-dropdown>
+                <span class="el-dropdown-link">
+                  {{user.userVO.name}}<i class="el-icon-arrow-down el-icon--right"></i>
+                </span>
+                <el-dropdown-menu slot="dropdown">
+                  <el-dropdown-item>
+                    <router-link :to="{ name: 'UserCenter',params:{userId:user.userVO.id}}">
+                      <el-link icon="el-icon-user" :underline="false">
+                        个人中心
+                      </el-link>
+                    </router-link>
+                  </el-dropdown-item>
+                  <el-dropdown-item v-if="rolesPermissions.isSystemAdministrator">
+                    <router-link :to="{ name: 'AuthenticationManage'}">
+                      <el-link icon="el-icon-view" :underline="false">
+                        审核认证信息
+                      </el-link>
+                    </router-link>
+                  </el-dropdown-item>
+                  <el-dropdown-item v-if="user.authStatus.text == '审核通过' &&  !this.user.personalAuthVO && this.user.agencyVO">
+                    <router-link :to="{ name: 'Agency',params:{userId:user.userVO.id}}">
+                      <el-link icon="el-icon-edit" :underline="false">
+                        修改机构信息
+                      </el-link>
+                    </router-link>
+                  </el-dropdown-item>
+                  <el-dropdown-item v-if="user.authStatus.text == '未实名认证' && !rolesPermissions.isSystemAdministrator">
+                    <router-link :to="{ name: 'AuthenticationIndex'}">
+                      <el-link type="info" icon="el-icon-warning-outline" :underline="false">
+                        未实名认证
+                      </el-link>
+                    </router-link>
+                  </el-dropdown-item>
+                  <el-dropdown-item v-if="user.authStatus.text == '认证审核中'" @click.native="handleClickAuthChecking()">
+                    <el-link type="warning" icon="el-icon-loading" :underline="false">
+                      认证审核中
+                    </el-link>
+                  </el-dropdown-item>
+                  <el-dropdown-item @click.native="handleClickAuthPass()" v-if="user.authStatus.text == '审核通过'">
+                    <el-link type="primary" icon="el-icon-check" :underline="false">
+                      已认证
+                    </el-link>
+                  </el-dropdown-item>
+                  <el-dropdown-item @click.native="handleClickAuthReject()" v-if="user.authStatus.text == '审核未通过'">
+                    <el-link type="danger" icon="el-icon-close" :underline="false">
+                      认证失败
+                    </el-link>
+                  </el-dropdown-item>
+                  <el-dropdown-item divided @click.native="userLogout()">登出</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
             </li>
             </li>
-            &nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
-            <li>
-              <a href="#">免费注册</a>
+            <li v-if="!isLogin">
+              <a :href="loginUrl">请登录</a>
             </li>
             </li>
             &nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
             &nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
+            <li v-if="!isLogin">
+              <a :href="loginUrl">免费注册</a>
+            </li>
+              <span v-if="!isLogin">&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;</span>
+            <li v-if="isLogin">
+              <router-link v-if="isLogin" to="/mine">
+                <a class="dropdown-toggle nav-link" data-toggle="dropdown">
+<!--                  <img class="icon" src="@/assets/img/mine_icon.svg">-->
+                  <span>我的众测</span>
+                </a>
+              </router-link>
+            </li>
+            &nbsp;&nbsp;&nbsp;<span v-if="isLogin">&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;</span>
             <li>
             <li>
-              <a href="#">我的众测</a>
+              <a @click="gotoHome" style="cursor: pointer">首页</a>
             </li>
             </li>
             &nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
             &nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
             <li>
             <li>
@@ -33,8 +95,278 @@
 </template>
 </template>
 
 
 <script>
 <script>
+  import {
+      defaultValue,
+      deleteAuthInfo,
+      getCurrentAgencyAuthInfo,
+      getCurrentEnterpriseAuthInfo,
+      getCurrentIndividualAuthenInfo,
+      getCurrentUser,
+      getRolesPermissions,
+      logout,
+      storageGet,
+      storageSave
+  } from '@/js/index'
   export default {
   export default {
-    name: "Header2.0"
+    name: "Header2.0",
+    data(){
+      return {
+        user: {},
+        fullScreenLoading: true,
+        loginUrl: process.env.LOGIN_URL,
+        registerUrl: process.env.REGISTER_URL,
+        authInfo: {},
+        isShowAuthCheckingDialog: false,
+        isShowAuthRejectDialog: false,
+        isShowAuthPassDialog: false,
+        //loading: true,
+        openNavBar: false,
+        defaultValue: defaultValue,
+        userIdentity: '',
+        isLogin: false,
+        rolesPermissions: {}
+      }
+    },
+    watch: {
+        'user.authStatus' (val) {
+            this.user.authStatus = val
+            // console.log('changed')
+            // console.log(this.user.authStatus)
+        },
+        deep: true
+    },
+    methods: {
+        gotoHome(){
+            this.$router.push('/home');
+        },
+        openNavBarFunc () {
+            this.openNavBar = !this.openNavBar
+        },
+        setUserInfo () {
+            if (storageGet('user') == null) {
+                storageSave('rolesPermissions', {
+                    'isRegionManager': false,
+                    'isIndividualUser': false,
+                    'isEnterpriseUser': false,
+                    'isAgency': false,
+                    'isSystemAdministrator': false
+                });
+                console.log('本地没有用户信息,开始加载用户信息')
+                getCurrentUser().then((res) => {
+                    // console.log(res)
+                    storageSave('user', res)
+                    this.user = res
+                    this.rolesPermissions = getRolesPermissions(res.roleList)
+                    storageSave('rolesPermissions', getRolesPermissions(res.roleList))
+                    console.log('用户信息加载成功')
+                    this.isLogin = true
+                    this.fullScreenLoading = false
+                }).catch((error) => {
+                    console.log('用户信息加载失败')
+                    this.fullScreenLoading = false
+                })
+            } else {
+                this.user = storageGet('user')
+                this.fullScreenLoading = false
+                this.isLogin = true
+            }
+        },
+        getCurrentUserSuccess (res) {
+            // console.log(res)
+            storageSave('user', res)
+            this.user = res
+            this.rolesPermissions = getRolesPermissions(res.roleList)
+            storageSave('rolesPermissions', getRolesPermissions(res.roleList))
+            console.log('用户信息加载成功')
+            this.isLogin = true
+            this.fullScreenLoading = false
+        },
+        getCurrentUserFail (error) {
+            console.log('用户信息加载失败')
+            this.fullScreenLoading = false
+        },
+        userLogout () {
+            this.isLogin = false
+            logout().then((res) => {
+                // location.reload();
+                this.$router.push('/home')
+            })
+
+        },
+        showLoading () {
+            this.fullScreenLoading = true
+        },
+        hideLoading () {
+            this.fullScreenLoading = false
+        },
+        handleClickAuthReject () {
+            if (this.user.userVO.authType == 'agency') {
+                this.$router.push({
+                    name: 'AgencyAuthentication',
+                    params: {userId: this.user.userVO.id}
+                })
+            }
+            if (this.user.userVO.authType == 'enterprise') {
+                this.$router.push({
+                    name: 'EnterpriseAuthentication',
+                    params: {userId: this.user.userVO.id}
+                })
+            }
+            if (this.user.userVO.authType == 'personal') {
+                this.$router.push({
+                    name: 'IndividualAuthentication',
+                    params: {userId: this.user.userVO.id}
+                })
+            }
+
+            //this.getAuthInfo()
+        },
+        handleClickAuthPass () {
+            if (this.user.personalAuthVO) {
+                this.$router.push({
+                    name: 'IndividualAuthentication',
+                    params: {userId: this.user.userVO.id}
+                })
+            }else if (this.user.agencyVO) {
+                this.$router.push({
+                    name: 'AgencyAuthentication',
+                    params: {userId: this.user.userVO.id}
+                })
+            }
+            else if (this.user.enterpriseAuthVO) {
+                this.$router.push({
+                    name: 'EnterpriseAuthentication',
+                    params: {userId: this.user.userVO.id}
+                })
+            }
+
+            //this.getAuthInfo()
+        },
+        handleClickAuthChecking () {
+            //this.getAuthInfo()
+            if (this.user.userVO.authType == 'agency') {
+                this.$router.push({
+                    name: 'AgencyAuthentication',
+                    params: {userId: this.user.userVO.id}
+                })
+            }
+            if (this.user.userVO.authType == 'enterprise') {
+                this.$router.push({
+                    name: 'EnterpriseAuthentication',
+                    params: {userId: this.user.userVO.id}
+                })
+            }
+            if (this.user.userVO.authType == 'personal') {
+                this.$router.push({
+                    name: 'IndividualAuthentication',
+                    params: {userId: this.user.userVO.id}
+                })
+            }
+        },
+        showAuthRejectDialog () {
+            this.isShowAuthRejectDialog = true
+        },
+        showAuthPassDialog () {
+            this.isShowAuthPassDialog = true
+        },
+        showAuthCheckingDialog () {
+            this.isShowAuthCheckingDialog = true
+        },
+        hideAuthRejectDialog () {
+            this.isShowAuthRejectDialog = false
+        },
+        hideAuthPassDialog () {
+            this.isShowAuthPassDialog = false
+        },
+        hideAuthCheckingDialog () {
+            this.isShowAuthCheckingDialog = false
+        },
+        deleteOldAuthInfo () {
+            this.hideAuthCheckingDialog()
+            this.hideAuthRejectDialog()
+            this.hideAuthPassDialog()
+            this.showLoading()
+            deleteAuthInfo().then((res) => {
+                this.hideLoading()
+                notify('success', '成功删除认证信息')
+            }).catch((error) => {
+                this.hideLoading()
+                notify('error', '删除认证信息失败:' + error.data)
+            })
+        },
+        getAuthInfo () {
+            this.showLoading()
+            if (this.user.userVO.authType == 'agency') {
+                getCurrentAgencyAuthInfo(this.user.userVO.id, this.getCurrentAgencyAuthInfoSuccess, this.getCurrentAgencyAuthInfoFail)
+            }
+            if (this.user.userVO.authType == 'personal') {
+                getCurrentIndividualAuthenInfo(this.user.userVO.id, this.getCurrentIndividualAuthenInfoSuccess, this.getCurrentIndividualAuthenInfoFail)
+            }
+            if (this.user.userVO.authType == 'enterprise') {
+                getCurrentEnterpriseAuthInfo(this.user.userVO.id, this.getCurrentEnterpriseAuthInfoSuccess, this.getCurrentEnterpriseAuthInfoFail)
+            }
+        },
+        getCurrentAgencyAuthInfoSuccess () {
+            this.hideLoading()
+        },
+        getCurrentAgencyAuthInfoFail () {
+            this.hideLoading()
+        },
+        getCurrentIndividualAuthenInfoSuccess () {
+            this.hideLoading()
+        },
+        getCurrentIndividualAuthenInfoFail () {
+            this.hideLoading()
+        },
+        getCurrentEnterpriseAuthInfoSuccess () {
+            this.hideLoading()
+        },
+        getCurrentEnterpriseAuthInfoFail () {
+            this.hideLoading()
+        },
+        handleUpdateAuthInfo () {
+            this.hideAuthPassDialog()
+            this.hideAuthRejectDialog()
+            this.hideAuthCheckingDialog()
+            if (this.user.userVO.authType == 'personal') {
+                this.$router.push({
+                    name: 'IndividualAuthentication',
+                    params: {
+                        userId: this.authInfo.userId
+                    }
+                })
+            }
+            if (this.authInfo.type == 'enterprise') {
+                this.$router.push({
+                    name: 'EnterpriseAuthentication',
+                    params: {
+                        userId: this.authInfo.userId
+                    }
+                })
+            }
+            if (this.authInfo.type == 'agency') {
+                this.$router.push({
+                    name: 'AgencyAuthentication',
+                    params: {
+                        userId: this.authInfo.userId
+                    }
+                })
+            }
+        }
+    },
+    created () {
+        var self = this
+        this.$root.$on('user', function (val) {
+            self.user = val
+        })
+    },
+    beforeMount () {
+        this.setUserInfo()
+        // if (storageGet('user' != null)){
+        //   this.isLogin = true
+        // }
+        console.log(this.isLogin)
+    }
   }
   }
 </script>
 </script>
 
 

+ 33 - 0
src/components/commons/MidTab.vue

@@ -0,0 +1,33 @@
+<template>
+  <div class="nav" stype="height:50px">
+    <!--TabNav-->
+    <el-tabs :value="currTab" @tab-click="handleTabClick" class="square-tab" v-if="menuArr">
+      <el-tab-pane v-if="!menuArr.menuArr1" v-for="item in menuArr" :name="item.name" :key="item.name" class="tab-menu1">
+        <span slot="label" style="font-size: 18px">{{item.label}}</span>
+      </el-tab-pane>
+      <el-tab-pane v-if="menuArr.menuArr1" v-for="item in menuArr.menuArr1" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
+<!--      <el-tab-pane v-if="menuArr.menuArr1" name="name"  class="tab-menu1" label="|">|</el-tab-pane>-->
+      <el-tab-pane v-if="menuArr.menuArr1" v-for="item in menuArr.menuArr2" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
+      <el-tab-pane v-if="menuArr.menuArr1" v-for="item in menuArr.menuArr3" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
+    </el-tabs>
+    <div>
+    </div>
+  </div>
+</template>
+
+
+<script>
+  import { mapGetters , mapActions} from 'vuex'
+  import  commonData  from '../../constants/tabMenu'
+  import Http from '@/js/http.js'
+  export default {
+    name: 'MidTab',
+    props: ['menuArr']
+  }
+
+</script>
+
+
+<style>
+
+</style>

+ 0 - 1
src/components/commons/SearchBar.vue

@@ -32,7 +32,6 @@
         <span slot="label" style="font-size: 18px">{{item.label}}</span>
         <span slot="label" style="font-size: 18px">{{item.label}}</span>
       </el-tab-pane>
       </el-tab-pane>
       <el-tab-pane v-if="menuArr.menuArr1" v-for="item in menuArr.menuArr1" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
       <el-tab-pane v-if="menuArr.menuArr1" v-for="item in menuArr.menuArr1" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
-<!--      <el-tab-pane v-if="menuArr.menuArr1" name="name"  class="tab-menu1" label="|">|</el-tab-pane>-->
       <el-tab-pane v-if="menuArr.menuArr1" v-for="item in menuArr.menuArr2" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
       <el-tab-pane v-if="menuArr.menuArr1" v-for="item in menuArr.menuArr2" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
       <el-tab-pane v-if="menuArr.menuArr1" v-for="item in menuArr.menuArr3" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
       <el-tab-pane v-if="menuArr.menuArr1" v-for="item in menuArr.menuArr3" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
     </el-tabs>
     </el-tabs>

+ 103 - 0
src/components/commons/TopSearch.vue

@@ -0,0 +1,103 @@
+<template>
+  <div class="nav" stype="height:500px">
+    <!--搜索框-->
+    <el-row class="search-nav" style="padding: 30px 0 20px 0">
+      <el-col :span="6">
+        <div class="pull-left" @click="gotoHome" style="cursor: pointer">
+          <img class="logo-img" src="../../assets/img/logo-blue.png"/>
+          <span class="logo-title">群智众测平台</span>
+        </div>
+      </el-col>
+      <el-col :span="12">
+        <div class="search-nav">
+          <div id="search-block ">
+            <el-tabs v-model="searchType" type="card" @tab-click="handleTypeClick">
+              <el-tab-pane v-for="item in searchTypeArr" v-if="item.value!=='all'" :label="item.name" :name="item.value"
+                           :key="item.value"></el-tab-pane>
+            </el-tabs>
+            <div class="search-input">
+              <el-input placeholder="请输入内容" v-model="searchVal" class="input-with-select">
+                <el-button class="search-button" slot="append" type="primary" @click="handleSearchData">搜索</el-button>
+              </el-input>
+            </div>
+          </div>
+        </div>
+      </el-col>
+      <el-col :span="6">
+        <el-button type="primary pull-right" class="releaseBtn" @click="checkLogin()">免费发布众测需求</el-button>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+
+<script>
+    import {mapGetters, mapActions} from 'vuex'
+    import commonData from '../../constants/tabMenu'
+    import Http from '@/js/http.js'
+    import {storageGet} from '@/js/index.js'
+    import {notify} from "../../constants";
+
+    export default {
+        name: 'TopSearch',
+        props: ['searchVal','searchType','searchTypeArr'],
+        data() {
+            return {
+                isLogin: false,
+                resultList:[],
+            }
+        },
+
+        methods: {
+            loadData(){
+                if (storageGet('user') != null) {
+                    this.isLogin = true;
+                }
+            },
+            checkLogin(){
+                if(!this.isLogin){
+                    console.log("请登录后访问");
+                    notify('warning','请登录后访问');
+                }else{
+                    console.log("已登录");
+                    this.$router.push('/project/create');
+                }
+            },
+            handleSearchData() {
+                console.log(this.searchType);
+                let url = '/api/common/index/page';
+                let params = {
+                    "keyword": this.searchVal,
+                    "activePage": 1,
+                    "columnFilters": [
+                        {
+                            "field": "type",
+                            "type": "enums",
+                            "enums": this.searchTypeArr,
+                            "value": this.searchType
+                        }
+                    ]
+                }
+                Http.post(url, params).then((res) => {
+                    console.log(res.data.expertPage.content);
+                    resultList = res.data.expertPage.content;
+                })
+            },
+            gotoHome() {
+                this.$router.push('/home');
+            },
+            handleTypeClick(tab){
+                this.searchType = tab.name
+            },
+        },
+        mounted() {
+            this.loadData();
+        }
+    }
+
+</script>
+
+
+<style>
+
+</style>

+ 0 - 1
src/constants/tabMenu.js

@@ -23,7 +23,6 @@ const homeTabArr = {
   menuArr3:[
   menuArr3:[
     {label: "找机构", name: "findInstitution"},
     {label: "找机构", name: "findInstitution"},
     {label: "找专家", name: "finfExpert"},
     {label: "找专家", name: "finfExpert"},
-    {label: "更多", name: "findMore"},
   ],
   ],
 };
 };
 
 

+ 10 - 0
src/js/api.js

@@ -64,6 +64,7 @@ export default {
     REJECT_AGENCY_AUTH:'/api/user/{userId}/agency/status/reject',
     REJECT_AGENCY_AUTH:'/api/user/{userId}/agency/status/reject',
     REJECT_ENTERPRISE_AUTH:'/api/user/{userId}/enterpriseAuth/status/reject',
     REJECT_ENTERPRISE_AUTH:'/api/user/{userId}/enterpriseAuth/status/reject',
     REJECT_INDIVIDUAL_AUTH:'/api/user/{userId}/personalAuth/status/reject',
     REJECT_INDIVIDUAL_AUTH:'/api/user/{userId}/personalAuth/status/reject',
+    GET_DETAIL: "/api/user/detail/{userId}",
   },
   },
   PAGE: {
   PAGE: {
     HOME_PAGE: '/api/common/index/',
     HOME_PAGE: '/api/common/index/',
@@ -73,6 +74,15 @@ export default {
     PROJECT_DETAIL_PAGE: '/api/project/{projectId}/',
     PROJECT_DETAIL_PAGE: '/api/project/{projectId}/',
     REPORT_DETAIL_PAGE: '/api/page/reportDetail/{reportId}/',
     REPORT_DETAIL_PAGE: '/api/page/reportDetail/{reportId}/',
   },
   },
+  AGENCY: {
+    GET_DETAIL: '/api/agency/{agencyId}',
+  },
+  RESOURCE: {
+    GET_DETAIL: '/api/common/index/resource/{code}',
+  },
+  EXPERT: {
+    GET_DETAIL: '/api/common/index/expert/{id}',
+  },
   GENERAL: {
   GENERAL: {
     GET_ALL_INSTITUTIONS: '/api/regionalManager',
     GET_ALL_INSTITUTIONS: '/api/regionalManager',
     GET_ALL_AGENCIES: '/api/agency/list',
     GET_ALL_AGENCIES: '/api/agency/list',

+ 5 - 1
src/main.js

@@ -60,7 +60,9 @@ import {
   TimeSelect,
   TimeSelect,
   Tooltip,
   Tooltip,
   Upload,
   Upload,
-  Progress
+  Progress,
+  Step,
+  Steps,
 } from 'element-ui'
 } from 'element-ui'
 Vue.prototype.$moment = moment
 Vue.prototype.$moment = moment
 function getCurrentUserSuccess(res){
 function getCurrentUserSuccess(res){
@@ -185,6 +187,8 @@ Vue.use(Image)
 Vue.use(Badge)
 Vue.use(Badge)
 Vue.use(Popover)
 Vue.use(Popover)
 Vue.use(Progress)
 Vue.use(Progress)
+Vue.use(Steps)
+Vue.use(Step)
 
 
 Vue.prototype.$msgbox = MessageBox
 Vue.prototype.$msgbox = MessageBox
 Vue.prototype.$alert = MessageBox.alert
 Vue.prototype.$alert = MessageBox.alert

+ 165 - 0
src/pages/DetailPage/AgencyDetail.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="create-container">
+    <div class="create-body" v-loading="loading" style="width: 100%">
+      <div class="title" v-if="this.type == 0">测评机构信息</div>
+      <div class="title" v-else>入驻品牌机构信息</div>
+      <el-form :model="authentication" :rules="rules" ref="authentication" label-width="12%" class="demo-report">
+        <el-form-item prop="agencyPhoto" label="机构logo">
+          <span >
+          <el-image
+            style="width: 100px;"
+            :src="authentication.agencyPhoto"
+            fit="scale-down"></el-image>
+        </span>
+        </el-form-item>
+        <el-form-item label="机构名称" prop="evaluationAgencyName">
+          <span >{{authentication.evaluationAgencyName}}</span>
+        </el-form-item>
+        <el-form-item  label="认证状态" prop="name">
+          <el-tag :type="authentication.authStatus.style">{{authentication.authStatus.text}}</el-tag>
+        </el-form-item>
+        <el-form-item v-if="!isModifyMode && authentication.authStatus.text == '认证失败'" label="失败原因" prop="name">
+          <el-link v-if="authentication.explain!=null&&authentication.explain!=''" type="danger" disabled>
+            {{authentication.explain}}
+          </el-link>
+          <el-link v-if="authentication.explain==null || authentication.explain==''" type="danger" disabled>管理员未填写
+          </el-link>
+        </el-form-item>
+        <el-form-item label="地址" prop="address">
+          <span >{{authentication.address}}</span>
+        </el-form-item>
+        <el-form-item label="测评机构能力" prop="evaluationAgencyAbilityList">
+          <span  v-for="(item,index) in authentication.evaluationAgencyAbilityList"
+                :key="index"><span class="badge">{{item}}</span></span>
+        </el-form-item>
+        <el-form-item label="测评机构资源" prop="evaluationAgencyResourceList">
+          <span  v-for="item in authentication.evaluationAgencyResourceList" :key="item.id">
+            资源类型:{{item.type}};&nbsp;&nbsp;资源名称:{{item.name}};&nbsp;&nbsp;资源总量:{{item.totalNum}};&nbsp;&nbsp;可用资源:{{item.availableNum}}<br/>
+          </span>
+        </el-form-item>
+
+        <el-form-item label="接包数量" prop="taskCount" v-if="this.type == 0">
+          <span >{{authentication.taskCount}}</span>
+        </el-form-item>
+        <el-form-item >
+          <div class="btn btn-medium btn-info" @click="back()">返回</div>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+<script>
+    import Http from '@/js/http.js'
+    import Apis from '@/js/api.js'
+    import {notify} from '@/constants/index'
+    import {getAllReportTypes,
+        defaultValue,
+        storageGet,
+        getCurrentAgencyAuthInfo,
+        getAllAgencyResourceTypes,
+        getAllServiceTypes,} from '@/js/index'
+
+    export default {
+        name: 'AgencyDetail',
+        components: {},
+        data() {
+            return {
+                user: {},
+                loading: false,
+                type: 0,
+                userId: 0,
+                resourceTypes: [],
+                serviceTypes: [],
+                authentication: {
+                    mobile: '',
+                    evaluationAgencyName: '',
+                    bankAccount: '',
+                    address: '',
+                    evaluationAgencyAbilityList: [],
+                    evaluationAgencyResourceList: [],
+                    authStatus: {},
+                    agencyPhoto: defaultValue.image,
+                    explain: '',
+                    taskCount: 0
+                },
+            }
+        },
+        mounted() {
+            this.$nextTick(() => {
+                this.init()
+            })
+        },
+        methods: {
+            init() {
+                this.userId = this.$route.params.id
+                this.type = this.$route.params.type
+                this.setServiceTypes()
+                this.setResourceTypes()
+                this.getAuthInfo ()
+            },
+            back() {
+                this.$router.push({
+                    name: 'AgencyList'
+                })
+            },
+            //加载数据
+            getAuthInfo () {
+                this.showLoading()
+                getCurrentAgencyAuthInfo(this.userId, this.getAuthInfoSuccess, this.getAuthInfoFail)
+            },
+            getAuthInfoSuccess (res) {
+                this.hideLoading()
+                this.authentication.agencyPhoto = res.agencyPhoto == null ? defaultValue.image : res.agencyPhoto
+                this.authentication.evaluationAgencyName = res.evaluationAgencyName == null ? '暂未填写' : res.evaluationAgencyName
+                this.authentication.evaluationAgencyAbilityList = res.evaluationAgencyAbilityList == null ? [] : res.evaluationAgencyAbilityList
+                this.authentication.evaluationAgencyResourceList = res.evaluationAgencyResourceList == null ? [] : res.evaluationAgencyResourceList
+                this.authentication.bankAccount = res.bankAccount == null ? '暂未填写' : res.bankAccount
+                this.authentication.address = res.address == null ? '暂未填写' : res.address
+                this.authentication.authStatus = res.authStatus
+                this.authentication.explain = res.explain
+                this.authentication.taskCount = res.taskCount
+            },
+            getAuthInfoFail (error) {
+                this.hideLoading()
+                notify('error', '加载认证信息失败:' + error.data)
+            },
+            //设置测试类型
+            setServiceTypes () {
+                getAllServiceTypes().then((res) => {
+                    this.serviceTypes = res
+                }).catch((error) => {
+                    notify('error', '机构能力加载失败')
+                })
+            },
+            //设置机构资源类型
+            setResourceTypes () {
+                this.resourceTypes = getAllAgencyResourceTypes()
+            },
+            setUserInfo() {
+                this.user = storageGet('user')
+            },
+            showLoading() {
+                this.loading = true
+            },
+            hideLoading() {
+                this.loading = false
+            }
+        },
+        watch: {
+            agencyType(val) {
+                this.agencyType = val
+            }
+        }
+    }
+</script>
+
+<style>
+  .demo {
+    font-size: 32px;
+  }
+
+  .el-form-item {
+    max-height: 120px !important;
+    overflow: auto;
+  }
+</style>

+ 108 - 0
src/pages/DetailPage/ExpertDetail.vue

@@ -0,0 +1,108 @@
+<template>
+  <div class="create-container">
+    <div class="create-body" v-loading="loading">
+      <el-form :model="expert" label-width="12%" class="demo">
+        <el-form-item label="用户名称" prop="name">
+          <span>{{expert.name}}</span>
+        </el-form-item>
+        <el-form-item label="用户图标" prop="photo">
+          <!--          <span  class="badge">{{expert.photo}}</span>-->
+          <img :src="expert.photo" style="width: 50px; height: 50px;"/>
+        </el-form-item>
+<!--        <el-form-item label="性别" prop="count">-->
+<!--          <span>{{expert.gender}}</span>-->
+<!--        </el-form-item>-->
+        <el-form-item label="简介" prop="address">
+          <span class="badge">{{expert.introduction}}</span>
+        </el-form-item>
+<!--        <el-form-item label="接包次数" prop="count">-->
+<!--          <span>{{expert.taskCount}}</span>-->
+<!--        </el-form-item>-->
+        <el-form-item>
+          <div class="btn btn-medium" @click="back()">返回</div>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<script>
+    import Http from '@/js/http.js'
+    import Apis from '@/js/api.js'
+    import {notify} from '@/constants/index'
+    import {getAllReportTypes, storageGet} from '@/js/index'
+
+    export default {
+        name: 'ExpertDetail',
+        components: {},
+        data() {
+            return {
+                expert: {},
+                loading: false,
+                id: 0,
+                expert: {
+                    name: '',
+                    photo: '',
+                    introduction: '',
+                    // gender: '',
+                },
+            }
+        },
+        mounted() {
+            this.$nextTick(() => {
+                this.init()
+            })
+        },
+        methods: {
+            init() {
+                this.id = this.$route.params.id
+                this.loadData()
+            },
+            back() {
+                this.$router.push({
+                    name: 'ExpertList'
+                })
+            },
+            loadData() {
+                this.showLoading()
+                Http.get(Apis.EXPERT.GET_DETAIL.replace('{id}', this.id)).then((res) => {
+                    console.log(res)
+                    this.expert.name = res.data.name
+                    this.expert.photo = res.data.photo
+                    // this.expert.gender = res.data.gender
+                    this.expert.introduction = res.data.introduction
+                    // this.expert.address = res.data.address
+                    this.hideLoading()
+                }).catch((error) => {
+                    this.hideLoading()
+                    notify('error', '打开详情失败:' + error.data)
+                })
+            },
+            setUserInfo() {
+                this.expert = storageGet('expert')
+            },
+            showLoading() {
+                this.loading = true
+            },
+            hideLoading() {
+                this.loading = false
+            }
+        },
+        watch: {
+            expertType(val) {
+                this.expertType = val
+            }
+        }
+    }
+</script>
+
+<style>
+  .demo {
+    font-size: 32px;
+  }
+
+  .el-form-item {
+    max-height: 120px !important;
+    overflow: auto;
+  }
+</style>

+ 110 - 0
src/pages/DetailPage/ResourceDetail.vue

@@ -0,0 +1,110 @@
+<template>
+  <div class="create-container">
+    <div class="create-body" v-loading="loading">
+      <el-form :model="resource" label-width="12%" class="demo">
+        <el-form-item label="资源名称" prop="name">
+          <span>{{resource.name}}</span>
+        </el-form-item>
+        <el-form-item label="资源图标" prop="photo">
+          <!--          <span  class="badge">{{resource.photo}}</span>-->
+          <img :src="resource.photo" style="width: 50px; height: 50px;"/>
+        </el-form-item>
+        <el-form-item label="类型" prop="count" v-if="!type">
+          <span>{{resource.type}}</span>
+        </el-form-item>
+        <el-form-item label="数量" prop="quantity">
+          <span>{{resource.quantity}}</span>
+        </el-form-item>
+        <el-form-item label="状态" prop="state">
+          <span class="badge">{{resource.state}}</span>
+        </el-form-item>
+        <el-form-item>
+          <div class="btn btn-medium" @click="back()">返回</div>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<script>
+    import Http from '@/js/http.js'
+    import Apis from '@/js/api.js'
+    import {notify} from '@/constants/index'
+    import {getAllReportTypes, storageGet} from '@/js/index'
+
+    export default {
+        name: 'ResourceDetail',
+        components: {},
+        data() {
+            return {
+                user: {},
+                loading: false,
+                type: 0,
+                code: 0,
+                resource: {
+                    name: '',
+                    photo: '',
+                    type: '',
+                    quantity: 0,
+                    state: 0
+                },
+            }
+        },
+        mounted() {
+            this.$nextTick(() => {
+                this.init()
+            })
+        },
+        methods: {
+            init() {
+                this.code = this.$route.params.id
+                this.loadData()
+            },
+            back() {
+                this.$router.push({
+                    name: 'ResourceList'
+                })
+            },
+            loadData() {
+                this.showLoading()
+                Http.get(Apis.RESOURCE.GET_DETAIL.replace('{code}', this.code)).then((res) => {
+                    console.log(res)
+                    this.resource.name = res.data.name
+                    this.resource.photo = res.data.photoUrl
+                    this.resource.type = res.data.type
+                    this.resource.state = res.data.state
+                    this.resource.quantity = res.data.quantity
+                    this.hideLoading()
+                }).catch((error) => {
+                    this.hideLoading()
+                    notify('error', '打开详情失败:' + error.data)
+                })
+            },
+            setUserInfo() {
+                this.user = storageGet('user')
+            },
+            showLoading() {
+                this.loading = true
+            },
+            hideLoading() {
+                this.loading = false
+            }
+        },
+        watch: {
+            resourceType(val) {
+                this.resourceType = val
+            }
+        }
+    }
+</script>
+
+<style>
+  .demo {
+    font-size: 32px;
+  }
+
+  .el-form-item {
+    max-height: 120px !important;
+    overflow: auto;
+  }
+</style>

+ 109 - 0
src/pages/DetailPage/UserDetail.vue

@@ -0,0 +1,109 @@
+<template>
+  <div class="create-container">
+    <div class="create-body" v-loading="loading">
+      <el-form :model="user" label-width="12%" class="demo">
+        <el-form-item label="用户名称" prop="name">
+          <span>{{user.name}}</span>
+        </el-form-item>
+        <el-form-item label="用户图标" prop="photo">
+          <!--          <span  class="badge">{{user.photo}}</span>-->
+          <img :src="user.photo" style="width: 50px; height: 50px;"/>
+        </el-form-item>
+        <el-form-item label="性别" prop="count">
+          <span>{{user.gender}}</span>
+        </el-form-item>
+        <el-form-item label="省市" prop="address">
+          <span class="badge">{{user.address}}</span>
+        </el-form-item>
+        <el-form-item label="接包次数" prop="count">
+          <span>{{user.taskCount}}</span>
+        </el-form-item>
+        <el-form-item>
+          <div class="btn btn-medium" @click="back()">返回</div>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<script>
+    import Http from '@/js/http.js'
+    import Apis from '@/js/api.js'
+    import {notify} from '@/constants/index'
+    import {getAllReportTypes, storageGet} from '@/js/index'
+
+    export default {
+        name: 'UserDetail',
+        components: {},
+        data() {
+            return {
+                user: {},
+                loading: false,
+                id: 0,
+                user: {
+                    name: '',
+                    photo: '',
+                    taskCount: '',
+                    address: '',
+                    gender: '',
+                },
+            }
+        },
+        mounted() {
+            this.$nextTick(() => {
+                this.init()
+            })
+        },
+        methods: {
+            init() {
+                this.id = this.$route.params.id
+                this.loadData()
+            },
+            back() {
+                this.$router.push({
+                    name: 'UserList'
+                })
+            },
+            loadData() {
+                this.showLoading()
+                Http.get(Apis.USER.GET_DETAIL.replace('{userId}', this.id)).then((res) => {
+                    console.log(res)
+                    this.user.name = res.data.name
+                    this.user.photo = res.data.photoUrl
+                    this.user.gender = res.data.gender
+                    this.user.taskCount = res.data.taskCount
+                    this.user.address = res.data.address
+                    this.hideLoading()
+                }).catch((error) => {
+                    this.hideLoading()
+                    notify('error', '打开详情失败:' + error.data)
+                })
+            },
+            setUserInfo() {
+                this.user = storageGet('user')
+            },
+            showLoading() {
+                this.loading = true
+            },
+            hideLoading() {
+                this.loading = false
+            }
+        },
+        watch: {
+            userType(val) {
+                this.userType = val
+            }
+        }
+    }
+</script>
+
+<style>
+  .demo {
+    font-size: 32px;
+  }
+
+  .el-form-item {
+    max-height: 120px !important;
+    overflow: auto;
+  }
+</style>

+ 10 - 3
src/pages/Homepage/BrandCard.vue

@@ -2,12 +2,12 @@
   <el-card class="test-card">
   <el-card class="test-card">
     <div slot="header" class="clearfix test-card-header">
     <div slot="header" class="clearfix test-card-header">
       <span>入驻品牌机构</span>
       <span>入驻品牌机构</span>
-      <a class="pull-right" style="color: rgba(0, 118, 203, 1)" href="#">more>></a>
+      <a class="pull-right" style="color: rgba(0, 118, 203, 1); cursor: pointer" @click="goToMoreAgency()">more>></a>
     </div>
     </div>
     <div style="height: 96px">
     <div style="height: 96px">
       <el-row :gutter="15">
       <el-row :gutter="15">
         <el-col v-for="item in residentAgencyList" :key="item.id" :span="6" style="height: 50px">
         <el-col v-for="item in residentAgencyList" :key="item.id" :span="6" style="height: 50px">
-          <img :src="item.logo" :alt="item.name" style="width: 100%;height: 100%"/>
+          <img :src="item.agencyPhoto" :alt="item.evaluationAgencyName" style="width: 100%;height: 100%"/>
         </el-col>
         </el-col>
       </el-row>
       </el-row>
     </div>
     </div>
@@ -17,7 +17,14 @@
 <script>
 <script>
   export default {
   export default {
     name: "BrandCard",
     name: "BrandCard",
-    props:['residentAgencyList']
+    props:['residentAgencyList'],
+    methods:{
+        goToMoreAgency(){
+            this.$router.push({
+                name: 'AgencyResidentList',
+            });
+        },
+    }
   }
   }
 </script>
 </script>
 
 

+ 38 - 29
src/pages/Homepage/Homepage.vue

@@ -24,13 +24,13 @@
           </div>
           </div>
         </el-col>
         </el-col>
         <el-col :span="6">
         <el-col :span="6">
-          <el-button type="primary pull-right" class="releaseBtn">免费发布众测需求</el-button>
+            <el-button type="primary pull-right" class="releaseBtn" @click="checkLogin()">免费发布众测需求</el-button>
         </el-col>
         </el-col>
       </el-row>
       </el-row>
       <!--TabNav-->
       <!--TabNav-->
       <el-tabs v-model="currTab" @tab-click="handleTabClick" class="square-tab">
       <el-tabs v-model="currTab" @tab-click="handleTabClick" class="square-tab">
         <el-tab-pane v-for="item in homeTabArr.menuArr1" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
         <el-tab-pane v-for="item in homeTabArr.menuArr1" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
-        <el-tab-pane v-for="item in homeTabArr.menuArr2" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
+        <el-tab-pane v-for="item in homeTabArr.menuArr2" :label="item.name" :name="item.code" :key="item.code"></el-tab-pane>
         <el-tab-pane v-for="item in homeTabArr.menuArr3" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
         <el-tab-pane v-for="item in homeTabArr.menuArr3" :label="item.label" :name="item.name" :key="item.name"></el-tab-pane>
       </el-tabs>
       </el-tabs>
       <div>
       <div>
@@ -82,6 +82,8 @@
   import {mapActions,mapGetters} from 'vuex'
   import {mapActions,mapGetters} from 'vuex'
   import Waterfall from 'vue-waterfall/lib/waterfall'
   import Waterfall from 'vue-waterfall/lib/waterfall'
   import WaterfallSlot from 'vue-waterfall/lib/waterfall-slot'
   import WaterfallSlot from 'vue-waterfall/lib/waterfall-slot'
+  import {storageGet, getAllFields} from '@/js/index.js'
+  import {notify} from "../../constants";
   // console.log(commonData);
   // console.log(commonData);
   export default {
   export default {
     name: 'Homepage',
     name: 'Homepage',
@@ -104,6 +106,7 @@
     },
     },
     data() {
     data() {
       return {
       return {
+        isLogin: false,
         searchType:'0',
         searchType:'0',
         searchTypeArr:[
         searchTypeArr:[
           {
           {
@@ -115,12 +118,12 @@
             "value": "0"
             "value": "0"
           },
           },
           {
           {
-            "name": "工具",
-            "value": "1"
+              "name": "机构",
+              "value": "1"
           },
           },
           {
           {
-            "name": "机构",
-            "value": "2"
+              "name": "工具",
+              "value": "2"
           },
           },
           {
           {
             "name": "专家",
             "name": "专家",
@@ -134,17 +137,11 @@
             {label: "众测技术", name: "technology",linkTo:'technology'}
             {label: "众测技术", name: "technology",linkTo:'technology'}
           ],
           ],
           menuArr2:[
           menuArr2:[
-            {label: "科技服务", name: "monograph"},
-            {label: "服务互联网", name: "Internet"},
-            {label: "集成电路", name: "integratedCircuit"},
-            {label: "智能传感器", name: "Sensor"},
-            {label: "高端装备", name: "Assembly"},
-            {label: "更多", name: "more"}
+            {code: '', name: ''}
           ],
           ],
           menuArr3:[
           menuArr3:[
             {label: "找机构", name: "findInstitution"},
             {label: "找机构", name: "findInstitution"},
             {label: "找专家", name: "finfExpert"},
             {label: "找专家", name: "finfExpert"},
-            {label: "更多", name: "findMore"},
           ],
           ],
         },
         },
         homeData:{},
         homeData:{},
@@ -153,6 +150,10 @@
     },
     },
     methods:{
     methods:{
       loadData(){
       loadData(){
+        if (storageGet('user') != null) {
+            this.isLogin = true;
+        }
+        this.setFields();
         Http.get('/api/common/index/info').then((res)=>{
         Http.get('/api/common/index/info').then((res)=>{
           this.homeData = res.data;
           this.homeData = res.data;
           this.homeData.applicationTypeList.map((item)=>{
           this.homeData.applicationTypeList.map((item)=>{
@@ -161,6 +162,22 @@
           })
           })
         })
         })
       },
       },
+      setFields(){
+          getAllFields().then((res) => {
+              this.homeTabArr.menuArr2 = res
+              console.log(this.homeTabArr.menuArr2)
+          })
+
+      },
+      checkLogin(){
+        if(!this.isLogin){
+            console.log("请登录后访问");
+            notify('warning','请登录后访问');
+        }else{
+            console.log("已登录");
+            this.$router.push('/project/create');
+        }
+      },
       handleTabClick(tab){
       handleTabClick(tab){
         this.currTab = tab.name;
         this.currTab = tab.name;
         this.$router.push(this.homeTabArr.menuArr1[Number(tab.index)].linkTo);
         this.$router.push(this.homeTabArr.menuArr1[Number(tab.index)].linkTo);
@@ -169,23 +186,15 @@
         this.searchType = tab.name
         this.searchType = tab.name
       },
       },
       handleSearchData(){
       handleSearchData(){
-        let url = '/api/common/index/page';
-        let params = {
-          "keyword": this.searchVal,
-          "activePage": 1,
-          "columnFilters": [
-            {
-              "field": "type",
-              "type": "enums",
-              "enums":this.searchTypeArr,
-              "value": this.searchType
-            }
-          ]
+        if(this.searchType == 0){
+            // this.$router.push({name: 'Square2.0', params: {searchVal: this.searchVal, searchType: "project"}});
+        }else if(this.searchType == 1){
+            this.$router.push({name: 'AgencyList', params: {searchVal: this.searchVal}});
+        }else if(this.searchType == 2){
+            this.$router.push({name: 'ResourceList', params: {searchVal: this.searchVal}});
+        }else if(this.searchType == 3){
+            this.$router.push({name: 'ExpertList', params: {searchVal: this.searchVal}});
         }
         }
-        Http.post(url,params).then((res)=>{
-          console.log(res);
-        })
-
       }
       }
     },
     },
 
 

+ 12 - 4
src/pages/Homepage/HotAgency.vue

@@ -3,15 +3,15 @@
     <div slot="header" class="popular-header">
     <div slot="header" class="popular-header">
       <img src="../../assets/img/agency.png" alt="hot-crowd" class="popular-header-img"/>
       <img src="../../assets/img/agency.png" alt="hot-crowd" class="popular-header-img"/>
       <span class="popular-header-title">评测机构排行榜</span>
       <span class="popular-header-title">评测机构排行榜</span>
-      <el-button style="float: right; padding: 3px 0;line-height: 25px" type="text">more>></el-button>
+      <el-button style="float: right; padding: 3px 0;line-height: 25px" type="text" @click="goToMoreAgency()">more>></el-button>
     </div>
     </div>
     <div class="popular-list">
     <div class="popular-list">
       <el-row class="popular-list-item" v-for="item in agencyRank" :key="item.id">
       <el-row class="popular-list-item" v-for="item in agencyRank" :key="item.id">
         <el-col :span="19">
         <el-col :span="19">
-          <img :src="item.logo" alt="logo-project" class="pull-left project-logo-img">
+          <img :src="item.agencyPhoto" alt="logo-project" class="pull-left project-logo-img">
           <div style="margin-left: 55px">
           <div style="margin-left: 55px">
             <div class="list-item-title">
             <div class="list-item-title">
-              {{item.name}}
+              {{item.evaluationAgencyName}}
             </div>
             </div>
             <div class="list-item-info">
             <div class="list-item-info">
 
 
@@ -29,9 +29,17 @@
 </template>
 </template>
 
 
 <script>
 <script>
+  import Http from '@/js/http.js';
   export default {
   export default {
     name: 'HotAgency',
     name: 'HotAgency',
-    props:['agencyRank']
+    props:['agencyRank'],
+    methods:{
+        goToMoreAgency(){
+            this.$router.push({
+                name: 'AgencyList',
+            });
+        },
+    }
   }
   }
 </script>
 </script>
 
 

+ 9 - 4
src/pages/Homepage/HotContest.vue

@@ -3,7 +3,7 @@
     <div slot="header" class="popular-header">
     <div slot="header" class="popular-header">
       <img src="../../assets/img/crowd-contest.png" alt="hot-crowd" class="popular-header-img"/>
       <img src="../../assets/img/crowd-contest.png" alt="hot-crowd" class="popular-header-img"/>
       <span class="popular-header-title">众测大赛</span>
       <span class="popular-header-title">众测大赛</span>
-      <el-button style="float: right; padding: 3px 0;line-height: 25px" type="text">more>></el-button>
+      <el-button style="float: right; padding: 3px 0;line-height: 25px" type="text"  @click="getMore()">more>></el-button>
     </div>
     </div>
     <div class="popular-list">
     <div class="popular-list">
       <el-row class="popular-list-item" v-for="item in competitionList" :key="item.id">
       <el-row class="popular-list-item" v-for="item in competitionList" :key="item.id">
@@ -34,9 +34,14 @@
     name: 'HotContest',
     name: 'HotContest',
     props:['competitionList'],
     props:['competitionList'],
     methods:{
     methods:{
-      gotoDetail(item){
-        window.open(item.linkUrl)
-      }
+        getMore(){
+            this.$router.push({
+                name: 'CompetitionList',
+            });
+        },
+        gotoDetail(item){
+            window.open(item.linkUrl)
+        }
     }
     }
   }
   }
 </script>
 </script>

+ 9 - 2
src/pages/Homepage/HotCrowd.vue

@@ -3,7 +3,7 @@
     <div slot="header" class="popular-header">
     <div slot="header" class="popular-header">
       <img src="../../assets/img/HotCrowd.png" alt="hot-crowd" class="popular-header-img"/>
       <img src="../../assets/img/HotCrowd.png" alt="hot-crowd" class="popular-header-img"/>
       <span class="popular-header-title">热门众测</span>
       <span class="popular-header-title">热门众测</span>
-      <el-button style="float: right; padding: 3px 0;line-height: 25px" type="text">more>></el-button>
+      <el-button style="float: right; padding: 3px 0;line-height: 25px" type="text"  @click="getMore()">more>></el-button>
     </div>
     </div>
     <div class="popular-list">
     <div class="popular-list">
       <el-row class="popular-list-item" v-for="item in applicationTypeRank" :key="item.id">
       <el-row class="popular-list-item" v-for="item in applicationTypeRank" :key="item.id">
@@ -31,7 +31,14 @@
 <script>
 <script>
   export default {
   export default {
     name: 'HotCrowd',
     name: 'HotCrowd',
-    props:['applicationTypeRank']
+    props:['applicationTypeRank'],
+    methods:{
+        getMore(){
+            this.$router.push({
+                name: 'CrowdList',
+            });
+        },
+    }
   }
   }
 </script>
 </script>
 
 

+ 9 - 2
src/pages/Homepage/HotUser.vue

@@ -3,7 +3,7 @@
     <div slot="header" class="popular-header">
     <div slot="header" class="popular-header">
       <img src="../../assets/img/userRank.png" alt="hot-crowd" class="popular-header-img"/>
       <img src="../../assets/img/userRank.png" alt="hot-crowd" class="popular-header-img"/>
       <span class="popular-header-title">众测人员排行榜</span>
       <span class="popular-header-title">众测人员排行榜</span>
-      <el-button style="float: right; padding: 3px 0;line-height: 25px" type="text">more>></el-button>
+      <el-button style="float: right; padding: 3px 0;line-height: 25px" type="text"  @click="getMore()">more>></el-button>
     </div>
     </div>
     <div class="popular-list">
     <div class="popular-list">
       <el-row class="popular-list-item" v-for="item in userRank" :key="item.id">
       <el-row class="popular-list-item" v-for="item in userRank" :key="item.id">
@@ -31,7 +31,14 @@
 <script>
 <script>
   export default {
   export default {
     name: 'HotCrowd',
     name: 'HotCrowd',
-    props:['userRank']
+    props:['userRank'],
+    methods:{
+        getMore(){
+            this.$router.push({
+                name: 'UserList',
+            });
+        },
+    }
   }
   }
 </script>
 </script>
 
 

+ 9 - 2
src/pages/Homepage/ResourceAndTool.vue

@@ -2,7 +2,7 @@
   <el-card class="test-card">
   <el-card class="test-card">
     <div slot="header" class="clearfix test-card-header">
     <div slot="header" class="clearfix test-card-header">
       <span>众测资源和工具</span>
       <span>众测资源和工具</span>
-      <a class="pull-right" style="color: rgba(0, 118, 203, 1)" href="#">more>></a>
+      <el-button style="float: right; padding: 3px 0;line-height: 25px" type="text"  @click="getMore()">more>></el-button>
     </div>
     </div>
     <div>
     <div>
       <div v-for="item in resourceList" :key="item.code">{{item.name}}</div>
       <div v-for="item in resourceList" :key="item.code">{{item.name}}</div>
@@ -13,7 +13,14 @@
 <script>
 <script>
   export default {
   export default {
     name: "ResourceAndTool",
     name: "ResourceAndTool",
-    props:['resourceList']
+    props:['resourceList'],
+    methods:{
+        getMore(){
+            this.$router.push({
+                name: 'ResourceList',
+            });
+        },
+    }
   }
   }
 </script>
 </script>
 
 

+ 231 - 0
src/pages/HomepageSearch/AgencyList.vue

@@ -0,0 +1,231 @@
+<template>
+  <div class="home-wrapper">
+    <!--    <TopSearch :searchVal="searchVal" :searchType="searchType" :searchTypeArr="searchTypeArr"/>-->
+    <div class="nav" stype="height:500px">
+      <!--搜索框-->
+      <el-row class="search-nav" style="padding: 30px 0 20px 0">
+        <el-col :span="6">
+          <div class="pull-left" @click="gotoHome" style="cursor: pointer">
+            <img class="logo-img" src="../../assets/img/logo-blue.png"/>
+            <span class="logo-title">群智众测平台</span>
+          </div>
+        </el-col>
+        <el-col :span="12">
+          <div class="search-nav">
+            <div id="search-block ">
+              <el-tabs v-model="searchType" type="card" @tab-click="handleTypeClick">
+                <el-tab-pane v-for="item in searchTypeArr" v-if="item.value!=='all'" :label="item.name"
+                             :name="item.value"
+                             :key="item.value"></el-tab-pane>
+              </el-tabs>
+              <div class="search-input">
+                <el-input placeholder="请输入内容" v-model="searchVal" class="input-with-select">
+                  <el-button class="search-button" slot="append" type="primary" @click="handleSearchData">搜索</el-button>
+                </el-input>
+              </div>
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <el-button type="primary pull-right" class="releaseBtn" @click="checkLogin()">免费发布众测需求</el-button>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="container" style="margin: 20px auto;">
+      <div class="create-body">
+        <div class="title h2">测评机构</div>
+        <el-collapse accordion style="margin: 0 30px">
+          <template style="color: black">
+            <el-table
+              ref="multipleTable"
+              :data="curAgencyList"
+              tooltip-effect="dark"
+              style="width: 100%; font-size: 20px; color: black" v-loading="loading">
+              <el-table-column
+                label="头像"
+                width="100">
+                <template slot-scope="scope"><img :src="scope.row.agencyPhoto" style="width: 50px; height: 50px;"/>
+                </template>
+              </el-table-column>
+              <el-table-column
+                prop="evaluationAgencyName"
+                label="名称"
+                align="left"
+                width="300">
+              </el-table-column>
+              <el-table-column
+                prop="address"
+                align="left"
+                label="地址">
+              </el-table-column>
+              <el-table-column
+                prop="taskCount"
+                align="center"
+                label="接包数量">
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="操作">
+                <template slot-scope="scope">
+                  <div class="btn btn-small btn-info" @click="goToDetail(scope.row.userId)">查看详情</div>
+                </template>
+              </el-table-column>
+            </el-table>
+          </template>
+          <el-pagination
+            v-if="curAgencyList&&curAgencyList.length"
+            :page-size="9"
+            layout="prev, pager, next"
+            :total="totalElements"
+            :current-page="activePage"
+            @current-change="handlePageChange"
+            class="pull-right"
+          >
+          </el-pagination>
+        </el-collapse>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+    import Http from '@/js/http.js';
+    import TopSearch from "../../components/commons/TopSearch";
+    import {storageGet} from '@/js/index.js'
+    import {notify} from "../../constants";
+
+    export default {
+        name: "AgencyList",
+        components: {TopSearch},
+        data() {
+            return {
+                isLogin: false,
+                loading: false,
+                searchVal: '',
+                searchType: '1',
+                searchTypeArr: [
+                    {
+                        "name": "全部",
+                        "value": "all"
+                    },
+                    {
+                        "name": "项目",
+                        "value": "0"
+                    },
+                    {
+                        "name": "机构",
+                        "value": "1"
+                    },
+                    {
+                        "name": "工具",
+                        "value": "2"
+                    },
+                    {
+                        "name": "专家",
+                        "value": "3"
+                    }],
+                curAgencyList: [],
+                activePage: 1,
+                totalElements: 0
+            }
+        },
+        methods: {
+            loadData() {
+                this.showLoading();
+                if (storageGet('user') != null) {
+                    this.isLogin = true;
+                }
+                this.searchVal = this.$route.params.searchVal;
+                this.handleSearchData();
+                this.hideLoading();
+            },
+
+            showLoading () {
+                this.loading = true
+            },
+            hideLoading () {
+                this.loading = false
+            },
+            checkLogin() {
+                if (!this.isLogin) {
+                    console.log("请登录后访问");
+                    notify('warning', '请登录后访问');
+                } else {
+                    console.log("已登录");
+                    this.$router.push('/project/create');
+                }
+            },
+            handleSearchData() {
+                if (this.searchType == 0) {
+                    // this.$router.push({name: 'Square2.0', params: {searchVal: this.searchVal, searchType: "project"}});
+                } else if (this.searchType == 1) {
+                    let url = '/api/agency/list/more';
+                    let params = {
+                        "keyword": this.searchVal,
+                        "activePage": this.activePage,
+                        "columnFilters": [
+                            {
+                                "field": "type",
+                                "type": "enums",
+                                "enums": this.searchTypeArr,
+                                "value": this.searchType
+                            }
+                        ]
+                    }
+                    Http.post(url, params).then((res) => {
+                        this.curAgencyList = res.data.content;
+                        this.totalElements = res.data.totalElements;
+                    })
+                } else if (this.searchType == 2) {
+                    this.$router.push({name: 'ResourceList', params: {searchVal: this.searchVal}});
+                } else if (this.searchType == 3) {
+                    this.$router.push({name: 'ExpertList', params: {searchVal: this.searchVal}});
+                }
+            },
+            goToDetail(userId) {
+                this.$router.push({
+                    name: 'AgencyDetail',
+                    params: {id: userId, type: 0}
+                })
+            },
+            nextPage() {
+                let url = '/api/agency/list/more';
+                let params = {
+                    "keyword": this.searchVal,
+                    "activePage": this.activePage,
+                    "columnFilters": [
+                        {
+                            "field": "type",
+                            "type": "enums",
+                            "enums": this.searchTypeArr,
+                            "value": this.searchType
+                        }
+                    ]
+                }
+                Http.post(url, params).then((res) => {
+                    this.curAgencyList = res.data.content;
+                    this.totalElements = res.data.totalElements;
+                })
+            },
+            gotoHome() {
+                this.$router.push('/home');
+            },
+            handleTypeClick(tab) {
+                this.searchType = tab.name
+            },
+            handlePageChange(index) {
+                this.activePage = index;
+                this.nextPage();
+            }
+        },
+        mounted() {
+            this.loadData();
+        },
+    }
+</script>
+
+<style scoped>
+  .item-template {
+    height: 80px;
+  }
+</style>

+ 194 - 0
src/pages/HomepageSearch/AgencyResidentList.vue

@@ -0,0 +1,194 @@
+<template>
+  <div class="home-wrapper">
+    <!--    <TopSearch :searchVal="searchVal" :searchType="searchType" :searchTypeArr="searchTypeArr"/>-->
+    <div class="nav" stype="height:500px">
+      <!--搜索框-->
+      <el-row class="search-nav" style="padding: 30px 0 20px 0">
+        <el-col :span="6">
+          <div class="pull-left" @click="gotoHome" style="cursor: pointer">
+            <img class="logo-img" src="../../assets/img/logo-blue.png"/>
+            <span class="logo-title">群智众测平台</span>
+          </div>
+        </el-col>
+        <el-col :span="12">
+          <div class="search-nav">
+            <div id="search-block ">
+              <el-tabs v-model="searchType" type="card" @tab-click="handleTypeClick">
+                <el-tab-pane v-for="item in searchTypeArr" v-if="item.value!=='all'" :label="item.name"
+                             :name="item.value"
+                             :key="item.value"></el-tab-pane>
+              </el-tabs>
+              <div class="search-input">
+                <el-input placeholder="请输入内容" v-model="searchVal" class="input-with-select">
+                  <el-button class="search-button" slot="append" type="primary" @click="handleSearchData">搜索</el-button>
+                </el-input>
+              </div>
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <el-button type="primary pull-right" class="releaseBtn" @click="checkLogin()">免费发布众测需求</el-button>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="container" style="margin: 20px auto;">
+      <div class="create-body">
+        <div class="title h2">入驻品牌机构</div>
+        <el-collapse accordion style="margin: 0 30px">
+          <template style="color: black">
+            <el-table
+              ref="multipleTable"
+              :data="curAgencyList"
+              tooltip-effect="dark"
+              style="width: 100%; font-size: 20px; color: black">
+              <el-table-column
+                label="头像"
+                width="100">
+                <template slot-scope="scope"><img :src="scope.row.agencyPhoto" style="width: 50px; height: 50px;"/></template>
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                label="名称"
+                align="left"
+                width="300">
+              </el-table-column>
+              <el-table-column
+                prop="address"
+                align="left"
+                label="省市">
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="操作">
+                <template slot-scope="scope">
+                  <div class="btn btn-small btn-info" @click="goToDetail(scope.row.userId)">查看详情</div>
+                </template>
+              </el-table-column>
+            </el-table>
+          </template>
+          <el-pagination
+            v-if="curAgencyList&&curAgencyList.length"
+            :page-size="9"
+            layout="prev, pager, next"
+            :total="totalElements"
+            :current-page="activePage"
+            @current-change="handlePageChange"
+            class="pull-right"
+          >
+          </el-pagination>
+        </el-collapse>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+    import Http from '@/js/http.js';
+    import TopSearch from "../../components/commons/TopSearch";
+    import {storageGet} from '@/js/index.js'
+    import {notify} from "../../constants";
+
+    export default {
+        name: "AgencyResidentList",
+        props: ['searchVal', 'agencyList'],
+        components: {TopSearch},
+        data() {
+            return {
+                isLogin: false,
+                searchType: '0',
+                loading: false,
+                searchTypeArr: [
+                    {
+                        "name": "入驻机构",
+                        "value": "0"
+                    }],
+                curAgencyList: this.agencyList,
+                activePage: 1,
+                totalElements: 0
+            }
+        },
+        methods: {
+            loadData() {
+                if (storageGet('user') != null) {
+                    this.isLogin = true;
+                }
+                let url = '/api/resident/agency/more';
+                let params = {
+                    "keyword": this.searchVal,
+                    "activePage": this.activePage,
+                    "columnFilters": [
+                        {
+                            "field": "type",
+                            "type": "enums",
+                            "enums": this.searchTypeArr,
+                            "value": this.searchType
+                        }
+                    ]
+                }
+                Http.post(url, params).then((res) => {
+                    this.curAgencyList = res.data.content;
+                    this.totalElements=res.data.totalElements;
+                })
+            },
+            checkLogin() {
+                if (!this.isLogin) {
+                    console.log("请登录后访问");
+                    notify('warning', '请登录后访问');
+                } else {
+                    console.log("已登录");
+                    this.$router.push('/project/create');
+                }
+            },
+            handleSearchData() {
+                let url = '/api/resident/agency/more';
+                let params = {
+                    "keyword": this.searchVal,
+                    "activePage": this.activePage,
+                    "columnFilters": [
+                        {
+                            "field": "type",
+                            "type": "enums",
+                            "enums": this.searchTypeArr,
+                            "value": this.searchType
+                        }
+                    ]
+                }
+                Http.post(url, params).then((res) => {
+                    this.curAgencyList = res.data.content;
+                    this.totalElements=res.data.totalElements;
+                })
+            },
+            gotoHome() {
+                this.$router.push('/home');
+            },
+            handleTypeClick(tab) {
+                this.searchType = tab.name
+            },
+            handlePageChange(index) {
+                this.activePage = index;
+                this.handleSearchData();
+            },
+            goToDetail(id) {
+                this.$router.push({
+                    name: 'AgencyDetail',
+                    params: {id: id, type: 1}
+                })
+            },
+            showLoading () {
+                this.loading = true
+            },
+            hideLoading () {
+                this.loading = false
+            },
+        },
+        mounted() {
+            this.loadData();
+        }
+    }
+</script>
+
+<style scoped>
+  .item-template {
+    height: 80px;
+  }
+</style>

+ 179 - 0
src/pages/HomepageSearch/CompetitionList.vue

@@ -0,0 +1,179 @@
+<template>
+  <div class="home-wrapper">
+    <!--    <TopSearch :searchVal="searchVal" :searchType="searchType" :searchTypeArr="searchTypeArr"/>-->
+    <div class="nav" stype="height:500px">
+      <!--搜索框-->
+      <el-row class="search-nav" style="padding: 30px 0 20px 0">
+        <el-col :span="6">
+          <div class="pull-left" @click="gotoHome" style="cursor: pointer">
+            <img class="logo-img" src="../../assets/img/logo-blue.png"/>
+            <span class="logo-title">群智众测平台</span>
+          </div>
+        </el-col>
+        <el-col :span="12">
+          <div class="search-nav">
+            <div id="search-block ">
+              <el-tabs v-model="searchType" type="card" @tab-click="handleTypeClick">
+                <el-tab-pane v-for="item in searchTypeArr" v-if="item.value!=='all'" :label="item.name"
+                             :name="item.value"
+                             :key="item.value"></el-tab-pane>
+              </el-tabs>
+              <div class="search-input">
+                <el-input placeholder="请输入内容" v-model="searchVal" class="input-with-select">
+                  <el-button class="search-button" slot="append" type="primary" @click="handleSearchData">搜索</el-button>
+                </el-input>
+              </div>
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <el-button type="primary pull-right" class="releaseBtn" @click="checkLogin()">免费发布众测需求</el-button>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="container" style="margin: 20px auto;">
+      <div class="create-body">
+        <div class="title h2">众测大赛</div>
+        <el-collapse accordion style="margin: 0 30px">
+          <template style="color: black">
+            <el-table
+              ref="multipleTable"
+              :data="curCompetitionList"
+              tooltip-effect="dark"
+              style="width: 100%; font-size: 20px; color: black">
+              <el-table-column
+                label="图标"
+                width="100">
+                <template slot-scope="scope"><img :src="scope.row.image" style="width: 50px; height: 50px;"/></template>
+              </el-table-column>
+              <el-table-column
+                label="名称"
+                align="left"
+                width="500">
+                <template slot-scope="scope"><a target="_blank" :href="scope.row.linkUrl" itemscope>{{scope.row.name}}</a></template>
+              </el-table-column>
+              <el-table-column
+                prop="unit"
+                align="left"
+                label="单位">
+              </el-table-column>
+              <el-table-column
+                align="left"
+                label="时间">
+                <template slot-scope="scope">{{$moment(scope.row.startTime).format("YYYY-MM-DD HH:mm:ss")}}</template>
+              </el-table-column>
+            </el-table>
+          </template>
+          <el-pagination
+            v-if="curCompetitionList&&curCompetitionList.length"
+            :page-size="9"
+            layout="prev, pager, next"
+            :total="totalElements"
+            :current-page="activePage"
+            @current-change="handlePageChange"
+            class="pull-right"
+          >
+          </el-pagination>
+        </el-collapse>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+    import Http from '@/js/http.js';
+    import TopSearch from "../../components/commons/TopSearch";
+    import {storageGet} from '@/js/index.js'
+    import {notify} from "../../constants";
+
+    export default {
+        name: "CompetitionList",
+        props: ['searchVal', 'competitionList'],
+        components: {TopSearch},
+        data() {
+            return {
+                isLogin: false,
+                // searchVal: '',
+                searchType: '0',
+                searchTypeArr: [
+                    {
+                        "name": "大赛",
+                        "value": "0"
+                    }],
+                curCompetitionList: this.competitionList,
+                activePage: 1,
+                totalElements: 0
+            }
+        },
+        methods: {
+            loadData() {
+                if (storageGet('user') != null) {
+                    this.isLogin = true;
+                }
+                let url = '/api/common/index/competition';
+                let params = {
+                    "keyword": this.searchVal,
+                    "activePage": this.activePage,
+                    "columnFilters": [
+                        {
+                            "field": "type",
+                            "type": "enums",
+                            "enums": this.searchTypeArr,
+                            "value": this.searchType
+                        }
+                    ]
+                }
+                Http.post(url, params).then((res) => {
+                    this.curCompetitionList = res.data.content;
+                    this.totalElements=res.data.totalElements;
+                })
+            },
+            checkLogin() {
+                if (!this.isLogin) {
+                    console.log("请登录后访问");
+                    notify('warning', '请登录后访问');
+                } else {
+                    console.log("已登录");
+                    this.$router.push('/project/create');
+                }
+            },
+            handleSearchData() {
+                let url = '/api/common/index/competition';
+                let params = {
+                    "keyword": this.searchVal,
+                    "activePage": this.activePage,
+                    "columnFilters": [
+                        {
+                            "field": "type",
+                            "type": "enums",
+                            "enums": this.searchTypeArr,
+                            "value": this.searchType
+                        }
+                    ]
+                }
+                Http.post(url, params).then((res) => {
+                    this.curCompetitionList = res.data.content;
+                })
+            },
+            gotoHome() {
+                this.$router.push('/home');
+            },
+            handleTypeClick(tab) {
+                this.searchType = tab.name
+            },
+            handlePageChange(index) {
+                this.activePage = index;
+                this.handleSearchData();
+            }
+        },
+        mounted() {
+            this.loadData();
+        }
+    }
+</script>
+
+<style scoped>
+  .item-template {
+    height: 80px;
+  }
+</style>

+ 172 - 0
src/pages/HomepageSearch/CrowdList.vue

@@ -0,0 +1,172 @@
+<template>
+  <div class="home-wrapper">
+    <!--    <TopSearch :searchVal="searchVal" :searchType="searchType" :searchTypeArr="searchTypeArr"/>-->
+    <div class="nav" stype="height:500px">
+      <!--搜索框-->
+      <el-row class="search-nav" style="padding: 30px 0 20px 0">
+        <el-col :span="6">
+          <div class="pull-left" @click="gotoHome" style="cursor: pointer">
+            <img class="logo-img" src="../../assets/img/logo-blue.png"/>
+            <span class="logo-title">群智众测平台</span>
+          </div>
+        </el-col>
+        <el-col :span="12">
+          <div class="search-nav">
+            <div id="search-block ">
+              <el-tabs v-model="searchType" type="card" @tab-click="handleTypeClick">
+                <el-tab-pane v-for="item in searchTypeArr" v-if="item.value!=='all'" :label="item.name"
+                             :name="item.value"
+                             :key="item.value"></el-tab-pane>
+              </el-tabs>
+              <div class="search-input">
+                <el-input placeholder="请输入内容" v-model="searchVal" class="input-with-select">
+                  <el-button class="search-button" slot="append" type="primary" @click="handleSearchData">搜索</el-button>
+                </el-input>
+              </div>
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <el-button type="primary pull-right" class="releaseBtn" @click="checkLogin()">免费发布众测需求</el-button>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="container" style="margin: 20px auto;">
+      <div class="create-body">
+        <div class="title h2">众测应用类型</div>
+        <template style="color: black">
+          <el-table
+            ref="multipleTable"
+            :data="curCrowdList"
+            tooltip-effect="dark"
+            style="width: 100%; font-size: 20px; color: black">
+            <el-table-column
+              label="图标"
+              width="400">
+              <template slot-scope="scope"><img :src="scope.row.image" style="width: 50px; height: 50px;"/></template>
+            </el-table-column>
+            <el-table-column
+              prop="name"
+              label="名称"
+              align="left"
+              width="300">
+            </el-table-column>
+            <el-table-column
+              prop="count"
+              align="center"
+              label="项目数量">
+            </el-table-column>
+          </el-table>
+        </template>
+          <el-pagination
+            v-if="curCrowdList&&curCrowdList.length"
+            :page-size="9"
+            layout="prev, pager, next"
+            :total="totalElements"
+            :current-page="activePage"
+            @current-change="handlePageChange"
+            class="pull-right"
+          >
+          </el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+    import Http from '@/js/http.js';
+    import TopSearch from "../../components/commons/TopSearch";
+    import {storageGet} from '@/js/index.js'
+    import {notify} from "../../constants";
+
+    export default {
+        name: "CrowdList",
+        props: ['searchVal', 'crowdList'],
+        components: {TopSearch},
+        data() {
+            return {
+                isLogin: false,
+                // searchVal: '',
+                searchType: '0',
+                searchTypeArr: [
+                    {
+                        "name": "众测",
+                        "value": "0"
+                    }],
+                curCrowdList: this.crowdList,
+                activePage: 1,
+                totalElements: 0,
+            }
+        },
+        methods: {
+            loadData() {
+                if (storageGet('user') != null) {
+                    this.isLogin = true;
+                }
+                let url = '/api/common/index/application';
+                let params = {
+                    "keyword": this.searchVal,
+                    "activePage": this.activePage,
+                    "columnFilters": [
+                        {
+                            "field": "type",
+                            "type": "enums",
+                            "enums": this.searchTypeArr,
+                            "value": this.searchType
+                        }
+                    ]
+                }
+                Http.post(url, params).then((res) => {
+                    this.curCrowdList = res.data.content;
+                    this.totalElements=res.data.totalElements;
+                })
+            },
+            checkLogin() {
+                if (!this.isLogin) {
+                    console.log("请登录后访问");
+                    notify('warning', '请登录后访问');
+                } else {
+                    console.log("已登录");
+                    this.$router.push('/project/create');
+                }
+            },
+            handleSearchData() {
+                let url = '/api/common/index/application';
+                let params = {
+                    "keyword": this.searchVal,
+                    "activePage": this.activePage,
+                    "columnFilters": [
+                        {
+                            "field": "type",
+                            "type": "enums",
+                            "enums": this.searchTypeArr,
+                            "value": this.searchType
+                        }
+                    ]
+                }
+                Http.post(url, params).then((res) => {
+                    this.curCrowdList = res.data.content;
+                })
+            },
+            gotoHome() {
+                this.$router.push('/home');
+            },
+            handleTypeClick(tab) {
+                this.searchType = tab.name
+            },
+            handlePageChange(index) {
+                this.activePage = index;
+                this.handleSearchData();
+            }
+        },
+        mounted() {
+            this.loadData();
+        }
+    }
+</script>
+
+<style scoped>
+  .item-template {
+    height: 80px;
+  }
+</style>

+ 106 - 0
src/pages/HomepageSearch/ExpertCard.vue

@@ -0,0 +1,106 @@
+<template>
+  <el-card class="expert-card">
+    <div>
+      <div class="card-img"><img src="../../assets/img/logo-blue.png"/></div>
+      <div class="card-title">
+        {{card.name ? card.name :card.introduction}}
+      </div>
+      <div class="card-content">
+        {{card.introduction}}
+      </div>
+      <el-divider></el-divider>
+      <div class="card-detail">
+        {{card.introduction}}
+      </div>
+      <div class="card-action">
+        <div class="btn btn-small btn-info" @click="goToDetail(card.id)">查看详情</div>
+        <div class="participate-num">
+          <!-- <span v-bind:class="['badge',{ 'ios-platform': item.toLowerCase()=='ios','android-platform': item.toLowerCase()=='android','web-platform': item.toLowerCase()=='web'}]" v-for="item in platformType">{{item}}</span> -->
+        </div>
+      </div>
+    </div>
+  </el-card>
+</template>
+
+<script>
+    export default {
+        name: 'AgencyLine',
+        props: ['card'],
+        methods: {
+            goToDetail(id) {
+                this.$router.push({
+                    name: 'ExpertDetail',
+                    params: {id: id}
+                })
+            },
+            showLoading () {
+                this.loading = true
+            },
+            hideLoading () {
+                this.loading = false
+            },
+        },
+        mounted() {
+
+        }
+    }
+</script>
+
+<style lang="less">
+  .expert-card .el-card__body {
+    padding: 0 !important;
+  }
+
+
+  .expert-card {
+    .card-img {
+      margin: 10px;
+      position: relative;
+      float: left;
+    }
+
+    .card-title {
+      margin: 10px;
+      font-size: 24px;
+      font-family: Source Han Sans CN;
+      font-weight: 500;
+      color: rgba(0, 0, 0, 1);
+      line-height: 30px;
+      /*margin: 10px 0;*/
+      overflow: hidden; //超出的文本隐藏
+      text-overflow: ellipsis; //溢出用省略号显示
+      white-space: nowrap; //溢出不换行
+    }
+
+    .card-content {
+      font-size: 14px;
+      font-family: Source Han Sans CN;
+      font-weight: 400;
+      color: rgba(0, 0, 0, 1);
+      height: 70px;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      display: -webkit-box; //作为弹性伸缩盒子模型显示。
+      -webkit-box-orient: vertical; //设置伸缩盒子的子元素排列方式--从上到下垂直排列
+      -webkit-line-clamp: 3; //显示的行
+    }
+
+    .card-detail {
+      font-size: 14px;
+      font-family: Source Han Sans CN;
+      font-weight: 400;
+      color: rgba(0, 0, 0, 1);
+      height: 70px;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      display: -webkit-box; //作为弹性伸缩盒子模型显示。
+      -webkit-box-orient: vertical; //设置伸缩盒子的子元素排列方式--从上到下垂直排列
+      -webkit-line-clamp: 3; //显示的行
+    }
+
+  }
+
+  .card-title, .card-content, .card-detail {
+    padding: 0 10px !important;
+  }
+</style>

+ 183 - 0
src/pages/HomepageSearch/ExpertList.vue

@@ -0,0 +1,183 @@
+<template>
+  <div class="home-wrapper">
+    <!--    <TopSearch :searchVal="searchVal" :searchType="searchType" :searchTypeArr="searchTypeArr"/>-->
+    <div class="nav" stype="height:500px">
+      <!--搜索框-->
+      <el-row class="search-nav" style="padding: 30px 0 20px 0">
+        <el-col :span="6">
+          <div class="pull-left" @click="gotoHome" style="cursor: pointer">
+            <img class="logo-img" src="../../assets/img/logo-blue.png"/>
+            <span class="logo-title">群智众测平台</span>
+          </div>
+        </el-col>
+        <el-col :span="12">
+          <div class="search-nav">
+            <div id="search-block ">
+              <el-tabs v-model="searchType" type="card" @tab-click="handleTypeClick">
+                <el-tab-pane v-for="item in searchTypeArr" v-if="item.value!=='all'" :label="item.name"
+                             :name="item.value"
+                             :key="item.value"></el-tab-pane>
+              </el-tabs>
+              <div class="search-input">
+                <el-input placeholder="请输入内容" v-model="searchVal" class="input-with-select">
+                  <el-button class="search-button" slot="append" type="primary" @click="handleSearchData">搜索</el-button>
+                </el-input>
+              </div>
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <el-button type="primary pull-right" class="releaseBtn" @click="checkLogin()">免费发布众测需求</el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <div class="container" style="margin: 20px auto;">
+      <div class="title h2">专家</div>
+      <el-row>
+        <el-col :span="18" class="">
+          <el-row :gutter="15" style="margin-bottom: 10px">
+            <el-col :span="8" v-for="(item,index) in expertList" :key="index" style="margin-bottom: 15px">
+              <ExpertCard :card="item"></ExpertCard>
+            </el-col>
+          </el-row>
+          <el-pagination
+            v-if="expertList&&expertList.length"
+            :page-size="9"
+            layout="prev, pager, next"
+            :total="totalElements"
+            :current-page="activePage"
+            @current-change="handlePageChange"
+            class="pull-right"
+          >
+          </el-pagination>
+        </el-col>
+      </el-row>
+    </div>
+  </div>
+</template>
+
+<script>
+    import Http from '@/js/http.js';
+    import TopSearch from "../../components/commons/TopSearch";
+    import ExpertCard from "./ExpertCard";
+    import {storageGet} from '@/js/index.js'
+    import {notify} from "../../constants";
+
+    export default {
+        name: "ExpertList",
+        components: {ExpertCard, TopSearch},
+        data() {
+            return {
+                isLogin: false,
+                searchVal: '',
+                searchType: '3',
+                searchTypeArr: [
+                    {
+                        "name": "全部",
+                        "value": "all"
+                    },
+                    {
+                        "name": "项目",
+                        "value": "0"
+                    },
+                    {
+                    "name": "机构",
+                    "value": "1"
+                },
+                {
+                    "name": "工具",
+                    "value": "2"
+                },
+                    {
+                        "name": "专家",
+                        "value": "3"
+                    }],
+                expertList: [],
+                activePage: 1,
+                totalElements: 0
+            }
+        },
+        methods: {
+            loadData() {
+                if (storageGet('user') != null) {
+                    this.isLogin = true;
+                }
+                this.searchVal = this.$route.params.searchVal;
+                this.handleSearchData();
+            },
+            checkLogin() {
+                if (!this.isLogin) {
+                    console.log("请登录后访问");
+                    notify('warning', '请登录后访问');
+                } else {
+                    console.log("已登录");
+                    this.$router.push('/project/create');
+                }
+            },
+            handleSearchData() {
+                if(this.searchType == 0){
+                    // this.$router.push({name: 'Square2.0', params: {searchVal: this.searchVal, searchType: "project"}});
+                }else if(this.searchType == 1){
+                    this.$router.push({name: 'AgencyList', params: {searchVal: this.searchVal}});
+                }else if(this.searchType == 2){
+                    this.$router.push({name: 'ResourceList', params: {searchVal: this.searchVal}});
+                }else if(this.searchType == 3){
+                    let url = '/api/common/index/page';
+                    let params = {
+                        "keyword": this.searchVal,
+                        "activePage": 1,
+                        "columnFilters": [
+                            {
+                                "field": "type",
+                                "type": "enums",
+                                "enums": this.searchTypeArr,
+                                "value": this.searchType
+                            }
+                        ]
+                    }
+                    Http.post(url, params).then((res) => {
+                        this.expertList = res.data.expertPage.content;
+                        this.totalElements = res.data.expertPage.totalElements;
+                    })
+                }
+            },
+            nextPage(){
+                let url = '/api/common/index/page';
+                let params = {
+                    "keyword": this.searchVal,
+                    "activePage": 1,
+                    "columnFilters": [
+                        {
+                            "field": "type",
+                            "type": "enums",
+                            "enums": this.searchTypeArr,
+                            "value": this.searchType
+                        }
+                    ]
+                }
+                Http.post(url, params).then((res) => {
+                    this.expertList = res.data.expertPage.content;
+                    this.totalElements = res.data.expertPage.totalElements;
+                })
+            },
+            gotoHome() {
+                this.$router.push('/home');
+            },
+            handleTypeClick(tab) {
+                this.searchType = tab.name
+            },
+            handlePageChange(index) {
+                this.activePage = index;
+                this.nextPage();
+            }
+        },
+        mounted() {
+            this.loadData();
+        }
+    }
+</script>
+
+<style scoped>
+
+</style>

+ 230 - 0
src/pages/HomepageSearch/ResourceList.vue

@@ -0,0 +1,230 @@
+<template>
+  <div class="home-wrapper">
+    <!--    <TopSearch :searchVal="searchVal" :searchType="searchType" :searchTypeArr="searchTypeArr"/>-->
+    <div class="nav" stype="height:500px">
+      <!--搜索框-->
+      <el-row class="search-nav" style="padding: 30px 0 20px 0">
+        <el-col :span="6">
+          <div class="pull-left" @click="gotoHome" style="cursor: pointer">
+            <img class="logo-img" src="../../assets/img/logo-blue.png"/>
+            <span class="logo-title">群智众测平台</span>
+          </div>
+        </el-col>
+        <el-col :span="12">
+          <div class="search-nav">
+            <div id="search-block ">
+              <el-tabs v-model="searchType" type="card" @tab-click="handleTypeClick">
+                <el-tab-pane v-for="item in searchTypeArr" v-if="item.value!=='all'" :label="item.name"
+                             :name="item.value"
+                             :key="item.value"></el-tab-pane>
+              </el-tabs>
+              <div class="search-input">
+                <el-input placeholder="请输入内容" v-model="searchVal" class="input-with-select">
+                  <el-button class="search-button" slot="append" type="primary" @click="handleSearchData">搜索</el-button>
+                </el-input>
+              </div>
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <el-button type="primary pull-right" class="releaseBtn" @click="checkLogin()">免费发布众测需求</el-button>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="container" style="margin: 20px auto;">
+      <div class="create-body">
+        <div class="title h2">众测资源</div>
+        <template style="color: black">
+          <el-table
+            ref="multipleTable"
+            :data="curResourceList"
+            tooltip-effect="dark"
+            style="width: 100%; font-size: 20px; color: black">
+            <el-table-column
+              label="图标"
+              width="100">
+              <template slot-scope="scope"><img :src="scope.row.photoUrl" style="width: 50px; height: 50px;"/></template>
+            </el-table-column>
+            <el-table-column
+              prop="name"
+              label="名称"
+              align="left"
+              width="300">
+            </el-table-column>
+            <el-table-column
+              prop="type"
+              align="left"
+              label="类型">
+            </el-table-column>
+            <el-table-column
+              prop="state"
+              align="left"
+              label="状态">
+            </el-table-column>
+            <el-table-column
+              prop="unitWork"
+              align="center"
+              label="单位">
+            </el-table-column>
+            <el-table-column
+              align="center"
+              label="操作">
+              <template slot-scope="scope">
+                <div class="btn btn-small btn-info" @click="goToDetail(scope.row.code)">查看详情</div>
+              </template>
+            </el-table-column>
+          </el-table>
+        </template>
+        <el-collapse accordion style="margin: 0 30px">
+          <el-pagination
+            v-if="curResourceList&&curResourceList.length"
+            :page-size="3"
+            layout="prev, pager, next"
+            :total="totalElements"
+            :current-page="activePage"
+            @current-change="handlePageChange"
+            class="pull-right"
+          >
+          </el-pagination>
+        </el-collapse>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+    import Http from '@/js/http.js';
+    import TopSearch from "../../components/commons/TopSearch";
+    import {storageGet} from '@/js/index.js'
+    import {notify} from "../../constants";
+
+    export default {
+        name: "ResourceList",
+        components: {TopSearch},
+        data() {
+            return {
+                isLogin: false,
+                loading: false,
+                searchVal: '',
+                curResourceList: [],
+                searchType: '2',
+                searchTypeArr: [
+                    {
+                        "name": "全部",
+                        "value": "all"
+                    },
+                    {
+                        "name": "项目",
+                        "value": "0"
+                    },
+                    {
+                        "name": "机构",
+                        "value": "1"
+                    },
+                    {
+                        "name": "工具",
+                        "value": "2"
+                    },
+                    {
+                        "name": "专家",
+                        "value": "3"
+                    }],
+                activePage: 1,
+                totalElements: 0
+            }
+        },
+        methods: {
+            loadData() {
+                if (storageGet('user') != null) {
+                    this.isLogin = true;
+                }
+                this.searchVal = this.$route.params.searchVal;
+                this.handleSearchData();
+            },
+            checkLogin() {
+                if (!this.isLogin) {
+                    notify('warning', '请登录后访问');
+                } else {
+                    this.$router.push('/project/create');
+                }
+            },
+            handleSearchData() {
+                if(this.searchType == 0){
+                    // this.$router.push({name: 'Square2.0', params: {searchVal: this.searchVal, searchType: "project"}});
+                }else if(this.searchType == 1){
+                    this.$router.push({name: 'AgencyList', params: {searchVal: this.searchVal}});
+                }else if(this.searchType == 2){
+                    let url = '/api/common/index/page';
+                    let params = {
+                        "keyword": this.searchVal,
+                        "activePage": 1,
+                        "columnFilters": [
+                            {
+                                "field": "type",
+                                "type": "enums",
+                                "enums": this.searchTypeArr,
+                                "value": this.searchType
+                            }
+                        ]
+                    };
+                    Http.post(url, params).then((res) => {
+                        this.curResourceList = res.data.resourcePage.content;
+                        this.totalElements = res.data.resourcePage.totalElements;
+                    })
+                }else if(this.searchType == 3){
+                    this.$router.push({name: 'ExpertList', params: {searchVal: this.searchVal}});
+                }
+            },
+            nextPage(){
+                let url = '/api/common/index/page';
+                let params = {
+                    "keyword": this.searchVal,
+                    "activePage": this.activePage,
+                    "columnFilters": [
+                        {
+                            "field": "type",
+                            "type": "enums",
+                            "enums": this.searchTypeArr,
+                            "value": this.searchType
+                        }
+                    ]
+                };
+                Http.post(url, params).then((res) => {
+                    this.curResourceList = res.data.resourcePage.content;
+                    this.totalElements = res.data.resourcePage.totalElements;
+                })
+            },
+            gotoHome() {
+                this.$router.push('/home');
+            },
+            handleTypeClick(tab) {
+                this.searchType = tab.name
+            },
+            handlePageChange(index) {
+                this.activePage = index;
+                this.nextPage();
+            },
+            goToDetail(code) {
+                this.$router.push({
+                    name: 'ResourceDetail',
+                    params: {id: code}
+                })
+            },
+            showLoading () {
+                this.loading = true
+            },
+            hideLoading () {
+                this.loading = false
+            },
+        },
+        mounted() {
+            this.loadData();
+        }
+    }
+</script>
+
+<style scoped>
+  .item-template {
+    height: 80px;
+  }
+</style>

+ 198 - 0
src/pages/HomepageSearch/UserList.vue

@@ -0,0 +1,198 @@
+<template>
+  <div class="home-wrapper">
+    <!--    <TopSearch :searchVal="searchVal" :searchType="searchType" :searchTypeArr="searchTypeArr"/>-->
+    <div class="nav" stype="height:500px">
+      <!--搜索框-->
+      <el-row class="search-nav" style="padding: 30px 0 20px 0">
+        <el-col :span="6">
+          <div class="pull-left" @click="gotoHome" style="cursor: pointer">
+            <img class="logo-img" src="../../assets/img/logo-blue.png"/>
+            <span class="logo-title">群智众测平台</span>
+          </div>
+        </el-col>
+        <el-col :span="12">
+          <div class="search-nav">
+            <div id="search-block ">
+              <el-tabs v-model="searchType" type="card" @tab-click="handleTypeClick">
+                <el-tab-pane v-for="item in searchTypeArr" v-if="item.value!=='all'" :label="item.name"
+                             :name="item.value"
+                             :key="item.value"></el-tab-pane>
+              </el-tabs>
+              <div class="search-input">
+                <el-input placeholder="请输入内容" v-model="searchVal" class="input-with-select">
+                  <el-button class="search-button" slot="append" type="primary" @click="handleSearchData">搜索</el-button>
+                </el-input>
+              </div>
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <el-button type="primary pull-right" class="releaseBtn" @click="checkLogin()">免费发布众测需求</el-button>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="container" style="margin: 20px auto;">
+      <div class="create-body">
+        <div class="title h2">众测人员</div>
+        <el-collapse accordion style="margin: 0 30px">
+          <template style="color: black">
+            <el-table
+              ref="multipleTable"
+              :data="curUserList"
+              tooltip-effect="dark"
+              style="width: 100%; font-size: 20px; color: black">
+              <el-table-column
+                label="头像"
+                width="100">
+                <template slot-scope="scope"><img :src="scope.row.photoUrl" style="width: 50px; height: 50px;"/></template>
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                label="名称"
+                align="left"
+                width="200">
+              </el-table-column>
+<!--              <el-table-column-->
+<!--                prop="gender"-->
+<!--                align="left"-->
+<!--                label="性别">-->
+<!--              </el-table-column>-->
+              <el-table-column
+                prop="address"
+                align="left"
+                label="省市">
+              </el-table-column>
+              <el-table-column
+                prop="taskCount"
+                align="center"
+                label="接包数量">
+              </el-table-column>
+              <el-table-column
+                align="center"
+                label="操作">
+                <template slot-scope="scope">
+                  <div class="btn btn-small btn-info" @click="goToDetail(scope.row.id)">查看详情</div>
+                </template>
+              </el-table-column>
+            </el-table>
+          </template>
+          <el-pagination
+            v-if="curUserList&&curUserList.length"
+            :page-size="9"
+            layout="prev, pager, next"
+            :total="totalElements"
+            :current-page="activePage"
+            @current-change="handlePageChange"
+            class="pull-right"
+          >
+          </el-pagination>
+        </el-collapse>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+    import Http from '@/js/http.js';
+    import TopSearch from "../../components/commons/TopSearch";
+    import {storageGet} from '@/js/index.js'
+    import {notify} from "../../constants";
+
+    export default {
+        name: "UserList",
+        props: ['searchVal', 'userList'],
+        components: {TopSearch},
+        data() {
+            return {
+                isLogin: false,
+                id: 0,
+                // searchVal: '',
+                searchType: '0',
+                searchTypeArr: [
+                    {
+                        "name": "众测人员",
+                        "value": "0"
+                    }],
+                curUserList: this.userList,
+                activePage: 1,
+                totalElements: 0
+            }
+        },
+        methods: {
+            loadData() {
+                if (storageGet('user') != null) {
+                    this.isLogin = true;
+                }
+                let url = '/api/common/index/user/more';
+                let params = {
+                    "keyword": this.searchVal,
+                    "activePage": this.activePage,
+                    "columnFilters": [
+                        {
+                            "field": "type",
+                            "type": "enums",
+                            "enums": this.searchTypeArr,
+                            "value": this.searchType
+                        }
+                    ]
+                }
+                Http.post(url, params).then((res) => {
+                    this.curUserList = res.data.content;
+                    this.totalElements=res.data.totalElements;
+                })
+            },
+            checkLogin() {
+                if (!this.isLogin) {
+                    console.log("请登录后访问");
+                    notify('warning', '请登录后访问');
+                } else {
+                    console.log("已登录");
+                    this.$router.push('/project/create');
+                }
+            },
+            handleSearchData() {
+                let url = '/api/common/index/user/more';
+                let params = {
+                    "keyword": this.searchVal,
+                    "activePage":  this.activePage,
+                    "columnFilters": [
+                        {
+                            "field": "type",
+                            "type": "enums",
+                            "enums": this.searchTypeArr,
+                            "value": this.searchType
+                        }
+                    ]
+                }
+                Http.post(url, params).then((res) => {
+                    this.curUserList = res.data.content;
+                })
+            },
+            gotoHome() {
+                this.$router.push('/home');
+            },
+            handleTypeClick(tab) {
+                this.searchType = tab.name
+            },
+            handlePageChange(index) {
+                this.activePage = index;
+                this.handleSearchData();
+            },
+            goToDetail(id) {
+                this.$router.push({
+                    name: 'UserDetail',
+                    params: {id: id}
+                })
+            },
+        },
+        mounted() {
+            this.loadData();
+        }
+    }
+</script>
+
+<style scoped>
+  .item-template {
+    height: 80px;
+  }
+</style>

+ 18 - 1
src/pages/Square/Square2.0.vue

@@ -24,7 +24,7 @@
           </div>
           </div>
         </el-col>
         </el-col>
         <el-col :span="6">
         <el-col :span="6">
-          <el-button type="primary pull-right" class="releaseBtn">免费发布众测需求</el-button>
+          <el-button type="primary pull-right" class="releaseBtn" @click="checkLogin()">免费发布众测需求</el-button>
         </el-col>
         </el-col>
       </el-row>
       </el-row>
       <!--TabNav-->
       <!--TabNav-->
@@ -70,11 +70,14 @@
   import SquareCard from './SquareCard'
   import SquareCard from './SquareCard'
   import PopularProject from './PopularProject'
   import PopularProject from './PopularProject'
   import PopularTask from './PopularTask'
   import PopularTask from './PopularTask'
+  import {storageGet} from '@/js/index.js'
+  import {notify} from "../../constants";
   import { mapActions ,mapGetters} from 'vuex';
   import { mapActions ,mapGetters} from 'vuex';
   export default {
   export default {
     name: 'Square2.0',
     name: 'Square2.0',
     data(){
     data(){
       return {
       return {
+        isLogin: false,
         searchType:'project',
         searchType:'project',
         searchVal: '',
         searchVal: '',
         currTab:'squareHome',
         currTab:'squareHome',
@@ -126,6 +129,11 @@
       },
       },
 
 
       loadData(){
       loadData(){
+        if (storageGet('user') != null) {
+            this.isLogin = true;
+        }
+        this.searchVal = this.$route.params.searchVal;
+        this.searchType = this.$route.params.searchType;
         Http.get('/api/square/list').then((res)=>{
         Http.get('/api/square/list').then((res)=>{
           let crowdTestProjectVOs = res.data.crowdTestProjectVOs;
           let crowdTestProjectVOs = res.data.crowdTestProjectVOs;
           let crowdTestTaskVOS = res.data.crowdTestTaskVOS;
           let crowdTestTaskVOS = res.data.crowdTestTaskVOS;
@@ -135,6 +143,15 @@
           this.projectAndTaskArr = projectAndTaskArr;
           this.projectAndTaskArr = projectAndTaskArr;
         })
         })
       },
       },
+      checkLogin(){
+          if(!this.isLogin){
+              console.log("请登录后访问");
+              notify('warning','请登录后访问');
+          }else{
+              console.log("已登录");
+              this.$router.push('/project/create');
+          }
+      },
       handleSearchData(){
       handleSearchData(){
         let url = '/api/square/search/list';
         let url = '/api/square/search/list';
         let params = {
         let params = {

+ 19 - 1
src/pages/Technology/Technology2.0.vue

@@ -24,7 +24,7 @@
           </div>
           </div>
         </el-col>
         </el-col>
         <el-col :span="6">
         <el-col :span="6">
-          <el-button type="primary pull-right" class="releaseBtn">免费发布众测需求</el-button>
+          <el-button type="primary pull-right" class="releaseBtn" @click="checkLogin()">免费发布众测需求</el-button>
         </el-col>
         </el-col>
       </el-row>
       </el-row>
       <!--TabNav-->
       <!--TabNav-->
@@ -69,6 +69,8 @@
   import TechnologyMG from './TechnologyMG'
   import TechnologyMG from './TechnologyMG'
   import HotActicle from './HotActicle'
   import HotActicle from './HotActicle'
   import PopularProject from '../Square/PopularProject'
   import PopularProject from '../Square/PopularProject'
+  import {storageGet} from '@/js/index.js'
+  import {notify} from "../../constants";
   import qs from 'querystring'
   import qs from 'querystring'
   import { mapActions ,mapGetters} from 'vuex';
   import { mapActions ,mapGetters} from 'vuex';
 
 
@@ -83,6 +85,7 @@
     },
     },
     data(){
     data(){
       return {
       return {
+        isLogin: false,
         searchVal: '',
         searchVal: '',
         searchType:'',
         searchType:'',
         searchTypeArr:[
         searchTypeArr:[
@@ -104,6 +107,20 @@
       }
       }
     },
     },
     methods:{
     methods:{
+      loadData(){
+          if (storageGet('user') != null) {
+              this.isLogin = true;
+          }
+      },
+      checkLogin(){
+          if(!this.isLogin){
+              console.log("请登录后访问");
+              notify('warning','请登录后访问');
+          }else{
+              console.log("已登录");
+              this.$router.push('/project/create');
+          }
+      },
       gotoHome(){
       gotoHome(){
         this.$router.push('/home');
         this.$router.push('/home');
       },
       },
@@ -156,6 +173,7 @@
       }
       }
     },
     },
     mounted() {
     mounted() {
+      this.loadData();
       this.loadHotArticles();
       this.loadHotArticles();
       this.loadTechnologyArticles(1);
       this.loadTechnologyArticles(1);
     }
     }

+ 102 - 0
src/pages/UserCenter/Authentication.vue

@@ -0,0 +1,102 @@
+<template>
+  <div>
+    <div class="right-modifyPsw">
+      <div class="right-modifyPsw-title">
+        <span style="font-size: 18px;font-weight: bold">身份认证</span>
+      </div>
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <div class="authentication-card authentication-card-select">
+            <div class="authentication-card-title">个人认证</div>
+            <el-row :gutter="10">
+              <el-col :span="5">
+                <div class="authentication-card-img">
+                  <img src="../../assets/img/idcard1.png" >
+                </div>
+              </el-col>
+              <el-col :span="19">
+                <div class="authentication-card-title">手持证件照上传</div>
+                <div class="authentication-card-info">需要进行人工审核,审核周期1-3个工作日</div>
+              </el-col>
+            </el-row>
+          </div>
+        </el-col>
+        <el-col :span="12">
+          <div class="authentication-card">
+            <div class="authentication-card-title">企业认证</div>
+            <el-row :gutter="10">
+              <el-col :span="5">
+                <div class="authentication-card-img">
+                  <img src="../../assets/img/idcard2.png" >
+                </div>
+              </el-col>
+              <el-col :span="19">
+                <div class="authentication-card-title">手持证件照上传</div>
+                <div class="authentication-card-info">需要进行人工审核,审核周期1-3个工作日</div>
+              </el-col>
+            </el-row>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+  </div>
+</template>
+
+<script>
+
+  export default {
+    name: "Authentication",
+    data() {
+      return {
+
+      }
+    },
+    methods: {
+
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .right-modifyPsw {
+    padding: 20px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 1px 6px 0px rgba(8, 6, 6, 0.13);
+
+    .right-modifyPsw-title {
+      padding: 10px;
+      border-bottom: 1px solid #ccc;
+      margin-bottom: 20px;
+    }
+
+    .authentication-card{
+      background:rgba(249,249,249,1);
+      padding: 20px 20px 30px 20px;
+      .authentication-card-title {
+        font-size:20px;
+        font-family:Source Han Sans CN;
+        font-weight:500;
+        margin-bottom: 20px;
+      }
+      .authentication-card-info{
+        font-size:16px;
+        font-family:Source Han Sans CN;
+        font-weight:400;
+        color:rgba(153,153,153,1);
+      }
+      .authentication-card-img {
+        background:rgba(0,118,203,1);
+        border-radius:50%;
+        width: 65px;
+        height: 65px;
+        text-align: center;
+        vertical-align: middle;
+        display: table-cell;
+      }
+    }
+    .authentication-card-select {
+      background-image: url("../../assets/img/selectAuthentication.png");
+      background-size: 100% 100%;
+    }
+  }
+</style>

+ 49 - 0
src/pages/UserCenter/BankCard.vue

@@ -0,0 +1,49 @@
+<template>
+  <div class="bank-card">
+    <div class="bank-card-title" style="padding: 10px;height:43px">
+      <img src="../../assets/img/bankimg.png">
+      <span class="" style="font-size: 16px;font-weight: bold;line-height: 43px">建设银行</span>
+      <el-button type="primary" plain class="pull-right" size="mini">编辑</el-button>
+    </div>
+    <div class="bank-card-detail-wrapper">
+      <div class="bank-card-detail">
+        <div class="bank-card-detail-info">张晓楠</div>
+        <div class="bank-card-detail-info">********************5656</div>
+      </div>
+    </div>
+  </div>
+
+</template>
+
+<script>
+  export default {
+    name: "BankCard",
+    data(){
+      return {
+        addBankCard:false,
+
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .bank-card {
+    /*width:285px;*/
+    height:160px;
+    background:rgba(255,255,255,1);
+    box-shadow:0px 1px 6px 0px rgba(8,6,6,0.13);
+    .bank-card-detail-wrapper {
+      padding: 10px;
+      .bank-card-detail{
+        margin-bottom: 5px;
+        .bank-card-detail-title {
+          font-size: 14px;
+        }
+        .bank-card-detail-info {
+          margin-left: 43px;
+        }
+      }
+    }
+  }
+</style>

+ 132 - 0
src/pages/UserCenter/EnterpriseAuth.vue

@@ -0,0 +1,132 @@
+<template>
+  <div class="right-modifyPsw">
+    <div class="right-modifyPsw-title">
+      <span style="font-size: 18px;font-weight: bold">企业认证</span>
+    </div>
+    <el-steps :active="active" process-status="finish" style="margin-bottom: 20px">
+      <el-step title="上传企业信息"></el-step>
+      <el-step title="上传法人信息"></el-step>
+      <el-step title="确认信息"></el-step>
+      <el-step title="认证结果"></el-step>
+    </el-steps>
+    <div class="upload-wrapper">
+      <div>
+        <el-upload
+          class="avatar-uploader"
+          action="https://jsonplaceholder.typicode.com/posts/"
+          :show-file-list="false"
+          :on-success="handleAvatarSuccess"
+          :before-upload="beforeAvatarUpload">
+          <img v-if="imageUrl" :src="imageUrl" class="avatar">
+          <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+        </el-upload>
+        <div><span style="color: red">*</span>营业执照:(仅支持三证合一)</div>
+      </div>
+      <div class="authentication-detail">
+        <div class="authentication-detail-title">证件要求</div>
+        <ul class="authentication-detail-list">
+          <li>必须为清晰、完整的彩色原件扫描件或数码照</li>
+          <li>仅支持.jpg .bmp .png .gif的图片格式,图片大小不超过4M</li>
+          <li>必须在有效期内且年检章齐全(当年成立的公司可无年检章)</li>
+          <li>必须为中国大陆工商局颁发</li>
+        </ul>
+      </div>
+    </div>
+    <div class="enterprise-brn-wrapper">
+      <button class="enterprise-btn previousBtn">上一步</button>
+      <button class="enterprise-btn nextBtn">下一步</button>
+    </div>
+
+  </div>
+</template>
+
+<script>
+  export default {
+    name: "EnterpriseAuth",
+    data() {
+      return {
+        active: 0,
+        imageUrl: ''
+      }
+    },
+    methods:{
+      handleAvatarSuccess(res, file) {
+        this.imageUrl = URL.createObjectURL(file.raw);
+      },
+      beforeAvatarUpload(file) {
+        const isJPG = file.type === 'image/jpeg';
+        const isLt2M = file.size / 1024 / 1024 < 2;
+
+        if (!isJPG) {
+          this.$message.error('上传头像图片只能是 JPG 格式!');
+        }
+        if (!isLt2M) {
+          this.$message.error('上传头像图片大小不能超过 2MB!');
+        }
+        return isJPG && isLt2M;
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+
+  .right-modifyPsw {
+    padding: 20px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 1px 6px 0px rgba(8, 6, 6, 0.13);
+
+    .right-modifyPsw-title {
+      padding: 10px;
+      border-bottom: 1px solid #ccc;
+      margin-bottom: 20px;
+    }
+
+    .upload-wrapper {
+      display: flex;
+      padding: 0 30px;
+
+      .authentication-detail {
+        padding:0 30px;
+        border-left: 1px solid rgba(220,220,220,1);
+        .authentication-detail-title {
+          font-size:16px;
+          font-family:Source Han Sans CN;
+          font-weight:600;
+          border-bottom: 1px dashed rgba(220,220,220,1);
+          margin-bottom: 10px;
+          padding-bottom: 5px;
+        }
+      }
+      .authentication-detail-list {
+        list-style-type: none;
+        padding-left: 0;
+        li:before{
+          content: "\2022";
+          color: #148AE0;
+          font-size: 22px;
+          margin-right: 10px;
+        }
+      }
+    }
+
+    .enterprise-brn-wrapper {
+      margin-top: 40px;
+      display: flex;
+      justify-content: center;
+      .enterprise-btn{
+        border: 1px solid rgba(0,118,203,1);
+        width: 150px;
+        background-color: white;
+        color:rgba(0,118,203,1) ;
+        padding: 10px;
+        margin: 0 30px;
+      }
+      .nextBtn {
+        background-color:rgba(0,118,203,1);
+        color: white;
+      }
+    }
+
+  }
+</style>

+ 74 - 0
src/pages/UserCenter/MailBinding.vue

@@ -0,0 +1,74 @@
+<template>
+  <div>
+    <div class="right-modifyPsw">
+      <div class="right-modifyPsw-title">
+        <span style="font-size: 18px;font-weight: bold">邮箱绑定</span>
+      </div>
+      <div style="background-color: rgba(233,239,249,1);padding: 10px;margin-bottom: 30px">
+        <span style="font-size: 16px">您还未绑定邮箱,为保护您帐号,建议您</span>
+        <el-button type="primary" plain size="mini">立即绑定</el-button>
+      </div>
+      <div>
+        邮箱绑定成功后,您将享受以下服务:
+      </div>
+      <div>①邮箱地址登录 可直接使用“邮箱地址”登录到众测服务平台</div>
+      <div>②重要事件提醒 进行(支付/提现/众测/中标)时,可及时收到邮件提醒</div>
+      <div>③找回账号密码 忘记密码时,可使用邮件找回密码</div>
+
+      <el-steps :active="active" process-status="finish" style="margin-bottom: 20px">
+        <el-step title="添加邮箱"></el-step>
+        <el-step title="完成绑定"></el-step>
+      </el-steps>
+
+<!--      <el-form  label-width="80px"  v-if="active===0">-->
+<!--        <el-form-item label="邮箱号">-->
+<!--          <span v-model="mailBindingForm.mail">135****6699</span>-->
+<!--        </el-form-item>-->
+<!--        <el-form-item label="验证码">-->
+<!--          <span v-model="mailBindingForm.phone">135****6699</span>-->
+<!--        </el-form-item>-->
+<!--      </el-form>-->
+
+      <el-form  label-width="80px"  v-if="active===0">
+        <el-form-item label="邮箱号">
+          <el-input v-model="mailBindingForm.mail"></el-input>
+        </el-form-item>
+        <el-form-item label="验证码">
+          <span v-model="mailBindingForm.phone">135****6699</span>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<script>
+
+  export default {
+    name: "MailBinding",
+    data() {
+      return {
+        active: 0,
+        mailBindingForm:{
+          mail:''
+        }
+      }
+    },
+    methods: {
+
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .right-modifyPsw {
+    padding: 20px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 1px 6px 0px rgba(8, 6, 6, 0.13);
+
+    .right-modifyPsw-title {
+      padding: 10px;
+      border-bottom: 1px solid #ccc;
+      margin-bottom: 20px;
+    }
+  }
+</style>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 40 - 0
src/pages/UserCenter/Mine.vue


+ 57 - 0
src/pages/UserCenter/ModifyPsw.vue

@@ -0,0 +1,57 @@
+<template>
+  <div>
+    <div class="right-modifyPsw">
+      <div class="right-modifyPsw-title">
+        <span style="font-size: 18px;font-weight: bold">修改密码</span>
+      </div>
+      <div style="background-color: rgba(233,239,249,1);padding: 10px">
+        <i class="el-icon-warning" style="color: rgba(0, 117, 203, 1);font-size: 18px"></i>
+        <span style="font-size: 16px">安全提醒:请妥善保管密码,众测服务平台人员不会以任何理由向您索取密码。</span>
+      </div>
+      <el-form ref="modifyForm" :model="modifyForm" label-width="80px" style="margin-top: 20px">
+        <el-form-item label="当前密码">
+          <el-input v-model="modifyForm.password"></el-input>
+        </el-form-item>
+        <el-form-item label="新密码">
+          <el-input v-model="modifyForm.newpassword"></el-input>
+        </el-form-item>
+        <el-form-item label="确认密码">
+          <el-input v-model="modifyForm.password"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary">确认修改</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<script>
+
+  export default {
+    name: "ModifyPsw",
+    data(){
+      return {
+        modifyForm: {
+          password:'',
+          newpassword: '',
+          repassword:'',
+        },
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .right-modifyPsw {
+    padding: 20px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 1px 6px 0px rgba(8, 6, 6, 0.13);
+
+    .right-modifyPsw-title {
+      padding: 10px;
+      border-bottom: 1px solid #ccc;
+      margin-bottom: 20px;
+    }
+  }
+</style>

+ 86 - 0
src/pages/UserCenter/MyBankCard.vue

@@ -0,0 +1,86 @@
+<template>
+  <div>
+    <div class="right-qualification">
+      <div class="right-qualification-title">
+        <span style="font-size: 18px;font-weight: bold">我的银行卡</span>
+        <el-button type="primary" size="mini" class="pull-right" @click="addBankCard = true">添加</el-button>
+      </div>
+      <el-row :gutter="15" style="margin-bottom: 15px">
+        <el-col :span="8">
+          <BankCard></BankCard>
+        </el-col>
+        <el-col :span="8">
+          <BankCard></BankCard>
+        </el-col>
+        <el-col :span="8">
+          <BankCard></BankCard>
+        </el-col>
+      </el-row>
+    </div>
+    <el-dialog
+      title="新增银行卡"
+      :visible.sync="addBankCard"
+      width="30%"
+    >
+      <el-form ref="bankCardForm" :model="bankCardForm" label-width="80px">
+        <el-form-item label="持卡人">
+          <el-input v-model="bankCardForm.username"></el-input>
+        </el-form-item>
+        <el-form-item label="卡号">
+          <el-input v-model="bankCardForm.cardNumber"></el-input>
+        </el-form-item>
+      </el-form>
+      <div>
+        银行卡绑定成功后,您将享受以下服务:
+      </div>
+      <div>①可以申请平台的收益</div>
+      <div>②可以申请平台的收益</div>
+      <div>③可以申请平台的收益</div>
+      <span slot="footer" class="dialog-footer">
+    <el-button @click="addBankCard = false">取 消</el-button>
+    <el-button type="primary" @click="addBankCard = false">确认添加</el-button>
+  </span>
+    </el-dialog>
+  </div>
+
+</template>
+
+<script>
+  import BankCard from './BankCard'
+  export default {
+    name: "MyBankCard",
+    components:{
+      BankCard
+    },
+    data(){
+      return {
+        addBankCard: false,
+        form: {
+          name: '',
+          number:'',
+          institution:'',
+          date:'',
+          isPublic:''
+        },
+        bankCardForm:{
+          username:'',
+          cardNumber:''
+        }
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .right-qualification {
+    padding: 20px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 1px 6px 0px rgba(8, 6, 6, 0.13);
+
+    .right-qualification-title {
+      padding: 10px;
+      border-bottom: 1px solid #ccc;
+      margin-bottom: 20px;
+    }
+  }
+</style>

+ 88 - 0
src/pages/UserCenter/MyQualification.vue

@@ -0,0 +1,88 @@
+<template>
+  <div>
+    <div class="right-qualification">
+      <div class="right-qualification-title">
+        <span style="font-size: 18px;font-weight: bold">我的资质</span>
+        <el-button type="primary" size="mini" class="pull-right" @click="addQualification = true">添加</el-button>
+      </div>
+      <el-row :gutter="15" style="margin-bottom: 15px">
+        <el-col :span="8">
+          <QualificationCard></QualificationCard>
+        </el-col>
+        <el-col :span="8">
+          <QualificationCard></QualificationCard>
+        </el-col>
+        <el-col :span="8">
+          <QualificationCard></QualificationCard>
+        </el-col>
+      </el-row>
+    </div>
+    <el-dialog
+      title="新增资质"
+      :visible.sync="addQualification"
+      width="30%"
+    >
+      <el-form ref="form" :model="form" label-width="80px">
+        <el-form-item label="证书名称">
+          <el-input v-model="form.name"></el-input>
+        </el-form-item>
+        <el-form-item label="证书编号">
+          <el-input v-model="form.number"></el-input>
+        </el-form-item>
+        <el-form-item label="发证机构">
+          <el-input v-model="form.institution"></el-input>
+        </el-form-item>
+        <el-form-item label="发证时间">
+          <el-input v-model="form.date"></el-input>
+        </el-form-item>
+        <el-form-item label="是否公开">
+          <el-radio-group v-model="form.isPublic">
+            <el-radio label="公开"></el-radio>
+            <el-radio label="不公开"></el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+    <el-button @click="addQualification = false">取 消</el-button>
+    <el-button type="primary" @click="addQualification = false">确 定</el-button>
+  </span>
+    </el-dialog>
+  </div>
+
+</template>
+
+<script>
+  import QualificationCard from './QualificationCard'
+  export default {
+    name: "MyQualification",
+    components:{
+      QualificationCard
+    },
+    data(){
+      return {
+        addQualification: false,
+        form: {
+          name: '',
+          number:'',
+          institution:'',
+          date:'',
+          isPublic:''
+        }
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .right-qualification {
+    padding: 20px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 1px 6px 0px rgba(8, 6, 6, 0.13);
+
+  .right-qualification-title {
+    padding: 10px;
+    border-bottom: 1px solid #ccc;
+    margin-bottom: 20px;
+  }
+  }
+</style>

+ 74 - 0
src/pages/UserCenter/PhoneBinding.vue

@@ -0,0 +1,74 @@
+<template>
+  <div>
+    <div class="right-modifyPsw">
+      <div class="right-modifyPsw-title">
+        <span style="font-size: 18px;font-weight: bold">手机绑定</span>
+      </div>
+      <div style="background-color: rgba(233,239,249,1);padding: 10px;margin-bottom: 30px">
+        <img src="../../assets/img/phoneBinding.png"></img>
+        <span style="font-size: 16px">您已绑定的手机号码是138****1380</span>
+        <el-button type="primary" plain size="mini">修改号码</el-button>
+    </div>
+      <div style="background-color: rgba(233,239,249,1);padding: 10px">
+        <img src="../../assets/img/phoneUnbinding.png"></img>
+        <span style="font-size: 16px">您未绑定的手机号码是138****1380</span>
+          <el-button type="danger" plain size="mini">立即绑定</el-button>
+      </div>
+      <el-steps :active="active" process-status="finish" style="margin-bottom: 20px">
+        <el-step title="验证原手机"></el-step>
+        <el-step title="绑定新手机"></el-step>
+        <el-step title="完成绑定"></el-step>
+      </el-steps>
+
+      <el-form  label-width="80px"  v-if="active===0">
+        <el-form-item label="原手机号">
+          <span v-model="phoneBindingForm.phone">135****6699</span>
+        </el-form-item>
+        <el-form-item label="验证码">
+          <span v-model="phoneBindingForm.phone">135****6699</span>
+        </el-form-item>
+      </el-form>
+
+      <el-form  label-width="80px"  v-if="active===1">
+        <el-form-item label="新手机号">
+          <el-input v-model="phoneBindingForm.phone"></el-input>
+        </el-form-item>
+        <el-form-item label="验证码">
+          <span v-model="phoneBindingForm.phone">135****6699</span>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<script>
+
+  export default {
+    name: "PhoneBinding",
+    data() {
+      return {
+        active: 1,
+        phoneBindingForm:{
+          phone:''
+        }
+      }
+    },
+    methods: {
+
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .right-modifyPsw {
+    padding: 20px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 1px 6px 0px rgba(8, 6, 6, 0.13);
+
+    .right-modifyPsw-title {
+      padding: 10px;
+      border-bottom: 1px solid #ccc;
+      margin-bottom: 20px;
+    }
+  }
+</style>

+ 51 - 0
src/pages/UserCenter/QualificationCard.vue

@@ -0,0 +1,51 @@
+<template>
+  <div class="qualification-card">
+    <div class="qualification-card-title" style="padding: 10px;height:28px">
+      <span class="pull-left" style="font-size: 16px;font-weight: bold;line-height: 28px">信息安全工程师</span>
+      <el-button type="primary" plain class="pull-right" size="mini">编辑</el-button>
+    </div>
+    <div class="qualification-card-detail-wrapper">
+      <div class="qualification-card-detail">
+        <div class="qualification-card-detail-title">证书编号:</div>
+        <div class="qualification-card-detail-info">314020191144011401528</div>
+      </div>
+      <div class="qualification-card-detail">
+        <div class="qualification-card-detail-title">发证机关:</div>
+        <div class="qualification-card-detail-info">314020191144011401528</div>
+      </div>
+      <div class="qualification-card-detail">
+        <div class="qualification-card-detail-title">发证时间:</div>
+        <div class="qualification-card-detail-info">2020-06-30</div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: "QualifucationCard"
+  }
+</script>
+
+<style scoped lang="less">
+.qualification-card {
+  /*width:285px;*/
+  height:160px;
+  background:rgba(255,255,255,1);
+  box-shadow:0px 1px 6px 0px rgba(8,6,6,0.13);
+  .qualification-card-detail-wrapper {
+    padding: 10px;
+    .qualification-card-detail{
+      display: flex;
+      margin-bottom: 5px;
+      .qualification-card-detail-title {
+        font-size: 14px;
+      }
+      .qualification-card-detail-info {
+        color: rgba(153, 153, 153, 1);
+        font-size: 14px;
+      }
+    }
+  }
+}
+</style>

+ 99 - 0
src/pages/UserCenter/UserCenter.vue

@@ -0,0 +1,99 @@
+<template>
+  <div class="user-center container">
+    <el-row :gutter="20">
+      <el-col :span="5">
+        <div class="left-menu">
+          <div class="menu-block">
+            <div class="menu-block-title">
+              <img src="../../assets/img/user-info.png">个人资料
+            </div>
+            <div class="menu-item"><router-link to="/personal/mine">基本信息</router-link></div>
+            <div class="menu-item"><router-link to="/personal/qualification">我的资质</router-link></div>
+            <div class="menu-item"><router-link to="/personal/bankCard">我的银行卡</router-link></div>
+          </div>
+          <div class="menu-block">
+            <div class="menu-block-title">
+              <img src="../../assets/img/count-security.png">账号安全
+            </div>
+            <div class="menu-item"><router-link to="/personal/modifyPsw">修改登陆密码</router-link></div>
+            <div class="menu-item"><router-link to="/personal/phoneBinding">手机绑定</router-link></div>
+            <div class="menu-item"><router-link to="/personal/mailBinding">邮箱绑定</router-link></div>
+            <div class="menu-item"><router-link to="/personal/authentication">身份认证</router-link></div>
+          </div>
+          <div class="menu-block">
+            <div class="menu-block-title">
+              <img src="../../assets/img/project-manager.png">项目管理
+            </div>
+            <div class="menu-item">我的订单</div>
+          </div>
+        </div>
+      </el-col>
+      <el-col :span="19">
+        <router-view></router-view>
+      </el-col>
+    </el-row>
+
+  </div>
+</template>
+
+<script>
+  import QualificationCard from './QualificationCard'
+
+  export default {
+    name: "UserCenter",
+    components: {
+      QualificationCard
+    },
+    data() {
+      return {
+
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .user-center {
+    margin-top: 15px;
+
+    .left-menu {
+      /*height:827px;*/
+      background: rgba(255, 255, 255, 1);
+      box-shadow: 0px 1px 6px 0px rgba(8, 6, 6, 0.13);
+      padding: 20px 30px;
+
+      .menu-block {
+        margin-bottom: 20px;
+
+        .menu-block-title {
+          font-size: 18px;
+          font-family: Source Han Sans CN;
+          font-weight: bold;
+
+          img {
+            margin-right: 5px;
+          }
+        }
+
+        .menu-item {
+          font-size: 16px;
+          font-family: Source Han Sans CN;
+          font-weight: 400;
+          margin: 3px 0 3px 28px;
+        }
+      }
+    }
+
+    .right-modifyPsw {
+      padding: 20px;
+      background: rgba(255, 255, 255, 1);
+      box-shadow: 0px 1px 6px 0px rgba(8, 6, 6, 0.13);
+
+      .right-modifyPsw-title {
+        padding: 10px;
+        border-bottom: 1px solid #ccc;
+        margin-bottom: 20px;
+      }
+    }
+  }
+</style>

+ 225 - 0
src/pages/UserCenter/individualAuth.vue

@@ -0,0 +1,225 @@
+<template>
+  <div class="right-modifyPsw">
+    <div class="right-modifyPsw-title">
+      <span style="font-size: 18px;font-weight: bold">个人认证</span>
+    </div>
+    <div class="individual-steps-wrapper">
+      <el-steps :active="active" process-status="finish" style="margin-bottom: 20px;width: 300px">
+        <el-step title="填写认证信息"></el-step>
+        <el-step title="认证结果"></el-step>
+      </el-steps>
+  </div>
+    <el-form ref="form" :model="form" label-width="120px" style="width: 70%">
+    <el-form-item label="真实姓名">
+      <el-input v-model="individualForm.username" placeholder="请输入您的姓名,需与身份证保持一致"></el-input>
+    </el-form-item>
+    <el-form-item label="身份证号码">
+      <el-input v-model="individualForm.idnumber" placeholder="身份证前后不能有空格"></el-input>
+    </el-form-item>
+      <el-form-item label="性别">
+        <el-radio-group v-model="individualForm.gender">
+          <el-radio label="男"></el-radio>
+          <el-radio label="女"></el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="身份证到期时间">
+        <el-input v-model="individualForm.idDate" placeholder="请按身份证背面“有效期限”如实填写"></el-input>
+      </el-form-item>
+      <el-form-item label="家庭或单位地址">
+        <el-input v-model="individualForm.address"></el-input>
+      </el-form-item>
+    </el-form>
+    <div class="upload-wrapper">
+      <el-row style="width: 100%">
+        <el-col :span="9" style="padding-left: 30px">
+          <div>
+            <el-upload
+              class="avatar-uploader"
+              action="https://jsonplaceholder.typicode.com/posts/"
+              :show-file-list="false"
+              :on-success="handleAvatarSuccess"
+              :before-upload="beforeAvatarUpload">
+              <img v-if="imageUrl" :src="imageUrl" class="avatar">
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+            <div style="text-align: center">手持身份证正面照</div>
+          </div>
+        </el-col>
+        <el-col :span="15">
+          <div class="authentication-detail">
+            <div class="authentication-detail-title">证件要求</div>
+            <el-row>
+              <el-col :span="11">
+                <div class="idcard-example1"></div>
+              </el-col>
+              <el-col :span="13" style="padding-left: 10px">
+                <ul class="authentication-detail-list">
+                  <li>请上传本人<span class="authentication-detail-list-blue">手持</span>身份证正面头部照片和上 半身照片</li>
+                  <li>照片为免冠、未化妆的数码照片原始图片<span class="authentication-detail-list-blue">请勿用任何软件编辑修改</span></li>
+                  <li>必须看清证件信息,且证件信息不能被遮挡, 持证人五官清晰可见</li>
+                  <li>仅支持.jpg .bmp .png .gif的图片格式,图 片大小不超过3M</li>
+                  <li>核实手持证件与原件方向一致,对焦身份证 进行拍照</li>
+                  <li>您提供的照片众测服务平台将予以保护,不 会用于其他用途</li>
+                </ul>
+                <a class="authentication-detail-list-blue">实名认证帮助></a>
+              </el-col>
+            </el-row>
+          </div>
+        </el-col>
+      </el-row>
+      <el-row style="width: 100%">
+        <el-col :span="9" style="padding-left: 30px">
+          <div>
+            <el-upload
+              class="avatar-uploader"
+              action="https://jsonplaceholder.typicode.com/posts/"
+              :show-file-list="false"
+              :on-success="handleAvatarSuccess"
+              :before-upload="beforeAvatarUpload">
+              <img v-if="imageUrl" :src="imageUrl" class="avatar">
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+            <div style="text-align: center">身份证反面照</div>
+          </div>
+        </el-col>
+        <el-col :span="15">
+          <div class="authentication-detail">
+            <div style="height: 40px;width: 100%"></div>
+            <el-row>
+              <el-col :span="11">
+                <div class="idcard-example2"></div>
+              </el-col>
+              <el-col :span="13" style="padding-left: 10px">
+                <ul class="authentication-detail-list">
+                  <li>必须看清证件信息,且证件信息不能被遮挡</li>
+                  <li>仅支持.jpg .bmp .png .gif的图片格式,图 片大小不超过3M</li>
+                  <li>您提供的照片众测服务平台将予以保护,不 会用于其他用途</li>
+                </ul>
+              </el-col>
+            </el-row>
+          </div>
+        </el-col>
+      </el-row>
+
+    </div>
+    <div class="enterprise-brn-wrapper">
+      <button class="enterprise-btn previousBtn">上一步</button>
+      <button class="enterprise-btn nextBtn">提交审核</button>
+    </div>
+
+  </div>
+</template>
+
+<script>
+  export default {
+    name: "IndividualAuth",
+    data() {
+      return {
+        active: 0,
+        imageUrl: '',
+      individualForm:{}
+      }
+    },
+    methods:{
+      handleAvatarSuccess(res, file) {
+        this.imageUrl = URL.createObjectURL(file.raw);
+      },
+      beforeAvatarUpload(file) {
+        const isJPG = file.type === 'image/jpeg';
+        const isLt2M = file.size / 1024 / 1024 < 2;
+
+        if (!isJPG) {
+          this.$message.error('上传头像图片只能是 JPG 格式!');
+        }
+        if (!isLt2M) {
+          this.$message.error('上传头像图片大小不能超过 2MB!');
+        }
+        return isJPG && isLt2M;
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+
+  .right-modifyPsw {
+    padding: 20px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 1px 6px 0px rgba(8, 6, 6, 0.13);
+
+    .right-modifyPsw-title {
+      padding: 10px;
+      border-bottom: 1px solid #ccc;
+      margin-bottom: 20px;
+    }
+
+    .individual-steps-wrapper {
+      display: flex;
+      justify-content: center;
+    }
+    .upload-wrapper {
+      /*display: flex;*/
+      /*padding: 0 30px;*/
+
+      .authentication-detail {
+        padding-left:20px;
+        border-left: 1px solid rgba(220,220,220,1);
+        .authentication-detail-title {
+          font-size:16px;
+          font-family:Source Han Sans CN;
+          font-weight:600;
+          border-bottom: 1px dashed rgba(220,220,220,1);
+          margin-bottom: 10px;
+          padding-bottom: 5px;
+        }
+        .idcard-example1 {
+          height: 140px;
+          background-image: url("../../assets/img/idcard-example1.png");
+          background-size: 100% 100%;
+        }
+        .idcard-example2 {
+          height: 140px;
+          background-image: url("../../assets/img/idcard-example2.png");
+          background-size: 100% 100%;
+        }
+      }
+      .authentication-detail-list {
+        list-style-type: none;
+        padding-left: 0;
+        font-size:12px;
+        font-family:Source Han Sans CN;
+        font-weight:400;
+        color:rgba(153,153,153,1);
+        li:before{
+          content: "\2022";
+          color: rgba(153,153,153,1);
+          font-size: 16px;
+          margin-right: 10px;
+        }
+        .authentication-detail-list-blue{
+          color: #148AE0;
+        }
+
+      }
+    }
+
+    .enterprise-brn-wrapper {
+      margin-top: 40px;
+      display: flex;
+      justify-content: center;
+      .enterprise-btn{
+        border: 1px solid rgba(0,118,203,1);
+        width: 150px;
+        background-color: white;
+        color:rgba(0,118,203,1) ;
+        padding: 10px;
+        margin: 0 30px;
+      }
+      .nextBtn {
+        background-color:rgba(0,118,203,1);
+        color: white;
+      }
+    }
+
+  }
+</style>

+ 151 - 0
src/router/index.js

@@ -17,6 +17,7 @@ import AgencyAdd from '@/components/cheat/AgencyAdd'
 Vue.use(Router)
 Vue.use(Router)
 
 
 export default new Router({
 export default new Router({
+  linkActiveClass: 'active',
   routes: [
   routes: [
     {
     {
       path: '/',
       path: '/',
@@ -260,7 +261,157 @@ export default new Router({
       meta: {
       meta: {
         title: '',
         title: '',
         requireAuth: false,
         requireAuth: false,
+      }
+    },
+    {
+      path: '/expert/list',
+      name: 'ExpertList',
+      component: resolve => require(['@/pages/HomepageSearch/ExpertList.vue'], resolve),
+      meta: {
+        title: '',
+        requireAuth: false,
+      }
+    },
+    {
+      path: '/agency/list',
+      name: 'AgencyList',
+      component: resolve => require(['@/pages/HomepageSearch/AgencyList.vue'], resolve),
+      meta: {
+        title: '',
+        requireAuth: false,
+      }
+    },
+    {
+      path: '/agency/resident/list',
+      name: 'AgencyResidentList',
+      component: resolve => require(['@/pages/HomepageSearch/AgencyResidentList.vue'], resolve),
+      meta: {
+        title: '',
+        requireAuth: false,
+      }
+    },
+    {
+      path: '/competition/list',
+      name: 'CompetitionList',
+      component: resolve => require(['@/pages/HomepageSearch/CompetitionList.vue'], resolve),
+      meta: {
+        title: '',
+        requireAuth: false,
+      }
+    },
+    {
+      path: '/crowd/list',
+      name: 'CrowdList',
+      component: resolve => require(['@/pages/HomepageSearch/CrowdList.vue'], resolve),
+      meta: {
+        title: '',
+        requireAuth: false,
+      }
+    },
+    {
+      path: '/user/list',
+      name: 'UserList',
+      component: resolve => require(['@/pages/HomepageSearch/UserList.vue'], resolve),
+      meta: {
+        title: '',
+        requireAuth: false,
+      }
+    },
+    {
+      path: '/resource/list',
+      name: 'ResourceList',
+      component: resolve => require(['@/pages/HomepageSearch/ResourceList.vue'], resolve),
+      meta: {
+        title: '',
+        requireAuth: false,
+      }
+    },
+    {
+      path: '/agency/detail',
+      name: 'AgencyDetail',
+      component: resolve => require(['@/pages/DetailPage/AgencyDetail.vue'], resolve),
+      meta: {
+        title: '',
+        requireAuth: false,
+      }
+    },
+    {
+      path: '/user/detail',
+      name: 'UserDetail',
+      component: resolve => require(['@/pages/DetailPage/UserDetail.vue'], resolve),
+      meta: {
+        title: '',
+        requireAuth: false,
+      }
+    },
+    {
+      path: '/resource/detail',
+      name: 'ResourceDetail',
+      component: resolve => require(['@/pages/DetailPage/ResourceDetail.vue'], resolve),
+      meta: {
+        title: '',
+        requireAuth: false,
+      }
+    },
+    {
+      path: '/expert/detail',
+      name: 'ExpertDetail',
+      component: resolve => require(['@/pages/DetailPage/ExpertDetail.vue'], resolve),
+      meta: {
+        title: '',
+        requireAuth: false,
+      }
+    },
+    {
+      path: '/personal',
+      name: 'UserCenter',
+      component: resolve => require(['@/pages/UserCenter/UserCenter.vue'], resolve),
+      meta: {
+        title: '',
+        requireAuth: false,
       },
       },
+      children: [
+        {
+          path: '/personal/mine',
+          component: resolve => require(['@/pages/UserCenter/Mine.vue'], resolve),
+        },
+        {
+          path: '/personal/qualification',
+          component: resolve => require(['@/pages/UserCenter/MyQualification.vue'], resolve),
+        },
+        {
+          path: '/personal/bankCard',
+          component: resolve => require(['@/pages/UserCenter/MyBankCard.vue'], resolve),
+        },
+        {
+          path: '/personal/modifyPsw',
+          component: resolve => require(['@/pages/UserCenter/ModifyPsw.vue'], resolve),
+        },
+        {
+          path: '/personal/phoneBinding',
+          component: resolve => require(['@/pages/UserCenter/PhoneBinding.vue'], resolve),
+        },
+        {
+          path: '/personal/mailBinding',
+          component: resolve => require(['@/pages/UserCenter/MailBinding.vue'], resolve),
+        },
+        {
+          path: '/personal/authentication',
+          component: resolve => require(['@/pages/UserCenter/Authentication.vue'], resolve),
+        },
+        {
+          path: '/personal/authentication/enterprise',
+          component: resolve => require(['@/pages/UserCenter/EnterpriseAuth.vue'], resolve),
+        },
+        {
+          path: '/personal/authentication/individual',
+          component: resolve => require(['@/pages/UserCenter/IndividualAuth.vue'], resolve),
+        },
+        {
+          path: '',
+          redirect: '/personal/mine'
+        }
+      ]
     },
     },
   ]
   ]
 })
 })

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 1
src/style/main.scss


+ 1 - 1
tool4deploy-test/Dockerfile

@@ -8,4 +8,4 @@ RUN chmod -R 777 /usr/share/nginx/html
 
 
 EXPOSE 80
 EXPOSE 80
 
 
-CMD ["nginx", "-g", "daemon off;"]
+CMD ["nginx", "-g", "daemon off;"]

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott