Browse Source

人员新增以及废弃路由

panxiandiao_i 5 years ago
parent
commit
4b212ff088

+ 9 - 0
src/api/projectPage.js

@@ -118,3 +118,12 @@ export function projectGetTypeMap() {
     method: 'get'
   })
 }
+
+// 人员
+export function teamMembers(data) {
+  return request({
+    url: mockUrl + '/teamMembers/ListMember',
+    method: 'post',
+    data
+  })
+}

+ 59 - 65
src/router/index.js

@@ -96,52 +96,48 @@ export const constantRoutes = [
             path: 'projectList',
             name: '项目列表',
             component: () => import('@/views/projectManage/projectList/projectListIndex'),
-            meta: { title: '项目列表' },
-            children: [
-              {
-                path: 'projectCreate',
-                hidden: true,
-                name: '项目创建',
-                component: () => import('@/views/projectManage/projectList/projectCreate'),
-                meta: { title: '项目创建' }
-              },
-              {
-                path: 'projectPreview',
-                hidden: true,
-                name: '项目查看',
-                component: () => import('@/views/projectManage/projectList/projectPreview'),
-                meta: { title: '项目查看' }
-              }
-            ]
+            meta: { title: '项目列表' }
+          },
+          {
+            path: 'projectCreate',
+            hidden: true,
+            name: '项目创建',
+            component: () => import('@/views/projectManage/projectList/projectCreate'),
+            meta: { title: '项目创建' }
+          },
+          {
+            path: 'projectPreview',
+            hidden: true,
+            name: '项目查看',
+            component: () => import('@/views/projectManage/projectList/projectPreview'),
+            meta: { title: '项目查看' }
           },
           {
             path: 'taskList',
             name: '任务列表',
             component: () => import('@/views/projectManage/taskList/taskListIndex'),
-            meta: { title: '任务列表' },
-            children: [
-              {
-                path: 'taskCreate',
-                hidden: true,
-                name: '任务创建',
-                component: () => import('@/views/projectManage/taskList/taskCreate'),
-                meta: { title: '任务创建' }
-              },
-              {
-                path: 'taskPreview',
-                hidden: true,
-                name: '任务查看',
-                component: () => import('@/views/projectManage/taskList/taskPreview'),
-                meta: { title: '任务查看' }
-              },
-              {
-                path: 'taskUpdate',
-                hidden: true,
-                name: '任务更新',
-                component: () => import('@/views/projectManage/taskList/taskUpdateCreate'),
-                meta: { title: '任务更新' }
-              }
-            ]
+            meta: { title: '任务列表' }
+          },
+          {
+            path: 'taskCreate',
+            hidden: true,
+            name: '任务创建',
+            component: () => import('@/views/projectManage/taskList/taskCreate'),
+            meta: { title: '任务创建' }
+          },
+          {
+            path: 'taskPreview',
+            hidden: true,
+            name: '任务查看',
+            component: () => import('@/views/projectManage/taskList/taskPreview'),
+            meta: { title: '任务查看' }
+          },
+          {
+            path: 'taskUpdate',
+            hidden: true,
+            name: '任务更新',
+            component: () => import('@/views/projectManage/taskList/taskUpdateCreate'),
+            meta: { title: '任务更新' }
           }
         ]
       },
@@ -266,30 +262,28 @@ export const constantRoutes = [
         path: '/Platform/defectManagement',
         name: '缺陷管理',
         component: () => import('@/views/Platform/defectManagement'),
-        meta: { title: '缺陷管理' },
-        children: [
-          {
-            path: 'bugCreate',
-            name: '新建Bug',
-            hidden: true,
-            component: () => import('@/views/Platform/bugManage/bugCreate'),
-            meta: { title: '新建Bug' }
-          },
-          {
-            path: 'bugQuery',
-            name: '查看Bug',
-            hidden: true,
-            component: () => import('@/views/Platform/bugManage/bugQuery'),
-            meta: { title: '查看Bug' }
-          },
-          {
-            path: 'bugUpdate',
-            name: '更新Bug',
-            hidden: true,
-            component: () => import('@/views/Platform/bugManage/bugUpdate'),
-            meta: { title: '更新Bug' }
-          }
-        ]
+        meta: { title: '缺陷管理' }
+      },
+      {
+        path: 'bugCreate',
+        name: '新建Bug',
+        hidden: true,
+        component: () => import('@/views/Platform/bugManage/bugCreate'),
+        meta: { title: '新建Bug' }
+      },
+      {
+        path: 'bugQuery',
+        name: '查看Bug',
+        hidden: true,
+        component: () => import('@/views/Platform/bugManage/bugQuery'),
+        meta: { title: '查看Bug' }
+      },
+      {
+        path: 'bugUpdate',
+        name: '更新Bug',
+        hidden: true,
+        component: () => import('@/views/Platform/bugManage/bugUpdate'),
+        meta: { title: '更新Bug' }
       }
     ]
   },

+ 50 - 9
src/views/Platform/bugManage/bugCreate.vue

@@ -1,5 +1,5 @@
 <template>
-  <div id="window-judge" class="set-background">
+  <div class="set-background">
     <el-form ref="form" :model="form" :rules="serviceDataRules">
       <div class="block">
         <div class="block-flex">
@@ -78,10 +78,28 @@
         <div class="block-flex">
           <div class="line-between">
             <el-form-item label="创建人" label-width="124px"><el-input v-model="form.creator" autocomplete="off" style="width:76%;" /></el-form-item>
-            <el-form-item label="bug责任人" prop="assigner" label-width="147px"><el-input v-model="form.assigner" autocomplete="off" style="width:76%;" /></el-form-item>
+            <el-form-item label="bug责任人" prop="assigner" label-width="147px">
+              <el-select v-model="form.assigner" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsAssigner"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
           </div>
           <div class="line-between">
-            <el-form-item label="当前处理人" prop="currentHandler" label-width="124px"><el-input v-model="form.currentHandler" autocomplete="off" style="width:76%;" /></el-form-item>
+            <el-form-item label="当前处理人" prop="currentHandler" label-width="124px">
+              <el-select v-model="form.currentHandler" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsCurrentHandler"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
             <el-form-item label="开始开发时间" label-width="147px">    <el-date-picker
               v-model="form.startDevTime"
               type="datetime"
@@ -178,8 +196,8 @@
 
 <script>
 import { bugGetEnum, taskListCreate, bugCreate } from '@/api/defectManage'
-import { projectGetTypeMap } from '@/api/projectPage'
-import { getTaskData } from '@/api/projectPage.js'
+import { projectGetTypeMap, teamMembers, getTaskData } from '@/api/projectPage'
+import axios from 'axios'
 
 export default {
   data() {
@@ -193,10 +211,13 @@ export default {
         creator: ''
       },
       businessTypeStr: [],
+      optionsAssigner: [],
+      optionsCurrentHandler: [],
       taskIdStr: '',
       taskStatus: '',
       platformTypeStr: [],
       bugTypeStr: [],
+      bugLevelStr: [],
       discoveryMethodStr: [],
       reasonStr: [],
       bugStatusStr: [],
@@ -205,7 +226,6 @@ export default {
       fileList: [],
       serviceTypeEnumList: [],
       clientTypeEnumList: [],
-      bugLevelStr: [{ name: 'p0', value: 0 }, { name: 'p1', value: 1 }, { name: 'p2', value: 2 }, { name: 'p3', value: 3 }],
       bizOptions: [],
       serviceDataRules: {
         bugName: [{ required: true, message: '标题不能为空', trigger: 'change' }],
@@ -222,8 +242,8 @@ export default {
         status: [{ required: true, message: '状态不能为空', trigger: 'change' }],
         platformType: [{ required: true, message: '平台类型不能为空', trigger: 'change' }],
         stage: [{ required: true, message: '所处阶段不能为空', trigger: 'change' }],
-        assigner: [{ required: true, message: 'bug责任人不能为空', trigger: 'change' }],
-        currentHandler: [{ required: true, message: 'bug处理人不能为空', trigger: 'change' }],
+        assigner: [{ required: true, message: 'bug责任人不能为空', trigger: 'blur' }],
+        currentHandler: [{ required: true, message: 'bug处理人不能为空', trigger: 'blur' }],
         bugDescribe: [{ required: true, message: 'bug描述不能为空', trigger: 'change' }],
         clientType: [{ required: true, message: '业务模块不能为空', trigger: 'change' }]
       },
@@ -251,7 +271,6 @@ export default {
       for (var el of this.fileDbList) {
         arr.push({ 'name': el.name, 'url': 'http' + el.response.url })
       }
-      console.log(arr)
     },
     async bugListSelect() {
       await bugGetEnum().then(res => {
@@ -288,6 +307,7 @@ export default {
       } else {
         this.form.creator = this.userNames
       }
+      this.getMember() // 保证bizId存在
     },
     forkDown() {
       projectGetTypeMap().then(res => {
@@ -307,6 +327,7 @@ export default {
       this.$set(this.form, 'platformType', '')
       this.$set(this.form, 'clientType', '')
       this.$set(this.form, 'moduleId', '')
+      this.getMember() // 保证bizId存在
     },
     // 业务线取子数据
     clickChangeBusiness(e) {
@@ -330,6 +351,19 @@ export default {
       }
       this.$set(this.form, 'moduleId', '')
     },
+    // 人员搜索
+    getMember() {
+      const objDataAssigner = { bizId: this.form.bizId, email: '', role: 'rd' }
+      const objDataCurrentHandler = { bizId: this.form.bizId, email: '' }
+      axios.all([teamMembers(objDataAssigner), teamMembers(objDataCurrentHandler)]).then(axios.spread((resAssigner, resCurrentHandler) => {
+        if (resAssigner.code === 200 && resCurrentHandler.code === 200) {
+          this.optionsAssigner = resAssigner.data
+          this.optionsCurrentHandler = resCurrentHandler.data
+        } else {
+          this.errorFun('人员数据获取失败')
+        }
+      }))
+    },
     // 提交表单并且返回刷新
     createFormData(form) {
       this.$refs.form.validate((valid) => {
@@ -339,6 +373,12 @@ export default {
           }
           form.reopenTimes = parseInt(form.reopenTimes)
           form.projectId = this.taskIdStr.filter(value => value.id === this.form.taskId)[0].projectId
+          if (form.assigner) {
+            form.assigner = form.assigner.join(',')
+          }
+          if (form.currentHandler) {
+            form.currentHandler = form.currentHandler.join(',')
+          }
           this.userData = { id: '', ename: this.userInformation, name: this.userNames }
           this.objData = { bugBaseInfo: form, user: this.userData }
           bugCreate(this.objData).then(res => {
@@ -381,6 +421,7 @@ export default {
         display flex
       .block-flex >>> .el-form-item__content
         width 100%
+        margin-left 0 !important
       .line-between
         width 100%
         display flex

+ 63 - 16
src/views/Platform/bugManage/bugQuery.vue

@@ -1,5 +1,5 @@
 <template>
-  <div id="window-judge" class="set-background">
+  <div class="set-background">
     <el-form :model="form">
       <div class="block">
         <el-form-item label="标题 :" label-width="48px">{{ form.bugName }}</el-form-item>
@@ -20,7 +20,7 @@
           描述 :&nbsp;&nbsp;&nbsp;{{ form.bugDescribe }}
         </div>
         <div class="display-messege">
-          <div class="divide-threeparts">任务 :&nbsp;&nbsp;&nbsp;{{ form.projectName }}</div>
+          <div class="divide-threeparts">任务 :&nbsp;&nbsp;&nbsp;{{ form.taskName }}</div>
           <div class="divide-threeparts">业务线 :&nbsp;&nbsp;&nbsp;{{ bizId }}</div>
           <div class="divide-threeparts">平台类型 :&nbsp;&nbsp;&nbsp;{{ form.platformTypeName }}</div>
         </div>
@@ -38,8 +38,8 @@
       <div class="block">
         <div class="display-messege">
           <div class="divide-threeparts">创建人 :&nbsp;&nbsp;&nbsp;{{ form.creator }}</div>
-          <div class="divide-threeparts">bug责任人 :&nbsp;&nbsp;&nbsp;{{ form.assigner }}</div>
-          <div class="divide-threeparts">当前处理人 :&nbsp;&nbsp;&nbsp;{{ currentHandler }}</div>
+          <div class="divide-threeparts"><span>bug责任人 :</span>&nbsp;&nbsp;&nbsp;{{ form.assigner }}</div>
+          <div class="divide-threeparts"><span>当前处理人 :</span>&nbsp;&nbsp;&nbsp;{{ currentHandler }}</div>
         </div>
         <div class="display-messege">
           <div class="divide-threeparts">开始开发时间 :&nbsp;&nbsp;&nbsp;{{ form.startDevTime }}</div>
@@ -71,29 +71,47 @@
         </div>
       </div>
     </el-form>
-    <el-dialog :visible.sync="dialogInDevelopment" width="40%">
+    <el-dialog :visible.sync="dialogInDevelopment" width="40%" @close="cancelInput()">
       <el-form ref="refeshDevelopmentDialog" :model="pauseData" :rules="serviceDataRules">
-        <el-form-item label="开发RD" prop="pauseCurrentHandler" label-width="30%"><el-input v-model="pauseData.pauseCurrentHandler" autocomplete="off" style="width:55%;" /></el-form-item>
+        <el-form-item label="开发RD" prop="pauseCurrentHandler" label-width="30%">
+          <el-select v-model="pauseData.pauseCurrentHandler" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+            <el-option
+              v-for="item in optionsCurrentHandlerRD"
+              :key="item.id"
+              :label="item.email"
+              :value="item.email"
+            />
+          </el-select>
+        </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click="dialogInDevelopment = false">取 消</el-button>
         <el-button type="primary" @click="queryFormData">确 定</el-button>
       </div>
     </el-dialog>
-    <el-dialog :visible.sync="dialogWaitTest" width="40%">
+    <el-dialog :visible.sync="dialogWaitTest" width="40%" @close="cancelInput()">
       <el-form ref="refeshWaitTestDialog" :model="pauseData" :rules="serviceDataRules">
-        <el-form-item label="验收QA" prop="pauseCurrentHandler" label-width="30%"><el-input v-model="pauseData.pauseCurrentHandler" autocomplete="off" style="width:55%;" /></el-form-item>
+        <el-form-item label="验收QA" prop="pauseCurrentHandler" label-width="30%">
+          <el-select v-model="pauseData.pauseCurrentHandler" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+            <el-option
+              v-for="item in optionsCurrentHandlerQA"
+              :key="item.id"
+              :label="item.email"
+              :value="item.email"
+            />
+          </el-select>
+        </el-form-item>
         <el-form-item style="flex-grow:1" label="问题原因" prop="reasonPause" label-width="30%">
-          <el-select v-model="pauseData.reasonPause" placeholder="问题原因" style="width:55%;">
+          <el-select v-model="pauseData.reasonPause" placeholder="问题原因" style="width:76%;">
             <el-option v-for="item in reasonStr" :key="item.name" :label="item.name" :value="item.code" />
           </el-select>
         </el-form-item>
         <el-form-item style="flex-grow:1" label="bug类型" prop="bugTypePause" label-width="30%">
-          <el-select v-model="pauseData.bugTypePause" placeholder="bug类型" style="width:55%;">
+          <el-select v-model="pauseData.bugTypePause" placeholder="bug类型" style="width:76%;">
             <el-option v-for="item in bugTypeStr" :key="item.name" :label="item.name" :value="item.code" />
           </el-select>
         </el-form-item>
-        <el-form-item label="修复方式" prop="pauseReasonsAndSolutionForTheProblem" label-width="30%"><el-input v-model="pauseData.pauseReasonsAndSolutionForTheProblem" type="textarea" autocomplete="off" rows="3" style="width:55%;" /></el-form-item>
+        <el-form-item label="修复方式" prop="pauseReasonsAndSolutionForTheProblem" label-width="30%"><el-input v-model="pauseData.pauseReasonsAndSolutionForTheProblem" type="textarea" autocomplete="off" rows="3" style="width:76%;" /></el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click="dialogWaitTest = false">取 消</el-button>
@@ -103,7 +121,7 @@
     <el-dialog :visible.sync="dialogInRepairResult" width="40%">
       <el-form ref="refeshResultDialog" :model="pauseData" :rules="serviceDataRules">
         <el-form-item label="修复结果" prop="pauseRepairResult" label-width="30%">
-          <el-select v-model="pauseData.pauseRepairResult" placeholder="修复结果" style="width:55%;">
+          <el-select v-model="pauseData.pauseRepairResult" placeholder="修复结果" style="width:76%;">
             <el-option v-for="item in repairStr" :key="item.name" :label="item.name" :value="item.code" />
           </el-select>
         </el-form-item>
@@ -118,6 +136,7 @@
 
 <script>
 import { bugGetEnum, bugUpdate, bugGet } from '@/api/defectManage'
+import { teamMembers } from '@/api/projectPage'
 
 export default {
   data() {
@@ -134,13 +153,15 @@ export default {
         pauseReasonsAndSolutionForTheProblem: ''
       },
       serviceDataRules: {
-        pauseCurrentHandler: [{ required: true, message: '处理人不能为空', trigger: 'change' }],
+        pauseCurrentHandler: [{ required: true, message: '处理人不能为空', trigger: 'blur' }],
         reasonPause: [{ required: true, message: '问题原因不能为空', trigger: 'change' }],
         bugTypePause: [{ required: true, message: 'bug类型不能为空', trigger: 'change' }],
         pauseRepairResult: [{ required: true, message: '修复结果不能为空', trigger: 'change' }],
         pauseReasonsAndSolutionForTheProblem: [{ required: true, message: '修复方式不能为空', trigger: 'change' }]
       },
       bizId: '',
+      optionsCurrentHandlerQA: [],
+      optionsCurrentHandlerRD: [],
       currentHandler: '',
       formLabelWidth: '5.1%',
       twoLable: '20%',
@@ -212,11 +233,17 @@ export default {
         this.formUpdateValue = {}
       })
     },
+    // 弹窗关闭时重置
+    cancelInput() {
+      this.pauseData.pauseCurrentHandler = ''
+    },
     statusChange(e) {
       if (e === 1) {
         this.dialogInDevelopment = true
+        this.getMember('rd') // 人员搜索
       } else if (e === 2) {
         this.dialogWaitTest = true
+        this.getMember('qa') // 人员搜索
       } else if (e === 3) {
         this.dialogInRepairResult = true
       } else {
@@ -238,11 +265,24 @@ export default {
         this.formUpdateValue = {}
       }
     },
+    // 人员搜索
+    getMember(role) {
+      const objDataCurrentHandler = { bizId: this.form.bizId, email: '', role: role }
+      teamMembers(objDataCurrentHandler).then((res) => {
+        if (res.code === 200 && role === 'qa') {
+          this.optionsCurrentHandlerQA = res.data
+        } else if (res.code === 200 && role === 'rd') {
+          this.optionsCurrentHandlerRD = res.data
+        } else {
+          this.errorFun()
+        }
+      })
+    },
     queryFormData() {
       this.$refs.refeshDevelopmentDialog.validate((valid) => {
         if (valid) {
           if (this.dialogWaitTest || this.dialogInDevelopment) {
-            this.form.currentHandler = this.pauseData.pauseCurrentHandler
+            this.form.currentHandler = this.pauseData.pauseCurrentHandler.join(',')
           }
           this.formUpdateValue.currentHandler = this.form.currentHandler
           this.formUpdateValue.id = this.form.id
@@ -252,7 +292,7 @@ export default {
           bugUpdate(this.objData).then(res => {
             if (res.code === 200) {
               this.successFun()
-              this.currentHandler = this.pauseData.pauseCurrentHandler
+              this.currentHandler = this.form.currentHandler
               if (this.$refs.refeshDevelopmentDialog !== undefined) {
                 this.$refs.refeshDevelopmentDialog.resetFields()
               }
@@ -269,7 +309,7 @@ export default {
       this.$refs.refeshWaitTestDialog.validate((valid) => {
         if (valid) {
           if (this.dialogWaitTest || this.dialogInDevelopment) {
-            this.form.currentHandler = this.pauseData.pauseCurrentHandler
+            this.form.currentHandler = this.pauseData.pauseCurrentHandler.join(',')
             this.form.reason = this.pauseData.reasonPause
             this.form.bugType = this.pauseData.bugTypePause
           }
@@ -353,6 +393,8 @@ export default {
       width 78vw
       margin-top 25px
       padding 29px 50px
+    .block >>> .el-form-item__content
+      margin-left 0 !important
     .display-messege
       font-size 14px
       font-family PingFangSC-Regular,PingFangSC
@@ -370,6 +412,11 @@ export default {
       width 100%
     .divide-threeparts
       width 33.3%
+      white-space pre-wrap
+      word-wrap break-word
+      padding-right 30px
+      span
+        white-space nowrap
     .block-end
       background-color rgba(255,255,255,1)
       box-shadow 0px 0px 11px 0px rgba(238,240,245,1)

+ 56 - 7
src/views/Platform/bugManage/bugUpdate.vue

@@ -1,5 +1,5 @@
 <template>
-  <div id="window-judge" class="set-background">
+  <div class="set-background">
     <el-form ref="form" :model="form" :rules="serviceDataRules">
       <div class="block">
         <div class="block-flex">
@@ -78,10 +78,28 @@
         <div class="block-flex">
           <div class="line-between">
             <el-form-item label="创建人" label-width="124px"><el-input v-model="form.creator" autocomplete="off" style="width:76%;" /></el-form-item>
-            <el-form-item label="bug责任人" prop="assigner" label-width="147px"><el-input v-model="form.assigner" autocomplete="off" style="width:76%;" /></el-form-item>
+            <el-form-item label="bug责任人" prop="assigner" label-width="147px">
+              <el-select v-model="form.assigner" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsAssigner"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
           </div>
           <div class="line-between">
-            <el-form-item label="当前处理人" prop="currentHandler" label-width="124px"><el-input v-model="form.currentHandler" autocomplete="off" style="width:76%;" /></el-form-item>
+            <el-form-item label="当前处理人" prop="currentHandler" label-width="124px">
+              <el-select v-model="form.currentHandler" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsCurrentHandler"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
             <el-form-item label="开始开发时间" label-width="147px">    <el-date-picker
               v-model="form.startDevTime"
               type="datetime"
@@ -178,7 +196,8 @@
 
 <script>
 import { bugGetEnum, taskListCreate, bugUpdate, bugGet } from '@/api/defectManage'
-import { projectGetTypeMap } from '@/api/projectPage'
+import { projectGetTypeMap, teamMembers } from '@/api/projectPage'
+import axios from 'axios'
 
 export default {
   data() {
@@ -188,6 +207,8 @@ export default {
         platformType: '',
         clientType: ''
       },
+      optionsAssigner: [],
+      optionsCurrentHandler: [],
       businessTypeStr: [],
       taskIdStr: '',
       platformTypeStr: [],
@@ -200,7 +221,7 @@ export default {
       fileList: [],
       serviceTypeEnumList: [],
       clientTypeEnumList: [],
-      bugLevelStr: [{ name: 'p0', value: 0 }, { name: 'p1', value: 1 }, { name: 'p2', value: 2 }, { name: 'p3', value: 3 }],
+      bugLevelStr: [],
       bizOptions: [],
       serviceDataRules: {
         bugName: [{ required: true, message: '标题不能为空', trigger: 'change' }],
@@ -217,8 +238,8 @@ export default {
         status: [{ required: true, message: '状态不能为空', trigger: 'change' }],
         platformType: [{ required: true, message: '平台类型不能为空', trigger: 'change' }],
         stage: [{ required: true, message: '所处阶段不能为空', trigger: 'change' }],
-        assigner: [{ required: true, message: 'bug责任人不能为空', trigger: 'change' }],
-        currentHandler: [{ required: true, message: 'bug处理人不能为空', trigger: 'change' }],
+        assigner: [{ required: true, message: 'bug责任人不能为空', trigger: 'blur' }],
+        currentHandler: [{ required: true, message: 'bug处理人不能为空', trigger: 'blur' }],
         bugDescribe: [{ required: true, message: 'bug描述不能为空', trigger: 'change' }],
         clientType: [{ required: true, message: '业务模块不能为空', trigger: 'change' }]
       },
@@ -267,6 +288,13 @@ export default {
             this.moduleStr = this.businessTypeStr.filter(value => value.code === this.form.clientType)[0].child
           }
         }
+        this.getMember() // 保证bizId存在
+        if (this.form.assigner) {
+          this.form.assigner = this.form.assigner.split(',')
+        }
+        if (this.form.currentHandler) {
+          this.form.currentHandler = this.form.currentHandler.split(',')
+        }
       })
     },
     // 获取任务数据
@@ -283,6 +311,7 @@ export default {
       this.$set(this.form, 'platformType', '')
       this.$set(this.form, 'clientType', '')
       this.$set(this.form, 'moduleId', '')
+      this.getMember() // 保证bizId存在
     },
     // 业务线取子数据
     clickChangeBusiness(e) {
@@ -306,11 +335,30 @@ export default {
       }
       this.$set(this.form, 'moduleId', '')
     },
+    // 人员搜索
+    getMember() {
+      const objDataAssigner = { bizId: this.form.bizId, email: '', role: 'rd' }
+      const objDataCurrentHandler = { bizId: this.form.bizId, email: '' }
+      axios.all([teamMembers(objDataAssigner), teamMembers(objDataCurrentHandler)]).then(axios.spread((resAssigner, resCurrentHandler) => {
+        if (resAssigner.code === 200 && resCurrentHandler.code === 200) {
+          this.optionsAssigner = resAssigner.data
+          this.optionsCurrentHandler = resCurrentHandler.data
+        } else {
+          this.errorFun('人员数据获取失败')
+        }
+      }))
+    },
     // 提交表单并且返回刷新
     createFormData(form) {
       this.$refs.form.validate((valid) => {
         if (valid) {
           form.reopenTimes = parseInt(form.reopenTimes)
+          if (form.assigner) {
+            form.assigner = form.assigner.join(',')
+          }
+          if (form.currentHandler) {
+            form.currentHandler = form.currentHandler.join(',')
+          }
           this.userData = { id: '', ename: this.userInformation, name: this.userNames }
           this.objData = { bugBaseInfo: form, user: this.userData }
           bugUpdate(this.objData).then(res => {
@@ -351,6 +399,7 @@ export default {
         display flex
       .block-flex >>> .el-form-item__content
         width 100%
+        margin-left 0 !important
       .line-between
         width 100%
         display flex

+ 213 - 220
src/views/Platform/defectManagement.vue

@@ -1,235 +1,234 @@
 <template>
-  <div id="init-window" style="position:relative">
-    <router-view />
-    <!--缺陷管理-->
-    <div style="position: absolute;width: 100%;">
-      <div style="margin: 2% 0;">
-        <el-form :model="queryCode">
-          <el-select v-model="queryCode.taskId" clearable placeholder="任务" style="width:10%;margin:0 5px;">
-            <el-option v-for="item in taskIdStr" :key="item.id" :label="item.name" :value="item.id" />
-          </el-select>
-          <el-select v-model="queryCode.status" clearable placeholder="bug状态" style="width:10%;margin-right:5px;">
-            <el-option v-for="item in bugStatusStr" :key="item.code" :label="item.name" :value="item.code" />
-          </el-select>
-          <el-input v-model="queryCode.currentHandler" clearable filterable placeholder="处理人" style="width:12%;margin-right:5px;" />
-          <el-input v-model="queryCode.creator" clearable filterable placeholder="创建人" style="width:12%;margin-right:5px;" />
-          <el-date-picker v-model="queryCode.gmtCreateBegin" style="width:12%;margin-right:5px;" type="datetime" placeholder="创建时间" />
-          <el-date-picker v-model="queryCode.gmtCreateEnd" style="width:12%;margin-right:5px;" type="datetime" placeholder="截止时间" />
-          <el-input v-model="queryCode.bugName" clearable filterable placeholder="主题" style="width:12%;margin-right:5px;" />
-          <el-button type="primary" @click="dataQuery(queryCode)">查询</el-button>
-          <el-button type="primary" style="margin: 1% 5px;" @click="createdCode()">新建bug</el-button>
-        </el-form>
-      </div>
+  <div style="width: 100%;">
+    <div style="margin: 2% 0;">
+      <el-form :model="queryCode">
+        <el-select v-model="queryCode.taskId" clearable placeholder="任务" style="width:10%;margin:0 5px;">
+          <el-option v-for="item in taskIdStr" :key="item.id" :label="item.name" :value="item.id" />
+        </el-select>
+        <el-select v-model="queryCode.status" clearable placeholder="bug状态" style="width:10%;margin-right:5px;">
+          <el-option v-for="item in bugStatusStr" :key="item.code" :label="item.name" :value="item.code" />
+        </el-select>
+        <el-input v-model="queryCode.currentHandler" clearable filterable placeholder="处理人" style="width:12%;margin-right:5px;" />
+        <el-input v-model="queryCode.creator" clearable filterable placeholder="创建人" style="width:12%;margin-right:5px;" />
+        <!-- <el-date-picker v-model="queryCode.gmtCreateBegin" style="width:12%;margin-right:5px;" type="datetime" placeholder="创建时间" /> -->
+        <!-- <el-date-picker v-model="queryCode.gmtCreateEnd" style="width:12%;margin-right:5px;" type="datetime" placeholder="截止时间" /> -->
+        <el-input v-model="queryCode.bugName" clearable filterable placeholder="主题" style="width:12%;margin-right:5px;" />
+        <el-select v-model="queryCode.priority" clearable placeholder="级别" style="width:10%;margin-right:5px;">
+          <el-option v-for="item in bugStatusPriority" :key="item.code" :label="item.name" :value="item.code" />
+        </el-select>
+        <el-button type="primary" @click="dataQuery(queryCode)">查询</el-button>
+        <el-button type="primary" style="margin: 1% 5px;" @click="createdCode()">新建bug</el-button>
+      </el-form>
+    </div>
 
-      <el-table :data="tableData" fit>
-        <el-table-column label="ID" min-width="120" align="center">
-          <template slot-scope="scope">{{ scope.row.id }}</template>
-        </el-table-column>
-        <el-table-column label="主题" min-width="230" align="center">
-          <template slot-scope="scope"><a href="javascript:void(0)" style="color:#20a0ff" @click="toReportView(scope.row.id)">{{ scope.row.bugName }}</a></template>
-        </el-table-column>
-        <el-table-column label="处理人" min-width="150" align="center">
-          <template slot-scope="scope">{{ scope.row.currentHandler }}</template>
-        </el-table-column>
-        <el-table-column label="创建日期" min-width="250" align="center">
-          <template slot-scope="scope">{{ scope.row.gmtCreate }}</template>
-        </el-table-column>
-        <el-table-column label="级别" width="150" align="center">
-          <template slot-scope="scope"><span>{{ scope.row.priorityName }}</span></template>
-        </el-table-column>
-        <el-table-column label="状态" width="150" align="center">
-          <template slot-scope="scope"><span>{{ scope.row.bugStatusName }}</span></template>
-        </el-table-column>
-        <el-table-column fixed="right" label="操作" width="225" align="center">
-          <template slot-scope="scope">
-            <el-button size="mini" type="primary" @click="queryPresentation(scope.row)">更新</el-button>
-            <el-button size="mini" type="primary" @click="delePresentation(scope.row.id)">删除</el-button>
-            <el-button size="mini" type="primary" @click="copyArrange(scope.row.id)">复制</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
+    <el-table :data="tableData" fit>
+      <el-table-column label="ID" min-width="120" align="center">
+        <template slot-scope="scope">{{ scope.row.id }}</template>
+      </el-table-column>
+      <el-table-column label="主题" min-width="230" align="center">
+        <template slot-scope="scope"><a href="javascript:void(0)" style="color:#20a0ff" @click="toReportView(scope.row.id)">{{ scope.row.bugName }}</a></template>
+      </el-table-column>
+      <el-table-column label="处理人" min-width="150" align="center">
+        <template slot-scope="scope">{{ scope.row.currentHandler }}</template>
+      </el-table-column>
+      <el-table-column label="创建日期" min-width="250" align="center">
+        <template slot-scope="scope">{{ scope.row.gmtCreate }}</template>
+      </el-table-column>
+      <el-table-column label="级别" width="150" align="center">
+        <template slot-scope="scope"><span>{{ scope.row.priorityName }}</span></template>
+      </el-table-column>
+      <el-table-column label="状态" width="150" align="center">
+        <template slot-scope="scope"><span>{{ scope.row.bugStatusName }}</span></template>
+      </el-table-column>
+      <el-table-column fixed="right" label="操作" width="225" align="center">
+        <template slot-scope="scope">
+          <el-button size="mini" type="primary" @click="queryPresentation(scope.row)">更新</el-button>
+          <el-button size="mini" type="primary" @click="delePresentation(scope.row.id)">删除</el-button>
+          <el-button size="mini" type="primary" @click="copyArrange(scope.row.id)">复制</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
 
-      <el-pagination style="margin-top:30px;" align="center" :current-page="curIndex" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+    <el-pagination style="margin-top:30px;" align="center" :current-page="curIndex" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
 
-      <el-dialog class="adjustHeight" :title="titName" :visible.sync="dialogFormVisible" width="70%">
-        <el-form ref="form" :model="form" :rules="serviceDataRules">
-          <div class="set-background">
-            <el-form-item label="标题" :label-width="formLabelWidth"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:77.2%;" /></el-form-item>
-            <div style="display:flex;">
-              <el-form-item style="flex-grow:1" prop="bizId" label="业务线" :label-width="formLabelWidth1">
-                <el-select v-model="form.bizId" placeholder="业务线" style="width:54.5%;">
-                  <el-option v-for="item in bizOptions" :key="item.value" :label="item.name" :value="item.value" />
-                </el-select>
-              </el-form-item>
-              <el-form-item style="flex-grow:1" label="业务模块" prop="businessType" :label-width="formLabelWidth1">
-                <el-select v-model="form.businessType" placeholder="业务模块" style="width:54.5%;">
-                  <el-option v-for="item in businessTypeStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-            </div>
-            <div style="display:flex;">
-              <el-form-item style="flex-grow:1" prop="taskId" label="任务" :label-width="formLabelWidth1">
-                <el-select v-model="form.taskId" placeholder="任务" style="width:54.5%;">
-                  <el-option v-for="item in taskIdStr" :key="item.id" :label="item.name" :value="item.id" />
-                </el-select>
-              </el-form-item>
-              <el-form-item style="flex-grow:1" label="平台类型" prop="platformType" :label-width="formLabelWidth1">
-                <el-select v-model="form.platformType" placeholder="平台类型" style="width:54.5%;" @change="clickChangeType(form.platformType)">
-                  <el-option v-for="item in platformTypeStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-            </div>
-            <div style="display:flex;">
-              <el-form-item style="flex-grow:1" label="类型" prop="bugType" :label-width="formLabelWidth1">
-                <el-select v-model="form.bugType" style="width:54.5%;" placeholder="类型">
-                  <el-option v-for="item in bugTypeStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-              <el-form-item style="flex-grow:1" label="发现方式" prop="discoveryMethod" :label-width="formLabelWidth1">
-                <el-select v-model="form.discoveryMethod" style="width:54.5%;" placeholder="发现方式">
-                  <el-option v-for="item in discoveryMethodStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-            </div>
-            <div style="display:flex;">
-              <el-form-item style="flex-grow:1" label="级别" prop="priority" :label-width="formLabelWidth1">
-                <el-select v-model="form.priority" style="width:54.5%;" placeholder="级别">
-                  <el-option v-for="item in bugLevelStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-              <el-form-item style="flex-grow:1" label="问题原因" prop="reason" :label-width="formLabelWidth1">
-                <el-select v-model="form.reason" style="width:54.5%;" placeholder="问题原因">
-                  <el-option v-for="item in reasonStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-            </div>
-            <div style="display:flex;">
-              <el-form-item style="flex-grow:1" label="状态" prop="status" :label-width="formLabelWidth1">
-                <el-select v-model="form.status" placeholder="状态" style="width:54.5%;" @change="buildShow(form.status)">
-                  <el-option v-for="item in bugStatusStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-              <el-form-item style="flex-grow:1" label="所处阶段" prop="stage" :label-width="formLabelWidth1">
-                <el-select v-model="form.stage" placeholder="所处阶段" style="width:54.5%;">
-                  <el-option v-for="item in stageStr" :key="item.name" :label="item.name" :value="item.name" />
-                </el-select>
-              </el-form-item>
-            </div>
-            <el-form-item label="bug描述" prop="bugDescribe" :label-width="formLabelWidth"><el-input v-model="form.bugDescribe" type="textarea" placeholder="bug描述" rows="2" style="width:77.2%;" /></el-form-item>
+    <el-dialog class="adjustHeight" :title="titName" :visible.sync="dialogFormVisible" width="70%">
+      <el-form ref="form" :model="form" :rules="serviceDataRules">
+        <div class="set-background">
+          <el-form-item label="标题" :label-width="formLabelWidth"><el-input v-model="form.bugName" autocomplete="off" placeholder="普惠质量产品工具平台..." style="width:77.2%;" /></el-form-item>
+          <div style="display:flex;">
+            <el-form-item style="flex-grow:1" prop="bizId" label="业务线" :label-width="formLabelWidth1">
+              <el-select v-model="form.bizId" placeholder="业务线" style="width:54.5%;">
+                <el-option v-for="item in bizOptions" :key="item.value" :label="item.name" :value="item.value" />
+              </el-select>
+            </el-form-item>
+            <el-form-item style="flex-grow:1" label="业务模块" prop="businessType" :label-width="formLabelWidth1">
+              <el-select v-model="form.businessType" placeholder="业务模块" style="width:54.5%;">
+                <el-option v-for="item in businessTypeStr" :key="item.name" :label="item.name" :value="item.name" />
+              </el-select>
+            </el-form-item>
           </div>
           <div style="display:flex;">
-            <el-form-item label="创建人" :label-width="formLabelWidth"><el-input v-model="form.creator" autocomplete="off" style="width:67%;" /></el-form-item>
-            <el-form-item label="bug责任人" prop="assigner" :label-width="formLabelWidth"><el-input v-model="form.assigner" autocomplete="off" style="width:67%;" /></el-form-item>
+            <el-form-item style="flex-grow:1" prop="taskId" label="任务" :label-width="formLabelWidth1">
+              <el-select v-model="form.taskId" placeholder="任务" style="width:54.5%;">
+                <el-option v-for="item in taskIdStr" :key="item.id" :label="item.name" :value="item.id" />
+              </el-select>
+            </el-form-item>
+            <el-form-item style="flex-grow:1" label="平台类型" prop="platformType" :label-width="formLabelWidth1">
+              <el-select v-model="form.platformType" placeholder="平台类型" style="width:54.5%;" @change="clickChangeType(form.platformType)">
+                <el-option v-for="item in platformTypeStr" :key="item.name" :label="item.name" :value="item.name" />
+              </el-select>
+            </el-form-item>
           </div>
-          <div style="flex:1">
-            <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth"><el-input v-model="form.reasonsAndSolutionForTheProblem" type="textarea" placeholder="问题原因和修复方法" rows="4" style="width:77.2%;" /></el-form-item>
+          <div style="display:flex;">
+            <el-form-item style="flex-grow:1" label="类型" prop="bugType" :label-width="formLabelWidth1">
+              <el-select v-model="form.bugType" style="width:54.5%;" placeholder="类型">
+                <el-option v-for="item in bugTypeStr" :key="item.name" :label="item.name" :value="item.name" />
+              </el-select>
+            </el-form-item>
+            <el-form-item style="flex-grow:1" label="发现方式" prop="discoveryMethod" :label-width="formLabelWidth1">
+              <el-select v-model="form.discoveryMethod" style="width:54.5%;" placeholder="发现方式">
+                <el-option v-for="item in discoveryMethodStr" :key="item.name" :label="item.name" :value="item.name" />
+              </el-select>
+            </el-form-item>
           </div>
-          <div style="flex:1">
-            <el-form-item label="bug处理人" prop="currentHandler" :label-width="formLabelWidth"><el-input v-model="form.currentHandler" autocomplete="off" style="width:67%;" /></el-form-item>
-            <el-form-item label="app版本号" :label-width="formLabelWidth"><el-input v-model="form.appVersion" autocomplete="off" style="width:67%;" /></el-form-item>
-            <el-form-item label="地图类型" :label-width="formLabelWidth"><el-input v-model="form.mapType" autocomplete="off" style="width:67%;" /></el-form-item>
-            <el-form-item label="地图版本号" :label-width="formLabelWidth"><el-input v-model="form.mapVersion" autocomplete="off" style="width:67%;" /></el-form-item>
-            <el-form-item label="SDK版本" :label-width="formLabelWidth"><el-input v-model="form.sdkVersion" autocomplete="off" style="width:67%;" /></el-form-item>
-            <el-form-item v-show="repairShow" label="修复结果" :label-width="formLabelWidth">
-              <el-select v-model="form.repairResult" placeholder="发现方法">
-                <el-option v-for="item in repairResultStr" :key="item.name" :label="item.name" :value="item.name" />
+          <div style="display:flex;">
+            <el-form-item style="flex-grow:1" label="级别" prop="priority" :label-width="formLabelWidth1">
+              <el-select v-model="form.priority" style="width:54.5%;" placeholder="级别">
+                <el-option v-for="item in bugLevelStr" :key="item.name" :label="item.name" :value="item.name" />
+              </el-select>
+            </el-form-item>
+            <el-form-item style="flex-grow:1" label="问题原因" prop="reason" :label-width="formLabelWidth1">
+              <el-select v-model="form.reason" style="width:54.5%;" placeholder="问题原因">
+                <el-option v-for="item in reasonStr" :key="item.name" :label="item.name" :value="item.name" />
+              </el-select>
+            </el-form-item>
+          </div>
+          <div style="display:flex;">
+            <el-form-item style="flex-grow:1" label="状态" prop="status" :label-width="formLabelWidth1">
+              <el-select v-model="form.status" placeholder="状态" style="width:54.5%;" @change="buildShow(form.status)">
+                <el-option v-for="item in bugStatusStr" :key="item.name" :label="item.name" :value="item.name" />
+              </el-select>
+            </el-form-item>
+            <el-form-item style="flex-grow:1" label="所处阶段" prop="stage" :label-width="formLabelWidth1">
+              <el-select v-model="form.stage" placeholder="所处阶段" style="width:54.5%;">
+                <el-option v-for="item in stageStr" :key="item.name" :label="item.name" :value="item.name" />
               </el-select>
             </el-form-item>
           </div>
-          <el-form-item label="附件" :label-width="formLabelWidth">
-            <el-upload
-              class="upload-demo"
-              multiple
-              capture
-              accept="image/jpeg, image/png, image/gif, audio/mp4, video/mp4, audio/mpeg, application/vnd.ms-excel"
-              :on-change="handleChange"
-              :file-list="fileList"
-              action="http://page-daily.kuaidadi.com/upload/img.node"
-            >
-              <!-- action="http://page-daily.kuaidadi.com/upload/img.node" 线下 -->
-              <!-- action="http://star.xiaojukeji.com/upload/img.node" 线上 -->
-              <!-- action="https://jsonplaceholder.typicode.com/posts/" 原始地址-->
-              <el-button size="small" type="primary">点击上传</el-button>
-            </el-upload>
+          <el-form-item label="bug描述" prop="bugDescribe" :label-width="formLabelWidth"><el-input v-model="form.bugDescribe" type="textarea" placeholder="bug描述" rows="2" style="width:77.2%;" /></el-form-item>
+        </div>
+        <div style="display:flex;">
+          <el-form-item label="创建人" :label-width="formLabelWidth"><el-input v-model="form.creator" autocomplete="off" style="width:67%;" /></el-form-item>
+          <el-form-item label="bug责任人" prop="assigner" :label-width="formLabelWidth"><el-input v-model="form.assigner" autocomplete="off" style="width:67%;" /></el-form-item>
+        </div>
+        <div style="flex:1">
+          <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth"><el-input v-model="form.reasonsAndSolutionForTheProblem" type="textarea" placeholder="问题原因和修复方法" rows="4" style="width:77.2%;" /></el-form-item>
+        </div>
+        <div style="flex:1">
+          <el-form-item label="bug处理人" prop="currentHandler" :label-width="formLabelWidth"><el-input v-model="form.currentHandler" autocomplete="off" style="width:67%;" /></el-form-item>
+          <el-form-item label="app版本号" :label-width="formLabelWidth"><el-input v-model="form.appVersion" autocomplete="off" style="width:67%;" /></el-form-item>
+          <el-form-item label="地图类型" :label-width="formLabelWidth"><el-input v-model="form.mapType" autocomplete="off" style="width:67%;" /></el-form-item>
+          <el-form-item label="地图版本号" :label-width="formLabelWidth"><el-input v-model="form.mapVersion" autocomplete="off" style="width:67%;" /></el-form-item>
+          <el-form-item label="SDK版本" :label-width="formLabelWidth"><el-input v-model="form.sdkVersion" autocomplete="off" style="width:67%;" /></el-form-item>
+          <el-form-item v-show="repairShow" label="修复结果" :label-width="formLabelWidth">
+            <el-select v-model="form.repairResult" placeholder="发现方法">
+              <el-option v-for="item in repairResultStr" :key="item.name" :label="item.name" :value="item.name" />
+            </el-select>
           </el-form-item>
-          {{ form.accessory }}
+        </div>
+        <el-form-item label="附件" :label-width="formLabelWidth">
+          <el-upload
+            class="upload-demo"
+            multiple
+            capture
+            accept="image/jpeg, image/png, image/gif, audio/mp4, video/mp4, audio/mpeg, application/vnd.ms-excel"
+            :on-change="handleChange"
+            :file-list="fileList"
+            action="http://page-daily.kuaidadi.com/upload/img.node"
+          >
+            <!-- action="http://page-daily.kuaidadi.com/upload/img.node" 线下 -->
+            <!-- action="http://star.xiaojukeji.com/upload/img.node" 线上 -->
+            <!-- action="https://jsonplaceholder.typicode.com/posts/" 原始地址-->
+            <el-button size="small" type="primary">点击上传</el-button>
+          </el-upload>
+        </el-form-item>
+        {{ form.accessory }}
 
-          <!-- <el-form-item label="逻辑删" :label-width="formLabelWidth">
+      <!-- <el-form-item label="逻辑删" :label-width="formLabelWidth">
             <el-select v-model="form.isDelete" placeholder="发现方法">
               <el-option v-for="item in isDeleteStr" :key="item.value" :label="item.name" :value="item.value" />
             </el-select>
           </el-form-item> -->
-          <!-- <el-form-item label="reopen的次数" :label-width="formLabelWidth"> <el-input v-model="form.reopenTimes" autocomplete="off" /></el-form-item> -->
-          <!-- <el-form-item label="业务线" prop="bizId" :label-width="formLabelWidth"><el-input v-model="form.bizId" autocomplete="off" /></el-form-item> -->
-          <!-- <el-form-item label="模块" :label-width="formLabelWidth"><el-input v-model="form.moduleId" autocomplete="off" /></el-form-item> -->
-          <!-- <el-form-item label="项目名" :label-width="formLabelWidth"><el-input v-model="form.projectName" autocomplete="off" /></el-form-item> -->
-          <!-- <el-form-item label="项目ID" :label-width="formLabelWidth"><el-input v-model="form.projectId" autocomplete="off" /></el-form-item> -->
-          <!-- <el-form-item label="测试计划ID" prop="planId" :label-width="formLabelWidth"><el-input v-model="form.planId" autocomplete="off" /></el-form-item> -->
-          <!-- <el-form-item label="caseID" :label-width="formLabelWidth"><el-input v-model="form.caseId" autocomplete="off" /></el-form-item> -->
-          <!-- <el-form-item label="bug创建人" :label-width="formLabelWidth"> <el-input v-model="form.creator" autocomplete="off" /></el-form-item> -->
-          <!-- <el-form-item label="开始开发时间" :label-width="formLabelWidth"><el-input v-model="form.startDevTime" autocomplete="off" /></el-form-item> -->
-          <!-- <el-form-item label="开始等待测试时间" :label-width="formLabelWidth"><el-input v-model="form.waitTestTime" autocomplete="off" /></el-form-item> -->
-          <!-- <el-form-item label="创建时间" :label-width="formLabelWidth"><el-input v-model="form.gmtCreate" autocomplete="off" /></el-form-item> -->
-          <!-- <el-form-item label="修改时间" :label-width="formLabelWidth"><el-input v-model="form.gmtModify" autocomplete="off" /></el-form-item> -->
-        </el-form>
-        <div slot="footer" class="dialog-footer">
-          <el-button @click="dialogFormVisible = false">取 消</el-button>
-          <el-button type="primary" @click="titName === '新建' ? createFormData(form) : queryFormData(form)">确 定</el-button>
-        </div>
-      </el-dialog>
+      <!-- <el-form-item label="reopen的次数" :label-width="formLabelWidth"> <el-input v-model="form.reopenTimes" autocomplete="off" /></el-form-item> -->
+      <!-- <el-form-item label="业务线" prop="bizId" :label-width="formLabelWidth"><el-input v-model="form.bizId" autocomplete="off" /></el-form-item> -->
+      <!-- <el-form-item label="模块" :label-width="formLabelWidth"><el-input v-model="form.moduleId" autocomplete="off" /></el-form-item> -->
+      <!-- <el-form-item label="项目名" :label-width="formLabelWidth"><el-input v-model="form.projectName" autocomplete="off" /></el-form-item> -->
+      <!-- <el-form-item label="项目ID" :label-width="formLabelWidth"><el-input v-model="form.projectId" autocomplete="off" /></el-form-item> -->
+      <!-- <el-form-item label="测试计划ID" prop="planId" :label-width="formLabelWidth"><el-input v-model="form.planId" autocomplete="off" /></el-form-item> -->
+      <!-- <el-form-item label="caseID" :label-width="formLabelWidth"><el-input v-model="form.caseId" autocomplete="off" /></el-form-item> -->
+      <!-- <el-form-item label="bug创建人" :label-width="formLabelWidth"> <el-input v-model="form.creator" autocomplete="off" /></el-form-item> -->
+      <!-- <el-form-item label="开始开发时间" :label-width="formLabelWidth"><el-input v-model="form.startDevTime" autocomplete="off" /></el-form-item> -->
+      <!-- <el-form-item label="开始等待测试时间" :label-width="formLabelWidth"><el-input v-model="form.waitTestTime" autocomplete="off" /></el-form-item> -->
+      <!-- <el-form-item label="创建时间" :label-width="formLabelWidth"><el-input v-model="form.gmtCreate" autocomplete="off" /></el-form-item> -->
+      <!-- <el-form-item label="修改时间" :label-width="formLabelWidth"><el-input v-model="form.gmtModify" autocomplete="off" /></el-form-item> -->
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">取 消</el-button>
+        <el-button type="primary" @click="titName === '新建' ? createFormData(form) : queryFormData(form)">确 定</el-button>
+      </div>
+    </el-dialog>
 
-      <el-dialog :visible.sync="dialogFormQuery" width="70%">
-        <el-form :model="form" size="mini">
-          <el-form-item :label-width="formLabelWidth" style="margin-bottom:-10px;"><span style="font-weight:bold;font-size:20px;margin-left:-60px;">主题 : </span>{{ form.bugName }}</el-form-item><hr>
-          <div style="display:flex;">
-            <div style="flex:1">
-              <el-form-item label="任务 : " class="styline" :label-width="formLabelWidth1">{{ form.projectName }}</el-form-item>
-              <el-form-item label="级别 : " :label-width="formLabelWidth1">{{ form.priority }}</el-form-item>
-              <el-form-item label="reopen的次数 : " :label-width="formLabelWidth1">{{ form.reopenTimes }}</el-form-item>
-              <el-form-item label="bug状态 : " :label-width="formLabelWidth1">{{ form.status }}</el-form-item>
-              <el-form-item label="bug类型 : " :label-width="formLabelWidth1">{{ form.bugType }}</el-form-item>
-              <el-form-item label="bug描述 : " :label-width="formLabelWidth1">{{ form.bugDescribe }}</el-form-item>
-              <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth">{{ form.reasonsAndSolutionForTheProblem }}</el-form-item>
-              <el-form-item label="问题原因 : " :label-width="formLabelWidth1">{{ form.reason }}</el-form-item>
-              <el-form-item label="平台类型 : " :label-width="formLabelWidth1">{{ form.platformType }}</el-form-item>
-              <el-form-item label="业务模块 : " :label-width="formLabelWidth1">{{ form.businessType }}</el-form-item>
-              <el-form-item label="所处阶段 : " :label-width="formLabelWidth1">{{ form.stage }}</el-form-item>
-              <el-form-item label="发现方法 : " :label-width="formLabelWidth1">{{ form.discoveryMethod }}</el-form-item>
-              <el-form-item v-show="repairShow" label="修复结果 : " :label-width="formLabelWidth1">{{ form.repairResult }}</el-form-item>
-              <el-form-item label="os类型 : " :label-width="formLabelWidth1">{{ form.osType }}</el-form-item>
-              <el-form-item label="机型 : " :label-width="formLabelWidth1">{{ form.model }}</el-form-item>
-              <el-form-item label="网络类型 : " :label-width="formLabelWidth1">{{ form.networkType }}</el-form-item>
-              <el-form-item label="SDK版本 : " :label-width="formLabelWidth1">{{ form.sdkVersion }}</el-form-item>
-              <el-form-item label="app版本号 : " :label-width="formLabelWidth1">{{ form.appVersion }}</el-form-item>
-              <el-form-item label="地图类型 : " :label-width="formLabelWidth1">{{ form.mapType }}</el-form-item>
-              <el-form-item label="地图版本号 : " :label-width="formLabelWidth1">{{ form.mapVersion }}</el-form-item>
-              <el-form-item label="附件 : " :label-width="formLabelWidth1">{{ form.accessory }}</el-form-item>
-            </div>
-            <div style="flex:1; margin-left:30px;">
-              <el-form-item label="业务线 : " :label-width="formLabelWidth1">{{ form.bizId }}</el-form-item>
-              <el-form-item label="bug责任人 : " :label-width="formLabelWidth1">{{ form.assigner }}</el-form-item>
-              <el-form-item label="bug创建人 : " :label-width="formLabelWidth1">{{ form.creator }}</el-form-item>
-              <el-form-item label="bug处理人 : " :label-width="formLabelWidth1">{{ form.currentHandler }}</el-form-item>
-              <el-form-item label="开始开发时间 : " :label-width="formLabelWidth1">{{ form.startDevTime }}</el-form-item>
-              <el-form-item label="开始等待测试时间 : " :label-width="formLabelWidth1">{{ form.waitTestTime }}</el-form-item>
-              <el-form-item label="创建时间 : " :label-width="formLabelWidth1">{{ form.gmtCreate }}</el-form-item>
-            </div>
+    <el-dialog :visible.sync="dialogFormQuery" width="70%">
+      <el-form :model="form" size="mini">
+        <el-form-item :label-width="formLabelWidth" style="margin-bottom:-10px;"><span style="font-weight:bold;font-size:20px;margin-left:-60px;">主题 : </span>{{ form.bugName }}</el-form-item><hr>
+        <div style="display:flex;">
+          <div style="flex:1">
+            <el-form-item label="任务 : " class="styline" :label-width="formLabelWidth1">{{ form.projectName }}</el-form-item>
+            <el-form-item label="级别 : " :label-width="formLabelWidth1">{{ form.priority }}</el-form-item>
+            <el-form-item label="reopen的次数 : " :label-width="formLabelWidth1">{{ form.reopenTimes }}</el-form-item>
+            <el-form-item label="bug状态 : " :label-width="formLabelWidth1">{{ form.status }}</el-form-item>
+            <el-form-item label="bug类型 : " :label-width="formLabelWidth1">{{ form.bugType }}</el-form-item>
+            <el-form-item label="bug描述 : " :label-width="formLabelWidth1">{{ form.bugDescribe }}</el-form-item>
+            <el-form-item v-show="statusShow" label="问题原因和修复方法" :label-width="formLabelWidth">{{ form.reasonsAndSolutionForTheProblem }}</el-form-item>
+            <el-form-item label="问题原因 : " :label-width="formLabelWidth1">{{ form.reason }}</el-form-item>
+            <el-form-item label="平台类型 : " :label-width="formLabelWidth1">{{ form.platformType }}</el-form-item>
+            <el-form-item label="业务模块 : " :label-width="formLabelWidth1">{{ form.businessType }}</el-form-item>
+            <el-form-item label="所处阶段 : " :label-width="formLabelWidth1">{{ form.stage }}</el-form-item>
+            <el-form-item label="发现方法 : " :label-width="formLabelWidth1">{{ form.discoveryMethod }}</el-form-item>
+            <el-form-item v-show="repairShow" label="修复结果 : " :label-width="formLabelWidth1">{{ form.repairResult }}</el-form-item>
+            <el-form-item label="os类型 : " :label-width="formLabelWidth1">{{ form.osType }}</el-form-item>
+            <el-form-item label="机型 : " :label-width="formLabelWidth1">{{ form.model }}</el-form-item>
+            <el-form-item label="网络类型 : " :label-width="formLabelWidth1">{{ form.networkType }}</el-form-item>
+            <el-form-item label="SDK版本 : " :label-width="formLabelWidth1">{{ form.sdkVersion }}</el-form-item>
+            <el-form-item label="app版本号 : " :label-width="formLabelWidth1">{{ form.appVersion }}</el-form-item>
+            <el-form-item label="地图类型 : " :label-width="formLabelWidth1">{{ form.mapType }}</el-form-item>
+            <el-form-item label="地图版本号 : " :label-width="formLabelWidth1">{{ form.mapVersion }}</el-form-item>
+            <el-form-item label="附件 : " :label-width="formLabelWidth1">{{ form.accessory }}</el-form-item>
+          </div>
+          <div style="flex:1; margin-left:30px;">
+            <el-form-item label="业务线 : " :label-width="formLabelWidth1">{{ form.bizId }}</el-form-item>
+            <el-form-item label="bug责任人 : " :label-width="formLabelWidth1">{{ form.assigner }}</el-form-item>
+            <el-form-item label="bug创建人 : " :label-width="formLabelWidth1">{{ form.creator }}</el-form-item>
+            <el-form-item label="bug处理人 : " :label-width="formLabelWidth1">{{ form.currentHandler }}</el-form-item>
+            <el-form-item label="开始开发时间 : " :label-width="formLabelWidth1">{{ form.startDevTime }}</el-form-item>
+            <el-form-item label="开始等待测试时间 : " :label-width="formLabelWidth1">{{ form.waitTestTime }}</el-form-item>
+            <el-form-item label="创建时间 : " :label-width="formLabelWidth1">{{ form.gmtCreate }}</el-form-item>
           </div>
-          <!-- <el-form-item label="caseID" :label-width="formLabelWidth">{{ form.caseId }}</el-form-item> -->
-          <!-- <el-form-item label="项目名" :label-width="formLabelWidth">{{ form.projectName }}</el-form-item> -->
-          <!-- <el-form-item label="项目ID" :label-width="formLabelWidth">{{ form.projectId }}</el-form-item> -->
-          <!-- <el-form-item label="测试计划ID" :label-width="formLabelWidth">{{ form.planId }}</el-form-item> -->
-          <!-- <el-form-item label="逻辑删" :label-width="formLabelWidth">{{ form.isDelete }}</el-form-item> -->
-          <!-- <el-form-item label="业务线" :label-width="formLabelWidth">{{ form.bizId }}</el-form-item> -->
-          <!-- <el-form-item label="模块ID" :label-width="formLabelWidth">{{ form.moduleId }}</el-form-item> -->
-          <!-- <el-form-item label="修改时间" :label-width="formLabelWidth">{{ form.gmtModify }}</el-form-item> -->
-
-        </el-form>
-        <div slot="footer" class="dialog-footer">
-          <el-button type="primary" @click="dialogFormQuery = false">关 闭</el-button>
         </div>
-      </el-dialog>
-    </div>
+      <!-- <el-form-item label="caseID" :label-width="formLabelWidth">{{ form.caseId }}</el-form-item> -->
+      <!-- <el-form-item label="项目名" :label-width="formLabelWidth">{{ form.projectName }}</el-form-item> -->
+      <!-- <el-form-item label="项目ID" :label-width="formLabelWidth">{{ form.projectId }}</el-form-item> -->
+      <!-- <el-form-item label="测试计划ID" :label-width="formLabelWidth">{{ form.planId }}</el-form-item> -->
+      <!-- <el-form-item label="逻辑删" :label-width="formLabelWidth">{{ form.isDelete }}</el-form-item> -->
+      <!-- <el-form-item label="业务线" :label-width="formLabelWidth">{{ form.bizId }}</el-form-item> -->
+      <!-- <el-form-item label="模块ID" :label-width="formLabelWidth">{{ form.moduleId }}</el-form-item> -->
+      <!-- <el-form-item label="修改时间" :label-width="formLabelWidth">{{ form.gmtModify }}</el-form-item> -->
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="dialogFormQuery = false">关 闭</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -249,6 +248,7 @@ export default {
       stageStr: [],
       discoveryMethodStr: [],
       businessTypeStr: [],
+      bugStatusPriority: [],
       repairResultStr: [],
       isDeleteStr: [{ name: '保留', value: 0 }, { name: '删除', value: 1 }],
       serviceDataRules: {
@@ -303,16 +303,8 @@ export default {
   },
   mounted() {
     this.getQueryData()
-    this.initWindow()
   },
   methods: {
-    initWindow() {
-      if (!document.getElementById('window-judge')) {
-        document.getElementById('init-window').parentNode.style.overflow = 'auto'
-      } else {
-        document.getElementById('init-window').parentNode.style.overflow = 'hidden'
-      }
-    },
     getList() {
       this.bizJson = localStorage.getItem('key')
       this.indexPage = {
@@ -328,6 +320,7 @@ export default {
     bugListSelect() {
       bugGetEnum().then(res => {
         this.bugStatusStr = res.data.bugEnumList
+        this.bugStatusPriority = res.data.priorityEnumList
         this.stageStr = res.data.bugStageEnumList
         this.reasonStr = res.data.reasonEnumList
         this.platformTypeStr = res.data.platformTypeEnumList

+ 100 - 7
src/views/projectManage/projectList/projectCreate.vue

@@ -1,5 +1,5 @@
 <template>
-  <div id="window-judge" class="set-background">
+  <div class="set-background">
     <div class="block">
       <el-form ref="form" :model="form" :rules="serviceDataRules">
         <div class="block-flex">
@@ -37,12 +37,48 @@
             <el-form-item label="版本" label-width="147px"><el-input v-model="form.version" autocomplete="off" placeholder="请填写" style="width:76%;" /></el-form-item>
           </div>
           <div class="line-between">
-            <el-form-item label="产品" label-width="124px"><el-input v-model="form.pm" autocomplete="off" placeholder="公司邮箱前缀,多人英文逗号分隔" style="width:76%;" /></el-form-item>
-            <el-form-item label="开发" label-width="147px"><el-input v-model="form.rd" autocomplete="off" placeholder="公司邮箱前缀,多人英文逗号分隔" style="width:76%;" /></el-form-item>
+            <el-form-item label="产品" label-width="124px">
+              <el-select v-model="form.pm" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsPM"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="开发" label-width="147px">
+              <el-select v-model="form.rd" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsRD"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
           </div>
           <div class="line-between">
-            <el-form-item label="测试" label-width="124px"><el-input v-model="form.qa" autocomplete="off" placeholder="公司邮箱前缀,多人英文逗号分隔" style="width:76%;" /></el-form-item>
-            <el-form-item label="关注人" label-width="147px"><el-input v-model="form.focusPenson" autocomplete="off" placeholder="公司邮箱前缀,多人英文逗号分隔" style="width:76%;" /></el-form-item>
+            <el-form-item label="测试" label-width="124px">
+              <el-select v-model="form.qa" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsQA"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="关注人" label-width="147px">
+              <el-select v-model="form.focusPenson" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsFOCUS"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
           </div>
           <el-form-item label="需求文档" label-width="110px"><el-input v-model="form.mrdUrl" placeholder="请填写" style="width:90%;" /></el-form-item>
           <el-form-item label="描述" label-width="110px"><el-input v-model="form.description" type="textarea" placeholder="请填写" rows="3" style="width:90%;" /></el-form-item>
@@ -62,15 +98,24 @@
 
 <script>
 import E from 'wangeditor'
-import { projectGetTypeMap, addProject, getProjectData, updateProject } from '@/api/projectPage'
+import { projectGetTypeMap, addProject, getProjectData, updateProject, teamMembers } from '@/api/projectPage'
 import { bugGetEnum } from '@/api/defectManage' // 下拉菜单data
+import axios from 'axios'
 
 export default {
   data() {
     return {
       form: {
-        platForm: ''
+        platForm: '',
+        pm: '',
+        rd: '',
+        qa: '',
+        focusPenson: ''
       },
+      optionsPM: [],
+      optionsRD: [],
+      optionsQA: [],
+      optionsFOCUS: [],
       statusOptionss: [],
       priorityStrings: [],
       stageStrings: [],
@@ -139,6 +184,19 @@ export default {
           editor.create()
           editor.txt.html(this.editorContent)
           this.platformTypeStr = this.bizOptions.filter(value => value.code === this.form.bizId)[0].child
+          this.getMember() // 保证bizId存在
+          if (this.form.pm) {
+            this.form.pm = this.form.pm.split(',')
+          }
+          if (this.form.rd) {
+            this.form.rd = this.form.rd.split(',')
+          }
+          if (this.form.qa) {
+            this.form.qa = this.form.qa.split(',')
+          }
+          if (this.form.focusPenson) {
+            this.form.focusPenson = this.form.focusPenson.split(',')
+          }
         } else {
           this.errorFun(res.msg)
         }
@@ -148,21 +206,56 @@ export default {
       projectGetTypeMap().then(res => {
         if (res.code === 200) {
           this.bizOptions = res.data
+          this.getMember() // 保证bizId存在
         } else {
           this.errorFun(res.msg)
         }
       })
     },
+    // 人员搜索
+    getMember() {
+      this.objDataPM = { bizId: this.form.bizId, email: '', role: 'pm' }
+      this.objDataRD = { bizId: this.form.bizId, email: '', role: 'rd' }
+      this.objDataQA = { bizId: this.form.bizId, email: '', role: 'qa' }
+      this.objDataFOCUS = { bizId: this.form.bizId, email: '' }
+      axios.all([teamMembers(this.objDataPM), teamMembers(this.objDataRD), teamMembers(this.objDataQA), teamMembers(this.objDataFOCUS)]).then(axios.spread((resPM, resRD, resQA, resFOCUS) => {
+        if (resPM.code === 200 && resRD.code === 200 && resQA.code === 200 && resFOCUS.code === 200) {
+          this.optionsPM = resPM.data
+          this.optionsRD = resRD.data
+          this.optionsQA = resQA.data
+          this.optionsFOCUS = resFOCUS.data
+        } else {
+          this.errorFun('人员数据获取失败')
+        }
+      }))
+    },
     // 业务线取子数据
     clickChangePlatform(e) {
       this.platformTypeStr = this.bizOptions.filter(value => value.code === e)[0].child
       this.$set(this.form, 'platForm', '')
+      // this.$set(this.form, 'pm', '')
+      // this.$set(this.form, 'rd', '')
+      // this.$set(this.form, 'qa', '')
+      // this.$set(this.form, 'focusPenson', '')
+      this.getMember()
     },
     // 新建项目
     createFormData(form) {
       this.$refs.form.validate((valid) => {
         if (valid) {
           form.timeInfo = this.editorContent
+          if (form.pm) {
+            form.pm = form.pm.join(',')
+          }
+          if (form.rd) {
+            form.rd = form.rd.join(',')
+          }
+          if (form.qa) {
+            form.qa = form.qa.join(',')
+          }
+          if (form.focusPenson) {
+            form.focusPenson = form.focusPenson.join(',')
+          }
           this.userData = { id: '', ename: this.userInformation, name: this.userNames }
           this.objData = { projectInfo: form, user: this.userData }
           if (this.$route.query.id) {

+ 77 - 90
src/views/projectManage/projectList/projectListIndex.vue

@@ -1,85 +1,81 @@
 <template>
-  <div id="init-window" style="position:relative">
-    <router-view />
-    <div style="position: absolute;width: 100%;">
-      <div class="set-background">
-        <div class="block">
-          <el-form :model="queryCode">
-            <div class="set-between">
-              <!-- <el-form-item label="创建时间" label-width="70px"><el-date-picker v-model="queryCode.dateQuery" align="left" size="medium" type="datetime" style="width:76%;" placeholder="选择日期" /></el-form-item> -->
-              <el-form-item label="项目名称" label-width="70px"><el-input v-model="queryCode.name" placeholder="请选择项目" autocomplete="off" clearable size="medium" style="width:76%;" /></el-form-item>
-              <el-form-item label="状态" label-width="40px">
-                <el-select v-model="queryCode.statusString" size="medium" style="width:60%;" clearable placeholder="状态">
-                  <el-option v-for="item in statusOptionss" :key="item.code" :label="item.name" :value="item.code" />
-                </el-select>
-              </el-form-item>
-            </div>
-            <div class="set-between">
-              <el-button type="primary" plain size="medium" @click="dataQuery(queryCode)">查询</el-button>
-              <el-button type="primary" plain size="medium" @click="createdCode()">新增</el-button>
-            </div>
-          </el-form>
-          <div class="set-locate">
-            <el-table
-              :data="list"
-              border
-              style="width: 100%"
-              size="mini"
-            >
-              <el-table-column
-                prop="id"
-                label="ID"
-                align="center"
-                width="80"
-              />
-              <el-table-column
-                label="项目名称"
-                align="center"
-                width="200"
-              >
-                <template slot-scope="scope">
-                  <el-link style="font-weight: 400;" type="primary" :underline="false" @click="projectShow(scope.row.id)">{{ scope.row.name }}</el-link>
-                </template>
-              </el-table-column>
-              <el-table-column
-                label="状态"
-                align="center"
-                width="130"
-              >
-                <template slot-scope="scope">
-                  <el-tag type="success"><span>{{ scope.row.statusString }}</span></el-tag>
-                </template>
-              </el-table-column>
-              <el-table-column
-                prop="createTime"
-                label="创建时间"
-                align="center"
-              />
-              <el-table-column
-                label="操作"
-                align="center"
-                width="300"
-              >
-                <template v-slot="scope">
-                  <div>
-                    <el-button size="mini" type="primary" plain @click="projectShowData(scope.row.id)">编辑</el-button>
-                    <el-button size="mini" type="danger" plain @click="dialogBug(scope.row.id)">删除</el-button>
-                    <el-dialog
-                      :visible.sync="dialogVisible"
-                      width="30%"
-                    >
-                      <span>确定要删除这条项目信息吗</span>
-                      <span slot="footer" class="dialog-footer">
-                        <el-button type="primary" size="mini" @click="delHmVirtual()">确 定</el-button>
-                        <el-button type="danger" size="mini" @click="dialogVisible = false">取 消</el-button>
-                      </span>
-                    </el-dialog>
-                  </div>
-                </template>
-              </el-table-column>
-            </el-table>
-            <el-pagination background style="margin-top:30px;" align="center" :current-page="curIndex" :page-size="pageSize" layout="prev, pager, next" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+  <div style="width: 100%;">
+    <div class="set-background">
+      <div class="block">
+        <el-form :model="queryCode">
+          <div class="set-between">
+            <!-- <el-form-item label="创建时间" label-width="70px"><el-date-picker v-model="queryCode.dateQuery" align="left" size="medium" type="datetime" style="width:76%;" placeholder="选择日期" /></el-form-item> -->
+            <el-form-item label="项目名称" label-width="70px"><el-input v-model="queryCode.name" placeholder="请选择项目" autocomplete="off" clearable size="medium" style="width:76%;" /></el-form-item>
+            <el-form-item label="状态" label-width="40px">
+              <el-select v-model="queryCode.statusString" size="medium" style="width:60%;" clearable placeholder="状态">
+                <el-option v-for="item in statusOptionss" :key="item.code" :label="item.name" :value="item.code" />
+              </el-select>
+            </el-form-item>
+          </div>
+          <div class="set-between">
+            <el-button type="primary" plain size="medium" @click="dataQuery(queryCode)">查询</el-button>
+            <el-button type="primary" plain size="medium" @click="createdCode()">新增</el-button>
           </div>
+        </el-form>
+        <div class="set-locate">
+          <el-table
+            :data="list"
+            border
+            style="width: 100%"
+            size="mini"
+          >
+            <el-table-column
+              prop="id"
+              label="ID"
+              align="center"
+              width="80"
+            />
+            <el-table-column
+              label="项目名称"
+              align="center"
+            >
+              <template slot-scope="scope">
+                <el-link style="font-weight: 400;" type="primary" :underline="false" @click="projectShow(scope.row.id)">{{ scope.row.name }}</el-link>
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="状态"
+              align="center"
+              width="130"
+            >
+              <template slot-scope="scope">
+                <el-tag type="success"><span>{{ scope.row.statusString }}</span></el-tag>
+              </template>
+            </el-table-column>
+            <el-table-column
+              prop="createTime"
+              label="创建时间"
+              align="center"
+            />
+            <el-table-column
+              label="操作"
+              align="center"
+              width="300"
+            >
+              <template v-slot="scope">
+                <div>
+                  <el-button size="mini" type="primary" plain @click="projectShowData(scope.row.id)">编辑</el-button>
+                  <el-button size="mini" type="danger" plain @click="dialogBug(scope.row.id)">删除</el-button>
+                  <el-dialog
+                    :visible.sync="dialogVisible"
+                    width="30%"
+                  >
+                    <span>确定要删除这条项目信息吗</span>
+                    <span slot="footer" class="dialog-footer">
+                      <el-button type="primary" size="mini" @click="delHmVirtual()">确 定</el-button>
+                      <el-button type="danger" size="mini" @click="dialogVisible = false">取 消</el-button>
+                    </span>
+                  </el-dialog>
+                </div>
+              </template>
+            </el-table-column>
+          </el-table>
+          <el-pagination background style="margin-top:30px;" align="center" :current-page="curIndex" :page-size="pageSize" layout="prev, pager, next" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
         </div>
       </div>
     </div>
@@ -109,9 +105,6 @@ export default {
       statusOptions: []
     }
   },
-  mounted() {
-    this.initWindow()
-  },
   created() {
     this.getList()
   },
@@ -160,13 +153,6 @@ export default {
         res.code === 200 ? this.list = res.data : this.errorFun(res.msg)
       })
     },
-    initWindow() {
-      if (!document.getElementById('window-judge')) {
-        document.getElementById('init-window').parentNode.style.overflow = 'visible'
-      } else {
-        document.getElementById('init-window').parentNode.style.overflow = 'hidden'
-      }
-    },
     projectShow(e) {
       this.$router.push({ name: '项目查看', query: { id: e }})
     },
@@ -197,6 +183,7 @@ export default {
     background-color #F2F3F6
     display flex
     justify-content center
+    min-width 700px
     .block
       background-color rgba(255,255,255,1)
       box-shadow 0px 0px 11px 0px rgba(238,240,245,1)

+ 11 - 1
src/views/projectManage/projectList/projectPreview.vue

@@ -1,5 +1,5 @@
 <template>
-  <div id="window-judge" class="set-background">
+  <div class="set-background">
     <div style="width:96%">
       <div class="block">
         <div class="operate-flex">
@@ -447,6 +447,16 @@ export default {
       margin-bottom 15px
     .divide-twoparts
       width 40%
+      white-space pre-wrap
+      word-wrap break-word
+      padding-right 30px
+      span
+        white-space nowrap
     .divide-fullparts
       width 100%
+      white-space pre-wrap
+      word-wrap break-word
+      padding-right 30px
+      span
+        white-space nowrap
 </style>

+ 68 - 6
src/views/projectManage/taskList/taskCreate.vue

@@ -1,5 +1,5 @@
 <template>
-  <div id="window-judge" class="set-background">
+  <div class="set-background">
     <el-form ref="form" :model="form" :rules="serviceDataRules">
       <div class="block">
         <div class="block-flex">
@@ -71,11 +71,38 @@
             </el-form-item>
           </div>
           <div class="line-between">
-            <el-form-item label="产品" label-width="124px"><el-input v-model="form.pm" autocomplete="off" placeholder="公司邮箱前缀,多人英文逗号分隔" style="width:76%;" /></el-form-item>
-            <el-form-item label="开发" label-width="147px"><el-input v-model="form.rd" autocomplete="off" placeholder="公司邮箱前缀,多人英文逗号分隔" style="width:76%;" /></el-form-item>
+            <el-form-item label="产品" label-width="124px">
+              <el-select v-model="form.pm" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsPM"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="开发" label-width="147px">
+              <el-select v-model="form.rd" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsRD"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
           </div>
           <div class="line-between-add">
-            <el-form-item label="测试" label-width="124px"><el-input v-model="form.qa" autocomplete="off" placeholder="公司邮箱前缀,多人英文逗号分隔" style="width:76%;" /></el-form-item>
+            <el-form-item label="测试" label-width="124px">
+              <el-select v-model="form.qa" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsQA"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
           </div>
           <el-form-item label="描述" label-width="110px"><el-input v-model="form.description" type="textarea" placeholder="bug描述" rows="3" style="width:90%;" /></el-form-item>
         </div>
@@ -115,8 +142,9 @@
 </template>
 
 <script>
-import { projectGetTypeMap, createTaskData, getProjectData } from '@/api/projectPage'
+import { projectGetTypeMap, createTaskData, getProjectData, teamMembers } from '@/api/projectPage'
 import { bugGetEnum } from '@/api/defectManage' // 下拉菜单data
+import axios from 'axios'
 
 export default {
   data() {
@@ -124,8 +152,14 @@ export default {
       form: {
         bizId: '',
         type: '',
-        clientType: ''
+        clientType: '',
+        pm: '',
+        rd: '',
+        qa: ''
       },
+      optionsPM: [],
+      optionsRD: [],
+      optionsQA: [],
       bugTypeStr: [],
       stageStr: [],
       pauseProjectId: '',
@@ -198,6 +232,7 @@ export default {
       projectGetTypeMap().then(res => {
         if (res.code === 200) {
           this.bizIdEnumList = res.data
+          this.getMember() // 保证bizId存在
         } else {
           this.errorFun(res.msg)
         }
@@ -209,6 +244,7 @@ export default {
       this.businessTypeStr = []
       this.$set(this.form, 'type', '')
       this.$set(this.form, 'clientType', '')
+      this.getMember()
     },
     // 业务线取子数据
     clickChangeBusiness(e) {
@@ -220,11 +256,37 @@ export default {
       }
       this.$set(this.form, 'clientType', '')
     },
+    // 人员搜索
+    getMember() {
+      this.objDataPM = { bizId: this.form.bizId, email: '', role: 'pm' }
+      this.objDataRD = { bizId: this.form.bizId, email: '', role: 'rd' }
+      this.objDataQA = { bizId: this.form.bizId, email: '', role: 'qa' }
+      this.objDataFOCUS = { bizId: this.form.bizId, email: '' }
+      axios.all([teamMembers(this.objDataPM), teamMembers(this.objDataRD), teamMembers(this.objDataQA), teamMembers(this.objDataFOCUS)]).then(axios.spread((resPM, resRD, resQA, resFOCUS) => {
+        if (resPM.code === 200 && resRD.code === 200 && resQA.code === 200 && resFOCUS.code === 200) {
+          this.optionsPM = resPM.data
+          this.optionsRD = resRD.data
+          this.optionsQA = resQA.data
+          this.optionsFOCUS = resFOCUS.data
+        } else {
+          this.errorFun('人员数据获取失败')
+        }
+      }))
+    },
     // 新建项目
     createFormData(form) {
       this.$refs.form.validate((valid) => {
         if (valid) {
           form.projectId = this.$route.query.id
+          if (form.pm) {
+            form.pm = form.pm.join(',')
+          }
+          if (form.rd) {
+            form.rd = form.rd.join(',')
+          }
+          if (form.qa) {
+            form.qa = form.qa.join(',')
+          }
           this.userData = { id: '', ename: this.userInformation, name: this.userNames }
           this.objData = { taskInfo: form, user: this.userData }
           createTaskData(this.objData).then(res => {

+ 84 - 98
src/views/projectManage/taskList/taskListIndex.vue

@@ -1,93 +1,89 @@
 <template>
-  <div id="init-window" style="position:relative">
-    <router-view />
-    <div style="position: absolute;width: 100%;">
-      <div class="set-background">
-        <div class="block">
-          <el-tabs v-model="activeName">
-            <el-tab-pane label="列表" name="first">
-              <el-form :model="form">
-                <div class="set-between">
-                  <!-- <el-form-item label="创建时间" label-width="70px"><el-date-picker v-model="form.createTime" align="left" size="medium" type="datetime" style="width:76%;" placeholder="选择日期" /></el-form-item> -->
-                  <el-form-item label="任务名称" label-width="70px"><el-input v-model="form.name" placeholder="请选择项目" autocomplete="off" clearable size="medium" style="width:76%;" /></el-form-item>
-                  <el-form-item label="状态" label-width="40px">
-                    <el-select v-model="form.status" size="medium" style="width:60%;" clearable placeholder="状态">
-                      <el-option v-for="item in processStatusEnumList" :key="item.code" :label="item.name" :value="item.code" />
-                    </el-select>
-                  </el-form-item>
-                </div>
-                <div class="set-between">
-                  <el-button type="primary" plain size="medium" @click="dataQuery(form)">查询</el-button>
-                  <el-button type="primary" plain size="medium" @click="createdCode()">新增</el-button>
-                </div>
-              </el-form>
-              <div class="set-locate">
-                <el-table
-                  :data="tableData"
-                  border
-                  style="width: 100%"
-                  size="mini"
-                >
-                  <el-table-column
-                    prop="id"
-                    label="ID"
-                    align="center"
-                    width="80"
-                  />
-                  <el-table-column
-                    label="任务名称"
-                    align="center"
-                    width="200"
-                  >
-                    <template slot-scope="scope">
-                      <el-link style="font-weight: 400;" type="primary" :underline="false" @click="taskShow(scope.row.id)">{{ scope.row.name }}</el-link>
-                    </template>
-                  </el-table-column>
-                  <el-table-column
-                    label="状态"
-                    align="center"
-                    width="130"
-                  >
-                    <template slot-scope="scope">
-                      <el-tag type="success"><span>{{ scope.row.statusString }}</span></el-tag>
-                    </template>
-                  </el-table-column>
-                  <el-table-column
-                    prop="createTime"
-                    label="创建时间"
-                    align="center"
-                  />
-                  <el-table-column
-                    label="操作"
-                    align="center"
-                    width="300"
-                  >
-                    <template v-slot="scope">
-                      <div>
-                        <el-button size="mini" type="primary" plain @click="projectShowData(scope.row.id)">编辑</el-button>
-                        <el-button size="mini" type="danger" plain @click="dialogBug(scope.row.id)">删除</el-button>
-                        <el-dialog
-                          :visible.sync="dialogVisible"
-                          width="30%"
-                        >
-                          <span>确定要删除这条项目信息吗</span>
-                          <span slot="footer" class="dialog-footer">
-                            <el-button type="primary" size="mini" @click="delHmVirtual()">确 定</el-button>
-                            <el-button type="danger" size="mini" @click="dialogVisible = false">取 消</el-button>
-                          </span>
-                        </el-dialog>
-                      </div>
-                    </template>
-                  </el-table-column>
-                </el-table>
-                <el-pagination background style="margin-top:30px;" align="center" :current-page="curIndex" :page-size="pageSize" layout="prev, pager, next" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+  <div style="width: 100%;">
+    <div class="set-background">
+      <div class="block">
+        <el-tabs v-model="activeName">
+          <el-tab-pane label="列表" name="first">
+            <el-form :model="form">
+              <div class="set-between">
+                <!-- <el-form-item label="创建时间" label-width="70px"><el-date-picker v-model="form.createTime" align="left" size="medium" type="datetime" style="width:76%;" placeholder="选择日期" /></el-form-item> -->
+                <el-form-item label="任务名称" label-width="70px"><el-input v-model="form.name" placeholder="填写任务名称" autocomplete="off" clearable size="medium" style="width:76%;" /></el-form-item>
+                <el-form-item label="状态" label-width="40px">
+                  <el-select v-model="form.status" size="medium" style="width:60%;" clearable placeholder="状态">
+                    <el-option v-for="item in processStatusEnumList" :key="item.code" :label="item.name" :value="item.code" />
+                  </el-select>
+                </el-form-item>
+              </div>
+              <div class="set-between">
+                <el-button type="primary" plain size="medium" @click="dataQuery(form)">查询</el-button>
+                <el-button type="primary" plain size="medium" @click="createdCode()">新增</el-button>
               </div>
-            </el-tab-pane>
-            <el-tab-pane label="看板" name="second">
-              2
-            </el-tab-pane>
-          </el-tabs>
-        </div>
+            </el-form>
+            <div class="set-locate">
+              <el-table
+                :data="tableData"
+                border
+                style="width: 100%"
+                size="mini"
+              >
+                <el-table-column
+                  prop="id"
+                  label="ID"
+                  align="center"
+                  width="80"
+                />
+                <el-table-column
+                  label="任务名称"
+                  align="center"
+                >
+                  <template slot-scope="scope">
+                    <el-link style="font-weight: 400;" type="primary" :underline="false" @click="taskShow(scope.row.id)">{{ scope.row.name }}</el-link>
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  label="状态"
+                  align="center"
+                  width="130"
+                >
+                  <template slot-scope="scope">
+                    <el-tag type="success"><span>{{ scope.row.statusString }}</span></el-tag>
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  prop="createTime"
+                  label="创建时间"
+                  align="center"
+                />
+                <el-table-column
+                  label="操作"
+                  align="center"
+                  width="300"
+                >
+                  <template v-slot="scope">
+                    <div>
+                      <el-button size="mini" type="primary" plain @click="projectShowData(scope.row.id)">编辑</el-button>
+                      <el-button size="mini" type="danger" plain @click="dialogBug(scope.row.id)">删除</el-button>
+                      <el-dialog
+                        :visible.sync="dialogVisible"
+                        width="30%"
+                      >
+                        <span>确定要删除这条项目信息吗</span>
+                        <span slot="footer" class="dialog-footer">
+                          <el-button type="primary" size="mini" @click="delHmVirtual()">确 定</el-button>
+                          <el-button type="danger" size="mini" @click="dialogVisible = false">取 消</el-button>
+                        </span>
+                      </el-dialog>
+                    </div>
+                  </template>
+                </el-table-column>
+              </el-table>
+              <el-pagination background style="margin-top:30px;" align="center" :current-page="curIndex" :page-size="pageSize" layout="prev, pager, next" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="看板" name="second">
+            敬请期待
+          </el-tab-pane>
+        </el-tabs>
       </div>
     </div>
   </div>
@@ -119,9 +115,6 @@ export default {
   created() {
     this.bugListSelectBeforeGet()
   },
-  mounted() {
-    this.initWindow()
-  },
   methods: {
     async bugListSelectBeforeGet() {
       await bugGetEnum().then(res => {
@@ -142,13 +135,6 @@ export default {
         // console.log(this.tableData)
       })
     },
-    initWindow() {
-      if (!document.getElementById('window-judge')) {
-        document.getElementById('init-window').parentNode.style.overflow = 'visible'
-      } else {
-        document.getElementById('init-window').parentNode.style.overflow = 'hidden'
-      }
-    },
     dataQuery(queryCode) {
       queryCode.bizId = localStorage.getItem('key')
       queryCode.pageSize = this.pageSize

+ 16 - 1
src/views/projectManage/taskList/taskPreview.vue

@@ -1,5 +1,5 @@
 <template>
-  <div id="window-judge" class="set-background">
+  <div class="set-background">
     <div style="width:96%">
       <div class="block">
         <div class="operate-flex">
@@ -476,8 +476,23 @@ export default {
       margin-bottom 15px
     .divide-fourparts
       width 25%
+      white-space pre-wrap
+      word-wrap break-word
+      padding-right 30px
+      span
+        white-space nowrap
     .divide-twoparts
       width 50%
+      white-space pre-wrap
+      word-wrap break-word
+      padding-right 30px
+      span
+        white-space nowrap
     .divide-fullparts
       width 100%
+      white-space pre-wrap
+      word-wrap break-word
+      padding-right 30px
+      span
+        white-space nowrap
 </style>

+ 80 - 6
src/views/projectManage/taskList/taskUpdateCreate.vue

@@ -1,5 +1,5 @@
 <template>
-  <div id="window-judge" class="set-background">
+  <div class="set-background">
     <el-form ref="form" :model="form" :rules="serviceDataRules">
       <div class="block">
         <div class="block-flex">
@@ -71,11 +71,38 @@
             </el-form-item>
           </div>
           <div class="line-between">
-            <el-form-item label="产品" label-width="124px"><el-input v-model="form.pm" autocomplete="off" placeholder="请填写公司邮箱前缀,多人英文逗号分隔" style="width:76%;" /></el-form-item>
-            <el-form-item label="开发" label-width="147px"><el-input v-model="form.rd" autocomplete="off" placeholder="请填写公司邮箱前缀,多人英文逗号分隔" style="width:76%;" /></el-form-item>
+            <el-form-item label="产品" label-width="124px">
+              <el-select v-model="form.pm" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsPM"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="开发" label-width="147px">
+              <el-select v-model="form.rd" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsRD"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
           </div>
           <div class="line-between-add">
-            <el-form-item label="测试" label-width="124px"><el-input v-model="form.qa" autocomplete="off" placeholder="请填写公司邮箱前缀,多人英文逗号分隔" style="width:76%;" /></el-form-item>
+            <el-form-item label="测试" label-width="124px">
+              <el-select v-model="form.qa" multiple filterable placeholder="公司邮箱前缀" style="width:76%;">
+                <el-option
+                  v-for="item in optionsQA"
+                  :key="item.id"
+                  :label="item.email"
+                  :value="item.email"
+                />
+              </el-select>
+            </el-form-item>
           </div>
           <el-form-item label="描述" label-width="110px"><el-input v-model="form.description" type="textarea" placeholder="bug描述" rows="3" style="width:90%;" /></el-form-item>
         </div>
@@ -115,17 +142,24 @@
 </template>
 
 <script>
-import { projectGetTypeMap, updateTaskList } from '@/api/projectPage'
+import { projectGetTypeMap, updateTaskList, teamMembers } from '@/api/projectPage'
 import { taskListCreate } from '@/api/defectManage'
 import { bugGetEnum } from '@/api/defectManage' // 下拉菜单data
+import axios from 'axios'
 
 export default {
   data() {
     return {
       form: {
         type: '',
-        clientType: ''
+        clientType: '',
+        pm: '',
+        rd: '',
+        qa: ''
       },
+      optionsPM: [],
+      optionsRD: [],
+      optionsQA: [],
       bugTypeStr: [],
       stageStr: [],
       pauseProjectId: '',
@@ -181,6 +215,19 @@ export default {
         if (res.code === 200) {
           this.form = res.data[0]
           this.typeString = this.bizIdEnumList.filter(value => value.code === this.form.bizId)[0].child
+          this.getMember() // 保证bizId存在
+          if (this.form.pm) {
+            this.form.pm = this.form.pm.split(',')
+          }
+          if (this.form.rd) {
+            this.form.rd = this.form.rd.split(',')
+          }
+          if (this.form.qa) {
+            this.form.qa = this.form.qa.split(',')
+          }
+          if (this.form.focusPenson) {
+            this.form.focusPenson = this.form.focusPenson.split(',')
+          }
           if (this.form.clientType) {
             this.businessTypeShow = true
             this.businessTypeStr = this.typeString.filter(value => value.code === this.form.type)[0].child
@@ -196,6 +243,7 @@ export default {
       this.businessTypeStr = []
       this.$set(this.form, 'type', '')
       this.$set(this.form, 'clientType', '')
+      this.getMember()
     },
     // 业务线取子数据
     clickChangeBusiness(e) {
@@ -207,11 +255,37 @@ export default {
       }
       this.$set(this.form, 'clientType', '')
     },
+    // 人员搜索
+    getMember() {
+      this.objDataPM = { bizId: this.form.bizId, email: '', role: 'pm' }
+      this.objDataRD = { bizId: this.form.bizId, email: '', role: 'rd' }
+      this.objDataQA = { bizId: this.form.bizId, email: '', role: 'qa' }
+      this.objDataFOCUS = { bizId: this.form.bizId, email: '' }
+      axios.all([teamMembers(this.objDataPM), teamMembers(this.objDataRD), teamMembers(this.objDataQA), teamMembers(this.objDataFOCUS)]).then(axios.spread((resPM, resRD, resQA, resFOCUS) => {
+        if (resPM.code === 200 && resRD.code === 200 && resQA.code === 200 && resFOCUS.code === 200) {
+          this.optionsPM = resPM.data
+          this.optionsRD = resRD.data
+          this.optionsQA = resQA.data
+          this.optionsFOCUS = resFOCUS.data
+        } else {
+          this.errorFun('人员数据获取失败')
+        }
+      }))
+    },
     // 新建项目
     createFormData(form) {
       this.$refs.form.validate((valid) => {
         if (valid) {
           form.projectId = this.$route.query.projectId
+          if (form.pm) {
+            form.pm = form.pm.join(',')
+          }
+          if (form.rd) {
+            form.rd = form.rd.join(',')
+          }
+          if (form.qa) {
+            form.qa = form.qa.join(',')
+          }
           this.userData = { id: '', ename: this.userInformation, name: this.userNames }
           this.objData = { taskInfo: form, user: this.userData }
           updateTaskList(this.objData).then(res => {