Browse Source

任务界面优化

master
陈裕财 5 years ago
parent
commit
05aa7b9b57
  1. 39
      src/styles/mdp.scss
  2. 2
      src/views/mdp/workflow/ru/task/TaskMng.vue
  3. 2
      src/views/xm/core/xmAttachment/XmAttachmentMng.vue
  4. 2
      src/views/xm/core/xmBranchState/XmBranchStateMng.vue
  5. 2
      src/views/xm/core/xmBranchTaskTypeState/XmBranchTaskTypeStateMng.vue
  6. 2
      src/views/xm/core/xmEnvList/XmEnvListMng.vue
  7. 2
      src/views/xm/core/xmExchange/XmExchangeMng.vue
  8. 4
      src/views/xm/core/xmIterationMenu/XmIterationMenuMng.vue
  9. 2
      src/views/xm/core/xmIterationState/XmIterationStateMng.vue
  10. 2
      src/views/xm/core/xmIterationState/XmIterationStateShow.vue
  11. 2
      src/views/xm/core/xmMenu/XmMenuEdit.vue
  12. 2
      src/views/xm/core/xmMenuExchange/XmMenuExchangeMng.vue
  13. 2
      src/views/xm/core/xmMenuPlan/XmMenuPlanMng.vue
  14. 2
      src/views/xm/core/xmMyFocus/XmMyFocusMng.vue
  15. 2
      src/views/xm/core/xmProductState/XmProductStateMng.vue
  16. 2
      src/views/xm/core/xmProject/XmProjectList.vue
  17. 2
      src/views/xm/core/xmProjectBaseline/XmProjectBaselineMng.vue
  18. 2
      src/views/xm/core/xmProjectContract/XmProjectContractMng.vue
  19. 2
      src/views/xm/core/xmProjectEnvList/XmProjectEnvListMng.vue
  20. 2
      src/views/xm/core/xmProjectGroupFormwork/XmProjectGroupFormwork.vue
  21. 2
      src/views/xm/core/xmProjectGroupFormwork/XmProjectGroupFormworkMng.vue
  22. 2
      src/views/xm/core/xmProjectGroupState/XmProjectGroupStateMng.vue
  23. 2
      src/views/xm/core/xmProjectGroupUser/XmProjectGroupUserMng.vue
  24. 2
      src/views/xm/core/xmProjectGroupUserCandidate/XmProjectGroupUserCandidateMng.vue
  25. 2
      src/views/xm/core/xmProjectKpiHis/XmProjectKpiHisMng.vue
  26. 2
      src/views/xm/core/xmProjectMBudgetCostNouser/XmProjectMBudgetCostNouserMng.vue
  27. 2
      src/views/xm/core/xmProjectMBudgetCostUser/XmProjectMBudgetCostUserMng.vue
  28. 2
      src/views/xm/core/xmProjectMCostNouser/XmProjectMCostNouserMng.vue
  29. 2
      src/views/xm/core/xmProjectMCostUser/XmProjectMCostUserList.vue
  30. 2
      src/views/xm/core/xmProjectMCostUser/XmProjectMCostUserMng.vue
  31. 2
      src/views/xm/core/xmProjectOptions/XmProjectOptionsMng.vue
  32. 2
      src/views/xm/core/xmProjectPhase/XmProjectPhaseAdd.vue
  33. 2
      src/views/xm/core/xmProjectPhase/XmProjectPhaseEdit.vue
  34. 2
      src/views/xm/core/xmProjectPhaseBaseline/XmProjectPhaseBaselineMng.vue
  35. 2
      src/views/xm/core/xmProjectState/XmCockpit.vue
  36. 2
      src/views/xm/core/xmProjectState/XmProjectStateMng.vue
  37. 2
      src/views/xm/core/xmProjectStateHis/XmProjectStateHisMng.vue
  38. 2
      src/views/xm/core/xmProjectTaskTypeState/XmProjectTaskTypeStateMng.vue
  39. 2
      src/views/xm/core/xmProjectTemplate/XmProjectTemplateList.vue
  40. 2
      src/views/xm/core/xmProjectTemplate/XmProjectTemplateMng.vue
  41. 2
      src/views/xm/core/xmQuestion/XmQuestionCenter.vue
  42. 17
      src/views/xm/core/xmQuestion/XmQuestionEdit.vue
  43. 249
      src/views/xm/core/xmQuestion/XmQuestionMng.vue
  44. 2
      src/views/xm/core/xmQuestionHandle/XmQuestionHandleMng.vue
  45. 2
      src/views/xm/core/xmQuestionTag/XmQuestionTagMng.vue
  46. 2
      src/views/xm/core/xmRecord/XmRecord.vue
  47. 487
      src/views/xm/core/xmTask/XmTaskAdd.vue
  48. 312
      src/views/xm/core/xmTask/XmTaskEdit.vue
  49. 2
      src/views/xm/core/xmTask/XmTaskList.vue
  50. 8
      src/views/xm/core/xmTask/XmTaskMng.vue
  51. 2
      src/views/xm/core/xmTaskExecuser/XmTaskExecuserMng.vue
  52. 2
      src/views/xm/core/xmTaskSkill/XmTaskSkillMng.vue
  53. 2
      src/views/xm/core/xmTaskTemplate/XmTaskTemplateMng.vue
  54. 2
      src/views/xm/core/xmTestCase/XmTestCaseMng.vue
  55. 2
      src/views/xm/core/xmTestCaseExec/XmTestCaseExecMng.vue

39
src/styles/mdp.scss

@ -2,24 +2,28 @@
.page-full-height{
height: calc(100vh);
}
.page-height{
height: calc(90vh);
}
.page-height-90{
height: calc(90vh);
}
.page-height{
.page-height-90{
height: calc(90vh);
}
}
.page-height-80{
height: calc(80vh);
}
.page-height-20{
height: calc(20vh);
}
.page-height-10{
height: calc(10vh);
}
}
.page-height-5{
height: calc(5vh);
}
.page-container {
.page-tips{
position:absolute;
@ -34,17 +38,26 @@
align-items: center;
overflow-x: hidden;
}
.page-header{
.page-header{
overflow: auto;
}
.page-main{
.page-main{
overflow-y: auto;
overflow-x: hidden;
}
.page-bottom{
.page-bottom{
overflow: auto;
}
}
.overflow-auto{
overflow: auto;
}
.border{
border: 1px solid #e8e8e8;
}
.padding-20{
padding:40px;
}
.padding{
padding:10px;
}

2
src/views/mdp/workflow/ru/task/TaskMng.vue

@ -1,6 +1,6 @@
<template>
<section>
<el-row class="page-container page-height">
<el-row class="page-container page-full-height">
<el-row class="page-header">
<el-select v-model="filters.procCategory" clearable filterable placeholder="选择分类">
<el-option v-for="item in categorys" :key="item" :label="item" :value="item"></el-option>

2
src/views/xm/core/xmAttachment/XmAttachmentMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+xm_attachment</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmAttachment xm_attachment-->
<el-table :data="xmAttachments" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmBranchState/XmBranchStateMng.vue

@ -5,7 +5,7 @@
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmBranchStates">查询</el-button>
<el-button type="warning" v-loading="load.edit" @click="loadProjectStateToXmBranchState">刷新数据</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmBranchState 机构内所有项目指标汇总-->
<el-table :data="xmBranchStates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="index" width="45"></el-table-column>

2
src/views/xm/core/xmBranchTaskTypeState/XmBranchTaskTypeStateMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+按机构编号任务类型汇总</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmBranchTaskTypeState 按机构编号任务类型汇总-->
<el-table :data="xmBranchTaskTypeStates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="45"></el-table-column>

2
src/views/xm/core/xmEnvList/XmEnvListMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">添加环境清单</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmEnvList xm_env_list-->
<el-table ref="table" :height="tableHeight" :data="xmEnvLists" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmExchange/XmExchangeMng.vue

@ -1,6 +1,6 @@
<template>
<section>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<div style="overflow-x:hidden">
<task-user-editor :id="'head'" :user="{userid:userInfo.userid,username:userInfo.username,headimgurl:userInfo.headimgurl}" :project-id="xmTask.projectId" :task-id="xmTask.taskId" @publish="onPublishContent"></task-user-editor>
<div v-for="(item,i) in xmExchanges" :key="i" class="comment-list clearfix">

4
src/views/xm/core/xmIterationMenu/XmIterationMenuMng.vue

@ -6,7 +6,7 @@
<xm-iteration-mng :simple="true" @row-click="onIterationRowClick" @clear-select="onIterationClearSelect"></xm-iteration-mng>
</el-col>
<el-col :span="xmIteration?24:16">
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询">
<template slot="append">
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmIterationMenus" icon="el-icon-search"></el-button>
@ -14,7 +14,7 @@
</el-input>
<el-button type="primary" @click="showAdd" icon="el-icon-plus">加入更多故事到迭代计划</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmIterationMenu 迭代定义-->
<el-table ref="table" :height="tableHeight" :data="xmIterationMenusTreeData" default-expand-all row-key="menuId" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="45"></el-table-column>

2
src/views/xm/core/xmIterationState/XmIterationStateMng.vue

@ -4,7 +4,7 @@
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"></el-input>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmIterationStates">查询</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmIterationState 迭代定义-->
<el-table :data="xmIterationStates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="index" width="45"></el-table-column>

2
src/views/xm/core/xmIterationState/XmIterationStateShow.vue

@ -4,7 +4,7 @@
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"></el-input>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmIterationStates">查询</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmIterationState 迭代定义-->
<el-table :data="xmIterationStates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="index" width="45"></el-table-column>

2
src/views/xm/core/xmMenu/XmMenuEdit.vue

@ -1,6 +1,6 @@
<template>
<section class="page-container page-full-height border padding">
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--新增界面 XmMenu 项目故事表-->
<el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editForm">
<el-form-item label="序号" prop="seqNo">

2
src/views/xm/core/xmMenuExchange/XmMenuExchangeMng.vue

@ -13,7 +13,7 @@
<el-divider></el-divider>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<div style="overflow-x:hidden">
<menu-user-editor :id="'head'+filters.xmMenu.menuId" v-if="filters.xmMenu" :user="{userid:userInfo.userid,username:userInfo.username,headimgurl:userInfo.headimgurl}" :product-id="filters.xmMenu.productId" :menu-id="filters.xmMenu.menuId" @publish="onPublishContent"></menu-user-editor>
<div v-for="(item,i) in xmMenuExchanges" :key="i" class="comment-list clearfix">

2
src/views/xm/core/xmMenuPlan/XmMenuPlanMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+功能计划表,无需前端维护所有数据由汇总统计得出</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmMenuPlan 功能计划表,无需前端维护所有数据由汇总统计得出-->
<el-table ref="table" :height="tableHeight" :data="xmMenuPlans" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="45"></el-table-column>

2
src/views/xm/core/xmMyFocus/XmMyFocusMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+xm_my_focus</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmMyFocus xm_my_focus-->
<el-table :data="xmMyFocuss" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProductState/XmProductStateMng.vue

@ -4,7 +4,7 @@
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"></el-input>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmProductStates">查询</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProductState 功能状态表,无需前端维护所有数据由汇总统计得出-->
<el-table ref="table" :height="tableHeight" :data="xmProductStates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="index" width="45"></el-table-column>

2
src/views/xm/core/xmProject/XmProjectList.vue

@ -7,7 +7,7 @@
</template>
</el-input>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<el-table ref="table" :height="tableHeight" stripe :data="xmProjects" highlight-current-row v-loading="load.list" style="width: 100%;">
<el-table-column type="index" label="序号" width="55" ></el-table-column>
<el-table-column prop="code" label="项目编号" min-width="80" ></el-table-column>

2
src/views/xm/core/xmProjectBaseline/XmProjectBaselineMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+xm_project_baseline</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectBaseline xm_project_baseline-->
<el-table :data="xmProjectBaselines" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProjectContract/XmProjectContractMng.vue

@ -10,7 +10,7 @@
<el-button type="primary" @click="showAdd" icon="el-icon-plus">添加合同</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true" icon="el-icon-delete">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectContract xm_project_contract-->
<el-table ref="table" :height="tableHeight" :data="xmProjectContracts" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<!-- ht_contract_card表 -->

2
src/views/xm/core/xmProjectEnvList/XmProjectEnvListMng.vue

@ -7,7 +7,7 @@
<el-button type="primary" @click="showImport">选择已有环境清单</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</div>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectEnvList xm_project_env_list-->
<el-table ref="table" :height="tableHeight" :data="xmProjectEnvLists" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProjectGroupFormwork/XmProjectGroupFormwork.vue

@ -85,7 +85,7 @@
direction="ltr"
ref="drawer"
>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<el-collapse>
<el-collapse-item title="项目经理:项目整体、团队、进度、质量、计划、风险、沟通管理等" name="3">

2
src/views/xm/core/xmProjectGroupFormwork/XmProjectGroupFormworkMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+xm_project_group_formwork</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectGroupFormwork xm_project_group_formwork-->
<el-table ref="table" :height="tableHeight" :data="xmProjectGroupFormworks" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProjectGroupState/XmProjectGroupStateMng.vue

@ -5,7 +5,7 @@
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmProjectGroupStates">查询</el-button>
<el-button type="warning" v-loading="load.edit" @click="loadTasksToXmProjectGroupState">刷新数据</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectGroupState 功能状态表,无需前端维护所有数据由汇总统计得出-->
<el-table ref="table" :height="tableHeight" :data="xmProjectGroupStates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="index" width="45"></el-table-column>

2
src/views/xm/core/xmProjectGroupUser/XmProjectGroupUserMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+xm_project_group_user</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectGroupUser xm_project_group_user-->
<el-table ref="table" :height="tableHeight" :data="xmProjectGroupUsers" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProjectGroupUserCandidate/XmProjectGroupUserCandidateMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+xm_project_group_user_candidate</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectGroupUserCandidate xm_project_group_user_candidate-->
<el-table ref="table" :height="tableHeight" :data="xmProjectGroupUserCandidates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProjectKpiHis/XmProjectKpiHisMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+xm_project_kpi_his</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectKpiHis xm_project_kpi_his-->
<el-table :data="xmProjectKpiHiss" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProjectMBudgetCostNouser/XmProjectMBudgetCostNouserMng.vue

@ -18,7 +18,7 @@
<span style="margin-left:10px;font-size:14px;">外购人力总预算</span><el-tag type='warning'>{{selProject.planOutUserAt}}</el-tag>
</font>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectMBudgetCostNouser xm_project_m_budget_cost_nouser-->
<el-table ref="table" :height="tableHeight" :data="xmProjectMBudgetCostNousers" show-summary @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProjectMBudgetCostUser/XmProjectMBudgetCostUserMng.vue

@ -18,7 +18,7 @@
<span style="margin-left:10px;font-size:14px;">外购人力总预算</span><el-tag type='warning'>{{selProject.planOutUserAt}}</el-tag>
</font>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectMBudgetCostUser xm_project_m_budget_cost_user-->
<el-table ref="table" :height="tableHeight" :data="xmProjectMBudgetCostUsers" show-summary @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="60"></el-table-column>

2
src/views/xm/core/xmProjectMCostNouser/XmProjectMCostNouserMng.vue

@ -17,7 +17,7 @@
<span style="margin-left:10px;font-size:14px;">外购人力总成本</span><el-tag type='warning'>{{selProject.planOutUserAt}}</el-tag>
</font>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectMCostNouser xm_project_m_budget_cost_nouser-->
<el-table ref="table" :height="tableHeight" :data="xmProjectMCostNousers" show-summary @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProjectMCostUser/XmProjectMCostUserList.vue

@ -4,7 +4,7 @@
<el-input v-model="filters.key" style="width: 20%;" placeholder="模糊查询"></el-input>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmProjectMCostUsers">查询</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectMCostUser xm_project_m_budget_cost_user-->
<el-table ref="table" :height="tableHeight" :data="xmProjectMCostUsers" show-summary @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProjectMCostUser/XmProjectMCostUserMng.vue

@ -19,7 +19,7 @@
<span style="margin-left:10px;font-size:14px;">外购人力总成本</span><el-tag type='warning'>{{selProject.planOutUserAt}}</el-tag>
</font>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectMCostUser xm_project_m_budget_cost_user-->
<el-table ref="table" :height="tableHeight" :data="xmProjectMCostUsers" show-summary @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="60"></el-table-column>

2
src/views/xm/core/xmProjectOptions/XmProjectOptionsMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+xm_project_options</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectOptions xm_project_options-->
<el-table :data="xmProjectOptionss" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProjectPhase/XmProjectPhaseAdd.vue

@ -1,6 +1,6 @@
<template>
<section class="page-container page-full-height border">
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--新增界面 XmProjectPhase xm_project_phase-->
<el-form :model="addForm" label-width="120px" :rules="addFormRules" ref="addForm">
<el-row class="border padding">

2
src/views/xm/core/xmProjectPhase/XmProjectPhaseEdit.vue

@ -1,6 +1,6 @@
<template>
<section class="page-container page-full-height border">
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--新增界面 XmProjectPhase xm_project_phase-->
<el-form :model="editForm" label-width="120px" :rules="editFormRules" ref="editForm">
<el-row class="border padding">

2
src/views/xm/core/xmProjectPhaseBaseline/XmProjectPhaseBaselineMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+xm_project_phase_baseline</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectPhaseBaseline xm_project_phase_baseline-->
<el-table :data="xmProjectPhaseBaselines" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProjectState/XmCockpit.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+项目指标日统计表</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectState 项目指标日统计表-->
<el-table :data="xmProjectStates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="45"></el-table-column>

2
src/views/xm/core/xmProjectState/XmProjectStateMng.vue

@ -11,7 +11,7 @@
<el-button type="success" @click="loadTasksToXmProjectState" icon="el-icon-s-data">刷新数据</el-button>
<el-button type="success" @click="loadTasksSettleToXmProjectState" icon="el-icon-s-data">刷新结算数据</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectState 项目指标日统计表-->
<el-table ref="table" :height="tableHeight" :data="xmProjectStates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="45"></el-table-column>

2
src/views/xm/core/xmProjectStateHis/XmProjectStateHisMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+xm_project_state_his</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectStateHis xm_project_state_his-->
<el-table :data="xmProjectStateHiss" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmProjectTaskTypeState/XmProjectTaskTypeStateMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+按任务类型汇总</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectTaskTypeState 按任务类型汇总-->
<el-table :data="xmProjectTaskTypeStates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="45"></el-table-column>

2
src/views/xm/core/xmProjectTemplate/XmProjectTemplateList.vue

@ -7,7 +7,7 @@
</el-select>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmProjectTemplates">查询</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectTemplate xm_project_template-->
<el-table :data="xmProjectTemplates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="45"></el-table-column>

2
src/views/xm/core/xmProjectTemplate/XmProjectTemplateMng.vue

@ -10,7 +10,7 @@
<el-button type="primary" @click="showAdd">+项目模板</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmProjectTemplate xm_project_template-->
<el-table :data="xmProjectTemplates" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="45"></el-table-column>

2
src/views/xm/core/xmQuestion/XmQuestionCenter.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+xm_question</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmQuestion xm_question-->
<el-table :data="xmQuestions" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

17
src/views/xm/core/xmQuestion/XmQuestionEdit.vue

@ -1,9 +1,8 @@
<template>
<section class="page-container page-full-height border padding">
<el-row >
<el-row class="page-main page-main-height">
<section class="page-container padding border">
<el-row class="page-main page-height-90 padding">
<el-form :model="editForm" :rules="editFormRules" ref="editForm">
<el-row class="padding-bottom">
<el-row>
<h2>{{editForm.name}}</h2>
<el-tooltip content="项目"><el-tag type="warning">{{selProject.name}} </el-tag></el-tooltip>
<el-divider direction="vertical"></el-divider>
@ -11,7 +10,7 @@
<el-divider direction="vertical"></el-divider>
<el-date-picker :clearable="false" style="width:150px;" type="date" placeholder="到期日期" v-model="editForm.endTime" value-format="yyyy-MM-dd" format="yyyy-MM-dd"></el-date-picker>
</el-row>
<el-row class="padding-bottom">
<el-row style="padding-bottom:10px;padding-top:10px;">
<el-steps :active="calcBugStep" simple finish-status="success">
<el-step title="已激活,待确认" description="创建后自动激活、关闭后重新激活)"></el-step>
<el-step title="已确认,待解决" description="业务确认缺陷后变为已确认"></el-step>
@ -114,7 +113,7 @@
<xm-menu-select :is-select-menu="true" @selected="onSelectedMenu" :sel-project="selProject"></xm-menu-select>
</el-drawer>
</el-row>
<el-row class="page-bottom page-bottom-height">
<el-row class="page-bottom page-height-10">
<el-button @click.native="handleCancel">取消</el-button>
<el-button v-if="editForm.bugStatus !='closed'" v-loading="load.edit" type="primary" @click.native="handleQuestion(editForm.bugStatus)" :disabled="load.edit==true">暂存</el-button>
<el-button v-if="editForm.bugStatus=='active'" v-loading="load.edit" type="primary" @click.native="handleQuestion('confirmed')" :disabled="load.edit==true">确认</el-button>
@ -126,8 +125,7 @@
<el-button v-if="editForm.bugStatus=='resolved'" v-loading="load.edit" type="primary" @click.native="handleQuestion('closed')" :disabled="load.edit==true">关闭</el-button>
<el-button v-if="editForm.bugStatus=='resolved'" v-loading="load.edit" type="primary" @click.native="handleQuestion('active')" :disabled="load.edit==true">重新激活</el-button>
<el-button v-if="editForm.bugStatus=='closed'" v-loading="load.edit" type="primary" @click.native="handleQuestion('active')" :disabled="load.edit==true">重新激活</el-button>
</el-row>
</el-row>
</el-row>
</section>
</template>
@ -425,7 +423,8 @@
.wf-main-context-box {
border:1px dashed #000;
margin-bottom: 10px;
margin-top: 30px;
margin-top: 30px;
padding:10px;
}
.wf-main-context p {
color: #585858;

249
src/views/xm/core/xmQuestion/XmQuestionMng.vue

@ -1,131 +1,132 @@
<template>
<section class="page-container padding">
<el-row class="page-header padding-bottom">
<el-select v-model="filters.bugStatus" placeholder="请选择状态" style="width:15%;" clearable @change="changeBugStatus">
<el-option v-for="(b,index) in options['bugStatus']" :value="b.optionValue" :key="index" :label="b.optionName">{{b.optionName}}
</el-option>
</el-select>
<el-select class="hidden-md-and-down" v-model="filters.priority" placeholder="紧急程度" style="width:15%;" clearable @change="changePriority">
<el-option v-for="(b,index) in options['urgencyLevel']" :value="b.optionValue" :key="index" :label="b.optionName">{{b.optionName}}
</el-option>
</el-select>
<el-select class="hidden-md-and-down" v-model="filters.bugSeverity" placeholder="请选择严重程度" clearable @change="changeBugSeverity">
<el-option v-for="(b,index) in options['bugSeverity']" :value="b.optionValue" :key="index" :label="b.optionName">{{b.optionName}}
</el-option>
</el-select>
<el-tag v-if=" filters.product " closable @close="clearProduct">{{this.filters.product.productName}}</el-tag>
<el-button v-else @click="showProductVisible" type="plian">选产品</el-button>
<el-button v-if=" !filters.menus || filters.menus.length==0" @click="showMenu"> 选择故事</el-button>
<el-tag v-else closable @close="clearFiltersMenu(filters.menus[0])">{{filters.menus[0].menuName.substr(0,5)}}({{filters.menus.length}})</el-tag>
<el-input style="width:200px;" v-model="filters.key" placeholder="缺陷名称">
<template slot="append">
<el-button @click="searchXmQuestions" type="primary" icon="el-icon-search"></el-button>
</template>
</el-input>
<el-button type="primary" icon="el-icon-plus" @click="showAdd">
</el-button>
<el-popover
placement="top-start"
title="更多查询条件或操作"
width="600"
trigger="click" >
<el-row>
<el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">产品:</font><el-tag v-if=" filters.product " closable @close="clearProduct">{{this.filters.product.productName}}</el-tag>
<el-button v-else @click="showProductVisible" type="plian">选产品</el-button>
</el-col>
<el-col :span="24" style="padding-top:12px;" v-if="!selProject">
<font class="more-label-font">项目:</font>
<el-tag v-if="filters.selProject && !selProject" closable @close="clearProject" @click="showProjectList(true)">{{ filters.selProject.name }}</el-tag>
<el-button v-else @click="showProjectList(true)" >选择项目</el-button>
</el-col>
<el-col :span="24" style="padding-top:12px;">
<font class="more-label-font">创建者:</font>
<el-button v-if="!filters.createUser" @click="showGroupUsers('createUser')">选择创建人</el-button>
<el-tag v-else closable @close="clearCreateUser" @click="showGroupUsers('createUser')">{{filters.createUser.username}}</el-tag>
<el-button v-if="!filters.createUser||filters.createUser.userid!=userInfo.userid" @click="setFiltersCreateUserAsMySelf">我的</el-button>
</el-col>
<el-col :span="24" style="padding-top:12px;">
<font class="more-label-font">指派给:</font>
<el-button v-if="!filters.handlerUsername" @click="showGroupUsers('handlerUser')">选择被指派人</el-button>
<el-tag v-else closable @close="clearHandler" @click="showGroupUsers('handlerUser')">{{filters.handlerUsername}}</el-tag>
<el-button v-if="filters.handlerUserid!=userInfo.userid" @click="setFiltersHandlerAsMySelf">我的</el-button>
</el-col>
<el-col :span="24" style="padding-top:12px;">
曾经由<el-button v-if="!filters.hisHandler||!filters.hisHandler.userid" @click="showGroupUsers('hisHandler')">执行人</el-button>
<el-tag v-else closable @close="clearHisHandler" @click="showGroupUsers('hisHandler')">{{filters.hisHandler.username}}</el-tag>
<el-button v-if="!filters.hisHandler||filters.hisHandler.userid!=userInfo.userid" @click="setFiltersHisHandlerAsMySelf">我的</el-button>
变更状态为
<el-select v-model="filters.hisHandleStatus" placeholder="请选择状态" clearable @change="changeHisHandleStatus">
<el-row class="page-main">
<!--列表 XmQuestion xm_question-->
<el-table ref="table" :height="tableHeight" :data="xmQuestions" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column prop="name" label="缺陷名称" min-width="200">
<template slot="header" slot-scope="scope">
<el-row>
<el-select v-model="filters.bugStatus" placeholder="请选择状态" style="width:15%;" clearable @change="changeBugStatus">
<el-option v-for="(b,index) in options['bugStatus']" :value="b.optionValue" :key="index" :label="b.optionName">{{b.optionName}}
</el-option>
</el-select>
</el-col>
<el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">故事:</font>
<font v-if=" filters.menus && filters.menus.length>0">
<el-tag v-for="(item,index) in filters.menus" :key="index" closable @close="clearFiltersMenu(item)">{{item.menuName.substr(0,10)}}</el-tag>
</font>
<el-button v-else @click="showMenu" type="plian">选故事</el-button>
</el-col>
<el-col :span="24" class="hidden-lg-and-up" style="padding-top:12px;">
<el-select v-model="filters.priority" placeholder="请选择紧急程度" clearable @change="changePriority">
</el-select>
<el-select class="hidden-md-and-down" v-model="filters.priority" placeholder="紧急程度" style="width:15%;" clearable @change="changePriority">
<el-option v-for="(b,index) in options['urgencyLevel']" :value="b.optionValue" :key="index" :label="b.optionName">{{b.optionName}}
</el-option>
</el-select>
</el-col>
<el-col :span="24" style="padding-top:12px;">
<el-select v-model="filters.solution" placeholder="请选择解决方案" clearable @change="changeSolution">
<el-option v-for="(b,index) in options['bugSolution']" :value="b.optionValue" :key="index" :label="b.optionName">{{b.optionName}}
<el-select class="hidden-md-and-down" v-model="filters.bugSeverity" placeholder="请选择严重程度" clearable @change="changeBugSeverity">
<el-option v-for="(b,index) in options['bugSeverity']" :value="b.optionValue" :key="index" :label="b.optionName">{{b.optionName}}
</el-option>
</el-select>
</el-col>
<el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">创建时间:</font>
<el-date-picker
v-model="dateRanger"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="完成日期"
value-format="yyyy-MM-dd"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-col>
<el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">最后更新时间:</font>
<el-date-picker
v-model="ltimeRanger"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="更新时间"
end-placeholder="更新时间"
value-format="yyyy-MM-dd"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-col>
<el-col :span="24" style="padding-top:5px;">
<el-button type="primary" icon="el-icon-search" @click="searchXmQuestions">查询</el-button>
<el-button @click="handleExport" icon="el-icon-download">导出</el-button>
</el-col>
</el-row>
<el-button slot="reference" icon="el-icon-more" circle></el-button>
</el-popover>
</el-row>
<el-row class="page-main">
<!--列表 XmQuestion xm_question-->
<el-table ref="table" :height="tableHeight" :data="xmQuestions" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="index" width="45"></el-table-column>
<el-table-column prop="name" label="缺陷名称" min-width="200" show-overflow-tooltip>
<el-tag v-if=" filters.product " closable @close="clearProduct">{{this.filters.product.productName}}</el-tag>
<el-button v-else @click="showProductVisible" type="plian">选产品</el-button>
<el-button v-if=" !filters.menus || filters.menus.length==0" @click="showMenu"> 选择故事</el-button>
<el-tag v-else closable @close="clearFiltersMenu(filters.menus[0])">{{filters.menus[0].menuName.substr(0,5)}}({{filters.menus.length}})</el-tag>
<el-input style="width:200px;" v-model="filters.key" placeholder="缺陷名称">
<template slot="append">
<el-button @click="searchXmQuestions" type="primary" icon="el-icon-search"></el-button>
</template>
</el-input>
<el-button type="primary" icon="el-icon-plus" @click="showAdd">
</el-button>
<el-popover
placement="top-start"
title="更多查询条件或操作"
width="600"
trigger="click" >
<el-row>
<el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">产品:</font><el-tag v-if=" filters.product " closable @close="clearProduct">{{this.filters.product.productName}}</el-tag>
<el-button v-else @click="showProductVisible" type="plian">选产品</el-button>
</el-col>
<el-col :span="24" style="padding-top:12px;" v-if="!selProject">
<font class="more-label-font">项目:</font>
<el-tag v-if="filters.selProject && !selProject" closable @close="clearProject" @click="showProjectList(true)">{{ filters.selProject.name }}</el-tag>
<el-button v-else @click="showProjectList(true)" >选择项目</el-button>
</el-col>
<el-col :span="24" style="padding-top:12px;">
<font class="more-label-font">创建者:</font>
<el-button v-if="!filters.createUser" @click="showGroupUsers('createUser')">选择创建人</el-button>
<el-tag v-else closable @close="clearCreateUser" @click="showGroupUsers('createUser')">{{filters.createUser.username}}</el-tag>
<el-button v-if="!filters.createUser||filters.createUser.userid!=userInfo.userid" @click="setFiltersCreateUserAsMySelf">我的</el-button>
</el-col>
<el-col :span="24" style="padding-top:12px;">
<font class="more-label-font">指派给:</font>
<el-button v-if="!filters.handlerUsername" @click="showGroupUsers('handlerUser')">选择被指派人</el-button>
<el-tag v-else closable @close="clearHandler" @click="showGroupUsers('handlerUser')">{{filters.handlerUsername}}</el-tag>
<el-button v-if="filters.handlerUserid!=userInfo.userid" @click="setFiltersHandlerAsMySelf">我的</el-button>
</el-col>
<el-col :span="24" style="padding-top:12px;">
曾经由<el-button v-if="!filters.hisHandler||!filters.hisHandler.userid" @click="showGroupUsers('hisHandler')">执行人</el-button>
<el-tag v-else closable @close="clearHisHandler" @click="showGroupUsers('hisHandler')">{{filters.hisHandler.username}}</el-tag>
<el-button v-if="!filters.hisHandler||filters.hisHandler.userid!=userInfo.userid" @click="setFiltersHisHandlerAsMySelf">我的</el-button>
变更状态为
<el-select v-model="filters.hisHandleStatus" placeholder="请选择状态" clearable @change="changeHisHandleStatus">
<el-option v-for="(b,index) in options['bugStatus']" :value="b.optionValue" :key="index" :label="b.optionName">{{b.optionName}}
</el-option>
</el-select>
</el-col>
<el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">故事:</font>
<font v-if=" filters.menus && filters.menus.length>0">
<el-tag v-for="(item,index) in filters.menus" :key="index" closable @close="clearFiltersMenu(item)">{{item.menuName.substr(0,10)}}</el-tag>
</font>
<el-button v-else @click="showMenu" type="plian">选故事</el-button>
</el-col>
<el-col :span="24" class="hidden-lg-and-up" style="padding-top:12px;">
<el-select v-model="filters.priority" placeholder="请选择紧急程度" clearable @change="changePriority">
<el-option v-for="(b,index) in options['urgencyLevel']" :value="b.optionValue" :key="index" :label="b.optionName">{{b.optionName}}
</el-option>
</el-select>
</el-col>
<el-col :span="24" style="padding-top:12px;">
<el-select v-model="filters.solution" placeholder="请选择解决方案" clearable @change="changeSolution">
<el-option v-for="(b,index) in options['bugSolution']" :value="b.optionValue" :key="index" :label="b.optionName">{{b.optionName}}
</el-option>
</el-select>
</el-col>
<el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">创建时间:</font>
<el-date-picker
v-model="dateRanger"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="完成日期"
value-format="yyyy-MM-dd"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-col>
<el-col :span="24" style="padding-top:5px;">
<font class="more-label-font">最后更新时间:</font>
<el-date-picker
v-model="ltimeRanger"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="更新时间"
end-placeholder="更新时间"
value-format="yyyy-MM-dd"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-col>
<el-col :span="24" style="padding-top:5px;">
<el-button type="primary" icon="el-icon-search" @click="searchXmQuestions">查询</el-button>
<el-button @click="handleExport" icon="el-icon-download">导出</el-button>
</el-col>
</el-row>
<el-button slot="reference" icon="el-icon-more" circle></el-button>
</el-popover>
</el-row>
</template>
<template slot-scope="scope">
<div>
<span>
@ -155,10 +156,9 @@
</el-tooltip>
<el-button icon="el-icon-upload2" v-if="!scope.row.flowState" @click="handleCommand({type:'sendToProcessApprova',data:scope.row,bizKey:'xm_question_up_approva'})">{{qtype=='risk'?'升级':'升级'}}</el-button>
</span>
<el-badge :value="getBadge(scope.row)">
<el-link type="primary" @click="showEdit(scope.row)">{{scope.row.name}}</el-link>
</el-badge>
<el-badge :value="getBadge(scope.row)">
<el-link type="primary" @click="showEdit(scope.row)">{{scope.row.name}}</el-link>
</el-badge>
</span>
</div>
</template>
@ -905,7 +905,6 @@
var subHeight=70/1000 * window.innerHeight;
this.tableHeight = window.innerHeight -clientRect.y - this.$refs.table.$el.offsetTop-subHeight;
this.getXmQuestions();
});
listOption([{categoryId:'all',itemCode:'bugSeverity'},{categoryId:'all',itemCode:'bugSolution'},{categoryId:'all',itemCode:'bugStatus'},{categoryId:'all',itemCode:'bugType'},{categoryId:'all',itemCode:'urgencyLevel'}] ).then(res=>{
if(res.data.tips.isOk){
this.options['bugSeverity']=res.data.data.bugSeverity
@ -915,6 +914,8 @@
this.options['urgencyLevel']=res.data.data.urgencyLevel
}
});
});
}
}

2
src/views/xm/core/xmQuestionHandle/XmQuestionHandleMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+xm_question_handle</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmQuestionHandle xm_question_handle-->
<el-table :data="xmQuestionHandles" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmQuestionTag/XmQuestionTagMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" @click="showAdd">+缺陷标签关联表</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmQuestionTag 缺陷标签关联表-->
<el-table :data="xmQuestionTags" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmRecord/XmRecord.vue

@ -5,7 +5,7 @@
<el-radio v-model="filters.objType" v-for="i in objTypeOptions" :label="i.key" :key="i.key">{{i.name}}</el-radio>
<el-button type="primary" v-loading="load.list" :disabled="load.list==true" v-on:click="searchXmRecords">查询</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmRecord xm_record-->
<el-table ref="table" :height="tableHeight" :data="xmRecords" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="index" width="40"></el-table-column>

487
src/views/xm/core/xmTask/XmTaskAdd.vue

@ -1,168 +1,194 @@
<template>
<section class="page-container page-full-height padding border">
<el-row>
<!--新增界面 XmTask xm_task-->
<el-form :model="addForm" label-width="120px" :rules="addFormRules" ref="addForm">
<el-form-item label="项目名称">
<span>{{addForm.projectName}}</span>
</el-form-item>
<el-form-item v-if="parentTask!=null" label="父任务名称">
<span>{{parentTask.sortLevel}}</span>&nbsp;&nbsp;<span>{{parentTask.name}}</span>
</el-form-item>
<el-form-item v-else label="父任务名称">
无上级
</el-form-item>
<el-form-item label="任务名称" prop="name">
<el-input v-model="addForm.name" placeholder="任务名称" ></el-input>
</el-form-item>
<el-form-item label="排序号" prop="sortLevel">
<el-input v-model="addForm.sortLevel" placeholder="如1.0或者1.2.3等" ></el-input><span v-if="parentTask" style="color:red">建议{{parentTask.sortLevel}}.1</span>
</el-form-item>
<el-form-item label="计划类型" prop="planType">
<el-select v-model=" addForm.planType">
<el-option v-for="i in this.options.planType" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
</el-form-item>
<el-form-item label="任务类型" prop="taskType">
<el-select v-model=" addForm.taskType">
<el-option v-for="i in this.options.taskType" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
</el-form-item>
<el-form-item label="所属故事" prop="menuId">
{{addForm.menuId}}:{{addForm.menuName}} <el-button @click="menuVisible=true" round>选择归属故事</el-button>
</el-form-item>
<el-form-item label="紧急程度" prop="level">
<el-radio-group v-model="addForm.level">
<el-radio v-for="i in options.urgencyLevel" :label="i.optionValue" :key="i.optionValue">{{i.optionName}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="里程碑" prop="milestone">
<el-checkbox v-model="addForm.milestone" :true-label="1" :false-label="0">标记为里程碑</el-checkbox>
</el-form-item>
<el-form-item prop="skill" label="技能要求">
<el-button class="useradd-icon" type="text" @click.stop="showSkill()" icon="el-icon-circle-plus-outline">增加</el-button>
<el-tag class="fs-ft" style="margin-right:10px" v-for="(item,i) in taskSkills" :key="i">{{item.taskSkillName}}</el-tag>
</el-form-item>
<el-form-item label="前置任务名称">
<el-tag v-if="addForm.preTaskid" @close="clearPreTask" closable >{{addForm.preTaskname}}</el-tag>
<el-button @click.stop="selectTaskVisible=true" >选前置任务</el-button>
<section class="page-container padding">
<el-row class="page-header padding">
<el-button type="text" @click="goAnchor('baseInfoAdd')">基础信息</el-button>
<el-button type="text" @click="goAnchor('planInfoAdd')">进度计划</el-button>
<el-button type="text" @click="goAnchor('costInfoAdd')">工作量与成本</el-button>
<el-button type="text" @click="goAnchor('settleInfoAdd')">结算信息</el-button>
<el-button type="text" @click="goAnchor('menuInfoAdd')">故事明细</el-button>
<el-button type="text" @click="goAnchor('taskOutAdd')">众包</el-button>
</el-row>
<el-row class="page-main page-height-80">
<!--新增界面 XmTask xm_task-->
<el-form :model="addForm" label-width="100px" :rules="addFormRules" ref="addForm">
<el-card class="box-card" header="基础信息" id="baseInfoAdd" shadow="hover">
<el-steps :active="calcTaskStep" align-center finish-status="success">
<el-step title="待领取"></el-step>
<el-step title="执行中"></el-step>
<el-step title="已完工待结算"></el-step>
<el-step title="已结算"></el-step>
</el-steps>
<el-form-item label="任务名称" prop="name">
<el-row>
<el-col :span="24" style="padding-left:10px;">
<el-input v-model="addForm.name" placeholder="任务名称" ></el-input>
<el-tooltip content="归属项目"><el-tag>{{addForm.projectName}}</el-tag></el-tooltip>
<el-divider direction="vertical"></el-divider>
<el-tooltip content="上级" >
<el-tag v-if="parentTask!=null"><span >{{parentTask.sortLevel}}</span>&nbsp;&nbsp;<span>{{parentTask.name}}</span></el-tag>
<el-tag v-else>无上级</el-tag>
</el-tooltip>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="排序号" prop="sortLevel">
<el-input v-model="addForm.sortLevel" style="width:30%;" placeholder="如1.0或者1.2.3等" ></el-input> <font style="color:red;">如1.0或者1.2.3等</font>
<el-checkbox v-model="addForm.milestone" :true-label="1" :false-label="0">标记为里程碑</el-checkbox>
</el-form-item>
<el-form-item label="前置任务">
<el-tag v-if="addForm.preTaskid" @close="clearPreTask" closable >{{addForm.preTaskname}}</el-tag>
<el-button @click.stop="selectTaskVisible=true" >选前置任务</el-button>
</el-form-item>
<el-form-item label="紧急程度" prop="planType">
<el-select v-model="addForm.level">
<el-option v-for="i in options.urgencyLevel" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
<el-tooltip content="任务类型"><el-select v-model=" addForm.taskType">
<el-option v-for="i in this.options.taskType" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
</el-tooltip>
</el-form-item>
<el-form-item label="所属故事" prop="menuId" id="menuInfoAdd">
{{addForm.menuName}} <el-button @click="menuVisible=true" round>选择归属故事</el-button>
</el-form-item>
<el-form-item prop="skill" label="技能要求">
<el-button class="useradd-icon" type="text" @click.stop="showSkill()" icon="el-icon-circle-plus-outline">增加</el-button>
<el-tag class="fs-ft" style="margin-right:10px" v-for="(item,i) in taskSkills" :key="i">{{item.taskSkillName}}</el-tag>
</el-form-item>
<el-form-item label="任务描述" prop="description">
<el-input type="textarea" :autosize="{ minRows: 4, maxRows: 10}" v-model="addForm.description" placeholder="任务描述" ></el-input>
</el-form-item>
</el-card>
<el-card class="box-card" id="planInfoAdd" header="进度计划" shadow="hover">
<el-form-item label="任务负责人">
<el-tag v-if="addForm.createUserid" style="margin-left:10px;border-radius:30px;" >{{addForm.createUsername}}</el-tag>
<el-tag v-else style="margin-left:10px;border-radius:30px;" icon="el-icon-right" >未设置</el-tag>
<el-button @click="showGroupUserSelect(addForm)" icon="el-icon-setting">设置负责人</el-button>
</el-form-item>
<el-form-item label="预计时间">
<el-tooltip content="计划类型">
<el-select v-model=" addForm.planType" style="width:20%;">
<el-option v-for="i in this.options.planType" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
</el-tooltip>
<el-date-picker
v-model="budgetDateRanger"
@change="onBudgetDateRangerChange"
class="hidden-sm-and-down"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="计划开始日期"
end-placeholder="计划完成日期"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-form-item>
<el-form-item label="实际时间" prop="actStartTime">
<el-date-picker
v-model="actDateRanger"
class="hidden-sm-and-down"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="实际开始日期"
end-placeholder="实际完成日期"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-form-item>
<el-form-item label="实际进度" prop="rate">
<el-slider
v-model="addForm.rate"
show-input>
</el-slider>
</el-form-item>
</el-card>
<el-card class="box-card" header="工作量、成本" id="costInfoAdd">
<el-form-item label="预估工作量" prop="budgetWorkload">
<el-input-number v-model="addForm.budgetWorkload" @change="onBudgetWorkloadChange" :precision="2" :step="8" :min="0" placeholder="预计总工作量(人时,不包括下一级)"></el-input-number> <el-tag>人时{{this.toFixed(addForm.budgetWorkload/8/20)}}人月</el-tag>
</el-form-item>
<el-form-item label="预估金额" prop="taskOut">
<el-checkbox v-model="addForm.taskOut" @change="onTaskOutChange" true-label="1" false-label="0">是否为众包任务</el-checkbox>
<el-input-number v-model="addForm.budgetCost" :precision="2" :step="1000" :min="0" placeholder="预算金额"></el-input-number>
</el-form-item>
<el-form-item label="实际工作量" prop="actWorkload" shadow="hover">
<el-input-number v-model="addForm.actWorkload" :precision="2" :step="8" :min="0" placeholder="实际工作量"></el-input-number> <el-tag>由后台自动计算无需填写</el-tag>
</el-form-item>
<el-form-item label="实际金额" prop="actCost">
<el-input-number v-model="addForm.actCost" :precision="2" :step="1000" :min="0" placeholder="实际金额"></el-input-number> <el-tag>由后台自动计算无需填写</el-tag>
</el-form-item>
</el-card>
<el-card class="box-card" header="结算信息" id="settleInfoAdd" shadow="hover">
<el-form-item label="是否结算" prop="taskClass">
<el-checkbox v-model="addForm.taskClass" true-label="1" false-label="0">是否需要结算</el-checkbox>
</el-form-item>
<el-form-item v-if="addForm.taskClass=='1'" label="结算方案" prop="settlSchemel">
<el-select v-model=" addForm.settleSchemel">
<el-option v-for="i in options.xmTaskSettleSchemel" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
</el-form-item>
</el-card>
</el-form-item>
<el-form-item label="预计时间">
<el-date-picker
v-model="budgetDateRanger"
@change="onBudgetDateRangerChange"
class="hidden-sm-and-down"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="计划开始日期"
end-placeholder="计划完成日期"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-form-item>
<el-form-item label="预估工作量" prop="budgetWorkload">
<el-input-number v-model="addForm.budgetWorkload" @change="onBudgetWorkloadChange" :precision="2" :step="8" :min="0" placeholder="预计总工作量(人时,不包括下一级)"></el-input-number> <el-tag>人时{{this.toFixed(addForm.budgetWorkload/8/20)}}人月</el-tag>
</el-form-item>
<el-form-item label="预估金额" prop="taskOut">
<el-checkbox v-model="addForm.taskOut" @change="onTaskOutChange" true-label="1" false-label="0">外包任务</el-checkbox>
<el-input-number v-model="addForm.budgetCost" :precision="2" :step="1000" :min="0" placeholder="预算金额"></el-input-number>
</el-form-item>
<!--
<el-form-item label="实际时间" prop="actStartTime">
<el-date-picker
v-model="actDateRanger"
class="hidden-sm-and-down"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="实际开始日期"
end-placeholder="实际完成日期"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-form-item>
<el-card class="box-card" header="众包" id="taskOutAdd">
<el-form-item label="众包配置" prop="taskOut">
<el-checkbox v-model="addForm.taskOut" @change="onTaskOutChange" true-label="1" false-label="0">外包任务</el-checkbox>
<el-checkbox v-model="addForm.toTaskCenter" true-label="1" false-label="0" id="taskOut">发布到互联网任务大厅</el-checkbox>
--->
<el-form-item label="任务描述" prop="description">
<el-input type="textarea" :autosize="{ minRows: 4, maxRows: 10}" v-model="addForm.description" placeholder="任务描述" ></el-input>
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-input type="textarea" :autosize="{ minRows: 4, maxRows: 10}" v-model="addForm.remarks" placeholder="备注" ></el-input>
</el-form-item>
<!--
<el-form-item label="实际工作量" prop="actWorkload">
<el-input-number v-model="addForm.actWorkload" :precision="2" :step="8" :min="0" placeholder="实际工作量"></el-input-number> <el-tag>参考{{refActWorkload}}人时{{this.toFixed(refActWorkload/8/20)}}人月</el-tag>
</el-form-item>
<el-form-item label="实际金额" prop="actCost">
<el-input-number v-model="addForm.actCost" :precision="2" :step="1000" :min="0" placeholder="实际金额"></el-input-number>
</el-form-item>
-->
<!--
<el-form-item label="任务状态" prop="taskState">
<el-radio-group v-model="addForm.taskState">
<el-radio label="0">待领取</el-radio>
<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 label="其它配置" prop="taskClass">
<el-checkbox v-model="addForm.taskClass" true-label="1" false-label="0">是否需要结算</el-checkbox>
<el-checkbox v-model="addForm.toTaskCenter" true-label="1" false-label="0">发布到互联网任务大厅</el-checkbox>
</el-form-item>
<el-form-item v-if="addForm.taskClass=='1'" label="结算方案" prop="settlSchemel">
<el-select v-model=" addForm.settleSchemel">
<el-option v-for="i in options.xmTaskSettleSchemel" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
</el-form-item>
<!--
<el-form-item label="任务创建人">
<span>{{userInfo.username}}</span>
</el-form-item>
-->
<el-form-item>
<el-col :span="24" :offset="8">
<el-button @click.native="handleCancel">取消</el-button>
<el-button v-loading="load.add" type="primary" @click.native="addSubmit" :disabled="load.add==true">提交</el-button>
</el-col>
</el-form-item>
</el-form-item>
<el-form-item label="众包流程" prop="taskOut">
<el-steps :active="calcTaskStep" align-center>
<el-step title="发布" description="任务创建成功后即发布"></el-step>
<el-step title="竞标" description="候选人参与竞标,或者由责任人主动设置候选人"></el-step>
<el-step title="执行" description="候选人中标后,成为执行人,执行任务"></el-step>
<el-step title="验收" description="任务完成后提交验收,验收通过,即可进行结算"></el-step>
<el-step title="结算" description="提交结算申请审批流程,审批过程自动根据审批结果进行结算"></el-step>
<el-step title="企业付款" description="结算流程审批通过,自动付款到个人钱包"></el-step>
<el-step title="提现" description="企业付款完成后,个人对钱包中余额进行提现"></el-step>
</el-steps>
</el-form-item>
</el-card>
</el-form>
</el-row>
<el-row class="page-bottom padding">
<el-button @click.native="handleCancel">取消</el-button>
<el-button v-loading="load.add" type="primary" @click.native="addSubmit" :disabled="load.add==true">提交</el-button>
</el-row>
<!-- <el-drawer append-to-body :title="'技能要求'" :visible.sync="skillVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-skill-mng :visible="skillVisible" :task-id="addForm.id" @cancel="skillVisible=false" @getSkill="getSkill"></xm-skill-mng>
</el-drawer> -->
<el-drawer append-to-body title="选择负责人" :visible.sync="groupUserSelectVisible" size="80%" :close-on-click-modal="false">
<xm-project-group-select :visible="groupUserSelectVisible" :sel-project="xmProject" :isSelectSingleUser="1" @user-confirm="groupUserSelectConfirm"></xm-project-group-select>
</el-drawer>
<el-drawer append-to-body title="新增技能" :visible.sync="skillVisible" size="50%" :close-on-click-modal="false">
<skill-mng :task-skills="taskSkills" :jump="true" @select-confirm="onTaskSkillsSelected"></skill-mng>
</el-drawer>
<el-drawer append-to-body title="故事选择" :visible.sync="menuVisible" fullscreen :close-on-click-modal="false">
<el-drawer append-to-body title="故事选择" :visible.sync="menuVisible" fullscreen :close-on-click-modal="false">
<xm-menu-select :is-select-menu="true" @selected="onMenuSelected" :sel-project="xmProject"></xm-menu-select>
</el-drawer>
<el-drawer title="选中任务" :visible.sync="selectTaskVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-task-list :sel-project="xmProject" @task-selected="onSelectedTask"></xm-task-list>
</el-drawer>
</el-drawer>
<el-drawer append-to-body title="故事明细" :visible.sync="menuDetailVisible" size="80%" :close-on-click-modal="false">
<xm-menu-rich-detail :visible="menuDetailVisible" :reload="true" :xm-menu="{menuId:addForm.menuId,menuName:addForm.menuName}" ></xm-menu-rich-detail>
</el-drawer>
</section>
</template>
<script>
import util from '@/common/js/util';//
import { listOption } from '@/api/mdp/meta/itemOption';//
import {addTask, addXmTask } from '@/api/xm/core/xmTask';
import { listOption } from '@/api/mdp/meta/itemOption';//
import {addTask,addXmTask } from '@/api/xm/core/xmTask';
import { mapGetters } from 'vuex';
import {sn} from '@/common/js/sequence';
import xmSkillMng from '../xmTaskSkill/XmTaskSkillMng';
@ -170,31 +196,47 @@
import {batchAddSkill } from '@/api/xm/core/xmTaskSkill';
import xmMenuSelect from '../xmMenu/XmMenuSelect';
import XmTaskList from '../xmTask/XmTaskList';
import XmProjectGroupSelect from '../xmProjectGroup/XmProjectGroupSelect.vue';
export default {
export default {
computed: {
...mapGetters([
'userInfo','roles'
]),
]),
calcTaskStep(){
if(!this.addForm.executorUserid){
return 1
}else if(this.addForm.exeUsernames.indexOf('执行中')>=0){
return 2
}else if(this.addForm.exeUsernames.indexOf('已验收')>=0){
return 3
}else if(this.addForm.exeUsernames.indexOf('已验收')>=0){
return 3
}else if(this.addForm.exeUsernames.indexOf('已验收')>=0){
return 3
} if(this.addForm.exeUsernames.indexOf('已结算')>=0){
return 4
}
}
},
props:['xmTask','visible','xmProject','projectPhase',"parentTask"],
watch: {
'xmTask':function( xmTask ) {
'xmTask':function( xmTask ) {
},
'visible':function(visible) {
'visible':function(visible) {
this.fileVisible = visible;
if(visible==true){
if(this.parentTask){
this.addForm=Object.assign(this.addForm, this.parentTask);
this.addForm=Object.assign(this.addForm, this.parentTask);
this.addForm.parentTaskid=this.parentTask.id
this.addForm.parentTaskname=this.parentTask.name;
this.addForm.parentTaskname=this.parentTask.name;
} else{
this.addForm.taskType=this.projectPhase.taskType
this.addForm.taskType=this.projectPhase.taskType
}
this.addForm.projectId=this.xmProject.id
this.addForm.projectName=this.xmProject.name
this.addForm.projectPhaseId=this.projectPhase.id
this.addForm.projectPhaseName=this.projectPhase.phaseName
this.addForm.projectPhaseName=this.projectPhase.phaseName
if(this.parentTask ){
if(this.parentTask.children){
this.addForm.sortLevel=this.parentTask.sortLevel+"."+(this.parentTask.children.length+1)
@ -202,12 +244,12 @@
this.addForm.sortLevel=this.parentTask.sortLevel+"."+1
}
}
this.addForm.id = sn();
this.addForm.id = sn();
//
}
},
},
},
data() {
data() {
const beginDate = new Date();
const endDate = new Date();
endDate.setTime(beginDate.getTime() + 3600 * 1000 * 24 * 7 * 4);
@ -218,7 +260,7 @@
planType:[],
priority:[],
xmTaskSettleSchemel:[],
},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
},// params=[{categoryId:'0001',itemCode:'sex'}] {'sex':[{optionValue:'1',optionName:'',seqOrder:'1',fp:'',isDefault:'0'},{optionValue:'2',optionName:'',seqOrder:'2',fp:'',isDefault:'0'}]}
load:{ list: false, edit: false, del: false, add: false },//...
addFormRules: {
name: [
@ -235,10 +277,10 @@
],
toTaskCenter: [
{ required: true, message: '请选择是否发布', trigger: 'blur' }
],
],
sortLevel: [
{ required: true, message: '排序号不能为空', trigger: 'blur' }
],
],
// execuser:[{
// validator: validateExec, trigger: 'blur'
// }],
@ -247,26 +289,28 @@
addForm: {
id:'',name:'',parentTaskid:'',parentTaskname:'',projectId:'',projectName:'',level:'3',sortLevel:'0',executorUserid:'',executorUsername:'',
preTaskid:'',preTaskname:'',startTime:'',endTime:'',milestone:'',description:'',remarks:'',createUserid:'',createUsername:'',createTime:'',taskOut:'0',
rate:'0',budgetCost:'',budgetWorkload:'',actCost:'',actWorkload:'',taskState:'0',taskClass:'0',toTaskCenter:'0',actStartTime:'',actEndTime:'',taskType:'kf',planType:'w2',settleSchemel:'quotePrice',
skill: [],
rate:0,budgetCost:'',budgetWorkload:'',actCost:'',actWorkload:'',taskState:'0',taskClass:'0',toTaskCenter:'0',actStartTime:'',actEndTime:'',taskType:'kf',planType:'w2',settleSchemel:'quotePrice',
},
/**begin 在下面加自定义属性,记得补上面的一个逗号**/
menuVisible:false,
menuDetailVisible:false,
skillVisible: false,
taskSkills: [],
selectTaskVisible:false,
execUserVisible:false,
groupUserSelectVisible:false,
budgetDateRanger: [
util.formatDate.format(beginDate, "yyyy-MM-dd HH:mm:ss"),
util.formatDate.format(endDate, "yyyy-MM-dd HH:mm:ss")
],
],
actDateRanger: [
],
],
pickerOptions: util.pickerOptions('datarange'),
/**end 在上面加自定义属性**/
}//end return
},//end data
methods: {
methods: {
// @cancel="addFormVisible=false"
handleCancel:function(){
this.$emit('cancel');
@ -275,18 +319,18 @@
addSubmit: function () {
this.$refs.addForm.validate((valid) => {
if (valid) {
this.$confirm('确认提交吗?', '提示', {}).then(() => {
let params = Object.assign({}, this.addForm);
this.$confirm('确认提交吗?', '提示', {}).then(() => {
let params = Object.assign({}, this.addForm);
params.projectPhaseId=this.projectPhase.id
params.projectPhaseName=this.projectPhase.phaseName
if(this.budgetDateRanger.length>=2){
params.startTime=this.budgetDateRanger[0]
params.endTime=this.budgetDateRanger[1]
params.endTime=this.budgetDateRanger[1]
}
if(this.actDateRanger.length>=2){
params.actStartTime=this.actDateRanger[0]
params.actEndTime=this.actDateRanger[1]
}
}
addTask(params).then((res) => {
this.load.add=false
var tips=res.data.tips;
@ -294,12 +338,12 @@
//this.$refs['addForm'].resetFields();
this.$emit('submit');// @submit="afterAddSubmit"
}
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.add=false);
});
}
});
},
},
formatDate: function(time) {
const date = new Date(time);
const m = date.getMonth()+1;
@ -307,9 +351,9 @@
return date.getFullYear()+"-"+(m < 10 ? "0"+m : m)+"-"+ (d < 10 ? "0"+d : d) + " 00:00:00";
},
/**begin 在下面加自定义方法,记得补上面的一个逗号**/
showSkill(){
showSkill(){
this.skillVisible = true;
},
onMenuSelected:function(menu){
@ -319,7 +363,7 @@
},
onTaskSkillsSelected(skills) {
let taskSkill = [];
skills.forEach(i=>{
skills.forEach(i=>{
let obj = {
taskId: this.addForm.id,
taskSkillId: i.skillId,
@ -333,13 +377,13 @@
this.load.add=false
var tips=res.data.tips;
if(tips.isOk){
this.skillVisible = false;
this.skillVisible = false;
// this.getXmTasks();
}
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
this.$message({showClose: true, message: tips.msg, type: tips.isOk?'success':'error' });
}).catch( err => this.load.add=false);
},
},
getWeekday(first, last) {
//getDay()
@ -368,43 +412,43 @@
var start= new Date(this.budgetDateRanger[0]);
var end= new Date(this.budgetDateRanger[1]);
var weekday=this.getWeekday(start,end);
this.addForm.budgetWorkload=weekday * 8
var price=80;
if(this.addForm.taskOut=='1'){
if(this.projectPhase.phaseBudgetOutUserPrice){
if(this.projectPhase.phaseBudgetOutUserPrice){
price=this.projectPhase.phaseBudgetOutUserPrice
}
}
}else{
if(this.projectPhase.phaseBudgetInnerUserPrice){
if(this.projectPhase.phaseBudgetInnerUserPrice){
price=this.projectPhase.phaseBudgetInnerUserPrice
}
}
}
this.addForm.budgetCost=this.addForm.budgetWorkload * price
this.addForm.budgetCost=this.addForm.budgetWorkload * price
},
onBudgetWorkloadChange(){
var price=80;
if(this.addForm.taskOut=='1'){
if( this.projectPhase && this.projectPhase.phaseBudgetOutUserPrice){
if( this.projectPhase && this.projectPhase.phaseBudgetOutUserPrice){
price=this.projectPhase.phaseBudgetOutUserPrice
}else if( this.xmProject && this.xmProject.planOutUserPrice){
price=this.xmProject.planOutUserPrice
}
}else{
if( this.projectPhase && this.projectPhase.phaseBudgetInnerUserPrice){
if( this.projectPhase && this.projectPhase.phaseBudgetInnerUserPrice){
price=this.projectPhase.phaseBudgetInnerUserPrice
}else if( this.xmProject && this.xmProject.planInnerUserPrice){
price=this.xmProject.planInnerUserPrice
}
}
}
this.addForm.budgetCost=this.addForm.budgetWorkload * price
this.addForm.budgetCost=this.addForm.budgetWorkload * price
},
onTaskOutChange(){
this.onBudgetWorkloadChange();
},
onSelectedTask(task){
this.selectTaskVisible=false;
if(task){
if(task){
this.addForm.preTaskid=task.id
this.addForm.preTaskname=task.name
}
@ -412,28 +456,75 @@
clearPreTask(){
this.addForm.preTaskid=''
this.addForm.preTaskname=''
}
},
goAnchor :function(id){
document.querySelector("#"+id).scrollIntoView(true);
},
setSkills(){
if(this.addForm.taskSkillIds && this.addForm.taskSkillNames){
var skillNames=this.addForm.taskSkillNames.split(",");
this.taskSkills=this.addForm.taskSkillIds.split(",").map((item,index)=>{
return {
taskId:this.addForm.id,
taskSkillId:item,
taskSkillName:skillNames[index]
}
})
}
},
showExecusers() {
this.execUserVisible = true;
},
toJoin(){
if(this.addForm.exeUserids && this.addForm.exeUserids.indexOf(this.userInfo.userid)>=0){
this.$message.success("你已经加入该任务了");
return;
}
this.execUserVisible=true;
this.$nextTick(()=>{
this.$refs.execuserMng.toJoin();
})
},
/**end 在上面加自定义方法**/
showGroupUserSelect:function(){
this.groupUserSelectVisible=true;
},
groupUserSelectConfirm:function(users){
if( users==null || users.length==0 ){
this.groupUserSelectVisible=false;
return
}
this.addForm.createUserid=users[0].userid
this.addForm.createUsername=users[0].username
},
toMenu(){
this.menuDetailVisible=true
},
},//end method
components: {
components: {
xmSkillMng,
skillMng,xmMenuSelect,XmTaskList
skillMng,xmMenuSelect,XmTaskList,XmProjectGroupSelect
// 'xm-task-edit':XmTaskEdit
},
mounted() {
console.log("taskAdd_mount");
if(this.parentTask){
this.addForm=Object.assign(this.addForm, this.parentTask);
this.addForm=Object.assign(this.addForm, this.parentTask);
this.addForm.parentTaskid=this.parentTask.id
this.addForm.parentTaskname=this.parentTask.name;
this.addForm.taskType=this.parentTask.taskType
this.addForm.planType=this.parentTask.planType
this.addForm.taskType=this.parentTask.taskType
this.addForm.planType=this.parentTask.planType
}else{
this.addForm.taskType=this.projectPhase.taskType
this.addForm.taskType=this.projectPhase.taskType
}
this.addForm.projectId=this.xmProject.id
this.addForm.projectName=this.xmProject.name
this.addForm.projectName=this.xmProject.name
this.addForm.projectPhaseId=this.projectPhase.id
this.addForm.projectPhaseName=this.projectPhase.phaseName
if(this.parentTask ){
@ -448,7 +539,7 @@
this.options=res.data.data;
})
/**在下面写其它函数***/
}//end mounted
}
@ -461,4 +552,4 @@
.el-form-item__content{
margin-left: 0;
}
</style>
</style>

312
src/views/xm/core/xmTask/XmTaskEdit.vue

@ -1,163 +1,173 @@
<template>
<section class="page-container page-full-height padding">
<el-row>
<section class="page-container padding">
<el-row class="page-header padding">
<el-button type="text" @click="goAnchor('baseInfo')">基础信息</el-button>
<el-button type="text" @click="goAnchor('planInfo')">进度计划</el-button>
<el-button type="text" @click="goAnchor('costInfo')">工作量与成本</el-button>
<el-button type="text" @click="goAnchor('settleInfo')">结算信息</el-button>
<el-button type="text" @click="goAnchor('menuInfo')">故事明细</el-button>
<el-button type="text" @click="goAnchor('flowInfo')">流程说明</el-button>
<el-button type="text" @click="goAnchor('taskOut')">众包</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-80">
<!--新增界面 XmTask xm_task-->
<el-form :model="editForm" label-width="100px" :rules="editFormRules" ref="editForm">
<el-divider content-position="left" id="baseInfo">基本信息</el-divider>
<el-form :model="editForm" label-width="100px" :rules="editFormRules" ref="editForm">
<el-card class="box-card" header="基础信息" id="baseInfo" shadow="hover">
<el-steps :active="calcTaskStep" align-center finish-status="success">
<el-step title="待领取"></el-step>
<el-step title="执行中"></el-step>
<el-step title="已完工待结算"></el-step>
<el-step title="已结算"></el-step>
</el-steps>
<el-form-item label="任务名称" prop="name">
<el-row>
<el-col :span="24" style="padding-left:10px;">
<el-input v-model="editForm.name" placeholder="任务名称" ></el-input>
<el-tooltip content="归属项目"><el-tag>{{editForm.projectName}}</el-tag></el-tooltip>
<el-divider direction="vertical"></el-divider>
<el-tooltip content="上级" ><el-tag>{{editForm.parentTaskname?editForm.parentTaskname:"无上级"}}</el-tag></el-tooltip>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="排序号" prop="sortLevel">
<el-input v-model="editForm.sortLevel" style="width:30%;" placeholder="如1.0或者1.2.3等" ></el-input> <font style="color:red;">如1.0或者1.2.3等</font>
<el-checkbox v-model="editForm.milestone" :true-label="1" :false-label="0">标记为里程碑</el-checkbox>
</el-form-item>
<el-form-item label="前置任务">
<el-tag v-if="editForm.preTaskid" @close="clearPreTask" closable >{{editForm.preTaskname}}</el-tag>
<el-button @click.stop="selectTaskVisible=true" >选前置任务</el-button>
</el-form-item>
<el-form-item label="紧急程度" prop="planType">
<el-select v-model="editForm.level">
<el-option v-for="i in options.urgencyLevel" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
<el-tooltip content="任务类型"><el-select v-model=" editForm.taskType">
<el-option v-for="i in this.options.taskType" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
</el-tooltip>
</el-form-item>
<el-form-item label="所属故事" prop="menuId" id="menuInfo">
{{editForm.menuName}} <el-button @click="menuVisible=true" round>选择归属故事</el-button><el-button @click="toMenu" round></el-button>
</el-form-item>
<el-form-item prop="skill" label="技能要求">
<el-button class="useradd-icon" type="text" @click.stop="showSkill()" icon="el-icon-circle-plus-outline">增加</el-button>
<el-tag class="fs-ft" style="margin-right:10px" v-for="(item,i) in taskSkills" :key="i">{{item.taskSkillName}}</el-tag>
</el-form-item>
<el-form-item label="任务描述" prop="description">
<el-input type="textarea" :autosize="{ minRows: 4, maxRows: 10}" v-model="editForm.description" placeholder="任务描述" ></el-input>
</el-form-item>
<el-divider content-position="left" id="planInfo">进度计划</el-divider>
<el-form-item label="任务负责人">
<el-tag v-if="editForm.createUserid" style="margin-left:10px;border-radius:30px;" >{{editForm.createUsername}}</el-tag>
<el-tag v-else style="margin-left:10px;border-radius:30px;" icon="el-icon-right" >未设置</el-tag>
<el-button @click="showGroupUserSelect(editForm)" icon="el-icon-setting">设置负责人</el-button>
</el-form-item>
<el-form-item label="任务执行人">
<el-tag style="margin-left:10px;border-radius:30px;" >{{editForm.exeUsernames}}</el-tag>
<el-button @click="showExecusers(editForm)" icon="el-icon-s-data">候选人管理</el-button>
<el-button type="primary" @click="toJoin" icon="el-icon-plus">我要加入</el-button>
</el-form-item>
<el-form-item label="预计时间">
<el-tooltip content="计划类型">
<el-select v-model=" editForm.planType" style="width:20%;">
<el-option v-for="i in this.options.planType" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
<el-form-item label="任务名称" prop="name">
<el-row>
<el-col :span="24" style="padding-left:10px;">
<el-input v-model="editForm.name" placeholder="任务名称" ></el-input>
<el-tooltip content="归属项目"><el-tag>{{editForm.projectName}}</el-tag></el-tooltip>
<el-divider direction="vertical"></el-divider>
<el-tooltip content="上级" ><el-tag>{{editForm.parentTaskname?editForm.parentTaskname:"无上级"}}</el-tag></el-tooltip>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="排序号" prop="sortLevel">
<el-input v-model="editForm.sortLevel" style="width:30%;" placeholder="如1.0或者1.2.3等" ></el-input> <font style="color:red;">如1.0或者1.2.3等</font>
<el-checkbox v-model="editForm.milestone" :true-label="1" :false-label="0">标记为里程碑</el-checkbox>
</el-form-item>
<el-form-item label="前置任务">
<el-tag v-if="editForm.preTaskid" @close="clearPreTask" closable >{{editForm.preTaskname}}</el-tag>
<el-button @click.stop="selectTaskVisible=true" >选前置任务</el-button>
</el-form-item>
<el-form-item label="紧急程度" prop="planType">
<el-select v-model="editForm.level">
<el-option v-for="i in options.urgencyLevel" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
<el-tooltip content="任务类型"><el-select v-model=" editForm.taskType">
<el-option v-for="i in this.options.taskType" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
</el-tooltip>
<el-date-picker
v-model="budgetDateRanger"
@change="onBudgetDateRangerChange"
class="hidden-sm-and-down"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="计划开始日期"
end-placeholder="计划完成日期"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-form-item>
<el-form-item label="所属故事" prop="menuId" id="menuInfo">
{{editForm.menuName}} <el-button @click="menuVisible=true" round>选择归属故事</el-button><el-button @click="toMenu" round></el-button>
</el-form-item>
<el-form-item prop="skill" label="技能要求">
<el-button class="useradd-icon" type="text" @click.stop="showSkill()" icon="el-icon-circle-plus-outline">增加</el-button>
<el-tag class="fs-ft" style="margin-right:10px" v-for="(item,i) in taskSkills" :key="i">{{item.taskSkillName}}</el-tag>
</el-form-item>
<el-form-item label="任务描述" prop="description">
<el-input type="textarea" :autosize="{ minRows: 4, maxRows: 10}" v-model="editForm.description" placeholder="任务描述" ></el-input>
</el-form-item>
</el-card>
<el-card class="box-card" id="planInfo" header="进度计划" shadow="hover">
<el-form-item label="任务负责人">
<el-tag v-if="editForm.createUserid" style="margin-left:10px;border-radius:30px;" >{{editForm.createUsername}}</el-tag>
<el-tag v-else style="margin-left:10px;border-radius:30px;" icon="el-icon-right" >未设置</el-tag>
<el-button @click="showGroupUserSelect(editForm)" icon="el-icon-setting">设置负责人</el-button>
</el-form-item>
<el-form-item label="任务执行人">
<el-tag style="margin-left:10px;border-radius:30px;" >{{editForm.exeUsernames}}</el-tag>
<el-button @click="showExecusers(editForm)" icon="el-icon-s-data">候选人管理</el-button>
<el-button type="primary" @click="toJoin" icon="el-icon-plus">我要加入</el-button>
</el-form-item>
<el-form-item label="预计时间">
<el-tooltip content="计划类型">
<el-select v-model=" editForm.planType" style="width:20%;">
<el-option v-for="i in this.options.planType" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
</el-tooltip>
<el-date-picker
v-model="budgetDateRanger"
@change="onBudgetDateRangerChange"
class="hidden-sm-and-down"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="计划开始日期"
end-placeholder="计划完成日期"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-form-item>
<el-form-item label="实际时间" prop="actStartTime">
<el-date-picker
v-model="actDateRanger"
class="hidden-sm-and-down"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="实际开始日期"
end-placeholder="实际完成日期"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-form-item>
<el-form-item label="实际进度" prop="rate">
<el-slider
v-model="editForm.rate"
show-input>
</el-slider>
</el-form-item>
<el-divider content-position="left" id="costInfo">工作量成本</el-divider>
<el-form-item label="预估工作量" prop="budgetWorkload">
<el-input-number v-model="editForm.budgetWorkload" @change="onBudgetWorkloadChange" :precision="2" :step="8" :min="0" placeholder="预计总工作量(人时,不包括下一级)"></el-input-number> <el-tag>人时{{this.toFixed(editForm.budgetWorkload/8/20)}}人月</el-tag>
</el-form-item>
<el-form-item label="预估金额" prop="taskOut">
<el-checkbox v-model="editForm.taskOut" @change="onTaskOutChange" true-label="1" false-label="0">外包任务</el-checkbox>
<el-input-number v-model="editForm.budgetCost" :precision="2" :step="1000" :min="0" placeholder="预算金额"></el-input-number>
</el-form-item>
<el-divider content-position="left" id="settleInfo">结算信息<font style="color:red">实际数据由后台自动补齐无需手工添加</font></el-divider>
<el-form-item label="实际时间" prop="actStartTime">
<el-date-picker
v-model="actDateRanger"
class="hidden-sm-and-down"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="实际开始日期"
end-placeholder="实际完成日期"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00','23:59:59']"
:picker-options="pickerOptions"
></el-date-picker>
</el-form-item>
<el-form-item label="实际工作量" prop="actWorkload">
<el-input-number v-model="editForm.actWorkload" :precision="2" :step="8" :min="0" placeholder="实际工作量"></el-input-number> <el-tag>由后台自动计算无需填写</el-tag>
</el-form-item>
<el-form-item label="实际金额" prop="actCost">
<el-input-number v-model="editForm.actCost" :precision="2" :step="1000" :min="0" placeholder="实际金额"></el-input-number> <el-tag>由后台自动计算无需填写</el-tag>
</el-form-item>
<el-form-item label="其它配置" prop="taskClass">
<el-checkbox v-model="editForm.taskClass" true-label="1" false-label="0">是否需要结算</el-checkbox>
<el-checkbox v-model="editForm.toTaskCenter" true-label="1" false-label="0">发布到互联网任务大厅</el-checkbox>
</el-form-item>
<el-form-item v-if="editForm.taskClass=='1'" label="结算方案" prop="settlSchemel">
<el-select v-model=" editForm.settleSchemel">
<el-option v-for="i in options.xmTaskSettleSchemel" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
</el-form-item>
</el-form>
<el-divider content-position="left" id="flowInfo">流程说明</el-divider>
<el-row>
<el-steps :active="calcTaskStep" align-center>
<el-step title="发布" description="任务创建成功后即发布"></el-step>
<el-step title="竞标" description="候选人参与竞标,或者由责任人主动设置候选人"></el-step>
<el-step title="执行" description="候选人中标后,成为执行人,执行任务"></el-step>
<el-step title="验收" description="任务完成后提交验收,验收通过,即可进行结算"></el-step>
<el-step title="结算" description="提交结算申请审批流程,审批过程自动根据审批结果进行结算"></el-step>
<el-step title="企业付款" description="结算流程审批通过,自动付款到个人钱包"></el-step>
<el-step title="提现" description="企业付款完成后,个人对钱包中余额进行提现"></el-step>
</el-steps>
</el-row>
</el-form-item>
</el-card>
<el-card class="box-card" header="工作量、成本" id="costInfo">
<el-form-item label="预估工作量" prop="budgetWorkload">
<el-input-number v-model="editForm.budgetWorkload" @change="onBudgetWorkloadChange" :precision="2" :step="8" :min="0" placeholder="预计总工作量(人时,不包括下一级)"></el-input-number> <el-tag>人时{{this.toFixed(editForm.budgetWorkload/8/20)}}人月</el-tag>
</el-form-item>
<el-form-item label="预估金额" prop="taskOut">
<el-checkbox v-model="editForm.taskOut" @change="onTaskOutChange" true-label="1" false-label="0">是否为众包任务</el-checkbox>
<el-input-number v-model="editForm.budgetCost" :precision="2" :step="1000" :min="0" placeholder="预算金额"></el-input-number>
</el-form-item>
<el-form-item label="实际工作量" prop="actWorkload" shadow="hover">
<el-input-number v-model="editForm.actWorkload" :precision="2" :step="8" :min="0" placeholder="实际工作量"></el-input-number> <el-tag>由后台自动计算无需填写</el-tag>
</el-form-item>
<el-form-item label="实际金额" prop="actCost">
<el-input-number v-model="editForm.actCost" :precision="2" :step="1000" :min="0" placeholder="实际金额"></el-input-number> <el-tag>由后台自动计算无需填写</el-tag>
</el-form-item>
</el-card>
<el-card class="box-card" header="结算信息" id="settleInfo" shadow="hover">
<el-form-item label="是否结算" prop="taskClass">
<el-checkbox v-model="editForm.taskClass" true-label="1" false-label="0">是否需要结算</el-checkbox>
</el-form-item>
<el-form-item v-if="editForm.taskClass=='1'" label="结算方案" prop="settlSchemel">
<el-select v-model=" editForm.settleSchemel">
<el-option v-for="i in options.xmTaskSettleSchemel" :label="i.optionName" :key="i.optionValue" :value="i.optionValue"></el-option>
</el-select>
</el-form-item>
</el-card>
<el-card class="box-card" header="众包" id="taskOut">
<el-form-item label="众包配置" prop="taskOut">
<el-checkbox v-model="editForm.taskOut" @change="onTaskOutChange" true-label="1" false-label="0">外包任务</el-checkbox>
<el-checkbox v-model="editForm.toTaskCenter" true-label="1" false-label="0" id="taskOut">发布到互联网任务大厅</el-checkbox>
</el-form-item>
<el-form-item label="众包流程" prop="taskOut">
<el-steps :active="calcTaskStep" align-center>
<el-step title="发布" description="任务创建成功后即发布"></el-step>
<el-step title="竞标" description="候选人参与竞标,或者由责任人主动设置候选人"></el-step>
<el-step title="执行" description="候选人中标后,成为执行人,执行任务"></el-step>
<el-step title="验收" description="任务完成后提交验收,验收通过,即可进行结算"></el-step>
<el-step title="结算" description="提交结算申请审批流程,审批过程自动根据审批结果进行结算"></el-step>
<el-step title="企业付款" description="结算流程审批通过,自动付款到个人钱包"></el-step>
<el-step title="提现" description="企业付款完成后,个人对钱包中余额进行提现"></el-step>
</el-steps>
</el-form-item>
</el-card>
</el-form>
</el-row>
<el-row class="page-bottom">
<el-row class="page-bottom padding">
<el-button @click.native="handleCancel">取消</el-button>
<el-button v-loading="load.edit" type="primary" @click.native="editSubmit" :disabled="load.edit==true">提交</el-button>
<el-button v-loading="load.edit" type="primary" @click.native="editSubmit" :disabled="load.edit==true">提交</el-button>
</el-row>
<!-- <el-drawer append-to-body :title="'技能要求'" :visible.sync="skillVisible" size="80%" append-to-body :close-on-click-modal="false">
<xm-skill-mng :visible="skillVisible" :task-id="editForm.id" @cancel="skillVisible=false" @getSkill="getSkill"></xm-skill-mng>
</el-drawer> -->
<el-drawer append-to-body title="选择负责人" :visible.sync="groupUserSelectVisible" size="80%" :close-on-click-modal="false">
<xm-project-group-select :visible="groupUserSelectVisible" :sel-project="selProject" :isSelectSingleUser="1" @user-confirm="groupUserSelectConfirm"></xm-project-group-select>
<xm-project-group-select :visible="groupUserSelectVisible" :sel-project="xmProject" :isSelectSingleUser="1" @user-confirm="groupUserSelectConfirm"></xm-project-group-select>
</el-drawer>
<el-drawer append-to-body title="新增技能" :visible.sync="skillVisible" size="50%" :close-on-click-modal="false">
<skill-mng :task-skills="taskSkills" :jump="true" @select-confirm="onTaskSkillsSelected"></skill-mng>
@ -172,7 +182,7 @@
</el-drawer>
<el-drawer :title="'任务'+editForm.name+'的执行人'" :visible.sync="execUserVisible" fullscreen size="80%" append-to-body :close-on-click-modal="false">
<xm-execuser-mng :visible="execUserVisible" :xm-task="editForm" :is-my="isMy" @after-add-submit="afterAddExecSubmit" @after-edit-submit="afterEditExecSubmit" @after-delete-submit="afterExecuserSubmit" ref="execuserMng"></xm-execuser-mng>
<xm-execuser-mng :visible="execUserVisible" :xm-task="editForm" @after-add-submit="afterAddExecSubmit" @after-edit-submit="afterEditExecSubmit" @after-delete-submit="afterEditExecSubmit" ref="execuserMng"></xm-execuser-mng>
</el-drawer>
<el-drawer append-to-body title="故事明细" :visible.sync="menuDetailVisible" size="80%" :close-on-click-modal="false">
@ -224,9 +234,18 @@
'visible':function(visible) {
this.fileVisible = visible;
if(visible==true){
this.editForm=Object.assign(this.editForm, this.xmTask);
this.budgetDateRanger=[this.editForm.startTime,this.editForm.endTime]
this.actDateRanger=[this.editForm.actStartTime,this.editForm.actEndTime]
this.editForm=Object.assign(this.editForm, this.xmTask);
if(this.editForm.startTime && this.editForm.endTime){
this.budgetDateRanger=[this.editForm.startTime,this.editForm.endTime]
}else{
this.budgetDateRanger=[]
}
if(this.editForm.actStartTime && this.editForm.actEndTime){
this.actDateRanger=[this.editForm.actStartTime,this.editForm.actEndTime]
}else{
this.actDateRanger=[]
}
this.setSkills()
//
@ -273,7 +292,7 @@
editForm: {
id:'',name:'',parentTaskid:'',parentTaskname:'',projectId:'',projectName:'',level:'3',sortLevel:'0',executorUserid:'',executorUsername:'',
preTaskid:'',preTaskname:'',startTime:'',endTime:'',milestone:'',description:'',remarks:'',createUserid:'',createUsername:'',createTime:'',taskOut:'0',
rate:'0',budgetCost:'',budgetWorkload:'',actCost:'',actWorkload:'',taskState:'0',taskClass:'0',toTaskCenter:'0',actStartTime:'',actEndTime:'',taskType:'kf',planType:'w2',settleSchemel:'quotePrice',
rate:0,budgetCost:'',budgetWorkload:'',actCost:'',actWorkload:'',taskState:'0',taskClass:'0',toTaskCenter:'0',actStartTime:'',actEndTime:'',taskType:'kf',planType:'w2',settleSchemel:'quotePrice',
},
/**begin 在下面加自定义属性,记得补上面的一个逗号**/
@ -443,7 +462,7 @@
this.editForm.preTaskid=''
this.editForm.preTaskname=''
},
goAnchor :function(id){
goAnchor :function(id){
document.querySelector("#"+id).scrollIntoView(true);
},
setSkills(){
@ -514,9 +533,18 @@
// 'xm-task-edit':XmTaskEdit
},
mounted() {
this.editForm=Object.assign(this.editForm, this.xmTask);
this.budgetDateRanger=[this.editForm.startTime,this.editForm.endTime]
this.actDateRanger=[this.editForm.actStartTime,this.editForm.actEndTime]
this.editForm=Object.assign(this.editForm, this.xmTask);
if(this.editForm.startTime && this.editForm.endTime){
this.budgetDateRanger=[this.editForm.startTime,this.editForm.endTime]
}else{
this.budgetDateRanger=[]
}
if(this.editForm.actStartTime && this.editForm.actEndTime){
this.actDateRanger=[this.editForm.actStartTime,this.editForm.actEndTime]
}else{
this.actDateRanger=[]
}
this.setSkills();
listOption([{categoryId:'all',itemCode:'planType'},{categoryId:'all',itemCode:'taskType'},{categoryId:'all',itemCode:'urgencyLevel'},{categoryId:'all',itemCode:'priority'},{categoryId:'all',itemCode:'xmTaskSettleSchemel'}]).then(res=>{
this.options=res.data.data;

2
src/views/xm/core/xmTask/XmTaskList.vue

@ -5,7 +5,7 @@
<xm-project-phase-mng :sel-project="filters.selProject" :simple="true" @row-click="projectPhaseRowClick" @clear-select="clearSelectPhase"></xm-project-phase-mng>
</el-col>
<el-col :span=" filters.selProject?20:24">
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<el-tag>{{filters.selProject?filters.selProject.name:'未选择项目'}}</el-tag><el-button type="success" v-if="!selProject" @click="selectProjectVisible=true"></el-button>
<el-select v-model="filters.taskType" placeholder="请选择任务类型" clearable @change="changeTaskType">
<el-option class="showall" value="all" label="全部类型">全部类型</el-option>

8
src/views/xm/core/xmTask/XmTaskMng.vue

@ -1,6 +1,6 @@
<template>
<section>
<el-row v-show="batchEditVisible==false" class="page-main">
<section class="page-container padding">
<el-row v-show="batchEditVisible==false">
<el-col v-if="isTaskCenter!='1' && currentProject " :span="4" >
<xm-project-phase-mng :sel-project="currentProject" :simple="true" @row-click="projectPhaseRowClick" @clear-select="clearSelectPhase"></xm-project-phase-mng>
</el-col>
@ -136,7 +136,7 @@
<el-button slot="reference" icon="el-icon-more" circle></el-button>
</el-popover>
</el-row>
<el-row style="padding-top:12px;">
<el-row style="padding-top:10px;">
<el-table v-if="!gstcVisible"
show-summary
:data="tasksTreeData"
@ -302,7 +302,7 @@
</el-drawer>
<!-- 新增 XmTask xm_task界面-->
<el-drawer class="xm-task-add" title="新增任务" :visible.sync="addFormVisible" size="80%" append-to-body :close-on-click-modal="false">
<el-drawer class="xm-task-add" title="新增任务" :visible.sync="addFormVisible" :with-header="false" size="80%" append-to-body :close-on-click-modal="false">
<xm-task-add :xm-project="currentProject" :project-phase="currentProjectPhase" :xm-task="addForm" :parent-task="parentTask" :visible="addFormVisible" @cancel="addFormVisible=false" @submit="afterAddSubmit"></xm-task-add>
</el-drawer>

2
src/views/xm/core/xmTaskExecuser/XmTaskExecuserMng.vue

@ -7,7 +7,7 @@
<el-button type="primary" @click="showAdd">邀请他人加入</el-button>
<!-- <el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button> -->
</div>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmTaskExecuser xm_task_execuser-->
<el-table ref="table" :height="tableHeight" :data="xmTaskExecusers" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="expand">

2
src/views/xm/core/xmTaskSkill/XmTaskSkillMng.vue

@ -6,7 +6,7 @@
<el-button type="primary" v-loading="load.list" @click="showAdd">添加技能</el-button>
<el-button type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmTaskSkill xm_task_skill-->
<el-table :data="xmTaskSkills" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column sortable type="selection" width="40"></el-table-column>

2
src/views/xm/core/xmTaskTemplate/XmTaskTemplateMng.vue

@ -10,7 +10,7 @@
<el-button v-if="!isSelect" type="danger" v-loading="load.del" @click="batchDel" :disabled="this.sels.length===0 || load.del==true">批量删除</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<el-col :span="4" >
<xm-project-phase-template-mng :sel-project-template="selProjectTemplate" :simple="true" @row-click="projectPhaseTemplateRowClick" @selected-project-template="onSelectedProjectTemplate" ref="projectPhaseTemplate"></xm-project-phase-template-mng>

2
src/views/xm/core/xmTestCase/XmTestCaseMng.vue

@ -66,7 +66,7 @@
</el-popover>
</div>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmTestCase 测试用例-->
<el-table ref="table" :height="tableHeight" :data="xmTestCases" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="45"></el-table-column>

2
src/views/xm/core/xmTestCaseExec/XmTestCaseExecMng.vue

@ -76,7 +76,7 @@
<el-button type="warning" @click="batchEditXmTestCaseExec" icon="el-icon-finished">批量保存</el-button>
<el-button @click="noBatchEdit" icon="el-icon-back">返回</el-button>
</el-row>
<el-row class="page-main page-main-height">
<el-row class="page-main page-height-90">
<!--列表 XmTestCaseExec xm_test_case_exec-->
<el-table ref="table" :height="tableHeight" v-if="!gstcVisible" :data="xmTestCaseExecs" @sort-change="sortChange" highlight-current-row v-loading="load.list" border @selection-change="selsChange" @row-click="rowClick" style="width: 100%;">
<el-table-column type="selection" width="45"></el-table-column>

Loading…
Cancel
Save