Commit a2dcafcd authored by jingnan's avatar jingnan 👀

Merge branch 'dev' of http://94.191.100.41/tfmom/tf-mom-web into dev

parents 0a47789e 04c30ab9
<template>
<div class="inspection-disptach">
<div class="instructions-issued-top">
<el-form :inline="true" :model="searchFormData" class="instructions-issued-search" label-width="50px">
<el-col :span="8">
<el-form-item label="架次:">
<el-select v-model="searchFormData.sorties" placeholder="架次" @change="changeSorties">
<el-option
v-for="(item, i) in sortiesList"
:key="item.value + i"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="站位:">
<el-select v-model="searchFormData.postion" placeholder="站位" @change="changePostion">
<el-option
v-for="item in postionList"
:key="item.id"
:label="item.extcode"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="班组:">
<el-select v-model="searchFormData.group" placeholder="班组" @change="changeGroup">
<el-option
v-for="(item, i) in groupList"
:key="item.value + i"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-form>
</div>
<split-pane
:min-percent="18"
:default-percent="defaultPercent"
split="vertical"
class="detail-pane"
>
<template slot="paneL">
<dee-tab :tabs="tabItems" @tabClick="tabClick">
<div slot="0" style="height:100%;box-sizing:border-box">
<dee-up-table
selection-row
:index-row="indexRow"
:columns="columns"
:data="tableData"
:pagination="pagination"
@pagination-current-change="paginationCurrentChange"
@pagination-size-change="handleSizeChange"
@selection-change="selectionChange"
>
<dee-tools slot="header" :tools="tools" mode="normal" />
</dee-up-table>
</div>
<div slot="1" style="height:100%;box-sizing:border-box">
<dee-as-com
ref="detailComAlready"
:key="layConfigAlready.typeName"
:lay-config="layConfigAlready"
:form="searchFormData"
/>
</div>
</dee-tab>
</template>
<template slot="paneR">
<div class="sub-title" style="margin:0 10px">
执行派工
</div>
<div class="group-list">
<div v-for="(item, index) in groupUserList" :key="index" class="group-list-box" :class="{'active': item.isSelect}" @click="changeGroupUser(item)">
<div class="message">
<el-tooltip placement="top">
<div slot="content">
<span>未完成项/工时:</span><span>{{ item.notFinishCount }}/{{ item.notFinishWork }}(h)</span>
</div>
<div class="right-text overfllowhind"><span>未完成项/工时:</span><span>{{ item.notFinishCount }}/{{ item.notFinishWork }}(h)</span></div>
</el-tooltip>
<el-tooltip placement="top">
<div slot="content">
<span>当月完成项/工时:</span><span>{{ item.finishWork }}/{{ item.finishWork }}(h)</span>
</div>
<div class="right-text overfllowhind"><span>当月完成项/工时:</span><span>{{ item.finishWork }}/{{ item.finishWork }}(h)</span></div>
</el-tooltip>
<el-tooltip placement="top">
<div slot="content">
<span>上岗有效期:</span><span>{{ item.postValidity }}</span>
</div>
<div class="right-text overfllowhind"><span>上岗有效期:</span><span>{{ item.postValidity }}</span></div>
</el-tooltip>
</div>
<div class="author">
<el-image v-if="item.router" class="icon-author" :src="getUrl()+'/file-download/' +item.router" alt="" />
<img v-else class="icon-author2" src="/icons/author.png" alt="">
<div class="name">
{{ item.dxUserInfo.name }}
</div>
</div>
</div>
<div class="more-bar">
<span v-if="groupUserList.length < groupUserTotal" class="more" @click="getMoreData">加载更多</span>
<span v-else-if="groupUserList.length===0">暂无数据</span>
<span v-else>已全部加载!</span>
</div>
</div>
</template>
</split-pane>
</div>
</template>
<script>
import { post } from '@/utils/http'
export default {
data() {
return {
searchFormData: {
group: '',
postion: '',
sorties: ''
},
sortiesList: [],
postionList: [],
groupList: [],
groupUserList: [],
activeName: 0,
defaultPercent: 78,
indexRow: {
title: '序号',
align: 'center',
width: '70'
},
columns: [
{ title: '机型', key: 'extProcessPlan.planeType', align: 'left' },
{ title: '架次', key: 'extProcessPlan.sorties', align: 'left' },
{ title: '站位', key: 'extProcessPlan.positionNumber', align: 'left' },
{ title: '指令号', key: 'extProcessPlan.serialNumber', align: 'left' },
{ title: '指令名称', key: 'extProcessPlan.name', align: 'left' },
{ title: '工时定额', key: 'extProcessPlan.workHour', align: 'left' },
{ title: '工艺员', key: 'extProcessPlan.noteName', align: 'left' },
{ title: '计划开始', key: 'scheduledStart', align: 'left' },
{ title: '计划结束', key: 'scheduledEnd', align: 'left' }
],
tableData: [],
pagination: {
currentPage: 1,
pageSize: 20,
total: 0,
pageSizes: [20, 50, 100]
},
tools: [
{
type: 'icon',
name: '派工',
icon: '/icons/o-Referencedoc.png',
handler: {
click: () => {
this.$confirm('您确认执行该操作吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const arr = []
const user = []
this.groupUserList.forEach(item => {
if (item.isSelect) {
user.push({
subTypeName: 'CheckOut',
operator: 'ADD',
extProcessSkillUserId: item.id,
extProcessSkillUserIdType: item.subTypeName,
isMasterOperator: false,
taskState: 'N',
extProcessSkillId: item.extProcessSkillId,
extProcessSkillIdType: item.extProcessSkillIdType
})
}
})
this.selectionRow.map(item => {
arr.push(
{
id: item.id,
operator: 'MODIFY',
prodTask: user
}
)
})
post('/ProdTask/prodTaskSave?dmirStatus=Y', arr)
.then((res) => {
this.$message({
type: 'success',
message: '提交成功!'
})
this.getTableData()
})
.catch((err) => console.log(err))
.finally(() => {})
}).catch(() => {
})
}
}
}
],
groupUserTotal: 0,
groupUserPage: 1
}
},
computed: {
tabItems() {
return [
{
name: '派工',
id: '0'
},
{
name: '已派工',
id: '1'
}
]
},
layConfigAlready() {
return {
typeName: 'JoExecutePlan',
layKey: 'inspectionDisptachAlready'
}
}
},
created() {
this.getStories()
},
methods: {
getStories() {
const params = {
'searchItems': {
'children': [
{
'items': [
{
'fieldName': 'extPosition.id',
'operator': 'NOTNULL'
}
],
'operator': 'AND'
}
],
'items': [],
'operator': 'AND'
},
'openProps': [],
'sortItem': [
{
'fieldName': 'modifyTime',
'sortOrder': 'desc'
}
],
'toValidateKeys': ''
}
this.$api.searchApi('AircraftSorties', params).then(res => {
this.sortiesList = res.items.content.map(row => {
return {
value: row.id,
label: row.defName
}
})
this.$set(this.searchFormData, 'sorties', this.sortiesList[0].value)
this.$set(this.searchFormData, 'sortiesName', this.sortiesList[0].label)
this.getStation()
})
},
getStation() {
this.$api.searchApi('ExtStandPosition', {}).then(res => {
this.postionList = res.items.content
this.$set(this.searchFormData, 'postion', this.postionList[0].id)
this.$set(this.searchFormData, 'postionName', this.postionList[0].extcode)
this.getGroup()
this.getTableData()
}).catch(err => console.log(err)).finally(() => {
})
},
changeSorties() {
const sorties = this.sortiesList.find(r => r.value === this.searchFormData.sorties)
this.$set(this.searchFormData, 'sortiesName', sorties && sorties.label || '')
this.getTableData()
},
changePostion() {
const postion = this.postionList.find(r => r.id === this.searchFormData.postion)
this.$set(this.searchFormData, 'postionName', postion && postion.extcode || '')
this.getGroup()
this.getTableData()
},
getGroup() {
this.groupList = []
this.$set(this.searchFormData, 'group', '')
const params = {
'searchItems': {
'children': [
{
'items': [
{
'fieldName': 'extStandPositionId',
'operator': 'EQ',
'value': this.searchFormData.postion
},
{
'fieldName': 'isValid',
'operator': 'EQ',
'value': 'Y'
},
{
'fieldName': 'skillType',
'operator': 'EQ',
'value': 'CheckOut'
}
],
'operator': 'AND'
}
],
'items': [],
'operator': 'AND'
},
'openProps': [],
'sortItem': [
{
'fieldName': 'modifyTime',
'sortOrder': 'desc'
}
],
'toValidateKeys': ''
}
post('/ExtProcessSkill/search', params).then(res => {
if (res.items && res.items.content) {
this.groupList = res.items.content.map(row => {
return {
value: row.id,
label: row.resName
}
})
if (this.groupList.length > 0) {
this.$set(this.searchFormData, 'group', this.groupList[0].value)
this.$set(this.searchFormData, 'groupName', this.groupList[0].label)
this.getGroupUser()
}
}
})
},
changeGroup() {
const group = this.groupList.find(r => r.value === this.searchFormData.group)
this.$set(this.searchFormData, 'groupName', group && group.label || '')
this.$set(this.searchFormData, 'group', group && group.value || '')
this.getGroupUser()
},
tabClick(tab) {
this.activeName = tab.index
if (this.activeName === '1') {
this.defaultPercent = 100
} else {
this.defaultPercent = 80
}
this.getTableData()
},
getTableData() {
this.tableData = []
if (this.activeName === '1') {
if (this.$refs.detailComAlready) {
this.$refs.detailComAlready.$children[0].getData()
}
} else {
this.getInstructionsDispatchList()
// this.getGroupUser()
}
},
getInstructionsDispatchList() {
const params = {
'pageFrom': this.pagination.currentPage,
'pageSize': this.pagination.pageSize,
'searchItems': {
'children': [
{
'items': [
{
'fieldName': 'extProcessPlan.sorties',
'operator': 'EQ',
'value': this.searchFormData.sortiesName
},
{
'fieldName': 'extProcessPlan.positionNumber',
'operator': 'EQ',
'value': this.searchFormData.postionName
},
{
'fieldName': 'planState',
'operator': 'EQ',
'value': 'Issued'
},
{
'fieldName': 'extProcessPlan.id',
'operator': 'NOTNULL'
},
{
'fieldName': 'dmirStatus',
'operator': 'EQ',
'value': 'Y'
}
],
'operator': 'AND'
}
],
'items': [],
'operator': 'AND'
},
'openProps': [
{
'name': 'extProcessPlan'
},
{
'name': 'extProcessSkill'
},
{
'name': 'prodTask',
'openProps': [
{
'name': 'extProcessSkillUser'
}
]
}
],
'sortItem': [
{
'fieldName': 'modifyTime',
'sortOrder': 'desc'
}
]
}
post('/JoExecutePlan/search', params).then(res => {
if (res.items && res.items.content) {
this.tableData = res.items.content
this.pagination.total = res.items.totalElements
}
})
},
paginationCurrentChange(currentPage) {
this.pagination.currentPage = currentPage
this.getInstructionsIssuedListTo()
},
handleSizeChange(pageSize) {
this.pagination.pageSize = pageSize
this.pagination.currentPage = 1
this.getInstructionsIssuedListTo()
},
selectionChange(val) {
this.selectionRow = val
},
changeGroupUser(val) {
val.isSelect = !val.isSelect
},
getGroupUser() {
const params = {
'pageFrom': this.groupUserPage,
'pageSize': 10,
'searchItems': {
'children': [
{
'items': [
{
'fieldName': 'extProcessSkillId',
'operator': 'EQ',
'value': this.searchFormData.group
}
],
'operator': 'AND'
}
],
'items': [],
'operator': 'AND'
},
'openProps': [
{
'name': 'extProcessSkill'
}
],
'sortItem': [
{
'fieldName': 'modifyTime',
'sortOrder': 'desc'
}
],
'toValidateKeys': ''
}
post('/ExtProcessSkillUser/getSkillUser', params).then(res => {
if (res.items && res.items.content) {
res.items.content.forEach(item => {
item.isSelect = false
this.groupUserList.push(item)
})
this.groupUserTotal = res.items.totalElements
// this.groupUserList[0].isSelect = true
}
})
},
getMoreData() {
const num = Math.ceil(this.groupUserTotal / 10)
if (this.groupUserPage <= num) {
this.groupUserPage++
this.getGroupUser()
}
}
}
}
</script>
<style lang="scss">
.inspection-disptach{
background: #ffff;
height: 100%;
.group-list{
height: calc(100% - 100px);
overflow-y: scroll;
margin-bottom: 20px;
.more-bar {
margin: 10px auto;
text-align: center;
font-size: 12px;
color: #999;
.more {
margin: auto;
margin-top: 20px;
height: 26px;
line-height: 26px;
padding: 0 20px;
background: rgba(64,87,141, 1);
border-radius: 13px;
display: inline-block;
cursor: pointer;
}
}
.group-list-box{
box-sizing: border-box;
background: url("/images/dispatching.png") no-repeat;
background-size: 100% 100%;
padding: 10px;
margin: 10px 10px;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
border-radius: 10px;
font-size: 14px;
border: 3px solid #fff;
display: flex;
justify-content: center;
align-items: center;
.author{
display: flex;
justify-content: center;
align-items: flex-end;
flex-direction: column;
.icon-author {
width: 71px;
height: 94.5px;
}
.icon-author2{
width: 71px;
}
.name {
margin-top: 10px;
width: 100%;
text-align: center
}
}
.message{
width: 70%;
.right-text{
padding-top: 8px;
line-height: 24px;
}
.overfllowhind{
max-width: 100%;
word-break:keep-all;
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;
}
}
}
.active{
color: rgb(64,87,141);
font-weight: 700;
border: 3px solid rgb(64,87,141);
}
}
.instructions-issued-top{
display: flex;
align-items: center;
.instructions-issued-search {
padding: 10px 8px;
height: 40px;
width: 65%;
}
}
}
</style>
......@@ -247,7 +247,7 @@ export default {
getGroup() {
this.groupList = []
this.$set(this.searchFormData, 'group', '')
// const userId = localStorage.getItem('userId') || ''
const userId = localStorage.getItem('userId') || ''
const params = {
'searchItems': {
'children': [
......@@ -256,7 +256,7 @@ export default {
{
'fieldName': 'extProcessSkillUsers.dxUserInfoId',
'operator': 'EQ',
'value': 1626781930036
'value': userId
},
{
'fieldName': 'isValid',
......@@ -545,13 +545,6 @@ export default {
height: 40px;
width: 40%;
}
.start-working{
height: 30px;
cursor: pointer;
img{
height: 100%;
};
}
}
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment