|
@@ -1,149 +1,189 @@
|
|
|
<template>
|
|
|
<div class="sos" style="background-color:#F2F3F6;min-height:calc(100vh - 80px);padding:0 10px 10px 10px">
|
|
|
<div class="stylus-head">
|
|
|
- <div class="stylus-title">
|
|
|
- <span style="font-size: 22px;letter-spacing: 1px;font-weight: 600;color: #333B4A;padding-left: 15px">需求</span>
|
|
|
- <div class="new-tab-open">
|
|
|
- <!-- 这个可以放按钮 -->
|
|
|
- </div>
|
|
|
- <el-button type="primary" size="mini" @click="createDialogVisible = true">新建需求</el-button>
|
|
|
- </div>
|
|
|
- <el-divider style="color: #EEF0F5;" />
|
|
|
- <div class="Layout" style="padding-top: 5px">
|
|
|
- <div>
|
|
|
- <el-form :model="searchForm" class="Layout">
|
|
|
- <div class="Layout_flex_end" style="padding-left:15px">
|
|
|
- <div class="queryName">需求名称</div>
|
|
|
- <el-input v-model="requirementName" size="small" clearable style="width:72% !important;" placeholder="请搜索标题或ID或望岳ID" @change="getTableData()" />
|
|
|
- </div>
|
|
|
+ <mainTitle
|
|
|
+ title="需求"
|
|
|
+ btn-text="新建需求"
|
|
|
+ :tab-show="true"
|
|
|
+ @btn-handle="createDialogVisible = true"
|
|
|
+ @change-tab="changeTab"
|
|
|
+ />
|
|
|
+ <div v-if="nowTab === 'charts'" class="chartView">
|
|
|
+ <chartView
|
|
|
+ :data="chartData"
|
|
|
+ :type-option-list="typeOptionList"
|
|
|
+ :chart-search-data="searchForm"
|
|
|
+ @changeList="(code) => console.log(code)"
|
|
|
+ >
|
|
|
+ <div slot="searchBox">
|
|
|
<div class="Layout">
|
|
|
- <div class="queryName marginLeft">需求状态</div>
|
|
|
- <el-select v-model="searchForm.statusList" size="small" multiple clearable filterable placeholder="请选择" @change="getTableData()">
|
|
|
- <el-option v-for="(item, index) in requiredStatus" :key="index" :label="item.msg" :value="item.code" />
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- <div class="Layout">
|
|
|
- <div class="queryName marginLeft">需求方向</div>
|
|
|
- <el-cascader v-model="searchForm.rqmtOrntIds" size="small" collapse-tags :props="props" :options="demandDirection" placeholder="请选择" style="width: 72%" @change="getTableData()" />
|
|
|
+ <div class="Layout">
|
|
|
+ <div class="queryName marginLeft">需求方向</div>
|
|
|
+ <el-cascader v-model="searchForm.rqmtOrntIds" size="small" collapse-tags :props="props" :options="demandDirection" placeholder="请选择" style="width: 72%" @change="getTableData()" />
|
|
|
+ </div>
|
|
|
+ <span class="screen" @click="showChartModal = true">更多筛选</span>
|
|
|
</div>
|
|
|
- </el-form>
|
|
|
- </div>
|
|
|
- <span class="screen" @click="showSelect">{{ goodName }}</span>
|
|
|
+ </div>
|
|
|
+ </chartView>
|
|
|
</div>
|
|
|
- <div v-show="DetailedScreening" class="stylus-more">
|
|
|
- <div>
|
|
|
- <el-form :model="searchForm" class="flex_start">
|
|
|
- <div class="Layout">
|
|
|
- <div class="queryName">所属项目</div>
|
|
|
- <el-select v-model="searchForm.belongingProject" size="small" clearable filterable placeholder="请选择">
|
|
|
- <el-option v-for="item in AttributionItems" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- <div class="Layout">
|
|
|
- <div class="queryName marginLeft">PM</div>
|
|
|
- <search-people :value.sync="searchForm.pm" :clearable="true" :multiple="false" style="width:72% !important;" />
|
|
|
- </div>
|
|
|
- <div class="Layout">
|
|
|
- <div class="queryName marginLeft">需求类型</div>
|
|
|
- <el-select v-model="searchForm.type" size="small" clearable filterable placeholder="请选择">
|
|
|
- <el-option v-for="item in searchInfo.type" :key="item.code" :label="item.msg" :value="item.code" />
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- </el-form>
|
|
|
- <el-form :model="searchForm" class="flex_start el-from-spacing">
|
|
|
- <div class="Layout">
|
|
|
- <div class="queryName">需求来源</div>
|
|
|
- <el-select v-model="searchForm.sourceTypeList" size="small" multiple clearable filterable placeholder="请选择">
|
|
|
- <el-option v-for="item in searchInfo.sourceType" :key="item.code" :label="item.msg" :value="item.code" />
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- <div class="Layout">
|
|
|
- <div class="queryName marginLeft">优先级</div>
|
|
|
- <el-select v-model="searchForm.priorityList" size="small" multiple clearable filterable placeholder="请选择">
|
|
|
- <el-option v-for="item in searchInfo.priority" :key="item.code" :label="item.msg" :value="item.code" />
|
|
|
+ <div v-if="nowTab === 'list'" class="search_box">
|
|
|
+ <div class="Layout" style="padding-top: 5px">
|
|
|
+ <div>
|
|
|
+ <el-form :model="searchForm" class="Layout">
|
|
|
+ <div class="Layout_flex_end" style="padding-left:15px">
|
|
|
+ <div class="queryName">需求名称</div>
|
|
|
+ <el-input v-model="searchForm.name" size="small" clearable style="width:72% !important;" placeholder="请搜索标题或ID或望岳ID" @change="getTableData()" />
|
|
|
+ </div>
|
|
|
+ <div class="Layout">
|
|
|
+ <div class="queryName marginLeft">需求状态</div>
|
|
|
+ <el-select v-model="searchForm.statusList" size="small" multiple clearable filterable placeholder="请选择" @change="getTableData()">
|
|
|
+ <el-option v-for="(item, index) in requiredStatus" :key="index" :label="item.label" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="Layout">
|
|
|
+ <div class="queryName marginLeft">需求方向</div>
|
|
|
+ <el-cascader v-model="searchForm.rqmtOrntIds" size="small" collapse-tags :props="props" :options="demandDirection" placeholder="请选择" style="width: 72%" @change="getTableData()" />
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
+ <span class="screen" @click="showSelect">{{ goodName }}</span>
|
|
|
+ </div>
|
|
|
+ <div v-show="DetailedScreening" class="stylus-more">
|
|
|
+ <div>
|
|
|
+ <el-form :model="searchForm" class="flex_start">
|
|
|
+ <div class="Layout">
|
|
|
+ <div class="queryName">所属项目</div>
|
|
|
+ <el-select v-model="searchForm.belongingProject" size="small" clearable filterable placeholder="请选择">
|
|
|
+ <el-option v-for="item in AttributionItems" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="Layout">
|
|
|
+ <div class="queryName marginLeft">PM</div>
|
|
|
+ <!-- <search-people :value.sync="searchForm.pm" :clearable="true" :multiple="false" style="width:72% !important;" /> -->
|
|
|
+ <el-select
|
|
|
+ v-model="searchForm.pm"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ remote
|
|
|
+ placeholder="请输入姓名或邮箱前缀"
|
|
|
+ :remote-method="remoteMethod"
|
|
|
+ :loading="loading"
|
|
|
+ size="small"
|
|
|
+ >
|
|
|
+ <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="item.idap">
|
|
|
+ <div class="flex_start">
|
|
|
+ <div class="deptName">{{ item.deptName }}</div>
|
|
|
+ <div style="min-width:80px">{{ item.name }}</div>
|
|
|
+ <div class="deptName">{{ item.idap }}</div>
|
|
|
+ </div>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="Layout">
|
|
|
+ <div class="queryName marginLeft">需求类型</div>
|
|
|
+ <el-select v-model="searchForm.type" size="small" clearable filterable placeholder="请选择">
|
|
|
+ <el-option v-for="item in searchInfo.type" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ <el-form :model="searchForm" class="flex_start el-from-spacing">
|
|
|
+ <div class="Layout">
|
|
|
+ <div class="queryName">需求来源</div>
|
|
|
+ <el-select v-model="searchForm.sourceTypeList" size="small" multiple clearable filterable placeholder="请选择">
|
|
|
+ <el-option v-for="item in searchInfo.sourceType" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="Layout">
|
|
|
+ <div class="queryName marginLeft">优先级</div>
|
|
|
+ <el-select v-model="searchForm.priorityList" size="small" multiple clearable filterable placeholder="请选择">
|
|
|
+ <el-option v-for="item in searchInfo.priority" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="Layout">
|
|
|
+ <div class="queryName marginLeft">需求提出人</div>
|
|
|
+ <!-- <search-people :value.sync="searchForm.rqmtProposer" :clearable="true" :multiple="false" style="width:72% !important;" /> -->
|
|
|
+ <el-select
|
|
|
+ v-model="searchForm.rqmtProposer"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ remote
|
|
|
+ placeholder="请输入姓名或邮箱前缀"
|
|
|
+ :remote-method="remoteMethod"
|
|
|
+ :loading="loading"
|
|
|
+ size="small"
|
|
|
+ >
|
|
|
+ <el-option v-for="item in options" :key="item.idap" :label="item.name" :value="item.idap">
|
|
|
+ <div class="flex_start">
|
|
|
+ <div class="deptName">{{ item.deptName }}</div>
|
|
|
+ <div style="min-width:80px">{{ item.name }}</div>
|
|
|
+ <div class="deptName">{{ item.idap }}</div>
|
|
|
+ </div>
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ <el-form :model="searchForm" class="flex_start el-from-spacing">
|
|
|
+ <div class="Layout">
|
|
|
+ <div class="queryName">来自望岳</div>
|
|
|
+ <el-select v-model="searchForm.isFromDpm" size="small" clearable filterable placeholder="请选择">
|
|
|
+ <el-option v-for="item in isFromDpmList" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="Layout">
|
|
|
+ <div class="queryName" style="margin-left: 2%;">创建时间</div>
|
|
|
+ <el-date-picker
|
|
|
+ v-model="searchForm.date"
|
|
|
+ type="daterange"
|
|
|
+ align="right"
|
|
|
+ unlink-panels
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ size="small"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ :default-time="['00:00:00','23:59:59']"
|
|
|
+ :picker-options="pickerOptions"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ <div v-if="DemandStatus === true" style="color:#409EFF; cursor: pointer; margin-top: 15px;" @click="DemandSta"><i class="el-icon-circle-plus-outline" /> 添加需求状态停留时长条件</div>
|
|
|
+ <el-divider v-if="DemandStatus === false"> 且 </el-divider>
|
|
|
+ <div v-if="DemandStatus === false" style=" margin-top: 15px;">
|
|
|
+ <div class="DemandStatus">
|
|
|
+ <i style="color:#409EFF; cursor: pointer; margin-right: 5px;" class="el-icon-remove-outline" @click="DemandSta" />
|
|
|
+ <span> 需求状态包含:</span>
|
|
|
+ </div>
|
|
|
+ <el-checkbox-group v-model="searchForm.containStatus" class="allCheckbox">
|
|
|
+ <el-checkbox v-for="item in requiredStatus" :key="item.value" :value="item.value">{{ item.label }}</el-checkbox>
|
|
|
+ </el-checkbox-group>
|
|
|
+ <div class="DemandStatus">状态停留时长:</div>
|
|
|
+ <el-select v-model="searchForm.comparisonOperator" size="small" style="width: 80px; margin: 20px 20px 0 79px;" clearable filterable placeholder="请选择">
|
|
|
+ <el-option v-for="item in formula" :key="item.code" :label="item.msg" :value="item.msg" />
|
|
|
</el-select>
|
|
|
- </div>
|
|
|
- <div class="Layout">
|
|
|
- <div class="queryName marginLeft">需求提出人</div>
|
|
|
- <search-people :value.sync="searchForm.rqmtProposer" :clearable="true" :multiple="false" style="width:72% !important;" />
|
|
|
- </div>
|
|
|
- </el-form>
|
|
|
- <el-form :model="searchForm" class="flex_start el-from-spacing">
|
|
|
- <div class="Layout">
|
|
|
- <div class="queryName">来自望岳</div>
|
|
|
- <el-select v-model="searchForm.isFromDpm" size="small" clearable filterable placeholder="请选择">
|
|
|
- <el-option v-for="item in isFromDpmList" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
+ <el-select v-model="searchForm.days" size="small" style="width: 80px;" clearable filterable placeholder="请选择">
|
|
|
+ <el-option v-for="item in getArrayList()" :key="item.code" :label="item.msg" :value="item.code" />
|
|
|
</el-select>
|
|
|
</div>
|
|
|
- <div class="Layout">
|
|
|
- <div class="queryName" style="margin-left: 2%;">创建时间</div>
|
|
|
- <el-date-picker
|
|
|
- v-model="searchForm.date"
|
|
|
- type="daterange"
|
|
|
- align="right"
|
|
|
- unlink-panels
|
|
|
- range-separator="至"
|
|
|
- start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期"
|
|
|
- size="small"
|
|
|
- value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
- :default-time="['00:00:00','23:59:59']"
|
|
|
- :picker-options="pickerOptions"
|
|
|
- />
|
|
|
- </div>
|
|
|
- </el-form>
|
|
|
- <div v-if="DemandStatus === true" style="color:#409EFF; cursor: pointer; margin-top: 15px;" @click="DemandSta"><i class="el-icon-circle-plus-outline" /> 添加需求状态停留时长条件</div>
|
|
|
- <el-divider v-if="DemandStatus === false"> 且 </el-divider>
|
|
|
- <div v-if="DemandStatus === false" style=" margin-top: 15px;">
|
|
|
- <div class="DemandStatus">
|
|
|
- <i style="color:#409EFF; cursor: pointer; margin-right: 5px;" class="el-icon-remove-outline" @click="DemandSta" />
|
|
|
- <span> 需求状态包含:</span>
|
|
|
- </div>
|
|
|
- <el-checkbox-group v-model="searchForm.containStatus" class="allCheckbox">
|
|
|
- <el-checkbox v-for="item in requiredStatus" :key="item.code" :label="item.code">{{ item.msg }}</el-checkbox>
|
|
|
- </el-checkbox-group>
|
|
|
- <div class="DemandStatus">状态停留时长:</div>
|
|
|
- <el-select v-model="searchForm.comparisonOperator" size="small" style="width: 80px; margin: 20px 20px 0 79px;" clearable filterable placeholder="请选择">
|
|
|
- <el-option v-for="item in formula" :key="item.code" :label="item.msg" :value="item.msg" />
|
|
|
- </el-select>
|
|
|
- <el-select v-model="searchForm.days" size="small" style="width: 80px;" clearable filterable placeholder="请选择">
|
|
|
- <el-option v-for="item in getArrayList()" :key="item.code" :label="item.msg" :value="item.code" />
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
|
|
|
- <div align="right">
|
|
|
- <el-button type="text" @click="showSaveSearch = true">保存筛选项</el-button>
|
|
|
- <el-button type="primary" size="mini" @click="getTableData">筛 选</el-button>
|
|
|
- <el-button size="mini" @click="reset">重 置</el-button>
|
|
|
+ <div align="right">
|
|
|
+ <el-button type="text" @click="showSaveSearch = true">保存筛选项</el-button>
|
|
|
+ <el-button type="primary" size="mini" @click="getTableData">筛 选</el-button>
|
|
|
+ <el-button size="mini" @click="reset">重 置</el-button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div v-if="filterList.length && filterList.length > 0" class="filter">
|
|
|
- <div class="filterWrap">
|
|
|
- <div class="title">我的过滤器:</div>
|
|
|
- <div class="itemBox">
|
|
|
- <el-tag v-for="item in filterList" :key="item.id" class="item" @click="getFilterItem(item.id)">{{ item.name }}</el-tag>
|
|
|
+ <div v-if="filterList.length && filterList.length > 0" class="filter">
|
|
|
+ <div class="filterWrap">
|
|
|
+ <div class="title">我的过滤器:</div>
|
|
|
+ <div class="itemBox">
|
|
|
+ <el-tag v-for="item in filterList" :key="item.id" class="item" @click="getFilterItem(item.id)">{{ item.name }}</el-tag>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="btn">
|
|
|
+ <span @click.stop="showEditSearch = true">管理过滤器</span>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="btn">
|
|
|
- <span @click.stop="showEditSearch = true">管理过滤器</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!-- <el-row v-if="filterList.length && filterList.length>0" type="flex" justify="space-between" class="filter">
|
|
|
- <el-col :span="2">
|
|
|
- <span>我的过滤器:</span>
|
|
|
- </el-col>
|
|
|
- <el-col :span="20" class="mine-filter">
|
|
|
- <span v-for="item in filterList" :key="item.id" class="filter-item" @click="getFilterItem(item.id)">
|
|
|
- <el-tooltip class="item" effect="dark" :content="item.name" placement="bottom">
|
|
|
- <span>{{ item.name }}</span>
|
|
|
- </el-tooltip>
|
|
|
- </span>
|
|
|
- </el-col>
|
|
|
- <el-col :span="2" align="end">
|
|
|
- <span @click.stop="showEditSearch = true">管理过滤器</span>
|
|
|
- </el-col>
|
|
|
- </el-row> -->
|
|
|
</div>
|
|
|
<div class="stylus-content">
|
|
|
<el-table
|
|
@@ -227,10 +267,22 @@
|
|
|
<normal-dialog :show-footer="false" :show-dialog="showEditSearch" :title="'管理过滤器'" :width="'65%'" @cancel="showEditSearch=false">
|
|
|
<filter-list :show-filter="showEditSearch" @deleteFilter="deleteFilter" />
|
|
|
</normal-dialog>
|
|
|
+ <filterModal :show-dialog="showChartModal" @cancel="showChartModal = false">
|
|
|
+ <div>
|
|
|
+ <chartSearchForm
|
|
|
+ :data="chartSearchFormRenderData"
|
|
|
+ :loading="loading"
|
|
|
+ :styles="{ marginBottom: '15px', width: '380px' }"
|
|
|
+ @change="chartSearchFormChange"
|
|
|
+ @getOption="(key, q, utilName) => remoteMethod(q)"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </filterModal>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+const _ = require('lodash')
|
|
|
import { EncryptId } from '@/utils/crypto-js.js'
|
|
|
import { mapGetters } from 'vuex'
|
|
|
import {
|
|
@@ -241,13 +293,18 @@ import {
|
|
|
settingQueryBizRqmtOrntList,
|
|
|
filterCreateFilter,
|
|
|
filtergetFilterList,
|
|
|
- filterGetFilter
|
|
|
+ filterGetFilter,
|
|
|
+ getPerson
|
|
|
} from '@/api/requirement.js'
|
|
|
import { deepClone } from '@/utils/global'
|
|
|
import RequirementCreate from './create'
|
|
|
+import mainTitle from '@/components/mainTitle'
|
|
|
+import chartView from '@/components/chartView'
|
|
|
+import filterModal from '@/components/filterModal'
|
|
|
+import chartSearchFormData from '../renderData/chartSearchForm'
|
|
|
+import chartSearchForm from '@/components/searchHeader/searchForm'
|
|
|
import filterList from '@/views/projectManage/components/filterList'
|
|
|
import extraUrgent from '@/assets/extraUrgent.png'
|
|
|
-import searchPeople from '@/components/select/searchPeople'
|
|
|
import normalDialog from '@/components/dialog/normalDialog'
|
|
|
import '@/views/projectManage/publicCss/index.css'
|
|
|
import '@/styles/PublicStyle/index.scss'
|
|
@@ -255,9 +312,12 @@ import '@/styles/PublicStyle/index.scss'
|
|
|
export default {
|
|
|
components: {
|
|
|
RequirementCreate,
|
|
|
- searchPeople,
|
|
|
normalDialog,
|
|
|
- filterList
|
|
|
+ filterList,
|
|
|
+ mainTitle,
|
|
|
+ chartView,
|
|
|
+ filterModal,
|
|
|
+ chartSearchForm
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
@@ -291,7 +351,7 @@ export default {
|
|
|
// newTabOpen: true, // 是否新的tab页打开
|
|
|
DemandStatus: true, // 筛选需求时长
|
|
|
extraUrgent: extraUrgent,
|
|
|
- isFromDpmList: [{ id: true, name: '是' }, { id: false, name: '否' }],
|
|
|
+ isFromDpmList: [{ value: true, label: '是' }, { value: false, label: '否' }],
|
|
|
priorityColors: ['#F56C6C', '#FF8952', '#F5E300', '#7ED321', '#61D3B8', '#69B3FF', '#BDBDBD'],
|
|
|
formula: [{ code: 0, msg: '>=' }, { code: 1, msg: '<=' }, { code: 2, msg: '>' }, { code: 3, msg: '<' }],
|
|
|
// currentRow: null,
|
|
@@ -312,7 +372,6 @@ export default {
|
|
|
bizType: [],
|
|
|
priority: []
|
|
|
},
|
|
|
- requirementName: '',
|
|
|
goodName: '更多筛选',
|
|
|
DetailedScreening: false,
|
|
|
searchFormRules: { name: [
|
|
@@ -333,7 +392,17 @@ export default {
|
|
|
tableData: [], // 需求tableList
|
|
|
createDialogVisible: false,
|
|
|
total: 0,
|
|
|
- data: ''
|
|
|
+ data: '',
|
|
|
+ options: [],
|
|
|
+ nowTab: 'list',
|
|
|
+ chartData: {},
|
|
|
+ typeOptionList: [
|
|
|
+ { value: '0', label: '需求状态' },
|
|
|
+ { value: '1', label: '需求等级' },
|
|
|
+ { value: '2', label: '需求类型' }
|
|
|
+ ],
|
|
|
+ showChartModal: false,
|
|
|
+ chartSearchFormRenderData: _.cloneDeep(chartSearchFormData)
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
@@ -353,6 +422,9 @@ export default {
|
|
|
created() {
|
|
|
this.$store.state.data.status = true
|
|
|
},
|
|
|
+ mounted() {
|
|
|
+ this.updateChartSlectOption('isFromDpm', this.isFromDpmList)
|
|
|
+ },
|
|
|
destroyed() {
|
|
|
this.$store.state.data.status = false
|
|
|
},
|
|
@@ -360,6 +432,16 @@ export default {
|
|
|
logHandle(d) {
|
|
|
window.log({ c: 'requirement', d })
|
|
|
},
|
|
|
+ changeTab(e) {
|
|
|
+ this.nowTab = e
|
|
|
+ if (this.nowTab === 'charts') {
|
|
|
+ // this.$emit('chartSearch')
|
|
|
+ this.updateChartSearchFormValue()
|
|
|
+ console.log('charts')
|
|
|
+ } else {
|
|
|
+ this.getTableData()
|
|
|
+ }
|
|
|
+ },
|
|
|
getTableData() { // 查询
|
|
|
if (this.bizId === -1) return
|
|
|
for (const key in this.searchForm) { // 接口不接受空值的处理
|
|
@@ -367,11 +449,11 @@ export default {
|
|
|
delete this.searchForm[key]
|
|
|
}
|
|
|
}
|
|
|
- if (this.requirementName) { // 判断需求名称
|
|
|
- this.searchForm.name = this.requirementName
|
|
|
- } else {
|
|
|
- this.searchForm.name = ''
|
|
|
- }
|
|
|
+ // if (this.requirementName) { // 判断需求名称
|
|
|
+ // this.searchForm.name = this.requirementName
|
|
|
+ // } else {
|
|
|
+ // this.searchForm.name = ''
|
|
|
+ // }
|
|
|
if (this.searchForm.date) {
|
|
|
this.searchForm.createStartTime = this.searchForm.date[0]
|
|
|
this.searchForm.createEndTime = this.searchForm.date[1]
|
|
@@ -394,15 +476,45 @@ export default {
|
|
|
async showRequirementEnum() {
|
|
|
const res = await showRequirementEnum()
|
|
|
if (res.code === 200) {
|
|
|
+ // 类型
|
|
|
+ res.data.type.map(t => {
|
|
|
+ t.value = t.code
|
|
|
+ t.label = t.msg
|
|
|
+ })
|
|
|
+ // 来源
|
|
|
+ res.data.sourceType.map(t => {
|
|
|
+ t.value = t.code
|
|
|
+ t.label = t.msg
|
|
|
+ })
|
|
|
+ // 优先级
|
|
|
+ res.data.priority.map(t => {
|
|
|
+ t.value = t.code
|
|
|
+ t.label = t.msg
|
|
|
+ })
|
|
|
this.searchInfo = res.data
|
|
|
+ this.updateChartSlectOption('type', res.data.type)
|
|
|
+ this.updateChartSlectOption('sourceTypeList', res.data.sourceType)
|
|
|
+ this.updateChartSlectOption('priorityList', res.data.priority)
|
|
|
}
|
|
|
const res1 = await projectListProject({ bizId: this.bizId })
|
|
|
if (res1.code === 200) {
|
|
|
- this.AttributionItems = res1.data
|
|
|
+ const AttributionItems = res1.data.map(t => ({
|
|
|
+ ...t,
|
|
|
+ label: t.name,
|
|
|
+ value: t.id
|
|
|
+ }))
|
|
|
+ this.AttributionItems = AttributionItems
|
|
|
+ this.updateChartSlectOption('belongingProject', AttributionItems)
|
|
|
}
|
|
|
const res2 = await configShowRequireStatusEnum(this.bizId)
|
|
|
if (res2.code === 200) {
|
|
|
- this.requiredStatus = res2.data.requirementStatus
|
|
|
+ const requiredStatus = res2.data.requirementStatus.map(t => ({
|
|
|
+ ...t,
|
|
|
+ label: t.msg,
|
|
|
+ value: t.code
|
|
|
+ }))
|
|
|
+ this.requiredStatus = requiredStatus
|
|
|
+ this.updateChartSlectOption('statusList', requiredStatus)
|
|
|
}
|
|
|
const res3 = await settingQueryBizRqmtOrntList(this.bizId)
|
|
|
if (res3.code === 200) { // 需求方向
|
|
@@ -502,7 +614,7 @@ export default {
|
|
|
// }
|
|
|
// this.getClient(filter.appId)
|
|
|
Object.assign(this.searchForm, filter)
|
|
|
- this.requirementName = filter.name
|
|
|
+ // this.requirementName = filter.name
|
|
|
this.curIndex = 1
|
|
|
this.getTableData()
|
|
|
}
|
|
@@ -545,6 +657,23 @@ export default {
|
|
|
})
|
|
|
this.getTableData()
|
|
|
},
|
|
|
+ async remoteMethod(query) {
|
|
|
+ // 人员查询
|
|
|
+ if (query !== '') {
|
|
|
+ // this.loading = true
|
|
|
+ const res = await getPerson({ memberIDAP: query })
|
|
|
+ const obj = {}
|
|
|
+ this.options = res.data.reduce((cur, next) => {
|
|
|
+ obj[next.idap] ? '' : obj[next.idap] = true && cur.push(next)
|
|
|
+ return cur
|
|
|
+ }, [])
|
|
|
+ // this.loading = false
|
|
|
+ } else {
|
|
|
+ this.options = []
|
|
|
+ }
|
|
|
+ this.updateChartSlectOption('pm', this.options)
|
|
|
+ this.updateChartSlectOption('rqmtProposer', this.options)
|
|
|
+ },
|
|
|
getToRequirementDetails(id) { // table点击跳转
|
|
|
const bizId_id = EncryptId(`${this.bizId}_${id}`)
|
|
|
if (localStorage.getItem('openPageHandle') === 'blank') {
|
|
@@ -553,6 +682,23 @@ export default {
|
|
|
} else {
|
|
|
this.$router.push({ name: '需求详情', query: { bizId_id: bizId_id }})
|
|
|
}
|
|
|
+ },
|
|
|
+ chartSearchFormChange(key, value) {
|
|
|
+ console.log(key, value, this.chartSearchFormRenderData)
|
|
|
+ this.searchForm[key] = value
|
|
|
+ },
|
|
|
+ updateChartSlectOption(key, option) {
|
|
|
+ this.chartSearchFormRenderData.map(t => {
|
|
|
+ if (t.key === key) {
|
|
|
+ t.option = option
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ updateChartSearchFormValue() {
|
|
|
+ this.chartSearchFormRenderData.map(t => {
|
|
|
+ t.value = this.searchForm[t.key]
|
|
|
+ })
|
|
|
+ console.log(this.searchForm, this.chartSearchFormRenderData)
|
|
|
}
|
|
|
}
|
|
|
}
|