guochao 6 gadi atpakaļ
vecāks
revīzija
9402a9c7a4

+ 4 - 1
src/components/InstitutionRank.vue

@@ -8,7 +8,10 @@
         </template>
       </el-table-column>
       <el-table-column prop="name">
-        <template slot-scope="scope"><span class="institution-name">{{scope.row.name}}</span></template>
+        <template slot-scope="scope"><span class="institution-name" style="font-size: 12px">{{scope.row.name}}</span></template>
+      </el-table-column>
+      <el-table-column prop="name">
+        <template slot-scope="scope"><span class="institution-name" style="font-size: 12px">总任务金额:{{scope.row.allTaskPrice}}</span></template>
       </el-table-column>
     </el-table>
   </div>

+ 47 - 12
src/components/Mine.vue

@@ -52,31 +52,66 @@
     <!--</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="未完成任务">
+      <el-tabs  v-loading="loading" style="width: 90%;margin-left: 5%">
+        <el-tab-pane label="未完成任务">
+          <el-row v-if="unFinishedTaskList != null && unFinishedTaskList.length != 0" type="flex" align="middle" justify="center"  style="font-size: 14px;">
+
+            <el-col :span="6">任务封面</el-col>
+            <el-col :span="5">任务名称</el-col>
+            <el-col :span="5">任务类型</el-col>
+            <el-col :span="4">任务预算</el-col>
+            <el-col :span="4">操作</el-col>
+          </el-row>
           <span v-if="unFinishedTaskList == null || unFinishedTaskList.length == 0"> 暂无任务 </span>
           <task-item v-if="unFinishedTaskList != null || unFinishedTaskList.length > 0"
-                     v-for="(item,index) in unFinishedTaskList" :key="index" :task="item"/>
+                     v-for="(item,index1) in unFinishedTaskList" :key="index1" :task="item"/>
         </el-tab-pane>
-        <el-tab-pane v-if="rolesPermissions.isAgency" label="已完成任务">
+        <el-tab-pane label="已完成任务">
+          <el-row v-if="finishedTaskList != null && finishedTaskList.length != 0" type="flex" align="middle" justify="center"  style="font-size: 14px;">
+
+            <el-col :span="6">任务封面</el-col>
+            <el-col :span="5">任务名称</el-col>
+            <el-col :span="5">任务类型</el-col>
+            <el-col :span="4">任务预算</el-col>
+            <el-col :span="4">操作</el-col>
+          </el-row>
           <span v-if="finishedTaskList == null || finishedTaskList.length == 0"> 暂无任务 </span>
           <task-item v-if="finishedTaskList != null || finishedTaskList.length > 0"
-                     v-for="(item,index) in finishedTaskList" :key="index" :task="item"/>
+                     v-for="(item,index2) in finishedTaskList" :key="index2" :task="item"/>
         </el-tab-pane>
-        <el-tab-pane label="我的项目">
 
+        <el-tab-pane label="我的项目">
           <span v-if="myProjects == null || myProjects.length == 0"> 暂无项目 </span>
+          <el-row v-if="myProjects != null && myProjects.length != 0" type="flex" align="middle" justify="center"  style="font-size: 14px;">
+            <el-col :span="6">项目图片</el-col>
+            <el-col :span="6">项目名称</el-col>
+            <el-col :span="6">项目平台</el-col>
+            <el-col :span="2">项目预算</el-col>
+            <el-col :span="4">操作</el-col>
+          </el-row>
           <project-item v-if="myProjects != null || myProjects.length > 0"
-                        v-for="(item,index) in myProjects" :key="index" :projectItem="item"/>
+                        v-for="(item,index3) in myProjects" :key="index3" :projectItem="item"/>
         </el-tab-pane>
-        <el-tab-pane v-if="rolesPermissions.isRegionManager" label="处理中项目">
-
+        <el-tab-pane label="处理中项目">
+          <el-row v-if="handlingProjects != null && handlingProjects.length != 0" type="flex" align="middle" justify="center"  style="font-size: 14px;">
+            <el-col :span="6">项目图片</el-col>
+            <el-col :span="6">项目名称</el-col>
+            <el-col :span="6">项目平台</el-col>
+            <el-col :span="2">项目预算</el-col>
+            <el-col :span="4">操作</el-col>
+          </el-row>
           <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"/>
+                        v-for="(item,index4) in handlingProjects" :key="index4" :projectItem="item"/>
         </el-tab-pane>
-        <el-tab-pane v-if="rolesPermissions.isRegionManager" label="可接收项目">
-
+        <el-tab-pane label="可接收项目">
+          <el-row v-if="acceptableProjects != null && acceptableProjects.length != 0" type="flex" align="middle" justify="center"  style="font-size: 14px;">
+            <el-col :span="6">项目图片</el-col>
+            <el-col :span="6">项目名称</el-col>
+            <el-col :span="6">项目平台</el-col>
+            <el-col :span="2">项目预算</el-col>
+            <el-col :span="4">操作</el-col>
+          </el-row>
           <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"/>

+ 2 - 2
src/components/PersonRank.vue

@@ -8,10 +8,10 @@
         </template>
       </el-table-column>
       <el-table-column prop="name">
-        <template slot-scope="scope"><span class="institution-style">{{scope.row.name}}</span></template>
+        <template slot-scope="scope"><span class="institution-style" style="font-size: 12px">{{scope.row.name}}</span></template>
       </el-table-column>
       <el-table-column prop="number">
-        <template slot-scope="scope"><span class="institution-style">{{scope.row.number}}</span></template>
+        <template slot-scope="scope"><span class="institution-style" style="font-size: 12px">总项目金额:{{scope.row.allProjectPrice}}</span></template>
       </el-table-column>
     </el-table>
   </div>

+ 60 - 16
src/components/commons/ProjectItem.vue

@@ -1,22 +1,39 @@
 <template>
   <div class="project-item-container">
-    <span class="col-xl-2 col-lg-3 col-md-4 col-sm-1" style="width: 150px">
-      <img class="project-cover" src="@/assets/img/home_ban1.jpg">
-    </span>
-    <span class="project-title col-md-2 col-sm-10" style="width: 150px;font-size: 12px">{{project.name}}</span>
-    <span class="project-title col-md-2 col-sm-10" style="width: 10%;font-size: 12px">{{project.id}}</span>
-    <span class="col-md-2 col-sm-10" style="width: 10%">
-      <span
-        style="font-size: 10px;"
-        v-bind:class="['badge',{ 'ios-platform': item=='IOS','android-platform': item=='ANDROID','web-platform': item=='WEB'}]"
-        v-for="item in project.platform"
-      >{{item}}</span>
-    </span>
-    <span class="col-md-1 col-sm-5" style="width: 10%;font-size: 12px"><div class="badge">¥{{project.budget}}</div></span>
-    <span class="project-td" style="width: 15%">
-      <span class="btn btn-small btn-info" @click="goToProjectDetail(project.id)">查看详情</span>
-    </span>
+    <!--<span class="col-xl-2 col-lg-3 col-md-4 col-sm-1" style="width: 150px">-->
+      <!--<img class="project-cover" src="@/assets/img/home_ban1.jpg">-->
+    <!--</span>-->
+    <!--<span class="project-title col-md-2 col-sm-10" style="width: 150px;font-size: 12px">{{project.name}}</span>-->
+    <!--<span class="project-title col-md-2 col-sm-10" style="width: 10%;font-size: 12px">{{project.id}}</span>-->
+    <!--<span class="col-md-2 col-sm-10" style="width: 10%">-->
+      <!--<span-->
+        <!--style="font-size: 10px;"-->
+        <!--v-bind:class="['badge',{ 'ios-platform': item=='IOS','android-platform': item=='ANDROID','web-platform': item=='WEB'}]"-->
+        <!--v-for="item in project.platform"-->
+      <!--&gt;{{item}}</span>-->
+    <!--</span>-->
+    <!--<span class="col-md-1 col-sm-5" style="width: 10%;font-size: 12px"><div class="badge">¥{{project.budget}}</div></span>-->
+    <!--<span class="project-td" style="width: 15%">-->
+      <!--<span class="btn btn-small btn-info" @click="goToProjectDetail(project.id)">查看详情</span>-->
+    <!--</span>-->
+    <el-row type="flex" align="middle" justify="center"  style="font-size: 14px;">
+      <el-badge :value="project.statusVO.text" class="item" :type="project.statusVO.style">
+        <el-col :span="6"><img class="project-cover" src="@/assets/img/home_ban1.jpg"></el-col>
+      </el-badge>
+      <el-col :span="6">{{project.name}}</el-col>
+      <!--<el-col :span="4">{{project.id}}</el-col>-->
+      <el-col :span="6">
+        <span style="font-size: 10px;" v-bind:class="['badge',{ 'ios-platform': item=='IOS','android-platform': item=='ANDROID','web-platform': item=='WEB'}]"
+              v-for="item in project.platform"
+        >{{item}}</span>
+      </el-col>
+      <el-col :span="2"><div class="badge">¥{{project.budget}}</div></el-col>
+      <el-col :span="4"><span class="btn btn-small btn-info" @click="goToProjectDetail(project.id)">查看详情</span></el-col>
+    </el-row>
+
+
   </div>
+
 </template>
 
 <script>
@@ -73,4 +90,31 @@ export default {
   .project-td {
     padding: 15px;
   }
+
+  .el-row {
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+  }
+  .el-col {
+    border-radius: 4px;
+  }
+  .bg-purple-dark {
+    background: #99a9bf;
+  }
+  .bg-purple {
+    background: #d3dce6;
+  }
+  .bg-purple-light {
+    background: #e5e9f2;
+  }
+  .grid-content {
+    border-radius: 4px;
+    min-height: 36px;
+  }
+  .row-bg {
+    padding: 10px 0;
+    background-color: #f9fafc;
+  }
 </style>

+ 15 - 17
src/components/commons/TaskItem.vue

@@ -1,22 +1,19 @@
 <template>
   <div class="task-item-container">
-       <span class="col-xl-2 col-lg-3 col-md-4 col-sm-1">
-        <img class="task-cover" src="@/assets/img/home_ban1.jpg">
-      </span>
-    <span class="task-title col-md-2 col-sm-10">{{taskTable.title}}</span>
-    <span class="col-md-1 col-sm-5 ">{{taskTable.serviceType}}</span>
-    <span class="col-md-1 col-sm-5 ">
-      <span class="badge">
-      ¥{{taskTable.quotePrice==null?0:taskTable.quotePrice}}</span>
-      </span>
-    <!--<span class="col-md-1 col-sm-5 ">{{platformType}}</span>-->
-    <span class="col-md-1 col-sm-5">
-        {{taskStatus[taskTable.status]}}
-    </span>
-    <span class="task-td">
-       <span class="btn btn-medium btn-info" @click="goToTaskDetail(taskTable.projectId,taskTable.id)">查看详情</span>
-       </span>
+    <el-row type="flex" align="middle" justify="center" style="font-size: 14px;">
+      <el-badge :value="taskTable.statusVO.text" class="item" :type="taskTable.statusVO.style">
+        <el-col :span="6"><img class="task-cover" src="@/assets/img/home_ban1.jpg"></el-col>
+      </el-badge>
 
+      <el-col :span="5">{{taskTable.title}}</el-col>
+      <!--<el-col :span="4">{{project.id}}</el-col>-->
+      <el-col :span="5">{{taskTable.serviceType}}</el-col>
+      <el-col :span="4">
+        <div class="badge">¥{{taskTable.quotePrice==null?0:taskTable.quotePrice}}</div>
+      </el-col>
+      <el-col :span="4"><span class="btn btn-medium btn-info" @click="goToTaskDetail(taskTable.projectId,taskTable.id)">查看详情</span>
+      </el-col>
+    </el-row>
   </div>
 </template>
 
@@ -55,7 +52,8 @@ export default {
 
 <style lang="less" scoped>
   .task-item-container {
-    padding: 20px;
+    padding-top: 10px;
+    padding-bottom: 10px;
     border: 1px solid #eee;
     margin: 15px 5px;
     span {

+ 134 - 122
src/components/project/Project.vue

@@ -15,41 +15,14 @@
           <span v-if="!isModifyMode">{{project.name}}</span>
         </el-form-item>
 
-        <el-form-item size="small" label="联系人" prop="name">
+        <el-form-item size="small" label="联系人" prop="contactName">
           <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 size="small" label="联系人电话" prop="name">
+        <el-form-item size="small" label="联系人电话" prop="contactPhone">
           <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 size="small" label="预算" prop="budget">
           <el-input v-if="isModifyMode" type="number" v-model="project.budget">
             ¥
@@ -57,7 +30,7 @@
           </el-input>
           <span v-if="!isModifyMode">{{project.budget}}¥</span>
         </el-form-item>
-        <el-form-item size="small" label="状态" prop="status">
+        <el-form-item v-if="!isModifyMode" size="small" label="状态" prop="status">
           <span v-if="!isModifyMode">{{project.status==1?'等待接收':(project.status==2?'已被接收':(project.status==3?'项目已提交':'项目已结束'))}}</span>
         </el-form-item>
         <el-form-item label="需求描述">
@@ -144,8 +117,9 @@
             </div>
           </el-upload>
           <span v-if="!isModifyMode">
-            <a :href="project.requireDocUrl" v-if="project.requireDocUrl!=null && project.requireDocUrl!=''"><el-link :underline="false" type="primary"><i
-            class="el-icon-document"></i>下载文档</el-link></a>
+            <a :href="project.requireDocUrl" v-if="project.requireDocUrl!=null && project.requireDocUrl!=''"><el-link
+              :underline="false" type="primary"><i
+              class="el-icon-document"></i>下载文档</el-link></a>
             <i v-if="project.requireDocUrl==null || project.requireDocUrl==''" class="el-icon-document">暂无文档</i>
           </span>
         </el-form-item>
@@ -170,8 +144,9 @@
             </div>
           </el-upload>
           <span v-if="!isModifyMode">
-            <a v-if="project.fileUrl!=null && project.fileUrl!=''" :href="project.fileUrl"><el-link :underline="false" type="primary"><i
-            class="el-icon-document"></i>下载文件</el-link></a>
+            <a v-if="project.fileUrl!=null && project.fileUrl!=''" :href="project.fileUrl"><el-link :underline="false"
+                                                                                                    type="primary"><i
+              class="el-icon-document"></i>下载文件</el-link></a>
             <i v-if="project.fileUrl==null || project.fileUrl==''" class="el-icon-document">下载文件</i>
           </span>
         </el-form-item>
@@ -267,6 +242,7 @@ import ResourceType from '@/constants/enum/resource-type'
 import provincecity from '@/components/commons/ProvinceCity'
 import {notify} from '@/constants/index'
 import {
+  checkFileType,
   ensureEndProject,
   getAllInstitutions,
   getAllPlatformTypes,
@@ -365,35 +341,61 @@ export default {
         ]
       },
       rules: {
-        // name: [
-        //   {required: true, message: '请输入项目名称', trigger: 'blur'}
-        //   // { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
-        // ],
-        // type: [
-        //   {
-        //     type: 'array',
-        //     required: true,
-        //     message: '请至少选择一种服务类型',
-        //     trigger: 'change'
-        //   }
-        // ],
-        // platform: [
-        //   {
-        //     type: 'array',
-        //     required: true,
-        //     message: '请至少选择一个平台',
-        //     trigger: 'change'
-        //   }
-        // ],
-        // desc: [{required: true, message: '请填写活动形式', trigger: 'blur'}],
-        // contact: [{validator: validatePass, trigger: 'blur'}],
-        // resource: [
-        //   {
-        //     required: true,
-        //     message: '请选择项目可见性',
-        //     trigger: 'change'
-        //   }
-        // ]
+        name: [
+          {required: true, message: '请输入项目名称', trigger: 'blur'},
+          {min: 5, max: 50, message: '项目名称长度在 5 到 50 个字符', trigger: 'blur'}
+        ],
+        contactName: [
+          {required: true, message: '请输入联系人姓名', trigger: 'blur'}
+          // { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
+        ],
+        contactPhone: [
+          {required: true, message: '请输入手机号', trigger: 'blur'},
+          //{min: 11, max: 11, message: '请输入正确的手机号', trigger: 'blur'}
+        ],
+        type: [
+          {
+            type: 'array',
+            required: true,
+            message: '请至少选择一种服务类型',
+            trigger: 'change'
+          }
+        ],
+        platform: [
+          {
+            type: 'array',
+            required: true,
+            message: '请至少选择一个平台',
+            trigger: 'change'
+          }
+        ],
+        desc: [{required: false, message: '请填写描述', trigger: 'blur'}],
+        //price: [{required: true, message: '请填写价格', trigger: 'blur'}],
+        budget: [
+          {required: true, message: '预算不可为空', trigger: 'blur'},
+          {
+            validator: (rule, value, callback) => {
+              if (value <= 0) {
+                callback(new Error('请输入大于0的数'))
+              } else {
+                callback()
+              }
+            }, trigger: 'change'
+          },
+        ],
+        resource: [
+          {required: true},
+          {
+            validator: (rule, value, callback) => {
+              if (value == 0 && this.project.institution == null) {
+                callback(new Error('定向发布至少要选择一个区域管理员'))
+              } else {
+                callback()
+              }
+            }, trigger: 'change'
+          },
+        ],
+        datetime: [{required: true, message: '截止时间不可为空', trigger: 'blur'}],
       }
     }
   },
@@ -461,66 +463,64 @@ export default {
     },
     //提交修改
     submitForm (formName) {
-      this.showLoading()
-      const newProject = {
-        userId: this.user.userVO.id,
-        name: this.project.name,
-        type: this.project.type,
-        platform: this.project.platform,
-        desc: this.project.desc,
-        resource: this.project.resource,
-        location: getProvinceNameByProvinceCode(this.project.location.provinceCode, this.project.location.cityCode),
-        institution: this.project.institution == null ? null : this.project.institution.id,
-        contactName: this.project.contactName,
-        contactPhone: this.project.contactPhone,
-        doc: this.project.requireDocUrl,
-        file: this.project.fileUrl,
-        budget: this.project.budget,
-        price: this.project.price,
-        datetime: this.project.datetime,
-        usage: this.project.usage,
-      }
-      Http.put(Apis.PROJECT.UPDATE_PROJECT.replace('{projectId}', this.projectId), newProject).then((res) => {
-        console.log('bb')
-        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.$refs['project'].validate(valid => {
+        if (valid) {
+          this.showLoading()
+          const newProject = {
+            userId: this.user.userVO.id,
+            name: this.project.name,
+            type: this.project.type,
+            platform: this.project.platform,
+            desc: this.project.desc,
+            resource: this.project.resource,
+            location: getProvinceNameByProvinceCode(this.project.location.provinceCode, this.project.location.cityCode),
+            institution: this.project.institution == null ? null : this.project.institution.id,
+            contactName: this.project.contactName,
+            contactPhone: this.project.contactPhone,
+            doc: this.project.requireDocUrl,
+            file: this.project.fileUrl,
+            budget: this.project.budget,
+            price: this.project.price,
+            datetime: this.project.datetime,
+            usage: this.project.usage,
+          }
+          Http.put(Apis.PROJECT.UPDATE_PROJECT.replace('{projectId}', this.projectId), newProject).then((res) => {
+            console.log('bb')
+            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.reportList = res.reportList
-        this.isModifyMode = false
-        this.hideLoading()
-        notify('success', '项目修改成功')
-      }).catch(error => {
-        this.hideLoading()
-        notify('error', error.data)
-        console.log(error)
+            this.task = res.taskList
+            this.reportList = res.reportList
+            this.isModifyMode = false
+            this.hideLoading()
+            notify('success', '项目修改成功')
+          }).catch(error => {
+            this.hideLoading()
+            notify('error', error.data)
+            console.log(error)
+          })
+        } else {
+          notify('error', '表单填写错误!')
+          return false
+        }
       })
-      // this.$refs[formName].validate(valid => {
-      //   if (valid) {
-      //
-      //     //提交 project
-      //   } else {
-      //     console.log('error submit!!')
-      //     return false
-      //   }
-      // })
     },
     //重置表单
     resetForm (formName) {
@@ -639,7 +639,15 @@ export default {
       })
     },
     handleDelete (index, id) {
-      this.task.splice(index, 1)
+      this.$confirm('确认删除该任务?')
+        .then(_ => {
+          //done()
+          notify('success', '删除成功')
+        })
+        .catch(_ => {
+          notify('error', '删除失败')
+        })
+      //this.task.splice(index, 1)
     },
     beforeApkUpload (file) {
       const isAPK = file.type === 'application/vnd.android.package-archive'
@@ -724,6 +732,10 @@ export default {
     beforeRemove (file, fileList) {
       //return this.$confirm(`确定移除 ${file.name}?`)
     },
+    beforeUploadRequireDoc () {
+    },
+    beforeUploadApkFile () {
+    },
     uploadRequireDoc (param) {
       this.showLoading()
       const formData = new FormData()

+ 113 - 98
src/components/project/ProjectCreate.vue

@@ -18,7 +18,8 @@
           </el-input>
         </el-form-item>
         <el-form-item label="需求描述" prop="desc">
-          <el-input autosize type="textarea" style="width: 400px" v-model="project.desc" placeholder="请输入对项目的描述"></el-input>
+          <el-input autosize type="textarea" style="width: 400px" v-model="project.desc"
+                    placeholder="请输入对项目的描述"></el-input>
         </el-form-item>
 
         <!--<el-form-item label="价格" prop="price">-->
@@ -48,7 +49,7 @@
             style="max-height: 200px;"
           >
             <el-tab-pane :label="resourceType[0]" name="0">
-              <el-radio-group v-model="project.institution">
+              <el-radio-group v-model="project.institution" prop="institution">
                 <el-radio :label="item" name="type" v-for="item,index in institutionArray" :key="index">{{item.name}}
                 </el-radio>
               </el-radio-group>
@@ -66,6 +67,7 @@
         </el-form-item>
         <el-form-item label="需求文档" prop="doc">
           <el-upload
+            style="width: 400px"
             drag
             class="upload-demo"
             action=""
@@ -87,6 +89,7 @@
         <el-form-item label="安装包" prop="file">
           <el-upload
             drag
+            style="width: 400px"
             class="upload-demo"
             action=""
             :on-remove="handleRemove"
@@ -132,6 +135,7 @@ import provinceCityJSON from '@/constants/provinceCity.json'
 import ResourceType from '@/constants/enum/resource-type'
 import {notify} from '@/constants/index'
 import {
+  checkFileType,
   getAllInstitutions,
   getAllPlatformTypes,
   getAllServiceTypes,
@@ -211,16 +215,16 @@ export default {
       },
       rules: {
         name: [
-          {required: true, message: '请输入项目名称', trigger: 'blur'}
-          // { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
+          {required: true, message: '请输入项目名称', trigger: 'blur'},
+          {min: 5, max: 50, message: '项目名称长度在 5 到 50 个字符', trigger: 'blur'}
         ],
         contactName: [
           {required: true, message: '请输入联系人姓名', trigger: 'blur'}
           // { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
         ],
         contactPhone: [
-          {required: true, message: '请输入手机号', trigger: 'blur'}
-          // { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
+          {required: true, message: '请输入手机号', trigger: 'blur'},
+          //{min: 11, max: 11, message: '请输入正确的手机号', trigger: 'blur'}
         ],
         type: [
           {
@@ -239,15 +243,32 @@ export default {
           }
         ],
         desc: [{required: false, message: '请填写描述', trigger: 'blur'}],
-        price: [{required: true, message: '请填写价格', trigger: 'blur'}],
-        budget: [{required: true, message: '请填写预算', trigger: 'blur'}],
-        // resource: [
-        //   {
-        //     required: true,
-        //     message: '请选择项目可见性',
-        //     trigger: 'change'
-        //   }
-        // ]
+        //price: [{required: true, message: '请填写价格', trigger: 'blur'}],
+        budget: [
+          {required: true, message: '预算不可为空', trigger: 'blur'},
+          {
+            validator: (rule, value, callback) => {
+              if(value <= 0){
+                callback(new Error('请输入大于0的数'))
+              } else {
+                callback()
+              }
+            }, trigger: 'change'
+          },
+        ],
+        resource: [
+          {required: true},
+          {
+            validator: (rule, value, callback) => {
+              if (value == 0 && this.project.institution.id == null) {
+                callback(new Error('定向发布至少要选择一个区域管理员'))
+              } else {
+                callback()
+              }
+            }, trigger: 'change'
+          },
+        ],
+        datetime:[{required: true, message: '截止时间不可为空', trigger: 'blur'}],
       }
     }
   },
@@ -263,24 +284,24 @@ export default {
     institutionArray (val) {
       this.institutionArray = val
     },
-    'project.institution' () {
-      if (this.project.institution) {
-        this.$refs.addFormProvince.resetProviceCity()
-        this.project.location = {provinceCode: '', cityCode: ''}
-      }
-    },
-    'project.location' () {
-      if (this.project.location.provinceCode || this.project.location.cityCode) {
-        this.project.institution = ''
-      }
-    },
-    'project.resource' () {
-      if (this.project.resource == '2') {
-        this.$refs.addFormProvince.resetProviceCity()
-        this.project.institution = ''
-        this.project.location = {provinceCode: '', cityCode: ''}
-      }
-    },
+    // 'project.institution' () {
+    //   if (this.project.institution) {
+    //     this.$refs.addFormProvince.resetProviceCity()
+    //     this.project.location = {provinceCode: '', cityCode: ''}
+    //   }
+    // },
+    // 'project.location' () {
+    //   if (this.project.location.provinceCode || this.project.location.cityCode) {
+    //     this.project.institution = ''
+    //   }
+    // },
+    // 'project.resource' () {
+    //   if (this.project.resource == '2') {
+    //     this.$refs.addFormProvince.resetProviceCity()
+    //     this.project.institution = ''
+    //     this.project.location = {provinceCode: '', cityCode: ''}
+    //   }
+    // },
     deep: true
   },
   methods: {
@@ -314,54 +335,51 @@ export default {
       //   this.platformType.push(PlatformType[item])
       // })
     },
-    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,
-        name: this.project.name,
-        type: this.project.type,
-        platform: this.project.platform,
-        desc: this.project.desc,
-        resource: this.project.resource,
-        location: newLocation,
-        institution: this.project.institution.id,
-        contactName: this.project.contactName,
-        contactPhone: this.project.contactPhone,
-        doc: this.project.requireDocUrl,
-        file: this.project.fileUrl,
-        budget: this.project.budget,
-        datetime: this.project.datetime,
-        usage: this.project.usage,
-        price: this.project.price
-      }
-      Http.post(Apis.PROJECT.CREATE_PROJECT, newProject).then((res) => {
-        //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)
+    submitForm () {
+      this.$refs['project'].validate(valid => {
+        if (valid) {
+          //console.log(this.project)
+          this.showLoading()
+          const newLocation = getProvinceNameByProvinceCode(this.project.location.provinceCode, this.project.location.cityCode)
+          const newProject = {
+            userId: this.user.userVO.id,
+            name: this.project.name,
+            type: this.project.type,
+            platform: this.project.platform,
+            desc: this.project.desc,
+            resource: this.project.resource,
+            location: newLocation,
+            institution: this.project.institution.id,
+            contactName: this.project.contactName,
+            contactPhone: this.project.contactPhone,
+            doc: this.project.requireDocUrl,
+            file: this.project.fileUrl,
+            budget: this.project.budget,
+            datetime: this.project.datetime,
+            usage: this.project.usage,
+            price: this.project.price
+          }
+          Http.post(Apis.PROJECT.CREATE_PROJECT, newProject).then((res) => {
+            //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)
 
+          })
+        } else {
+          console.log(valid)
+          notify('error','表单填写错误!')
+          return false
+        }
       })
-      // this.$refs[formName].validate(valid => {
-      //   if (valid) {
-      //     Http.post(Apis.PROJECT.CREATE_PROJECT, this.project).then((res) => {
-      //       console.log(res.status)
-      //     })
-      //     //提交 project
-      //   } else {
-      //     console.log('error submit!!')
-      //     return false
-      //   }
-      // })
     },
     resetForm (formName) {
       this.$refs[formName].resetFields()
@@ -382,27 +400,18 @@ export default {
       this.project.budget = ''
     },
     beforeApkUpload (file) {
-      console.log(file)
-      const isAPK = file.type === 'application/vnd.android.package-archive'
-      const isDMG = file.type === 'application/octet-stream'
-
-      if (!isAPK && !isDMG) {
-        this.$message.error('上传安装包只能是 APK 或 DMG 格式!')
-      }
-      return isAPK || isDMG
+      const fileType = ['exe', 'apk', 'dmg']
+      return checkFileType(file, fileType, this.beforeApkUploadError)
+    },
+    beforeApkUploadError () {
+      this.$message.error('上传文件只能是exe,dmg,apk格式!')
     },
     beforeFileUpload (file) {
-      const isPDF = file.type === 'application/pdf'
-      const isDOC = file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
-      const isEXCEL = file.type === 'application/vnd.ms-excel'
-      const isXLS = file.type === 'application/x-xls'
-      const isTXT = file.type === 'text/plain'
-      const isXLSX = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
-      //console.log(file)
-      if (!(isDOC || isEXCEL || isPDF || isTXT || isXLS || isXLSX)) {
-        this.$message.error('上传文件只能是 PDF 、 DOC 、DOCX 、XLS、TXT、XLSX 格式!')
-      }
-      return isDOC || isEXCEL || isPDF || isTXT || isXLS || isXLSX
+      const fileTypeList = ['pdf', 'xls', 'xlsx', 'doc', 'docx', 'txt']
+      return checkFileType(file, fileTypeList, this.beforeFileUploadError)
+    },
+    beforeFileUploadError () {
+      this.$message.error('上传文件只能是 PDF 、 DOC 、DOCX 、XLS、TXT、XLSX 格式!')
     },
     loadData () {
       Http.get(Apis.PAGE.PROJECT_DETAIL_PAGE).then((res) => {
@@ -437,6 +446,9 @@ export default {
         this.project.requireDocUrl = res.data
         //console.log(this.project.doc)
         //console.log(res.data)
+      }).catch((error) => {
+        this.hideLoading()
+        notify('error', '需求文档上传失败:' + error.data)
       })
 
     },
@@ -453,6 +465,9 @@ export default {
         notify('success', '文件上传成功')
         this.project.fileUrl = res.data
         console.log(res)
+      }).catch((error) => {
+        this.hideLoading()
+        notify('error', '文件上传失败:' + error.data)
       })
     },
     setServiceType () {

+ 4 - 6
src/components/report/ProjectReport.vue

@@ -224,12 +224,10 @@ export default {
       return isDOC || isEXCEL || isPDF || isTXT || isXLS || isXLSX
     },
     back () {
-      if (window.history.length <= 1) {
-        this.$router.push({path: '/'})
-        return false
-      } else {
-        this.$router.go(-1)
-      }
+      this.$router.push({
+        name: 'Project',
+        params: {projectId: this.projectId}
+      })
     },
     loadData () {
       //pro1564487183259

+ 1 - 1
src/components/task/Task.vue

@@ -535,7 +535,7 @@ export default {
       this.taskOperationControl = res.taskOperationControl
       this.task.status = res.crowdTaskVO.status
       this.task.institution = res.crowdTaskVO.institution
-      notify('success', '结束结束成功!')
+      notify('success', '结束任务成功!')
     },
     //结束任务失败时的回调函数
     endTaskFail (error) {

+ 44 - 0
src/js/fileService.js

@@ -0,0 +1,44 @@
+import Http from './http'
+import Apis from './api'
+//上传文档
+export const uploadFile = (url, file) => {
+  const formData = new FormData()
+  let config = {
+    //添加请求头
+    headers: {'Content-Type': 'multipart/form-data'},
+  }
+  formData.append('file', file)
+  return Http.upload(url, formData, config)
+}
+
+//上传图片
+export const uploadImage = (file, uploadImageSuccess, uploadImageFail) => {
+  const formData = new FormData()
+  let config = {
+    //添加请求头
+    headers: {'Content-Type': 'multipart/form-data'},
+  }
+  formData.append('file', file)
+  Http.upload(Apis.FILE.UPLOAD_IMAGE, formData, config).then((res) => {
+    uploadImageSuccess(res)
+  }).catch((error) => {
+    uploadImageFail(error)
+  })
+}
+
+//上传图片前检测
+export const beforeUploadImage = () => {
+
+}
+
+//上传文档前检测
+export const beforeUploadFile = () => {
+
+}
+export const checkFileType = (file, typeList, checkFileTypeError) => {
+  var fileType = file.name.split('.')[file.name.split('.').length - 1].toLowerCase()
+  if (!typeList.includes(fileType)) {
+    checkFileTypeError()
+  }
+  return typeList.includes(fileType)
+}

+ 135 - 0
src/js/generalService.js

@@ -0,0 +1,135 @@
+import Http from './http'
+import Apis from './api'
+import ProvinceJson from '../constants/provinceCity'
+//存session
+export const storageSave = (key, value) => {
+  sessionStorage.setItem(key, JSON.stringify(value))
+}
+
+//取session
+export const storageGet = (key) => {
+  // return new Promise((resolve) => {
+  //   resolve(JSON.parse(sessionStorage.getItem(key)))
+  // })
+  return JSON.parse(sessionStorage.getItem(key))
+}
+
+//获取用户id
+export const getUserIdentity = () => {
+  return Http.get(Apis.USER.GET_USER_IDENTITY)
+}
+
+//获取所有测评能力
+export const getAllAbilities = () => {
+  return ['接口测试', '安全漏洞扫描', '风险评估服务', '源代码安全审计服务', '功能测试服务', '性能测试', '功能和易用性测试']
+  //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
+}
+
+//获取所有测评资源种类
+export const getAllAgencyResourceTypes = () => {
+  return ['人力资源', '服务器资源', '专用设备']
+  //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
+}
+
+//获取所有服务类型
+export const getAllServiceTypes = () => {
+  const data = ['接口测试', '安全漏洞扫描', '风险评估服务', '源代码安全审计服务', '功能测试服务', '性能测试', '功能和易用性测试']
+  return new Promise((resolve) => {
+    resolve(data)
+  })
+  //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
+}
+
+//获取所有报告类型
+export const getAllReportTypes = () => {
+  const data = ['项目可行性报告', '项目测试方案', '项目测试报告', '项目缺陷报告', '项目用例报告', '其他']
+  return new Promise((resolve) => {
+    resolve(data)
+  })
+  //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
+}
+
+//获取所有平台类型
+export const getAllPlatformTypes = () => {
+  return ['ANDROID', 'IOS', 'WEB']
+  //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
+}
+//获取所有定向发布的目标
+export const getAllInstitutions = () => {
+  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)
+}
+
+//通过代码获取省、市名称
+export const getProvinceNameByProvinceCode = (provinceCode, cityCode) => {
+  for (var i = 0; i < ProvinceJson.provinces.length; i++) {
+    if (ProvinceJson.provinces[i].code == provinceCode) {
+      for (var j = 0; j < ProvinceJson.provinces[i].cities.length; j++) {
+        if (ProvinceJson.provinces[i].cities[j].code == cityCode) {
+          return {
+            'provinceCode': ProvinceJson.provinces[i].name,
+            'cityCode': ProvinceJson.provinces[i].cities[j].name
+          }
+        }
+      }
+    }
+  }
+  return {
+    'provinceCode': '江苏省',
+    'cityCode': '南京市'
+  }
+}
+//通过名称获取省、市代码
+export const getProvinceCodeByProvinceName = (provinceName, cityName) => {
+  for (var i = 0; i < ProvinceJson.provinces.length; i++) {
+    if (ProvinceJson.provinces[i].name == provinceName) {
+      for (var j = 0; j < ProvinceJson.provinces[i].cities.length; j++) {
+        if (ProvinceJson.provinces[i].cities[j].name == cityName) {
+          return {
+            'provinceCode': ProvinceJson.provinces[i].code,
+            'cityCode': ProvinceJson.provinces[i].cities[j].code
+          }
+        }
+      }
+    }
+  }
+  return {
+    'provinceCode': '3200',
+    'cityCode': '3201'
+  }
+}
+
+//获取批量上传项目模板文件
+export const getGreenChannelAddProjectExcelTemplateFile = (getTemplateExcelSuccess, getTemplateExcelFail) => {
+  const data = {
+    fileUrl: 'http://mooctest-crowd-service.oss-cn-hangzhou.aliyuncs.com/Others/%E9%A1%B9%E7%9B%AE%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx'
+  }
+  new Promise((resolve) => {
+    resolve(data)
+  }).then((res) => {
+    getTemplateExcelSuccess(res)
+  }).catch((error) => {
+    getTemplateExcelFail(error)
+  })
+  // Http.get(Apis.FILE.GET_TEMPLATE_EXCEL_FILE).then((res) => {
+  //   getTemplateExcelSuccess(res)
+  // }).catch((error) => {
+  //   getTemplateExcelFail(error)
+  // })
+}
+

+ 758 - 523
src/js/index.js

@@ -1,530 +1,765 @@
-import Http from './http'
-import Apis from './api'
-import ProvinceJson from '../constants/provinceCity'
+import {
+  deleteAuthInfo,
+  getAllAuthentications,
+  getAuthUrls,
+  getCurrentAuthenInfo,
+  getCurrentUser,
+  getRolesPermissions,
+  logout,
+  updateAgencyAuthInfo,
+  updateEnterpriseAuthInfo,
+  updateIndividualAuthInfo,
+  uploadAgencyAuthenticationInfo,
+  uploadEnterpriseAuthenticationInfo,
+  uploadIndividualAuthenticationInfo,
+} from './userService'
+import {
+  createProject,
+  deleteProject,
+  ensureEndProject,
+  getProject,
+  receiveProjectRequest,
+  rejectProject,
+  submitProjectRequest,
+  updateProject
+} from './projectService'
+import {
+  createTask,
+  deleteTask,
+  ensureEndTask,
+  getTask,
+  receiveTaskRequest,
+  rejectTask,
+  submitTaskRequest,
+  updateTask
+} from './taskService'
+import {
+  createProjectReport,
+  createTaskReport,
+  deleteProjectReport,
+  deleteTaskReport,
+  getProjectReport,
+  getTaskReport,
+  updateProjectReport,
+  updateTaskReport,
+} from './reportService'
+import {beforeUploadFile, beforeUploadImage, checkFileType, uploadFile, uploadImage,} from './fileService'
+import {
+  getAllAbilities,
+  getAllAgencies,
+  getAllAgencyResourceTypes,
+  getAllInstitutions,
+  getAllPlatformTypes,
+  getAllReportTypes,
+  getAllServiceTypes,
+  getGreenChannelAddProjectExcelTemplateFile,
+  getProvinceCodeByProvinceName,
+  getProvinceNameByProvinceCode,
+  getUserIdentity,
+  storageGet,
+  storageSave
+} from './generalService'
+
+export {
+  /*******************************************************************************/
+  /*******************************userService*************************************/
+  /*******************************************************************************/
+  //TODO 尚未使用 用户放弃认证,删除用户认证信息
+  deleteAuthInfo,
+  //TODO 目前使用本地数据 需要修改 获取所有认证信息
+  getAllAuthentications,
+  //TODO 目前使用本地数据 需要修改 获取所有可以访问的url
+  getAuthUrls,
+  //TODO 目前使用本地数据 需要修改 获取当前用户的认证信息
+  getCurrentAuthenInfo,
+  //TODO 可以使用 需要重构 获取当前用户信息
+  getCurrentUser,
+  //TODO 基本无用 获取当前用户所有的角色权限
+  getRolesPermissions,
+  //TODO 可以使用 需要重构 用户登出
+  logout,
+  //TODO 尚未使用 代码未实现 更新机构认证信息
+  updateAgencyAuthInfo,
+  //TODO 尚未使用 代码未实现 更新企业认证信息
+  updateEnterpriseAuthInfo,
+  //TODO 尚未使用 代码未实现 更新个人认证信息
+  updateIndividualAuthInfo,
+  //TODO 尚未使用 代码未实现 上传机构认证信息
+  uploadAgencyAuthenticationInfo,
+  //TODO 尚未使用 代码未实现 上传企业认证信息
+  uploadEnterpriseAuthenticationInfo,
+  //TODO 尚未使用 代码未实现 上传个人认证信息
+  uploadIndividualAuthenticationInfo,
+}
+export {
+  /*******************************************************************************/
+  /*******************************projectService**********************************/
+  /*******************************************************************************/
+  //TODO 可以使用 需要重构 创建项目
+  createProject,
+  //TODO 可以使用 需要重构 删除项目
+  deleteProject,
+  //项目拥有者确认结束项目
+  ensureEndProject,
+  //TODO 可以使用 需要重构 获取项目信息
+  getProject,
+  //区域管理员接收项目
+  receiveProjectRequest,
+  //区域管理员拒绝项目
+  rejectProject,
+  //区域管理员提交项目
+  submitProjectRequest,
+  //TODO 可以使用 需要重构 项目拥有者修改项目
+  updateProject,
+}
+export {
+  /*******************************************************************************/
+  /*******************************taskService*************************************/
+  /*******************************************************************************/
+  //TODO 可以使用 需要重构 创建任务
+  createTask,
+  //TODO 可以使用 需要重构 删除任务
+  deleteTask,
+  //区域管理员确认结束项目
+  ensureEndTask,
+  //查看任务信息
+  getTask,
+  //测评机构接收任务
+  receiveTaskRequest,
+  //测评机构拒绝任务
+  rejectTask,
+  //测评机构提交任务
+  submitTaskRequest,
+  //区域管理员修改任务
+  updateTask,
+}
+export {
+  /*******************************************************************************/
+  /*******************************reportService***********************************/
+  /*******************************************************************************/
+  //TODO 尚未使用 代码未实现 创建项目报告
+  createProjectReport,
+  //TODO 尚未使用 代码未实现 创建任务报告
+  createTaskReport,
+  //TODO 尚未使用 代码未实现 删除项目报告
+  deleteProjectReport,
+  //TODO 尚未使用 代码未实现 删除任务报告
+  deleteTaskReport,
+  //TODO 尚未使用 代码未实现 获取项目报告详情
+  getProjectReport,
+  //TODO 尚未使用 代码未实现 获取任务报告详情
+  getTaskReport,
+  //TODO 尚未使用 代码未实现 修改项目报告
+  updateProjectReport,
+  //TODO 尚未使用 代码未实现 修改任务报告
+  updateTaskReport,
+}
+export {
+  /*******************************************************************************/
+  /*******************************fileService*************************************/
+  /*******************************************************************************/
+  //TODO 尚未使用 代码未实现 上传图片
+  uploadImage,
+  //TODO 尚未使用 代码未实现 上传文档
+  uploadFile,
+  //TODO 尚未使用 代码未实现 校验上传格式
+  checkFileType,
+  //TODO 尚未使用 代码未实现 上传需求文档
+  //TODO 尚未使用 代码未实现 上传安装包
+  //TODO 尚未使用 代码未实现 上传批量创建项目文件
+
+  beforeUploadImage,
+  beforeUploadFile,
+
+}
+export {
+  /*******************************************************************************/
+  /*******************************generalService**********************************/
+  /*******************************************************************************/
+  //TODO 目前使用本地数据 需要修改 获取所有测评能力
+  getAllAbilities,
+  //TODO 可以使用 需要重构 获取所有测评机构
+  getAllAgencies,
+  //TODO 目前使用本地数据 需要修改 获取所有测评能力 获取所有测评资源类型
+  getAllAgencyResourceTypes,
+  //TODO 可以使用 需要重构 获取所有区域管理员
+  getAllInstitutions,
+  //TODO 目前使用本地数据 需要修改 获取所有测试平台类型
+  getAllPlatformTypes,
+  //TODO 目前使用本地数据 需要修改 获取所有报告类型
+  getAllReportTypes,
+  //TODO 目前使用本地数据 需要修改 获取所有服务类型(与获取所有测评能力相同)
+  getAllServiceTypes,
+  //获取绿色通道创建项目时的模板文件
+  getGreenChannelAddProjectExcelTemplateFile,
+  //通过省和市名称获取省市代码
+  getProvinceCodeByProvinceName,
+  //通过省市代码获取省市名称
+  getProvinceNameByProvinceCode,
+  //TODO 尚未使用 代码未实现 获取用户id
+  getUserIdentity,
+  //读取本地数据
+  storageGet,
+  //保存数据到本地
+  storageSave,
+}
 
 export const defaultValue = {
   name: '普通用户',
   image: 'http://www.mooctest.net/assets/img/mooctest.png',
 }
-
-//存session
-export const storageSave = (key, value) => {
-  sessionStorage.setItem(key, JSON.stringify(value))
-}
-
-//取session
-export const storageGet = (key) => {
-  // return new Promise((resolve) => {
-  //   resolve(JSON.parse(sessionStorage.getItem(key)))
-  // })
-  return JSON.parse(sessionStorage.getItem(key))
-}
-
-//获取用户id
-export const getUserIdentity = () => {
-  return Http.get(Apis.USER.GET_USER_IDENTITY)
-}
-
-//获取用户信息
-export const getCurrentUser = () => {
-  // const data = {
-  //   userVO: {
-  //     id: 3,
-  //     photo: 'http://www.mooctest.net/assets/img/mooctest.png',
-  //     name: '郭超',
-  //     roleList: ['区域管理员', '个人用户', '企业用户', '测评机构', '系统管理员'],
-  //     mobile: '110',
-  //     email: '12345@qq.com',
-  //   },
-  //   agency: '',
-  // }
-  // return new Promise((resolve) => {
-  //   resolve(data)
-  // })
-  return Http.get(Apis.USER.GET_CURRENT_USER)
-}
 //
-export const getRolesPermissions = (roleList) => {
-  const roles = {
-    regionManager: 'RegionalManager',
-    individualUser: 'generalUser',
-    enterpriseUser: 'enterpriseUser',
-    agency: 'evaluationAgency',
-    systemAdministrator: 'SystemAdministrator'
-  }
-  const permissions = {
-    isRegionManager: false,
-    isIndividualUser: false,
-    isEnterpriseUser: false,
-    isAgency: false,
-    isSystemAdministrator: false
-  }
-  if (roleList.includes(roles.regionManager)) {
-    permissions.isRegionManager = true
-    permissions.isEnterpriseUser = true
-    permissions.isIndividualUser = true
-  }
-  if (roleList.includes(roles.agency)) {
-    permissions.isAgency = true
-    permissions.isEnterpriseUser = true
-    permissions.isIndividualUser = true
-  }
-  if (roleList.includes(roles.enterpriseUser)) {
-    permissions.isEnterpriseUser = true
-  }
-  if (roleList.includes(roles.individualUser)) {
-    permissions.isIndividualUser = true
-  }
-  if (roleList.includes(roles.systemAdministrator)) {
-    permissions.isSystemAdministrator = true
-    permissions.isRegionManager = true
-    permissions.isAgency = true
-    permissions.isEnterpriseUser = true
-    permissions.isIndividualUser = true
-  }
-  return permissions
-}
-
-export const logout = () => {
-  sessionStorage.removeItem('user')
-  sessionStorage.removeItem('rolesPermissions')
-  return Http.get(Apis.USER.LOGOUT)
-}
-
-//上传文档
-export const uploadFile = (url, file) => {
-  const formData = new FormData()
-  let config = {
-    //添加请求头
-    headers: {'Content-Type': 'multipart/form-data'},
-  }
-  formData.append('file', file)
-  return Http.upload(url, formData, config)
-}
-
-//上传图片
-export const uploadImage = (file) => {
-  const formData = new FormData()
-  let config = {
-    //添加请求头
-    headers: {'Content-Type': 'multipart/form-data'},
-  }
-  formData.append('file', file)
-  return Http.upload(Apis.FILE.UPLOAD_IMAGE, formData, config)
-}
-
-//上传图片前检测
-export const beforeUploadImage = () => {
-
-}
-
-//上传文档前检测
-export const beforeUploadFile = () => {
-
-}
-
-//创建项目
-export const createProject = (project) => {
-  return Http.post(Apis.PROJECT.CREATE_PROJECT, project)
-}
-
-//修改项目
-export const updateProject = (project, projectId) => {
-  return Http.put(Apis.PROJECT.UPDATE_PROJECT.replace('{projectId}', projectId), project)
-}
-
-//查看项目
-export const getProject = (projectId) => {
-  Http.get(Apis.PROJECT.GET_PROJECT.replace('{projectId}', projectId))
-}
-
-//删除项目
-export const deleteProject = (projectId) => {
-
-}
-
-//区域管理员提出接收项目申请
-export const receiveProjectRequest = (projectId, userId, receiveProjectSuccess, receiveProjectFail) => {
-  console.log('调用')
-  Http.put(Apis.PROJECT.ACCEPT_PROJECT.replace('{projectId}', projectId).replace('{userId}', userId), {}).then((res) => {
-    console.log(res)
-    receiveProjectSuccess(res)
-
-  }).catch((error) => {
-    console.log(error)
-    receiveProjectFail(error)
-  })
-}
-
-//区域管理员拒绝项目
-export const rejectProject = (projectId, rejectProjectSuccess, rejectProjectFail) => {
-  Http.put(Apis.PROJECT.REJECT_PROJECT.replace('{projectId}', projectId), {}).then((res) => {
-    rejectProjectSuccess(res)
-  }).catch((error) => {
-    rejectProjectFail(error)
-  })
-}
-
-//区域管理员提出结束项目申请
-export const submitProjectRequest = (projectId, submitProjectReuqestSuccess, submitProjectRequestFail) => {
-  Http.put(Apis.PROJECT.SUBMIT_PROJECT.replace('{projectId}', projectId), {}).then((res) => {
-    submitProjectReuqestSuccess(res)
-  }).catch((error) => {
-    submitProjectRequestFail(error)
-  })
-}
-
-//用户确认结束项目
-export const ensureEndProject = (projectId, endProjectSuccess, endProjectFail) => {
-  Http.put(Apis.PROJECT.END_PROJECT.replace('{projectId}', projectId), {}).then((res) => {
-    endProjectSuccess(res)
-  }).catch((error) => {
-    endProjectFail(error)
-  })
-}
-
-//创建任务
-export const createTask = (projectId, task) => {
-  return Http.post(Apis.TASK.CREATE_TASK.replace('{projectId}', projectId), task)
-}
-
-//修改任务
-export const updateTask = (projectId, taskId, task, updateTaskSuccess, updateTaskFail) => {
-  Http.put(Apis.TASK.UPDATE_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), task).then((res) => {
-    updateTaskSuccess(res)
-  }).catch((error) => {
-    updateTaskFail(error)
-  })
-}
-
-//查看任务
-export const getTask = (projectId, taskId, getTaskSuccess, getTaskFail) => {
-  Http.get(Apis.TASK.GET_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), {}).then((res) => {
-    getTaskSuccess(res)
-  }).catch((error) => {
-    getTaskFail(error)
-  })
-}
-
-//删除任务
-export const udeleteTask = () => {
-
-}
-
-//测评机构接受任务
-export const receiveTaskRequest = (projectId, taskId, userId, receiveTaskRequestSuccess, receiveTaskRequestFail) => {
-  Http.put(Apis.TASK.ACCEPT_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId).replace('{userId}', userId), {}).then((res) => {
-    receiveTaskRequestSuccess(res)
-  }).catch((error) => {
-    receiveTaskRequestFail(error)
-  })
-
-}
-
-//测评机构提出结束任务申请
-export const submitTaskRequest = (projectId, taskId, submitTaskSuccess, submitTaskFail) => {
-  Http.put(Apis.TASK.SUBMIT_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), {}).then((res) => {
-    submitTaskSuccess(res)
-  }).catch((error) => {
-    submitTaskFail(error)
-  })
-}
-
-export const rejectTask = (projectId, taskId, rejectTaskSuccess, rejectTaskFail) => {
-  Http.put(Apis.TASK.REJECT_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), {}).then((res) => {
-    rejectTaskSuccess(res)
-  }).catch((error) => {
-    rejectTaskFail(error)
-  })
-}
-
-//区域管理员确认结束任务
-export const ensureEndTask = (projectId, taskId, endTaskSuccess, endTaskFail) => {
-  Http.put(Apis.TASK.END_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), {}).then((res) => {
-    endTaskSuccess(res)
-  }).catch((error) => {
-    endTaskFail(error)
-  })
-}
-
-//创建项目报告
-export const createProjectReport = () => {
-
-}
-
-//创建任务报告
-export const createTaskReport = () => {
-
-}
-
-//修改项目报告
-export const updateProjectReport = () => {
-
-}
-
-//修改任务报告
-export const updateTaskReport = () => {
-
-}
-
-//查看报告
-export const getReport = () => {
-
-}
-
-//删除报告
-export const deleteReport = () => {
-
-}
-
-//获取所有测评能力
-export const getAllAbilities = () => {
-  return ['接口测试', '安全漏洞扫描', '风险评估服务', '源代码安全审计服务', '功能测试服务', '性能测试', '功能和易用性测试']
-  //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
-}
-
-//获取所有测评资源种类
-export const getAllAgencyResourceTypes = () => {
-  return ['人力资源', '服务器资源', '专用设备']
-  //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
-}
-
-//获取所有服务类型
-export const getAllServiceTypes = () => {
-  const data = ['接口测试', '安全漏洞扫描', '风险评估服务', '源代码安全审计服务', '功能测试服务', '性能测试', '功能和易用性测试']
-  return new Promise((resolve) => {
-    resolve(data)
-  })
-  //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
-}
-
-//获取所有报告类型
-export const getAllReportTypes = () => {
-  const data = ['项目可行性报告', '项目测试方案', '项目测试报告', '项目缺陷报告', '项目用例报告', '其他']
-  return new Promise((resolve) => {
-    resolve(data)
-  })
-  //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
-}
-
-//获取所有平台类型
-export const getAllPlatformTypes = () => {
-  return ['ANDROID', 'IOS', 'WEB']
-  //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
-}
-
-//获取当前角色可访问的url
-export const getAuthUrls = () => {
-  return [
-    '/', '/home', '/square', '/mine', '/project/create',
-    '/project/:projectId', '/project/:projectId/task/create',
-    '/project/:projectId/task/:taskId', '/project/:projectId/analyse',
-    '/report/create', '/report/:reportId', '/greenChannel/addProject', '/greenChannel/addAgency',
-    '/authentication/individual', '/authentication/enterprise',
-    '/authentication/agency', '/authentication/index'
-  ]
-  //return Http.get(Apis.USER.GET_AUTH_URLS)
-}
-
-//上传个人认证信息
-export const uploadIndividualAuthenticationInfo = () => {
-  Http.post(Apis)
-}
-
-//上传企业认证信息
-export const uploadEnterpriseAuthenticationInfo = () => {
-
-}
-
-//上传机构认证信息
-export const uploadAgencyAuthenticationInfo = () => {
-
-}
-
-//获取所有定向发布的目标
-export const getAllInstitutions = () => {
-  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)
-}
-
-//通过代码获取省、市名称
-export const getProvinceNameByProvinceCode = (provinceCode, cityCode) => {
-  for (var i = 0; i < ProvinceJson.provinces.length; i++) {
-    if (ProvinceJson.provinces[i].code == provinceCode) {
-      for (var j = 0; j < ProvinceJson.provinces[i].cities.length; j++) {
-        if (ProvinceJson.provinces[i].cities[j].code == cityCode) {
-          return {
-            'provinceCode': ProvinceJson.provinces[i].name,
-            'cityCode': ProvinceJson.provinces[i].cities[j].name
-          }
-        }
-      }
-    }
-  }
-  return {
-    'provinceCode': '江苏省',
-    'cityCode': '南京市'
-  }
-}
-//通过名称获取省、市代码
-export const getProvinceCodeByProvinceName = (provinceName, cityName) => {
-  for (var i = 0; i < ProvinceJson.provinces.length; i++) {
-    if (ProvinceJson.provinces[i].name == provinceName) {
-      for (var j = 0; j < ProvinceJson.provinces[i].cities.length; j++) {
-        if (ProvinceJson.provinces[i].cities[j].name == cityName) {
-          return {
-            'provinceCode': ProvinceJson.provinces[i].code,
-            'cityCode': ProvinceJson.provinces[i].cities[j].code
-          }
-        }
-      }
-    }
-  }
-  return {
-    'provinceCode': '3200',
-    'cityCode': '3201'
-  }
-}
-
-//获取批量上传项目模板文件
-export const getGreenChannelAddProjectExcelTemplateFile = (getTemplateExcelSuccess, getTemplateExcelFail) => {
-  const data = {
-    fileUrl:'http://mooctest-crowd-service.oss-cn-hangzhou.aliyuncs.com/Others/%E9%A1%B9%E7%9B%AE%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx'
-  }
-  new Promise((resolve) => {
-    resolve(data)
-  }).then((res)=>{
-    getTemplateExcelSuccess(res)
-  }).catch((error)=>{
-    getTemplateExcelFail(error)
-  })
-  // Http.get(Apis.FILE.GET_TEMPLATE_EXCEL_FILE).then((res) => {
-  //   getTemplateExcelSuccess(res)
-  // }).catch((error) => {
-  //   getTemplateExcelFail(error)
-  // })
-}
-
-//获取所有认证消息
-export const getAllAuthentications = () => {
-  return [{
-    userVO: {},
-    type: '',
-    status: '',
-    authenticationDetail: {}
-  }]
-}
-
-export const getCurrentAuthenInfo = () => {
-  const individualData = {
-    type: '个人',//企业、机构、个人
-    //共有
-    id: 1,
-    userId: 3,
-    bankAccount: '621000999000999000',
-    address: '江苏科技大厦',
-    status: '认证失败',
-    rejectReason: '太强',
-    createTime: '2019.13.12',
-    //个人
-    realName: '李白',
-    IDCard: '32092111111111',
-    IDCardPhoto: 'http://www.mooctest.net/assets/img/mooctest.png',
-  }
-  const enterpriseData = {
-    type: '企业',//企业、机构、个人
-    //共有
-    id: 1,
-    userId: 3,
-    bankAccount: '621000999000999000',
-    address: '江苏科技大厦1901',
-    status: '',
-    rejectReason: '',
-    createTime: '',
-    //企业
-    companyName: '慕测呀',
-    legalPersonName: '郭超啊',
-    businessLicensePhoto: null,
-    unifiedSocialCreditCode: '1900000000086',
-
-  }
-  const agencyData = {
-    type: '机构',//企业、机构、个人
-    //共有
-    id: 1,
-    userId: 3,
-    bankAccount: '100000000086',
-    address: '江苏科技大厦1901',
-    status: '',
-    rejectReason: '123123123',
-    createTime: '',
-    //机构
-    evaluationAgencyName: '慕测科技',
-    evaluationAgencyAbilityList: ['接口测试', '安全漏洞扫描', '风险评估服务', '源代码安全审计服务', '功能测试服务', '性能测试', '功能和易用性测试'],
-    evaluationAgencyResourceList: [
-      {
-        id: 0,
-        type: '人力资源',
-        name: '专家',
-        totalNum: 100,
-        availableNum: 3,
-      },
-      {
-        id: 1,
-        type: '人力资源',
-        name: '程序员',
-        totalNum: 100,
-        availableNum: 3,
-      }
-    ],
-    agencyPhoto: 'http://www.mooctest.net/assets/img/mooctest.png',
-  }
-  return new Promise((resolve) => {
-    resolve(enterpriseData)
-  })
-}
-//放弃认证
-export const deleteAuthInfo = () => {
-  const data = {}
-  return new Promise((resolve) => {
-    resolve(data)
-  })
-  //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
-}
+// //存session
+// export const storageSave = (key, value) => {
+//   sessionStorage.setItem(key, JSON.stringify(value))
+// }
 //
-export const updateIndividualAuthInfo = (userId, authInfo) => {
-  // const data = {}
-  // return new Promise((resolve) => {
-  //   resolve(data)
-  // })
-  return Http.put(Apis.USER.UPDATE_INDIVIDUAL_AUTHENTICATION_INFO.replace('{userId}', userId), authInfo)
-}
-export const updateAgencyAuthInfo = (userId, authInfo) => {
-  // const data = {}
-  // return new Promise((resolve) => {
-  //   resolve(data)
-  // })
-  return Http.put(Apis.USER.UPDATE_AGENCY_AUTHENTICATION_INFO.replace('{userId}', userId), authInfo)
-}
-export const updateEnterpriseAuthInfo = (userId, authInfo) => {
-  // const data = {}
-  // return new Promise((resolve) => {
-  //   resolve(data)
-  // })
-  return Http.put(Apis.USER.UPDATE_ENTERPRISE_AUTHENTICATION_INFO.replace('{userId}', userId), authInfo)
-}
+// //取session
+// export const storageGet = (key) => {
+//   // return new Promise((resolve) => {
+//   //   resolve(JSON.parse(sessionStorage.getItem(key)))
+//   // })
+//   return JSON.parse(sessionStorage.getItem(key))
+// }
+//
+// //获取用户id
+// export const getUserIdentity = () => {
+//   return Http.get(Apis.USER.GET_USER_IDENTITY)
+// }
+//
+// //获取用户信息
+// export const getCurrentUser = () => {
+//   // const data = {
+//   //   userVO: {
+//   //     id: 3,
+//   //     photo: 'http://www.mooctest.net/assets/img/mooctest.png',
+//   //     name: '郭超',
+//   //     roleList: ['区域管理员', '个人用户', '企业用户', '测评机构', '系统管理员'],
+//   //     mobile: '110',
+//   //     email: '12345@qq.com',
+//   //   },
+//   //   agency: '',
+//   // }
+//   // return new Promise((resolve) => {
+//   //   resolve(data)
+//   // })
+//   return Http.get(Apis.USER.GET_CURRENT_USER)
+// }
+// //
+// export const getRolesPermissions = (roleList) => {
+//   const roles = {
+//     regionManager: 'RegionalManager',
+//     individualUser: 'generalUser',
+//     enterpriseUser: 'enterpriseUser',
+//     agency: 'evaluationAgency',
+//     systemAdministrator: 'SystemAdministrator'
+//   }
+//   const permissions = {
+//     isRegionManager: false,
+//     isIndividualUser: false,
+//     isEnterpriseUser: false,
+//     isAgency: false,
+//     isSystemAdministrator: false
+//   }
+//   if (roleList.includes(roles.regionManager)) {
+//     permissions.isRegionManager = true
+//     permissions.isEnterpriseUser = true
+//     permissions.isIndividualUser = true
+//   }
+//   if (roleList.includes(roles.agency)) {
+//     permissions.isAgency = true
+//     permissions.isEnterpriseUser = true
+//     permissions.isIndividualUser = true
+//   }
+//   if (roleList.includes(roles.enterpriseUser)) {
+//     permissions.isEnterpriseUser = true
+//   }
+//   if (roleList.includes(roles.individualUser)) {
+//     permissions.isIndividualUser = true
+//   }
+//   if (roleList.includes(roles.systemAdministrator)) {
+//     permissions.isSystemAdministrator = true
+//     permissions.isRegionManager = true
+//     permissions.isAgency = true
+//     permissions.isEnterpriseUser = true
+//     permissions.isIndividualUser = true
+//   }
+//   return permissions
+// }
+//
+// export const logout = () => {
+//   sessionStorage.removeItem('user')
+//   sessionStorage.removeItem('rolesPermissions')
+//   return Http.get(Apis.USER.LOGOUT)
+// }
+//
+// //上传文档
+// export const uploadFile = (url, file) => {
+//   const formData = new FormData()
+//   let config = {
+//     //添加请求头
+//     headers: {'Content-Type': 'multipart/form-data'},
+//   }
+//   formData.append('file', file)
+//   return Http.upload(url, formData, config)
+// }
+//
+// //上传图片
+// export const uploadImage = (file, uploadImageSuccess, uploadImageFail) => {
+//   const formData = new FormData()
+//   let config = {
+//     //添加请求头
+//     headers: {'Content-Type': 'multipart/form-data'},
+//   }
+//   formData.append('file', file)
+//   Http.upload(Apis.FILE.UPLOAD_IMAGE, formData, config).then((res) => {
+//     uploadImageSuccess(res)
+//   }).catch((error) => {
+//     uploadImageFail(error)
+//   })
+// }
+//
+// //上传图片前检测
+// export const beforeUploadImage = () => {
+//
+// }
+//
+// //上传文档前检测
+// export const beforeUploadFile = () => {
+//
+// }
+//
+// //创建项目
+// export const createProject = (project) => {
+//   return Http.post(Apis.PROJECT.CREATE_PROJECT, project)
+// }
+//
+// //修改项目
+// export const updateProject = (project, projectId) => {
+//   return Http.put(Apis.PROJECT.UPDATE_PROJECT.replace('{projectId}', projectId), project)
+// }
+//
+// //查看项目
+// export const getProject = (projectId) => {
+//   Http.get(Apis.PROJECT.GET_PROJECT.replace('{projectId}', projectId))
+// }
+//
+// //删除项目
+// export const deleteProject = (projectId, deleteProjectSuccess, deleteProjectFail) => {
+//   Http.put(Apis.PROJECT.DELETE_PROJECT.replace('{projectId}', projectId), {}).then((res) => {
+//     deleteProjectSuccess(res)
+//   }).catch((error) => {
+//     deleteProjectFail(error)
+//   })
+// }
+//
+// //区域管理员提出接收项目申请
+// export const receiveProjectRequest = (projectId, userId, receiveProjectSuccess, receiveProjectFail) => {
+//   console.log('调用')
+//   Http.put(Apis.PROJECT.ACCEPT_PROJECT.replace('{projectId}', projectId).replace('{userId}', userId), {}).then((res) => {
+//     console.log(res)
+//     receiveProjectSuccess(res)
+//
+//   }).catch((error) => {
+//     console.log(error)
+//     receiveProjectFail(error)
+//   })
+// }
+//
+// //区域管理员拒绝项目
+// export const rejectProject = (projectId, rejectProjectSuccess, rejectProjectFail) => {
+//   Http.put(Apis.PROJECT.REJECT_PROJECT.replace('{projectId}', projectId), {}).then((res) => {
+//     rejectProjectSuccess(res)
+//   }).catch((error) => {
+//     rejectProjectFail(error)
+//   })
+// }
+//
+// //区域管理员提出结束项目申请
+// export const submitProjectRequest = (projectId, submitProjectReuqestSuccess, submitProjectRequestFail) => {
+//   Http.put(Apis.PROJECT.SUBMIT_PROJECT.replace('{projectId}', projectId), {}).then((res) => {
+//     submitProjectReuqestSuccess(res)
+//   }).catch((error) => {
+//     submitProjectRequestFail(error)
+//   })
+// }
+//
+// //用户确认结束项目
+// export const ensureEndProject = (projectId, endProjectSuccess, endProjectFail) => {
+//   Http.put(Apis.PROJECT.END_PROJECT.replace('{projectId}', projectId), {}).then((res) => {
+//     endProjectSuccess(res)
+//   }).catch((error) => {
+//     endProjectFail(error)
+//   })
+// }
+//
+// //创建任务
+// export const createTask = (projectId, task) => {
+//   return Http.post(Apis.TASK.CREATE_TASK.replace('{projectId}', projectId), task)
+// }
+//
+// //修改任务
+// export const updateTask = (projectId, taskId, task, updateTaskSuccess, updateTaskFail) => {
+//   Http.put(Apis.TASK.UPDATE_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), task).then((res) => {
+//     updateTaskSuccess(res)
+//   }).catch((error) => {
+//     updateTaskFail(error)
+//   })
+// }
+//
+// //查看任务
+// export const getTask = (projectId, taskId, getTaskSuccess, getTaskFail) => {
+//   Http.get(Apis.TASK.GET_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), {}).then((res) => {
+//     getTaskSuccess(res)
+//   }).catch((error) => {
+//     getTaskFail(error)
+//   })
+// }
+//
+// //删除任务
+// export const deleteTask = (projectId, taskId, deleteTaskSuccess, deleteTaskFail) => {
+//   Http.put(Apis.TASK.DELETE_TASK.replace('{projectId}', projectId).replace('taskId', taskId), {}).then((res) => {
+//     deleteTaskSuccess(res)
+//   }).catch((error) => {
+//     deleteTaskFail(error)
+//   })
+// }
+//
+// //测评机构接受任务
+// export const receiveTaskRequest = (projectId, taskId, userId, receiveTaskRequestSuccess, receiveTaskRequestFail) => {
+//   Http.put(Apis.TASK.ACCEPT_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId).replace('{userId}', userId), {}).then((res) => {
+//     receiveTaskRequestSuccess(res)
+//   }).catch((error) => {
+//     receiveTaskRequestFail(error)
+//   })
+//
+// }
+//
+// //测评机构提出结束任务申请
+// export const submitTaskRequest = (projectId, taskId, submitTaskSuccess, submitTaskFail) => {
+//   Http.put(Apis.TASK.SUBMIT_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), {}).then((res) => {
+//     submitTaskSuccess(res)
+//   }).catch((error) => {
+//     submitTaskFail(error)
+//   })
+// }
+//
+// export const rejectTask = (projectId, taskId, rejectTaskSuccess, rejectTaskFail) => {
+//   Http.put(Apis.TASK.REJECT_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), {}).then((res) => {
+//     rejectTaskSuccess(res)
+//   }).catch((error) => {
+//     rejectTaskFail(error)
+//   })
+// }
+//
+// //区域管理员确认结束任务
+// export const ensureEndTask = (projectId, taskId, endTaskSuccess, endTaskFail) => {
+//   Http.put(Apis.TASK.END_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), {}).then((res) => {
+//     endTaskSuccess(res)
+//   }).catch((error) => {
+//     endTaskFail(error)
+//   })
+// }
+//
+// //创建项目报告
+// export const createProjectReport = () => {
+//
+// }
+//
+// //创建任务报告
+// export const createTaskReport = () => {
+//
+// }
+//
+// //修改项目报告
+// export const updateProjectReport = () => {
+//
+// }
+//
+// //修改任务报告
+// export const updateTaskReport = () => {
+//
+// }
+//
+// //查看报告
+// export const getReport = () => {
+//
+// }
+//
+// //删除项目报告
+// export const deleteProjectReport = (projectId, reportId, deleteProjectReportSuccess, deleteProjectReportFail) => {
+//   Http.put(Apis.REPORT.DELETE_PROJECT_REPORT.replace('{projectId}', projectId).replace('{reportId}', reportId), {}).then((res) => {
+//     deleteProjectReportSuccess(res)
+//   }).catch((error) => {
+//     deleteProjectReportFail(error)
+//   })
+// }
+//
+// //删除任务报告
+// export const deleteTaskReport = (projectId, taskId, reportId, deleteTaskReportSuccess, deleteTaskReportFail) => {
+//   Http.put(Apis.REPORT.DELETE_TASK_REPORT.replace('{projectId}', projectId).replace('{taskId}', taskId).replace('{reportId}', reportId), {}).then((res) => {
+//     deleteTaskReportSuccess(res)
+//   }).catch((error) => {
+//     deleteTaskReportFail(error)
+//   })
+// }
+//
+// //获取所有测评能力
+// export const getAllAbilities = () => {
+//   return ['接口测试', '安全漏洞扫描', '风险评估服务', '源代码安全审计服务', '功能测试服务', '性能测试', '功能和易用性测试']
+//   //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
+// }
+//
+// //获取所有测评资源种类
+// export const getAllAgencyResourceTypes = () => {
+//   return ['人力资源', '服务器资源', '专用设备']
+//   //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
+// }
+//
+// //获取所有服务类型
+// export const getAllServiceTypes = () => {
+//   const data = ['接口测试', '安全漏洞扫描', '风险评估服务', '源代码安全审计服务', '功能测试服务', '性能测试', '功能和易用性测试']
+//   return new Promise((resolve) => {
+//     resolve(data)
+//   })
+//   //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
+// }
+//
+// //获取所有报告类型
+// export const getAllReportTypes = () => {
+//   const data = ['项目可行性报告', '项目测试方案', '项目测试报告', '项目缺陷报告', '项目用例报告', '其他']
+//   return new Promise((resolve) => {
+//     resolve(data)
+//   })
+//   //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
+// }
+//
+// //获取所有平台类型
+// export const getAllPlatformTypes = () => {
+//   return ['ANDROID', 'IOS', 'WEB']
+//   //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
+// }
+//
+// //获取当前角色可访问的url
+// export const getAuthUrls = () => {
+//   return [
+//     '/', '/home', '/square', '/mine', '/project/create',
+//     '/project/:projectId', '/project/:projectId/task/create',
+//     '/project/:projectId/task/:taskId', '/project/:projectId/analyse',
+//     '/report/create', '/report/:reportId', '/greenChannel/addProject', '/greenChannel/addAgency',
+//     '/authentication/individual', '/authentication/enterprise',
+//     '/authentication/agency', '/authentication/index'
+//   ]
+//   //return Http.get(Apis.USER.GET_AUTH_URLS)
+// }
+//
+// //上传个人认证信息
+// export const uploadIndividualAuthenticationInfo = () => {
+//   Http.post(Apis)
+// }
+//
+// //上传企业认证信息
+// export const uploadEnterpriseAuthenticationInfo = () => {
+//
+// }
+//
+// //上传机构认证信息
+// export const uploadAgencyAuthenticationInfo = () => {
+//
+// }
+//
+// //获取所有定向发布的目标
+// export const getAllInstitutions = () => {
+//   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)
+// }
+//
+// //通过代码获取省、市名称
+// export const getProvinceNameByProvinceCode = (provinceCode, cityCode) => {
+//   for (var i = 0; i < ProvinceJson.provinces.length; i++) {
+//     if (ProvinceJson.provinces[i].code == provinceCode) {
+//       for (var j = 0; j < ProvinceJson.provinces[i].cities.length; j++) {
+//         if (ProvinceJson.provinces[i].cities[j].code == cityCode) {
+//           return {
+//             'provinceCode': ProvinceJson.provinces[i].name,
+//             'cityCode': ProvinceJson.provinces[i].cities[j].name
+//           }
+//         }
+//       }
+//     }
+//   }
+//   return {
+//     'provinceCode': '江苏省',
+//     'cityCode': '南京市'
+//   }
+// }
+// //通过名称获取省、市代码
+// export const getProvinceCodeByProvinceName = (provinceName, cityName) => {
+//   for (var i = 0; i < ProvinceJson.provinces.length; i++) {
+//     if (ProvinceJson.provinces[i].name == provinceName) {
+//       for (var j = 0; j < ProvinceJson.provinces[i].cities.length; j++) {
+//         if (ProvinceJson.provinces[i].cities[j].name == cityName) {
+//           return {
+//             'provinceCode': ProvinceJson.provinces[i].code,
+//             'cityCode': ProvinceJson.provinces[i].cities[j].code
+//           }
+//         }
+//       }
+//     }
+//   }
+//   return {
+//     'provinceCode': '3200',
+//     'cityCode': '3201'
+//   }
+// }
+//
+// //获取批量上传项目模板文件
+// export const getGreenChannelAddProjectExcelTemplateFile = (getTemplateExcelSuccess, getTemplateExcelFail) => {
+//   const data = {
+//     fileUrl: 'http://mooctest-crowd-service.oss-cn-hangzhou.aliyuncs.com/Others/%E9%A1%B9%E7%9B%AE%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx'
+//   }
+//   new Promise((resolve) => {
+//     resolve(data)
+//   }).then((res) => {
+//     getTemplateExcelSuccess(res)
+//   }).catch((error) => {
+//     getTemplateExcelFail(error)
+//   })
+//   // Http.get(Apis.FILE.GET_TEMPLATE_EXCEL_FILE).then((res) => {
+//   //   getTemplateExcelSuccess(res)
+//   // }).catch((error) => {
+//   //   getTemplateExcelFail(error)
+//   // })
+// }
+//
+// //获取所有认证消息
+// export const getAllAuthentications = () => {
+//   return [{
+//     userVO: {},
+//     type: '',
+//     status: '',
+//     authenticationDetail: {}
+//   }]
+// }
+//
+// export const getCurrentAuthenInfo = () => {
+//   const individualData = {
+//     type: '个人',//企业、机构、个人
+//     //共有
+//     id: 1,
+//     userId: 3,
+//     bankAccount: '621000999000999000',
+//     address: '江苏科技大厦',
+//     status: '认证失败',
+//     rejectReason: '太强',
+//     createTime: '2019.13.12',
+//     //个人
+//     realName: '李白',
+//     IDCard: '32092111111111',
+//     IDCardPhoto: 'http://www.mooctest.net/assets/img/mooctest.png',
+//   }
+//   const enterpriseData = {
+//     type: '企业',//企业、机构、个人
+//     //共有
+//     id: 1,
+//     userId: 3,
+//     bankAccount: '621000999000999000',
+//     address: '江苏科技大厦1901',
+//     status: '',
+//     rejectReason: '',
+//     createTime: '',
+//     //企业
+//     companyName: '慕测呀',
+//     legalPersonName: '郭超啊',
+//     businessLicensePhoto: null,
+//     unifiedSocialCreditCode: '1900000000086',
+//
+//   }
+//   const agencyData = {
+//     type: '机构',//企业、机构、个人
+//     //共有
+//     id: 1,
+//     userId: 3,
+//     bankAccount: '100000000086',
+//     address: '江苏科技大厦1901',
+//     status: '',
+//     rejectReason: '123123123',
+//     createTime: '',
+//     //机构
+//     evaluationAgencyName: '慕测科技',
+//     evaluationAgencyAbilityList: ['接口测试', '安全漏洞扫描', '风险评估服务', '源代码安全审计服务', '功能测试服务', '性能测试', '功能和易用性测试'],
+//     evaluationAgencyResourceList: [
+//       {
+//         id: 0,
+//         type: '人力资源',
+//         name: '专家',
+//         totalNum: 100,
+//         availableNum: 3,
+//       },
+//       {
+//         id: 1,
+//         type: '人力资源',
+//         name: '程序员',
+//         totalNum: 100,
+//         availableNum: 3,
+//       }
+//     ],
+//     agencyPhoto: 'http://www.mooctest.net/assets/img/mooctest.png',
+//   }
+//   return new Promise((resolve) => {
+//     resolve(enterpriseData)
+//   })
+// }
+// //放弃认证
+// export const deleteAuthInfo = () => {
+//   const data = {}
+//   return new Promise((resolve) => {
+//     resolve(data)
+//   })
+//   //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
+// }
+// //
+// export const updateIndividualAuthInfo = (userId, authInfo) => {
+//   // const data = {}
+//   // return new Promise((resolve) => {
+//   //   resolve(data)
+//   // })
+//   return Http.put(Apis.USER.UPDATE_INDIVIDUAL_AUTHENTICATION_INFO.replace('{userId}', userId), authInfo)
+// }
+// export const updateAgencyAuthInfo = (userId, authInfo) => {
+//   // const data = {}
+//   // return new Promise((resolve) => {
+//   //   resolve(data)
+//   // })
+//   return Http.put(Apis.USER.UPDATE_AGENCY_AUTHENTICATION_INFO.replace('{userId}', userId), authInfo)
+// }
+// export const updateEnterpriseAuthInfo = (userId, authInfo) => {
+//   // const data = {}
+//   // return new Promise((resolve) => {
+//   //   resolve(data)
+//   // })
+//   return Http.put(Apis.USER.UPDATE_ENTERPRISE_AUTHENTICATION_INFO.replace('{userId}', userId), authInfo)
+// }
+// //
+// export const checkFileType = (file, typeList, checkFileTypeError) => {
+//   var fileType = file.name.split('.')[file.name.split('.').length - 1].toLowerCase()
+//   if (!typeList.includes(fileType)) {
+//     checkFileTypeError()
+//   }
+//   return typeList.includes(fileType)
+// }

+ 65 - 0
src/js/projectService.js

@@ -0,0 +1,65 @@
+import Http from './http'
+import Apis from './api'
+//创建项目
+export const createProject = (project) => {
+  return Http.post(Apis.PROJECT.CREATE_PROJECT, project)
+}
+
+//修改项目
+export const updateProject = (project, projectId) => {
+  return Http.put(Apis.PROJECT.UPDATE_PROJECT.replace('{projectId}', projectId), project)
+}
+
+//查看项目
+export const getProject = (projectId) => {
+  Http.get(Apis.PROJECT.GET_PROJECT.replace('{projectId}', projectId))
+}
+
+//删除项目
+export const deleteProject = (projectId, deleteProjectSuccess, deleteProjectFail) => {
+  Http.put(Apis.PROJECT.DELETE_PROJECT.replace('{projectId}', projectId), {}).then((res) => {
+    deleteProjectSuccess(res)
+  }).catch((error) => {
+    deleteProjectFail(error)
+  })
+}
+
+//区域管理员提出接收项目申请
+export const receiveProjectRequest = (projectId, userId, receiveProjectSuccess, receiveProjectFail) => {
+  console.log('调用')
+  Http.put(Apis.PROJECT.ACCEPT_PROJECT.replace('{projectId}', projectId).replace('{userId}', userId), {}).then((res) => {
+    console.log(res)
+    receiveProjectSuccess(res)
+
+  }).catch((error) => {
+    console.log(error)
+    receiveProjectFail(error)
+  })
+}
+
+//区域管理员拒绝项目
+export const rejectProject = (projectId, rejectProjectSuccess, rejectProjectFail) => {
+  Http.put(Apis.PROJECT.REJECT_PROJECT.replace('{projectId}', projectId), {}).then((res) => {
+    rejectProjectSuccess(res)
+  }).catch((error) => {
+    rejectProjectFail(error)
+  })
+}
+
+//区域管理员提出结束项目申请
+export const submitProjectRequest = (projectId, submitProjectReuqestSuccess, submitProjectRequestFail) => {
+  Http.put(Apis.PROJECT.SUBMIT_PROJECT.replace('{projectId}', projectId), {}).then((res) => {
+    submitProjectReuqestSuccess(res)
+  }).catch((error) => {
+    submitProjectRequestFail(error)
+  })
+}
+
+//用户确认结束项目
+export const ensureEndProject = (projectId, endProjectSuccess, endProjectFail) => {
+  Http.put(Apis.PROJECT.END_PROJECT.replace('{projectId}', projectId), {}).then((res) => {
+    endProjectSuccess(res)
+  }).catch((error) => {
+    endProjectFail(error)
+  })
+}

+ 48 - 0
src/js/reportService.js

@@ -0,0 +1,48 @@
+import Http from './http'
+import Apis from './api'
+//创建项目报告
+export const createProjectReport = () => {
+
+}
+
+//创建任务报告
+export const createTaskReport = () => {
+
+}
+
+//修改项目报告
+export const updateProjectReport = () => {
+
+}
+
+//修改任务报告
+export const updateTaskReport = () => {
+
+}
+
+//查看项目报告
+export const getProjectReport = () => {
+
+}
+//查看任务报告
+export const getTaskReport = () => {
+
+}
+
+//删除项目报告
+export const deleteProjectReport = (projectId, reportId, deleteProjectReportSuccess, deleteProjectReportFail) => {
+  Http.put(Apis.REPORT.DELETE_PROJECT_REPORT.replace('{projectId}', projectId).replace('{reportId}', reportId), {}).then((res) => {
+    deleteProjectReportSuccess(res)
+  }).catch((error) => {
+    deleteProjectReportFail(error)
+  })
+}
+
+//删除任务报告
+export const deleteTaskReport = (projectId, taskId, reportId, deleteTaskReportSuccess, deleteTaskReportFail) => {
+  Http.put(Apis.REPORT.DELETE_TASK_REPORT.replace('{projectId}', projectId).replace('{taskId}', taskId).replace('{reportId}', reportId), {}).then((res) => {
+    deleteTaskReportSuccess(res)
+  }).catch((error) => {
+    deleteTaskReportFail(error)
+  })
+}

+ 69 - 0
src/js/taskService.js

@@ -0,0 +1,69 @@
+import Http from './http'
+import Apis from './api'
+//创建任务
+export const createTask = (projectId, task) => {
+  return Http.post(Apis.TASK.CREATE_TASK.replace('{projectId}', projectId), task)
+}
+
+//修改任务
+export const updateTask = (projectId, taskId, task, updateTaskSuccess, updateTaskFail) => {
+  Http.put(Apis.TASK.UPDATE_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), task).then((res) => {
+    updateTaskSuccess(res)
+  }).catch((error) => {
+    updateTaskFail(error)
+  })
+}
+
+//查看任务
+export const getTask = (projectId, taskId, getTaskSuccess, getTaskFail) => {
+  Http.get(Apis.TASK.GET_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), {}).then((res) => {
+    getTaskSuccess(res)
+  }).catch((error) => {
+    getTaskFail(error)
+  })
+}
+
+//删除任务
+export const deleteTask = (projectId, taskId, deleteTaskSuccess, deleteTaskFail) => {
+  Http.put(Apis.TASK.DELETE_TASK.replace('{projectId}', projectId).replace('taskId', taskId), {}).then((res) => {
+    deleteTaskSuccess(res)
+  }).catch((error) => {
+    deleteTaskFail(error)
+  })
+}
+
+//测评机构接受任务
+export const receiveTaskRequest = (projectId, taskId, userId, receiveTaskRequestSuccess, receiveTaskRequestFail) => {
+  Http.put(Apis.TASK.ACCEPT_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId).replace('{userId}', userId), {}).then((res) => {
+    receiveTaskRequestSuccess(res)
+  }).catch((error) => {
+    receiveTaskRequestFail(error)
+  })
+
+}
+
+//测评机构提出结束任务申请
+export const submitTaskRequest = (projectId, taskId, submitTaskSuccess, submitTaskFail) => {
+  Http.put(Apis.TASK.SUBMIT_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), {}).then((res) => {
+    submitTaskSuccess(res)
+  }).catch((error) => {
+    submitTaskFail(error)
+  })
+}
+
+export const rejectTask = (projectId, taskId, rejectTaskSuccess, rejectTaskFail) => {
+  Http.put(Apis.TASK.REJECT_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), {}).then((res) => {
+    rejectTaskSuccess(res)
+  }).catch((error) => {
+    rejectTaskFail(error)
+  })
+}
+
+//区域管理员确认结束任务
+export const ensureEndTask = (projectId, taskId, endTaskSuccess, endTaskFail) => {
+  Http.put(Apis.TASK.END_TASK.replace('{projectId}', projectId).replace('{taskId}', taskId), {}).then((res) => {
+    endTaskSuccess(res)
+  }).catch((error) => {
+    endTaskFail(error)
+  })
+}

+ 203 - 0
src/js/userService.js

@@ -0,0 +1,203 @@
+import Http from './http'
+import Apis from './api'
+//获取用户信息
+export const getCurrentUser = () => {
+  // const data = {
+  //   userVO: {
+  //     id: 3,
+  //     photo: 'http://www.mooctest.net/assets/img/mooctest.png',
+  //     name: '郭超',
+  //     roleList: ['区域管理员', '个人用户', '企业用户', '测评机构', '系统管理员'],
+  //     mobile: '110',
+  //     email: '12345@qq.com',
+  //   },
+  //   agency: '',
+  // }
+  // return new Promise((resolve) => {
+  //   resolve(data)
+  // })
+  return Http.get(Apis.USER.GET_CURRENT_USER)
+}
+//
+export const getRolesPermissions = (roleList) => {
+  const roles = {
+    regionManager: 'RegionalManager',
+    individualUser: 'generalUser',
+    enterpriseUser: 'enterpriseUser',
+    agency: 'evaluationAgency',
+    systemAdministrator: 'SystemAdministrator'
+  }
+  const permissions = {
+    isRegionManager: false,
+    isIndividualUser: false,
+    isEnterpriseUser: false,
+    isAgency: false,
+    isSystemAdministrator: false
+  }
+  if (roleList.includes(roles.regionManager)) {
+    permissions.isRegionManager = true
+    permissions.isEnterpriseUser = true
+    permissions.isIndividualUser = true
+  }
+  if (roleList.includes(roles.agency)) {
+    permissions.isAgency = true
+    permissions.isEnterpriseUser = true
+    permissions.isIndividualUser = true
+  }
+  if (roleList.includes(roles.enterpriseUser)) {
+    permissions.isEnterpriseUser = true
+  }
+  if (roleList.includes(roles.individualUser)) {
+    permissions.isIndividualUser = true
+  }
+  if (roleList.includes(roles.systemAdministrator)) {
+    permissions.isSystemAdministrator = true
+    permissions.isRegionManager = true
+    permissions.isAgency = true
+    permissions.isEnterpriseUser = true
+    permissions.isIndividualUser = true
+  }
+  return permissions
+}
+
+export const logout = () => {
+  sessionStorage.removeItem('user')
+  sessionStorage.removeItem('rolesPermissions')
+  return Http.get(Apis.USER.LOGOUT)
+}
+//获取当前角色可访问的url
+export const getAuthUrls = () => {
+  return [
+    '/', '/home', '/square', '/mine', '/project/create',
+    '/project/:projectId', '/project/:projectId/task/create',
+    '/project/:projectId/task/:taskId', '/project/:projectId/analyse',
+    '/report/create', '/report/:reportId', '/greenChannel/addProject', '/greenChannel/addAgency',
+    '/authentication/individual', '/authentication/enterprise',
+    '/authentication/agency', '/authentication/index'
+  ]
+  //return Http.get(Apis.USER.GET_AUTH_URLS)
+}
+
+//上传个人认证信息
+export const uploadIndividualAuthenticationInfo = () => {
+  Http.post(Apis)
+}
+
+//上传企业认证信息
+export const uploadEnterpriseAuthenticationInfo = () => {
+
+}
+
+//上传机构认证信息
+export const uploadAgencyAuthenticationInfo = () => {
+
+}
+
+//获取所有认证消息
+export const getAllAuthentications = () => {
+  return [{
+    userVO: {},
+    type: '',
+    status: '',
+    authenticationDetail: {}
+  }]
+}
+
+export const getCurrentAuthenInfo = () => {
+  const individualData = {
+    type: '个人',//企业、机构、个人
+    //共有
+    id: 1,
+    userId: 3,
+    bankAccount: '621000999000999000',
+    address: '江苏科技大厦',
+    status: '认证失败',
+    rejectReason: '太强',
+    createTime: '2019.13.12',
+    //个人
+    realName: '李白',
+    IDCard: '32092111111111',
+    IDCardPhoto: 'http://www.mooctest.net/assets/img/mooctest.png',
+  }
+  const enterpriseData = {
+    type: '企业',//企业、机构、个人
+    //共有
+    id: 1,
+    userId: 3,
+    bankAccount: '621000999000999000',
+    address: '江苏科技大厦1901',
+    status: '',
+    rejectReason: '',
+    createTime: '',
+    //企业
+    companyName: '慕测呀',
+    legalPersonName: '郭超啊',
+    businessLicensePhoto: null,
+    unifiedSocialCreditCode: '1900000000086',
+
+  }
+  const agencyData = {
+    type: '机构',//企业、机构、个人
+    //共有
+    id: 1,
+    userId: 3,
+    bankAccount: '100000000086',
+    address: '江苏科技大厦1901',
+    status: '',
+    rejectReason: '123123123',
+    createTime: '',
+    //机构
+    evaluationAgencyName: '慕测科技',
+    evaluationAgencyAbilityList: ['接口测试', '安全漏洞扫描', '风险评估服务', '源代码安全审计服务', '功能测试服务', '性能测试', '功能和易用性测试'],
+    evaluationAgencyResourceList: [
+      {
+        id: 0,
+        type: '人力资源',
+        name: '专家',
+        totalNum: 100,
+        availableNum: 3,
+      },
+      {
+        id: 1,
+        type: '人力资源',
+        name: '程序员',
+        totalNum: 100,
+        availableNum: 3,
+      }
+    ],
+    agencyPhoto: 'http://www.mooctest.net/assets/img/mooctest.png',
+  }
+  return new Promise((resolve) => {
+    resolve(enterpriseData)
+  })
+}
+//放弃认证
+export const deleteAuthInfo = () => {
+  const data = {}
+  return new Promise((resolve) => {
+    resolve(data)
+  })
+  //return Http.get(Apis.GENERAL.GET_ALL_ABILITIES)
+}
+//
+export const updateIndividualAuthInfo = (userId, authInfo) => {
+  // const data = {}
+  // return new Promise((resolve) => {
+  //   resolve(data)
+  // })
+  return Http.put(Apis.USER.UPDATE_INDIVIDUAL_AUTHENTICATION_INFO.replace('{userId}', userId), authInfo)
+}
+export const updateAgencyAuthInfo = (userId, authInfo) => {
+  // const data = {}
+  // return new Promise((resolve) => {
+  //   resolve(data)
+  // })
+  return Http.put(Apis.USER.UPDATE_AGENCY_AUTHENTICATION_INFO.replace('{userId}', userId), authInfo)
+}
+export const updateEnterpriseAuthInfo = (userId, authInfo) => {
+  // const data = {}
+  // return new Promise((resolve) => {
+  //   resolve(data)
+  // })
+  return Http.put(Apis.USER.UPDATE_ENTERPRISE_AUTHENTICATION_INFO.replace('{userId}', userId), authInfo)
+}

+ 2 - 0
src/main.js

@@ -9,6 +9,7 @@ import {getAuthUrls, getCurrentUser, getRolesPermissions, storageGet, storageSav
 import {notify} from '@/constants/index'
 import {
   Avatar,
+  Badge,
   Button,
   ButtonGroup,
   Card,
@@ -162,6 +163,7 @@ Vue.use(Dropdown)
 Vue.use(DropdownItem)
 Vue.use(DropdownMenu)
 Vue.use(Image)
+Vue.use(Badge)
 
 Vue.prototype.$msgbox = MessageBox
 Vue.prototype.$alert = MessageBox.alert