|
@@ -1,14 +1,41 @@
|
|
<template>
|
|
<template>
|
|
<div class="page-wrap data-big-wrapper" style="min-width: 1320px" @click="openDrawer=false">
|
|
<div class="page-wrap data-big-wrapper" style="min-width: 1320px" @click="openDrawer=false">
|
|
<div class="page-header detial">
|
|
<div class="page-header detial">
|
|
- <searchHeader
|
|
|
|
|
|
+ <!-- <searchHeader
|
|
:is-mt5="false"
|
|
:is-mt5="false"
|
|
:data="listSearch"
|
|
:data="listSearch"
|
|
:is-hidden-time="true"
|
|
:is-hidden-time="true"
|
|
@search="search"
|
|
@search="search"
|
|
@moreReset="moreReset"
|
|
@moreReset="moreReset"
|
|
@changeShowMore="changeShowMore"
|
|
@changeShowMore="changeShowMore"
|
|
- />
|
|
|
|
|
|
+ /> -->
|
|
|
|
+ <div class="select-group teamDrop">
|
|
|
|
+ <el-dropdown placement="top-start" trigger="click">
|
|
|
|
+ <span class="el-dropdown-link">
|
|
|
|
+ {{ departmentName && departmentName.length > 6 ? departmentName.substring(0, 11) + '...' : departmentName }}
|
|
|
|
+ <i class="el-icon-arrow-down el-icon--right" />
|
|
|
|
+ </span>
|
|
|
|
+ <el-dropdown-menu slot="dropdown" class="dropTeam">
|
|
|
|
+ <div class="team-val">组织结构</div>
|
|
|
|
+ <div class="deptCodesClass">
|
|
|
|
+ <el-cascader-panel v-model="params.deptCodes" :props="{ multiple: true }" :options="department" @change="changeArchitecture" />
|
|
|
|
+ </div>
|
|
|
|
+ <div class="team-val">自定义团队</div>
|
|
|
|
+ <el-cascader-panel v-model="teamData.teamNames" :props="{ multiple: true }" :options="options" @change="changeTeam" />
|
|
|
|
+ </el-dropdown-menu>
|
|
|
|
+ </el-dropdown>
|
|
|
|
+ <div class="cascaderBox">
|
|
|
|
+ <el-cascader ref="cascader" v-model="bizIdCode" collapse-tags :options="searchEnum.businesslines" :props="propsBizId" class="cascader" @change="handleBizIdChange(bizIdCode, searchEnum.businesslines)" />
|
|
|
|
+ <span class="el-dropdown-link" style="margin: 0 20px;" @click="setCascader">{{ bizName.length > 11 ? bizName.substring(0, 11) + '...' : bizName }} <i class="el-icon-arrow-down" /></span>
|
|
|
|
+ </div>
|
|
|
|
+ <div style="margin-left: 30px; display: inline-block">
|
|
|
|
+ <searchForm
|
|
|
|
+ :data="searchFormList"
|
|
|
|
+ :styles="{ display: 'inline-block' }"
|
|
|
|
+ @change="dateChange"
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
<div class="page-content detial">
|
|
<div class="page-content detial">
|
|
<header class="header mb10">
|
|
<header class="header mb10">
|
|
@@ -43,8 +70,6 @@
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div>
|
|
-<!-- <drawer-modal v-if="openDrawer" :drawer="openDrawer" :data="requireList" />-->
|
|
|
|
-<!-- <el-button @click="openDrawer = true">触发</el-button>-->
|
|
|
|
<drawer-modal
|
|
<drawer-modal
|
|
:open-drawer.sync="openDrawer"
|
|
:open-drawer.sync="openDrawer"
|
|
:drawer-data="requireList"
|
|
:drawer-data="requireList"
|
|
@@ -55,7 +80,7 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script>
|
|
<script>
|
|
-import _ from 'lodash'
|
|
|
|
|
|
+// import _ from 'lodash'
|
|
import { listSearchData } from './data'
|
|
import { listSearchData } from './data'
|
|
import {
|
|
import {
|
|
// 质量
|
|
// 质量
|
|
@@ -74,10 +99,12 @@ import {
|
|
getEfficiencyDataRequest
|
|
getEfficiencyDataRequest
|
|
} from '@/api/dataMarket'
|
|
} from '@/api/dataMarket'
|
|
import {
|
|
import {
|
|
|
|
+ settingQueryBizAndTeamInfo,
|
|
getStaffByUsername
|
|
getStaffByUsername
|
|
} from '@/api/workSchedule'
|
|
} from '@/api/workSchedule'
|
|
-import { teamQueryTeamInfoList } from '@/api/configure'
|
|
|
|
-import searchHeader from '@/components/searchHeader'
|
|
|
|
|
|
+import { getReportBizInfo, getDeptSetting } from '@/api/qualityMonthlyReport'
|
|
|
|
+// import { teamQueryTeamInfoList } from '@/api/configure'
|
|
|
|
+import searchForm from '@/components/searchHeader/searchForm'
|
|
import headTitle from '@/components/headTitle'
|
|
import headTitle from '@/components/headTitle'
|
|
import throughputModule from './components/throughputModule/index.vue'
|
|
import throughputModule from './components/throughputModule/index.vue'
|
|
import qualityModule from './components/qualityModule/index.vue'
|
|
import qualityModule from './components/qualityModule/index.vue'
|
|
@@ -85,7 +112,7 @@ import efficiencyModule from './components/efficiencyModule/index.vue'
|
|
import drawerModal from './components/drawerModal/index.vue'
|
|
import drawerModal from './components/drawerModal/index.vue'
|
|
export default {
|
|
export default {
|
|
components: {
|
|
components: {
|
|
- searchHeader,
|
|
|
|
|
|
+ searchForm,
|
|
headTitle,
|
|
headTitle,
|
|
throughputModule,
|
|
throughputModule,
|
|
qualityModule,
|
|
qualityModule,
|
|
@@ -95,6 +122,17 @@ export default {
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
// enum
|
|
// enum
|
|
|
|
+ searchFormList: [{
|
|
|
|
+ name: '时间',
|
|
|
|
+ value: '',
|
|
|
|
+ key: 'time',
|
|
|
|
+ valueFormat: 'yyyy-MM-dd HH:mm:ss',
|
|
|
|
+ type: 'showItemDataPicker',
|
|
|
|
+ placeholder: '请选择时间',
|
|
|
|
+ boxStyles: { display: 'inline-block' },
|
|
|
|
+ styles: { minWidth: '270px', width: 'auto' },
|
|
|
|
+ nameStyles: { minWidth: '53px', lineHeight: '32px' }
|
|
|
|
+ }],
|
|
listSearch: listSearchData,
|
|
listSearch: listSearchData,
|
|
showMore: false,
|
|
showMore: false,
|
|
openDrawer: false,
|
|
openDrawer: false,
|
|
@@ -105,7 +143,10 @@ export default {
|
|
onlineProblemViweType: '日期',
|
|
onlineProblemViweType: '日期',
|
|
wholeTab: '需求',
|
|
wholeTab: '需求',
|
|
verTab: '青桔端',
|
|
verTab: '青桔端',
|
|
- requirementBacklogType: '研发积压'
|
|
|
|
|
|
+ requirementBacklogType: '研发积压',
|
|
|
|
+ teamIds: [],
|
|
|
|
+ monthlyReportSettingIds: [],
|
|
|
|
+ deptCodes: []
|
|
},
|
|
},
|
|
mainData: {
|
|
mainData: {
|
|
quality: {},
|
|
quality: {},
|
|
@@ -118,69 +159,313 @@ export default {
|
|
throughputLoading: false,
|
|
throughputLoading: false,
|
|
throughputListLoading: false,
|
|
throughputListLoading: false,
|
|
throughputBacklogLoading: false,
|
|
throughputBacklogLoading: false,
|
|
- efficiencyLoading: false
|
|
|
|
|
|
+ efficiencyLoading: false,
|
|
|
|
+ // 自定义团队
|
|
|
|
+ // searchForm: {
|
|
|
|
+ // teamIds: [],
|
|
|
|
+ // monthlyReportSettingIds: [],
|
|
|
|
+ // deptCodes: []
|
|
|
|
+ // },
|
|
|
|
+ teamData: { // 筛选团队
|
|
|
|
+ teamBizName: '团队',
|
|
|
|
+ teamNames: [],
|
|
|
|
+ teamCode: 0
|
|
|
|
+ },
|
|
|
|
+ departmentName: '团队',
|
|
|
|
+ department: [],
|
|
|
|
+ departmentData: [],
|
|
|
|
+ options: [],
|
|
|
|
+ depdObj: [],
|
|
|
|
+ searchEnum: {
|
|
|
|
+ businesslines: []
|
|
|
|
+ },
|
|
|
|
+ bizIdCode: [],
|
|
|
|
+ propsBizId: {
|
|
|
|
+ multiple: true,
|
|
|
|
+ value: 'code',
|
|
|
|
+ label: 'name',
|
|
|
|
+ children: 'children'
|
|
|
|
+ },
|
|
|
|
+ bizName: '业务线', // 业务线名字
|
|
|
|
+ optionData: [],
|
|
|
|
+ bizCode: 0,
|
|
|
|
+ isFirstDate: true
|
|
}
|
|
}
|
|
},
|
|
},
|
|
- mounted() {
|
|
|
|
- // this.init()
|
|
|
|
- // localStorage.getItem('username')
|
|
|
|
- this.getSearchOptios()
|
|
|
|
|
|
+ created() {
|
|
|
|
+ this.getProvence()
|
|
|
|
+ this.settingGetBizList(false)
|
|
|
|
+ window.log({ c: 'data_market', d: 'get_data_market_page' })
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
- search() {
|
|
|
|
- const data = {}
|
|
|
|
- // 因为高级筛选不自动搜索,所以每次出发搜索都map renderList就好。
|
|
|
|
- this.listSearch.default.map(t => t.map(g => {
|
|
|
|
- data[g.key] = g.value
|
|
|
|
- }))
|
|
|
|
- if (this.showMore) {
|
|
|
|
- this.listSearch.adv.map(t => t.map(g => {
|
|
|
|
- data[g.key] = g.value
|
|
|
|
- }))
|
|
|
|
|
|
+ // 业务线与团队架构互斥
|
|
|
|
+ paramsReset(type) {
|
|
|
|
+ // monthlyReportSettingIds=[-1000] 业务线全不选
|
|
|
|
+ // deptCodes 为[] 清空
|
|
|
|
+ // teamIds 为[] 清空 同时 teamData.teamNames 也要为空
|
|
|
|
+ const { monthlyReportSettingIds, deptCodes, teamIds } = this.params
|
|
|
|
+ if (type === '业务线') {
|
|
|
|
+ if (monthlyReportSettingIds[0] !== -1000) {
|
|
|
|
+ // 业务线有值
|
|
|
|
+ this.params = {
|
|
|
|
+ ...this.params,
|
|
|
|
+ deptCodes: [],
|
|
|
|
+ teamIds: []
|
|
|
|
+ }
|
|
|
|
+ this.teamData = { // 筛选团队
|
|
|
|
+ teamBizName: '团队',
|
|
|
|
+ teamNames: [],
|
|
|
|
+ teamCode: 0
|
|
|
|
+ }
|
|
|
|
+ this.departmentName = '团队'
|
|
|
|
+ }
|
|
|
|
+ } else if (type === '团队') {
|
|
|
|
+ // 如果团队和组织有选择项, 则业务线清空
|
|
|
|
+ if (deptCodes.length > 0 || teamIds.length > 0) {
|
|
|
|
+ this.bizIdCode = null
|
|
|
|
+ this.bizName = '业务线'
|
|
|
|
+ this.bizCode = 0
|
|
|
|
+ this.handleBizId([-1000])
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ },
|
|
|
|
+ dateChange(e, date) {
|
|
|
|
+ // const { monthlyReportSettingIds, deptCodes, teamIds } = this.params
|
|
this.params = {
|
|
this.params = {
|
|
...this.params,
|
|
...this.params,
|
|
- ...data,
|
|
|
|
- startTime: data.time[0],
|
|
|
|
- endTime: data.time[1]
|
|
|
|
|
|
+ startTime: date[0],
|
|
|
|
+ endTime: date[1]
|
|
}
|
|
}
|
|
- if (
|
|
|
|
- this.params.deptCode ||
|
|
|
|
- (this.params.teamIds && this.params.teamIds.length > 0)
|
|
|
|
- ) {
|
|
|
|
|
|
+ if (this.isFirstDate) {
|
|
|
|
+ this.isFirstDate = false
|
|
|
|
+ } else {
|
|
this.getList()
|
|
this.getList()
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ setCascader() {
|
|
|
|
+ this.$refs.cascader.$el.click()
|
|
|
|
+ },
|
|
|
|
+ // 组织团队
|
|
|
|
+ changeArchitecture(command) { // 组织架构名称
|
|
|
|
+ this.departmentName = this.department[0].label
|
|
|
|
+ this.paramsReset('团队')
|
|
|
|
+ this.getList()
|
|
|
|
+ },
|
|
|
|
+ changeTeam(command) {
|
|
|
|
+ if (command.length > 0) {
|
|
|
|
+ let [a, b, stop] = ['', '', true]
|
|
|
|
+ command.map(e => {
|
|
|
|
+ this.options.map(item => {
|
|
|
|
+ if (item.value === e[0]) a = item.label
|
|
|
|
+ if (item.children && stop) {
|
|
|
|
+ item.children.map(item => {
|
|
|
|
+ // this.params.teamIds.push(item.value)
|
|
|
|
+ if (item.value === e[1]) {
|
|
|
|
+ b = item.label
|
|
|
|
+ stop = false
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ const arr = command[0]
|
|
|
|
+ if (this.teamData.teamCode === 0 && arr[0] === -1) { // 默认全选
|
|
|
|
+ this.teamData = { teamBizName: '团队', teamNames: [...this.datas], teamCode: 1 }
|
|
|
|
+ const list = this.datas.slice(1)
|
|
|
|
+ this.params.teamIds = list.map(item => { return item[1] })
|
|
|
|
+ } else if (arr[0] !== -1 && this.teamData.teamCode === 1) {
|
|
|
|
+ this.teamData = { teamBizName: '团队', teamNames: null, teamCode: 0 }
|
|
|
|
+ this.params.teamIds = []
|
|
|
|
+ } else {
|
|
|
|
+ if (arr[0] === -1 && command.length < this.datas.length) { // 点击全部以外,取消全选
|
|
|
|
+ const data = command.filter(item => { return item[0] })
|
|
|
|
+ data.splice(0, 1)
|
|
|
|
+ this.teamData = { teamBizName: a + (b ? ' / ' + b : ''), teamNames: data, teamCode: 0 }
|
|
|
|
+ this.params.teamIds = data.map(item => { return item[1] })
|
|
|
|
+ } else if (arr[0] !== -1 && command.length === (this.datas.length - 1)) { // 点击全部,触发全选
|
|
|
|
+ const data = command.filter(item => { return item[0] })
|
|
|
|
+ data.unshift([-1])
|
|
|
|
+ this.teamData = { teamBizName: '团队', teamNames: data, teamCode: 1 }
|
|
|
|
+ const list = this.datas.slice(1)
|
|
|
|
+ this.params.teamIds = list.map(item => { return item[1] })
|
|
|
|
+ } else if (arr[0] !== -1) { // 基础多选
|
|
|
|
+ this.teamData.teamNames = command
|
|
|
|
+ const data = command.map(i => { return i[1] })
|
|
|
|
+ this.teamData.teamBizName = a + (b ? ' / ' + b : '')
|
|
|
|
+ this.params.teamIds = data
|
|
|
|
+ }
|
|
|
|
+ }
|
|
} else {
|
|
} else {
|
|
- this.$message({ message: '部门和更多筛选中的团队筛选项必须选一个。', type: 'warning', duration: 1000, offset: 150 })
|
|
|
|
|
|
+ this.params.teamIds = []
|
|
|
|
+ this.teamData = { teamBizName: '团队' }
|
|
}
|
|
}
|
|
|
|
+ this.paramsReset('团队')
|
|
|
|
+ this.getList()
|
|
},
|
|
},
|
|
- getSearchOptios() {
|
|
|
|
- getStaffByUsername(localStorage.getItem('username')).then(async res => {
|
|
|
|
- if (res.code === 200 && res.data.deptArch) {
|
|
|
|
- const copySearchData = _.clone(this.listSearch)
|
|
|
|
- const resdata = this.resetData([res.data.deptArch])
|
|
|
|
- copySearchData.default[0][0].option = resdata
|
|
|
|
- copySearchData.default[0][0].value = res.data.deptArch.value
|
|
|
|
- this.listSearch = copySearchData
|
|
|
|
- this.search()
|
|
|
|
|
|
+ async settingGetBizList() { // 获取业务线
|
|
|
|
+ const res1 = await settingQueryBizAndTeamInfo()
|
|
|
|
+ if (res1.code === 200) {
|
|
|
|
+ this.options = res1.data.map(item => ({
|
|
|
|
+ value: item.bizId,
|
|
|
|
+ label: item.bizName,
|
|
|
|
+ children: item.teamInfos ? this.setTeamChildren(item.teamInfos) : null
|
|
|
|
+ }))
|
|
|
|
+ this.options[0].value = -1
|
|
|
|
+ this.datas = []
|
|
|
|
+ this.options.map(item => {
|
|
|
|
+ if (item.children) {
|
|
|
|
+ item.children.map(i => {
|
|
|
|
+ this.datas.push([item.value, i.value])
|
|
|
|
+ })
|
|
|
|
+ } else {
|
|
|
|
+ this.datas.push([item.value])
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ const res = await getReportBizInfo({})
|
|
|
|
+ if (res.code === 200 && res.data.bizList) {
|
|
|
|
+ const data = res.data.bizList.map(t => ({
|
|
|
|
+ code: t.id,
|
|
|
|
+ name: t.bizName
|
|
|
|
+ }))
|
|
|
|
+ data.unshift({ code: -1, name: '全部' })
|
|
|
|
+ this.searchEnum.businesslines = data
|
|
|
|
+ // this.handleBizIdChange([], this.searchEnum.businesslines)
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ resetDepartmentList(list) {
|
|
|
|
+ return list.map(t => ({
|
|
|
|
+ ...t,
|
|
|
|
+ value: t.deptCode.toString(),
|
|
|
|
+ label: t.deptName,
|
|
|
|
+ children: t.children && t.children.length > 0 ? this.resetDepartmentList(t.children) : null
|
|
|
|
+ }))
|
|
|
|
+ },
|
|
|
|
+ getProvence(hot = true) { // 获取组织架构
|
|
|
|
+ this.efficiencyLoading = true
|
|
|
|
+ this.throughputLoading = true
|
|
|
|
+ this.qualityLoading = true
|
|
|
|
+ getDeptSetting().then(res => {
|
|
|
|
+ if (res.code === 200 && res.data) {
|
|
|
|
+ this.depdShow = true
|
|
|
|
+ const newDepartmentList = this.resetDepartmentList([res.data])
|
|
|
|
+ this.department = newDepartmentList
|
|
|
|
+ getStaffByUsername(localStorage.getItem('username')).then(async res1 => {
|
|
|
|
+ if (res1.code === 200 && res1.data && res1.data.deptPath) {
|
|
|
|
+ // 获取id
|
|
|
|
+ const deptId = res.data.deptCode
|
|
|
|
+ // idlist
|
|
|
|
+ const depyList = res1.data.deptPath
|
|
|
|
+ // 获取id在list中的位置
|
|
|
|
+ const idPos = depyList.indexOf(deptId.toString())
|
|
|
|
+ // 截取当前部门的path
|
|
|
|
+ const nowdepyList = depyList.slice(idPos, depyList.length)
|
|
|
|
+ this.params = {
|
|
|
|
+ ...this.params,
|
|
|
|
+ deptCodes: [nowdepyList]
|
|
|
|
+ }
|
|
|
|
+ this.changeArchitecture([nowdepyList])
|
|
|
|
+ }
|
|
|
|
+ })
|
|
} else {
|
|
} else {
|
|
this.depdShow = false
|
|
this.depdShow = false
|
|
}
|
|
}
|
|
})
|
|
})
|
|
- this.getTeamOption()
|
|
|
|
},
|
|
},
|
|
- async getTeamOption() {
|
|
|
|
- const myRes = await teamQueryTeamInfoList({ type: 0 })// 我的团队
|
|
|
|
- const allRes = await teamQueryTeamInfoList({ type: 1 })// 所有团队
|
|
|
|
- const copySearchData = _.clone(this.listSearch)
|
|
|
|
- copySearchData.adv[0][0].option = [
|
|
|
|
- { label: '我的团队', options: [...myRes.data.list] },
|
|
|
|
- { label: '全部团队', options: [...allRes.data.list] }
|
|
|
|
- ]
|
|
|
|
- this.listSearch = copySearchData
|
|
|
|
|
|
+ setTeamChildren(data) {
|
|
|
|
+ const arr = data.map(item => ({ value: item.code, label: item.name }))
|
|
|
|
+ return arr
|
|
},
|
|
},
|
|
|
|
+ handleBizIdChange(val, option) {
|
|
|
|
+ if (val.length > 0) {
|
|
|
|
+ const one = val[0]
|
|
|
|
+ const tow = val[1] || ''
|
|
|
|
+ let [name, nameTow] = ['', '']
|
|
|
|
+ option.map(item => {
|
|
|
|
+ this.optionData.push(item.code)
|
|
|
|
+ if (one[0] !== -1 && item.code === one[0]) name = item.name
|
|
|
|
+ if (val[1] && item.code === tow[0]) nameTow = item.name
|
|
|
|
+ })
|
|
|
|
+ this.optionData = Array.from(new Set(this.optionData))
|
|
|
|
+ if (this.bizCode === 0 && one[0] === -1) { // 默认全选
|
|
|
|
+ this.bizName = '业务线'
|
|
|
|
+ this.bizIdCode = this.optionData
|
|
|
|
+ const data = this.optionData.filter(item => item !== -1)
|
|
|
|
+ this.bizCode = 1
|
|
|
|
+ this.handleBizId(data)
|
|
|
|
+ } else {
|
|
|
|
+ const data = val.join().split(',')
|
|
|
|
+ if (one[0] !== -1 && this.bizCode === 1) { // 取消全选
|
|
|
|
+ this.bizIdCode = null
|
|
|
|
+ this.bizName = '业务线'
|
|
|
|
+ this.bizCode = 0
|
|
|
|
+ this.handleBizId([-1000])
|
|
|
|
+ } else if (one[0] === -1 && val.length < option.length) { // 点击全选以外的,取消全选
|
|
|
|
+ data.splice(0, 1)
|
|
|
|
+ this.bizIdCode = data
|
|
|
|
+ this.bizName = (name ? name + '/' : '') + (nameTow ? '' + nameTow : '')
|
|
|
|
+ this.bizCode = 0
|
|
|
|
+ this.handleBizId(data)
|
|
|
|
+ } else if (one[0] !== -1 && val.length === (option.length - 1)) { // 点击其余的全部,触发全选
|
|
|
|
+ this.bizIdCode = [...data]
|
|
|
|
+ this.bizIdCode.unshift([-1])
|
|
|
|
+ this.bizName = '业务线'
|
|
|
|
+ this.bizCode = 1
|
|
|
|
+ this.handleBizId(data)
|
|
|
|
+ } else if (one[0] !== -1) { // 基础多选
|
|
|
|
+ this.bizIdCode = data
|
|
|
|
+ this.bizName = name + (nameTow ? '/' + nameTow : '')
|
|
|
|
+ this.handleBizId(data)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else { // 取消全选
|
|
|
|
+ this.handleBizId([-1000])
|
|
|
|
+ this.bizName = '业务线'
|
|
|
|
+ }
|
|
|
|
+ this.paramsReset('业务线')
|
|
|
|
+ this.getList()
|
|
|
|
+ },
|
|
|
|
+ handleBizId(e) { // 业务线变动
|
|
|
|
+ this.params.monthlyReportSettingIds = e
|
|
|
|
+ },
|
|
|
|
+ // search() {
|
|
|
|
+ // const data = {}
|
|
|
|
+ // // 因为高级筛选不自动搜索,所以每次出发搜索都map renderList就好。
|
|
|
|
+ // this.listSearch.default.map(t => t.map(g => {
|
|
|
|
+ // data[g.key] = g.value
|
|
|
|
+ // }))
|
|
|
|
+ // if (this.showMore) {
|
|
|
|
+ // this.listSearch.adv.map(t => t.map(g => {
|
|
|
|
+ // data[g.key] = g.value
|
|
|
|
+ // }))
|
|
|
|
+ // }
|
|
|
|
+ // this.params = {
|
|
|
|
+ // ...this.params,
|
|
|
|
+ // ...data,
|
|
|
|
+ // startTime: data.time[0],
|
|
|
|
+ // endTime: data.time[1]
|
|
|
|
+ // }
|
|
|
|
+ // if (
|
|
|
|
+ // this.params.deptCode ||
|
|
|
|
+ // (this.params.teamIds && this.params.teamIds.length > 0)
|
|
|
|
+ // ) {
|
|
|
|
+ // this.getList()
|
|
|
|
+ // } else {
|
|
|
|
+ // this.$message({ message: '部门和更多筛选中的团队筛选项必须选一个。', type: 'warning', duration: 1000, offset: 150 })
|
|
|
|
+ // }
|
|
|
|
+ // },
|
|
|
|
+ // async getTeamOption() {
|
|
|
|
+ // const myRes = await teamQueryTeamInfoList({ type: 0 })// 我的团队
|
|
|
|
+ // const allRes = await teamQueryTeamInfoList({ type: 1 })// 所有团队
|
|
|
|
+ // const copySearchData = _.clone(this.listSearch)
|
|
|
|
+ // copySearchData.adv[0][0].option = [
|
|
|
|
+ // { label: '我的团队', options: [...myRes.data.list] },
|
|
|
|
+ // { label: '全部团队', options: [...allRes.data.list] }
|
|
|
|
+ // ]
|
|
|
|
+ // this.listSearch = copySearchData
|
|
|
|
+ // },
|
|
resetData(data) {
|
|
resetData(data) {
|
|
const _this = this
|
|
const _this = this
|
|
- // console.log(data)
|
|
|
|
return data.map(t => ({
|
|
return data.map(t => ({
|
|
...t,
|
|
...t,
|
|
key: t.value,
|
|
key: t.value,
|
|
@@ -243,7 +528,6 @@ export default {
|
|
getOnlineProcessDataRequest(params), // 上线过程
|
|
getOnlineProcessDataRequest(params), // 上线过程
|
|
getMobilePublishQualityDataRequest(params) // 移动端发布质量
|
|
getMobilePublishQualityDataRequest(params) // 移动端发布质量
|
|
]).then((result) => {
|
|
]).then((result) => {
|
|
- // console.log(result)
|
|
|
|
const titleKeyList = [
|
|
const titleKeyList = [
|
|
'onlineProblemList',
|
|
'onlineProblemList',
|
|
'onlineProblemChart',
|
|
'onlineProblemChart',
|
|
@@ -261,8 +545,7 @@ export default {
|
|
quality: { ...this.mainData.quality, ...objData }
|
|
quality: { ...this.mainData.quality, ...objData }
|
|
}
|
|
}
|
|
this.qualityLoading = false
|
|
this.qualityLoading = false
|
|
- }).catch((error) => {
|
|
|
|
- console.log(error)
|
|
|
|
|
|
+ }).catch(() => {
|
|
this.qualityLoading = false
|
|
this.qualityLoading = false
|
|
})
|
|
})
|
|
},
|
|
},
|
|
@@ -284,7 +567,6 @@ export default {
|
|
extensionType: params.verTab
|
|
extensionType: params.verTab
|
|
}) // 需求版本
|
|
}) // 需求版本
|
|
]).then((result) => {
|
|
]).then((result) => {
|
|
- // console.log(result)
|
|
|
|
const titleKeyList = [
|
|
const titleKeyList = [
|
|
'throughputList',
|
|
'throughputList',
|
|
'requirementDirectionChart',
|
|
'requirementDirectionChart',
|
|
@@ -300,8 +582,7 @@ export default {
|
|
throughput: { ...this.mainData.throughput, ...objData }
|
|
throughput: { ...this.mainData.throughput, ...objData }
|
|
}
|
|
}
|
|
this.throughputLoading = false
|
|
this.throughputLoading = false
|
|
- }).catch((error) => {
|
|
|
|
- console.log(error)
|
|
|
|
|
|
+ }).catch(() => {
|
|
this.throughputLoading = false
|
|
this.throughputLoading = false
|
|
})
|
|
})
|
|
},
|
|
},
|
|
@@ -335,7 +616,6 @@ export default {
|
|
} else {
|
|
} else {
|
|
this.qualityLoading = true
|
|
this.qualityLoading = true
|
|
}
|
|
}
|
|
-
|
|
|
|
// offlineProblemChart
|
|
// offlineProblemChart
|
|
getOfflineProblemChartDataRequest({
|
|
getOfflineProblemChartDataRequest({
|
|
...params,
|
|
...params,
|
|
@@ -417,5 +697,179 @@ export default {
|
|
<style lang="less">
|
|
<style lang="less">
|
|
.data-big-wrapper {
|
|
.data-big-wrapper {
|
|
padding: 0 10px;
|
|
padding: 0 10px;
|
|
|
|
+ .teamDrop {
|
|
|
|
+ padding-left: 15px;
|
|
|
|
+ }
|
|
|
|
+ .deptCodesClass {
|
|
|
|
+ display: inline-block;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+</style>
|
|
|
|
+
|
|
|
|
+<style scoped lang="less">
|
|
|
|
+@import '@/styles/detail-pages.less';
|
|
|
|
+.dropTeam {
|
|
|
|
+ /deep/.el-scrollbar__wrap {
|
|
|
|
+ margin: 0!important;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/deep/.el-cascader-menu__wrap {
|
|
|
|
+ overflow: inherit;
|
|
|
|
+ height: 100%;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+/deep/.el-cascader-panel.is-bordered {
|
|
|
|
+ border: none;
|
|
|
|
+ border-radius: 0px;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+.el-container{
|
|
|
|
+ width: 100%;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.icon-style-i {
|
|
|
|
+ color: #F5222D;
|
|
|
|
+ font-size: 53px;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.scheduleTip{
|
|
|
|
+ font-size: 16px;
|
|
|
|
+ font-family: MicrosoftYaHei;
|
|
|
|
+ line-height: 19px;
|
|
|
|
+ color: #333B4A;
|
|
|
|
+ opacity: 1;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.schedulePeople{
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content:space-between;
|
|
|
|
+ margin: 20px 0 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.scheduleLabel{
|
|
|
|
+ font-size: 12px;
|
|
|
|
+ font-family: MicrosoftYaHei;
|
|
|
|
+ line-height: 14px;
|
|
|
|
+ color: #666;
|
|
|
|
+ opacity: 1;
|
|
|
|
+}
|
|
|
|
+.hide-open-header();
|
|
|
|
+.bg-team {
|
|
|
|
+ .bg-project();
|
|
|
|
+ padding-right: 10px;
|
|
|
|
+}
|
|
|
|
+.no-sidebar .main-header {
|
|
|
|
+ .normal-main-header()
|
|
|
|
+}
|
|
|
|
+.main-header::after {
|
|
|
|
+ .main-header-after();
|
|
|
|
+}
|
|
|
|
+.main-header {
|
|
|
|
+ .main-header();
|
|
|
|
+ margin-bottom: 0;
|
|
|
|
+ margin-right: 0;
|
|
|
|
+ border-bottom: 1px solid rgba(155, 155, 155, .2);
|
|
|
|
+ /deep/.el-tabs__nav-wrap::after {
|
|
|
|
+ height: 0;
|
|
|
|
+ }
|
|
|
|
+ .top-tabs {
|
|
|
|
+ position: absolute;
|
|
|
|
+ left: 50%;
|
|
|
|
+ transform: translate(-50%, 0);
|
|
|
|
+ }
|
|
|
|
+ .tips {
|
|
|
|
+ height: 8px;
|
|
|
|
+ width: 8px;
|
|
|
|
+ background-color: #E02020;
|
|
|
|
+ border-radius: 50%;
|
|
|
|
+ position: absolute;
|
|
|
|
+ top: 18px;
|
|
|
|
+ right: 14px;
|
|
|
|
+ }
|
|
|
|
+ .tips-last {
|
|
|
|
+ height: 8px;
|
|
|
|
+ width: 8px;
|
|
|
|
+ background-color: #E02020;
|
|
|
|
+ border-radius: 50%;
|
|
|
|
+ position: absolute;
|
|
|
|
+ top: 18px;
|
|
|
|
+ right: 0;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+.main-section {
|
|
|
|
+ .main-section();
|
|
|
|
+ margin-right: 0;
|
|
|
|
+ width: calc(100% - 10px);
|
|
|
|
+ .title-name {
|
|
|
|
+ font-size:20px;
|
|
|
|
+ font-family:PingFangSC-Medium;
|
|
|
|
+ color:rgba(51,59,74,1);
|
|
|
|
+ }
|
|
|
|
+ .detail-info {
|
|
|
|
+ padding: 0 30px 20px 30px;
|
|
|
|
+ }
|
|
|
|
+ .tabs-change {
|
|
|
|
+ margin: 10px 35px 0 35px;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+.my-fullCalendar {
|
|
|
|
+ padding-bottom: 150px;
|
|
|
|
+}
|
|
|
|
+.el-dropdown-link {
|
|
|
|
+ color: #333B4A;
|
|
|
|
+ font-weight: 600;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+}
|
|
|
|
+/deep/.el-dropdown-menu__item {
|
|
|
|
+ max-width: 20vw;
|
|
|
|
+ overflow: scroll;
|
|
|
|
+}
|
|
|
|
+/deep/.schedule1 {
|
|
|
|
+ margin: 4px;
|
|
|
|
+ padding: 2px 10px;
|
|
|
|
+ border: none;
|
|
|
|
+}
|
|
|
|
+/deep/.schedule2 {
|
|
|
|
+ margin: 4px;
|
|
|
|
+ padding: 2px 10px;
|
|
|
|
+ border: none;
|
|
|
|
+}
|
|
|
|
+/deep/.fc-content{
|
|
|
|
+ transform: scale(1) !important;
|
|
|
|
+ margin-left: 0 !important;
|
|
|
|
+ width: auto !important;
|
|
|
|
+}
|
|
|
|
+/deep/.fc-content span{
|
|
|
|
+ bottom: 0 !important;
|
|
|
|
+}
|
|
|
|
+.icon-close {
|
|
|
|
+ z-index: 999999;
|
|
|
|
+ margin-right: 20px;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+}
|
|
|
|
+.team-val {
|
|
|
|
+ color: #333333;
|
|
|
|
+ font-weight: 500;
|
|
|
|
+ margin-left: 20px;
|
|
|
|
+}
|
|
|
|
+</style>
|
|
|
|
+<style lang="less" scoped>
|
|
|
|
+.cascaderBox {
|
|
|
|
+ display: inline-block;
|
|
|
|
+ position: relative;
|
|
|
|
+ .cascader {
|
|
|
|
+ position: absolute;
|
|
|
|
+ width: 7%;
|
|
|
|
+ /deep/.el-input__inner {
|
|
|
|
+ opacity: 0;
|
|
|
|
+ }
|
|
|
|
+ /deep/.el-input__icon {
|
|
|
|
+ display: none;
|
|
|
|
+ }
|
|
|
|
+ /deep/.el-cascader__tags .el-tag {
|
|
|
|
+ display: none;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
</style>
|
|
</style>
|