qinzhipeng_v 5 gadi atpakaļ
vecāks
revīzija
0faff20e4a

+ 88 - 0
src/api/projectIndex.js

@@ -10,3 +10,91 @@ export function projectList(data) {
     data
   })
 }
+// 新建
+export function projectCreate(data) {
+  return request({
+    url: TeamManagement + `/project/create`,
+    method: 'post',
+    data
+  })
+}
+// 业务线(下拉菜单)
+export function projectBizList(data) {
+  return request({
+    url: TeamManagement + `/project/bizList`,
+    method: 'post',
+    data
+  })
+}
+// 搜索员工信息
+export function memberQueryMemberInfoByIDAPorName(data) {
+  return request({
+    url: TeamManagement + `/member/queryMemberInfoByIDAPorName`,
+    method: 'post',
+    data
+  })
+}
+// 修改项目
+export function projectUpdate(data) {
+  return request({
+    url: TeamManagement + `/project/update`,
+    method: 'post',
+    data
+  })
+}
+// 修改项目
+export function projectDelete(id, data) {
+  return request({
+    url: TeamManagement + `/project/delete?id=` + id,
+    method: 'post',
+    data
+  })
+}
+// 获取里程碑
+export function mileStoneList(data) {
+  return request({
+    url: TeamManagement + `/mileStone/list`,
+    method: 'post',
+    data
+  })
+}
+// 里程碑创建接口
+export function mileStoneCreate(data) {
+  return request({
+    url: TeamManagement + `/mileStone/create`,
+    method: 'post',
+    data
+  })
+}
+// 里程碑修改接口
+export function mileStoneUpdate(data) {
+  return request({
+    url: TeamManagement + `/mileStone/update`,
+    method: 'post',
+    data
+  })
+}
+// 里程碑删除接口
+export function mileStoneDelete(id, data) {
+  return request({
+    url: TeamManagement + `/mileStone/delete?id=` + id,
+    method: 'post',
+    data
+  })
+}
+// 任务list(全部任务)
+export function taskList(data) {
+  return request({
+    url: TeamManagement + `/task/list`,
+    method: 'post',
+    data
+  })
+}
+// 获取需求任务
+export function requirementQueryRequirementInfoList(data) {
+  return request({
+    url: TeamManagement + `/requirement/queryRequirementInfoList`,
+    method: 'post',
+    data
+  })
+}

+ 131 - 1
src/api/taskIndex.js

@@ -1,4 +1,4 @@
-// 项目
+// 任务
 import request from '@/utils/request'
 import { TeamManagement } from '@/apiConfig/api'
 
@@ -10,3 +10,133 @@ export function taskList(data) {
     data
   })
 }
+// 任务名称(id)
+export function taskIdAndName(data) {
+  return request({
+    url: TeamManagement + `/task/idAndName`,
+    method: 'post',
+    data
+  })
+}
+
+// 下拉菜单
+export function configShowTaskEnum() {
+  return request({
+    url: TeamManagement + `/config/showTaskEnum`,
+    method: 'get'
+  })
+}
+// 业务线
+export function settingGetTypeMap() {
+  return request({
+    url: TeamManagement + `/setting/getTypeMap`,
+    method: 'get'
+  })
+}
+
+// 搜索员工信息
+export function memberQueryMemberInfoByIDAPorName(data) {
+  return request({
+    url: TeamManagement + `/member/queryMemberInfoByIDAPorName`,
+    method: 'post',
+    data
+  })
+}
+
+// 任务创建
+export function taskCreate(data) {
+  return request({
+    url: TeamManagement + `/task/create`,
+    method: 'post',
+    data
+  })
+}
+
+// 任务创建
+export function taskUpdate(data) {
+  return request({
+    url: TeamManagement + `/task/update`,
+    method: 'post',
+    data
+  })
+}
+
+// 项目list
+export function projectList(data) {
+  return request({
+    url: TeamManagement + `/project/list`,
+    method: 'post',
+    data
+  })
+}
+
+// 获取需求list
+export function requirementQueryRequirementInfoList(data) {
+  return request({
+    url: TeamManagement + `/requirement/queryRequirementInfoList`,
+    method: 'post',
+    data
+  })
+}
+
+// 获取需求list
+export function taskGet(id) {
+  return request({
+    url: TeamManagement + `/task/get?id=` + id,
+    method: 'get'
+  })
+}
+
+// echarts
+export function bugGetBugStatusMapInfo(data) {
+  return request({
+    url: TeamManagement + `/bug/getBugStatusMapInfo`,
+    method: 'post',
+    data
+  })
+}
+
+// 添加事件
+export function ScheduleCreate(data) {
+  return request({
+    url: TeamManagement + `/Schedule/create`,
+    method: 'post',
+    data
+  })
+}
+
+// 更新事件
+export function ScheduleUpdate(data) {
+  return request({
+    url: TeamManagement + `/Schedule/update`,
+    method: 'post',
+    data
+  })
+}
+
+// 删除任务
+export function tasktaskDelete(data, id) {
+  return request({
+    url: TeamManagement + `/task/delete?id=` + id,
+    method: 'post',
+    data
+  })
+}
+
+// 评论
+export function commentCreate(data) {
+  return request({
+    url: TeamManagement + `/comment/create`,
+    method: 'post',
+    data
+  })
+}
+
+// 评论(查询)
+export function commentList(data) {
+  return request({
+    url: TeamManagement + `/comment/list`,
+    method: 'post',
+    data
+  })
+}

+ 27 - 26
src/router/index.js

@@ -83,50 +83,52 @@ export const constantRoutes = [
         name: '项目管理',
         component: () => import('@/views/projectManage/projectList/testa'),
         redirect: '/Platform/projectManage/projectList/projectIndex',
-        meta: { title: '项目管理', icon: '项目管理' },
+        meta: { title: '项目管理' },
         children: [
           {
             path: 'projectIndex',
-            name: '项目列表',
+            name: '项目',
             component: () => import('@/views/projectManage/projectList/projectIndex'),
             meta: { title: '项目' }
           },
           {
             path: 'projectViewDetails',
             name: '项目详情',
+            hidden: true,
             component: () => import('@/views/projectManage/projectList/projectViewDetails'),
             meta: { title: '项目详情' }
           },
-          {
-            path: 'projectList',
-            name: '项目列表',
-            // hidden: true,
-            component: () => import('@/views/projectManage/projectList/projectListIndex'),
-            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: 'projectList',
+          //   name: '项目列表',
+          //   // hidden: true,
+          //   component: () => import('@/views/projectManage/projectList/projectListIndex'),
+          //   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: 'taskIndex',
-            name: '任务列表',
+            name: '任务',
             component: () => import('@/views/projectManage/taskList/taskIndex'),
             meta: { title: '任务' }
           },
           {
             path: 'taskViewDetails',
-            name: '任务列表',
+            name: '任务详情',
+            hidden: true,
             component: () => import('@/views/projectManage/taskList/taskViewDetails'),
             meta: { title: '任务详情' }
           },
@@ -286,7 +288,6 @@ export const constantRoutes = [
       {
         path: '/Platform/defectManagement',
         name: '缺陷管理',
-        hidden: true,
         component: () => import('@/views/Platform/defectManagement'),
         meta: { title: '缺陷管理' }
       },

+ 1 - 1
src/views/ToConfigure/configure.vue

@@ -70,7 +70,7 @@
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button size="mini" type="danger" plain @click="dialogFormVisible = false">取 消</el-button>
+        <el-button size="mini" type="danger" plain @click="dialogFormVisible = false">关 闭</el-button>
         <el-button size="mini" type="primary" plain @click="Preservation(form)">保 存</el-button>
       </div>
     </el-dialog>

+ 315 - 0
src/views/projectManage/dialog_vue.vue

@@ -0,0 +1,315 @@
+<template>
+  <div>
+    <el-dialog :title="tit_Name" :visible.sync="dialogFormVisible" width="70%">
+      <el-form ref="task_form" :model="task_form" :rules="task_rulesForm" label-position="right" style="margin: 0 3%;" label-width="120px">
+        <el-form-item label="任务名称" prop="name" style="width: 100%">
+          <el-input v-model="task_form.name" autocomplete="off" placeholder="请输入任务名称" />
+        </el-form-item>
+        <div style="display:flex;align-items: center;justify-content: space-between;">
+          <el-form-item label="直接归属" prop="source">
+            <el-radio-group v-model="task_form.source" @change="get_source(task_form.source)">
+              <el-radio :label="1">不归属</el-radio>
+              <el-radio :label="2">需求</el-radio>
+              <el-radio :label="3">项目</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item v-if="ascription_demand" label="归属需求" prop="requireId">
+            <el-select v-model="task_form.requireId" filterable clearable placeholder="请选择" style="width:20vw">
+              <el-option v-for="item in demandList" :key="item.id" :label="item.name" :value="item.id" />
+            </el-select>
+          </el-form-item>
+          <el-form-item v-if="ascription_project" label="归属项目" prop="requireId">
+            <el-select v-model="task_form.projectId" filterable clearable placeholder="请选择" style="width:20vw">
+              <el-option v-for="item in projectList" :key="item.id" :label="item.name" :value="item.id" />
+            </el-select>
+          </el-form-item>
+        </div>
+        <div style="display:flex;align-items: center;justify-content: space-between;">
+          <div>
+            <el-form-item label="业务/平台/模块" prop="clientType">
+              <el-cascader v-model="task_form.cliType" :options="business_platform_Modular" style="width: 20vw" />
+            </el-form-item>
+            <el-form-item label="开发负责人">
+              <el-select v-model="task_form.rdOwner" filterable remote reserve-keyword placeholder="请输入姓名或邮箱前缀" :remote-method="remoteMethod" :loading="loading" style="width: 100%">
+                <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+                  <span style="float: left">{{ item.name }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </div>
+          <div>
+            <el-form-item label="是否免测" prop="notest">
+              <el-radio-group v-model="task_form.notest">
+                <el-radio :label="0">是</el-radio>
+                <el-radio :label="1">否</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <el-form-item label="测试负责人">
+              <el-select v-model="task_form.qaOwner" filterable remote reserve-keyword placeholder="请输入姓名或邮箱前缀" :remote-method="remoteMethod" :loading="loading" style="width: 20vw">
+                <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+                  <span style="float: left">{{ item.name }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </div>
+        </div>
+        <el-form-item label="技术文档链接">
+          <el-input v-model="task_form.devUrl" placeholder="请粘贴链接" />
+        </el-form-item>
+        <div style="display:flex;align-items: center;justify-content: space-between;">
+          <el-form-item label="是否跟版" prop="followVersion">
+            <el-radio-group v-model="task_form.followVersion" @change="get_followVersion(task_form.followVersion)">
+              <el-radio :label="1">是</el-radio>
+              <el-radio :label="2">否</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item v-if="show_Client" label="涉及的客户端" prop="involveApp">
+            <el-select v-model="task_form.involveApp" filterable remote reserve-keyword :loading="loading" clearable placeholder="请选择" style="width: 20vw">
+              <el-option v-for="item in appClient" :key="item.code" :label="item.msg" :value="item.code" />
+            </el-select>
+          </el-form-item>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="tit_Name === '新建任务'?create_task(task_form):uptate_task(task_form)">保 存</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { taskCreate, memberQueryMemberInfoByIDAPorName, configShowTaskEnum, settingGetTypeMap, requirementQueryRequirementInfoList, taskGet, taskUpdate } from '@/api/taskIndex' // ajax
+import { projectList } from '@/api/projectIndex'
+export default {
+  data() {
+    return {
+      dialogFormVisible: false,
+      task_form: {},
+      ascription_project: false, // 归属项目(隐藏)
+      ascription_demand: false, // 归属需求(隐藏)
+      test: {},
+      loading: false,
+      tit: '', // 跳转
+      tit_Name: '', // 新建(编辑)
+      projectId: '', // 项目id
+      options: [], // 员工信息
+      noTest: [], // 是否免测
+      BusinessLine: [], // 业务线
+      appClient: [], // 涉及业务线
+      arr_platform: [], // 平台数据
+      arr_Modular: [], // 模块数据‘
+      business_platform_Modular: [], // 业务/平台/模块
+      show_Client: false, // 涉及的客户端(显示)
+      projectList: [], // 归属项目数据
+      demandList: [], // 需求list
+      userInformation: localStorage.getItem('username'),
+      userNames: localStorage.getItem('realname'),
+      task_rulesForm: {
+        name: [{ required: true, message: '请输入任务名称', trigger: 'blur' }],
+        source: [{ required: true, message: '请输入任务名称', trigger: 'blur' }],
+        requireId: [{ required: true, message: '请选择归属需求', trigger: 'blur' }],
+        followVersion: [{ required: true, message: '请选择是否跟版', trigger: 'blur' }],
+        notest: [{ required: true, message: '请选择是否免测', trigger: 'blur' }],
+        cliType: [{ required: true, message: '请选择业务/平台/模块', trigger: 'blur' }],
+        involveApp: [{ required: true, message: '请选择涉及的客户端', trigger: 'blur' }]
+      }
+    }
+  },
+  created() {
+    this.get_taskSelect()
+  },
+  methods: {
+    init(e, id) {
+      this.tit_Name = '新建任务'
+      switch (e) {
+        case 1: // 新建任务(任务主页)
+          this.task_form = {}
+          this.dialogFormVisible = true
+          this.ascription_demand = false
+          this.ascription_project = false
+          this.$set(this.task_form, 'notest', 1)
+          this.show_Client = false
+          this.$nextTick(() => {
+            this.$refs['task_form'].clearValidate()
+          })
+          break
+        case 2: // 新建任务(项目详情)
+          this.tit = '新建任务'
+          var url = window.location.href // 获取url中"?"符后的字串
+          this.projectId = url.split('?id=')
+          projectList({ id: Number(this.projectId[1]), curIndex: 1, pageSize: 15 }).then(res => {
+            this.dialogFormVisible = true
+            var that = this
+            setTimeout(function() {
+              that.task_form = {}
+              that.$set(that.task_form, 'source', 3)
+              that.$set(that.task_form, 'notest', 1)
+              that.$set(that.task_form, 'followVersion', '')
+              that.ascription_project = true
+              that.$set(that.task_form, 'requireId', res.data[0].name)
+              that.task_form.followVersion === '' ? that.show_Client = false : ''
+            }, 300)
+          })
+          break
+        case 3: // 编辑任务(任务详情)
+          this.tit_Name = '编辑任务'
+          taskGet(id[1]).then(res => {
+            this.dialogFormVisible = true
+            var that = this
+            setTimeout(function() {
+              that.task_form = {}
+              that.task_form = res.data
+              that.task_form.source === 3 ? that.ascription_project = true : that.ascription_project = false
+              that.task_form.source === 2 ? that.ascription_demand = true : that.ascription_demand = false
+              that.task_form.source === 1 ? that.ascription_demand = false : ''
+              that.task_form.source === 1 ? that.ascription_project = false : ''
+              that.task_form.followVersion === 2 ? that.show_Client = false : that.show_Client = true
+              that.task_form.followVersion === 1 ? that.show_Client = true : that.show_Client = false
+              that.task_form.cliType = [res.data.bizId, res.data.type, res.data.clientType]
+              that.task_form.involveApp = Number(res.data.involveApp)
+              const arr_object = []
+              arr_object.push(res.data.rdObject)
+              arr_object.push(res.data.qaObject)
+              var hash = {}
+              that.options = arr_object.reduce(function(item, next) {
+                hash[next.idap] ? '' : hash[next.idap] = true && item.push(next)
+                return item
+              }, [])
+            }, 100)
+          })
+          break
+      }
+      projectList({ curIndex: 1, pageSize: 15 }).then(res => { // 获取项目(查询)
+        this.projectList = res.data
+      })
+      requirementQueryRequirementInfoList({ curIndex: 1, pageSize: 15 }).then(res => { // 获取需求(查询)
+        this.demandList = res.data.list
+      })
+    },
+    modalClose() {
+      this.dialogFormVisible = false
+    },
+    test2(item, e) { // 获取团队人员信息
+      if (typeof this.test[item.idap] === 'undefined') {
+        item.role = e
+        this.test[item.idap] = item
+      }
+      return item.idap
+    },
+    create_task(e) { // 创建任务(保存)
+      this.$refs['task_form'].validate((valid) => {
+        if (valid) {
+          var taskInfoDO = e
+          taskInfoDO.followVersion = e.followVersion
+          taskInfoDO.source = e.source
+          taskInfoDO.notest = e.notest
+          taskInfoDO.bizId = e.cliType[0]
+          taskInfoDO.type = e.cliType[1]
+          taskInfoDO.clientType = e.cliType[2]
+          var user = { name: this.userNames, ename: this.userInformation, id: '' }
+          taskCreate({ taskInfoDO, user }).then(res => {
+            this.dialogFormVisible = false
+            this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+            // this.tit === '新建任务' ? this.$router.push({ name: '任务详情', query: { taskId: e.id }}) : ''
+          })
+        }
+      })
+    },
+    uptate_task(e) { // 编辑任务(编辑)
+      this.$refs['task_form'].validate((valid) => {
+        if (valid) {
+          var taskInfoDO = e
+          taskInfoDO.followVersion = e.followVersion
+          taskInfoDO.source = e.source
+          taskInfoDO.notest = e.notest
+          taskInfoDO.bizId = e.cliType[0]
+          taskInfoDO.type = e.cliType[1]
+          taskInfoDO.clientType = e.cliType[2]
+          var user = { name: this.userNames, ename: this.userInformation, id: '' }
+          taskUpdate({ taskInfoDO, user }).then(res => {
+            if (res.code === 200) {
+              this.dialogFormVisible = false
+              this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+            }
+          })
+        }
+      })
+    },
+    remoteMethod(query) { // 人员查询
+      if (query !== '') {
+        this.loading = true
+        setTimeout(() => {
+          this.loading = false
+          memberQueryMemberInfoByIDAPorName({ memberIDAP: query }).then(res => {
+            this.options = res.data
+          })
+        }, 200)
+      } else {
+        this.options = []
+      }
+    },
+    get_source(e) {
+      switch (e) {
+        case 1:
+          this.ascription_demand = false
+          this.ascription_project = false
+          this.$set(this.task_form, 'requireId', '')
+          this.$set(this.task_form, 'projectId', '')
+          break
+        case 2:
+          this.ascription_demand = true
+          this.ascription_project = false
+          this.$set(this.task_form, 'requireId', '')
+          break
+        case 3:
+          this.ascription_demand = false
+          this.ascription_project = true
+          this.$set(this.task_form, 'projectId', '')
+          break
+      }
+    },
+    get_taskSelect() { // 下拉菜单数据
+      configShowTaskEnum().then(res => {
+        this.noTest = res.data.noTest // 是否免测
+        this.taskSource = res.data.taskSource // 归属需求
+        this.appClient = res.data.appClient // 涉及客户端
+      })
+      settingGetTypeMap().then(res => {
+        this.business_platform_Modular = res.data.map(item => ({
+          ...item,
+          value: item.code,
+          label: item.name,
+          children: item.child === null ? '' : item.child.map(item1 => ({
+            ...item1,
+            value: item1.code,
+            label: item1.name,
+            children: item1.child === null ? '' : item1.child.map(item2 => ({
+              ...item2,
+              value: item2.code,
+              label: item2.name
+            }))
+          }))
+        }))
+        this.BusinessLine = res.data // 业务线
+        this.BusinessLine.map(item => {
+          item.child !== null ? item.child.map(value => {
+            this.arr_platform.push(value) // 平台数据
+            value.child.map(num => {
+              this.arr_Modular.push(num) // 模块数据
+            })
+          }) : ''
+        })
+      })
+    },
+    get_followVersion(e) { // 涉及的客户端(显示/隐藏)
+      this.$set(this.task_form, 'involveApp', '')
+      e === 1 ? this.show_Client = true : ''
+      e === 2 ? this.show_Client = false : ''
+    }
+  }
+}
+
+</script>

+ 174 - 131
src/views/projectManage/projectList/projectIndex.vue

@@ -3,71 +3,71 @@
     <el-container>
       <el-header class="bgborder" style=" margin: 1%;display:flex;align-items: center;justify-content: space-between;">
         <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_all.all_all }}<i class="el-icon-arrow-down el-icon--right" /></span>
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_all.bizId }}<i class="el-icon-arrow-down el-icon--right" /></span>
           <el-dropdown-menu slot="dropdown" align="center">
-            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{value:item.value,label:item.label,flag:1}">{{ item.label }}</el-dropdown-item>
+            <el-dropdown-item v-for="item in all_bizId" :key="item.id" :command="{value:item.id,label:item.bizName,flag:2}">{{ item.bizName }}</el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
         <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_all.all_bizId }}<i class="el-icon-arrow-down el-icon--right" /></span>
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_all.bizType }}<i class="el-icon-arrow-down el-icon--right" /></span>
           <el-dropdown-menu slot="dropdown" align="center">
-            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{value:item.value,label:item.label,flag:2}">{{ item.label }}</el-dropdown-item>
+            <el-dropdown-item v-for="item in arr_prjectType" :key="item.value" :command="{value:item.value,label:item.name,flag:3}">{{ item.name }}</el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
         <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_all.all_projectType }}<i class="el-icon-arrow-down el-icon--right" /></span>
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_all.priority }}<i class="el-icon-arrow-down el-icon--right" /></span>
           <el-dropdown-menu slot="dropdown" align="center">
-            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{value:item.value,label:item.label,flag:3}">{{ item.label }}</el-dropdown-item>
+            <el-dropdown-item v-for="item in arr_priority" :key="item.value" :command="{value:item.value,label:item.name, flag:4}">{{ item.name }}</el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
-        <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_all.all_priority }}<i class="el-icon-arrow-down el-icon--right" /></span>
-          <el-dropdown-menu slot="dropdown" align="center">
-            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{value:item.value,label:item.label, flag:4}">{{ item.label }}</el-dropdown-item>
-          </el-dropdown-menu>
-        </el-dropdown>
-        <el-select id="basicName" v-model="form_all.all_PersonInCharge" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable size="mini" placeholder="负责人">
-          <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+        <el-select v-model="form_all.projectOwner" filterable remote reserve-keyword placeholder="负责人" :remote-method="remoteMethod" :loading="loading" size="mini">
+          <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+            <span style="float: left">{{ item.name }}</span>
+            <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+          </el-option>
         </el-select>
-        <el-select id="basicName" v-model="form_all.all_Founder" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable size="mini" placeholder="创建人">
-          <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+        <el-select v-model="form_all.creater" filterable remote reserve-keyword placeholder="创建人" :remote-method="remoteMethod" :loading="loading" size="mini">
+          <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+            <span style="float: left">{{ item.name }}</span>
+            <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+          </el-option>
         </el-select>
-        <el-button type="primary" size="mini" style="float: right">查询</el-button>
+        <el-button type="primary" size="mini" style="float: right" @click="query_project(form_all)">查询</el-button>
         <el-button size="mini" style="float: right;" @click="query_Reset">重置</el-button>
       </el-header>
 
-      <el-main class="bgborder" style=" margin: 0 1%;min-height: 79.5vh;padding:0 !important">
-        <div style="margin: 1.5%; font-weight: 600; white-space: nowrap;"><b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>项目列表 <el-button type="primary" size="mini" icon="el-icon-plus" style="float: right;" @click="dialogFormVisible = true">新建</el-button></div>
-        <el-table :data="table_project" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true" :row-class-name="tableRowClassName">
-          <el-table-column label="优先级" min-width="100" sortable align="center">
-            <template slot-scope="scope"><el-tag size="mini" :type="random(scope.row)" effect="dark"> {{ scope.row.priority }}</el-tag></template>
+      <el-main class="bgborder" style=" margin: 0 1% 1% 1%;min-height: 86vh;padding:0 !important">
+        <div style="margin: 1.5%; font-weight: 600; white-space: nowrap;"><b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>项目列表 <el-button type="primary" size="mini" icon="el-icon-plus" style="float: right;" @click="home_created_project">新建</el-button></div>
+        <el-table :data="table_project" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true">
+          <el-table-column label="优先级" min-width="100" align="center">
+            <template slot-scope="scope"><el-tag size="mini" :type="random(scope.row)" effect="dark"> {{ scope.row.projectTypeStr }}</el-tag></template>
           </el-table-column>
           <el-table-column label="项目名称" min-width="200" align="center" show-overflow-tooltip>
-            <template slot-scope="scope"><span @click="link_project">{{ scope.row.name }}</span></template>
+            <template slot-scope="scope"><span style="cursor: pointer;" @click="link_project(scope.row.id)">{{ scope.row.name }}</span></template>
           </el-table-column>
           <el-table-column label="业务线" min-width="100" align="center">
-            <template slot-scope="scope">{{ scope.row.bizType }}</template>
+            <template slot-scope="scope">{{ scope.row.bizStr }}</template>
           </el-table-column>
-          <el-table-column label="项目类型" min-width="100" align="center">
-            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+          <el-table-column label="项目类型" min-width="100" align="center" show-overflow-tooltip>
+            <template slot-scope="scope">{{ scope.row.priorityStr }}</template>
           </el-table-column>
           <el-table-column label="项目负责人" min-width="100" align="center">
-            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+            <template slot-scope="scope">{{ scope.row.projectOwner }}</template>
           </el-table-column>
           <el-table-column label="产品负责人" min-width="100" align="center">
-            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+            <template slot-scope="scope">{{ scope.row.pmOwner }}</template>
           </el-table-column>
           <el-table-column label="开发负责人" min-width="100" align="center">
-            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+            <template slot-scope="scope">{{ scope.row.rdOwner }}</template>
           </el-table-column>
           <el-table-column label="需求" min-width="80" align="center">
-            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+            <template slot-scope="scope">{{ scope.row.requirementCount }}</template>
           </el-table-column>
           <el-table-column label="任务" min-width="80" align="center">
-            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+            <template slot-scope="scope">{{ scope.row.taskCount }}</template>
           </el-table-column>
           <el-table-column label="Bug" min-width="80" align="center">
-            <template slot-scope="scope">{{ scope.row.teamName }}</template>
+            <template slot-scope="scope">{{ scope.row.bugCount }}</template>
           </el-table-column>
           <el-table-column label="创建人" min-width="100" align="center">
             <template slot-scope="scope">{{ scope.row.creater }}</template>
@@ -76,71 +76,83 @@
             <template slot-scope="scope">{{ scope.row.gmtCreate }}</template>
           </el-table-column>
         </el-table>
+        <div align="right">
+          <el-pagination background :current-page="currentPage" :page-sizes="[15, 20, 25, 30]" :page-size="15" layout="total, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+        </div>
       </el-main>
-      <el-footer class="footer" style="display:flex;align-items: center;justify-content: flex-end;">
-        <el-pagination background :current-page="currentPage" :page-sizes="[15, 20, 25, 30]" :page-size="100" layout="total, prev, pager, next, jumper" :total="100" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
-      </el-footer>
     </el-container>
     <el-dialog title="新建项目" :visible.sync="dialogFormVisible" width="70%">
-      <el-form :model="form" label-position="left" style="margin: 0 3%;">
-        <el-form-item label="项目名称" :label-width="formLabelWidth">
+      <el-form ref="form" :model="form" :rules="rules_form" :label-width="formLabelWidth" label-position="left" style="margin: 0 3%;">
+        <el-form-item label="项目名称" prop="name">
           <el-input v-model="form.name" autocomplete="off" placeholder="请输入项目名称" />
         </el-form-item>
         <div style="display: flex;">
           <div style="flex; 1;">
-            <el-form-item label="项目类型" :label-width="formLabelWidth">
-              <el-select v-model="form.value" clearable placeholder="业务/产品" style="width: 100%">
-                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="项目类型" prop="bizType">
+              <el-select v-model="form.bizType" clearable placeholder="业务/产品" style="width: 100%">
+                <el-option v-for="item in arr_prjectType" :key="item.value" :label="item.name" :value="item.value" />
               </el-select>
             </el-form-item>
-            <el-form-item label="业务线" :label-width="formLabelWidth">
-              <el-select v-model="form.value" clearable placeholder="请选择" style="width:20vw">
-                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="业务线" prop="bizId">
+              <el-select v-model="form.bizId" clearable placeholder="请选择" style="width:20vw">
+                <el-option v-for="item in all_bizId" :key="item.id" :label="item.bizName" :value="item.id" />
               </el-select>
             </el-form-item>
-            <el-form-item label="产品负责人" :label-width="formLabelWidth">
-              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="产品负责人">
+              <el-select v-model="form.pmOwner" filterable remote reserve-keyword placeholder="请输入姓名或邮箱前缀" :remote-method="remoteMethod" :loading="loading" style="width: 100%">
+                <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+                  <span style="float: left">{{ item.name }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+                </el-option>
               </el-select>
             </el-form-item>
-            <el-form-item label="测试负责人" :label-width="formLabelWidth">
-              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="测试负责人">
+              <el-select v-model="form.testOwner" filterable remote reserve-keyword placeholder="请输入姓名或邮箱前缀" :remote-method="remoteMethod" :loading="loading" style="width: 100%">
+                <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+                  <span style="float: left">{{ item.name }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+                </el-option>
               </el-select>
             </el-form-item>
           </div>
           <div style="flex; 1; margin: 0 0 0 auto;">
-            <el-form-item label="优先级" :label-width="formLabelWidth">
-              <el-select v-model="form.value" clearable placeholder="请选择" style="width:20vw">
-                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="优先级" prop="priority">
+              <el-select v-model="form.priority" clearable placeholder="请选择" style="width:20vw">
+                <el-option v-for="item in arr_priority" :key="item.value" :label="item.name" :value="item.value" />
               </el-select>
             </el-form-item>
-            <el-form-item label="项目负责人" :label-width="formLabelWidth">
-              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="项目负责人" prop="projectOwner">
+              <el-select v-model="form.projectOwner" filterable remote reserve-keyword placeholder="请输入姓名或邮箱前缀" :remote-method="remoteMethod" :loading="loading" style="width: 100%">
+                <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+                  <span style="float: left">{{ item.name }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+                </el-option>
               </el-select>
             </el-form-item>
-            <el-form-item label="开发负责人" :label-width="formLabelWidth">
-              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="开发负责人">
+              <el-select v-model="form.rdOwner" filterable remote reserve-keyword placeholder="请输入姓名或邮箱前缀" :remote-method="remoteMethod" :loading="loading" style="width: 100%">
+                <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+                  <span style="float: left">{{ item.name }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+                </el-option>
               </el-select>
             </el-form-item>
           </div>
         </div>
-        <el-form-item label="项目描述" :label-width="formLabelWidth">
-          <el-input v-model="form.textarea" type="textarea" placeholder="请输入" show-word-limit />
+        <el-form-item label="项目描述">
+          <el-input v-model="form.description" type="textarea" placeholder="请输入" show-word-limit />
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false">取 消</el-button>
-        <el-button type="primary" @click="dialogFormVisible = false">创 建</el-button>
+        <el-button @click="dialogFormVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="created_project(form)">创 建</el-button>
       </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { projectList } from '@/api/projectIndex'
+import { projectList, memberQueryMemberInfoByIDAPorName, projectBizList, projectCreate } from '@/api/projectIndex'
 export default {
   data() {
     return {
@@ -152,42 +164,27 @@ export default {
       list: [],
       form: {},
       form_all: {
-        all_all: '全部',
-        all_bizId: '业务线',
-        all_projectType: '项目类型',
-        all_priority: '优先级',
-        all_PersonInCharge: '负责人',
-        all_Founder: '创建人'
+        bizId: '业务线',
+        bizType: '项目类型',
+        priority: '优先级'
+      },
+      rules_form: {
+        name: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
+        bizType: [{ required: true, message: '项目类型不能为空', trigger: 'blur' }],
+        bizId: [{ required: true, message: '业务线不能为空', trigger: 'blur' }],
+        priority: [{ required: true, message: '优先级不能为空', trigger: 'blur' }],
+        projectOwner: [{ required: true, message: '项目负责人不能为空', trigger: 'blur' }]
       },
+      userInformation: localStorage.getItem('username'),
+      userNames: localStorage.getItem('realname'),
       loading: false,
       dialogFormVisible: false,
       formLabelWidth: '100px',
       currentPage: 0,
-      gridData: [{
-        date: '2016-05-02',
-        name: '王小虎',
-        address: '上海市普陀区金沙江路 1518 弄'
-      }, {
-        date: '2016-05-03',
-        name: '王小虎',
-        address: '上海市普陀区金沙江路 1518 弄'
-      }],
       table_project: [],
       options1: [{
         teamName: '选项1',
         label: '黄金糕'
-      }, {
-        teamName: '选项2',
-        label: '双皮奶'
-      }, {
-        teamName: '选项3',
-        label: '蚵仔煎'
-      }, {
-        value: '选项4',
-        label: '龙须面'
-      }, {
-        value: '选项5',
-        label: '北京烤系三星那些闹事你辛苦啦斯诺克选手内心鸭'
       }],
       items: [
         { type: '' },
@@ -196,89 +193,139 @@ export default {
         { type: 'danger' },
         { type: 'warning' }
       ],
-      value: '',
-      all_city_list: [{ value: 1, label: '秦志鹏' }, { value: 2, label: '汝瑞' }, { value: 3, label: '赵杰' }]
+      query_object: {},
+      all_bizId: [], // 业务线
+      test: [], // 人员查询
+      // prject_type: '', // 获取项目类型
+      arr_priority: [{ value: 0, name: 'p0' }, { value: 1, name: 'p1' }, { value: 2, name: 'p2' }, { value: 3, name: 'p3' }, { value: 4, name: 'p4' }, { value: 5, name: 'p5' }, { value: 6, name: 'p6' }],
+      all_city_list: [{ value: 1, label: '秦志鹏' }, { value: 2, label: '汝瑞' }, { value: 3, label: '赵杰' }],
+      arr_prjectType: [{ value: 0, name: '业务/产品' }, { value: 1, name: '技术升级/技术优化/技术FT' }, { value: 2, name: '测试优化/测试FT' }]
     }
   },
   created() {
     this.get_projectList()
   },
   methods: {
-    get_projectList() {
+    test2(item, e) { // 获取团队人员信息
+      if (typeof this.test[item.idap] === 'undefined') {
+        item.role = e
+        this.test[item.idap] = item
+      }
+      return item.idap
+    },
+    get_projectList() { // 获取list
       projectList({ curIndex: 1, pageSize: 15 }).then(res => {
         this.table_project = res.data
         this.total = res.total
       })
+      projectBizList({}).then(res => {
+        this.all_bizId = res.data
+      })
     },
     handleCommand(command) {
-      console.log(command)
-      var isCommand = ''
       switch (command.flag) {
-        case 1:
-          this.form_all.all_all = command.label
-          isCommand = command.label.value
-          break
         case 2:
-          this.form_all.all_bizId = command.label
-          isCommand = command.label.value
+          this.form_all.bizId = command.label
+          this.query_object.bizId = command.value
           break
         case 3:
-          this.form_all.all_projectType = command.label
-          isCommand = command.label.value
+          this.form_all.bizType = command.label
+          this.query_object.bizType = command.value
           break
         case 4:
-          this.form_all.all_priority = command.label
-          isCommand = command.label.value
+          this.form_all.priority = command.label
+          this.query_object.priority = command.value
           break
       }
-      console.log(isCommand)
     },
     random(index) {
       const number = Math.random() * 10
       const a = Math.floor(number)
       return this.items[a % 5].type
     },
-    remoteMethod(query) {
+    remoteMethod(query) { // 人员查询
       if (query !== '') {
         this.loading = true
         setTimeout(() => {
           this.loading = false
-          this.options = this.list.filter(item => {
-            return item.label.toLowerCase()
-              .indexOf(query.toLowerCase()) > -1
+          memberQueryMemberInfoByIDAPorName({ memberIDAP: query }).then(res => {
+            this.options = res.data
           })
         }, 200)
       } else {
         this.options = []
       }
     },
-    tableRowClassName({ row, rowIndex }) {
-      if (rowIndex === 1) {
-        return 'warning-row'
-      } else if (rowIndex === 3) {
-        return 'success-row'
-      }
-      return ''
+    link_project(e) {
+      const { href } = this.$router.resolve({
+        name: '项目详情',
+        query: { id: e }
+      })
+      window.open(href, '_blank')
+    },
+    home_created_project() {
+      this.form = {}
+      this.dialogFormVisible = true
+      this.$nextTick(() => {
+        this.$refs['form'].clearValidate()
+      })
     },
-    link_project() {
-      window.open('http://localhost:9528/#/Platform/projectManage/projectViewDetails', '_blank')
+    created_project(e) { // 创建(提交)
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          var projectInfo = e
+          var user = { name: this.userNames, ename: this.userInformation, id: '' }
+          projectCreate({ projectInfo, user }).then(res => {
+            this.dialogFormVisible = false
+            this.get_projectList()
+          })
+        }
+      })
+    },
+    query_project(e) { // 查询
+      this.query_object.projectOwner = e.projectOwner
+      this.query_object.creater = e.creater
+      this.query_object.curIndex = this.curIndex
+      this.query_object.pageSize = this.pageSize
+      projectList(this.query_object).then(res => {
+        this.table_project = res.data
+        this.total = res.total
+      })
     },
     query_Reset() { // 重置
-      this.$set(this.form_all, 'all_all', '全部')
-      this.$set(this.form_all, 'all_bizId', '业务线')
-      this.$set(this.form_all, 'all_projectType', '项目类型')
-      this.$set(this.form_all, 'all_priority', '优先级')
-      this.$set(this.form_all, 'all_PersonInCharge', '')
-      this.$set(this.form_all, 'all_Founder', '')
+      this.query_object = {}
+      this.$set(this.form_all, 'bizId', '业务线')
+      this.$set(this.form_all, 'bizType', '项目类型')
+      this.$set(this.form_all, 'priority', '优先级')
+      this.$set(this.form_all, 'projectOwner', '')
+      this.$set(this.form_all, 'creater', '')
+      this.$message({ message: '已重置', type: 'success', duration: 1000, offset: 150 })
     },
     handleSizeChange(size) { //  分页
       this.pageSize = size
-      // this.get_list()
+      this.query_project(this.query_object)
     },
     handleCurrentChange(curIndex) { //  分页
       this.curIndex = curIndex
-      // this.get_list()
+      this.query_project(this.query_object)
     }
+    // get_bizType(e) { // 获取项目类型
+    //   this.prject_type = e
+    //   this.get_projectOwner(this.form.projectOwner)
+    // },
+    // get_projectOwner(e) { // 通过项目类型和输入的项目负责人,填充开发,测试,产品负责人
+    //   switch (this.prject_type) {
+    //     case 0:
+    //       this.$set(this.form, 'pmOwner', e)
+    //       break
+    //     case 1:
+    //       this.$set(this.form, 'rdOwner', e)
+    //       break
+    //     case 2:
+    //       this.$set(this.form, 'testOwner', e)
+    //       break
+    //   }
+    // },
   }
 }
 </script>
@@ -298,12 +345,8 @@ export default {
 
   .el-table .warning-row { background: oldlace; }
 
-  #basicName::-webkit-input-placeholder {
-    color: #333333;
-  }
   .drop_down {
      font-size: 13px;
      color: #333333;
-     /* white-space: nowrap; */
   }
 </style>

+ 393 - 314
src/views/projectManage/projectList/projectViewDetails.vue

@@ -2,23 +2,25 @@
   <div style="background-color:#F2F3F6;display:flex;align-items: center;justify-content: center;">
     <el-container>
       <el-header class="bgborder" style=" margin: 1%;height: 7vh;display: flex; justify-content: space-between; align-items: center;">
-        <el-tooltip class="item" effect="dark" content="爱啥啥" placement="bottom">
-          <span style="float: left;">项目名称:"cmckldmcklmdcklmdsklcmklmckldklcmdsdcklmdklcdsklcmkldsmcklm"</span>
-        </el-tooltip>
-        <span style="float: right;">
-          <el-dropdown>
-            <el-button size="mini" type="primary">未开始<i class="el-icon-arrow-down el-icon--right" /></el-button>
-            <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item>进行中</el-dropdown-item>
-              <el-dropdown-item>已完成</el-dropdown-item>
+        <span style="display: flex; justify-content: space-between; align-items: center;">
+          <el-tooltip effect="dark" :content="form_query.name" placement="bottom">
+            <div style="float: left;font-weight: 600;margin-right:8%;white-space: nowrap; ">{{ form_query.name | ellipsis }}</div>
+          </el-tooltip>
+          <el-dropdown @command="handleCommand">
+            <el-button size="mini" type="primary" class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_query.statusString }}<i class="el-icon-arrow-down el-icon--right" /></el-button>
+            <el-dropdown-menu slot="dropdown" align="center">
+              <el-dropdown-item v-for="item in arr_status" :key="item.value" :command="{value:item.value,label:item.name}">{{ item.name }}</el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
+        </span>
+        <span style="float: right;">
+          <el-button size="mini" type="primary" @click="centerDialogVisible = true">删除项目</el-button>
           <el-dropdown>
             <el-button size="mini" type="primary">新建<i class="el-icon-arrow-down el-icon--right" />
             </el-button>
             <el-dropdown-menu slot="dropdown">
               <el-dropdown-item>新建需求</el-dropdown-item>
-              <el-dropdown-item>新建任务</el-dropdown-item>
+              <el-dropdown-item @click.native="reated_task()">新建任务</el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
         </span>
@@ -27,157 +29,100 @@
         <el-aside class="bgborder" style=" margin:0 1%;minWidth: 55%;">
           <div style="margin: 5%; font-weight: 600; white-space: nowrap;">
             <b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>数据统计
-            <el-button size="mini" type="primary" style="float: right;" @click="centerDialogVisible = true">删除项目</el-button>
           </div>
           <div style="display: flex; justify-content: space-between; align-items: center;">
             <span style="text-align: center; margin-left: 10%">
               <p>需求数量</p>
-              <p style="font-size: 44px;">0</p>
-              <p>
-                <el-button size="mini" type="primary">提需求</el-button>
-              </p>
+              <p style="font-size: 44px;">{{ form_query.requirementCount }}</p>
+              <p><el-button size="mini" type="primary">提需求</el-button></p>
             </span>
             <span style="text-align: center;">
               <p>任务数量</p>
-              <p style="font-size: 44px;">0</p>
-              <p>
-                <el-button size="mini" type="primary">建任务</el-button>
-              </p>
+              <p style="font-size: 44px;">{{ form_query.taskCount }}</p>
+              <p><el-button size="mini" type="primary" @click="reated_task()">建任务</el-button></p>
             </span>
             <span style="text-align: center;margin-right:10%;">
               <p>Bug数量</p>
-              <p style="font-size: 44px;">0</p>
-              <p>
-                <el-button size="mini" type="primary">提bug</el-button>
-              </p>
+              <p style="font-size: 44px;">{{ form_query.bugCount }}</p>
+              <p><el-button size="mini" type="primary">提bug</el-button></p>
             </span>
           </div>
         </el-aside>
         <el-container>
-          <el-main class="bgborder" style="margin: 0 2.1% 0 0;min-height: 50vh;">
-            <div style="margin: 2.5%; font-weight: 600; white-space: nowrap;">
-              <b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>基础信息
-            </div>
-            <el-form
-              label-position="left"
-              label-width="100px"
-              style="margin: 0 8%"
-              :model="formLabelAlign"
-            >
+          <el-main class="bgborder" style="margin: 0 2.1% 0 0;min-height: 50vh;overflow-x: hidden;">
+            <el-row :gutter="20">
+              <el-col :span="12"><div style="margin: 2.5%; font-weight: 600; white-space: nowrap;"><b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>基础信息</div></el-col>
+              <el-col :span="12" :push="7"><div style="margin: 3%; font-weight: 600; white-space: nowrap;"><el-button size="mini" type="primary" @click="project_modifica(form_query)">修改</el-button></div></el-col>
+            </el-row>
+            <el-form label-position="left" label-width="100px" style="margin: 0 8%" :model="form_query">
               <el-row :gutter="20">
-                <el-col :span="12">
-                  <el-form-item label="项目类型:">
-                    <div class="grid-content bg-purple">1</div>
-                  </el-form-item>
-                </el-col>
-                <el-col :span="12" :push="7">
-                  <el-button
-                    size="mini"
-                    type="primary"
-                    @click="project_modifica(formLabelAlign.describe)"
-                  >修改</el-button>
-                </el-col>
+                <el-col :span="24" style="word-break: break-all;"><el-form-item label="项目类型:">{{ form_query.priorityStr }}</el-form-item></el-col>
               </el-row>
               <el-row :gutter="20">
-                <el-col :span="12">
-                  <el-form-item label="业务线:">
-                    <div class="grid-content bg-purple">1</div>
-                  </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                  <el-form-item label="优先级:">
-                    <div class="grid-content bg-purple">2</div>
-                  </el-form-item>
-                </el-col>
+                <el-col :span="12" style="word-break: break-all;"><el-form-item label="业务线:">{{ form_query.bizStr }}</el-form-item></el-col>
+                <el-col :span="12" style="word-break: break-all;"><el-form-item label="优先级:">{{ form_query.projectTypeStr }}</el-form-item></el-col>
               </el-row>
               <el-row :gutter="20">
-                <el-col :span="12">
-                  <el-form-item label="项目负责人:">
-                    <div class="grid-content bg-purple">1</div>
-                  </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                  <el-form-item label="产品负责人:">
-                    <div class="grid-content bg-purple">2</div>
-                  </el-form-item>
-                </el-col>
+                <el-col :span="12" style="word-break: break-all;"><el-form-item label="项目负责人:">{{ form_query.projectOwner }}</el-form-item></el-col>
+                <el-col :span="12"><el-form-item label="产品负责人:">{{ form_query.pmOwner }}</el-form-item></el-col>
               </el-row>
               <el-row :gutter="20">
-                <el-col :span="12">
-                  <el-form-item label="开发负责人:">
-                    <div class="grid-content bg-purple">1</div>
-                  </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                  <el-form-item label="测试负责人:">
-                    <div class="grid-content bg-purple">2</div>
-                  </el-form-item>
-                </el-col>
+                <el-col :span="12" style="word-break: break-all;"><el-form-item label="开发负责人:">{{ form_query.rdOwner }}</el-form-item></el-col>
+                <el-col :span="12" style="word-break: break-all;"><el-form-item label="测试负责人:">{{ form_query.testOwner }}</el-form-item></el-col>
               </el-row>
               <el-row :gutter="20">
-                <el-col :span="24">
-                  <el-form-item label="项目描述:">
-                    <el-input
-                      v-show="describe"
-                      ref="describe"
-                      v-model="formLabelAlign.describe"
-                      rows="3"
-                      type="textarea"
-                      placeholder="请输入内容"
-                      show-word-limit
-                      @blur="blur_describe(formLabelAlign.describe)"
-                    />
-                    <span v-show="describe1">{{ formLabelAlign.describe }}</span>
-                  </el-form-item>
-                </el-col>
+                <el-col :span="24" style="word-break: break-all;"><el-form-item label="项目描述:">{{ form_query.description }}</el-form-item></el-col>
               </el-row>
             </el-form>
           </el-main>
         </el-container>
       </el-container>
-      <el-header class="bgborder" style="margin: 1%;min-height: 70vh;">
-        <el-tabs tab-position="top" @tab-click="handleClick">
+      <el-header class="bgborder" style="margin: 1%;height: auto;overflow-y: hidden;">
+        <el-tabs tab-position="top">
           <el-tab-pane label="项目总目标" style="position: relative;">
             <div v-show="Addition" class="test">您还没有设定目标请<el-button type="text" @click="ImmediateAddition">立即添加</el-button></div>
             <div v-show="Addition1">
-
-              <el-input ref="textarea" v-model="textarea" rows="10" type="textarea" placeholder="请输入内容" show-word-limit style="margin: 5% 0;" @blur="blur_textarea(textarea)" />
+              <el-col :span="24" :push="21" style="margin-bottom: 1.5%;">
+                <el-button v-show="button_num.btn2" size="mini" type="primary" @click="blur_textarea(form_query.target)">确定</el-button>
+                <el-button v-show="button_num.btn2" size="mini" type="primary" @click="ImmediateAddition">取消</el-button>
+              </el-col>
+              <el-input ref="textarea" v-model="form_query.target" rows="10" type="textarea" placeholder="请输入内容" show-word-limit style="margin: 5% 0;" />
             </div>
             <div v-show="Addition2">
               <el-row :gutter="20">
                 <el-col :span="24" :push="22" style="margin-bottom: 1.5%;">
-                  <el-button size="mini" type="primary" @click="ImmediateAddition">编辑</el-button>
+                  <el-button v-show="button_num.btn1" size="mini" type="primary" @click="ImmediateAddition">编辑</el-button>
                 </el-col>
               </el-row>
-              {{ textarea }}
+              <pre style="white-space:pre-line">{{ form_query.target }}</pre>
             </div>
           </el-tab-pane>
-          <el-tab-pane label="项目里程碑" style="overflow: auto;width: 100%;">
+          <el-tab-pane label="项目里程碑" style="width: 100%;">
             <div>
               <el-divider style="position: absolute;" content-position="right">
                 <el-tooltip class="item" effect="dark" content="温馨提示:点击添加可以新建里程碑" placement="bottom-end">
-                  <el-button style="z-index: 999999;" size="mini" type="primary" icon="el-icon-plus" circle @click="dialogFormVisible = true" />
+                  <el-button style="z-index: 999999;" size="mini" type="primary" icon="el-icon-plus" circle @click="details_projectMilepost" />
                 </el-tooltip>
               </el-divider>
-              <ul class="time-horizontal" style="margin-top:15%;">
+              <ul class="time-horizontal" style="margin-top:21%;">
                 <li v-for="(item, index) in project_Milepost" :key="index">
                   <i>
                     <div>
                       <el-popover class="popover" placement="top" width="200" trigger="click" style="border-radius: 10px;">
                         <p style="text-align: center">
-                          <el-button size="mini">删除</el-button>
-                          <el-button size="mini" type="primary" @click="dialogFormVisible = true">编辑</el-button>
+                          <el-button size="mini" @click="dalete_Milepost = true">删除</el-button>
+                          <el-button size="mini" type="primary" @click="query_date">编辑</el-button>
                         </p>
-                        <b slot="reference">一&nbsp;</b>
+                        <b slot="reference" @click="get_Milepost(item)">一&nbsp;</b>
                       </el-popover>
                     </div>
                   </i>
                   <div>
-                    {{ item.name }}
+                    {{ item.title | ellipsis_title }}
                     <br>
-                    {{ item.date }}
+                    {{ item.mtime }}
                   </div>
-                  <p>{{ item.code }}</p>
+                  <p style="white-space:pre-line">{{ item.description }}</p>
                 </li>
               </ul>
             </div>
@@ -189,33 +134,30 @@
           <div style="margin: 5%; font-weight: 600; white-space: nowrap;">
             <b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>任务筛选
           </div>
-          <div class="aside">全部任务</div>
-          <div class="aside" @click="show2 = !show2">归属需求任务</div>
+          <div class="aside" @click="get_allTask">全部任务</div>
+          <div class="aside" @click="show2 = !show2,AttributionDemand()">归属需求任务</div>
           <transition name="el-zoom-in-top">
             <div v-show="show2" class="transition-box">
-              <el-table :data="tableData" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true" :row-class-name="tableRowClassName">
-                <el-table-column label="需求名称" min-width="100" align="center">
+              <el-table :data="tableData" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true">
+                <el-table-column label="需求名称" min-width="100" align="center" show-overflow-tooltip>
                   <template slot-scope="scope">
-                    <el-tag size="mini" :type="random(scope.row)" effect="dark">{{ scope.row.teamName }}</el-tag>
+                    <span @click="click_name(scope.row.id)">{{ scope.row.name }}</span>
                   </template>
                 </el-table-column>
                 <el-table-column label="PM" min-width="100" align="center" show-overflow-tooltip>
-                  <template slot-scope="scope">{{ scope.row.address }}</template>
+                  <template slot-scope="scope">
+                    <div v-for="item of scope.row.pm" :key="item" @click="click_name(scope.row.id)">{{ item.name }}</div>
+                  </template>
                 </el-table-column>
-                <el-table-column label="状态" min-width="100" align="center">
-                  <template slot-scope="scope">{{ scope.row.teamName }}</template>
+                <el-table-column label="状态" min-width="100" align="center" show-overflow-tooltip>
+                  <template slot-scope="scope" @click="click_name(scope.row.id)">{{ scope.row.status }}</template>
                 </el-table-column>
               </el-table>
             </div>
           </transition>
-          <div class="aside">
+          <div class="aside" @click="NoOwnership()">
             无归属需求任务
-            <el-tooltip
-              class="item"
-              effect="dark"
-              content="点击“无归属需求的任务”,右边任务列表区域展示当前项目下所有无归属需求的任务。"
-              placement="bottom"
-            >
+            <el-tooltip class="item" effect="dark" content="点击“无归属需求的任务”,右边任务列表区域展示当前项目下所有无归属需求的任务。" placement="bottom">
               <i style="color: red;" class="el-icon-warning-outline" />
             </el-tooltip>
           </div>
@@ -225,283 +167,382 @@
             <div style="margin: 2.5%; font-weight: 600; white-space: nowrap;">
               <b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>任务列表
             </div>
-            <el-table
-              :data="tableData"
-              style="width: 100%;"
-              size="mini"
-              :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }"
-              show-overflow-tooltip="true"
-              :row-class-name="tableRowClassName"
-            >
+            <el-table :data="all_task" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true">
               <el-table-column label="任务名称" min-width="100" align="center" show-overflow-tooltip>
-                <template slot-scope="scope">
-                  <el-tag
-                    size="mini"
-                    :type="random(scope.row)"
-                    effect="dark"
-                  >{{ scope.row.teamName }}</el-tag>
-                </template>
+                <template slot-scope="scope">{{ scope.row.name }}</template>
               </el-table-column>
-              <el-table-column label="所属需求" min-width="100" align="center">
-                <template slot-scope="scope">{{ scope.row.address }}</template>
+              <el-table-column label="所属需求" min-width="100" align="center" show-overflow-tooltip>
+                <template slot-scope="scope">{{ scope.row.requireName }}</template>
               </el-table-column>
               <el-table-column label="状态" min-width="100" align="center">
-                <template slot-scope="scope">{{ scope.row.teamName }}</template>
+                <template slot-scope="scope">{{ scope.row.statusString }}</template>
               </el-table-column>
               <el-table-column label="任务健康状态" min-width="100" align="center">
-                <template slot-scope="scope">{{ scope.row.teamName }}</template>
+                <template slot-scope="scope">{{ scope.row.stageString }}</template>
               </el-table-column>
-              <el-table-column label="开发负责人" min-width="100" align="center">
-                <template slot-scope="scope">{{ scope.row.teamName }}</template>
+              <el-table-column label="开发负责人" min-width="100" align="center" show-overflow-tooltip>
+                <template slot-scope="scope">{{ scope.row.rdObject.name }}</template>
               </el-table-column>
-              <el-table-column label="测试负责人" min-width="100" align="center">
-                <template slot-scope="scope">{{ scope.row.teamName }}</template>
+              <el-table-column label="测试负责人" min-width="100" align="center" show-overflow-tooltip>
+                <template slot-scope="scope">{{ scope.row.qaObject.name }}</template>
               </el-table-column>
               <el-table-column label="任务进度" min-width="100" align="center">
-                <template slot-scope="scope">{{ scope.row.teamName }}</template>
+                <template slot-scope="scope"><el-progress :percentage="scope.row.rate" color="#409eff" /></template>
               </el-table-column>
             </el-table>
             <div style="marign-top:3%;display:flex;align-items: center;justify-content: flex-end;">
-              <el-pagination
-                background
-                :current-page="currentPage"
-                :page-sizes="[15, 20, 25, 30]"
-                :page-size="100"
-                layout="total, prev, pager, next, jumper"
-                :total="100"
-                @size-change="handleSizeChange"
-                @current-change="handleCurrentChange"
-              />
+              <el-pagination background :page-sizes="[15, 20, 25, 30]" :page-size="100" layout="total, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
             </div>
           </el-main>
         </el-container>
       </el-container>
     </el-container>
-    <el-dialog :visible.sync="dialogFormVisible" class="dialog">
+    <el-dialog :visible.sync="dialogFormVisible" class="dialog" @close="close_dialog">
       <div style="margin:0 0 2% 3%; font-weight: 600; white-space: nowrap;font-size: 20px;">
-        <b style="color: #409EFF;margin: 0 0.5%;">I</b>编辑里程碑
+        <b style="color: #409EFF;margin: 0 0.5%;">I</b>{{ title_name }}
       </div>
-      <el-form :model="form" label-position="right">
-        <el-form-item label="标题" :label-width="formLabelWidth1">
-          <el-input v-model="form.name" autocomplete="off" placeholder="请输入标题" />
+      <el-form ref="form" :model="form" :rules="formRules" :label-width="formLabelWidth1" label-position="right">
+        <el-form-item label="标题" prop="title">
+          <el-input v-model="form.title" autocomplete="off" placeholder="请输入标题" />
         </el-form-item>
-        <el-form-item label="时间" :label-width="formLabelWidth1">
-          <el-date-picker v-model="form.date" type="date" placeholder="请选择日期" />
+        <el-form-item label="时间" prop="mtime">
+          <el-date-picker v-model="form.mtime" type="date" format="yyyy 年 MM 月 dd 日" placeholder="请选择日期" />
         </el-form-item>
-        <el-form-item label="详情" :label-width="formLabelWidth1">
-          <el-input
-            v-model="textarea"
-            rows="3"
-            maxlength="200"
-            type="textarea"
-            placeholder="请输入详情内容,详情内容不可超过200字符"
-            show-word-limit
-          />
+        <el-form-item label="详情">
+          <el-input v-model="form.description" rows="3" maxlength="200" type="textarea" placeholder="请输入详情内容,详情内容不可超过200字符" show-word-limit />
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false">取 消</el-button>
-        <el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
+        <el-button @click="dialogFormVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="Milepost_Submission(form)">提 交</el-button>
       </div>
     </el-dialog>
-    <el-dialog title="新建项目" :visible.sync="dialog_FormVisible" width="70%">
-      <el-form :model="form" label-position="left" style="margin: 0 3%;">
-        <el-form-item label="项目名称" :label-width="formLabelWidth">
-          <el-input v-model="form.name" autocomplete="off" placeholder="请输入项目名称" />
+    <el-dialog title="修改项目" :visible.sync="modify_project" width="70%">
+      <el-form ref="project_from" :model="project_from" :rules="rules_form" :label-width="formLabelWidth" label-position="left" style="margin: 0 3%;">
+        <el-form-item label="项目名称" prop="name">
+          <el-input v-model="project_from.name" autocomplete="off" placeholder="请输入项目名称" />
         </el-form-item>
         <div style="display: flex;">
           <div style="flex; 1;">
-            <el-form-item label="项目类型" :label-width="formLabelWidth">
-              <el-select v-model="form.value" clearable placeholder="业务/产品" style="width: 100%">
-                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="项目类型" prop="bizType">
+              <el-select v-model="project_from.bizType" clearable placeholder="业务/产品" style="width: 100%">
+                <el-option v-for="item in arr_prjectType" :key="item.value" :label="item.name" :value="item.value" />
               </el-select>
             </el-form-item>
-            <el-form-item label="业务线" :label-width="formLabelWidth">
-              <el-select v-model="form.value" clearable placeholder="请选择" style="width:20vw">
-                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="业务线" prop="bizId">
+              <el-select v-model="project_from.bizId" clearable placeholder="请选择" style="width:20vw">
+                <el-option v-for="item in all_bizId" :key="item.id" :label="item.bizName" :value="item.id" />
               </el-select>
             </el-form-item>
-            <el-form-item label="产品负责人" :label-width="formLabelWidth">
-              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="产品负责人">
+              <el-select v-model="project_from.pmOwner" filterable remote reserve-keyword placeholder="请输入姓名或邮箱前缀" :remote-method="remoteMethod" :loading="loading" style="width: 100%">
+                <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+                  <span style="float: left">{{ item.name }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+                </el-option>
               </el-select>
             </el-form-item>
-            <el-form-item label="测试负责人" :label-width="formLabelWidth">
-              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="测试负责人">
+              <el-select v-model="project_from.testOwner" filterable remote reserve-keyword placeholder="请输入姓名或邮箱前缀" :remote-method="remoteMethod" :loading="loading" style="width: 100%">
+                <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+                  <span style="float: left">{{ item.name }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+                </el-option>
               </el-select>
             </el-form-item>
           </div>
           <div style="flex; 1; margin: 0 0 0 auto;">
-            <el-form-item label="优先级" :label-width="formLabelWidth">
-              <el-select v-model="form.value" clearable placeholder="请选择" style="width:20vw">
-                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="优先级" prop="priority">
+              <el-select v-model="project_from.priority" clearable placeholder="请选择" style="width:20vw">
+                <el-option v-for="item in arr_priority" :key="item.value" :label="item.name" :value="item.value" />
               </el-select>
             </el-form-item>
-            <el-form-item label="项目负责人" :label-width="formLabelWidth">
-              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="项目负责人" prop="projectOwner">
+              <el-select v-model="project_from.projectOwner" filterable remote reserve-keyword placeholder="请输入姓名或邮箱前缀" :remote-method="remoteMethod" :loading="loading" style="width: 100%">
+                <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+                  <span style="float: left">{{ item.name }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+                </el-option>
               </el-select>
             </el-form-item>
-            <el-form-item label="开发负责人" :label-width="formLabelWidth">
-              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+            <el-form-item label="开发负责人">
+              <el-select v-model="project_from.rdOwner" filterable remote reserve-keyword placeholder="请输入姓名或邮箱前缀" :remote-method="remoteMethod" :loading="loading" style="width: 100%">
+                <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+                  <span style="float: left">{{ item.name }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+                </el-option>
               </el-select>
             </el-form-item>
           </div>
         </div>
-        <el-form-item label="项目描述" :label-width="formLabelWidth">
-          <el-input v-model="form.textarea" type="textarea" placeholder="请输入" show-word-limit />
+        <el-form-item label="项目描述">
+          <el-input v-model="project_from.description" type="textarea" placeholder="请输入" show-word-limit />
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button @click="dialog_FormVisible = false">取 消</el-button>
-        <el-button type="primary" @click="dialog_FormVisible = false">创 建</el-button>
+        <el-button @click="modify_project = false">关 闭</el-button>
+        <el-button type="primary" @click="modifyProject(project_from)">保 存</el-button>
       </div>
     </el-dialog>
+    <!-- 删除 -->
     <el-dialog :visible.sync="centerDialogVisible" width="30%" center>
-      <div align="center">确定要删除此项目吗?</div>
-      <spn slot="footer" class="dialog-footer">
-        <el-button @click="centerDialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="centerDialogVisible = false">确 定</el-button>
-      </spn>
+      <div align="center">确定要删除此 {{ form_query.name }} 项目吗?</div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="centerDialogVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="delete_project()">确 定</el-button>
+      </span>
     </el-dialog>
+    <el-dialog :visible.sync="dalete_Milepost" width="30%" center>
+      <div align="center">确定要删除 {{ get_Milepost_data.title }} 项目吗?</div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dalete_Milepost = false">关 闭</el-button>
+        <el-button type="primary" @click="select_Milepost">确 定</el-button>
+      </span>
+    </el-dialog>
+    <!-- 弹窗 -->
+    <openDialog v-if="dialog_open" ref="task_createdUpdata" />
   </div>
 </template>
 
 <script>
+import { projectList, memberQueryMemberInfoByIDAPorName, projectUpdate, mileStoneList, projectBizList, mileStoneCreate, mileStoneUpdate, mileStoneDelete, projectDelete, taskList, requirementQueryRequirementInfoList } from '@/api/projectIndex'
+import openDialog from '@/views/projectManage/dialog_vue'
 export default {
+  components: {
+    openDialog
+  },
+  filters: {
+    ellipsis(value) {
+      if (!value) return ''
+      if (value.length > 20) {
+        return value.slice(0, 20) + '...'
+      }
+      return value
+    },
+    ellipsis_title(value) {
+      if (!value) return ''
+      if (value.length > 10) {
+        return value.slice(0, 10) + '...'
+      }
+      return value
+    }
+  },
   data() {
+    var validatePass = (rule, value, callback) => {
+      if (value === undefined || value === '') {
+        callback(new Error('标题不能为空'))
+      } else {
+        if (this.form.title !== '') {
+          this.project_Milepost.map(item => {
+            if (item.title === this.form.title) { callback(new Error('该里程碑标题已存在,请重新设置')) } else { this.$refs.form.validateField('checkPass') }
+          })
+        }
+        callback()
+      }
+    }
+    var validate = (rule, value, callback) => {
+      console.log(value, 'o')
+      if (value === undefined || value === '') {
+        callback(new Error('时间不能为空'))
+      } else {
+        if (this.form.mtime !== '') {
+          this.project_Milepost.map(item => {
+            console.log(item.mtime, 'j')
+            if (item.mtime === this.form.mtime) { callback(new Error('该日期已设置其他里程碑')) } else { this.$refs.form.validateField('checkPass') }
+          })
+        }
+        callback()
+      }
+    }
     return {
+      loading: false,
+      dialog_open: false,
+      options: [],
+      test: [],
+      button_num: {}, // 项目总目标(编辑啊)
+      formRules: {
+        title: [{ required: true, validator: validatePass, trigger: 'blur' }],
+        mtime: [{ required: true, validator: validate, trigger: 'blur' }]
+      },
+      rules_form: {
+        name: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
+        bizType: [{ required: true, message: '项目类型不能为空', trigger: 'blur' }],
+        bizId: [{ required: true, message: '业务线不能为空', trigger: 'blur' }],
+        priority: [{ required: true, message: '优先级不能为空', trigger: 'blur' }],
+        projectOwner: [{ required: true, message: '项目负责人不能为空', trigger: 'blur' }]
+      },
+      arr_status: [{ value: 0, name: '未开始' }, { value: 1, name: '进行中' }, { value: 2, name: '已完成' }],
+      arr_priority: [{ value: 0, name: 'p0' }, { value: 1, name: 'p1' }, { value: 2, name: 'p2' }, { value: 3, name: 'p3' }, { value: 4, name: 'p4' }, { value: 5, name: 'p5' }, { value: 6, name: 'p6' }],
+      arr_prjectType: [{ value: 0, name: '业务/产品' }, { value: 1, name: '技术升级/技术优化/技术FT' }, { value: 2, name: '测试优化/测试FT' }],
+      userInformation: localStorage.getItem('username'),
+      userNames: localStorage.getItem('realname'),
       Addition: false,
       Addition1: false,
       Addition2: false,
+      dalete_Milepost: false, // 里程碑dialog(删除)
       textarea: '', // 项目总目标
+      project_from: {}, // 修改项目
+      all_bizId: [], // 业务线
+      projectId: '', // 项目id
+      all_task: [], // 全部任务数据
+      form_query: {},
+      curIndex: 1,
+      pageSize: 15,
       total: 0,
       tableData: [],
-      formLabelAlign: {
-        describe: ''
-      },
-      show2: true,
-      describe: false,
-      describe1: false,
+      show2: false,
+      modify_project: false,
       dialogFormVisible: false,
-      dialog_FormVisible: false,
       centerDialogVisible: false,
       formLabelWidth: '120px',
-      form: {
-        name: '',
-        region: '',
-        date1: '',
-        date2: '',
-        delivery: false,
-        type: [],
-        resource: '',
-        desc: ''
-      },
+      form: {},
+      title_name: '', // 里程碑title
       formLabelWidth1: '60px',
-      project_Milepost: [
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        }
-      ]
+      project_Milepost: [],
+      get_Milepost_data: {} // 点击原点数据
     }
   },
   created() {
     this.get_list()
   },
   methods: {
-    get_list() {
-      if (this.textarea === '') {
-        this.Addition = true
-      } else {
-        this.Addition2 = true
-      }
-      if (this.formLabelAlign.describe !== '') {
-        this.describe1 = true
-      } else {
-        this.describe = false
+    test2(item, e) { // 获取团队人员信息
+      if (typeof this.test[item.idap] === 'undefined') {
+        item.role = e
+        this.test[item.idap] = item
       }
+      return item.idap
+    },
+    get_list() { // 获取项目ID(查询)
+      this.textarea === '' ? this.Addition = true : this.Addition2 = true
+      var url = window.location.href // 获取url中"?"符后的字串
+      this.projectId = url.split('?id=')
+      projectList({ id: Number(this.projectId[1]), curIndex: 1, pageSize: 15 }).then(res => {
+        this.form_query = res.data[0]
+        this.project_from = res.data[0]
+        if (this.form_query.target !== null) {
+          this.Addition1 = false
+          this.Addition = false
+          this.Addition2 = true
+          this.button_num.btn1 = true
+          this.button_num.btn2 = false
+        } else {
+          this.button_num.btn1 = false
+          this.button_num.btn2 = true
+          this.Addition1 = false
+          this.Addition2 = false
+          this.Addition = true
+        }
+        this.form_query.status === 0 ? this.$set(this.form_query, 'statusString', '未开始') : ''
+        this.form_query.status === 1 ? this.$set(this.form_query, 'statusString', '进行中') : ''
+        this.form_query.status === 2 ? this.$set(this.form_query, 'statusString', '已完成') : ''
+      })
+      projectBizList({}).then(res => {
+        this.all_bizId = res.data
+      })
+      mileStoneList({ projectId: this.projectId[1] }).then(res => {
+        this.project_Milepost = res.data
+      })
+    },
+    delete_project() {
+      projectDelete(this.form_query.id, {}).then(res => {
+        this.centerDialogVisible = false
+        this.$router.push({ name: '项目', query: {}})
+      })
+    },
+    click_name(e) { // 需求下任务
+      taskList({ requireId: e, curIndex: this.curIndex, pageSize: this.pageSize }).then(res => {
+        this.all_task = res.data
+        this.total = res.total
+      })
     },
     project_modifica(e) {
-      this.dialog_FormVisible = true
-      // this.describe = true
-      // this.describe1 = false
-      // this.$set(this.formLabelAlign, 'describe', e)
-      // setTimeout(() => {
-      //   this.$refs.describe.focus()
-      // }, 100)
+      this.modify_project = true
+    },
+    close_dialog() { // 关闭弹窗
+      this.get_list()
+    },
+    get_Milepost(e) { // 点击原点
+      this.get_Milepost_data = e
     },
-    blur_describe(e) {
-      this.describe = false
-      this.describe1 = true
-      this.$set(this.formLabelAlign, 'describe', e)
+    query_date() { // 编辑里程碑
+      this.title_name = '编辑里程碑'
+      this.dialogFormVisible = true
+      this.form = this.get_Milepost_data
     },
-    click_b() {
-      console.log('v')
+    details_projectMilepost() { // 创建里程碑
+      this.title_name = '创建里程碑'
+      this.form = {}
+      this.dialogFormVisible = true
+      this.$nextTick(() => {
+        this.$refs['form'].clearValidate()
+      })
     },
-    handleClick(tab, event) {
-      console.log(tab, event)
+    select_Milepost() { // 删除里程碑
+      mileStoneDelete(this.get_Milepost_data.id, {}).then(res => {
+        this.dalete_Milepost = false
+        this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+        this.get_list()
+      })
     },
-    tableRowClassName({ row, rowIndex }) {
-      if (rowIndex === 1) {
-        return 'warning-row'
-      } else if (rowIndex === 3) {
-        return 'success-row'
+    Milepost_Submission(e) { // 里程碑(提交)
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          var milestone = e
+          milestone.projectId = this.projectId[1]
+          var user = { name: this.userNames, ename: this.userInformation, id: '' }
+          if (this.title_name === '创建里程碑') {
+            mileStoneCreate({ milestone, user }).then(res => {
+              this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+              this.dialogFormVisible = false
+            })
+          } else if (this.title_name === '编辑里程碑') {
+            mileStoneUpdate({ milestone, user }).then(res => {
+              this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+              this.dialogFormVisible = false
+            })
+          }
+          this.get_list()
+        }
+      })
+    },
+    modifyProject(e) { // 修改(提交)
+      this.$refs['project_from'].validate((valid) => {
+        if (valid) {
+          var projectInfo = e
+          var user = { name: this.userNames, ename: this.userInformation, id: '' }
+          projectUpdate({ projectInfo, user }).then(res => {
+            if (res.code === 200) {
+              this.modify_project = false
+              this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+            }
+          })
+        }
+      })
+    },
+    remoteMethod(query) { // 人员查询
+      if (query !== '') {
+        this.loading = true
+        setTimeout(() => {
+          this.loading = false
+          memberQueryMemberInfoByIDAPorName({ memberIDAP: query }).then(res => {
+            this.options = res.data
+          })
+        }, 200)
+      } else {
+        this.options = []
       }
-      return ''
+    },
+    handleCommand(command) { // 修改状态
+      this.$set(this.form_query, 'statusString', command.label)
+      this.project_from.status = command.value
+      var projectInfo = this.project_from
+      var user = { name: this.userNames, ename: this.userInformation, id: '' }
+      projectUpdate({ projectInfo, user }).then(res => {
+        if (res.code === 200) {
+          this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+        }
+      })
     },
 
     ImmediateAddition() { // 立即添加(编辑)
@@ -509,26 +550,58 @@ export default {
       this.Addition = false
       this.Addition1 = true
       this.Addition2 = false
+      this.button_num.btn1 = false
+      this.button_num.btn2 = true
     },
     blur_textarea(e) { // 项目总目标失去焦点
       if (e !== '') {
-        this.textarea = e
+        this.form_query.target = e
         this.Addition2 = true
         this.Addition1 = false
         this.Addition = false
+        this.button_num.btn1 = true
+        this.button_num.btn2 = false
       } else {
+        this.button_num.btn1 = false
+        this.button_num.btn2 = true
         this.Addition2 = false
         this.Addition1 = false
         this.Addition = true
       }
+      var projectInfo = this.form_query
+      var user = { name: this.userNames, ename: this.userInformation, id: '' }
+      projectUpdate({ projectInfo, user }).then(res => {
+        if (res.code === 200) {
+          this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+        }
+      })
+    },
+    get_allTask() { // 获取全部任务
+      taskList({ projectId: Number(this.projectId[1]), curIndex: this.curIndex, pageSize: this.pageSize }).then(res => {
+        this.all_task = res.data
+        this.total = res.total
+      })
+    },
+    NoOwnership() {
+      taskList({ projectId: Number(this.projectId[1]), noRequire: true, curIndex: this.curIndex, pageSize: this.pageSize }).then(res => {
+        this.all_task = res.data
+        this.total = res.total
+      })
+    },
+    AttributionDemand() { // 归属需求任务
+      requirementQueryRequirementInfoList({ projectId: Number(this.projectId[1]), curIndex: this.curIndex, pageSize: this.pageSize }).then(res => {
+        this.tableData = res.data.list
+      })
+    },
+    reated_task(e) { // 建任务
+      this.dialog_open = true
+      this.$nextTick(() => { this.$refs.task_createdUpdata.init(2) })
     },
     handleSizeChange(size) { //  分页
       this.pageSize = size
-      // this.get_list()
     },
     handleCurrentChange(curIndex) { //  分页
       this.curIndex = curIndex
-      // this.get_list()
     }
   }
 }
@@ -644,4 +717,10 @@ export default {
   position: absolute !important;
   margin: 0 !important;
 }
+
+.bgborder .el-table .el-table__body tr:hover td { /*hover时字体, 背景颜色*/
+  color: #409EFF;
+  background: #EEF0F5;
+  cursor: pointer;
+  }
 </style>

+ 190 - 221
src/views/projectManage/taskList/taskIndex.vue

@@ -2,77 +2,86 @@
   <div style="background-color:#F2F3F6;display:flex;align-items: center;justify-content: center;">
     <el-container>
       <el-header class="bgborder" style=" margin: 1%;display:flex;align-items: center;justify-content: space-between;">
-        <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.task_all }}<i class="el-icon-arrow-down el-icon--right" /></span>
-          <el-dropdown-menu slot="dropdown" align="center">
-            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{ value: item.value, label: item.label, flag: 1 }">{{ item.label }}</el-dropdown-item>
-          </el-dropdown-menu>
-        </el-dropdown>
-        <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.task_name }}<i class="el-icon-arrow-down el-icon--right" /></span>
+        <el-select v-model="form_task.name_label" filterable remote reserve-keyword placeholder="任务名称" :loading="loading" size="mini">
+          <el-option v-for="item in arr_taskName" :key="item.id" :label="item.name" :value="item.id">
+            <span style="float: left">{{ item.name }}</span>
+            <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.id }}</span>
+          </el-option>
+        </el-select>
+        <!-- <el-dropdown @command="handleCommand">
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.name_label }}<i class="el-icon-arrow-down el-icon--right" /></span>
           <el-dropdown-menu slot="dropdown" align="center">
-            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{ value: item.value, label: item.label, flag: 2 }">{{ item.label }}</el-dropdown-item>
+            <el-dropdown-item v-for="item in arr_taskName" :key="item.value" :command="{ value: item.code, label: item.name, flag: 2 }">{{ item.name }}</el-dropdown-item>
           </el-dropdown-menu>
-        </el-dropdown>
+        </el-dropdown> -->
         <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.task_project }}<i class="el-icon-arrow-down el-icon--right" /></span>
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.project_label }}<i class="el-icon-arrow-down el-icon--right" /></span>
           <el-dropdown-menu slot="dropdown" align="center">
-            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{ value: item.value, label: item.label, flag: 3 }">{{ item.label }}</el-dropdown-item>
+            <el-dropdown-item v-for="item in projectList" :key="item.value" :command="{ value: item.id, label: item.name, flag: 3 }">{{ item.name }}</el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
         <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.task_demand }}<i class="el-icon-arrow-down el-icon--right" /></span>
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.demand_label }}<i class="el-icon-arrow-down el-icon--right" /></span>
           <el-dropdown-menu slot="dropdown" align="center">
-            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{ value: item.value, label: item.label, flag: 4 }">{{ item.label }}</el-dropdown-item>
+            <el-dropdown-item v-for="item in demandList" :key="item.value" :command="{ value: item.id, label: item.name, flag: 4 }">{{ item.name }}</el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
-        <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.task_ExemptionTest }}<i class="el-icon-arrow-down el-icon--right" /></span>
+        <el-dropdown @command="handleCommand"> <!--是否免测-->
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.noTest_label }}<i class="el-icon-arrow-down el-icon--right" /></span>
           <el-dropdown-menu slot="dropdown" align="center">
-            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{ value: item.value, label: item.label, flag: 8 }">{{ item.label }}</el-dropdown-item>
+            <el-dropdown-item v-for="item in noTest" :key="item.code" :command="{ value: item.code, label: item.msg, flag: 8 }">{{ item.msg }}</el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
-        <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.task_bizId }}<i class="el-icon-arrow-down el-icon--right" /></span>
+        <el-dropdown @command="handleCommand"> <!--业务线-->
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.bizId_label }}<i class="el-icon-arrow-down el-icon--right" /></span>
           <el-dropdown-menu slot="dropdown" align="center">
-            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{ value: item.value, label: item.label, flag: 5 }">{{ item.label }}</el-dropdown-item>
+            <el-dropdown-item v-for="item in BusinessLine" :key="item.value" :command="{ value: item.code, label: item.name, flag: 5 }">{{ item.name }}</el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
         <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.task_platform }}<i class="el-icon-arrow-down el-icon--right" /></span>
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.platform_label }}<i class="el-icon-arrow-down el-icon--right" /></span>
           <el-dropdown-menu slot="dropdown" align="center">
-            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{ value: item.value, label: item.label, flag: 6 }">{{ item.label }}</el-dropdown-item>
+            <el-dropdown-item v-for="item in arr_platform" :key="item.value" :command="{ value: item.code, label: item.name, flag: 6 }">{{ item.name }}</el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
         <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.task_Modular }}<i class="el-icon-arrow-down el-icon--right" /></span>
+          <span class="el-dropdown-link drop_down" style="cursor: pointer;">{{ form_task.Modular_label }}<i class="el-icon-arrow-down el-icon--right" /></span>
           <el-dropdown-menu slot="dropdown" align="center">
-            <el-dropdown-item v-for="item in all_city_list" :key="item.value" :command="{ value: item.value, label: item.label, flag: 7 }">{{ item.label }}</el-dropdown-item>
+            <el-dropdown-item v-for="item in arr_Modular" :key="item.value" :command="{ value: item.code, label: item.name, flag: 7 }"><span style="max-height:300px;">{{ item.name }}</span></el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
-        <el-select v-model="form_task.task_PersonInCharge" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" size="mini" placeholder="负责人">
-          <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+        <el-select v-model="form_task.PersonInCharge" filterable remote reserve-keyword placeholder="负责人" :remote-method="remoteMethod" :loading="loading" size="mini">
+          <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+            <span style="float: left">{{ item.name }}</span>
+            <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+          </el-option>
         </el-select>
-        <el-select v-model="form_task.task_Participant" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" size="mini" placeholder="参与人">
-          <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+        <el-select v-model="form_task.Participant" filterable remote reserve-keyword placeholder="参与人" :remote-method="remoteMethod" :loading="loading" size="mini">
+          <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+            <span style="float: left">{{ item.name }}</span>
+            <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+          </el-option>
         </el-select>
-        <el-select v-model="form_task.task_Founder" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" size="mini" placeholder="创建人">
-          <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+        <el-select v-model="form_task.creater" filterable remote reserve-keyword placeholder="创建人" :remote-method="remoteMethod" :loading="loading" size="mini">
+          <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+            <span style="float: left">{{ item.name }}</span>
+            <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+          </el-option>
         </el-select>
         <el-button type="primary" size="mini" style="float: right" @click="get_taskList(form_task)">查询</el-button>
         <el-button size="mini" style="float: right;" @click="query_Reset">重置</el-button>
       </el-header>
 
-      <el-main class="bgborder" style=" margin: 0 1%;min-height: 79.5vh;padding:0 !important">
-        <div style="margin: 1.5%; font-weight: 600; white-space: nowrap;"><b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>任务列表 <el-button type="primary" size="mini" icon="el-icon-plus" style="float: right;" @click="dialogFormVisible = true">新建</el-button></div>
-        <el-table :data="task_table" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true" :row-class-name="tableRowClassName">
+      <el-main class="bgborder" style=" margin: 0 1% 1%;min-height: 86vh;padding:0 !important">
+        <div style="margin: 1.5%; font-weight: 600; white-space: nowrap;"><b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>任务列表 <el-button type="primary" size="mini" icon="el-icon-plus" style="float: right;" @click="open_created">新建</el-button></div>
+        <el-table v-loading="table_loading" :data="task_table" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true">
           <el-table-column label="任务名称" min-width="200" align="center" show-overflow-tooltip>
-            <template slot-scope="scope"><span @click="link_project">{{ scope.row.name }}</span></template>
+            <template slot-scope="scope"><span style="cursor: pointer;" @click="link_task(scope.row.id)">{{ scope.row.name }}</span></template>
           </el-table-column>
-          <el-table-column label="归属项目" min-width="100" align="center">
+          <el-table-column label="归属项目" min-width="100" align="center" show-overflow-tooltip>
             <template slot-scope="scope">{{ scope.row.ProjectName }}</template>
           </el-table-column>
-          <el-table-column label="归属需求" min-width="100" align="center">
+          <el-table-column label="归属需求" min-width="100" align="center" show-overflow-tooltip>
             <template slot-scope="scope">{{ scope.row.requireName }}</template>
           </el-table-column>
           <el-table-column label="业务线" min-width="100" align="center">
@@ -81,7 +90,7 @@
           <el-table-column label="平台" min-width="100" align="center">
             <template slot-scope="scope">{{ scope.row.typeString }}</template>
           </el-table-column>
-          <el-table-column label="模块" min-width="100" align="center">
+          <el-table-column label="模块" min-width="100" align="center" show-overflow-tooltip>
             <template slot-scope="scope">{{ scope.row.clientTypeString }}</template>
           </el-table-column>
           <el-table-column label="是否免测" min-width="80" align="center">
@@ -103,243 +112,205 @@
             <template slot-scope="scope">{{ scope.row.createTime }}</template>
           </el-table-column>
         </el-table>
+        <div align="right">
+          <el-pagination background :current-page="currentPage" :page-sizes="[15]" :page-size="15" layout="total, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+        </div>
       </el-main>
-      <el-footer class="footer" style="display:flex;align-items: center;justify-content: flex-end;">
-        <el-pagination background :current-page="currentPage" :page-sizes="[15, 20, 25, 30]" :page-size="100" layout="total, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
-      </el-footer>
     </el-container>
-    <el-dialog title="新建任务" :visible.sync="dialogFormVisible" width="70%">
-      <el-form :model="task_form" :rules="task_rulesForm" label-position="right" style="margin: 0 3%;" label-width="120px">
-        <el-form-item label="任务名称" prop="name" style="width: 100%">
-          <el-input v-model="task_form.name" autocomplete="off" placeholder="请输入任务名称" />
-        </el-form-item>
-        <div style="display:flex;align-items: center;justify-content: space-between;">
-          <div>
-            <el-form-item label="直接归属" prop="source">
-              <el-checkbox-group v-model="task_form.source">
-                <el-checkbox label="不归属" name="0"> 不归属</el-checkbox>
-                <el-checkbox label="需求" name="1" />
-                <el-checkbox label="项目" name="2" />
-              </el-checkbox-group>
-            </el-form-item>
-            <el-form-item label="业务/平台/模块">
-              <el-select v-model="task_form.clientType" clearable placeholder="请选择" style="width: 20vw">
-                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="开发负责人">
-              <el-select v-model="task_form.rdOwner" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </el-form-item>
-          </div>
-          <div>
-            <el-form-item label="归属需求">
-              <el-select v-model="task_form.requireId" clearable placeholder="请选择" style="width:20vw">
-                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="是否免测">
-              <el-checkbox-group v-model="task_form.checkList">
-                <el-checkbox label="否" name="type" />
-                <el-checkbox label="是" name="type" />
-              </el-checkbox-group>
-            </el-form-item>
-            <el-form-item label="测试负责人">
-              <el-select v-model="task_form.qaOwner" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </el-form-item>
-          </div>
-        </div>
-        <el-form-item label="技术文档链接">
-          <el-input v-model="task_form.devUrl" placeholder="请粘贴链接" />
-        </el-form-item>
-        <div style="display:flex;align-items: center;justify-content: space-between;">
-          <el-form-item label="是否跟版">
-            <el-checkbox-group v-model="task_form.followVersion" style="width: 20vw;">
-              <el-checkbox label="否" name="1" />
-              <el-checkbox label="是" name="0" />
-            </el-checkbox-group>
-          </el-form-item>
-          <el-form-item label="涉及的客户端">
-            <el-select v-model="task_form.involveApp" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请选择 多选" style="width: 20vw">
-              <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
-            </el-select>
-          </el-form-item>
-        </div>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false">取 消</el-button>
-        <el-button type="primary" @click="dialogFormVisible = false">创 建</el-button>
-      </div>
-    </el-dialog>
+    <!-- 弹窗 -->
+    <openDialog v-if="dialog_open" ref="task_createdUpdata" />
   </div>
 </template>
 
 <script>
-import { taskList } from '@/api/taskIndex' // ajax
-
+import { taskList, configShowTaskEnum, settingGetTypeMap, memberQueryMemberInfoByIDAPorName, requirementQueryRequirementInfoList, taskIdAndName, projectList } from '@/api/taskIndex' // ajax
+import openDialog from '@/views/projectManage/dialog_vue'
 export default {
+  components: {
+    openDialog
+  },
   data() {
     return {
+      dialog_open: false,
       curIndex: 1,
       pageSize: 15,
       options: [],
-      value1: [],
       list: [],
-      task_form: {
-        type: [],
-        source: []
-      },
-      task_rulesForm: {
-        name: [{ required: true, message: '请输入任务名称', trigger: 'blur' }],
-        source: [{ required: true, message: '请输入任务名称', trigger: 'blur' }]
-      },
+      userInformation: localStorage.getItem('username'),
+      userNames: localStorage.getItem('realname'),
+      form_task_number: {},
       form_task: {
-        task_all: '全部',
-        task_name: '任务名称',
-        task_project: '归属项目',
-        task_demand: '归属需求',
-        task_ExemptionTest: '是否免测',
-        task_PersonInCharge: '负责人',
-        task_bizId: '业务线',
-        task_platform: '平台',
-        task_Modular: '模块',
-        task_Participant: '参与人',
-        task_Founder: '创建人'
+        name_label: '任务名称',
+        project_label: '归属项目',
+        demand_label: '归属需求',
+        noTest_label: '是否免测',
+        PersonInCharge: '',
+        bizId_label: '业务线',
+        platform_label: '平台',
+        Modular_label: '模块',
+        Participant: ''
 
       },
-      loading: false,
+      noTest: [], // 是否免测
+      BusinessLine: [], // 业务线
+      appClient: [], // 涉及业务线
+      arr_platform: [], // 平台数据
+      arr_Modular: [], // 模块数据‘
+      arr_taskName: [], // 任务名称数据
+      projectList: [], // 归属项目数据
+      demandList: [], // 需求list
       dialogFormVisible: false,
       currentPage: 0,
-      tableData: [{
-        value: '2016-05-02',
-        address: '王小虎',
-        teamName: '金沙江路 1518 弄'
-      }],
-      options1: [{
-        teamName: '选项1',
-        label: '黄金糕'
-      }, {
-        teamName: '选项2',
-        label: '双皮奶'
-      }, {
-        teamName: '选项3',
-        label: '蚵仔煎'
-      }, {
-        value: '选项4',
-        label: '龙须面'
-      }, {
-        value: '选项5',
-        label: '北京烤系三星那些闹事你辛苦啦斯诺克选手内心鸭'
-      }],
-      value: '',
       total: 0,
+      loading: false,
+      table_loading: false,
+      test: {},
       task_table: [],
-      all_city_list: [{ value: 1, label: '秦志鹏' }, { value: 2, label: '汝瑞' }, { value: 3, label: '赵杰' }]
+      form: {},
+      arry: []
     }
   },
   created() {
     this.get_taskList()
+    this.get_taskSelect()
   },
   methods: {
-    get_taskList() {
-      var task = {
-        pageSize: 15,
-        curIndex: 1,
-        creater: 'qinzhipeng_v',
-        bizId: 100
+    test2(item, e) { // 获取团队人员信息
+      if (typeof this.test[item.idap] === 'undefined') {
+        item.role = e
+        this.test[item.idap] = item
+      }
+      return item.idap
+    },
+    get_taskList(e) { // 查询
+      this.table_loading = true
+      var task = { pageSize: 15, curIndex: 1 }
+      if (e !== undefined) {
+        task = this.form_task_number
+        task.pageSize = this.pageSize
+        task.curIndex = this.curIndex
       }
       taskList(task).then(res => {
         this.task_table = res.data
         this.total = res.total
+        this.table_loading = false
+      })
+      projectList({ curIndex: 1, pageSize: 15 }).then(res => { // 获取项目(查询)
+        this.projectList = res.data
+      })
+      requirementQueryRequirementInfoList({ curIndex: 1, pageSize: 15 }).then(res => { // 获取需求(查询)
+        this.demandList = res.data.list
+      })
+    },
+    remoteMethod(query) { // 人员查询
+      if (query !== '') {
+        this.loading = true
+        setTimeout(() => {
+          this.loading = false
+          memberQueryMemberInfoByIDAPorName({ memberIDAP: query }).then(res => {
+            this.options = res.data
+          })
+        }, 200)
+      } else {
+        this.options = []
+      }
+    },
+    team_dates(e) { // 改变成员
+      this.form.arry = []
+      for (const i in e) {
+        this.form.arry.push(this.test[e[i]])
+      }
+      this.arry = this.form.arry.map(item => {
+        return { memberIDAP: item.idap, department: item.deptid, role: 0 }
       })
     },
+    open_created() { // 打开弹窗
+      this.dialog_open = true
+      this.$nextTick(() => { this.$refs.task_createdUpdata.init(1) })
+    },
     handleCommand(command) {
-      console.log(command)
-      var isCommand = ''
       switch (command.flag) {
-        case 1: // 全部
-          this.form_task.task_all = command.label
-          isCommand = command.label.value
-          break
         case 2:
-          this.form_task.task_name = command.label
-          isCommand = command.label.value
+          this.form_task.name_label = command.label
+          this.form_task_number.name = command.value
           break
         case 3:
-          this.form_task.task_project = command.label
-          isCommand = command.label.value
+          this.form_task.project_label = command.label
+          this.form_task_number.project = command.value
+          requirementQueryRequirementInfoList({ id: this.form_task_number.project, curIndex: 1, pageSize: 15 }).then(res => { // 获取需求(查询)
+            this.demandList = res.data.list
+          })
           break
         case 4:
-          this.form_task.task_demand = command.label
-          isCommand = command.label.value
+          this.form_task.demand_label = command.label
+          this.form_task_number.demand = command.value
           break
         case 5:
-          this.form_task.task_bizId = command.label
-          isCommand = command.label.value
+          this.form_task.bizId_label = command.label
+          this.form_task_number.bizId = command.value
           break
         case 6:
-          this.form_task.task_platform = command.label
-          isCommand = command.label.value
+          this.form_task.platform_label = command.label
+          this.form_task_number.platform = command.value
           break
         case 7:
-          this.form_task.task_Modular = command.label
-          isCommand = command.label.value
+          this.form_task.Modular_label = command.label
+          this.form_task_number.Modular = command.value
           break
         case 8:
-          this.form_task.task_ExemptionTest = command.label
-          isCommand = command.label.value
+          this.form_task.noTest_label = command.label
+          this.form_task_number.noTest = command.value
           break
       }
-      console.log(isCommand)
-    },
-    remoteMethod(query) {
-      if (query !== '') {
-        this.loading = true
-        setTimeout(() => {
-          this.loading = false
-          this.options = this.list.filter(item => {
-            return item.label.toLowerCase()
-              .indexOf(query.toLowerCase()) > -1
-          })
-        }, 200)
-      } else {
-        this.options = []
-      }
-    },
-    tableRowClassName({ row, rowIndex }) {
-      if (rowIndex === 1) {
-        return 'warning-row'
-      } else if (rowIndex === 3) {
-        return 'success-row'
-      }
-      return ''
     },
-    link_project() {
-      window.open('http://localhost:9528/#/Platform/projectManage/projectViewDetails', '_blank')
+    link_task(e) {
+      const { href } = this.$router.resolve({ name: '任务详情', query: { id: e }})
+      window.open(href, '_blank')
     },
     query_Reset() { // 重置
-      this.$set(this.form_task, 'task_all', '全部')
-      this.$set(this.form_task, 'task_name', '任务名称')
-      this.$set(this.form_task, 'task_project', '归属项目')
-      this.$set(this.form_task, 'task_demand', '归属需求')
-      this.$set(this.form_task, 'task_ExemptionTest', '是否免测')
-      this.$set(this.form_task, 'task_bizId', '业务线')
-      this.$set(this.form_task, 'task_platform', '平台')
-      this.$set(this.form_task, 'task_Modular', '模块')
-      this.$set(this.form_task, 'task_PersonInCharge', '负责人')
-      this.$set(this.form_task, 'task_Participant', '参与人')
-      this.$set(this.form_task, 'task_Modular', '创建人')
+      this.form_task_number = {}
+      this.$set(this.form_task, 'name_label', '任务名称')
+      this.$set(this.form_task, 'project_label', '归属项目')
+      this.$set(this.form_task, 'demand_label', '归属需求')
+      this.$set(this.form_task, 'noTest_label', '是否免测')
+      this.$set(this.form_task, 'bizId_label', '业务线')
+      this.$set(this.form_task, 'platform_label', '平台')
+      this.$set(this.form_task, 'Modular_label', '模块')
+      this.$set(this.form_task, 'PersonInCharge', '')
+      this.$set(this.form_task, 'Participant', '')
+      this.$set(this.form_task, 'creater', '')
     },
     handleSizeChange(size) { //  分页
       this.pageSize = size
-      // this.get_list()
+      this.get_taskList(1)
     },
     handleCurrentChange(curIndex) { //  分页
       this.curIndex = curIndex
-      // this.get_list()
+      this.get_taskList(1)
+    },
+    get_taskSelect() { // 下拉菜单数据
+      configShowTaskEnum().then(res => {
+        this.noTest = res.data.noTest // 是否免测
+        this.taskSource = res.data.taskSource // 归属需求
+        this.appClient = res.data.appClient // 涉及客户端
+      })
+      settingGetTypeMap().then(res => {
+        this.BusinessLine = res.data // 业务线
+        this.BusinessLine.map(item => {
+          item.child !== null ? item.child.map(value => {
+            this.arr_platform.push(value) // 平台数据
+            value.child.map(num => {
+              this.arr_Modular.push(num) // 模块数据
+            })
+          }) : ''
+        })
+      })
+      taskIdAndName({}).then(res => { // 任务名称
+        this.arr_taskName = Object.keys(res.data).map(eachData => ({
+          id: eachData,
+          name: res.data[eachData]
+        }))
+      })
     }
   }
 }
@@ -360,9 +331,7 @@ export default {
 
   .el-table .warning-row { background: oldlace; }
 
-  .drop_down {
-     font-size: 13px;
-     color: #333333;
-     /* white-space: nowrap; */
-  }
+  .drop_down { font-size: 13px; color: #333333; }
+
+  .el-dropdown-menu {max-height: 300px !important;overflow: auto !important;}
 </style>

+ 2 - 2
src/views/projectManage/taskList/taskListIndex.vue

@@ -116,7 +116,7 @@
                         <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>
+                          <el-button type="danger" size="mini" @click="dialogVisible = false">关 闭</el-button>
                         </span>
                       </el-dialog>
                       <el-dialog
@@ -129,7 +129,7 @@
                         </el-select>
                         <span slot="footer" class="dialog-footer">
                           <el-button type="primary" size="mini" @click="taskMoveDialog()">确 定</el-button>
-                          <el-button type="danger" size="mini" @click="dialogVisibleTaskMove = false">取 消</el-button>
+                          <el-button type="danger" size="mini" @click="dialogVisibleTaskMove = false">关 闭</el-button>
                         </span>
                       </el-dialog>
                     </div>

+ 472 - 240
src/views/projectManage/taskList/taskViewDetails.vue

@@ -2,135 +2,145 @@
   <div style="background-color:#F2F3F6;display:flex;align-items: center;justify-content: center;">
     <el-container>
       <el-header class="bgborder" style=" margin: 1%;height: 7vh;display: flex; justify-content: space-between; align-items: center;">
-        <el-tooltip class="item" effect="dark" content="爱啥啥" placement="bottom">
-          <span style="float: left;">项目名称:"两轮车数据重构2.1.3版 两轮车数据重构2.1.3版 两轮车数据……"</span>
-        </el-tooltip>
-        <span style="float: right;">
-          <el-dropdown>
-            <el-button size="mini" type="primary" plain>已完成<i class="el-icon-arrow-down el-icon--right" /></el-button>
-            <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item>进行中</el-dropdown-item>
-              <el-dropdown-item>已完成</el-dropdown-item>
+        <div style="float: left;">
+          <el-tooltip class="item" effect="dark" content="爱啥啥" placement="bottom">
+            <span style="font-weight: 600;"><span style="background: red;">未知</span>任务:{{ task_form.name }}</span>
+          </el-tooltip>
+          <el-dropdown @command="handleCommand">
+            <el-button size="mini" type="primary" plain class="el-dropdown-link drop_down" style="cursor: pointer;">{{ task_form.statusString }}<i class="el-icon-arrow-down el-icon--right" /></el-button>
+            <el-dropdown-menu slot="dropdown" align="center">
+              <el-dropdown-item v-for="item in taskStatus" :key="item.value" :command="{value:item.code,label:item.msg}">{{ item.msg }}</el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
-          <el-button size="mini" type="primary" plain>删除任务</el-button>
+        </div>
+        <span style="float: right;">
+          <el-button size="mini" type="primary" plain @click="centerDialogVisible_task = true">删除任务</el-button>
           <el-dropdown>
             <el-button size="mini" type="primary" plain>新建<i class="el-icon-arrow-down el-icon--right" />
             </el-button>
             <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item>新建需求</el-dropdown-item>
-              <el-dropdown-item>新建任务</el-dropdown-item>
+              <el-dropdown-item>新建Bug</el-dropdown-item>
+              <el-dropdown-item>新建提测报告</el-dropdown-item>
+              <el-dropdown-item>新建测试报告</el-dropdown-item>
+              <el-dropdown-item>新建准出报告</el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
         </span>
       </el-header>
       <el-container>
         <el-aside class="bgborder" style=" margin:0 1%;minWidth: 55%;">
-          <div style="margin: 5%; font-weight: 600; white-space: nowrap;">
+          <div style="margin: 5% 5% 0 5%; font-weight: 600; white-space: nowrap;">
             <b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>数据统计
           </div>
           <div style="display: flex; justify-content: space-between; align-items: center;">
-            <span style="text-align: center; margin:0 8%">
-              <p>bug数量</p>
-              <p style="font-size: 70px;">19</p>
-              <p>
-                <span style="color: #F56C6C;">已延期2天</span>
+            <span style="text-align: center; margin-left: 8%; border-right:1px solid #BBBBBB; padding-right: 8%;">
+              <p style="width: 70px;">bug数量</p>
+              <p style="font-size: 70px;">{{ totalCount }}</p>
+              <p v-show="fixInFutureCount <= 0? false: true">
+                <span style="color: #F56C6C; width: 100px;">以后修复{{ fixInFutureCount }}个</span>
               </p>
             </span>
-            <div id="div1" style="width:500px;height:300px;margin-bottom: 3%;">s</div>
+            <div id="div1" style="width:100%;height:300px;margin-bottom: 3%;" />
           </div>
         </el-aside>
         <el-container>
-          <el-main class="bgborder form_e" style="margin: 0 2.1% 0 0;min-height: 50vh;">
+          <el-main class="bgborder form_e" style="overflow: hidden;margin: 0 2.1% 0 0;min-height: 50vh;">
             <div style="margin: 2.5%; font-weight: 600; white-space: nowrap;">
               <b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>基础信息
             </div>
-            <el-form label-position="left" label-width="150px" style="margin: 0 8%" :model="formLabelAlign">
+            <el-form label-position="left" style="margin: 0 8%" :model="task_form">
               <el-row :gutter="20">
-                <el-col :span="12">
-                  <el-form-item label="所属项目:">{{ 12 }}</el-form-item>
+                <el-col :span="19">
+                  <el-form-item label="所属项目:" label-width="90px" style="word-break: break-all;">{{ task_form.projectName }}</el-form-item>
                 </el-col>
-                <el-col :span="12" :push="7">
-                  <el-button size="mini" type="primary" @click="project_modifica(formLabelAlign.describe)">修改</el-button>
+                <el-col :span="1">
+                  <el-button size="mini" type="primary" @click="open_created(task_form.describe)">修 改</el-button>
                 </el-col>
               </el-row>
-              <el-form-item label="所属需求:">{{ "我是一个小需求" }}</el-form-item>
-              <el-form-item label="业务线/平台/模块:">{{ '代驾/服务端/支付' }}</el-form-item>
-              <el-form-item label="是否免测:">{{ '否' }}</el-form-item>
-              <el-form-item label="开发负责人:">{{ '秦志鹏' }}</el-form-item>
-              <el-form-item label="测试负责人:">{{ '郑美双' }}</el-form-item>
-              <el-form-item label="涉及的客户端:">{{ '滴滴乘客端app' }}</el-form-item>
-              <el-form-item label="技术文档:">{{ 'http://10.179.115.141:8877/#/' }}</el-form-item>
+              <el-form-item label="所属需求:" label-width="90px">{{ task_form.requireName }}</el-form-item>
+              <el-form-item label="业务线/平台/模块:" label-width="150px">{{ task_form.bizIdString }} / {{ task_form.typeString }} / {{ task_form.clientTypeString }}</el-form-item>
+              <el-form-item label="是否免测:" label-width="90px">{{ task_form.noTestString }}</el-form-item>
+              <el-form-item label="开发负责人:" label-width="100px">{{ task_form.rdObject.name }}</el-form-item>
+              <el-form-item label="测试负责人:" label-width="100px">{{ task_form.qaObject.name }}</el-form-item>
+              <el-form-item label="涉及的客户端:" label-width="120px">{{ task_form.involveAppString }}</el-form-item>
+              <el-form-item label="技术文档:" label-width="90px" style="word-break: break-all;">{{ task_form.devUrl }}</el-form-item>
 
             </el-form>
           </el-main>
         </el-container>
       </el-container>
-      <el-header class="bgborder" style="margin: 1%;min-height: 70vh; padding: 0;">
+      <el-header class="bgborder" style="margin: 1%;height: auto; padding: 0;">
         <div style="margin: 3%; font-weight: 600; white-space: nowrap;">
           <b style="color: #409EFF;margin: 0 0.5%; font-size: 20px; ">I</b>排期事件
         </div>
         <el-row :gutter="20" style="margin: 2% 3%">
           <el-col :span="12">
-            <el-button size="mini" type="primary">添加事件</el-button>
+            <el-button size="mini" type="primary" plain icon="el-icon-plus" @click="add_Event">添加事件</el-button>
           </el-col>
           <el-col :span="12" :push="7">
             <el-button-group>
-              <el-button size="mini" type="primary" plain>甘特图</el-button>
-              <el-button size="mini" type="primary" plain>列 表</el-button>
+              <el-button size="mini" type="primary" plain @click="GanttChart(2)">甘特图</el-button>
+              <el-button size="mini" type="primary" plain @click="GanttChart(1)">列 表</el-button>
             </el-button-group>
           </el-col>
         </el-row>
         <div>
-          <el-table :data="tableData" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true" :row-class-name="tableRowClassName">
-            <el-table-column label="事件名称" min-width="100" align="center">
-              <template slot-scope="scope">{{ scope.row.address }}</template>
+          <div v-show="Gantt">甘特图 就是这个 还没写,怎么样,</div>
+          <el-table v-show="table_show" :data="arr_event" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true">
+            <el-table-column label="事件类型" min-width="100" align="center">
+              <template slot-scope="scope">{{ scope.row.name }}</template>
             </el-table-column>
             <el-table-column label="描述" min-width="100" align="center">
-              <template slot-scope="scope">{{ scope.row.teamName }}</template>
+              <template slot-scope="scope">{{ scope.row.desc }}</template>
             </el-table-column>
             <el-table-column label="排期" min-width="100" align="center">
-              <template slot-scope="scope">{{ scope.row.teamName }}</template>
+              <template slot-scope="scope">{{ scope.row.startTime }} - {{ scope.row.endTime }}</template>
             </el-table-column>
             <el-table-column label="人员" min-width="100" align="center">
-              <template slot-scope="scope">{{ scope.row.teamName }}</template>
+              <template slot-scope="scope">
+                <div v-for="item of scope.row.peopleObject" :key="item.idapId">
+                  {{ item.name }}
+                </div>
+              </template>
             </el-table-column>
             <el-table-column label="操作" min-width="100" align="center">
-              <template>
-                <el-button size="mini" type="primary" plain>编辑</el-button>
+              <template slot-scope="scope">
+                <el-button size="mini" type="primary" plain @click="event_query(scope.row.id)">编辑</el-button>
                 <el-button size="mini" type="primary" plain>删除</el-button>
               </template>
             </el-table-column>
           </el-table>
 
           <el-row :gutter="20" style="margin: 2% 3%; color: #333B4A; padding-bottom:2%;border-bottom:1px solid #E9E9E9;">
-            <el-col :span="12"><div>排期汇总:{{ '2019年12月1日~2019年12月16日' }}</div></el-col>
+            <el-col :span="12"><div>排期汇总:{{ tiem_date.startTime }} ~ {{ tiem_date.endTime }}</div></el-col>
           </el-row>
           <el-row :gutter="20" style="margin: 2% 3%; color: #333B4A; padding-bottom:2%;border-bottom:1px solid #E9E9E9;">
-            <el-col :span="8"><div>实际提测时间:{{ '2019年12月1日' }}</div></el-col>
-            <el-col :span="8"><div>实际准出时间:{{ '2019年12月16日' }}</div></el-col>
-            <el-col :span="8"><div>实际上线完成时间:{{ '2020年1月1日' }}</div></el-col>
+            <el-col :span="8"><div>实际提测时间:{{ task_form.launchTestRealTime }}</div></el-col>
+            <el-col :span="8"><div>实际准出时间:{{ task_form.testFinishRealTime }}</div></el-col>
+            <el-col :span="8"><div>实际上线完成时间:{{ task_form.onlineRealTime }}</div></el-col>
           </el-row>
           <el-row :gutter="20" style="margin: 2% 3%; color: #333B4A; padding-bottom:2%;border-bottom:1px solid #E9E9E9; ">
-            <el-col :span="8"><div>预计上线版本:{{ '滴滴乘客端APP1.2.0 街兔APP2.3.1' }}</div></el-col>
-            <el-col :span="8"><div>实际上线版本:<span>{{ '滴滴乘客端APP1.2.0 街兔APP2.3.1' }}</span></div></el-col>
+            <el-col :span="8"><div>预计上线版本:{{ task_form.preOnlineVersion }}</div></el-col>
+            <!-- <el-col :span="8"><div>实际上线版本:<span>{{ task_form.value }}</span></div></el-col> -->
           </el-row>
         </div>
       </el-header>
       <el-footer class="footer" style=" height: auto;">
+        <span style="text-align: right; margin: 1% 0 -3% 0;float:right;">
+          <el-button size="mini" type="primary" plain icon="el-icon-plus">提Bug</el-button>
+          <el-dropdown>
+            <el-button size="mini" type="primary" plain>新建<i class="el-icon-arrow-down el-icon--right" />
+            </el-button>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item>新建提测报告</el-dropdown-item>
+              <el-dropdown-item>新建测试报告</el-dropdown-item>
+              <el-dropdown-item>新建准出报告</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </span>
         <el-tabs tab-position="top" @tab-click="handleClick">
           <el-tab-pane label="Bug" style="position: relative;">
-            <el-button size="mini" type="primary" plain>+提Bug</el-button>
-            <el-dropdown>
-              <el-button size="mini" type="primary" plain>新建<i class="el-icon-arrow-down el-icon--right" />
-              </el-button>
-              <el-dropdown-menu slot="dropdown">
-                <el-dropdown-item>新建需求</el-dropdown-item>
-                <el-dropdown-item>新建任务</el-dropdown-item>
-              </el-dropdown-menu>
-            </el-dropdown>
-            <el-divider style="color: #E9E9E9;" /><hr>
-            <div style="margin: 2% 0;display: flex; justify-content: space-start; align-items: center;">
+            <div style="padding: 1% 0;display: flex; justify-content: space-start; align-items: center;border-top: 1px solid #E9E9E9;">
               <span>快速筛选:</span>
               <span style="margin-left:2%;">全部</span>
               <span style="margin-left:2%;">待测试</span>
@@ -138,12 +148,20 @@
               <span style="margin-left:2%;">待开发</span>
               <span style="margin-left:2%;">已完成</span>
             </div>
-            <el-table :data="tableData" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true" :row-class-name="tableRowClassName">
+            <el-table :data="bugBaseInfoDOList" style="width: 100%;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true">
               <el-table-column label="标题名称" min-width="100" align="center">
                 <template slot-scope="scope">{{ scope.row.teamName }}</template>
               </el-table-column>
               <el-table-column label="状态" min-width="100" align="center">
-                <template slot-scope="scope">{{ scope.row.teamName }}</template>
+                <!-- <template slot-scope="scope"> -->
+                <el-dropdown @command="handleCommand">
+                  <el-button size="mini" type="primary" plain class="el-dropdown-link drop_down" style="cursor: pointer;">{{ task_form.statusString }}<i class="el-icon-arrow-down el-icon--right" /></el-button>
+                  <el-dropdown-menu slot="dropdown" align="center">
+                    <el-dropdown-item v-for="item in taskStatus" :key="item.value" :command="{value:item.code,label:item.msg}">{{ item.msg }}</el-dropdown-item>
+                  </el-dropdown-menu>
+                </el-dropdown>
+                <!-- {{ scope.row.teamName }} -->
+                <!-- </template> -->
               </el-table-column>
               <el-table-column label="提报人" min-width="100" align="center">
                 <template slot-scope="scope">{{ scope.row.teamName }}</template>
@@ -155,128 +173,193 @@
                 <template slot-scope="scope">{{ scope.row.teamName }}</template>
               </el-table-column>
             </el-table>
+            <div style="display:flex;align-items: center;justify-content: flex-end;">
+              <el-pagination background :current-page="currentPage" :page-sizes="[15, 20, 25, 30]" :page-size="100" layout="total, prev, pager, next, jumper" :total="100" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+            </div>
           </el-tab-pane>
           <el-tab-pane label="提测报告" style="overflow: auto;width: 100%;">
-            f
+            <el-table :data="launchTestInfoDOS" style="width: 100%;margin:2% 0;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true">
+              <el-table-column label="ID" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.id }}</template>
+              </el-table-column>
+              <el-table-column label="标题名称" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.name }}</template>
+              </el-table-column>
+              <el-table-column label="状态" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.statusString }}</template>
+              </el-table-column>
+              <el-table-column label="创建日期" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.gmtCreate }}</template>
+              </el-table-column>
+              <el-table-column label="操作" align="center" width="300">
+                <template slot-scope="scope">
+                  <div>
+                    <el-button size="mini" type="primary" plain @click="pass(1,scope.row.id)">通过</el-button>
+                    <el-button size="mini" type="danger" plain @click="back(2,scope.row.id)">打回</el-button>
+                    <el-dialog title="打回原因" :visible.sync="dialog_launchTestInfoDOS" width="30%">
+                      <el-input v-model="CallBackTheReason" type="textarea" :rows="3" />
+                      <span slot="footer" class="dialog-footer">
+                        <el-button type="primary" size="mini" @click="passOrBackSend()">确 定</el-button>
+                        <el-button type="danger" size="mini" @click="dialog_launchTestInfoDOS = false">取 消</el-button>
+                      </span>
+                    </el-dialog>
+                  </div>
+                </template>
+              </el-table-column>
+            </el-table>
           </el-tab-pane>
           <el-tab-pane label="测试报告" style="overflow: auto;width: 100%;">
-            f
+            <el-table :data="dailyTestReports" style="width: 100%;margin:2% 0;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true">
+              <el-table-column label="ID" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.id }}</template>
+              </el-table-column>
+              <el-table-column label="标题名称" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.reportName }}</template>
+              </el-table-column>
+              <el-table-column label="创建日期" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.gmtCreate }}</template>
+              </el-table-column>
+            </el-table>
           </el-tab-pane>
           <el-tab-pane label="准出报告" style="overflow: auto;width: 100%;">
-            f
+            <el-table :data="projectTestReportDOS" style="width: 100%;margin:2% 0;" size="mini" :header-cell-style="{ background: '#6AB4FF', color: '#FFFFFF' }" show-overflow-tooltip="true">
+              <el-table-column label="ID" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.id }}</template>
+              </el-table-column>
+              <el-table-column label="标题名称" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.reportName }}</template>
+              </el-table-column>
+              <el-table-column label="状态" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.statusString }}</template>
+              </el-table-column>
+              <el-table-column label="创建日期" min-width="100" align="center">
+                <template slot-scope="scope">{{ scope.row.gmtCreate }}</template>
+              </el-table-column>
+            </el-table>
           </el-tab-pane>
-          <el-tab-pane label="评论" style="overflow: auto;width: 100%;">
-            f
+          <el-tab-pane label="评论">
+            <p v-show="commentShow" style="color:#9B9B9B">还没有评论,快来评论吧!</p>
+            <div v-for="item of commentTxt" :key="item">{{ item.commentInfo.name }} &nbsp; &nbsp; <span style="color:#9B9B9B">{{ item.commentInfo.gmtCreater }}</span>
+              <p>{{ item.commentInfo.content }}</p></div>
+            <el-input v-model="content" rows="6" type="textarea" placeholder="请输入评论内容..." show-word-limit />
+            <p style="text-align: right;">
+              <el-button size="mini" type="primary" plain>取消</el-button>
+              <el-button size="mini" type="primary" plain @click="comment(content)">发送</el-button>
+            </p>
           </el-tab-pane>
         </el-tabs>
-        <div style="display:flex;align-items: center;justify-content: flex-end;">
-          <el-pagination
-            background
-            :current-page="currentPage"
-            :page-sizes="[15, 20, 25, 30]"
-            :page-size="100"
-            layout="total, prev, pager, next, jumper"
-            :total="100"
-            @size-change="handleSizeChange"
-            @current-change="handleCurrentChange"
-          />
-        </div>
 
       </el-footer>
     </el-container>
-    <el-dialog title="新建项目" :visible.sync="dialog_FormVisible" width="70%">
-      <el-form :model="form" label-position="left" style="margin: 0 3%;">
-        <el-form-item label="项目名称" :label-width="formLabelWidth">
-          <el-input v-model="form.name" autocomplete="off" placeholder="请输入项目名称" />
+    <el-dialog :visible.sync="centerDialogVisible" width="30%" center>
+      <div align="center">确定要删除此项目吗?</div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="centerDialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="centerDialogVisible = false">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog title="新建事件" :visible.sync="dialogFormVisible">
+      <el-form ref="form" :model="form" :rules="form_rules" :label-width="formLabelWidth">
+        <el-form-item label="事件类型" prop="type">
+          <el-select v-model="form.type" :loading="loading" clearable placeholder="请选择" style="width: 100%">
+            <el-option v-for="item in taskScheduleEvent" :key="item.code" :label="item.msg" :value="item.code" />
+          </el-select>
         </el-form-item>
-        <div style="display: flex;">
-          <div style="flex; 1;">
-            <el-form-item label="项目类型" :label-width="formLabelWidth">
-              <el-select v-model="form.value" clearable placeholder="业务/产品" style="width: 100%">
-                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="业务线" :label-width="formLabelWidth">
-              <el-select v-model="form.value" clearable placeholder="请选择" style="width:20vw">
-                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="产品负责人" :label-width="formLabelWidth">
-              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="测试负责人" :label-width="formLabelWidth">
-              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </el-form-item>
-          </div>
-          <div style="flex; 1; margin: 0 0 0 auto;">
-            <el-form-item label="优先级" :label-width="formLabelWidth">
-              <el-select v-model="form.value" clearable placeholder="请选择" style="width:20vw">
-                <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="项目负责人" :label-width="formLabelWidth">
-              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="开发负责人" :label-width="formLabelWidth">
-              <el-select v-model="form.value1" filterable remote reserve-keyword :remote-method="remoteMethod" :loading="loading" clearable placeholder="请输入姓名或邮箱前缀" style="width: 100%">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
-              </el-select>
-            </el-form-item>
-          </div>
-        </div>
-        <el-form-item label="项目描述" :label-width="formLabelWidth">
-          <el-input v-model="form.textarea" type="textarea" placeholder="请输入" show-word-limit />
+        <el-form-item label="事件描述">
+          <el-input v-model="form.desc" autocomplete="off" placeholder="请输入描述信息" />
+        </el-form-item>
+        <el-form-item label="排期" prop="date_start">
+          <el-date-picker v-model="form.date_start" type="daterange" range-separator="~" start-placeholder="请选择开始日期" end-placeholder="请选择结束日期" />
+          <el-checkbox v-model="form.noHoliday">排除周末</el-checkbox>
+        </el-form-item>
+        <el-form-item label="参与人员">
+          <el-select v-model="form.peoples" multiple filterable remote reserve-keyword placeholder="创建人" :remote-method="remoteMethod" :loading="loading" style="width: 100%">
+            <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="test2(item, 0)">
+              <span style="float: left">{{ item.name }}</span>
+              <span style="float: right; color: #8492a6; font-size: 13px,">{{ item.idap }}</span>
+            </el-option>
+          </el-select>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button @click="dialog_FormVisible = false">取 消</el-button>
-        <el-button type="primary" @click="dialog_FormVisible = false">创 建</el-button>
+        <el-button @click="dialogFormVisible = false">取 消</el-button>
+        <el-button type="primary" @click="even === '新建事件'? event_created(form):event_update(form)">确 定</el-button>
       </div>
     </el-dialog>
-    <el-dialog :visible.sync="centerDialogVisible" width="30%" center>
-      <div align="center">确定要删除此项目吗?</div>
-      <spn slot="footer" class="dialog-footer">
-        <el-button @click="centerDialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="centerDialogVisible = false">确 定</el-button>
-      </spn>
+    <!-- 删除 -->
+    <el-dialog :visible.sync="centerDialogVisible_task" width="30%" center>
+      <div align="center">确定要删除<span style="color:red;"> {{ task_form.name }} </span> 的任务吗?</div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="centerDialogVisible_task = false">关 闭</el-button>
+        <el-button type="primary" @click="task_delete(task_form.id )">确 定</el-button>
+      </span>
     </el-dialog>
+    <!-- 弹窗 -->
+    <openDialog v-if="dialog_open" ref="task_createdUpdata" />
   </div>
 </template>
 
 <script>
+import { taskGet, memberQueryMemberInfoByIDAPorName, bugGetBugStatusMapInfo, configShowTaskEnum, ScheduleCreate, tasktaskDelete, taskUpdate, ScheduleUpdate, commentCreate, commentList } from '@/api/taskIndex' // ajax
+import openDialog from '@/views/projectManage/dialog_vue'
 import echarts from 'echarts'
 export default {
+  components: {
+    openDialog
+  },
   data() {
     return {
+      dialog_open: false,
+      task_form: {
+        statusString: '未开始',
+        describe: '',
+        qaObject: {
+          name: ''
+        },
+        rdObject: {
+          name: ''
+        }
+      },
+      CallBackTheReason: '', // 打回原因
+      content: '', // 评论
+      comment_content: '', // 评论内容
+      commentTxt: [],
+      commentShow: true, // 评论为空默认显示
+      dialog_launchTestInfoDOS: false, // 打回弹窗
+      currentPage: 0,
+      tiem_date: { // 排期汇总
+        startTime: '',
+        endTime: ''
+      },
+      userInformation: localStorage.getItem('username'),
+      userNames: localStorage.getItem('realname'),
+      form_rules: {
+        type: [{ required: true, message: '事件类型不能为空', trigger: 'blur' }],
+        date_start: [{ required: true, message: '排期不能为空', trigger: 'blur' }]
+      },
+      arr_event: [], // 事件table
+      options: [], // 人员信息
+      bugBaseInfoDOList: [], // bug
+      launchTestInfoDOS: [], // 提测
+      dailyTestReports: [], // 测试
+      projectTestReportDOS: [], // 准出
+      loading: false,
       Addition: false,
       Addition1: false,
       Addition2: false,
+      table_show: true, // 表格(显示)
+      Gantt: false, // 甘特图(显示)
       textarea: '', // 项目总目标
+      taskScheduleEvent: [], // 事件类型
       total: 0,
-      tableData: [
-        {
-          teamName: '滴滴出行'
-        },
-        {
-          teamName: '质量技术部'
-        }
-      ],
-      formLabelAlign: {
-        describe: ''
-      },
       show2: true,
       describe: false,
       describe1: false,
       dialogFormVisible: false,
-      dialog_FormVisible: false,
       centerDialogVisible: false,
-      formLabelWidth: '120px',
+      centerDialogVisible_task: false, // 任务dialog
+      options1: [],
+      even: '', // 添加事件
       form: {
         name: '',
         region: '',
@@ -287,64 +370,21 @@ export default {
         resource: '',
         desc: ''
       },
-      formLabelWidth1: '60px',
+      formLabelWidth: '100px',
       project_Milepost: [
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
-        {
-          name: '第一阶段',
-          date: '2019/12/06',
-          code: '你丹江口市内存卡就是你的错'
-        },
         {
           name: '第一阶段',
           date: '2019/12/06',
           code: '你丹江口市内存卡就是你的错'
         }
-      ]
+      ],
+      tasktId: '',
+      echarts_name: [], // echarts_name
+      echarts_value: [], // echats_value
+      fixInFutureCount: '', // 已延期
+      totalCount: '', // bug总数
+      test: {},
+      taskStatus: []
     }
   },
   created() {
@@ -354,62 +394,208 @@ export default {
     this.get_echarts()
   },
   methods: {
-    get_list() {
-      if (this.textarea === '') {
-        this.Addition = true
-      } else {
-        this.Addition2 = true
-      }
-      if (this.formLabelAlign.describe !== '') {
-        this.describe1 = true
-      } else {
-        this.describe = false
+    test2(item, e) { // 获取团队人员信息
+      if (typeof this.test[item.idap] === 'undefined') {
+        item.role = e
+        this.test[item.idap] = item
       }
+      return item.idap
+    },
+    get_list() {
+      var url = window.location.href // 获取url中"?"符后的字
+      this.taskId = url.split('?id=')
+      configShowTaskEnum().then(res => {
+        this.taskScheduleEvent = res.data.taskScheduleEvent
+        this.taskStatus = res.data.taskStatus
+      })
+      taskGet(this.taskId[1]).then(res => {
+        this.task_form = res.data
+        this.total = res.total
+        this.tiem_date.startTime = res.data.scheduleListResponse.startTime // 开始时间
+        this.tiem_date.endTime = res.data.scheduleListResponse.endTime // 结束时间
+        this.arr_event = res.data.scheduleListResponse.schedulDetailResponseList
+        this.table_loading = false
+        this.launchTestInfoDOS = res.data.launchTestInfoDOS // 提测
+        this.dailyTestReports = res.data.dailyTestReports // 测试
+        this.projectTestReportDOS = res.data.projectTestReportDOS // 准出
+        this.task_form.bugBaseInfoDOList !== null ? this.bugBaseInfoDOList = res.date.bugBaseInfoDOList : this.bugBaseInfoDOList = [] // bug
+      })
+      commentList({ type: 3, joinId: this.taskId[1] }).then(res => {
+        this.commentTxt = res.data
+        this.commentTxt !== '' ? this.commentShow = false : this.commentShow = true
+      })
+    },
+
+    open_created(e) { // 打开弹窗
+      var url = window.location.href // 获取url中"?"符后的字串
+      this.taskId = url.split('?id=')
+      this.dialog_open = true
+      this.$nextTick(() => { this.$refs.task_createdUpdata.init(3, this.taskId) })
     },
     get_echarts() {
-      var myChart = echarts.init(document.getElementById('div1'))
-      myChart.setOption({
-        xAxis: {
-          type: 'category',
-          data: ['待开发', '开发中', '待测试', '已完成']
-        },
-        yAxis: [{ gridIndex: 0, axisTick: { show: false }, axisLabel: { show: false }, splitLine: { show: false }, axisLine: { show: false }}],
-        series: [{
-          data: [120, 200, 150, 80],
-          type: 'bar'
-        }]
+      bugGetBugStatusMapInfo({ taskId: this.taskId[1] }).then(res => {
+        this.fixInFutureCount = res.data.fixInFutureCount
+        this.totalCount = res.data.totalCount
+        res.data.statusInfoList.map(item => {
+          this.echarts_name.push(item.statusString)
+          this.echarts_value.push(item.count)
+        })
       })
-      window.onresize = myChart.resize
+      setTimeout(() => {
+        var myChart = echarts.init(document.getElementById('div1'))
+        myChart.setOption({
+          xAxis: {
+            type: 'category',
+            data: this.echarts_name,
+            axisLine: {
+              show: true,
+              lineStyle: {
+                type: 'dashed'
+              }
+            }
+          },
+          yAxis: [{ gridIndex: 0, axisTick: { show: false }, axisLabel: { show: false }, splitLine: { show: false }, axisLine: { show: false }}],
+          series: [
+            {
+              data: this.echarts_value,
+              type: 'bar',
+              itemStyle: {
+                normal: {
+                  color: '#409EFF'
+                }
+              },
+              label: {
+                show: true,
+                position: 'inside'
+              }
+            }]
+        })
+        window.onresize = myChart.resize
+      }, 300)
     },
-    project_modifica(e) {
-      this.dialog_FormVisible = true
-      // this.describe = true
-      // this.describe1 = false
-      // this.$set(this.formLabelAlign, 'describe', e)
-      // setTimeout(() => {
-      //   this.$refs.describe.focus()
-      // }, 100)
+    handleCommand(command) {
+      this.task_form.statusString = command.label
+      var taskInfoDO = this.task_form
+      taskInfoDO.status = command.value
+      var user = { name: this.userNames, ename: this.userInformation, id: '' }
+      taskUpdate({ taskInfoDO, user }).then(res => {
+        if (res.code === 200) {
+          this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+        }
+      })
+    },
+    event_query(e) { // 编辑事件(添加事件)
+      var eventID = {}
+      this.arr_event.map(item => {
+        item.id === e ? eventID = item : ''
+      })
+
+      this.dialogFormVisible = true
+      this.form = eventID
+      this.$set(this.form, 'date_start', [eventID.startTime, eventID.endTime])
+      this.form.noHoliday === 1 ? this.form.noHoliday = false : this.form.noHoliday = true
+      console.log(this.form, 'form')
     },
     blur_describe(e) {
       this.describe = false
       this.describe1 = true
-      this.$set(this.formLabelAlign, 'describe', e)
+      this.$set(this.task_form, 'describe', e)
     },
     click_b() {
       console.log('v')
     },
+    remoteMethod(query) { // 人员查询
+      if (query !== '') {
+        this.loading = true
+        setTimeout(() => {
+          this.loading = false
+          memberQueryMemberInfoByIDAPorName({ memberIDAP: query }).then(res => {
+            this.options = res.data
+          })
+        }, 200)
+      } else {
+        this.options = []
+      }
+    },
     handleClick(tab, event) {
       console.log(tab, event)
     },
-    tableRowClassName({ row, rowIndex }) {
-      if (rowIndex === 1) {
-        return 'warning-row'
-      } else if (rowIndex === 3) {
-        return 'success-row'
+    task_delete(e) { // 删除任务
+      var user = { name: this.userNames, ename: this.userInformation, id: '' }
+      tasktaskDelete(user, e).then(res => {
+        if (res.code === 200) {
+          this.$router.push({ name: '任务', query: {}})
+          this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+        } else {
+          this.$message({ message: res.msg + '请联系开发人员', type: 'error', duration: 1000, offset: 150 })
+        }
+      })
+    },
+    event_update(e) { // 编辑事件
+      this.even = '编辑事件'
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          var schedule = e
+          e.noHoliday === true ? schedule.noHoliday = 0 : schedule.noHoliday = 1
+          schedule.startTime = e.date_start[0]
+          schedule.endTime = e.date_start[1]
+          schedule.taskId = Number(this.taskId[1])
+          this.taskScheduleEvent.map(item => {
+            item.code === e.type ? schedule.name = item.msg : ''
+          })
+          var user = { name: this.userNames, ename: this.userInformation, id: '' }
+          ScheduleUpdate({ schedule, user }).then(res => {
+            if (res.code === 200) {
+              this.dialogFormVisible = false
+              this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+              this.get_list()
+            }
+          })
+        }
+      })
+    },
+    event_created(e) { // 添加事件
+      this.even = '新建事件'
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          var schedule = e
+          e.noHoliday === true ? schedule.noHoliday = 0 : schedule.noHoliday = 1
+          schedule.startTime = e.date_start[0]
+          schedule.endTime = e.date_start[1]
+          schedule.taskId = Number(this.taskId[1])
+          this.taskScheduleEvent.map(item => {
+            item.code === e.type ? schedule.name = item.msg : ''
+          })
+          var user = { name: this.userNames, ename: this.userInformation, id: '' }
+          ScheduleCreate({ schedule, user }).then(res => {
+            if (res.code === 200) {
+              this.dialogFormVisible = false
+              this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+              this.get_list()
+            }
+          })
+        }
+      })
+    },
+    comment(e) {
+      this.content = ''
+      this.commentShow = false
+      var commentInfo = {
+        joinId: this.taskId[1],
+        content: e,
+        type: 3,
+        fatherId: 0,
+        name: this.userNames,
+        email: this.userInformation
       }
-      return ''
+      var user = { name: this.userNames, ename: this.userInformation, id: '' }
+      commentCreate({ commentInfo, user }).then(res => {
+        if (res.code === 200) {
+          this.get_list()
+          this.$message({ message: res.msg, type: 'success', duration: 1000, offset: 150 })
+        }
+      })
     },
-
     ImmediateAddition() { // 立即添加(编辑)
       setTimeout(() => { this.$refs.textarea.focus() }, 100)
       this.Addition = false
@@ -428,13 +614,52 @@ export default {
         this.Addition = true
       }
     },
+    GanttChart(e) {
+      switch (e) {
+        case 1:
+          this.table_show = true
+          this.Gantt = false
+          break
+        case 2:
+          this.table_show = false
+          this.Gantt = true
+          break
+      }
+    },
+    add_Event() { // 添加事件(排期)
+      this.dialogFormVisible = true
+      this.form = {}
+      this.$nextTick(() => {
+        this.$refs['form'].clearValidate()
+      })
+    },
+    // 打回
+    back(e, ele) {
+      this.dialog_launchTestInfoDOS = true
+      // this.CallBackStatus = e
+      // this.CallBackId = ele
+    },
+    // 通过
+    pass(e, ele) {
+      // this.CallBackStatus = e
+      // this.CallBackId = ele
+      // this.passOrBackSend()
+    },
+    passOrBackSend() {
+      this.dialog_launchTestInfoDOS = false
+      // const tt = { status: this.CallBackStatus, id: this.CallBackId }
+      // this.userData = { id: '', ename: this.userInformation, name: this.userNames }
+      // this.objData = { launchTestInfo: tt, user: this.userData }
+      // launchTestUpdate(this.objData).then(res => {
+      //   res.code === 200 ? this.successFun('operate') : this.errorFun(res.msg)
+      //   this.getList()
+      // })
+    },
     handleSizeChange(size) { //  分页
       this.pageSize = size
-      // this.get_list()
     },
     handleCurrentChange(curIndex) { //  分页
       this.curIndex = curIndex
-      // this.get_list()
     }
   }
 }
@@ -553,4 +778,11 @@ export default {
 .form_e .el-form-item {
   margin-bottom: 0px;
 }
+
+.footer .el-tabs__header {
+    padding: 0;
+    position: relative;
+    margin: 0 0 15px;
+    width: 80%;
+}
 </style>