sunjh 6 anos atrás
pai
commit
b76a58af89

+ 24 - 11
src/components/Home.vue

@@ -1,10 +1,12 @@
 <template>
-  <div class="home-container">
+  <div class="home-container" v-loading="loading">
     <div class="home-banner-wrap">
       <el-carousel height="400px" :interval="10000" arrow="always">
         <el-carousel-item v-for="(img,index) in imgList" :key="index">
           <img class="banner_back banner_back_1" v-bind:src="img">
-          <router-link v-if="user != null &&( rolesPermissions.isAgency || rolesPermissions.isIndividualUser || rolesPermissions.isSystemAdministrator || rolesPermissions.isEnterpriseUser)" :to="{ name: 'ProjectCreate'}">
+          <router-link
+            v-if="user != null && rolesPermissions != null &&( rolesPermissions.isAgency || rolesPermissions.isIndividualUser || rolesPermissions.isSystemAdministrator || rolesPermissions.isEnterpriseUser)"
+            :to="{ name: 'ProjectCreate'}">
             <div class="btn btn-medium btn-home-apply">申请项目</div>
           </router-link>
         </el-carousel-item>
@@ -56,7 +58,8 @@ export default {
   components: {TaskCard, InstitutionRank, PersonRank},
   data () {
     return {
-      user: {},
+      user: null,
+      loading: false,
       hotTaskList: [],
       institutionRank: [],
       personRank: [],
@@ -73,9 +76,16 @@ export default {
   methods: {
     init () {
       this.setUserInfo()
-      console.log(this.user)
-      if (this.user != null)
-        this.setRolesPermissions(this.user.userVO.roleList)
+      if(this.rolesPermissions == null){
+        let NewPage = '_empty' + '?time=' + new Date().getTime()/500;
+        this.$router.push(NewPage);
+        this.$router.go(-1);
+      }
+      //this.setRolesPermissions()
+      // if (this.user != null) {
+      // if (this.user != null) {
+      //   this.setRolesPermissions()
+      // }
       this.loadData()
     },
     //加载数据
@@ -91,19 +101,22 @@ export default {
     },
     setUserInfo () {
       this.user = storageGet('user')
+      this.rolesPermissions = storageGet('rolesPermissions')
     },
-    setRolesPermissions () {
-      console.log('2start')
-      this.rolesPermissions = getRolesPermissions(this.user.userVO.roleList)
-    }
   },
   created: function () {
-    console.log('home create')
     //notify('info', 'info')
     //notify('success', 'success')
     //notify('error', 'error')
     //notify('warning', 'warning')
     //this.loadData()
+  },
+  watch:{
+    rolesPermissions (val) {
+      console.log(this.rolesPermissions)
+      console.log(val)
+      this.rolesPermissions = val
+    }
   }
 }
 </script>

+ 25 - 10
src/components/Mine.vue

@@ -61,17 +61,23 @@
           <task-item v-if="finishedTaskList != null || finishedTaskList.length > 0"
                      v-for="(item,index) in finishedTaskList" :key="index" :task="item"/>
         </el-tab-pane>
-        <el-tab-pane v-if="rolesPermissions.isRegionManager" label="我的项目">
+        <el-tab-pane v-if="rolesPermissions.isEnterpriseUser || rolesPermissions.isIndividualUser" label="我的项目">
 
-          <span v-if="appliedProjectList == null || appliedProjectList.length == 0"> 暂无项目 </span>
-          <project-item v-if="appliedProjectList != null || appliedProjectList.length > 0"
-                        v-for="(item,index) in appliedProjectList" :key="index" :projectItem="item"/>
+          <span v-if="myProjects == null || myProjects.length == 0"> 暂无项目 </span>
+          <project-item v-if="myProjects != null || myProjects.length > 0"
+                        v-for="(item,index) in myProjects" :key="index" :projectItem="item"/>
         </el-tab-pane>
-        <el-tab-pane v-if="rolesPermissions.isRegionManager" label="历史项目">
+        <el-tab-pane v-if="rolesPermissions.isRegionManager" label="处理中项目">
 
-          <span v-if="appliedProjectList == null || appliedProjectList.length == 0"> 暂无项目 </span>
-          <project-item v-if="appliedProjectList != null || appliedProjectList.length > 0"
-                        v-for="(item,index) in appliedProjectList" :key="index" :projectItem="item"/>
+          <span v-if="handlingProjects == null || handlingProjects.length == 0"> 暂无项目 </span>
+          <project-item v-if="handlingProjects != null || handlingProjects.length > 0"
+                        v-for="(item,index) in handlingProjects" :key="index" :projectItem="item"/>
+        </el-tab-pane>
+        <el-tab-pane v-if="rolesPermissions.isRegionManager" label="可接收项目">
+
+          <span v-if="acceptableProjects == null || acceptableProjects.length == 0"> 暂无项目 </span>
+          <project-item v-if="acceptableProjects != null || acceptableProjects.length > 0"
+                        v-for="(item,index) in acceptableProjects" :key="index" :projectItem="item"/>
         </el-tab-pane>
       </el-tabs>
     </div>
@@ -94,6 +100,9 @@ export default {
       unFinishedTaskList: [],
       finishedTaskList: [],
       appliedProjectList: [],
+      myProjects:[],
+      handlingProjects:[],
+      acceptableProjects:[],
       rolesPermissions: {
         isRegionManager: false,
         isIndividualUser: false,
@@ -130,8 +139,14 @@ export default {
         if (res.finishedTasks != null && res.finishedTasks.length > 0) {
           this.finishedTaskList = res.finishedTasks
         }
-        if (res.crowdProjectVOList != null && res.crowdProjectVOList.length > 0) {
-          this.appliedProjectList = res.crowdProjectVOList
+        if (res.myProjects != null && res.myProjects.length > 0) {
+          this.myProjects = res.myProjects
+        }
+        if (res.handlingProjects != null && res.handlingProjects.length > 0) {
+          this.handlingProjects = res.handlingProjects
+        }
+        if (res.acceptableProjects != null && res.acceptableProjects.length > 0) {
+          this.acceptableProjects = res.acceptableProjects
         }
         if (res.userVO != null && res.userVO.length > 0) {
           this.user = res.userVO

+ 24 - 15
src/components/commons/Header.vue

@@ -41,10 +41,11 @@
                 <span>我的众测</span>
               </a>
             </router-link>
-              <a v-if="!isLogin" class="dropdown-toggle nav-link" data-toggle="dropdown" href="http://user.mooctest.net:8081/page/login?redirect=http%3a%2f%2fcrowd.mooctest.net%2f%23%2fmine">
-                <img class="icon" src="@/assets/img/mine_icon.svg">
-                <span>登录</span>
-              </a>
+            <a v-if="!isLogin" class="dropdown-toggle nav-link" data-toggle="dropdown"
+               href="http://user.mooctest.net:8081/page/login?redirect=http%3a%2f%2fcrowd.mooctest.net%2f%23%2fmine">
+              <img class="icon" src="@/assets/img/mine_icon.svg">
+              <span>登录</span>
+            </a>
             <div class="dropdown-menu dropdown-with-icons">
               <a href="./sections.html#headers" class="dropdown-item">
                 <i class="material-icons"></i> Headers
@@ -67,17 +68,18 @@
 </template>
 
 <script>
-import {getCurrentUser, storageGet, storageSave, logout} from '@/js/index'
+import {getCurrentUser, getRolesPermissions, logout, storageGet, storageSave} from '@/js/index'
 import {notify} from '@/constants/index'
 
 export default {
   name: 'header-container',
   data () {
     return {
-      loading:true,
+      loading: true,
       openNavBar: false,
       userIdentity: '',
-      isLogin: false
+      isLogin: false,
+      rolesPermissions: {}
     }
   },
   mounted () {
@@ -91,10 +93,17 @@ export default {
     },
     setUserInfo () {
       if (storageGet('user') == null) {
+        storageSave('rolesPermissions', {
+          'isRegionManager': false,
+          'isIndividualUser': false,
+          'isEnterpriseUser': false,
+          'isAgency': false,
+          'isSystemAdministrator': false
+        })
         getCurrentUser().then((res) => {
           storageSave('user', res)
-          this.isLogin = true;
-
+          storageSave('rolesPermissions', getRolesPermissions(res.userVO.roleList))
+          this.isLogin = true
         }).catch(error => {
           console.log(error)
           if (error.status == 401) {
@@ -104,19 +113,19 @@ export default {
           }
         })
       } else {
-        this.isLogin = true;
+        this.isLogin = true
       }
     },
-    userLogout(){
+    userLogout () {
       logout()
       this.isLogin = false
-    }
+    },
   },
-  created (){
-    console.log('HEAD create')
+  created () {
   },
-  beforeMount (){
+  beforeMount () {
     this.setUserInfo()
+    console.log(this.isLogin)
   }
 }
 </script>

+ 131 - 87
src/components/project/Project.vue

@@ -14,32 +14,41 @@
           <el-input v-if="isModifyMode" v-model="project.name"></el-input>
           <span v-if="!isModifyMode">{{project.name}}</span>
         </el-form-item>
-        <el-form-item label="联系方式" prop="contact">
-          <div>
-            <el-row :gutter="2">
-              <el-col :span="2">
-                <span>联系人</span>
-              </el-col>
-              <el-col :span="10">
-                <el-input v-if="isModifyMode" v-model="project.contactName" placeholder="请输入联系人姓名"></el-input>
-                <div v-if="!isModifyMode">{{project.contactName}}</div>
-              </el-col>
-            </el-row>
-            <el-row :gutter="2">
-              <el-col :span="2">
-                <span>联系人电话</span>
-              </el-col>
-              <el-col :span="10">
-                <el-input
-                  v-if="isModifyMode"
-                  v-model="project.contactPhone"
-                  placeholder="请输入联系人电话"
-                ></el-input>
-                <div v-if="!isModifyMode">{{project.contactPhone}}</div>
-              </el-col>
-            </el-row>
-          </div>
+
+        <el-form-item label="联系人" prop="name">
+          <el-input v-if="isModifyMode" v-model="project.contactName" placeholder="请输入联系人姓名"></el-input>
+          <span v-if="!isModifyMode">{{project.contactName}}</span>
+        </el-form-item>
+        <el-form-item label="联系人电话" prop="name">
+          <el-input v-if="isModifyMode" v-model="project.contactPhone" placeholder="请输入联系人电话"></el-input>
+          <span v-if="!isModifyMode">{{project.contactPhone}}</span>
         </el-form-item>
+        <!--<el-form-item label="联系方式" prop="contact">-->
+        <!--<div>-->
+        <!--<el-row :gutter="2">-->
+        <!--<el-col :span="2">-->
+        <!--<span>联系人</span>-->
+        <!--</el-col>-->
+        <!--<el-col :span="10">-->
+        <!--<el-input v-if="isModifyMode" v-model="project.contactName" placeholder="请输入联系人姓名"></el-input>-->
+        <!--<div v-if="!isModifyMode">{{project.contactName}}</div>-->
+        <!--</el-col>-->
+        <!--</el-row>-->
+        <!--<el-row :gutter="2">-->
+        <!--<el-col :span="2">-->
+        <!--<span>联系人电话</span>-->
+        <!--</el-col>-->
+        <!--<el-col :span="10">-->
+        <!--<el-input-->
+        <!--v-if="isModifyMode"-->
+        <!--v-model="project.contactPhone"-->
+        <!--placeholder="请输入联系人电话"-->
+        <!--&gt;</el-input>-->
+        <!--<div v-if="!isModifyMode">{{project.contactPhone}}</div>-->
+        <!--</el-col>-->
+        <!--</el-row>-->
+        <!--</div>-->
+        <!--</el-form-item>-->
         <el-form-item label="平台" prop="platform">
           <el-checkbox-group v-if="isModifyMode" v-model="project.platform">
             <span v-for="(item,index) in platforms" :key="index">
@@ -66,7 +75,7 @@
         <el-form-item label="服务类型" prop="type">
           <el-checkbox-group v-if="isModifyMode" v-model="project.type">
             <span v-for="(item,index) in serviceType" :key="index">
-              <el-checkbox :label="item" name="type">{{item}}</el-checkbox>
+              <el-checkbox :label="item" name="type">{{ item }}&nbsp;&nbsp;</el-checkbox>
             </span>
           </el-checkbox-group>
           <span v-if="!isModifyMode" class="badge" v-for="item in project.type">{{item}}</span>
@@ -86,7 +95,7 @@
         <el-form-item label="项目可见性" prop="resource">
           <div v-if="!isModifyMode">
             <div v-if="project.resource=='1'">{{updateLocation(project.location)}}</div>
-            <div v-if="project.resource=='0'">{{project.institution.name}}</div>
+            <div v-if="project.resource=='0'">{{project.institution}}</div>
             <div v-if="project.resource=='2'">{{resourceType[project.resource]}}</div>
           </div>
           <el-tabs :tab-position="tabPosition" v-model="project.resource" style="max-height: 200px;"
@@ -183,57 +192,6 @@
         </el-form-item>
       </el-form>
     </div>
-
-    <!--<div class="create-body" v-if="!isModifyMode">-->
-    <!--<div class="title h2">分析需求</div>-->
-    <!--<div class="task-list">-->
-    <!--<el-table :data="analyseDemandList" style="width: 100%" max-height="400">-->
-    <!--<el-table-column prop="institution" label="承接单位" title="承接单位"></el-table-column>-->
-    <!--<el-table-column prop="feasibilityReport" sortable label="可行性分析报告">-->
-    <!--<template slot-scope="scope">-->
-    <!--<span v-if="!scope.row.feasibilityReport.url">暂无文件</span>-->
-    <!--<a-->
-    <!--:href="scope.row.feasibilityReport.url"-->
-    <!--v-if="scope.row.feasibilityReport.url"-->
-    <!--target="_blank"-->
-    <!--&gt;-->
-    <!--<i class="fa fa-file-text-o"></i>-->
-    <!--{{scope.row.feasibilityReport.name}}-->
-    <!--</a>-->
-    <!--</template>-->
-    <!--</el-table-column>-->
-    <!--<el-table-column prop="priceAuditReport" sortable label="可行性分析报告">-->
-    <!--<template slot-scope="scope">-->
-    <!--<span v-if="!scope.row.priceAuditReport.url">暂无文件</span>-->
-    <!--<a-->
-    <!--:href="scope.row.priceAuditReport.url"-->
-    <!--v-if="scope.row.priceAuditReport.url"-->
-    <!--target="_blank"-->
-    <!--&gt;-->
-    <!--<i class="fa fa-file-text-o"></i>-->
-    <!--{{scope.row.priceAuditReport.name}}-->
-    <!--</a>-->
-    <!--</template>-->
-    <!--</el-table-column>-->
-
-    <!--<el-table-column align="right" label="操作">-->
-    <!--<template slot-scope="scope">-->
-    <!--<div-->
-    <!--class="btn btn-small btn-info"-->
-    <!--@click="handleAccept(scope.$index, scope.row.id)"-->
-    <!--&gt;接受-->
-    <!--</div>-->
-    <!--<div-->
-    <!--class="btn btn-small btn-danger"-->
-    <!--@click="handleReject(scope.$index, scope.row.id)"-->
-    <!--&gt;拒绝-->
-    <!--</div>-->
-    <!--</template>-->
-    <!--</el-table-column>-->
-    <!--</el-table>-->
-    <!--</div>-->
-    <!--</div>-->
-
     <div class="create-body" v-if="!isModifyMode">
       <div class="title h2">任务列表</div>
       <div class="task-list">
@@ -243,7 +201,7 @@
           <el-table-column prop="resource" label="任务可见性">
             <template slot-scope="scope">
               <div v-if="scope.row.resource=='1'">{{updateLocation(scope.row.location)}}</div>
-              <div v-if="scope.row.resource=='0'">{{scope.row.institution.name}}</div>
+              <div v-if="scope.row.resource=='0'">{{scope.row.institution}}</div>
               <div v-if="scope.row.resource=='2'">{{resourceType[scope.row.resource]}}</div>
             </template>
           </el-table-column>
@@ -408,6 +366,12 @@ export default {
     })
   },
   watch: {
+    serviceType (val) {
+      this.serviceType = val
+    },
+    institutionArray (val) {
+      this.institutionArray = val
+    },
     'project.institution' () {
       if (this.project.institution) {
         //this.$refs.addFormProvince.resetProviceCity()
@@ -476,13 +440,34 @@ export default {
         datetime: this.project.datetime,
         usage: this.project.usage,
       }
-      console.log(newProject)
+      //console.log(newProject)
       Http.put(Apis.PROJECT.UPDATE_PROJECT.replace('{projectId}', this.projectId), newProject).then((res) => {
-        console.log(res)
+        this.projectId = res.projectDetails.id
+        this.project.name = res.projectDetails.name
+        this.project.contactName = res.projectDetails.contactName
+        this.project.contactPhone = res.projectDetails.contactPhone
+        this.project.type = res.projectDetails.type
+        this.project.platform = res.projectDetails.platform
+        this.project.desc = res.projectDetails.desc
+        this.project.doc = []
+        this.project.file = []
+        this.project.resource = res.projectDetails.resource
+        this.project.location = getProvinceCodeByProvinceName(res.projectDetails.location.provinceCode, res.projectDetails.location.cityCode)
+        this.project.institution = res.projectDetails.institution
+        this.project.datetime = new Date(res.projectDetails.datetime)
+        this.project.price = res.projectDetails.price
+        this.project.budget = res.projectDetails.budget
+        this.project.usage = res.projectDetails.usage
+        this.project.fileUrl = res.projectDetails.file
+        this.project.requireDocUrl = res.projectDetails.doc
+
+        this.task = res.taskList
+        this.analyseDemandList = res.reportList
         this.isModifyMode = false
         notify('success', '项目修改成功')
       }).catch(error => {
-        notify('error', error.data.msg)
+        notify('error', error.data)
+        console.log(error)
       })
       // this.$refs[formName].validate(valid => {
       //   if (valid) {
@@ -515,8 +500,8 @@ export default {
     //进入修改项目页面
     modifyForm () {
       this.isModifyMode = true
-      this.project.type = []
-      this.project.platform = []
+
+      this.setInstitutions()
       //获得update 信息
       //this.loadData()
     },
@@ -602,7 +587,7 @@ export default {
     },
     loadData () {//PROJ--2019073114009
       Http.get(Apis.PROJECT.GET_PROJECT.replace('{projectId}', this.projectId)).then((res) => {
-        //console.log(res)
+        console.log(res)
         this.projectId = res.projectDetails.id
         this.project.name = res.projectDetails.name
         this.project.contactName = res.projectDetails.contactName
@@ -671,13 +656,21 @@ export default {
       })
     },
     setServiceType () {
-      this.serviceType = getAllServiceTypes()
+      getAllServiceTypes().then((res) => {
+        this.serviceType = res
+      }).catch((error) => {
+        notify('error', '获取项目类型列表失败')
+      })
     },
     setPlatformType () {
       this.platforms = getAllPlatformTypes()
     },
     setInstitutions () {
-      this.institutionArray = getAllInstitutions()
+      getAllInstitutions().then((res) => {
+        this.institutionArray = res
+      }).catch((error) => {
+        notify('error', '获取institution失败' + error.data)
+      })
     },
     setUserInfo () {
       this.user = storageGet('user')
@@ -700,3 +693,54 @@ export default {
   }
 </style>
 
+
+<!--<div class="create-body" v-if="!isModifyMode">-->
+<!--<div class="title h2">分析需求</div>-->
+<!--<div class="task-list">-->
+<!--<el-table :data="analyseDemandList" style="width: 100%" max-height="400">-->
+<!--<el-table-column prop="institution" label="承接单位" title="承接单位"></el-table-column>-->
+<!--<el-table-column prop="feasibilityReport" sortable label="可行性分析报告">-->
+<!--<template slot-scope="scope">-->
+<!--<span v-if="!scope.row.feasibilityReport.url">暂无文件</span>-->
+<!--<a-->
+<!--:href="scope.row.feasibilityReport.url"-->
+<!--v-if="scope.row.feasibilityReport.url"-->
+<!--target="_blank"-->
+<!--&gt;-->
+<!--<i class="fa fa-file-text-o"></i>-->
+<!--{{scope.row.feasibilityReport.name}}-->
+<!--</a>-->
+<!--</template>-->
+<!--</el-table-column>-->
+<!--<el-table-column prop="priceAuditReport" sortable label="可行性分析报告">-->
+<!--<template slot-scope="scope">-->
+<!--<span v-if="!scope.row.priceAuditReport.url">暂无文件</span>-->
+<!--<a-->
+<!--:href="scope.row.priceAuditReport.url"-->
+<!--v-if="scope.row.priceAuditReport.url"-->
+<!--target="_blank"-->
+<!--&gt;-->
+<!--<i class="fa fa-file-text-o"></i>-->
+<!--{{scope.row.priceAuditReport.name}}-->
+<!--</a>-->
+<!--</template>-->
+<!--</el-table-column>-->
+
+<!--<el-table-column align="right" label="操作">-->
+<!--<template slot-scope="scope">-->
+<!--<div-->
+<!--class="btn btn-small btn-info"-->
+<!--@click="handleAccept(scope.$index, scope.row.id)"-->
+<!--&gt;接受-->
+<!--</div>-->
+<!--<div-->
+<!--class="btn btn-small btn-danger"-->
+<!--@click="handleReject(scope.$index, scope.row.id)"-->
+<!--&gt;拒绝-->
+<!--</div>-->
+<!--</template>-->
+<!--</el-table-column>-->
+<!--</el-table>-->
+<!--</div>-->
+<!--</div>-->
+

+ 52 - 14
src/components/project/ProjectCreate.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="create-container">
+  <div class="create-container" v-loading="loading">
     <div class="title h1">申请项目</div>
     <div class="create-body">
       <el-form :model="project" :rules="rules" ref="project" label-width="12%" class="demo-project">
@@ -47,7 +47,8 @@
           >
             <el-tab-pane :label="resourceType[0]" name="0">
               <el-radio-group v-model="project.institution">
-                <el-radio :label="item" name="type" v-for="item,index in institutionArray" :key="index">{{item.name}}</el-radio>
+                <el-radio :label="item" name="type" v-for="item,index in institutionArray" :key="index">{{item.name}}
+                </el-radio>
               </el-radio-group>
             </el-tab-pane>
             <el-tab-pane :label="resourceType[1]" name="1">
@@ -155,6 +156,7 @@ export default {
     }
     return {
       user: {},
+      loading: false,
       tabPosition: 'top',
       institutionArray: [],
       platforms: [],
@@ -254,6 +256,12 @@ export default {
     })
   },
   watch: {
+    serviceType (val) {
+      this.serviceType = val
+    },
+    institutionArray (val) {
+      this.institutionArray = val
+    },
     'project.institution' () {
       if (this.project.institution) {
         this.$refs.addFormProvince.resetProviceCity()
@@ -307,6 +315,7 @@ export default {
     },
     submitForm (formName) {
       //console.log(this.project)
+      this.showLoading()
       const newLocation = getProvinceNameByProvinceCode(this.project.location.provinceCode, this.project.location.cityCode)
       const newProject = {
         userId: this.user.userVO.id,
@@ -327,13 +336,15 @@ export default {
         price: this.project.price
       }
       Http.post(Apis.PROJECT.CREATE_PROJECT, newProject).then((res) => {
-        notify('success', '创建成功')
-        if (window.history.length <= 1) {
-          this.$router.push({path: '/'})
-          return false
-        } else {
-          this.$router.go(-1)
-        }
+        //notify('success', '创建成功')
+        this.hideLoading()
+        this.createProjectSuccess(res.projectDetails.id)
+        // if (window.history.length <= 1) {
+        //   this.$router.push({path: '/'})
+        //   return false
+        // } else {
+        //   this.$router.go(-1)
+        // }
       }).catch(error => {
         //console.log(error)
         notify('error', error.data)
@@ -411,6 +422,7 @@ export default {
       //return this.$confirm(`确定移除 ${file.name}?`)
     },
     uploadRequireDoc (param) {
+      this.showLoading()
       const formData = new FormData()
       let config = {
         //添加请求头
@@ -419,13 +431,16 @@ export default {
       formData.append('file', param.file)
       Http.upload(Apis.FILE.REQUIREMENT_FILE.replace('{userId}', this.user.userVO.id), formData, config).then((res) => {
         //console.log('上传成功')
+        this.hideLoading()
+        notify('success', '需求文档上传成功')
         this.project.requireDocUrl = res.data
-        console.log(this.project.doc)
+        //console.log(this.project.doc)
         //console.log(res.data)
       })
 
     },
     uploadApkFile (param) {
+      this.showLoading()
       const formData = new FormData()
       let config = {
         //添加请求头
@@ -433,22 +448,46 @@ export default {
       }
       formData.append('file', param.file)
       Http.upload(Apis.FILE.APK.replace('{userId}', this.user.userVO.id), formData, config).then((res) => {
-        console.log('上传成功')
+        this.hideLoading()
+        notify('success', '文件上传成功')
         this.project.fileUrl = res.data
         console.log(res)
       })
     },
     setServiceType () {
-      this.serviceType = getAllServiceTypes()
+      getAllServiceTypes().then((res) => {
+        this.serviceType = res
+      }).catch((error) => {
+        notify('error', '获取项目服务类型列表失败')
+      })
     },
     setPlatforms () {
       this.platforms = getAllPlatformTypes()
     },
     setInstitution () {
-      this.institutionArray = getAllInstitutions()
+      getAllInstitutions().then((res) => {
+        this.institutionArray = res
+      })
     },
     setUserInfo () {
       this.user = storageGet('user')
+    },
+    createProjectSuccess (projectId) {
+      this.$alert('项目创建成功', '创建成功', {
+        confirmButtonText: '确定',
+        callback: action => {
+          this.$router.push({
+            name: 'Project',
+            params: {projectId: projectId}
+          })
+        }
+      })
+    },
+    showLoading(){
+      this.loading = true
+    },
+    hideLoading(){
+      this.loading = false
     }
   }
 }
@@ -499,7 +538,6 @@ export default {
 <!--</el-form-item>-->
 
 
-
 <!--<el-form-item label="用途" prop="usage">-->
 <!--<el-input v-model="project.usage"></el-input>-->
 <!--</el-form-item>-->

+ 10 - 1
src/components/report/Report.vue

@@ -279,11 +279,20 @@ export default {
       })
     },
     setReportType () {
-      this.reportType = getAllReportTypes()
+      getAllReportTypes().then((res)=>{
+        this.reportType = res
+      }).catch((error)=>{
+        notify('error','加载报告类型失败')
+      })
     },
     setUserInfo () {
       this.user = storageGet('user')
     }
+  },
+  watch:{
+    reportType (val) {
+      this.reportType =val
+    }
   }
 }
 </script>

+ 74 - 43
src/components/report/ReportCreate.vue

@@ -13,26 +13,32 @@
             </span>
           </el-radio-group>
         </el-form-item>
-        <el-form-item label="摘要" prop="abstract">
-          <div>
-            <el-row :gutter="2">
-              <el-col :span="2">
-                <span>测试对象</span>
-              </el-col>
-              <el-col :span="10">
-                <el-input type="textarea" v-model="report.target"></el-input>
-              </el-col>
-            </el-row>
-            <el-row :gutter="2">
-              <el-col :span="2">
-                <span>测试内容</span>
-              </el-col>
-              <el-col :span="10">
-                <el-input type="textarea" v-model="report.content"></el-input>
-              </el-col>
-            </el-row>
-          </div>
+        <el-form-item label="测试对象" prop="name">
+          <el-input style="width: 400px" type="textarea" v-model="report.target"></el-input>
         </el-form-item>
+        <el-form-item label="测试内容" prop="name">
+          <el-input style="width: 400px" type="textarea" v-model="report.content"></el-input>
+        </el-form-item>
+        <!--<el-form-item label="摘要" prop="abstract">-->
+        <!--<div>-->
+        <!--<el-row :gutter="2">-->
+        <!--<el-col :span="2">-->
+        <!--<span>测试对象</span>-->
+        <!--</el-col>-->
+        <!--<el-col :span="10">-->
+        <!--<el-input type="textarea" v-model="report.target"></el-input>-->
+        <!--</el-col>-->
+        <!--</el-row>-->
+        <!--<el-row :gutter="2">-->
+        <!--<el-col :span="2">-->
+        <!--<span>测试内容</span>-->
+        <!--</el-col>-->
+        <!--<el-col :span="10">-->
+        <!--<el-input type="textarea" v-model="report.content"></el-input>-->
+        <!--</el-col>-->
+        <!--</el-row>-->
+        <!--</div>-->
+        <!--</el-form-item>-->
         <el-form-item prop="file" label="报告文件">
           <el-upload
             drag
@@ -57,7 +63,7 @@
         </el-form-item>
 
         <el-form-item label="结论" prop="conclusion">
-          <el-input type="textarea" v-model="report.conclusion"></el-input>
+          <el-input style="width: 400px" type="textarea" v-model="report.conclusion"></el-input>
         </el-form-item>
         <el-form-item>
           <div class="btn btn-primary btn-info" @click="submitForm('report')">提交</div>
@@ -96,26 +102,26 @@ export default {
         conclusion: ''
       },
       rules: {
-        name: [
-          {required: true, message: '请输入报告名称', trigger: 'blur'}
-          // { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
-        ],
-        abstract: [
-          {
-            required: true,
-            message: '请输入摘要信息',
-            trigger: 'change'
-          }
-        ],
-        type: [
-          {required: true, message: '请选择报告类型', trigger: 'change'}
-        ],
-        file: [
-          {required: true, message: '请上传报告文件', trigger: 'change'}
-        ],
-        conclusion: [
-          {required: true, message: '请输入报告结论', trigger: 'blur'}
-        ]
+        // name: [
+        //   {required: true, message: '请输入报告名称', trigger: 'blur'}
+        //   // { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
+        // ],
+        // abstract: [
+        //   {
+        //     required: true,
+        //     message: '请输入摘要信息',
+        //     trigger: 'change'
+        //   }
+        // ],
+        // type: [
+        //   {required: true, message: '请选择报告类型', trigger: 'change'}
+        // ],
+        // file: [
+        //   {required: true, message: '请上传报告文件', trigger: 'change'}
+        // ],
+        // conclusion: [
+        //   {required: true, message: '请输入报告结论', trigger: 'blur'}
+        // ]
       }
     }
   },
@@ -147,11 +153,11 @@ export default {
       console.log(newReport)
       if (this.taskId == null) {
         Http.post(Apis.REPORT.CREATE_PROJECT_REPORT.replace('{projectId}', this.projectId), newReport).then((res) => {
-          console.log(res)
+          this.createReportSuccess(res.crowdReportVO.code)
         })
       } else {
         Http.post(Apis.REPORT.CREATE_TASK_REPORT.replace('{projectId}', this.projectId).replace('{taskId}', this.taskId), newReport).then((res) => {
-          console.log(res)
+          this.createReportSuccess(res.crowdReportVO.code)
         })
       }
 
@@ -225,12 +231,33 @@ export default {
       })
     },
     setReportType () {
-      this.reportType = getAllReportTypes
+      this.reportType = getAllReportTypes().then((res) => {
+        this.reportType = res
+      }).catch((error) => {
+        notify('error', '获取报告类型列表失败')
+      })
     },
     setUserInfo () {
       this.user = storageGet('user')
+    },
+    createReportSuccess (reportId) {
+      this.$alert('报告创建成功', '创建成功', {
+        confirmButtonText: '确定',
+        callback: action => {
+          this.$router.push({
+            name: 'Report',
+            params: {reportId: reportId, projectId: this.projectId, taskId: this.taskId}
+          })
+        }
+      })
+    },
+  },
+  watch: {
+    reportType (val) {
+      this.reportType = val
     }
   }
+
 }
 </script>
 
@@ -247,4 +274,8 @@ export default {
   .el-row {
     margin-bottom: 10px;
   }
+
+  .el-input {
+    width: 400px;
+  }
 </style>

+ 41 - 9
src/components/task/Task.vue

@@ -13,11 +13,15 @@
           <span v-if="!isModifyMode">{{task.description}}</span>
         </el-form-item>
         <el-form-item label="任务报价" prop="quotePrice">
-          <el-input v-if="isModifyMode" v-model="task.quotePrice"></el-input>
+          <el-input type="number" v-if="isModifyMode" v-model="task.quotePrice">
+            <template slot="append">¥</template>
+          </el-input>
           <span v-if="!isModifyMode">{{task.quotePrice}}</span>
         </el-form-item>
-        <el-form-item label="任务定价" prop="fixedPrice">
-          <el-input v-if="isModifyMode" v-model="task.fixedPrice"></el-input>
+        <el-form-item type="number" label="任务定价" prop="fixedPrice">
+          <el-input v-if="isModifyMode" v-model="task.fixedPrice">
+            <template slot="append">¥</template>
+          </el-input>
           <span v-if="!isModifyMode">{{task.fixedPrice}}</span>
         </el-form-item>
         <el-form-item label="业务类型" prop="serviceType">
@@ -31,7 +35,7 @@
         <el-form-item label="任务可见性" prop="resource">
           <div v-if="!isModifyMode">
             <div v-if="task.resource=='1'">{{updateLocation(task.location)}}</div>
-            <div v-if="task.resource=='0'">{{task.institution.name}}</div>
+            <div v-if="task.resource=='0'">{{task.institution}}</div>
             <div v-if="task.resource=='2'">{{resourceType[task.resource]}}</div>
           </div>
           <el-tabs
@@ -134,7 +138,7 @@ import Http from '@/js/http.js'
 import Apis from '@/js/api.js'
 import {notify} from '@/constants/index'
 import {
-  getAllInstitutions,
+  getAllAgencies,
   getAllServiceTypes,
   getProvinceCodeByProvinceName,
   getProvinceNameByProvinceCode,
@@ -220,6 +224,9 @@ export default {
     }
   },
   watch: {
+    institutionArray (val) {
+      this.institutionArray = val
+    },
     'task.institution' () {
       if (this.task.institution) {
         //this.$refs.addFormProvince.resetProviceCity()
@@ -250,6 +257,8 @@ export default {
       this.taskId = this.$route.params.taskId
       this.projectId = this.$route.params.projectId
       this.setUserInfo()
+      this.setServiceType()
+      console.log(this.serviceType)
       this.loadData(this.projectId, this.taskId)
       this.setInstitutions()
     },
@@ -280,12 +289,27 @@ export default {
         datetime: this.task.datetime,
         quotePrice: this.task.quotePrice,
         fixedPrice: this.task.fixedPrice,
-        requireDoc: this.task.requireDocUrl
+        requirementFile: this.task.requireDocUrl
       }
       //修改TASK
       Http.put(Apis.TASK.UPDATE_TASK.replace('{projectId}', this.projectId).replace('{taskId}', this.taskId), newTask).then((res) => {
         this.isModifyMode = false
         console.log(res)
+        this.taskId = res.crowdTaskVO.id
+        this.projectId = res.crowdTaskVO.projectId
+        this.task.title = res.crowdTaskVO.title
+        this.task.description = res.crowdTaskVO.description
+        this.task.serviceType = res.crowdTaskVO.serviceType
+        this.task.resource = res.crowdTaskVO.resource
+        this.task.location = getProvinceCodeByProvinceName(res.crowdTaskVO.location.provinceCode, res.crowdTaskVO.location.cityCode)
+        this.task.institution = res.crowdTaskVO.institution
+        this.task.datetime = new Date(res.crowdTaskVO.datetime)
+        this.task.quotePrice = res.crowdTaskVO.quotePrice
+        this.task.fixedPrice = res.crowdTaskVO.fixedPrice
+        this.task.doc = []
+        this.task.requireDocUrl = res.crowdTaskVO.requirementFile
+
+        this.reportList = res.crowdReportVOList
       })
       // this.$refs[formName].validate(valid => {
       //   if (valid) {
@@ -373,7 +397,7 @@ export default {
         this.task.quotePrice = res.crowdTaskVO.quotePrice
         this.task.fixedPrice = res.crowdTaskVO.fixedPrice
         this.task.doc = []
-        this.task.requireDocUrl = res.crowdTaskVO.requireDocUrl
+        this.task.requireDocUrl = res.crowdTaskVO.requirementFile
 
         this.reportList = res.crowdReportVOList
       })
@@ -432,10 +456,18 @@ export default {
       })
     },
     setServiceType () {
-      this.serviceType = getAllServiceTypes()
+      getAllServiceTypes().then((res) => {
+        this.serviceType = res
+      }).catch((error) => {
+        notify('error', '加载任务类型失败')
+      })
     },
     setInstitutions () {
-      this.institutionArray = getAllInstitutions()
+      getAllAgencies().then((res) => {
+        this.institutionArray = res
+      }).catch((error) => {
+        notify('error', '获取机构列表失败')
+      })
     },
     setUserInfo () {
       this.user = storageGet('user')

+ 44 - 11
src/components/task/TaskCreate.vue

@@ -10,10 +10,14 @@
           <el-input type="textarea" style="width: 400px" v-model="task.desc"></el-input>
         </el-form-item>
         <el-form-item label="任务报价" prop="quotePrice">
-          <el-input v-model="task.quotePrice"></el-input>
+          <el-input type="number" v-model="task.quotePrice">
+            <template slot="append">¥</template>
+          </el-input>
         </el-form-item>
-        <el-form-item label="任务定价" prop="fixedPrice">
-          <el-input v-model="task.fixedPrice"></el-input>
+        <el-form-item type="number" label="任务定价" prop="fixedPrice">
+          <el-input v-model="task.fixedPrice">
+            <template slot="append">¥</template>
+          </el-input>
         </el-form-item>
         <el-form-item label="业务类型" prop="type">
           <el-radio-group v-model="task.type">
@@ -31,7 +35,8 @@
                   name="type"
                   v-for="item,index in institutionArray"
                   :key="index"
-                >{{item.name}}</el-radio>
+                >{{item.name}}
+                </el-radio>
               </el-radio-group>
             </el-tab-pane>
             <el-tab-pane :label="resourceType[1]" name="1">
@@ -94,7 +99,7 @@ import Http from '@/js/http.js'
 import Apis from '@/js/api.js'
 import ResourceType from '@/constants/enum/resource-type.js'
 import {notify} from '@/constants/index'
-import {getAllInstitutions, getAllServiceTypes, getProvinceNameByProvinceCode, storageGet} from '@/js/index'
+import {getAllAgencies, getAllServiceTypes, getProvinceNameByProvinceCode, storageGet} from '@/js/index'
 
 export default {
   name: 'Task',
@@ -113,7 +118,7 @@ export default {
         name: '',
         desc: '',
         type: '',
-        resource: '1', //如果是广场不用管Location和institution ,定向看institution,区域看location
+        resource: '0', //如果是广场不用管Location和institution ,定向看institution,区域看location
         location: {provinceCode: '3200', cityCode: '3201'},
         institution: '',
         datetime: '',
@@ -171,6 +176,12 @@ export default {
     }
   },
   watch: {
+    serviceType (val) {
+      this.serviceType = val
+    },
+    institution (val) {
+      this.institution = val
+    },
     'task.institution' () {
       if (this.task.institution) {
         this.$refs.addFormProvince.resetProviceCity()
@@ -226,15 +237,18 @@ export default {
         type: this.task.type,
         resource: this.task.resource,
         location: getProvinceNameByProvinceCode(this.task.location.provinceCode, this.task.location.cityCode),
-        institution: this.task.institution,
+        institution: this.task.institution.id,
         datetime: this.task.datetime,
         quotePrice: this.task.quotePrice,
         fixedPrice: this.task.fixedPrice,
-        requireDocUrl: this.task.requireDocUrl
+        requirementFile: this.task.requireDocUrl
       }
       Http.post(Apis.TASK.CREATE_TASK.replace('{projectId}', this.projectId), newTask).then((res) => {
         console.log(res)
-        this.cancelCreate()
+        this.createTaskSuccess(res.crowdTaskVO.id)
+      }).catch((error) => {
+        console.log(error)
+        notify('error', error.data)
       })
       // this.$refs[formName].validate(valid => {
       //   if (valid) {
@@ -324,13 +338,32 @@ export default {
       })
     },
     setServiceType () {
-      this.serviceType = getAllServiceTypes()
+      this.serviceType = getAllServiceTypes().then((res) => {
+        this.serviceType = res
+      }).catch((error) => {
+        notify('error', '加载服务类型列表失败')
+      })
     },
     setInstitutions () {
-      this.institutionArray = getAllInstitutions()
+      getAllAgencies().then((res) => {
+        this.institutionArray = res
+      }).catch((error) => {
+        notify('error', '测评机构加载失败')
+      })
     },
     setUserInfo () {
       this.user = storageGet('user')
+    },
+    createTaskSuccess (taskId) {
+      this.$alert('任务创建成功', '创建成功', {
+        confirmButtonText: '确定',
+        callback: action => {
+          this.$router.push({
+            name: 'Task',
+            params: {projectId: this.projectId, taskId: taskId}
+          })
+        }
+      })
     }
   }
 }

+ 3 - 1
src/js/api.js

@@ -56,6 +56,8 @@ export default {
     REPORT_DETAIL_PAGE: '/api/page/reportDetail/{reportId}/',
   },
   GENERAL: {
-    GET_ALL_ABILITIES: ''
+    GET_ALL_ABILITIES: '',
+    GET_ALL_INSTITUTIONS: '/api/regionalManager',
+    GET_ALL_AGENCIES: '/api/agency/list'
   }
 }

+ 3 - 3
src/js/http.js

@@ -68,7 +68,7 @@ export default {
     return new Promise((resolve, reject) => {
       axios.post(url, handleParams(data)).then(
         (result) => {
-          resolve(result)
+          resolve(result.data)
         }
       ).catch(
         (error) => {
@@ -93,11 +93,11 @@ export default {
     return new Promise((resolve, reject) => {
       axios.put(url, JSON.parse(JSON.stringify(data))).then(
         (result) => {
-          resolve(result)
+          resolve(result.data)
         }
       ).catch(
         (error) => {
-          reject(error)
+          reject(error.response)
         }
       )
     })

+ 30 - 18
src/js/index.js

@@ -24,7 +24,7 @@ export const getCurrentUser = () => {
       id: 3,
       photo: 'http://www.mooctest.net/assets/img/mooctest.png',
       name: '郭超',
-      roleList: ['区域管理员', '个人用户', '个人用户', '测评机构', '系统管理员'],
+      roleList: ['区域管理员', '个人用户', '企业用户', '测评机构', '系统管理员'],
       mobile: '110',
       email: '12345@qq.com',
     },
@@ -220,13 +220,19 @@ export const getAllAgencyResourceTypes = () => {
 
 //获取所有服务类型
 export const getAllServiceTypes = () => {
-  return ['接口测试', '安全漏洞扫描', '风险评估服务', '源代码安全审计服务', '功能测试服务', '性能测试', '功能和易用性测试']
+  const data = ['接口测试', '安全漏洞扫描', '风险评估服务', '源代码安全审计服务', '功能测试服务', '性能测试', '功能和易用性测试']
+  return new Promise((resolve) => {
+    resolve(data)
+  })
   //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
 }
 
 //获取所有报告类型
 export const getAllReportTypes = () => {
-  return ['项目可行性报告', '项目测试方案', '项目测试报告', '项目缺陷报告', '项目用例报告', '其他']
+  const data = ['项目可行性报告', '项目测试方案', '项目测试报告', '项目缺陷报告', '项目用例报告', '其他']
+  return new Promise((resolve) => {
+    resolve(data)
+  })
   //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
 }
 
@@ -266,20 +272,23 @@ export const uploadAgencyAuthenticationInfo = () => {
 
 //获取所有定向发布的目标
 export const getAllInstitutions = () => {
-  return [
-    {
-      id: 1,
-      name: '慕测1'
-    },
-    {
-      id: 2,
-      name: '慕测2'
-    },
-    {
-      id: 3,
-      name: '慕测3'
-    },
-  ]
+  return Http.get(Apis.GENERAL.GET_ALL_INSTITUTIONS)
+}
+
+//获取所有测评机构
+export const getAllAgencies = () => {
+  // const data = [{
+  //   id: 1,
+  //   name: '慕测'
+  // }, {
+  //   id: 2,
+  //   name: '南大'
+  // }]
+  //
+  // return new Promise((resolve) => {
+  //   resolve(data)
+  // })
+  return Http.get(Apis.GENERAL.GET_ALL_AGENCIES)
 }
 
 //通过代码获取省、市名称
@@ -296,7 +305,10 @@ export const getProvinceNameByProvinceCode = (provinceCode, cityCode) => {
       }
     }
   }
-  return null
+  return {
+    'provinceCode': '江苏省',
+    'cityCode': '南京市'
+  }
 }
 //通过名称获取省、市代码
 export const getProvinceCodeByProvinceName = (provinceName, cityName) => {