Commit fbba4694 authored by jingnan's avatar jingnan 👀

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

parents e69f0855 530fe975
...@@ -93,37 +93,43 @@ export default { ...@@ -93,37 +93,43 @@ export default {
return { return {
'subTypeName': 'InStorageRecallItem', 'subTypeName': 'InStorageRecallItem',
'reqStatus': 'Apply', 'reqStatus': 'Apply',
'outStorageId': r.inventory && r.inventory.jobResponseId || '', 'inventory': {
'outStorageIdType': r.inventory && r.inventory.jobResponseIdType || '', 'testNo': r.inventory.testNo,
'inventoryId': r.inventoryId || '', 'ispass': r.inventory.ispass,
'inventoryIdType': r.inventoryIdType || '', 'materialType': r.inventory.materialType,
'purchaseUnitId': r.inventory && r.inventory.jobResponse.jobOrder.extMaterial.extUnitId || '', 'materialCode': r.inventory.materialCode,
'purchaseUnitIdType': r.inventory && r.inventory.jobResponse.jobOrder.extMaterial.extUnitIdType || '', 'materialName': r.inventory.materialName,
'extDxSipplierId': r.inventory && r.inventory.jobResponse.jobOrder.extDxSipplierId || '', 'modelNo': r.inventory.modelNo,
'extDxSipplierIdType': r.inventory && r.inventory.jobResponse.jobOrder.extDxSipplierIdType || '', 'techspec': r.inventory.techspec,
extDxSipplier: r.inventory && r.inventory.jobResponse.jobOrder.extDxSipplier || '', 'spce': r.inventory.spce,
extMaterial: r.inventory && r.inventory.jobResponse.jobOrder.extMaterial || '', 'suppstatus': r.inventory.suppstatus,
storageZone: r.inventory && r.inventory.jobResponse.jobOrder.storageZone || '', 'lotNo': r.inventory.lotNo,
storageCondition: r.inventory && r.inventory.jobResponse.jobOrder.storageCondition || '', 'serno': r.inventory.serno,
'extMaterialId': r.inventory && r.inventory.jobResponse.jobOrder.extMaterialId || '', 'aircraftType': r.inventory.aircraftType,
'extMaterialIdType': r.inventory && r.inventory.jobResponse.jobOrder.extMaterialIdType || '', 'sorties': r.inventory.sorties,
'arrivalDate': r.inventory && r.inventory.jobResponse.jobOrder.arrivalDate || '', // 'extUnit': { unitName: r.inventory.extUnit.unitName },
'reqAmount': r.inventory && r.inventory.jobResponse.jobOrder.reqAmount || '', 'workcenter': r.inventory.workcenter,
'airModel': r.inventory && r.inventory.jobResponse.jobOrder.airModel || '', 'workunit': r.inventory.workunit,
'sorties': r.inventory && r.inventory.jobResponse.jobOrder.sorties || '', 'suppname': r.inventory.suppname,
'manufacturer': r.inventory && r.inventory.jobResponse.jobOrder.manufacturer || '', 'arrDate': r.inventory.arrDate,
'contractNo': r.inventory && r.inventory.jobResponse.jobOrder.contractNo || '', 'madDate': r.inventory.madDate,
'stockPrice': r.inventory && r.inventory.jobResponse.jobOrder.stockPrice || '', 'qualityPeriod': r.inventory.qualityPeriod,
'lotNo': r.inventory && r.inventory.jobResponse.jobOrder.lotNo || '', 'longPeriod': r.inventory.longPeriod,
'taxRate': r.inventory && r.inventory.jobResponse.jobOrder.taxRate || '', 'spotCheckPeriod': r.inventory.spotCheckPeriod,
'taxUnitPrice': r.inventory && r.inventory.jobResponse.jobOrder.taxUnitPrice || '', 'arrDrawNo': r.inventory.arrDrawNo,
'taxPrice': r.inventory && r.inventory.jobResponse.jobOrder.taxPrice || '', 'taxRate': r.inventory.taxRate,
'stockUnitPrice': r.inventory && r.inventory.jobResponse.jobOrder.stockUnitPrice || '', 'stockUnitPrice': r.inventory.stockUnitPrice,
'purchaseOrderNo': r.inventory && r.inventory.jobResponse.jobOrder.purchaseOrderNo || '', 'stockPrice': r.inventory.stockPrice,
'applyUserName': r.inventory.applyUserName,
'contractNo': r.inventory.contractNo
},
'reqAmount': r.reqAmount,
'arrivalVer': r.arrivalVer,
'taxUnitPrice': r.taxUnitPrice,
'taxPrice': r.taxPrice,
'remark': r.remark,
'operator': 'ADD', 'operator': 'ADD',
remark: r.inventory && r.inventory.jobResponse.jobOrder.remark || '', 'isRoot': r.inventory.jobResponse.jobOrder.isRoot
'isRoot': r.inventory && r.inventory.jobResponse.jobOrder.isRoot
} }
}) })
this.$emit('submitEvent', { formData: data }) this.$emit('submitEvent', { formData: data })
......
/**
* @Description: 移库入库库位选择
* @author xioln
* @date 2023-08-14
* @FilePath: applications/dee-mes/src/privateComponents/components/InStorageMoveWarehouseSelect/index.vue
*/
<template>
<div class="inStorageMoveWarehouse-select">
<el-select
v-model="selVal"
v-el-select-loadmore="loadmore"
:remote-method="remoteMethod"
:loading="loading"
clearable
filterable
remote
placeholder="请输入并选择"
size="mini"
@change="changeVal"
>
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
</template>
<script>
export default {
componentName: '移库入库库位选择',
name: 'InStorageMoveWarehouseSelect', // name写在组件的最前方,自定义组件为必填
components: {},
// 自定义指令(和method同级)
directives: {
// 下拉框懒加载(el-select-loadmore是自定义的指令,使用时前面加v-)
'el-select-loadmore': {
// el:使用自定义指令的元素(下拉框),
bind(el, binding) {
// 下拉框下拉的框
const SELECTWRAP_DOM = el.querySelector(
'.el-select-dropdown .el-select-dropdown__wrap'
)
// 增加滚动监听,
SELECTWRAP_DOM.addEventListener('scroll', function() {
// scrollHeight:当前所有选项的高度
// scrollTop:滚动的距离
// clientHeight:下拉框的高度
const condition = this.scrollHeight - this.scrollTop <= this.clientHeight + 1
// 当滚动条滚动到最底下的时候执行接口加载下一页
if (condition) {
binding.value()
}
})
}
}
},
props: {
itemObj: {
type: Object,
default: null
},
form: {
type: Object,
default: () => { }
},
middleForm: {
type: Object,
default: () => { }
},
value: {
type: [Number, String, Object],
default: () => ''
}
},
data() {
return {
options: [],
selVal: '',
querys: '', // 远程搜索输入的内容
selectLoading: false, // select加载
stopLoading: false, // 最后一次加载之后,不再加载
pageData: {// 懒加载相关参数,这里代表从第一条数据开始加载,一次加载十项
pageNumber: 1,
pageSize: 10
},
loading: false
}
},
computed: {},
watch: {
'form.extWorkCenterId': {
immediate: true,
deep: true,
handler(val) {
if (val) {
// this.getdata()
}
}
}
},
created() {
},
methods: {
changeVal() {
this.$emit('input', this.selVal)
},
// 下拉框滚动分页加载
loadmore() {
if (!this.stopLoading) {
const querys = {
pageFrom: this.pageData.pageNumber++,
pageSize: 10,
searchItems: {
items: [
{ 'fieldName': 'extname', operator: 'LIKE', value: this.querys },
{ 'fieldName': 'extCenterId', operator: 'EQ', value: this.form.extWorkCenterId }
],
operator: 'AND'
}
}
this.getdatas(querys)// 调用接口获取下拉框数据
}
},
// 远程搜索物料类别
remoteMethod(query) {
this.querys = query// 保存搜索内容
let querys = {}
// 有内容则搜索
if (query !== '') {
querys = {
pageFrom: 1,
pageSize: 10,
searchItems: {
items: [
{ 'fieldName': 'extname', operator: 'LIKE', value: query },
{ 'fieldName': 'extCenterId', operator: 'EQ', value: this.form.extWorkCenterId }
],
operator: 'AND'
}
}
} else {
// 没有内容搜10
querys = {
pageFrom: 1,
pageSize: 10,
searchItems: {
items: [
{ 'fieldName': 'extCenterId', operator: 'EQ', value: this.form.extWorkCenterId }
],
operator: 'AND'
}
}
// 重置懒加载
this.stopLoading = false
this.pageData = {// 懒加载相关参数,这里代表从第一条数据开始加载,一次加载二十项
pageNumber: 1,
pageSize: 10
}
}
// 调用接口
this.selectLoading = true
this.getdata(querys)
},
getdata(querys) {
this.selectLoading = true
this.$api.searchApi('ExtDxProductWorkUnit', querys).then(res => {
this.options = res.items.content.map(row => {
return {
value: row.id,
label: row.extname
}
})
}).finally(() => {
this.selectLoading = false
})
},
getdatas(querys) {
if (!this.querys) {
return
}
this.selectLoading = true
this.$api.searchApi('ExtDxProductWorkUnit', querys).then(res => {
const arr = res.items.content
// 如果某次返回值是[],表示已经加载完了,不必再加载
if (arr.length === 0) {
this.stopLoading = true
return
}
// 保存数据
if (querys.pageNumber === 1) {
this.options = arr.map(row => {
return {
value: row.id,
label: row.extname
}
})
} else {
this.options = [...this.options, ...arr.map(row => {
return {
value: row.id,
label: row.extname
}
})]
}
}).finally(() => {
this.selectLoading = false
})
}
}
}
</script>
<style lang='scss'></style>
/**
* @Description: 作业令号根据机型架次选择
* @author xioln
* @date 2023-08-14
* @FilePath: applications/dee-mes/src/privateComponents/components/JobNumberSelect/index.vue
*/
<template>
<div class="jobNumber-select">
<el-select v-model="selVal" placeholder="请选择" size="mini" @change="changeVal">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</template>
<script>
export default {
componentName: '作业令号',
name: 'JobNumberSelect', // name写在组件的最前方,自定义组件为必填
components: {},
props: {
itemObj: {
type: Object,
default: null
},
form: {
type: Object,
default: () => {}
},
middleForm: {
type: Object,
default: () => {}
},
value: {
type: [Number, String, Object],
default: () => ''
}
},
data() {
return {
options: [],
selVal: ''
}
},
computed: {},
watch: {
'form.sorties': {
immediate: true,
deep: true,
handler(val) {
console.log('val', val)
if (val) {
const params = {
searchItems: {
items: [
{ 'fieldName': 'aircraftTypeId', operator: 'EQ', value: this.form.aircraftType.split('+')[0] },
{ 'fieldName': 'aircraftSortiesId', operator: 'EQ', value: val.split('+')[0] }
],
operator: 'AND'
}
}
this.$api.searchApi('ORProduction', params).then(res => {
this.options = res.items.content.map(row => {
return {
value: row.id,
label: row.jobNo
}
})
})
}
}
}
},
created() {
},
methods: {
changeVal() {
this.$emit('input', this.selVal)
}
}
}
</script>
<style lang='scss'>
</style>
...@@ -304,10 +304,10 @@ export default { ...@@ -304,10 +304,10 @@ export default {
'小时<br><b>版本:</b> ' + '小时<br><b>版本:</b> ' +
(task.edition || ' ') + (task.edition || ' ') +
'<br><b>' + '<br><b>' +
task.$level === (task.$level ===
0 0
? 'CA/AO号' ? ''
: 'CA/AO号' + ':</b> ' + (task.right_text || ' ') : 'CA/AO号' + ':</b> ' + (task.right_text || ' '))
return html return html
} }
ganttAss.config.drag_resize = false ganttAss.config.drag_resize = false
......
...@@ -150,7 +150,7 @@ export default { ...@@ -150,7 +150,7 @@ export default {
} }
this.currentId = this.node.id this.currentId = this.node.id
this.gantt.clearAll() this.gantt.clearAll()
if (!this.node || !this.node.children.length) { if (!this.node || !this.node.children || !this.node.children.length) {
return return
} }
this.AOname = '' this.AOname = ''
......
...@@ -43,11 +43,12 @@ export default { ...@@ -43,11 +43,12 @@ export default {
{ title: '牌号/型号/件号', key: 'extMaterial.modelNo', align: 'center', minWidth: '120' }, { title: '牌号/型号/件号', key: 'extMaterial.modelNo', align: 'center', minWidth: '120' },
{ title: '规格', key: 'extMaterial.spec', align: 'center' }, { title: '规格', key: 'extMaterial.spec', align: 'center' },
{ title: '单位名称', key: 'extMaterial.extUnit.unitName', align: 'center' }, { title: '单位名称', key: 'extMaterial.extUnit.unitName', align: 'center' },
{ title: '申领数量', key: 'reqAmount', align: 'center', minWidth: '120', {
title: '申领数量', key: 'reqAmount', align: 'center', minWidth: '120',
component: { component: {
show: true, show: true,
render: (h, data, column, index) => { render: (h, data, column, index) => {
return (<el-input-number size='small'v-model={data.reqAmount} return (<el-input-number size='small' v-model={data.reqAmount}
on-change={(e) => { on-change={(e) => {
this.tableData = this.tableData.map(item => { this.tableData = this.tableData.map(item => {
if (item.extMaterialId === data.extMaterialId) { if (item.extMaterialId === data.extMaterialId) {
...@@ -55,7 +56,7 @@ export default { ...@@ -55,7 +56,7 @@ export default {
} }
return item return item
}) })
}}/>) }} />)
} }
} }
}, },
...@@ -113,6 +114,11 @@ export default { ...@@ -113,6 +114,11 @@ export default {
created() { created() {
// 初始化数据 // 初始化数据
}, },
mounted() {
if (this.$route.query.id) {
this.getEditData(this.$route.query.id)
}
},
methods: { methods: {
addData(data) { addData(data) {
console.log('data', data) console.log('data', data)
...@@ -126,8 +132,12 @@ export default { ...@@ -126,8 +132,12 @@ export default {
this.dialogVisible = false this.dialogVisible = false
}, },
occupy() { occupy() {
const form = { ...this.form }
form.aircraftType = form.aircraftType.split('+')[1]
form.sorties = form.sorties.split('+')[1]
const param = { const param = {
...this.form, ...form,
inStorageRequestItems: this.tableData, inStorageRequestItems: this.tableData,
subTypeName: 'OutStorageOut', subTypeName: 'OutStorageOut',
operator: 'ADD' operator: 'ADD'
...@@ -173,6 +183,46 @@ export default { ...@@ -173,6 +183,46 @@ export default {
}) })
}) })
}, },
getEditData(id) {
const param = {
'searchItems': {
'items': [
{ 'fieldName': 'subTypeName', 'operator': 'EQ', 'value': 'OutStorageOut' },
{ 'fieldName': 'id', 'operator': 'EQ', 'value': id }
]
},
openProps: [{
'name': 'inStorageRequestItems',
'openProps': [{
'name': 'extMaterial',
'openProps': [{
'name': 'resType2'
}, {
'name': 'extUnit'
}]
}, {
'name': 'extDxSipplier'
}, {
'name': 'creator'
}, {
'name': 'storageZone'
},
{
'name': 'inventoryJobResponses'
}]
}]
}
post('OutStorageRequest/search', param).then(res => {
console.log('res', res)
const data = res.items.content[0].inStorageRequestItems
data.forEach(item => {
item.allocatedAmount = this.sumArray(item.inventoryJobResponses, 'allocatedAmount')
})
this.tableData = data
}).catch((err) => {
console.log(err)
})
},
sumArray(array, key) { sumArray(array, key) {
let sum = 0 let sum = 0
for (let i = 0; i < array.length; i++) { for (let i = 0; i < array.length; i++) {
......
/**
* @Description: 架次根据机型选择
* @author xioln
* @date 2023-08-14
* @FilePath: applications/dee-mes/src/privateComponents/components/getSortiesSelect/index.vue
*/
<template>
<div class="getSorties-select">
<el-select v-model="selVal" placeholder="请选择" size="mini" @change="changeVal">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</template>
<script>
export default {
componentName: '架次',
name: 'GetSortiesSelect', // name写在组件的最前方,自定义组件为必填
components: {},
props: {
itemObj: {
type: Object,
default: null
},
form: {
type: Object,
default: () => {}
},
middleForm: {
type: Object,
default: () => {}
},
value: {
type: [Number, String, Object],
default: () => ''
}
},
data() {
return {
options: [],
selVal: ''
}
},
computed: {},
watch: {
'form.aircraftType': {
immediate: true,
deep: true,
handler(val) {
if (val) {
const params = {
searchItems: {
items: [{ 'fieldName': 'aircraftTypeId', operator: 'EQ', value: val.split('+')[0] }],
operator: 'AND'
}
}
this.$api.searchApi('AircraftSorties', params).then(res => {
this.options = res.items.content.map(row => {
return {
value: row.id + '+' + row.defName,
label: row.defName
}
})
})
}
}
}
},
created() {
// 初始化数据
},
methods: {
changeVal() {
this.$emit('input', this.selVal)
}
}
}
</script>
<style lang='scss'>
</style>
<template>
<div class="show-page-com stationPlan-maintenance-page">
<searchBar :state-options="stateOptions" @showStation="showStation" @search="search" />
<station v-show="headerShow" :state-options="stateOptions" :sorties-id="sortiesId" :form="form" @change="change" />
<gantt :form="form" :state-options="stateOptions" :class="[headerShow?'gantt-bar':'gantt-bar no-header']" />
</div>
</template>
<script>
import searchBar from './searchBar.vue'
import station from './station.vue'
import gantt from './gantt.vue'
export default {
name: 'StationPlanMaintenance',
components: { searchBar, station, gantt },
data() {
return {
sortiesId: '',
positionNumber: '',
form: {},
stateOptions: [],
headerShow: true
}
},
mounted() {
this.getStateOptions()
},
methods: {
getStateOptions() {
this.$utils.getDicListByCode('PlanState').then(res => {
this.stateOptions = res
})
},
search(form) {
this.form = { ...form }
this.form.positionNumber = this.positionNumber
this.sortiesId = form.sorties
},
change(positionNumber) {
this.positionNumber = positionNumber
this.form.positionNumber = this.positionNumber
},
showStation(flag) {
this.headerShow = flag
}
}
}
</script>
<style lang="scss">
.stationPlan-maintenance-page{
margin: 4px;
margin-top: 0px;
padding: 8px;
height: calc(100% - 20px);
width: calc(100% - 24px);
background-color: #fff;
.color{
&.Not{
background-color: #cccccc;
}
&.Yes{
background-color: #59c4e6;
}
&.Delivery{
background-color: #e87c25;
}
&.Run{
background-color: #fcce10;
}
&.Finish{
background-color: #97b552;
}
&.Paused{
background-color: #8a7ca8;
}
&.Reserved{
background-color: #c1232b;
}
&.Issued{
background-color: #bd0b9f;
}
&.TF_ZF{
background-color: #666;
}
}
.gantt-bar{
height: calc(100% - 208px);
.gantt{
height: 100%;
}
&.no-header{
height: calc(100% - 50px);
}
}
.search-bar{
height: 40px;
.legnd {
display: flex;
> div {
align-items: center;
margin-left: 8px;
display: flex;
cursor: pointer;
flex-direction: column;
> div:first-child {
line-height: 20px;
i {
display: inline-block;
width: 11px;
height: 11px;
margin-right: 6px;
&:hover {
opacity: 0.7;
}
}
span {
display: inline-block;
font-size: 10px;
line-height: 20px;
}
}
div:last-child {
font-size: 10px;
width: 100%;
line-height: 20px;
text-align: center;
}
}
}
}
.station-bar{
.load{
text-align: center;
line-height: 50px;
}
>.top{
display: flex;
margin-bottom: 15px;
> div {
// height: 160px;
flex: 1;
position: relative;
border: 1px solid #ccc;
border-radius: 5px;
max-width: 15.6%;
box-shadow: 1px 1px 5px 5px #eaeaea;
box-sizing: border-box;
&:not(:last-child) {
margin-right: 16px;
}
cursor: pointer;
&:hover {
transform: scale(1.05);
transition: 0.2s linear all;
box-shadow: 1px 1px 5px 5px #d8efff;
> div:first-child {
background-color: green;
}
}
&.cur {
box-shadow: 1px 1px 5px 5px #d8efff;
border: 1px solid #bffaff;
> div:first-child {
background-color: green;
}
}
> div:first-child {
position: absolute;
right: 0;
background-color: #ccc;
padding: 6px 10px;
color: #fff;
max-width: 50%;
min-width: 54px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
text-align: center;
font-weight: bold;
font-size: 14px;
}
> div:nth-child(2) {
margin-top: 30px;
height: 100px;
background: url("/icons/stand.png") no-repeat center center;
}
> div:last-child {
height: 26px;
line-height: 26px;
text-align: center;
font-size: 12px;
box-shadow: 1px -4px 5px -2px #eaeaea;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
&.state0 {
background-color: #92d050;
}
&.state1 {
background-color: #f2f79e;
}
&.state2 {
background-color: #f9df73;
}
&.state3 {
background-color: #f4b2a6;
}
}
}
}
}
}
</style>
<template>
<el-form :inline="true" :model="form" class="demo-form-inline search-bar">
<el-form-item label="">
<span style="cursor:pointer;" @click="headerOpen">
<i v-if="headerShow" class="el-icon-caret-top" title="收缩站位" />
<i v-else class="el-icon-caret-bottom" title="展开" />
</span>
</el-form-item>
<el-form-item label="机型:">
<el-select v-model="form.model" :style="{'width':'90px'}" size="mini" placeholder="机型">
<el-option
v-for="item in modelData"
:key="item.id"
:label="item.defName"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="架次:">
<el-select v-model="form.sorties" :style="{'width':'80px'}" size="mini" placeholder="架次">
<el-option
v-for="item in sortiesData"
:key="item.id"
:label="item.defName"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="筛选:">
<el-input v-model="form.AOName" size="mini" :style="{'width':'140px'}" placeholder="请输入AO名称" />
</el-form-item>
<el-form-item label="时间:">
<el-date-picker
v-model="form.searchTime"
type="daterange"
:style="{'width':'170px'}"
size="mini"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
/>
</el-form-item>
<el-form-item>
<el-button type="" size="mini" @click="goto">站位计划调整</el-button>
</el-form-item>
<el-form-item
style="width: calc(100% - 850px);
text-align: right;"
>
<div class="legnd">
<div
v-for="item in stateOptions"
:key="item.id"
@click="colorGetGantt(item.value)"
>
<div>
<i class="color" :class="item.value" />
<span :class="{ curtatus: item.value === curColorStatus}">{{
item.label
}}</span>
</div>
<div>{{ item.count || 0 }}</div>
</div>
</div>
</el-form-item>
</el-form>
</template>
<script>
export default {
name: 'TfMomWebSearchBar',
props: {
stateOptions: {
type: Array,
default: () => []
}
},
data() {
return {
headerShow: true,
modelData: [],
sortiesData: [],
curColorStatus: '',
timeoutId: null,
form: {}
}
},
watch: {
'form.model': {
immediate: true,
handler(val) {
if (!val) {
return
}
this.$set(this.form, 'sorties', '')
this.getSortiesList()
}
},
'form.sorties': {
immediate: true,
handler(val) {
const sorties = this.sortiesData.find(r => r.id === val)
this.$set(this.form, 'positionNumber', '')
this.$set(this.form, 'sortiesName', sorties && sorties.defName || '')
this.search()
}
},
'form.AOName': {
immediate: true,
handler(val) {
this.search()
}
},
'form.searchTime': {
immediate: true,
handler() {
this.search()
}
}
},
created() {
this.getModelData()
},
mounted() {
},
methods: {
getSortiesList() {
this.sortiesData = []
const params = { 'searchItems': { 'items': [{ 'fieldName': 'id', 'operator': 'NEQ', 'value': 0 }] }, 'sortItem': [{ 'fieldName': 'modifyTime', 'sortOrder': 'asc' }] }
this.$api.searchApi('AircraftSorties', params).then(res => {
if (res.items && res.items.content) {
this.sortiesData = res.items.content
this.$set(this.form, 'sorties', this.sortiesData[0].id)
}
})
},
getModelData() {
this.modelData = []
const params = { 'searchItems': { 'items': [{ 'fieldName': 'id', 'operator': 'NEQ', 'value': 0 }] }, 'sortItem': [{ 'fieldName': 'modifyTime', 'sortOrder': 'asc' }] }
this.$api.searchApi('AircraftType', params).then(res => {
if (res.items && res.items.content) {
this.modelData = res.items.content
this.$set(this.form, 'model', this.modelData[0].id)
}
})
},
colorGetGantt(state) {
if (this.curColorStatus === state) {
this.curColorStatus = ''
} else {
this.curColorStatus = state
}
this.form.state = this.curColorStatus
this.search()
},
headerOpen() {
this.headerShow = !this.headerShow
this.$emit('showStation', this.headerShow)
},
search() {
this.timeoutId && clearTimeout(this.timeoutId)
this.timeoutId = setTimeout(() => {
this.$emit('search', { ...this.form })
}, 500)
},
goto() {
}
}
}
</script>
<style lang="scss" scoped>
</style>
<template>
<div class="station-bar">
<div v-if="postionList.length" class="top">
<div
v-for="item in postionList"
:key="item.id"
:class="{ cur: item.id === platformId }"
@click="triggerGetGantt(item.id,item.serialNumber)"
>
<div :title="item.serialNumber">
{{ item.serialNumber }}
</div>
<div />
<div :class="item | colorFilter">
{{
"计划总数:" +
item.carryCount +
",完成数:" +
item.completeCount
}}
完成率:
{{ item | proportionFilter }}
</div>
</div>
</div>
<div v-else class="load">
<div v-show="standLoading" class="load">
<i class="el-icon-loading" />
<span>数据加载中···</span>
</div>
<div v-show="!standLoading">
<span>暂无数据</span>
</div>
</div>
</div>
</template>
<script>
import { post } from '@/utils/http'
export default {
name: 'Station',
filters: {
proportionFilter: function(row) {
var num = 0
if (row.completeCount && row.carryCount) {
return (
Math.round((row.completeCount / row.carryCount) * 1000) / 10 + '%'
)
}
return num + '%'
},
colorFilter: function(row) {
var num = 3
if (row.completeCount && row.carryCount) {
var val = row.completeCount / row.carryCount
if (val < 0.5) {
num = 3
} else if (val < 0.8) {
num = 2
} else if (val < 1) {
num = 1
} else {
num = 0
}
}
return 'state' + num
}
},
props: {
sortiesId: {
type: [Number, String],
default: () => ''
},
form: {
type: Object,
default: () => {}
}
},
data() {
return {
postionList: [],
platformId: '',
standLoading: false
}
},
watch: {
sortiesId: {
immediate: true,
handler(val) {
if (!val) {
return
}
this.getStation()
}
}
},
mounted() {
},
methods: {
getStation() {
const params = {
'searchItems': { 'items': [{ 'fieldName': 'aircraftSortiesId', 'operator': 'EQ', 'value': this.sortiesId }] },
'openProps': [{ name: 'aircraftSorties' }],
'sortItem': [{ 'fieldName': 'serialNumber', 'sortOrder': 'asc' }]
}
this.standLoading = true
post('ExtPosition/positionSearch', params).then(res => {
if (res.items) {
this.postionList = res.items
this.triggerGetGantt(this.postionList[0].id, this.postionList[0].serialNumber)
} else {
this.postionList = []
}
this.standLoading = false
}).catch(() => {
this.postionList = []
this.standLoading = false
})
},
triggerGetGantt(id, name) {
this.platformId = id
this.$emit('change', name)
}
}
}
</script>
<style lang="scss" scoped>
</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