Browse Source

优化报告部分

qinzhipeng_v 5 years ago
parent
commit
a33b9f13e8

+ 9 - 2
src/api/projectIndex.js

@@ -1,6 +1,6 @@
 // 项目
 import request from '@/utils/request'
-import { TeamManagement } from '@/apiConfig/api'
+import { TeamManagement, ldapServer } from '@/apiConfig/api'
 
 // 获取项目列表
 export function projectList(data) {
@@ -26,7 +26,14 @@ export function memberQueryMemberInfoByIDAPorName(data) {
     data
   })
 }
-
+// 搜索邮件组
+export function ldapServerApiMail(data) {
+  return request({
+    url: ldapServer + `/api/mail`,
+    method: 'get',
+    params: { fullName: data }
+  })
+}
 // 头像
 export function memberGetLoginInMemberInfoByLdap() {
   return request({

+ 2 - 0
src/apiConfig/api.js

@@ -20,6 +20,8 @@ export const vehicleUrl_online = 'http://10.179.91.236:9999' // 虚拟硬件 zhi
 
 export const projectManagementUrl = requestIp + '/project-management' //项目管理
 
+export const ldapServer = requestIp + '/ldap-server' //邮箱查询
+
 export const TeamManagement = projectManagementUrl // 团队配置 项目
 
 export const task_Url = projectManagementUrl // 任务

+ 128 - 0
src/components/select/searchTeam.vue

@@ -0,0 +1,128 @@
+<template>
+  <el-select
+    v-model="searchValue"
+    filterable
+    :clearable="clearable"
+    remote
+    :multiple="multiple"
+    :remote-method="remoteMethod"
+    :loading="loading"
+    :size="size"
+    placeholder="请输入姓名或邮箱前缀 (支持搜索邮箱组)"
+    :disabled="disabled"
+    @change="changeSelect"
+  >
+    <el-option
+      v-for="item in options"
+      :key="item.name"
+      :label="item.displayName"
+      :value="item.name"
+    >
+      <div class="item-style">
+        <div class="item-detail">{{ item.name }}</div>
+        <div style="min-width:80px">{{ item.displayName }}</div>
+        <div class="item-detail">{{ item.department }}</div>
+      </div>
+    </el-option>
+  </el-select>
+</template>
+<script>
+import { ldapServerApiMail } from '@/api/projectIndex'
+export default {
+  props: {
+    value: {
+      type: [String, Array],
+      default: '',
+      required: false
+    },
+    size: {
+      type: String,
+      default: 'small',
+      required: false
+    },
+    multiple: {
+      type: Boolean,
+      default: false,
+      required: false
+    },
+    disabled: {
+      type: Boolean,
+      default: false,
+      required: false
+    },
+    clearable: { // 是否支持清空
+      type: Boolean,
+      default: true,
+      required: false
+    }
+  },
+  data() {
+    return {
+      searchValue: this.value,
+      loading: false,
+      options: [],
+      firstGetArr: true // 是否第一次获取数组
+    }
+  },
+  watch: {
+    value: {
+      handler(newV, oldV) {
+        if (this.searchValue === newV) {
+          return
+        }
+        this.searchValue = newV
+        const type = Object.prototype.toString.call(this.searchValue)
+        if (type.indexOf('Array') < 0) {
+          this.remoteMethod(newV)
+        } else if (type.indexOf('Array') > 0 && newV.length > 0 && this.firstGetArr) {
+          this.initMore(this.searchValue)
+          this.firstGetArr = false
+        }
+      },
+      immediate: true
+    }
+  },
+  methods: {
+    remoteMethod(query) {
+      query !== '' ? this.getMember(query) : this.options = []
+    },
+    initMore(arr) { // 当多人时候,对数组每一个人员进行搜索
+      for (const item of arr) {
+        this.getMember(item, true)
+      }
+    },
+    async getMember(query, initMore = false) {
+      const res = await ldapServerApiMail(query)
+      this.loading = false
+      const weakMap = new Map()
+      for (const item of res.data) {
+        if (!weakMap.has(item.idap)) {
+          weakMap.set(item.idap, item)
+        }
+      }
+      initMore ? this.options = [...this.options, ...weakMap.values()] : this.options = [...weakMap.values()]
+    },
+    changeSelect(e) {
+      this.$emit('update:value', this.searchValue)
+      if (this.multiple) {
+        this.$emit('change', this.searchValue)
+      } else {
+        const confirm = this.options.find(item => item.idap === e)
+        this.$emit('change', confirm)
+      }
+    }
+  }
+}
+</script>
+<style scoped lang="scss">
+.item-style {
+  display: flex;
+  justify-content: flex-start;
+  .item-detail {
+    min-width:100px;
+    color: #8492a6;
+    font-size: 13px;
+    overflow:hidden
+  }
+}
+</style>

+ 6 - 0
src/styles/PublicStyle/index.scss

@@ -10,6 +10,12 @@
   justify-content: flex-start;
 }
 
+.Layout_flex_end { // 布局
+  display:flex;
+  align-items: center;
+  justify-content: flex-end;
+} 
+
 .public_header { // 缺陷,迭代,项目,任务,需求布局header
   margin: 10px 10px 0;
   background: #FFF;

+ 10 - 5
src/views/Platform/presentation/Templates/ClientReport.vue

@@ -38,8 +38,8 @@
         邮件列表
       </div>
       <div style="margin: 1% 0% 3%;">
-        <div class="Layout" style="margin-bottom: 10px;"><div style="width: 60px;" class="div1">收件人 </div><el-input v-model="form.name" size="small" clearable filterable placeholder="填写邮箱前缀,多个请’,‘分隔 (支持搜索邮箱组)" /></div>
-        <div class="Layout"><div style="width: 60px;" class="div1">抄送 </div><el-input v-model="form.names" size="small" clearable filterable placeholder="填写邮箱前缀,多个请’,‘分隔 (支持搜索邮箱组)" /></div>
+        <div class="Layout" style="margin-bottom: 10px;"><div style="width: 60px;" class="div1">收件人 </div><search-people :value.sync="form.name" :clearable="true" :multiple="true" style="width:100%" /></div>
+        <div class="Layout"><div style="width: 60px;" class="div1">抄送 </div><searchTeam :value.sync="form.names" :clearable="true" :multiple="true" style="width:100%" /></div>
       </div>
       <div style="font-size:18px; font-family:PingFangSC-Medium,PingFang SC; font-weight:500; color:rgba(51,59,74,1); line-height:29px;">
         报告预览
@@ -65,12 +65,16 @@ import { projectTestReportSendmail } from '@/api/ResultPage'
 import html2canvas from 'html2canvas'
 import clientF from '@/assets/clientF.png'
 import clientK from '@/assets/clientK.png'
+import searchTeam from '@/components/select/searchTeam'
+import searchPeople from '@/components/select/searchPeople'
 
 export default {
   components: {
     ClientAcceptance,
     Acceptance,
-    ResultPageyL
+    ResultPageyL,
+    searchTeam,
+    searchPeople
   },
   data() {
     return {
@@ -135,6 +139,7 @@ export default {
           this.clienData = newData
           this.showOne = false
           this.showThree = true
+          this.form = {}
           this.showTow = false
           this.report = newData
           this.active = 3
@@ -171,11 +176,11 @@ export default {
       }
     },
     QuasiReport(e) {
-      console.log(e, 'zhunchu')
       this.report = e
       this.keys = e.id
       this.active = 3
       this.showThree = true
+      this.form = {}
       this.showTow = false
     },
     gou_out() {
@@ -237,7 +242,7 @@ export default {
           html2canvas(document.getElementsByClassName('reportContent')[1], { useCORS: true }).then(canvas => {
             const imgData = canvas.toDataURL('image/png')
             const sendImgData = imgData.substring(imgData.indexOf(',') + 1)
-            const postData = { 'reportId': ele.id, 'imgStr': sendImgData, 'url': window.location.href, 'emailUser': e.name, 'copyTo': e.names }
+            const postData = { 'reportId': ele.id, 'imgStr': sendImgData, 'url': window.location.href, 'emailUser': e.name.join(','), 'copyTo': e.names.join(',') }
             projectTestReportSendmail(postData).then(res => {
               res.code === 200 ? this.$message.success('报告发送中,请稍后进行邮件查收!') : this.$message.error('发送测试日报失败,请联系管理员!')
               this.handleClose()

+ 10 - 8
src/views/Platform/presentation/Templates/DailyReport.vue

@@ -31,8 +31,8 @@
         邮件列表
       </div>
       <div style="margin: 1% 5% 3%;">
-        <div class="Layout" style="margin-bottom: 10px;"><div class="div1">收件人</div><el-input v-model="form.name" size="small" clearable filterable placeholder="填写邮箱前缀,多个请’,‘分隔 (支持搜索邮箱组)" /></div>
-        <div class="Layout"><div class="div1">抄送</div><el-input v-model="form.names" size="small" clearable filterable placeholder="填写邮箱前缀,多个请’,‘分隔 (支持搜索邮箱组)" /></div>
+        <div class="Layout" style="margin-bottom: 10px;"><div class="div1">收件人</div><search-people :value.sync="form.name" :clearable="true" :multiple="true" style="width:100%" /></div>
+        <div class="Layout"><div class="div1">抄送</div><searchTeam :value.sync="form.names" :clearable="true" :multiple="true" style="width:100%" /></div>
       </div>
       <div style="margin: 0 5%; font-size:18px; font-family:PingFangSC-Medium,PingFang SC; font-weight:500; color:rgba(51,59,74,1); line-height:29px;">
         报告预览
@@ -56,11 +56,15 @@ import testPresenyL from '@/views/Platform/presentation/testPresenyL.vue'
 import { dailyReportSendmail } from '@/api/ResultPage'
 import html2canvas from 'html2canvas'
 import daily from '@/assets/daily.png'
+import searchPeople from '@/components/select/searchPeople'
+import searchTeam from '@/components/select/searchTeam'
 
 export default {
   components: {
     DailyReport,
-    testPresenyL
+    testPresenyL,
+    searchPeople,
+    searchTeam
   },
   data() {
     return {
@@ -109,6 +113,7 @@ export default {
           this.showOne = false
           this.showTow = false
           this.showThree = true
+          this.form = {}
           this.preview = newData
           this.active = 3
           break
@@ -162,6 +167,7 @@ export default {
       this.showOne = false
       this.showTow = false
       this.showThree = true
+      this.form = {}
       this.active = 3
     },
     NextStep() {
@@ -185,18 +191,14 @@ export default {
         this.send = true
         var ele = this.preview
         setTimeout(() => {
-          // const targetDom = document.getElementById('Gambol')
-          // var copyDom = targetDom.cloneNode(true)
-          // document.querySelector('body').appendChild(copyDom)
           html2canvas(document.getElementsByClassName('reportContent')[0], { useCORS: true }).then(canvas => {
             var url = canvas.toDataURL('image/png', 1)
             url = url.toString().substring(url.indexOf(',') + 1)
-            var postData = { 'reportId': ele.id, 'imgStr': url, 'url': window.location.href, 'emailUser': e.name, 'copyTo': e.names }
+            var postData = { 'reportId': ele.id, 'imgStr': url, 'url': window.location.href, 'emailUser': e.name.join(','), 'copyTo': e.names.join(',') }
             dailyReportSendmail(postData).then(res => {
               res.code === 200 ? this.$message({ type: 'success', message: '报告发送中,请稍后进行邮件查收!' }) : this.$message({ type: 'error', message: '发送测试日报失败,请联系管理员!' })
               this.send = false
               this.handleClose()
-              // document.querySelector('body').removeChild(copyDom)
             })
           })
         }, 500)

+ 10 - 4
src/views/Platform/presentation/Templates/TestReport.vue

@@ -39,8 +39,8 @@
           邮件列表
         </div>
         <div style="margin: 1% 2% 3%;">
-          <div class="Layout" style="margin-bottom: 10px;"><div class="div1">收件人</div><el-input v-model="form.name" size="small" clearable filterable placeholder="填写邮箱前缀,多个请’,‘分隔 (支持搜索邮箱组)" /></div>
-          <div class="Layout"><div class="div1">抄送</div><el-input v-model="form.names" size="small" clearable filterable placeholder="填写邮箱前缀,多个请’,‘分隔 (支持搜索邮箱组)" /></div>
+          <div class="Layout" style="margin-bottom: 10px;"><div class="div1">收件人</div><search-people :value.sync="form.name" :clearable="true" :multiple="true" style="width:100%" /></div>
+          <div class="Layout"><div class="div1">抄送</div><searchTeam :value.sync="form.names" :clearable="true" :multiple="true" style="width:100%" /></div>
         </div>
         <div style="margin: 0 2%; font-size:18px; font-family:PingFangSC-Medium,PingFang SC; font-weight:500; color:rgba(51,59,74,1); line-height:29px;">
           报告预览
@@ -67,12 +67,16 @@ import { launchTestSendmail } from '@/api/ResultPage'
 import html2canvas from 'html2canvas'
 import testF from '@/assets/testF.png'
 import testK from '@/assets/testK.png'
+import searchTeam from '@/components/select/searchTeam'
+import searchPeople from '@/components/select/searchPeople'
 
 export default {
   components: {
     Present,
     acceptthe,
-    presentation
+    presentation,
+    searchTeam,
+    searchPeople
   },
   data() {
     return {
@@ -134,6 +138,7 @@ export default {
           this.showOne = false
           this.showTow = false
           this.showThree = true
+          this.form = {}
           this.preview = newData
           this.active = 3
           break
@@ -235,6 +240,7 @@ export default {
       this.clien = e.id
       this.preview = e
       this.showThree = true
+      this.form = {}
       this.showTow = false
       this.active = 3
     },
@@ -249,7 +255,7 @@ export default {
           html2canvas(document.getElementsByClassName('reportContent')[1], { useCORS: true }).then(canvas => {
             const imgData = canvas.toDataURL('image/png')
             const sendImgData = imgData.substring(imgData.indexOf(',') + 1)
-            const postData = { 'reportId': ele.id, 'imgStr': sendImgData, 'url': window.location.href, 'emailUser': e.name, 'copyTo': e.names }
+            const postData = { 'reportId': ele.id, 'imgStr': sendImgData, 'url': window.location.href, 'emailUser': e.name.join(','), 'copyTo': e.names.join(',') }
             launchTestSendmail(postData).then(res => {
               res.code === 200 ? this.$message.success('报告发送中,请稍后进行邮件查收!') : this.$message.error('发送测试日报失败,请联系管理员!')
               this.handleClose1()

+ 15 - 13
src/views/projectManage/requirement/list/create.vue

@@ -34,10 +34,9 @@
               <el-option v-for="(item,index) in formBackgroungInfo.priority" :key="index" :label="item.msg" :value="item.code" />
             </el-select>
           </el-form-item>
-          <el-form-item label="PM" prop="pmMemberInfoResponse">
-            <!-- <search-people :value.sync="form.pmMemberInfoResponse" :size="'medium'" :clearable="true" :multiple="false" /> -->
+          <el-form-item label="PM" prop="pm">
             <el-select
-              v-model="form.pmMemberInfoResponse"
+              v-model="form.pm"
               filterable
               remote
               placeholder="请输入需求产出的姓名或邮箱前缀"
@@ -117,8 +116,8 @@
             <el-radio :label="1">是</el-radio>
           </el-radio-group>
         </el-form-item>
-        <el-form-item v-if="form.dependOnRelease" label="涉及的客户端" prop="referredClientTypes">
-          <el-select v-model="form.referredClientTypes" size="medium" multiple placeholder="请选择,多选">
+        <el-form-item v-if="form.dependOnRelease" label="涉及的客户端" prop="referredClientType">
+          <el-select v-model="form.referredClientType" size="medium" multiple placeholder="请选择,多选">
             <el-option v-for="item in formBackgroungInfo.appClient" :key="item.code" :label="item.msg" :value="item.code" />
           </el-select>
         </el-form-item>
@@ -179,10 +178,10 @@ export default {
         priority: null,
         sourceType: null,
         bizId: null,
-        pmMemberInfoResponse: null,
+        pm: null,
         mrdUrl: null,
         dependOnRelease: 0,
-        referredClientTypes: [],
+        referredClientType: [],
         creator: null
       },
       rules: {
@@ -196,11 +195,11 @@ export default {
           { required: true, message: '请选择需求来源', trigger: 'change' }
         ],
         bizId: [{ required: true, message: '请选择业务线', trigger: 'change' }],
-        pmMemberInfoResponse: [{ required: true, message: '请输入PM', trigger: 'change' }],
+        pm: [{ required: true, message: '请输入PM', trigger: 'change' }],
         dependOnRelease: [
           { required: true, message: '请选择业务线', trigger: 'blur' }
         ],
-        referredClientTypes: [
+        referredClientType: [
           { required: true, message: '请选择涉及的客户端', trigger: 'change' }
         ],
         type: [
@@ -221,7 +220,8 @@ export default {
         if (this.title === '编辑需求') {
           this.form = JSON.parse(JSON.stringify(this.data))
           this.form.rqmtProposer = this.form.rqmtProposer.split(',')
-          this.form.pmMemberInfoResponse = this.form.pmMemberInfoResponse.idap
+          this.form.pm = this.form.pm.idap
+          this.form.referredClientType = this.form.referredClientType.split(',')
           this.init()
           this.form.modifier = localStorage.getItem('username')
           if (this.form.belongingProject !== '' && this.form.belongingProject !== -1) {
@@ -343,7 +343,7 @@ export default {
               }
             }
           }
-          if (this.form.referredClientTypes && this.form.dependOnRelease === 1 && this.form.referredClientTypes.length === 0) {
+          if (this.form.referredClientType && this.form.dependOnRelease === 1 && this.form.referredClientType.length === 0) {
             this.$message.warning('请选择客户端')
             return
           }
@@ -352,6 +352,7 @@ export default {
             let data = {}
             data = this.form
             data.rqmtProposer = this.form.rqmtProposer.join()
+            data.referredClientType = this.form.referredClientType.join()
             createRequirement(data)
               .then(res => {
                 if (res.code === 200) {
@@ -364,6 +365,7 @@ export default {
             let data = {}
             data = this.form
             data.rqmtProposer = this.form.rqmtProposer.join()
+            data.referredClientType = this.form.referredClientType.join()
             updateRequirement(data)
               .then(res => {
                 if (res.code === 200) {
@@ -384,8 +386,8 @@ export default {
       })
     },
     init() {
-      if (this.form.pmMemberInfoResponse) {
-        this.searchUser(this.form.pmMemberInfoResponse)
+      if (this.form.pm) {
+        this.searchUser(this.form.pm)
       }
     },
     source(e) {

+ 7 - 13
src/views/projectManage/requirement/list/index.vue

@@ -9,7 +9,7 @@
       <div class="Layout" style="padding-top: 5px">
         <div>
           <el-form :model="searchForm" class="Layout">
-            <div class="Layout" style="padding-left:15px">
+            <div class="Layout_flex_end" style="padding-left:15px">
               <div class="queryName">需求名称</div>
               <el-input v-model="requirementName" size="small" clearable style="width:72% !important;" placeholder="标题或ID或望岳需求ID" @change="getTableData()" />
             </div>
@@ -38,7 +38,7 @@
             </div>
             <div class="Layout">
               <div class="queryName marginLeft">PM</div>
-              <search-people :value.sync="searchForm.pmMemberInfoResponse" :clearable="true" :multiple="false" style="width:72% !important;" />
+              <search-people :value.sync="searchForm.pm" :clearable="true" :multiple="false" style="width:72% !important;" />
             </div>
             <div class="Layout">
               <div class="queryName marginLeft">需求类型</div>
@@ -50,7 +50,7 @@
           <el-form :model="searchForm" class="flex_start el-from-spacing">
             <div class="Layout">
               <div class="queryName">需求来源</div>
-              <el-select v-model="searchForm.sourceTypeList" size="small" clearable filterable placeholder="请选择">
+              <el-select v-model="searchForm.sourceTypeList" size="small" multiple clearable filterable placeholder="请选择">
                 <el-option v-for="item in searchInfo.sourceType" :key="item.code" :label="item.msg" :value="item.code" />
               </el-select>
             </div>
@@ -74,15 +74,7 @@
               <span class="contain"> 包含 </span>
             </div>
             <el-checkbox-group v-model="searchForm.checkList" class="allCheckbox">
-              <el-checkbox label="未开始" />
-              <el-checkbox label="PRD进行中" />
-              <el-checkbox label="PRD待评审" />
-              <el-checkbox label="PRD评审通过" />
-              <el-checkbox label="已排期" />
-              <el-checkbox label="开发中" />
-              <el-checkbox label="已上线" />
-              <el-checkbox label="已完成" />
-              <el-checkbox label="HOLD" />
+              <el-checkbox v-for="item in requiredStatus" :key="item.code" :label="item.code">{{ item.msg }}</el-checkbox>
             </el-checkbox-group>
             <div style="margin-bottom: auto;" class="Layout">
               <span style="color:rgba(51,51,51,1)">状态停留时长</span>
@@ -207,6 +199,7 @@ import {
   configShowRequireStatusEnum,
   settingQueryBizRqmtOrntList
 } from '@/api/requirement.js'
+import '@/styles/PublicStyle/index.scss'
 import { deepClone } from '@/utils/global'
 import RequirementCreate from './create'
 import '@/views/projectManage/publicCss/index.css'
@@ -398,7 +391,7 @@ export default {
     },
     reset() {
       this.$set(this.searchForm, 'id', '')
-      this.$set(this.searchForm, 'pmMemberInfoResponse', '')
+      this.$set(this.searchForm, 'pm', '')
       this.$set(this.searchForm, 'priority', '')
       this.$set(this.searchForm, 'belongingProject', '')
       this.$set(this.searchForm, 'sourceType', '')
@@ -494,6 +487,7 @@ export default {
   width 54px
   background:rgba(255,255,255,1);
   border: 1px solid #DCDFE6;
+  line-height: 10px;
   border-radius: 4px;
   padding 10px
   margin-left 10px

+ 12 - 12
src/views/projectManage/requirement/requirementDetail.vue

@@ -79,7 +79,7 @@
                 <el-button size="mini" type="text" @click="visible = false">取消</el-button>
                 <el-button type="primary" size="mini" @click="requirementHold(textarea2)">确定</el-button>
               </div>
-              <el-button slot="reference" class="el-btn-size" size="mini" @click="changeBtn">{{ form_query.status === -2 ? HoldTask = '解除 Hold' : HoldTask = 'Hold 任务' }}</el-button>
+              <el-button slot="reference" class="el-btn-size" size="mini" @click="changeBtn">{{ form_query.status === -2 ? HoldTask = '解除 Hold' : HoldTask = 'Hold 需求' }}</el-button>
             </el-popover>
           </div>
           <timeLine :id="requirementId" ref="timeLine1" :name="'需求'" />
@@ -98,19 +98,19 @@
                 <div v-if="form_query.belongingProject !== -1" @click="jump('项目详情',form_query.belongingProject)">{{ form_query.belongingProjectName }}</div>
                 <template v-else>{{ form_query.belongingProjectName }}</template>
               </el-form-item>
-              <el-form-item label="需求方向:">
-                <el-cascader v-model="form_query.rqmtOrntIds" size="medium" collapse-tags :props="{ multiple: true, checkStrictly: true }" :options="demandDirection" placeholder="请选择" />
-              </el-form-item>
               <el-form-item label="所属迭代:">
                 <el-select v-model="form_query.iterationId" placeholder="请选择" @change="changeArea">
                   <el-option v-for="(item,index) in iterationList" :key="item.name + index" :label="item.name" :value="item.id" />
                 </el-select>
               </el-form-item>
               <el-form-item label="PM:">
-                <search-people :value.sync="form_query.pmMemberInfoResponse.idap" :clearable="false" @change="changeArea" />
+                <search-people :value.sync="form_query.pm" :clearable="false" @change="changeArea" />
               </el-form-item>
             </el-form>
             <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="right" label-width="100px">
+              <el-form-item label="需求方向:">
+                <el-cascader v-model="form_query.rqmtOrntIds" size="medium" collapse-tags :props="{ multiple: true, checkStrictly: true }" :options="demandDirection" placeholder="请选择" />
+              </el-form-item>
               <el-form-item label="需求来源:">
                 <el-select v-model="form_query.sourceType" size="small" filterable placeholder="请选择" @change="changeArea">
                   <el-option v-for="(item,index) in sourceTypeList" :key="item.msg + index" :label="item.msg" :value="item.code" />
@@ -119,6 +119,8 @@
               <el-form-item label="需求提出人:">
                 <search-people :value.sync="form_query.rqmtProposer" :clearable="false" :multiple="true" @change="changeArea" />
               </el-form-item>
+            </el-form>
+            <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="right" label-width="100px">
               <el-form-item label="优先级:">
                 <el-select v-model="form_query.priority" size="small" filterable placeholder="请选择" @change="changeArea">
                   <el-option v-for="(item,index) in priorityList" :key="item.msg + index" :label="item.msg" :value="item.code" />
@@ -129,10 +131,8 @@
                   <el-option v-for="(item,index) in dependList" :key="item.msg + index" :label="item.msg" :value="item.code" />
                 </el-select>
               </el-form-item>
-            </el-form>
-            <el-form :inline="true" :model="form_query" class="demo-form-inline" label-position="right" label-width="100px">
               <el-form-item label="跟版客户端:">
-                <el-select v-if="form_query.dependOnRelease === 1" v-model="form_query.referredClientTypes" size="small" multiple filterable placeholder="请选择" @change="changeArea">
+                <el-select v-if="form_query.dependOnRelease === 1" v-model="form_query.referredClientType" size="small" multiple filterable placeholder="请选择" @change="changeArea">
                   <el-option v-for="(item,index) in appClient" :key="item.msg + index" :label="item.msg" :value="item.code" />
                 </el-select>
               </el-form-item>
@@ -389,7 +389,7 @@ export default {
       appClient: [], // 跟版客户端列表
       taskScheduleEvent: [], // 排期类型列表
       dependList: [{ msg: '否', code: 0 }, { msg: '是', code: 1 }], // 是否跟版
-      form_query: { pmMemberInfoResponse: {}},
+      form_query: { pm: {}},
       display: false, // 设置成员弹框
       num: 0, // 成员数量
       image_url: image_url, // 成员icon
@@ -515,7 +515,7 @@ export default {
       }))
     },
     changeBtn() {
-      if (this.HoldTask === 'Hold 任务') {
+      if (this.HoldTask === 'Hold 需求') {
         this.visible = !this.visible
         this.textarea2 = ''
       }
@@ -524,7 +524,7 @@ export default {
       }
     },
     async requirementHold(val) { // 锁定Hold
-      if (this.HoldTask === 'Hold 任务') {
+      if (this.HoldTask === 'Hold 需求') {
         const res = await requirementHold(this.requirementId, { 'remark': val })
         if (res.code === 200) {
           this.getRequirementById()
@@ -701,7 +701,7 @@ export default {
     }
     .demo-form-inline {
       .el-form-item {
-        width: 25%;
+        width: 33%;
         margin-right: 0;
       }
     }