Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
T
TF-MOM-WEB
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
TFMOM
TF-MOM-WEB
Commits
fbba4694
Commit
fbba4694
authored
Aug 15, 2023
by
jingnan
👀
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' of
http://94.191.100.41/tfmom/tf-mom-web
into dev
parents
e69f0855
530fe975
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
1522 additions
and
38 deletions
+1522
-38
stand.png
applications/architecture-dee/public/icons/stand.png
+0
-0
index.vue
...onents/components/AddPutStorageBackDetailDialog/index.vue
+36
-30
index.vue
...ponents/components/InStorageMoveWarehouseSelect/index.vue
+209
-0
index.vue
...rc/privateComponents/components/JobNumberSelect/index.vue
+87
-0
unit.vue
...-mes/src/privateComponents/components/MBOMConfig/unit.vue
+3
-3
view.vue
...-mes/src/privateComponents/components/MBOMConfig/view.vue
+1
-1
index.vue
...vateComponents/components/OutStorageOfferDetail/index.vue
+54
-4
index.vue
...c/privateComponents/components/getSortiesSelect/index.vue
+84
-0
gantt.vue
...s/assemblyPlanManagement/stationPlanMaintenance/gantt.vue
+519
-0
index.vue
...s/assemblyPlanManagement/stationPlanMaintenance/index.vue
+218
-0
searchBar.vue
...semblyPlanManagement/stationPlanMaintenance/searchBar.vue
+179
-0
station.vue
...assemblyPlanManagement/stationPlanMaintenance/station.vue
+132
-0
No files found.
applications/architecture-dee/public/icons/stand.png
0 → 100644
View file @
fbba4694
10.8 KB
applications/dee-mes/src/privateComponents/components/AddPutStorageBackDetailDialog/index.vue
View file @
fbba4694
...
...
@@ -93,37 +93,43 @@ export default {
return
{
'subTypeName'
:
'InStorageRecallItem'
,
'reqStatus'
:
'Apply'
,
'outStorageId'
:
r
.
inventory
&&
r
.
inventory
.
jobResponseId
||
''
,
'outStorageIdType'
:
r
.
inventory
&&
r
.
inventory
.
jobResponseIdType
||
''
,
'inventoryId'
:
r
.
inventoryId
||
''
,
'inventoryIdType'
:
r
.
inventoryIdType
||
''
,
'purchaseUnitId'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
extMaterial
.
extUnitId
||
''
,
'purchaseUnitIdType'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
extMaterial
.
extUnitIdType
||
''
,
'extDxSipplierId'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
extDxSipplierId
||
''
,
'extDxSipplierIdType'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
extDxSipplierIdType
||
''
,
extDxSipplier
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
extDxSipplier
||
''
,
extMaterial
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
extMaterial
||
''
,
storageZone
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
storageZone
||
''
,
storageCondition
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
storageCondition
||
''
,
'extMaterialId'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
extMaterialId
||
''
,
'extMaterialIdType'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
extMaterialIdType
||
''
,
'arrivalDate'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
arrivalDate
||
''
,
'reqAmount'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
reqAmount
||
''
,
'airModel'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
airModel
||
''
,
'sorties'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
sorties
||
''
,
'manufacturer'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
manufacturer
||
''
,
'contractNo'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
contractNo
||
''
,
'stockPrice'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
stockPrice
||
''
,
'lotNo'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
lotNo
||
''
,
'taxRate'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
taxRate
||
''
,
'taxUnitPrice'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
taxUnitPrice
||
''
,
'taxPrice'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
taxPrice
||
''
,
'stockUnitPrice'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
stockUnitPrice
||
''
,
'purchaseOrderNo'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
purchaseOrderNo
||
''
,
'inventory'
:
{
'testNo'
:
r
.
inventory
.
testNo
,
'ispass'
:
r
.
inventory
.
ispass
,
'materialType'
:
r
.
inventory
.
materialType
,
'materialCode'
:
r
.
inventory
.
materialCode
,
'materialName'
:
r
.
inventory
.
materialName
,
'modelNo'
:
r
.
inventory
.
modelNo
,
'techspec'
:
r
.
inventory
.
techspec
,
'spce'
:
r
.
inventory
.
spce
,
'suppstatus'
:
r
.
inventory
.
suppstatus
,
'lotNo'
:
r
.
inventory
.
lotNo
,
'serno'
:
r
.
inventory
.
serno
,
'aircraftType'
:
r
.
inventory
.
aircraftType
,
'sorties'
:
r
.
inventory
.
sorties
,
// 'extUnit': { unitName: r.inventory.extUnit.unitName },
'workcenter'
:
r
.
inventory
.
workcenter
,
'workunit'
:
r
.
inventory
.
workunit
,
'suppname'
:
r
.
inventory
.
suppname
,
'arrDate'
:
r
.
inventory
.
arrDate
,
'madDate'
:
r
.
inventory
.
madDate
,
'qualityPeriod'
:
r
.
inventory
.
qualityPeriod
,
'longPeriod'
:
r
.
inventory
.
longPeriod
,
'spotCheckPeriod'
:
r
.
inventory
.
spotCheckPeriod
,
'arrDrawNo'
:
r
.
inventory
.
arrDrawNo
,
'taxRate'
:
r
.
inventory
.
taxRate
,
'stockUnitPrice'
:
r
.
inventory
.
stockUnitPrice
,
'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'
,
remark
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
remark
||
''
,
'isRoot'
:
r
.
inventory
&&
r
.
inventory
.
jobResponse
.
jobOrder
.
isRoot
'isRoot'
:
r
.
inventory
.
jobResponse
.
jobOrder
.
isRoot
}
})
this
.
$emit
(
'submitEvent'
,
{
formData
:
data
})
...
...
applications/dee-mes/src/privateComponents/components/InStorageMoveWarehouseSelect/index.vue
0 → 100644
View file @
fbba4694
/**
* @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
>
applications/dee-mes/src/privateComponents/components/JobNumberSelect/index.vue
0 → 100644
View file @
fbba4694
/**
* @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
>
applications/dee-mes/src/privateComponents/components/MBOMConfig/unit.vue
View file @
fbba4694
...
...
@@ -304,10 +304,10 @@ export default {
'小时<br><b>版本:</b> '
+
(
task
.
edition
||
' '
)
+
'<br><b>'
+
task
.
$level
===
(
task
.
$level
===
0
?
'CA/AO号
'
:
'CA/AO号'
+
':</b> '
+
(
task
.
right_text
||
' '
)
?
'
'
:
'CA/AO号'
+
':</b> '
+
(
task
.
right_text
||
' '
)
)
return
html
}
ganttAss
.
config
.
drag_resize
=
false
...
...
applications/dee-mes/src/privateComponents/components/MBOMConfig/view.vue
View file @
fbba4694
...
...
@@ -150,7 +150,7 @@ export default {
}
this
.
currentId
=
this
.
node
.
id
this
.
gantt
.
clearAll
()
if
(
!
this
.
node
||
!
this
.
node
.
children
.
length
)
{
if
(
!
this
.
node
||
!
this
.
node
.
children
||
!
this
.
node
.
children
.
length
)
{
return
}
this
.
AOname
=
''
...
...
applications/dee-mes/src/privateComponents/components/OutStorageOfferDetail/index.vue
View file @
fbba4694
...
...
@@ -43,11 +43,12 @@ export default {
{
title
:
'牌号/型号/件号'
,
key
:
'extMaterial.modelNo'
,
align
:
'center'
,
minWidth
:
'120'
},
{
title
:
'规格'
,
key
:
'extMaterial.spec'
,
align
:
'center'
},
{
title
:
'单位名称'
,
key
:
'extMaterial.extUnit.unitName'
,
align
:
'center'
},
{
title
:
'申领数量'
,
key
:
'reqAmount'
,
align
:
'center'
,
minWidth
:
'120'
,
{
title
:
'申领数量'
,
key
:
'reqAmount'
,
align
:
'center'
,
minWidth
:
'120'
,
component
:
{
show
:
true
,
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
)
=>
{
this
.
tableData
=
this
.
tableData
.
map
(
item
=>
{
if
(
item
.
extMaterialId
===
data
.
extMaterialId
)
{
...
...
@@ -55,7 +56,7 @@ export default {
}
return
item
})
}}
/>
)
}}
/>
)
}
}
},
...
...
@@ -113,6 +114,11 @@ export default {
created
()
{
// 初始化数据
},
mounted
()
{
if
(
this
.
$route
.
query
.
id
)
{
this
.
getEditData
(
this
.
$route
.
query
.
id
)
}
},
methods
:
{
addData
(
data
)
{
console
.
log
(
'data'
,
data
)
...
...
@@ -126,8 +132,12 @@ export default {
this
.
dialogVisible
=
false
},
occupy
()
{
const
form
=
{
...
this
.
form
}
form
.
aircraftType
=
form
.
aircraftType
.
split
(
'+'
)[
1
]
form
.
sorties
=
form
.
sorties
.
split
(
'+'
)[
1
]
const
param
=
{
...
this
.
form
,
...
form
,
inStorageRequestItems
:
this
.
tableData
,
subTypeName
:
'OutStorageOut'
,
operator
:
'ADD'
...
...
@@ -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
)
{
let
sum
=
0
for
(
let
i
=
0
;
i
<
array
.
length
;
i
++
)
{
...
...
applications/dee-mes/src/privateComponents/components/getSortiesSelect/index.vue
0 → 100644
View file @
fbba4694
/**
* @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
>
applications/dee-mes/src/views/assemblyPlanManagement/stationPlanMaintenance/gantt.vue
0 → 100644
View file @
fbba4694
This diff is collapsed.
Click to expand it.
applications/dee-mes/src/views/assemblyPlanManagement/stationPlanMaintenance/index.vue
0 → 100644
View file @
fbba4694
<
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
>
applications/dee-mes/src/views/assemblyPlanManagement/stationPlanMaintenance/searchBar.vue
0 → 100644
View file @
fbba4694
<
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
>
applications/dee-mes/src/views/assemblyPlanManagement/stationPlanMaintenance/station.vue
0 → 100644
View file @
fbba4694
<
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
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment