Commit cc0c2be0 authored by “lixuyan”'s avatar “lixuyan”

站位计划执行页面调整

parent 2e01e64e
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
:label="item.name" :label="item.name"
:disabled="disabled" :disabled="disabled"
:name="(index+1)+''" :name="(index+1)+''"
:lazy="true" :lazy="isLazy"
> >
<!-- <el-scrollbar class="scroll_dee_tab"> --> <!-- <el-scrollbar class="scroll_dee_tab"> -->
<span v-if="item.id" slot="label" @dblclick="dblclickTab(item)"><img :src="item.icon" class="imgStyle" alt=""><span>{{ item.name }}</span></span> <span v-if="item.id" slot="label" @dblclick="dblclickTab(item)"><img :src="item.icon" class="imgStyle" alt=""><span>{{ item.name }}</span></span>
...@@ -221,6 +221,12 @@ export default { ...@@ -221,6 +221,12 @@ export default {
defaultActiveName: { defaultActiveName: {
type: String, type: String,
default: () => '' default: () => ''
},
isLazy: {
type: Boolean,
default: function() {
return true
}
} }
}, },
data() { data() {
......
...@@ -4,18 +4,19 @@ ...@@ -4,18 +4,19 @@
<div slot="0" style="height:100%;box-sizing:border-box"> <div slot="0" style="height:100%;box-sizing:border-box">
<split-pane <split-pane
:min-percent="18" :min-percent="18"
:default-percent="78" :default-percent="85"
split="vertical" split="vertical"
class="detail-pane" class="detail-pane"
> >
<template slot="paneL"> <template slot="paneL">
<div class="three-member-wrap"> <div class="three-member-wrap">
<dee-as-com <!-- <dee-as-com
ref="detailCom" ref="detailCom"
:key="layConfig.typeName" :key="layConfig.typeName"
:lay-config="layConfig" :lay-config="layConfig"
@row-click="rowClick" @row-click="rowClick"
/> /> -->
<stationPlanList @getMissData="getMissData" />
</div> </div>
</template> </template>
<template slot="paneR"> <template slot="paneR">
...@@ -40,9 +41,10 @@ import searchBar from './searchBar.vue' ...@@ -40,9 +41,10 @@ import searchBar from './searchBar.vue'
import station from './station.vue' import station from './station.vue'
import gantt from './gantt.vue' import gantt from './gantt.vue'
import missingParts from './missingParts' import missingParts from './missingParts'
import stationPlanList from './stationPlanList'
export default { export default {
name: 'StationPlanMaintenance', name: 'StationPlanMaintenance',
components: { searchBar, station, gantt, missingParts }, components: { searchBar, station, gantt, missingParts, stationPlanList },
data() { data() {
return { return {
sortiesId: '', sortiesId: '',
...@@ -98,7 +100,7 @@ export default { ...@@ -98,7 +100,7 @@ export default {
}, },
methods: { methods: {
rowClick(data) { getMissData(data) {
this.rowData = data this.rowData = data
this.getMissInfo(data.row.extProcessPlan) this.getMissInfo(data.row.extProcessPlan)
}, },
......
<template> <template>
<div class="missing-parts"> <div class="missing-parts">
<div class="search-box"> <!-- <div class="search-box">
<div class="title">生产准备符合项</div> <div class="title">生产准备符合项</div>
<div class="num">{{ detailInfo.leftItem }}/<span class="blue">{{ detailInfo.rightItem }} </span></div> <div class="num">{{ detailInfo.leftItem }}/<span class="blue">{{ detailInfo.rightItem }} </span></div>
</div> </div> -->
<div class=""> <div class="">
<h4>缺件信息列表</h4> <h4>缺件信息列表</h4>
<el-table <el-table
......
<template>
<div class="station-plan-list">
<div class="left-container">
<div class="search-box box">
<div class="title"><i class="search-icon" /><span>架次搜索</span></div>
<div class="row">
<label>机型:</label>
<el-select v-model="form.model" size="mini" placeholder="请选择" :loading="modelLoading">
<el-option v-for="item in modelData" :key="item.id" :label="item.defName" :value="item.id" />
</el-select>
</div>
<div class="row">
<label>架次:</label>
<el-select v-model="form.sorties" size="mini" placeholder="请选择" :loading="sortiesLoading">
<el-option v-for="(item, i) in sortiesData" :key="item.value + i" :label="item.label" :value="item.value" />
</el-select>
</div>
<div class="row">
<el-button size="mini" type="primary" @click="getTreeData">查询</el-button>
</div>
</div>
<div class="station-box box">
<el-tree
ref="tree"
v-loading="treeLoading"
class="plan-tree"
:data="treeData"
node-key="id"
:default-expanded-keys="defaultExpandedKeys"
:props="defaultProps"
:highlight-current="true"
:expand-on-click-node="false"
@node-click="handleNodeClick"
>
<span slot-scope="{ node, data }" class="custom-tree-node" :class="data.state">
<span class="tree-row">
<i :class="'tree' + node.level" />
<span v-if="node.level === 1" class="label" :title="data.serialNumber">{{ data.serialNumber }}</span>
<span v-if="node.level === 2">{{ data.serialNumber + ',' + data.name }}</span>
<span v-if="node.level === 3">{{ data.target.serialNumber + ',' + data.target.name }}</span>
</span>
</span>
</el-tree>
</div>
</div>
<div class="right-container">
<dee-tab :is-lazy="false" :tabs="tabItems" :show-swipe="false" :is-detail="false" @tabClick="tabClick">
<div slot="0" style="height: 100%; box-sizing: border-box">
<dee-as-com
ref="detailCom"
:key="layConfig.typeName"
:lay-config="layConfig"
@row-click="rowClick"
/>
</div>
<div slot="1" style="height: 100%; box-sizing: border-box">
<dee-as-com
ref="detailCom2"
:key="layConfig.typeName"
:lay-config="layConfig1"
@row-click="rowClick"
/>
</div>
</dee-tab>
</div>
</div>
</template>
<script>
import { post } from '@/utils/http'
export default {
name: 'StationPlanList',
data() {
return {
form: {
model: null,
sorties: null
},
modelData: [],
modelLoading: true,
sortiesData: [],
sortiesLoading: true,
treeLoading: false,
treeData: [],
defaultExpandedKeys: [],
defaultProps: {
children: 'children'
},
tabItems: [
{
name: '未确认',
id: '0'
},
{
name: '已确认',
id: '1'
}
],
layConfig: {
typeName: 'JoExecutePlan',
layKey: 'stationPlanUnConfirmList'
},
layConfig1: {
typeName: 'JoExecutePlan',
layKey: 'stationPlanConfirmList'
},
activeTab: '0',
activeNodeData: {}
}
},
watch: {
'form.model': {
immediate: true,
handler(val) {
if (!val) {
return
}
const model = this.modelData.find((r) => r.id === val)
this.$set(this.form, 'modelName', (model && model.defName) || '')
this.$set(this.form, 'sorties', '')
this.getAddRecursion()
}
},
'form.sorties': {
immediate: true,
handler(val) {
if (!val) {
return
}
const sorties = this.sortiesData.find((r) => r.value === val)
this.$set(this.form, 'sortiesName', (sorties && sorties.label) || '')
this.getTreeData()
}
}
},
created() {
this.getAddModel()
},
mounted() {},
methods: {
/**
* 获取机型
*/
getAddModel() {
const param = { searchItems: { items: [{ fieldName: 'id', operator: 'NEQ', value: 0 }] }, sortItem: [{ fieldName: 'modifyTime', sortOrder: 'asc' }] }
this.$api
.searchApi('AircraftType', param)
.then((res) => {
this.modelData = []
if (res.items && res.items.content) {
this.modelData = res.items.content
this.$nextTick(() => {
if (this.modelData.length) {
this.form.model = this.modelData[0].id
this.getAddRecursion()
}
})
} else {
this.$message({
showClose: true,
message: res.message,
type: 'error'
})
}
})
.catch((err) => console.error(err))
.finally(() => {
this.$nextTick(() => {
this.modelLoading = false
})
})
},
/**
* 获取架次
*/
getAddRecursion() {
this.sortiesLoading = true
if (!this.model) {
this.sortiesData = []
this.sorties = null
}
const params = { searchItems: { items: [{ fieldName: 'aircraftTypeId', operator: 'EQ', value: this.form.model }] }, sortItem: [{ fieldName: 'modifyTime', sortOrder: 'asc' }] }
params.openProps = [{ name: 'aircraftType' }]
this.$api
.searchApi('AircraftSorties', params)
.then((res) => {
this.sortiesData = []
if (res) {
this.sortiesData = res.items.content.map((row) => {
return {
value: row.id,
label: row.defName
}
})
this.$nextTick(() => {
if (this.sortiesData.length) {
this.form.sorties = this.sortiesData[0].value
}
})
} else {
this.$message({
showClose: true,
message: res.message,
type: 'error'
})
}
})
.catch((err) => console.error(err))
.finally(() => {
this.$nextTick(() => {
this.sortiesLoading = false
})
})
},
/**
* 获取树结构数据
*/
getTreeData() {
this.treeLoading = true
const params = {
pageFrom: 1,
pageSize: 10,
searchItems: {
children: [
{
items: [
{
fieldName: 'aircraftSorties.id', // 架次ID
operator: 'EQ',
value: this.form.sorties
}
],
operator: 'AND'
}
],
items: [],
operator: 'AND'
},
openProps: [
{
name: 'extPositionPlans'
},
{
name: 'extPositionLinks',
openProps: [
{
name: 'target',
openProps: [
{
name: 'wrProduction'
}
]
}
]
}
],
sortItem: [
{
fieldName: 'modifyTime',
sortOrder: 'desc'
}
]
}
post(`/ExtPosition/search`, params)
.then((res) => {
var data = res.items.content || []
data.map((item) => {
item.children = item.extPositionLinks
})
this.treeData = [
{
serialNumber: `BBOM-${this.form.modelName}-${this.form.sortiesName}`,
materName: '',
gaceVersio: '',
state: '',
children: data
}
]
this.defaultExpandedKeys = [this.treeData[0].children[0].id]
this.$refs.tree.setCurrentKey(this.treeData[0].children[0].children[0].id)
this.$nextTick(() => {
this.activeNodeData = this.treeData[0].children[0].children[0]
this.treeData[0].children[0].children[0].activeTab = this.activeTab
if (this.$refs.detailCom.$refs.asCom && this.$refs.detailCom.$refs.asCom.getData) {
this.$refs.detailCom.$refs.asCom.getData(this.treeData[0].children[0].children[0])
}
})
})
.catch((err) => console.log(err))
.finally(() => {
this.treeLoading = false
})
},
tabClick(val) {
this.activeTab = val.index
this.activeNodeData.activeTab = this.activeTab
this.$nextTick(() => {
if (this.activeTab === '0') {
if (this.$refs.detailCom.$refs.asCom && this.$refs.detailCom.$refs.asCom.getData) {
this.$refs.detailCom.$refs.asCom.getData(this.activeNodeData)
}
} else {
if (this.$refs.detailCom2.$refs.asCom && this.$refs.detailCom2.$refs.asCom.getData) {
this.$refs.detailCom2.$refs.asCom.getData(this.activeNodeData)
}
}
})
},
handleNodeClick(data, node) {
if (node.level === 3) {
data.activeTab = this.activeTab
this.activeNodeData = data
this.$nextTick(() => {
if (this.activeTab === '0') {
if (this.$refs.detailCom.$refs.asCom && this.$refs.detailCom.$refs.asCom.getData) {
this.$refs.detailCom.$refs.asCom.getData(data)
}
} else {
if (this.$refs.detailCom2.$refs.asCom && this.$refs.detailCom2.$refs.asCom.getData) {
this.$refs.detailCom2.$refs.asCom.getData(data)
}
}
})
}
},
rowClick(data) {
this.$emit('getMissData', data)
}
}
}
</script>
<style lang="scss">
.station-plan-list {
height: 100%;
padding: 4px;
box-sizing: border-box;
display: flex;
// flex-flow: column;
// justify-content: space-around;
.left-container {
width: 15%;
.search-box {
height: 150px;
font-size: 14px;
.title {
margin-left: 10px;
text-align: left;
margin-top: 10px;
}
.search-icon {
display: inline-block;
width: 21px;
height: 21px;
background: url(/icons/r-access.png) no-repeat;
background-size: contain;
vertical-align: middle;
}
label {
margin-right: 6px;
display: inline-block;
}
.el-select {
width: calc(100% - 60px);
}
.row {
line-height: 40px;
height: 40px;
text-align: center;
}
}
.station-box {
height: calc(100% - 150px);
}
.box {
width: 100%;
margin: 4px;
border: 1px solid #d8d8d8;
border-radius: 8px;
padding: 4px;
.plan-tree {
height: 100%;
overflow: scroll;
.el-tree-node {
width: max-content;
min-width: 100%;
}
.el-tree-node.is-current > .el-tree-node__content {
background-color: rgb(214, 214, 214) !important;
}
.el-tree-node:focus > .el-tree-node__content {
background-color: #fff;
}
&.el-tree--highlight-current .el-tree-node__content {
&.disabled {
color: #c0c4cc;
cursor: not-allowed;
background-color: #fff;
}
&.is-curr:not(.disabled),
&:hover:not(.disabled) {
font-weight: bold;
color: rgb(31, 30, 30);
background-color: rgb(214, 214, 214);
}
}
.el-tree-node {
.el-tree-node__content {
height: 40px !important;
i {
display: inline-block;
vertical-align: middle;
margin: 10px;
}
.tree1 {
background: url('/icons/aircraft.png') no-repeat;
width: 32px;
height: 30px;
}
.tree2 {
width: 21px;
height: 21px;
background: url('/icons/u513.png') no-repeat;
background-size: contain;
}
.tree3 {
width: 21px;
height: 21px;
background: url('/icons/u517.png') no-repeat;
background-size: contain;
}
.label {
vertical-align: middle;
}
.Issued.custom-tree-node,
.Run.custom-tree-node,
.New.custom-tree-node,
.Yes.custom-tree-node,
.Delivery.custom-tree-node {
color: #0000ff;
}
.Finish.custom-tree-node {
color: #008000;
}
.Reserved.custom-tree-node {
color: #ff0000;
}
.Not.custom-tree-node {
color: #999999;
}
.Paused.custom-tree-node {
color: #ffff00;
}
}
}
}
}
}
.right-container {
width: 80%;
margin-left: 20px;
}
}
</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