瀏覽代碼

个人中心修改

sunjh 6 年之前
父節點
當前提交
2c8b476d3e
共有 6 個文件被更改,包括 251 次插入79 次删除
  1. 17 4
      package-lock.json
  2. 1 0
      package.json
  3. 135 52
      src/components/Mine.vue
  4. 83 18
      src/components/commons/Header.vue
  5. 13 5
      src/components/task/Task.vue
  6. 2 0
      src/main.js

+ 17 - 4
package-lock.json

@@ -538,7 +538,7 @@
     },
     "axios": {
       "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=",
       "requires": {
         "follow-redirects": "1.5.10",
@@ -547,7 +547,7 @@
       "dependencies": {
         "debug": {
           "version": "3.1.0",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz",
+          "resolved": "http://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz",
           "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
           "requires": {
             "ms": "2.0.0"
@@ -555,7 +555,7 @@
         },
         "follow-redirects": {
           "version": "1.5.10",
-          "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.10.tgz",
+          "resolved": "http://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.10.tgz",
           "integrity": "sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=",
           "requires": {
             "debug": "=3.1.0"
@@ -563,7 +563,7 @@
         },
         "is-buffer": {
           "version": "2.0.3",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.3.tgz",
+          "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.3.tgz",
           "integrity": "sha1-Ts8/z3ScvR5HJonhCaxmJhol5yU="
         }
       }
@@ -3152,6 +3152,14 @@
         "safer-buffer": "^2.1.0"
       }
     },
+    "echarts": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npm.taobao.org/echarts/download/echarts-4.2.1.tgz",
+      "integrity": "sha1-mo6jsDNU+G+CTZdiXDNM8Wll7wM=",
+      "requires": {
+        "zrender": "4.0.7"
+      }
+    },
     "ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -12487,6 +12495,11 @@
           "dev": true
         }
       }
+    },
+    "zrender": {
+      "version": "4.0.7",
+      "resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.0.7.tgz",
+      "integrity": "sha1-Fa6WCCL17+1BCZXTflEH/j3hDm0="
     }
   }
 }

+ 1 - 0
package.json

@@ -12,6 +12,7 @@
   },
   "dependencies": {
     "axios": "latest",
+    "echarts": "^4.2.1",
     "element-ui": "^2.11.0",
     "font-awesome": "^4.7.0",
     "mockjs": "^1.0.1-beta3",

+ 135 - 52
src/components/Mine.vue

@@ -1,56 +1,58 @@
 <template>
   <div class="mine-container">
-    <div class="mine-top-wrapper">
-      <el-row :gutter="0" style="height:100%">
-        <el-col :span="16">
-          <div class="advertise-imgs">
-            <img
-              src="http://sinastorage.com/storage.miaosha.sina.com.cn/products/201903/e496d11b3d74cf660c286fbd5ab8d0bb.png"
-            >
-          </div>
-        </el-col>
-        <el-col :span="8">
-          <div class="user-banner">
-            <p class="head">
-              <a href="javascript:;" class="login-link">
-                <img :src="user == null || user.userVO.photoUrl == null?defaultValue.image:user.userVO.photoUrl" class="user-img">
-                <span class="vertify hide"></span>
-              </a>
-            </p>
-            <div class="username_box">
-              <div class="username_icon username_"></div>
-              <span class="username">{{user == null?'...':user.userVO.name}}</span>
-            </div>
-            <!--<p class="name">-->
-            <!--<a href="javascript:;" class="login-btn btn btn-medium btn-info">登录</a>-->
-            <!--<a-->
-            <!--href="https://login.sina.com.cn/signup/signup?entry=tech"-->
-            <!--class="register-btn btn btn-medium btn-info"-->
-            <!--target="_blank"-->
-            <!--&gt;注册</a>-->
-            <!--</p>-->
-            <!--<p class="scores">-->
-            <!--<a href="/rule/merit" target="_blank">-->
-            <!--积分-->
-            <!--<em class="num1">{{user.score}}</em>-->
-            <!--</a>-->
-            <!--<span class="line">|</span>-->
-            <!--<a href="/rule/merit" target="_blank">-->
-            <!--威望-->
-            <!--<em class="num2">{{user.prestige}}</em>-->
-            <!--</a>-->
-            <!--</p>-->
-            <p>
-              <router-link :to="{ name: 'AuthenticationIndex'}">
-                <div class="btn btn-medium">实名认证</div>
-              </router-link>
-            </p>
-          </div>
-        </el-col>
-      </el-row>
-    </div>
-    <div class="mine-body">
-      <el-tabs tabPosition="top" type="card">
+    <div id="myChart" style="width: 100%;height: 400px"></div>
+    <!--<div class="mine-top-wrapper">-->
+    <!--<el-row :gutter="0" style="height:100%">-->
+    <!--<el-col :span="16">-->
+    <!--<div class="advertise-imgs">-->
+    <!--<img-->
+    <!--src="http://sinastorage.com/storage.miaosha.sina.com.cn/products/201903/e496d11b3d74cf660c286fbd5ab8d0bb.png"-->
+    <!--&gt;-->
+    <!--</div>-->
+    <!--</el-col>-->
+    <!--<el-col :span="8">-->
+    <!--<div class="user-banner">-->
+    <!--<p class="head">-->
+    <!--<a href="javascript:;" class="login-link">-->
+    <!--<img :src="user == null || user.userVO.photoUrl == null?defaultValue.image:user.userVO.photoUrl"-->
+    <!--class="user-img">-->
+    <!--<span class="vertify hide"></span>-->
+    <!--</a>-->
+    <!--</p>-->
+    <!--<div class="username_box">-->
+    <!--<div class="username_icon username_"></div>-->
+    <!--<span class="username">{{user == null?'...':user.userVO.name}}</span>-->
+    <!--</div>-->
+    <!--&lt;!&ndash;<p class="name">&ndash;&gt;-->
+    <!--&lt;!&ndash;<a href="javascript:;" class="login-btn btn btn-medium btn-info">登录</a>&ndash;&gt;-->
+    <!--&lt;!&ndash;<a&ndash;&gt;-->
+    <!--&lt;!&ndash;href="https://login.sina.com.cn/signup/signup?entry=tech"&ndash;&gt;-->
+    <!--&lt;!&ndash;class="register-btn btn btn-medium btn-info"&ndash;&gt;-->
+    <!--&lt;!&ndash;target="_blank"&ndash;&gt;-->
+    <!--&lt;!&ndash;&gt;注册</a>&ndash;&gt;-->
+    <!--&lt;!&ndash;</p>&ndash;&gt;-->
+    <!--&lt;!&ndash;<p class="scores">&ndash;&gt;-->
+    <!--&lt;!&ndash;<a href="/rule/merit" target="_blank">&ndash;&gt;-->
+    <!--&lt;!&ndash;积分&ndash;&gt;-->
+    <!--&lt;!&ndash;<em class="num1">{{user.score}}</em>&ndash;&gt;-->
+    <!--&lt;!&ndash;</a>&ndash;&gt;-->
+    <!--&lt;!&ndash;<span class="line">|</span>&ndash;&gt;-->
+    <!--&lt;!&ndash;<a href="/rule/merit" target="_blank">&ndash;&gt;-->
+    <!--&lt;!&ndash;威望&ndash;&gt;-->
+    <!--&lt;!&ndash;<em class="num2">{{user.prestige}}</em>&ndash;&gt;-->
+    <!--&lt;!&ndash;</a>&ndash;&gt;-->
+    <!--&lt;!&ndash;</p>&ndash;&gt;-->
+    <!--<p>-->
+    <!--<router-link :to="{ name: 'AuthenticationIndex'}">-->
+    <!--<div class="btn btn-medium">实名认证</div>-->
+    <!--</router-link>-->
+    <!--</p>-->
+    <!--</div>-->
+    <!--</el-col>-->
+    <!--</el-row>-->
+    <!--</div>-->
+    <div class="mine-body" style="text-align: center;">
+      <el-tabs  tabPosition="top" v-loading="loading" style="width: 90%;margin-left: 5%">
         <el-tab-pane v-if="rolesPermissions.isAgency" label="未完成任务">
           <span v-if="unFinishedTaskList == null || unFinishedTaskList.length == 0"> 暂无任务 </span>
           <task-item v-if="unFinishedTaskList != null || unFinishedTaskList.length > 0"
@@ -91,6 +93,7 @@ import Http from '@/js/http.js'
 import Apis from '@/js/api.js'
 import {notify} from '@/constants/index'
 import {defaultValue, getRolesPermissions, storageGet} from '@/js/index'
+import echarts from 'echarts'
 
 export default {
   name: 'Mine',
@@ -140,6 +143,7 @@ export default {
       this.setUserInfo()
       this.setRolesPermissions()
       this.loadData()
+      this.setEcharts()
       // storageGet('user').then((res)=>{
       //   this.user = res;
       //   this.setRolesPermissions()
@@ -148,6 +152,7 @@ export default {
 
     },
     loadData () {
+      this.showLoading()
       Http.get(Apis.PAGE.MY_CROWD_TEST_PAGE.replace('{userId}', this.user.userVO.id)).then((res) => {
         if (res.unfinishedTasks != null && res.unfinishedTasks.length > 0) {
           this.unFinishedTaskList = res.unfinishedTasks
@@ -164,9 +169,13 @@ export default {
         if (res.acceptableProjects != null && res.acceptableProjects.length > 0) {
           this.acceptableProjects = res.acceptableProjects
         }
+        this.hideLoading()
         // if (res.userVO != null && res.userVO.length > 0) {
         //   this.user = res.userVO
         // }
+      }).catch((error)=>{
+        this.hideLoading()
+        notify('error','加载失败:'+error.data)
       })
     },
     setUserInfo () {
@@ -174,8 +183,82 @@ export default {
     },
     setRolesPermissions () {
       this.rolesPermissions = storageGet('rolesPermissions')
+    },
+    setEcharts () {
+      // 基于准备好的dom,初始化echarts实例
+      let myChart = echarts.init(document.getElementById('myChart'))
+      // 绘制图表
+      var option = {
+        title: {
+          text: ''
+        },
+        tooltip: {
+          trigger: 'axis'
+        },
+        legend: {
+          data:['接收项目数量','完成项目数量','接收任务数量','完成任务数量','发布项目数量']
+        },
+        grid: {
+          left: '5%',
+          right: '10%',
+          bottom: '3%',
+          top:'10%',
+          containLabel: true
+        },
+        toolbox: {
+          feature: {
+            saveAsImage: {}
+          }
+        },
+        xAxis: {
+          type: 'category',
+          boundaryGap: false,
+          data: ['2019年5月','2019年6月','2019年7月','2019年8月','2019年9月','2019年10月','2019年11月']
+        },
+        yAxis: {
+          type: 'value'
+        },
+        series: [
+          {
+            name:'接收项目数量',
+            type:'line',
+            stack: '总量',
+            data:[120, 132, 101, 134, 90, 230, 210]
+          },
+          {
+            name:'完成项目数量',
+            type:'line',
+            stack: '总量',
+            data:[220, 182, 191, 234, 290, 330, 310]
+          },
+          {
+            name:'接收任务数量',
+            type:'line',
+            stack: '总量',
+            data:[150, 232, 201, 154, 190, 330, 410]
+          },
+          {
+            name:'完成任务数量',
+            type:'line',
+            stack: '总量',
+            data:[320, 332, 301, 334, 390, 330, 320]
+          },
+          {
+            name:'发布项目数量',
+            type:'line',
+            stack: '总量',
+            data:[820, 932, 901, 934, 1290, 1330, 1320]
+          }
+        ]
+      };
+      myChart.setOption(option)
+    },
+    showLoading(){
+      this.loading = true
+    },
+    hideLoading(){
+      this.loading = false
     }
-
   },
   created: function () {
 

+ 83 - 18
src/components/commons/Header.vue

@@ -1,23 +1,47 @@
 <template>
-  <nav class="navbar" v-loading.fullscreen.lock="fullScreenLoading" >
-    <div class="container">
-      <div class="navbar-translate">
-        <a class="navbar-brand">众测</a>
-        <button
-          type="button"
-          data-toggle="collapse"
-          aria-expanded="false"
-          aria-label="Toggle navigation"
-          @click="openNavBarFunc"
-          v-bind:class="['navbar-toggler',{ 'open-fixed': openNavBar}]"
-        >
-          <span class="navbar-toggler-icon"></span>
-          <span class="navbar-toggler-icon"></span>
-          <span class="navbar-toggler-icon"></span>
-        </button>
+  <nav class="navbar" v-loading.fullscreen.lock="fullScreenLoading">
+    <div class="container" style="min-width: 1100px">
+      <!--<div class="navbar-translate" style="text-align: center;vertical-align: middle;">-->
+      <!--<span>-->
+      <!--<a href="javascript:;">-->
+      <!--<img :src="defaultValue.image" style="height: 50px;object-fit: contain;" >-->
+      <!--</a>-->
+      <!--</span>-->
+      <!--<span  style="margin-bottom: 20px"><a style="font-size: 25px">众测</a></span>-->
+      <!--<button-->
+      <!--type="button"-->
+      <!--data-toggle="collapse"-->
+      <!--aria-expanded="false"-->
+      <!--aria-label="Toggle navigation"-->
+      <!--@click="openNavBarFunc"-->
+      <!--v-bind:class="['navbar-toggler',{ 'open-fixed': openNavBar}]"-->
+      <!--&gt;-->
+      <!--<span class="navbar-toggler-icon"></span>-->
+      <!--<span class="navbar-toggler-icon"></span>-->
+      <!--<span class="navbar-toggler-icon"></span>-->
+      <!--</button>-->
+      <!--</div>-->
+      <div style="margin-left: -100px">
+        <ul class="navbar-nav ml-auto">
+          <li class="dropdown nav-item">
+            <router-link to="/home">
+              <a data-toggle="dropdown">
+                <img style="height: 50px;padding-top: 10px" :src="defaultValue.image">
+              </a>
+            </router-link>
+          </li>
+          <li class="dropdown nav-item">
+            <router-link to="/home">
+              <a class="dropdown-toggle nav-link" data-toggle="dropdown">
+                <span style="font-size: 20px">群智众测平台</span>
+              </a>
+            </router-link>
+          </li>
+        </ul>
       </div>
-      <div class="collapse navbar-collapse" v-bind:style="{right:openNavBar?'230px':'0'}">
+      <div style="margin-left: 0; flex: auto">
         <ul class="navbar-nav ml-auto">
+
           <li class="dropdown nav-item">
             <router-link to="/home">
               <a class="dropdown-toggle nav-link" data-toggle="dropdown">
@@ -34,6 +58,11 @@
               </a>
             </router-link>
           </li>
+
+        </ul>
+      </div>
+      <div style="margin-left: -100px">
+        <ul class="navbar-nav ml-auto">
           <li class="dropdown nav-item">
             <router-link v-if="isLogin" to="/mine">
               <a class="dropdown-toggle nav-link" data-toggle="dropdown">
@@ -55,6 +84,38 @@
               </a>
             </div>
           </li>
+          <li class="dropdown nav-item" style="margin-left: 50px">
+            <router-link v-if="isLogin" to="/mine">
+              <a data-toggle="dropdown">
+                <img class="user-img" :src="defaultValue.image">
+              </a>
+            </router-link>
+          </li>
+          <li class="dropdown nav-item">
+            <router-link v-if="isLogin" to="/mine">
+              <a class="dropdown-toggle nav-link" data-toggle="dropdown">
+                <span>{{user.userVO.name}}</span>
+              </a>
+            </router-link>
+          </li>
+          <li class="dropdown nav-item">
+            <router-link v-if="isLogin" to="/mine">
+              <div style="margin-top: 5px;margin-right: 20px">
+                <el-tooltip class="item" effect="dark" content="认证成功" placement="bottom">
+                  <el-link type="info" disabled icon="el-icon-warning-outline">已认证</el-link>
+                </el-tooltip>
+              </div>
+            </router-link>
+          </li>
+          <li class="dropdown nav-item">
+            <router-link v-if="isLogin" to="/mine">
+              <div style="margin-top: 5px;margin-right: 20px">
+                <el-tooltip class="item" effect="dark" content="点击进行认证" placement="bottom">
+                  <el-link type="danger" icon="el-icon-warning-outline">未实名认证</el-link>
+                </el-tooltip>
+              </div>
+            </router-link>
+          </li>
           <li>
             <a v-if="isLogin" class="dropdown-toggle nav-link" data-toggle="dropdown" href="#" @click="userLogout()">
               <span>登出</span>
@@ -68,16 +129,18 @@
 </template>
 
 <script>
-import {getCurrentUser, getRolesPermissions, logout, storageGet, storageSave} from '@/js/index'
+import {defaultValue, getCurrentUser, getRolesPermissions, logout, storageGet, storageSave} from '@/js/index'
 import {notify} from '@/constants/index'
 
 export default {
   name: 'header-container',
   data () {
     return {
+      user: {},
       fullScreenLoading: true,
       //loading: true,
       openNavBar: false,
+      defaultValue: defaultValue,
       userIdentity: '',
       isLogin: false,
       rolesPermissions: {}
@@ -132,6 +195,7 @@ export default {
         getCurrentUser().then((res) => {
           console.log(res)
           storageSave('user', res)
+          this.user = res
           storageSave('rolesPermissions', getRolesPermissions(res.roleList))
           console.log('用户信息加载成功')
           this.isLogin = true
@@ -146,6 +210,7 @@ export default {
           // }
         })
       } else {
+        this.user = storageGet('user')
         this.fullScreenLoading = false
         this.isLogin = true
       }

+ 13 - 5
src/components/task/Task.vue

@@ -114,14 +114,14 @@
         </el-form-item>
         <el-form-item v-if="!isModifyMode">
           <div class="btn btn-medium btn-info"
-               v-if="(rolesPermissions.isRegionManager)"
+               v-if="taskOperationControl.confirmFinish"
                @click="submitTaskRequest()">确认结束
           </div>
-          <div class="btn btn-medium btn-info" v-if="(rolesPermissions.isAgency)" @click="submitTaskRequest()">结束任务
+          <div class="btn btn-medium btn-info" v-if="taskOperationControl.finish" @click="submitTaskRequest()">结束任务
           </div>
-          <div class="btn btn-medium btn-info" v-if="(rolesPermissions.isAgency)" @click="applyTask()">接收任务</div>
-          <div class="btn btn-medium btn-info" v-if="(rolesPermissions.isRegionManager)" @click="modifyForm()">修改</div>
-          <div class="btn btn-medium btn-info" v-if="(rolesPermissions.isAgency)" @click="createReport()">上传报告</div>
+          <div class="btn btn-medium btn-info" v-if="taskOperationControl.receive" @click="applyTask()">接收任务</div>
+          <div class="btn btn-medium btn-info" v-if="taskOperationControl.update" @click="modifyForm()">修改任务</div>
+          <div class="btn btn-medium btn-info" v-if="taskOperationControl.uploadReport" @click="createReport()">上传报告</div>
           <div class="btn btn-medium" @click="toProject()">前往项目</div>
         </el-form-item>
       </el-form>
@@ -166,6 +166,13 @@ export default {
       serviceType: [],
       taskId: '',
       projectId: '',
+      taskOperationControl: {
+        confirmFinish: false,
+        finish: false,
+        receive: false,
+        update: false,
+        uploadReport: false
+      },
       task: {
         agencyId: '',
         status: '',
@@ -424,6 +431,7 @@ export default {
         this.task.requireDocUrl = res.crowdTaskVO.requirementFile
         this.task.agencyId = res.crowdTaskVO.agencyId
         this.task.status = res.crowdTaskVO.status
+        this.taskOperationControl = res.taskOperationControl
 
         this.reportList = res.crowdReportVOList
         this.hideLoading()

+ 2 - 0
src/main.js

@@ -50,6 +50,7 @@ import {
   Tag,
   TimePicker,
   TimeSelect,
+  Tooltip,
   Upload,
 } from 'element-ui'
 
@@ -152,6 +153,7 @@ Vue.use(Avatar)
 Vue.use(Pagination)
 Vue.use(Link)
 Vue.use(Loading)
+Vue.use(Tooltip)
 
 Vue.prototype.$msgbox = MessageBox
 Vue.prototype.$alert = MessageBox.alert