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
12147b9a
Commit
12147b9a
authored
Jan 05, 2024
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
0a15c831
bf4b4505
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
3754 additions
and
3 deletions
+3754
-3
form.vue
...gement/instructionIdentification/components/left/form.vue
+227
-0
index.vue
...ement/instructionIdentification/components/left/index.vue
+102
-0
tree.vue
...gement/instructionIdentification/components/left/tree.vue
+299
-0
index.vue
...ment/instructionIdentification/components/right/index.vue
+1119
-0
index.vue
...ssemblyPlanManagement/instructionIdentification/index.vue
+103
-0
http.js
applications/dee-task-center/src/utils/http.js
+2
-2
form.vue
...k/instructionIdentificationBatch/components/left/form.vue
+227
-0
index.vue
.../instructionIdentificationBatch/components/left/index.vue
+102
-0
tree.vue
...k/instructionIdentificationBatch/components/left/tree.vue
+302
-0
index.vue
...instructionIdentificationBatch/components/right/index.vue
+1166
-0
index.vue
...enter/myPlanTask/instructionIdentificationBatch/index.vue
+102
-0
taskList.vue
...er/src/views/workflow/task-center/myPlanTask/taskList.vue
+3
-1
No files found.
applications/dee-mes/src/views/assemblyPlanManagement/instructionIdentification/components/left/form.vue
0 → 100644
View file @
12147b9a
<
template
>
<section>
<div
v-if=
"!show"
class=
"from"
>
<div
class=
"icon-wrap"
><i
class=
"icon"
/>
<span>
搜索
</span></div>
<el-form
ref=
"ruleForm"
:model=
"form"
label-width=
"95px"
>
<el-form-item
label=
"机型"
prop=
"model"
>
<el-select
v-model=
"form.model"
clearable
class=
"input-with-select el-input--small"
>
<el-option
v-for=
"item in dataModel"
:key=
"item.id"
:label=
"item.defName"
:value=
"item.id"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"架次"
prop=
"sortie"
>
<el-select
v-model=
"form.sortie"
clearable
class=
"input-with-select el-input--small"
:loading=
"sortiesLoading"
>
<el-option
v-for=
"item in dataSortie"
:key=
"item.id"
:label=
"item.defName"
:value=
"item.id"
/>
</el-select>
</el-form-item>
<!--
<el-form-item
v-if=
"labelShow()"
label=
"AO(号/名称)"
prop=
"aoName"
>
<el-input
v-model=
"form.aoName"
clearable
class=
"input-with-select el-input--small"
@
change=
"searchAoname"
/>
</el-form-item>
-->
<p
class=
"btn"
>
<el-button
size=
"small"
type=
"primary"
@
click=
"searchForm"
>
查询
</el-button>
<el-button
size=
"small"
@
click=
"resetForm('ruleForm')"
>
重置
</el-button>
</p>
</el-form>
</div>
</section>
</
template
>
<
script
>
export
default
{
name
:
'Left'
,
props
:
{
show
:
{
type
:
Boolean
,
default
:
null
},
dataModel
:
{
type
:
Array
,
default
:
()
=>
{
return
[]
}
}
},
data
()
{
return
{
form
:
{
model
:
''
,
modelName
:
''
,
sortie
:
''
,
sortieName
:
''
,
aoName
:
''
},
sortiesLoading
:
true
,
dataSortie
:
[],
isCollapse
:
false
}
},
watch
:
{
dataModel
(
newV
)
{
if
(
newV
.
length
<=
0
)
return
this
.
$nextTick
(()
=>
{
this
.
form
.
model
=
newV
[
0
].
id
this
.
form
.
modelName
=
newV
[
0
].
defName
this
.
getAddRecursion
()
})
},
'form.model'
:
{
immediate
:
true
,
handler
(
val
)
{
if
(
!
val
)
{
return
}
const
model
=
this
.
dataModel
.
find
((
r
)
=>
r
.
id
===
val
)
this
.
$set
(
this
.
form
,
'modelName'
,
(
model
&&
model
.
defName
)
||
''
)
this
.
getAddRecursion
()
}
},
'form.sortie'
:
{
immediate
:
true
,
handler
(
val
)
{
if
(
!
val
)
{
return
}
const
sorties
=
this
.
dataSortie
.
find
((
r
)
=>
r
.
id
===
val
)
this
.
$set
(
this
.
form
,
'sortieName'
,
(
sorties
&&
sorties
.
defName
)
||
''
)
}
}
},
mounted
()
{
this
.
getAddRecursion
()
},
methods
:
{
labelShow
()
{
if
(
this
.
$parent
.
$parent
&&
this
.
$parent
.
$parent
.
name
===
'right'
&&
this
.
$parent
.
$parent
.
isActive
===
'ag'
)
{
return
false
}
else
{
return
true
}
},
searchForm
()
{
this
.
$parent
.
$children
.
filter
(
function
(
item
)
{
return
item
.
name
===
'tree'
})[
0
]
.
getTreeData
(
this
.
form
)
},
searchAoname
()
{
const
that
=
this
if
(
that
.
$parent
.
$parent
.
name
===
'right'
)
{
that
.
$parent
.
$parent
.
getTableData
()
}
else
{
this
.
searchForm
()
}
},
/**
* 获取架次数据
*/
getAddRecursion
()
{
this
.
sortiesLoading
=
true
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
.
dataSortie
=
[]
if
(
res
)
{
this
.
dataSortie
=
res
&&
res
.
items
&&
res
.
items
.
content
this
.
$nextTick
(()
=>
{
if
(
this
.
dataSortie
.
length
)
{
this
.
form
.
sortie
=
this
.
dataSortie
[
0
].
id
this
.
form
.
sortieName
=
this
.
dataSortie
[
0
].
defName
this
.
searchForm
()
}
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
this
.
$nextTick
(()
=>
{
this
.
sortiesLoading
=
false
})
})
},
resetForm
()
{
if
(
this
.
dataModel
.
length
)
{
this
.
form
.
model
=
this
.
dataModel
[
0
].
id
this
.
getAddRecursion
()
}
this
.
form
.
aoName
=
null
}
}
}
</
script
>
<
style
lang=
"scss"
>
.from
{
border
:
1px
solid
#ccc
;
padding
:
20px
20px
5px
20px
;
border-radius
:
5px
;
box-sizing
:
border-box
;
.icon-collapse
{
display
:
inline-block
;
width
:
21px
;
height
:
21px
;
background-size
:
contain
;
cursor
:
pointer
;
position
:
absolute
;
z-index
:
10
;
top
:
20px
;
right
:
20px
;
}
.tobottom
{
background
:
url("/icons/tobottom.png")
no-repeat
;
}
.totop
{
background
:
url("/icons/totop.png")
no-repeat
;
}
.icon-wrap
{
margin-bottom
:
10px
;
position
:
relative
;
.icon
{
display
:
inline-block
;
width
:
21px
;
height
:
21px
;
background
:
url("/icons/r-access.png")
no-repeat
;
background-size
:
contain
;
vertical-align
:
middle
;
}
span
{
vertical-align
:
middle
;
// font-size: 12px;
}
}
.btn
{
text-align
:
center
;
}
.el-form-item
{
margin-bottom
:
8px
;
}
}
/
deep
/
.el-input
{
height
:
32px
;
}
/
deep
/
.el-button
{
border-radius
:
5px
;
padding
:
12px
30px
;
}
</
style
>
applications/dee-mes/src/views/assemblyPlanManagement/instructionIdentification/components/left/index.vue
0 → 100644
View file @
12147b9a
<
template
>
<section
class=
"single-mbom-left"
:class=
"
{ collapse: isCollapse }">
<div
class=
"left-menu"
>
<searchForm
ref=
"searchForm"
:show=
"isCollapse"
:data-model=
"searchData.model"
/>
<!--
<i
class=
"iconTo"
:class=
"[isCollapse ? 'toright' : 'toleft']"
@
click=
"handleCollapse"
/>
-->
<tree
ref=
"tree"
class=
"tree"
:is-collapse=
"isCollapse"
/>
</div>
</section>
</
template
>
<
script
>
import
searchForm
from
'./form'
import
tree
from
'./tree'
export
default
{
components
:
{
searchForm
,
tree
},
props
:
{
searchData
:
{
type
:
Object
,
default
:
()
=>
{
return
{
model
:
[]
}
}
}
},
data
()
{
return
{
isCollapse
:
false
}
},
computed
:
{},
mounted
()
{
},
created
()
{},
methods
:
{
// handleCollapse() {
// this.isCollapse = !this.isCollapse
// this.$emit('handleCollapse', this.isCollapse)
// }
}
}
</
script
>
<
style
lang=
"scss"
>
.single-mbom-left
{
height
:
100%
;
// width: 320px;
.left-menu
{
position
:
relative
;
display
:
flex
;
flex-direction
:
column
;
height
:
100%
;
.iconTo
{
display
:
block
;
width
:
18px
;
height
:
21px
;
background-size
:
contain
;
cursor
:
pointer
;
position
:
absolute
;
top
:
292px
;
}
// .toleft {
// background: url("/icons/toleft.png") no-repeat;
// right: -18px;
// }
// .toright {
// background: url("/icons/toright.png") no-repeat;
// left: -10px;
// }
}
p
{
text-align
:
right
;
.b-packup
{
display
:
inline-block
;
width
:
21px
;
height
:
21px
;
background
:
url("/icons/b-packup.png")
no-repeat
;
background-size
:
contain
;
cursor
:
pointer
;
}
}
&
.collapse
{
width
:
0px
;
}
}
</
style
>
applications/dee-mes/src/views/assemblyPlanManagement/instructionIdentification/components/left/tree.vue
0 → 100644
View file @
12147b9a
<
template
>
<section
v-show=
"!isCollapse"
class=
"left-tree"
>
<el-tree
ref=
"tree"
class=
"tree"
:data=
"treeData"
default-expand-all
node-key=
"id"
:current-node-key=
"currentNodekey"
:props=
"defaultProps"
:highlight-current=
"true"
:expand-on-click-node=
"false"
@
node-click=
"handleNodeClick"
>
<span
slot-scope=
"
{ data }"
class="custom-tree-node"
:class="[{ 'is-leaff': data.isLeaf }, { 'is-curr': data.id == curId }]"
>
<span
class=
"tree-row"
>
<i
:class=
"data.icon"
/>
<span
class=
"label"
>
{{
data
.
title
}}
</span>
<!--
<span>
{{
"("
+
data
.
quantity
+
"/"
+
data
.
total
+
")"
}}
</span>
-->
</span>
</span>
</el-tree>
</section>
</
template
>
<
script
>
// import { post } from '@/utils/http'
import
$
from
'jquery'
export
default
{
name
:
'Tree'
,
props
:
{
isCollapse
:
{
type
:
Boolean
,
default
:
null
}
},
data
()
{
return
{
// 组件唯一标识
name
:
'tree'
,
treeData
:
[],
rowData
:
{},
curId
:
null
,
// 判断当前组件处于指令标识还是Mbom
isMbom
:
false
,
curNodeTitle
:
null
,
assembly
:
null
,
defaultProps
:
{
children
:
'children'
,
label
:
'label'
},
curTree
:
{},
currentNodekey
:
''
}
},
mounted
()
{
this
.
$bus
.
$on
(
'getPositionData'
,
()
=>
{
this
.
getTreeData
()
})
// const that = this
// if (that.$parent.$parent.name === 'right') {
// that.assembly = that.$parent.$parent.$parent.$parent
// that.isMbom = true
// } else {
// that.assembly = that.$parent.$parent.$children.filter(function(item) {
// return item.name === 'right'
// })[0]
// }
},
methods
:
{
handleNodeClick
(
data
,
node
,
event
)
{
if
(
!
data
||
!
data
.
id
)
return
this
.
$bus
.
$emit
(
'getPlanData'
,
data
,
node
?
node
.
level
:
data
.
level
)
},
/**
* 高亮状态
*/
highlightTreeRow
()
{
if
(
this
.
isMbom
)
{
this
.
$nextTick
(()
=>
{
if
(
this
.
assembly
.
isActive
===
'ag'
||
this
.
assembly
.
isActive
===
'ins'
)
{
$
(
'.el-tree-node__content'
).
each
((
index
,
ele
)
=>
{
$
(
ele
).
removeClass
(
'disabled'
)
$
(
ele
).
removeClass
(
'is-curr'
)
if
(
$
(
ele
).
find
(
'.is-leaff'
).
length
)
{
$
(
ele
).
addClass
(
'hhover'
)
}
else
{
$
(
ele
).
addClass
(
'disabled'
)
}
if
(
$
(
ele
).
find
(
'.is-curr'
).
length
)
{
$
(
ele
).
addClass
(
'is-curr'
)
}
})
}
else
{
$
(
'.el-tree-node__content'
).
each
((
index
,
ele
)
=>
{
$
(
ele
).
removeClass
(
'disabled'
)
$
(
ele
).
removeClass
(
'is-curr'
)
if
(
$
(
ele
).
find
(
'.is-leaff'
).
length
)
{
$
(
ele
).
addClass
(
'disabled'
)
}
else
{
$
(
ele
).
addClass
(
'hhover'
)
}
if
(
$
(
ele
).
find
(
'.is-curr'
).
length
)
{
$
(
ele
).
addClass
(
'is-curr'
)
}
})
}
})
}
else
{
this
.
$nextTick
(()
=>
{
$
(
'.el-tree-node__content'
).
each
((
index
,
ele
)
=>
{
$
(
ele
).
removeClass
(
'disabled'
)
$
(
ele
).
removeClass
(
'is-curr'
)
if
(
$
(
ele
).
find
(
'.is-leaff'
).
length
)
{
$
(
ele
).
addClass
(
'disabled'
)
}
else
{
$
(
ele
).
addClass
(
'hhover'
)
}
if
(
$
(
ele
).
find
(
'.is-curr'
).
length
)
{
$
(
ele
).
addClass
(
'is-curr'
)
}
})
})
}
},
statuwMbom
(
id
)
{
if
(
id
)
{
this
.
curId
=
id
}
const
that
=
this
if
(
that
.
isMbom
)
{
if
(
this
.
assembly
.
isActive
===
'ass'
)
{
this
.
handleNodeClick
(
that
.
data
[
0
].
children
[
0
],
this
.
froms
.
aoName
)
}
else
{
this
.
handleNodeClick
(
that
.
data
[
0
],
this
.
froms
.
aoName
)
}
}
this
.
highlightTreeRow
()
},
/**
* 获取树结构数据
*/
getTreeData
(
froms
)
{
// var that = this
if
(
froms
)
{
this
.
froms
=
froms
}
const
params
=
{
pageFrom
:
1
,
pageSize
:
9999
,
searchItems
:
{
children
:
[
{
items
:
[
{
fieldName
:
'aircraftSorties.id'
,
// 架次ID
operator
:
'EQ'
,
value
:
this
.
froms
.
sortie
}
],
operator
:
'AND'
}
],
items
:
[],
operator
:
'AND'
},
openProps
:
[],
sortItem
:
[
{
fieldName
:
'serialNumber'
,
sortOrder
:
'desc'
}
]
}
this
.
$api
.
searchApi
(
'ExtPosition'
,
params
).
then
((
res
)
=>
{
// let quantity = 0
// let total = 0
const
data
=
[{
title
:
this
.
froms
.
modelName
+
'-'
+
this
.
froms
.
sortieName
,
icon
:
'aircraft'
,
id
:
this
.
froms
.
sortie
,
serialNo
:
this
.
froms
.
sortieName
,
isLeaf
:
true
,
disabled
:
true
,
level
:
1
,
children
:
res
.
items
.
content
.
map
((
t
)
=>
{
// quantity += t.completeCount
// total += t.carryCount
return
{
serialNo
:
this
.
froms
.
sortieName
,
title
:
t
.
serialNumber
,
icon
:
'c-backups3'
,
id
:
t
.
id
// quantity: t.completeCount,
// total: t.carryCount
}
})
// quantity: quantity,
// total: total
}]
this
.
treeData
=
data
this
.
handleNodeClick
(
data
[
0
])
this
.
currentNodekey
=
data
[
0
].
id
this
.
$nextTick
(()
=>
{
this
.
$refs
.
tree
.
setCurrentKey
(
this
.
currentNodekey
)
})
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{})
}
}
}
</
script
>
<
style
lang=
"scss"
>
::-webkit-scrollbar
{
width
:
6px
;
height
:
6px
;
}
::-webkit-scrollbar-thumb
{
border-radius
:
100px
;
background
:
#dcdfe6
;
}
.left-tree
{
margin-top
:
20px
;
border
:
1px
solid
#ccc
;
padding
:
20px
;
border-radius
:
5px
;
box-sizing
:
border-box
;
flex-grow
:
1
;
overflow
:
auto
;
>
.tree
{
//当前选中项
&
.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
{
// margin: 20px 0 !important;
.el-tree-node__content
{
height
:
40px
!
important
;
// &:hover {
// font-weight: bold;
// color: #000;
// }
i
{
display
:
inline-block
;
vertical-align
:
middle
;
margin
:
10px
;
}
.aircraft
{
background
:
url("/icons/aircraft.png")
no-repeat
;
width
:
32px
;
height
:
30px
;
}
.c-backups3
{
width
:
21px
;
height
:
21px
;
background
:
url("/icons/u513.png")
no-repeat
;
background-size
:
contain
;
}
.label
{
vertical-align
:
middle
;
}
}
}
}
overflow
:
hidden
;
&
:hover
{
overflow
:
auto
;
}
}
// .sidebar-container.sidebar-container{
// display: none;
// }
</
style
>
applications/dee-mes/src/views/assemblyPlanManagement/instructionIdentification/components/right/index.vue
0 → 100644
View file @
12147b9a
<
template
>
<section
class=
"single-sortie-instruction-identification-right"
>
<div
class=
"header"
>
<div
class=
"tools"
>
<el-input
v-model=
"aoName"
size=
"mini"
clearable
placeholder=
"AO(号/名称)"
class=
"inputSearch"
>
<el-button
slot=
"append"
icon=
"el-icon-search"
@
click=
"getSearchTableData"
/>
</el-input>
<!--
<span
v-if=
"jurisdId !== 'Activity_0v2qfnh'"
>
提示:
<i
class=
"el-icon-edit-outline"
/>
可双击编辑列
</span>
<dee-tools
app-name=
"tf-mom"
:tools=
"tools"
mode=
"normal"
:collapse=
"false"
/>
-->
</div>
</div>
<div
class=
"table"
>
<div>
<div>
<el-table
ref=
"table"
:data=
"tableData"
height=
"100%"
border
size=
"mini"
highlight-current-row
:cell-class-name=
"deeTableCellStyle"
@
row-click=
"rowInitClick"
@
selection-change=
"checkPreservation"
@
cell-click=
"deeTableEdit"
>
<el-table-column
type=
"selection"
:width=
"55"
align=
"center"
/>
<el-table-column
type=
"index"
:width=
"80"
label=
"序号"
align=
"center"
/>
<el-table-column
prop=
"number"
align=
"center"
label=
"AO号"
:min-width=
"250"
sortable
show-overflow-tooltip
/>
<el-table-column
prop=
"name"
align=
"center"
label=
"AO名称"
:min-width=
"120"
sortable
show-overflow-tooltip
/>
<el-table-column
prop=
"gaceVersion"
align=
"center"
label=
"版本"
:width=
"80"
sortable
/>
<el-table-column
prop=
"sorties"
align=
"center"
label=
"有效架次"
:width=
"120"
sortable
/>
<el-table-column
prop=
"firstCheckFlag"
align=
"center"
label=
"首件检验标识"
:width=
"135"
>
<template
slot=
"header"
>
<span>
首件检验标识
</span>
<i
v-if=
"loginUser === '1'"
class=
"el-icon-edit-outline"
/>
</
template
>
<
template
slot-scope=
"scope"
>
<el-select
v-if=
"scope.row.firstCheckFlagSelect"
v-model=
"scope.row.firstCheckFlag"
placeholder=
"请选择"
@
change=
"deeTableBlur(scope.row, true)"
@
visible-change=
"visibleChange($event, scope.row)"
>
<el-option
:key=
"1"
label=
"是"
value=
"是"
/>
<el-option
:key=
"2"
label=
"否"
value=
"否"
/>
</el-select>
<span
v-else
>
{{
scope
.
row
[
scope
.
column
.
property
]
}}
</span>
<i
v-if=
"scope.row.firstCheckFlagLoading"
class=
"el-icon-loading"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"countWorkHour"
align=
"center"
label=
"定额工时(min)"
:width=
"150"
>
<
template
slot=
"header"
>
<span>
定额工时(min)
</span>
<i
v-if=
"loginUser=== '1'"
class=
"el-icon-edit-outline"
/>
</
template
>
<
template
slot-scope=
"scope"
>
<el-input
v-if=
"scope.row.countWorkHourSelect"
v-model=
"scope.row.countWorkHour"
type=
"number"
:min=
"0"
@
click
.
stop
.
native
@
focus=
"tableInputFocus($event, true)"
@
blur=
"deeTableBlur(scope.row, false)"
/>
<span
v-else
>
{{
scope
.
row
[
scope
.
column
.
property
]
}}
</span>
<i
v-if=
"scope.row.countWorkHourLoading"
class=
"el-icon-loading"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"workHour"
align=
"center"
label=
"工期(h)"
:width=
"120"
sortable
/>
<el-table-column
prop=
"stateDisplayName"
align=
"center"
label=
"状态"
:width=
"90"
sortable
:formatter=
"applyStatusFormatter"
/>
<el-table-column
prop=
"userName"
align=
"center"
label=
"编制者"
:width=
"130"
sortable
/>
<el-table-column
prop=
"createTime"
align=
"center"
label=
"接收时间"
:width=
"180"
sortable
/>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"120"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"danger"
size=
"small"
@
click
.
native
.
prevent=
"close(scope.row)"
>
强制关闭
</el-button>
</
template
>
</el-table-column>
</el-table>
</div>
<el-pagination
:current-page=
"tablePagination.currentPage"
:page-sizes=
"tablePagination.pageSizes"
:page-size=
"tablePagination.pageSize"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"tablePagination.total"
@
size-change=
"setPage"
@
current-change=
"setPage($event, true)"
/>
</div>
<div>
<div>
<el-table
v-loading=
"workProcedureLoading"
:data=
"workProcedureData"
height=
"100%"
border
size=
"mini"
:cell-class-name=
"deeTableCellStyle"
@
cell-click=
"workProcedureEdit"
>
<el-table-column
type=
"index"
align=
"center"
label=
"序号"
:width=
"80"
/>
<el-table-column
prop=
"operationNumber"
align=
"center"
label=
"工序号"
show-overflow-tooltip
/>
<el-table-column
prop=
"operationName"
align=
"center"
label=
"工序名称"
show-overflow-tooltip
/>
<el-table-column
prop=
"checkFlag"
align=
"center"
label=
"是否检验"
show-overflow-tooltip
/>
<el-table-column
prop=
"keyOperation"
align=
"center"
label=
"关键标识"
:width=
"120"
/>
<el-table-column
prop=
"airFlag"
align=
"center"
label=
"适航标识"
:width=
"200"
>
<
template
slot=
"header"
>
<span>
适航标识
</span>
<i
v-if=
"loginUser === '1'"
class=
"el-icon-edit-outline"
/>
</
template
>
<
template
slot-scope=
"scope"
>
<el-select
v-if=
"scope.row.airFlagSelect"
v-model=
"scope.row.airFlag"
placeholder=
"请选择"
@
change=
"workProcedureBlur(scope.row, true)"
@
visible-change=
"
visibleWorkProcedureChange($event, scope.row)
"
>
<el-option
:key=
"0"
label=
" "
value=
" "
/>
<el-option
:key=
"1"
label=
"目击"
value=
"目击"
/>
<el-option
:key=
"2"
label=
"AAD"
value=
"AAD"
/>
</el-select>
<span
v-else
>
{{
scope
.
row
[
scope
.
column
.
property
]
}}
</span>
<i
v-if=
"scope.row.airFlagLoading"
class=
"el-icon-loading"
/>
</
template
>
</el-table-column>
</el-table>
</div>
<el-pagination
:current-page=
"workProcedurePage.currentPage"
:page-sizes=
"workProcedurePage.pageSizes"
:page-size=
"workProcedurePage.pageSize"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"workProcedurePage.total"
@
size-change=
"workProcedureSetPage"
@
current-change=
"workProcedureSetPage($event, true)"
/>
</div>
</div>
</section>
</template>
<
script
>
import
{
post
,
downloadFile
}
from
'@/utils/http'
export
default
{
data
()
{
return
{
// 识别组件
name
:
'right'
,
// 工具栏
tools
:
[],
tablePagination
:
{
currentPage
:
1
,
pageSize
:
10
,
total
:
0
,
pageSizes
:
[
5
,
10
,
20
,
50
]
},
workProcedurePage
:
{
currentPage
:
1
,
pageSize
:
10
,
total
:
0
,
pageSizes
:
[
5
,
10
,
20
,
50
]
},
// 加载中
loading
:
false
,
curRowId
:
null
,
curTableId
:
null
,
// 选中数据
selctionDatas
:
[],
selctionData
:
''
,
// 表格数据
tableData
:
[],
aoLoading
:
false
,
workProcedureData
:
[],
workProcedureLoading
:
false
,
// 默认展示的表格列
deeColums
:
[],
treeData
:
[],
addLoading
:
false
,
timer
:
null
,
workProcedureTimer
:
null
,
aoName
:
''
,
countWorkHour
:
0
,
workProcedureWworkHour
:
0
,
sortiesData
:
[],
jurisdId
:
' '
,
stateDisplayName
:
true
,
seePdfShow
:
false
,
stateOption
:
[],
nodeData
:
{},
level
:
null
,
loginUser
:
localStorage
.
getItem
(
'userId'
)
}
},
created
()
{
this
.
jurisdId
=
this
.
$route
.
query
.
taskDefinitionKey
this
.
getTools
()
},
mounted
()
{
this
.
$bus
.
$on
(
'getPlanData'
,
(
data
,
level
)
=>
{
this
.
$nextTick
(()
=>
{
this
.
nodeData
=
data
this
.
level
=
level
this
.
getTableData
(
data
,
level
)
})
})
this
.
getDicListByCode
()
},
methods
:
{
applyStatusFormatter
(
row
,
column
,
cellValue
,
index
)
{
const
obj
=
this
.
stateOption
.
find
(
m
=>
m
.
value
===
cellValue
)
return
obj
?
obj
.
label
:
''
},
async
getDicListByCode
()
{
this
.
stateOption
=
await
this
.
$utils
.
getDicListByCode
(
'ObjStatus'
)
},
/**
* 工具栏
*/
getTools
()
{
this
.
tools
=
[
{
name
:
'提交'
,
icon
:
'/icons/check.png'
,
handler
:
{
click
:
()
=>
this
.
submit
()
}
}
]
},
rowInitClick
(
row
,
column
,
event
)
{
this
.
workProcedurePage
.
currentPage
=
1
this
.
workProcedurePage
.
pageSize
=
10
this
.
rowClick
(
row
,
column
,
event
)
},
workProcedureSetPage
(
$event
,
state
)
{
if
(
state
)
{
this
.
workProcedurePage
.
currentPage
=
$event
}
else
{
this
.
workProcedurePage
.
currentPage
=
1
this
.
workProcedurePage
.
pageSize
=
$event
}
this
.
rowClick
()
},
/**
* 提交
*/
submit
()
{
if
(
!
this
.
selctionData
)
{
this
.
$message
({
showClose
:
true
,
message
:
'没有勾选数据'
,
type
:
'error'
})
return
}
this
.
aoLoading
=
true
const
ids
=
this
.
selctionDatas
.
map
(
item
=>
item
.
processTaskId
)
post
(
'DxWorkflowTask/apply/pass?taskIds='
+
ids
.
join
(
','
),
{}
)
.
then
((
res
)
=>
{
if
(
res
.
message
.
includes
(
'成功'
))
{
this
.
$bus
.
$emit
(
'getPositionData'
)
// this.$parent.$refs.left.$refs.tree.getTreeData()
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'success'
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
this
.
aoLoading
=
false
})
},
reject
()
{
if
(
!
this
.
selctionData
)
{
this
.
$message
({
showClose
:
true
,
message
:
'没有勾选数据'
,
type
:
'error'
})
return
}
this
.
aoLoading
=
true
const
ids
=
this
.
selctionDatas
.
map
(
item
=>
item
.
processTaskId
)
post
(
'DxWorkflowTask/apply/reject?taskIds='
+
ids
.
join
(
','
),
{}
)
.
then
((
res
)
=>
{
if
(
res
.
message
.
includes
(
'成功'
))
{
this
.
$bus
.
$emit
(
'getPositionData'
)
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'success'
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
this
.
aoLoading
=
false
})
},
cancel
()
{
if
(
!
this
.
selctionData
)
{
this
.
$message
({
showClose
:
true
,
message
:
'没有勾选数据'
,
type
:
'error'
})
return
}
this
.
aoLoading
=
true
const
ids
=
this
.
selctionDatas
.
map
(
item
=>
item
.
processTaskId
)
post
(
'DxWorkflowTask/apply/cancellation?taskIds='
+
ids
.
join
(
','
),
{}
)
.
then
((
res
)
=>
{
if
(
res
.
message
.
includes
(
'成功'
))
{
this
.
$bus
.
$emit
(
'getPositionData'
)
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'success'
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
this
.
aoLoading
=
false
})
},
// /**
// * 导入
// */
// handleImport() {
// this.HttpRequest(
// '/DxProcessOperation/importByExcel?id=196697352507000',
// {
// id: this.curRowId
// },
// 'post'
// )
// .then((res) => {
// })
// .catch((err) => console.error(err))
// .finally(() => {})
// },
/**
* 导出
*/
handleExport
()
{
const
params
=
{
pageFrom
:
this
.
tablePagination
.
currentPage
,
pageSize
:
this
.
tablePagination
.
pageSize
,
searchItems
:
{
items
:
[
{
fieldName
:
'sorties'
,
operator
:
'EQ'
,
value
:
this
.
nodeData
.
serialNo
}
],
operator
:
'AND'
},
openProps
:
[],
sortItem
:
[
{
fieldName
:
'serialNumber'
,
sortOrder
:
'desc'
}
]
}
if
(
this
.
level
===
2
)
{
params
.
searchItems
.
items
.
push
(
{
fieldName
:
'positionNumber'
,
operator
:
'EQ'
,
value
:
this
.
nodeData
.
title
})
}
const
downloadTitle
=
'单架次指令标识-'
+
this
.
nodeData
.
title
+
'.xlsx'
downloadFile
(
`ExtProcessPlan/download/excel?taskDefinitionKey=
${
this
.
$route
.
query
.
taskDefinitionKey
}
`
,
'post'
,
params
).
then
(
res
=>
{
this
.
$utils
.
downLoadFile
(
res
,
downloadTitle
)
})
},
getSearchTableData
()
{
this
.
getTableData
(
this
.
nodeData
,
this
.
level
)
},
/**
* 获取表格数据
*/
getTableData
(
data
,
level
)
{
const
that
=
this
that
.
aoLoading
=
true
that
.
tableData
=
[]
that
.
workProcedureData
=
[]
const
params
=
{
pageFrom
:
this
.
tablePagination
.
currentPage
,
pageSize
:
this
.
tablePagination
.
pageSize
,
searchItems
:
{
children
:
[
{
items
:
[
{
fieldName
:
'sorties'
,
operator
:
'EQ'
,
value
:
data
.
serialNo
},
{
'fieldName'
:
'subTypeName'
,
'operator'
:
'IN'
,
'value'
:
[
'ExtProcessPlanAOR'
,
'ExtProcessPlanAssembly'
]
}
],
operator
:
'AND'
},
{
'items'
:
[
{
'fieldName'
:
'serialNumber'
,
'operator'
:
'LIKE'
,
'value'
:
this
.
aoName
},
{
'fieldName'
:
'name'
,
'operator'
:
'LIKE'
,
'value'
:
this
.
aoName
}
],
'operator'
:
'OR'
}
]
},
openProps
:
[],
sortItem
:
[
{
fieldName
:
'serialNumber'
,
sortOrder
:
'desc'
}
]
}
if
(
level
===
2
)
{
params
.
searchItems
.
children
[
0
].
items
.
push
(
{
fieldName
:
'positionNumber'
,
operator
:
'EQ'
,
value
:
data
.
title
})
}
this
.
$api
.
searchApi
(
'ExtProcessPlan'
,
params
)
.
then
((
res
)
=>
{
if
(
res
&&
res
.
items
&&
res
.
items
.
content
)
{
that
.
tablePagination
.
total
=
res
.
items
.
totalElements
that
.
tableData
=
res
.
items
.
content
.
map
((
p
,
index
)
=>
{
return
{
id
:
p
.
id
,
index
:
index
+
1
,
number
:
p
.
serialNumber
,
name
:
p
.
name
,
gaceVersion
:
p
.
gaceVersion
,
sorties
:
data
.
serialNo
,
firstCheckFlag
:
p
.
firstCheckFlag
,
firstCheckFlagSelect
:
false
,
workHour
:
p
.
workHour
,
subTypeName
:
p
.
subTypeName
,
firstCheckFlagLoading
:
false
,
countWorkHour
:
p
.
opHour
,
countWorkHourLoading
:
false
,
countWorkHourSelect
:
false
,
stateDisplayName
:
p
.
state
,
userName
:
p
.
noteName
,
createTime
:
p
.
createTime
,
processTaskId
:
p
.
id
,
note
:
p
.
note
}
})
that
.
tableData
.
length
&&
that
.
$nextTick
(()
=>
{
that
.
$refs
.
table
.
setCurrentRow
(
that
.
tableData
[
0
])
that
.
rowInitClick
(
that
.
tableData
[
0
])
})
that
.
getTools
()
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
'机型数据获取失败!'
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
that
.
aoLoading
=
false
})
},
// 行点击方法
rowClick
(
row
,
column
,
event
)
{
if
(
column
&&
column
.
property
&&
column
.
property
===
'firstCheckFlag'
)
{
return
}
if
(
column
&&
column
.
property
&&
column
.
property
===
'countWorkHour'
)
return
const
that
=
this
that
.
workProcedureData
=
[]
that
.
workProcedureLoading
=
true
if
(
row
&&
row
.
id
)
{
this
.
curTableId
=
row
.
id
this
.
stateDisplayName
=
row
.
stateDisplayName
}
const
params
=
{
pageFrom
:
this
.
workProcedurePage
.
currentPage
,
pageSize
:
this
.
workProcedurePage
.
pageSize
,
'searchItems'
:
{
'children'
:
[
{
'items'
:
[
{
'fieldName'
:
'targetExtProcessUsageLink.sourceId'
,
'operator'
:
'EQ'
,
'value'
:
this
.
curTableId
}
],
'operator'
:
'AND'
}
],
'items'
:
[],
'operator'
:
'AND'
},
'openProps'
:
[],
'sortItem'
:
[
{
'fieldName'
:
'modifyTime'
,
'sortOrder'
:
'desc'
}
]
}
this
.
$api
.
searchApi
(
'ExtProcessOperation'
,
params
)
.
then
((
res
)
=>
{
if
(
res
&&
res
.
items
&&
res
.
items
.
content
)
{
this
.
workProcedurePage
.
total
=
res
.
items
.
totalElements
this
.
workProcedureData
=
res
.
items
.
content
.
map
((
p
,
index
)
=>
{
return
{
key
:
index
+
1
,
id
:
p
.
id
,
index
:
index
+
1
,
operationNumber
:
p
.
code
,
operationName
:
p
.
name
,
keyOperation
:
p
.
keyOperation
?
'是'
:
'否'
,
airFlag
:
p
.
airFlag
,
checkFlag
:
p
.
checkFlag
===
'true'
?
'是'
:
'否'
,
airFlagSelect
:
false
,
airFlagLoading
:
false
,
subTypeName
:
p
.
subTypeName
}
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
'机型数据获取失败!'
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
that
.
workProcedureLoading
=
false
})
},
/**
* 页码触发
*/
setPage
(
$event
,
state
)
{
if
(
state
)
{
this
.
tablePagination
.
currentPage
=
$event
}
else
{
this
.
tablePagination
.
currentPage
=
1
this
.
tablePagination
.
pageSize
=
$event
}
this
.
getTableData
(
this
.
nodeData
,
this
.
level
)
},
close
(
row
)
{
this
.
aoLoading
=
true
post
(
'/ExtProcessPlan/AORClosed?aoId='
+
row
.
id
,
{},)
.
then
((
res
)
=>
{
if
(
res
.
message
.
includes
(
'成功'
))
{
this
.
getTableData
(
this
.
nodeData
,
this
.
level
)
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{})
},
/**
* 表一多选框
*/
checkPreservation
(
selection
)
{
this
.
selctionDatas
=
selection
if
(
selection
.
length
)
{
this
.
selctionData
=
selection
.
map
((
p
)
=>
p
.
id
).
join
(
','
)
}
else
{
this
.
selctionData
=
[]
}
},
deeTableEdit
(
row
,
column
,
cell
,
event
)
{
if
(
column
.
property
===
'number'
)
{
if
(
row
.
id
)
{
this
.
seePdf
(
row
.
id
)
}
else
{
this
.
$message
({
message
:
'该AO没有PDF'
,
type
:
'warning'
})
}
}
if
(
this
.
loginUser
!==
'1'
)
return
var
that
=
this
if
(
column
.
property
===
'firstCheckFlag'
)
{
row
.
firstCheckFlagSelect
=
true
}
else
if
(
column
.
property
===
'countWorkHour'
)
{
this
.
countWorkHour
=
row
.
countWorkHour
row
.
countWorkHourSelect
=
true
}
else
{
return
}
this
.
timer
=
setTimeout
(
function
()
{
if
(
column
.
property
===
'firstCheckFlag'
)
{
row
.
firstCheckFlagSelect
=
false
}
else
if
(
column
.
property
===
'countWorkHour'
)
{
row
.
countWorkHourSelect
=
false
}
clearTimeout
(
this
.
timer
)
that
.
timer
=
null
},
2000
)
},
visibleChange
(
event
,
row
)
{
if
(
event
)
{
clearTimeout
(
this
.
timer
)
this
.
timer
=
null
}
else
{
row
.
firstCheckFlagSelect
=
false
row
.
countWorkHourSelect
=
false
}
},
visibleWorkProcedureChange
(
event
,
row
)
{
if
(
event
)
{
clearTimeout
(
this
.
workProcedureTimer
)
this
.
workProcedureTimer
=
null
}
else
{
row
.
airFlagSelect
=
false
}
},
tableInputFocus
(
$event
,
status
)
{
if
(
status
)
{
clearTimeout
(
this
.
timer
)
this
.
timer
=
null
}
else
{
clearTimeout
(
this
.
workProcedureTimer
)
this
.
workProcedureTimer
=
null
}
},
workProcedureEdit
(
row
,
column
,
cell
,
event
)
{
if
(
this
.
loginUser
!==
'1'
)
return
var
that
=
this
if
(
column
.
property
===
'airFlag'
)
{
row
.
airFlagSelect
=
true
}
else
{
return
}
that
.
workProcedureTimer
=
setTimeout
(
function
()
{
if
(
column
.
property
===
'airFlag'
)
{
row
.
airFlagSelect
=
false
}
clearTimeout
(
that
.
workProcedureTimer
)
that
.
workProcedureTimer
=
null
},
2000
)
},
deeTableBlur
(
row
,
status
)
{
var
that
=
this
const
param
=
{
id
:
row
.
id
,
operator
:
'MODIFY'
,
opHour
:
row
.
countWorkHour
,
subTypeName
:
row
.
subTypeName
,
firstCheckFlag
:
row
.
firstCheckFlag
}
if
(
status
)
{
row
.
firstCheckFlagLoading
=
true
}
else
{
row
.
countWorkHourSelect
=
false
// 利用按值传递特性比较数值是否修改
if
(
this
.
countWorkHour
===
Number
(
row
.
countWorkHour
))
return
row
.
countWorkHourLoading
=
true
}
this
.
$api
.
recursion
(
'ExtProcessPlan'
,
param
)
.
then
((
res
)
=>
{
if
(
res
.
message
.
includes
(
'成功'
))
{
that
.
$message
({
showClose
:
true
,
message
:
'保存成功'
,
type
:
'success'
})
}
else
{
that
.
$message
({
showClose
:
true
,
message
:
'保存失败'
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
if
(
status
)
{
row
.
firstCheckFlagLoading
=
false
}
else
{
row
.
countWorkHourLoading
=
false
}
})
},
workProcedureBlur
(
row
,
status
)
{
row
.
airFlagSelect
=
false
var
that
=
this
const
param
=
{
operator
:
'MODIFY'
,
id
:
row
.
id
,
airFlag
:
row
.
airFlag
}
if
(
status
)
{
row
.
airFlagLoading
=
true
}
this
.
$api
.
recursion
(
'ExtProcessOperation'
,
param
)
.
then
((
res
)
=>
{
if
(
res
.
message
.
includes
(
'成功'
))
{
that
.
$message
({
showClose
:
true
,
message
:
'操作成功!'
,
type
:
'success'
})
}
else
{
that
.
$message
({
showClose
:
true
,
message
:
'保存失败!'
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
if
(
status
)
{
row
.
airFlagLoading
=
false
}
})
},
deeTableCellStyle
({
row
,
column
,
rowIndex
,
columnIndex
})
{
if
(
(
column
.
property
===
'firstCheckFlag'
&&
row
.
firstCheckFlagSelect
)
||
(
column
.
property
===
'airFlag'
&&
row
.
airFlagSelect
)
||
(
column
.
property
===
'countWorkHour'
&&
row
.
countWorkHourSelect
)
)
{
return
'highlight'
}
else
if
(
column
.
property
===
'number'
)
{
return
'seepdf'
}
},
async
seePdf
(
id
)
{
if
(
id
)
{
if
(
this
.
seePdfShow
)
{
return
}
const
notify
=
this
.
$notify
({
title
:
'提示'
,
message
:
'PDF正在加载中...,请稍后!'
,
duration
:
0
})
this
.
seePdfShow
=
true
downloadFile
(
`/ExtProcessPlan/createPDF?id=
${
id
}
`
,
'get'
).
then
(
res
=>
{
const
blob
=
new
Blob
([
res
.
data
],
{
type
:
'application/pdf'
})
if
(
window
.
navigator
.
msSaveOrOpenBlob
)
{
navigator
.
msSaveBlob
(
blob
)
}
else
{
var
openUrl
=
URL
.
createObjectURL
(
blob
)
this
.
seePdfShow
=
false
notify
.
close
()
window
.
open
(
openUrl
,
'_blank'
)
}
}).
catch
((
error
)
=>
{
console
.
log
(
error
)
notify
.
close
()
this
.
seePdfShow
=
false
})
}
else
{
this
.
$message
({
message
:
'该AO没有PDF'
,
type
:
'warning'
})
}
}
}
}
</
script
>
<
style
lang=
"scss"
>
.single-sortie-instruction-identification-right
{
padding-left
:
20px
;
display
:
flex
;
flex-direction
:
column
;
height
:
100%
;
>
.header
{
display
:
flex
;
width
:
100%
;
height
:
35px
;
justify-content
:
flex-end
;
.tools
{
display
:
flex
;
align-items
:
center
;
.inputSearch
{
width
:
300px
;
margin-right
:
20px
;
}
>
span
{
color
:
red
;
font-size
:
12px
;
}
.dee-tools
{
display
:
flex
;
margin-left
:
14px
;
.tools-block
>
.tool-item
{
padding-left
:
14px
;
padding-right
:
0
;
}
}
}
}
>
.table
{
height
:
20px
;
flex-grow
:
1
;
display
:
flex
;
flex-direction
:
column
;
>
div
{
flex
:
1
;
height
:
20px
;
flex-direction
:
column
;
display
:
flex
;
>
div
:first-child
{
flex-grow
:
1
;
height
:
20px
;
.el-table
thead
th
{
color
:
#2e2e2e
;
font-weight
:
700
;
font-size
:
14px
;
padding
:
0
;
background-color
:
#f3f6f7
;
line-height
:
46px
!
important
;
}
.el-table
.highlight
{
border
:
1px
solid
#1497f5
;
padding
:
0
;
.cell
{
padding
:
0
;
.el-select
{
width
:
100%
;
}
input
{
border
:
0
;
height
:
35px
;
background-color
:
transparent
;
text-align
:
center
;
padding-right
:
0
;
}
}
}
.el-table
.seepdf
{
color
:
#3a8ee6
;
cursor
:
pointer
;
}
.el-table
.cell
i
.el-icon-loading
{
font-size
:
16px
;
color
:
#ff0c00
;
font-weight
:
bold
;
position
:
absolute
;
right
:
10px
;
top
:
10px
;
}
}
.el-pagination
{
text-align
:
right
;
padding
:
10px
0
;
}
.el-loading-spinner
{
width
:
100%
;
}
}
}
.single-sortie-instruction-identification-right-dialog-add
{
.el-dialog__header
{
text-align
:
center
;
}
.el-dialog__body
{
.dee-table
{
height
:
200px
;
width
:
100%
;
}
>
div
>
div
:not
(
:first-child
)
{
margin-top
:
10px
;
display
:
flex
;
>
p
{
height
:
40px
;
flex
:
1
;
display
:
flex
;
align-items
:
center
;
>
span
{
width
:
70px
;
text-align
:
right
;
}
>
label
{
margin-left
:
30px
;
}
>
div
{
width
:
40px
;
flex-grow
:
1
;
>
input
{
padding-right
:
0
;
}
}
&
:last-child
{
margin-left
:
30px
;
}
}
}
}
.el-dialog__footer
{
text-align
:
center
;
padding
:
0
10px
10px
30px
;
}
}
.single-sortie-instruction-identification-right-dialog
.el-dialog__body
>
div
>
p
{
display
:
flex
;
align-items
:
center
;
>
span
{
width
:
140px
;
text-align
:
right
;
}
>
div
{
width
:
40px
;
flex-grow
:
1
;
>
input
{
padding-right
:
0
;
}
}
&
:first-child
{
margin-bottom
:
15px
;
}
}
.el-dialog__header
{
text-align
:
center
;
}
.el-dialog__footer
{
text-align
:
center
;
margin-right
:
10px
;
margin-bottom
:
10px
;
}
}
</
style
>
applications/dee-mes/src/views/assemblyPlanManagement/instructionIdentification/index.vue
0 → 100644
View file @
12147b9a
<
template
>
<section
v-loading=
"instructionIdentificationShow"
class=
"instruction-identification"
>
<dee-fold-pane
:min-percent=
"18"
:default-percent=
"18"
split=
"vertical"
class=
"detail-pane"
>
<template
slot=
"paneL"
>
<div
class=
"left"
>
<left
ref=
"left"
:search-data=
"searchData"
@
handleTreeClick=
"handleTreeClick"
/>
</div>
</
template
>
<
template
slot=
"paneR"
>
<div
class=
"right"
>
<right
ref=
"right"
/>
</div>
</
template
>
</dee-fold-pane>
</section>
</template>
<
script
>
import
left
from
'./components/left/index'
import
right
from
'./components/right/index'
export
default
{
components
:
{
left
,
right
},
data
()
{
return
{
title
:
''
,
instructionIdentificationShow
:
false
,
jurisdId
:
null
,
searchData
:
{
model
:
[]
}
}
},
mounted
()
{
this
.
getModelData
()
},
created
()
{
},
methods
:
{
/**
* 获取机型数据
*/
getModelData
()
{
console
.
log
(
5555
)
const
param
=
{
searchItems
:
{
items
:
[{
fieldName
:
'id'
,
operator
:
'NEQ'
,
value
:
0
}]
},
sortItem
:
[{
fieldName
:
'modifyTime'
,
sortOrder
:
'asc'
}]
}
this
.
$api
.
searchApi
(
'AircraftType'
,
param
)
.
then
((
res
)
=>
{
if
(
res
&&
res
.
items
&&
res
.
items
.
content
)
{
this
.
searchData
.
model
=
res
.
items
.
content
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
'机型数据获取失败!'
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
})
},
open
(
v
)
{
this
.
dialogCmp
=
{
typeName
:
'RequestOutStorageOut'
,
typeKey
:
'34fcf9f2-0ae6-47bb-920c-7c625d3e0937'
}
// this.$refs.dialog.open()
},
handleTreeClick
(
v
)
{
this
.
title
=
v
.
label
},
handleCollapse
(
v
)
{
}
}
}
</
script
>
<
style
lang=
"scss"
>
.instruction-identification
{
display
:
flex
;
height
:
100%
;
background
:
#fff
;
.detail-pane
{
width
:
100%
;
.left
{
height
:
100%
;
overflow-x
:
hidden
;
}
.right
{
height
:
100%
;
.table
{
margin-top
:
0
;
}
}
}
}
</
style
>
applications/dee-task-center/src/utils/http.js
View file @
12147b9a
...
...
@@ -16,8 +16,8 @@ function patch(url, params) {
function
del
(
url
,
params
)
{
return
http
.
del
(
url
,
params
)
}
function
downloadFile
(
url
,
type
)
{
return
http
.
downloadFile
(
url
,
type
)
function
downloadFile
(
url
,
type
,
params
)
{
return
http
.
downloadFile
(
url
,
type
,
params
)
}
function
downloadZip
(
url
,
type
)
{
return
http
.
downloadZip
(
url
,
type
)
...
...
applications/dee-task-center/src/views/workflow/task-center/myPlanTask/instructionIdentificationBatch/components/left/form.vue
0 → 100644
View file @
12147b9a
<
template
>
<section>
<div
v-if=
"!show"
class=
"from"
>
<div
class=
"icon-wrap"
><i
class=
"icon"
/>
<span>
搜索
</span></div>
<el-form
ref=
"ruleForm"
:model=
"form"
label-width=
"95px"
>
<el-form-item
label=
"机型"
prop=
"model"
>
<el-select
v-model=
"form.model"
clearable
class=
"input-with-select el-input--small"
>
<el-option
v-for=
"item in dataModel"
:key=
"item.id"
:label=
"item.defName"
:value=
"item.id"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"架次"
prop=
"sortie"
>
<el-select
v-model=
"form.sortie"
clearable
class=
"input-with-select el-input--small"
:loading=
"sortiesLoading"
>
<el-option
v-for=
"item in dataSortie"
:key=
"item.id"
:label=
"item.defName"
:value=
"item.id"
/>
</el-select>
</el-form-item>
<!--
<el-form-item
v-if=
"labelShow()"
label=
"AO(号/名称)"
prop=
"aoName"
>
<el-input
v-model=
"form.aoName"
clearable
class=
"input-with-select el-input--small"
@
change=
"searchAoname"
/>
</el-form-item>
-->
<p
class=
"btn"
>
<el-button
size=
"small"
type=
"primary"
@
click=
"searchForm"
>
查询
</el-button>
<el-button
size=
"small"
@
click=
"resetForm('ruleForm')"
>
重置
</el-button>
</p>
</el-form>
</div>
</section>
</
template
>
<
script
>
export
default
{
name
:
'Left'
,
props
:
{
show
:
{
type
:
Boolean
,
default
:
null
},
dataModel
:
{
type
:
Array
,
default
:
()
=>
{
return
[]
}
}
},
data
()
{
return
{
form
:
{
model
:
''
,
modelName
:
''
,
sortie
:
''
,
sortieName
:
''
,
aoName
:
''
},
sortiesLoading
:
true
,
dataSortie
:
[],
isCollapse
:
false
}
},
watch
:
{
dataModel
(
newV
)
{
if
(
newV
.
length
<=
0
)
return
this
.
$nextTick
(()
=>
{
this
.
form
.
model
=
newV
[
0
].
id
this
.
form
.
modelName
=
newV
[
0
].
defName
this
.
getAddRecursion
()
})
},
'form.model'
:
{
immediate
:
true
,
handler
(
val
)
{
if
(
!
val
)
{
return
}
const
model
=
this
.
dataModel
.
find
((
r
)
=>
r
.
id
===
val
)
this
.
$set
(
this
.
form
,
'modelName'
,
(
model
&&
model
.
defName
)
||
''
)
this
.
getAddRecursion
()
}
},
'form.sortie'
:
{
immediate
:
true
,
handler
(
val
)
{
if
(
!
val
)
{
return
}
const
sorties
=
this
.
dataSortie
.
find
((
r
)
=>
r
.
id
===
val
)
this
.
$set
(
this
.
form
,
'sortieName'
,
(
sorties
&&
sorties
.
defName
)
||
''
)
}
}
},
mounted
()
{
this
.
getAddRecursion
()
},
methods
:
{
labelShow
()
{
if
(
this
.
$parent
.
$parent
&&
this
.
$parent
.
$parent
.
name
===
'right'
&&
this
.
$parent
.
$parent
.
isActive
===
'ag'
)
{
return
false
}
else
{
return
true
}
},
searchForm
()
{
this
.
$parent
.
$children
.
filter
(
function
(
item
)
{
return
item
.
name
===
'tree'
})[
0
]
.
getTreeData
(
this
.
form
)
},
searchAoname
()
{
const
that
=
this
if
(
that
.
$parent
.
$parent
.
name
===
'right'
)
{
that
.
$parent
.
$parent
.
getTableData
()
}
else
{
this
.
searchForm
()
}
},
/**
* 获取架次数据
*/
getAddRecursion
()
{
this
.
sortiesLoading
=
true
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
.
dataSortie
=
[]
if
(
res
)
{
this
.
dataSortie
=
res
&&
res
.
items
&&
res
.
items
.
content
this
.
$nextTick
(()
=>
{
if
(
this
.
dataSortie
.
length
)
{
this
.
form
.
sortie
=
this
.
dataSortie
[
0
].
id
this
.
form
.
sortieName
=
this
.
dataSortie
[
0
].
defName
this
.
searchForm
()
}
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
this
.
$nextTick
(()
=>
{
this
.
sortiesLoading
=
false
})
})
},
resetForm
()
{
if
(
this
.
dataModel
.
length
)
{
this
.
form
.
model
=
this
.
dataModel
[
0
].
id
this
.
getAddRecursion
()
}
this
.
form
.
aoName
=
null
}
}
}
</
script
>
<
style
lang=
"scss"
>
.from
{
border
:
1px
solid
#ccc
;
padding
:
20px
20px
5px
20px
;
border-radius
:
5px
;
box-sizing
:
border-box
;
.icon-collapse
{
display
:
inline-block
;
width
:
21px
;
height
:
21px
;
background-size
:
contain
;
cursor
:
pointer
;
position
:
absolute
;
z-index
:
10
;
top
:
20px
;
right
:
20px
;
}
.tobottom
{
background
:
url("/icons/tobottom.png")
no-repeat
;
}
.totop
{
background
:
url("/icons/totop.png")
no-repeat
;
}
.icon-wrap
{
margin-bottom
:
10px
;
position
:
relative
;
.icon
{
display
:
inline-block
;
width
:
21px
;
height
:
21px
;
background
:
url("/icons/r-access.png")
no-repeat
;
background-size
:
contain
;
vertical-align
:
middle
;
}
span
{
vertical-align
:
middle
;
// font-size: 12px;
}
}
.btn
{
text-align
:
center
;
}
.el-form-item
{
margin-bottom
:
8px
;
}
}
/
deep
/
.el-input
{
height
:
32px
;
}
/
deep
/
.el-button
{
border-radius
:
5px
;
padding
:
12px
30px
;
}
</
style
>
applications/dee-task-center/src/views/workflow/task-center/myPlanTask/instructionIdentificationBatch/components/left/index.vue
0 → 100644
View file @
12147b9a
<
template
>
<section
class=
"single-mbom-left"
:class=
"
{ collapse: isCollapse }">
<div
class=
"left-menu"
>
<searchForm
ref=
"searchForm"
:show=
"isCollapse"
:data-model=
"searchData.model"
/>
<!--
<i
class=
"iconTo"
:class=
"[isCollapse ? 'toright' : 'toleft']"
@
click=
"handleCollapse"
/>
-->
<tree
ref=
"tree"
class=
"tree"
:is-collapse=
"isCollapse"
/>
</div>
</section>
</
template
>
<
script
>
import
searchForm
from
'./form'
import
tree
from
'./tree'
export
default
{
components
:
{
searchForm
,
tree
},
props
:
{
searchData
:
{
type
:
Object
,
default
:
()
=>
{
return
{
model
:
[]
}
}
}
},
data
()
{
return
{
isCollapse
:
false
}
},
computed
:
{},
mounted
()
{
},
created
()
{},
methods
:
{
// handleCollapse() {
// this.isCollapse = !this.isCollapse
// this.$emit('handleCollapse', this.isCollapse)
// }
}
}
</
script
>
<
style
lang=
"scss"
>
.single-mbom-left
{
height
:
100%
;
// width: 320px;
.left-menu
{
position
:
relative
;
display
:
flex
;
flex-direction
:
column
;
height
:
100%
;
.iconTo
{
display
:
block
;
width
:
18px
;
height
:
21px
;
background-size
:
contain
;
cursor
:
pointer
;
position
:
absolute
;
top
:
292px
;
}
// .toleft {
// background: url("/icons/toleft.png") no-repeat;
// right: -18px;
// }
// .toright {
// background: url("/icons/toright.png") no-repeat;
// left: -10px;
// }
}
p
{
text-align
:
right
;
.b-packup
{
display
:
inline-block
;
width
:
21px
;
height
:
21px
;
background
:
url("/icons/b-packup.png")
no-repeat
;
background-size
:
contain
;
cursor
:
pointer
;
}
}
&
.collapse
{
width
:
0px
;
}
}
</
style
>
applications/dee-task-center/src/views/workflow/task-center/myPlanTask/instructionIdentificationBatch/components/left/tree.vue
0 → 100644
View file @
12147b9a
<
template
>
<section
v-show=
"!isCollapse"
class=
"left-tree"
>
<el-tree
ref=
"tree"
class=
"tree"
:data=
"treeData"
default-expand-all
node-key=
"id"
:current-node-key=
"currentNodekey"
:props=
"defaultProps"
:highlight-current=
"true"
:expand-on-click-node=
"false"
@
node-click=
"handleNodeClick"
>
<span
slot-scope=
"
{ data }"
class="custom-tree-node"
:class="[{ 'is-leaff': data.isLeaf }, { 'is-curr': data.id == curId }]"
>
<span
class=
"tree-row"
>
<i
:class=
"data.icon"
/>
<span
class=
"label"
>
{{
data
.
title
}}
</span>
<span>
{{
"("
+
data
.
quantity
+
"/"
+
data
.
total
+
")"
}}
</span>
</span>
</span>
</el-tree>
</section>
</
template
>
<
script
>
import
{
post
}
from
'@/utils/http'
import
$
from
'jquery'
export
default
{
name
:
'Tree'
,
props
:
{
isCollapse
:
{
type
:
Boolean
,
default
:
null
}
},
data
()
{
return
{
// 组件唯一标识
name
:
'tree'
,
treeData
:
[],
rowData
:
{},
curId
:
null
,
// 判断当前组件处于指令标识还是Mbom
isMbom
:
false
,
curNodeTitle
:
null
,
assembly
:
null
,
defaultProps
:
{
children
:
'children'
,
label
:
'label'
},
curTree
:
{},
currentNodekey
:
''
}
},
mounted
()
{
this
.
$bus
.
$on
(
'getPositionData'
,
()
=>
{
this
.
getTreeData
()
})
// const that = this
// if (that.$parent.$parent.name === 'right') {
// that.assembly = that.$parent.$parent.$parent.$parent
// that.isMbom = true
// } else {
// that.assembly = that.$parent.$parent.$children.filter(function(item) {
// return item.name === 'right'
// })[0]
// }
},
methods
:
{
handleNodeClick
(
data
,
node
,
event
)
{
if
(
!
data
||
!
data
.
id
)
return
this
.
$bus
.
$emit
(
'getPlanData'
,
data
,
node
?
node
.
level
:
data
.
level
)
},
/**
* 高亮状态
*/
highlightTreeRow
()
{
if
(
this
.
isMbom
)
{
this
.
$nextTick
(()
=>
{
if
(
this
.
assembly
.
isActive
===
'ag'
||
this
.
assembly
.
isActive
===
'ins'
)
{
$
(
'.el-tree-node__content'
).
each
((
index
,
ele
)
=>
{
$
(
ele
).
removeClass
(
'disabled'
)
$
(
ele
).
removeClass
(
'is-curr'
)
if
(
$
(
ele
).
find
(
'.is-leaff'
).
length
)
{
$
(
ele
).
addClass
(
'hhover'
)
}
else
{
$
(
ele
).
addClass
(
'disabled'
)
}
if
(
$
(
ele
).
find
(
'.is-curr'
).
length
)
{
$
(
ele
).
addClass
(
'is-curr'
)
}
})
}
else
{
$
(
'.el-tree-node__content'
).
each
((
index
,
ele
)
=>
{
$
(
ele
).
removeClass
(
'disabled'
)
$
(
ele
).
removeClass
(
'is-curr'
)
if
(
$
(
ele
).
find
(
'.is-leaff'
).
length
)
{
$
(
ele
).
addClass
(
'disabled'
)
}
else
{
$
(
ele
).
addClass
(
'hhover'
)
}
if
(
$
(
ele
).
find
(
'.is-curr'
).
length
)
{
$
(
ele
).
addClass
(
'is-curr'
)
}
})
}
})
}
else
{
this
.
$nextTick
(()
=>
{
$
(
'.el-tree-node__content'
).
each
((
index
,
ele
)
=>
{
$
(
ele
).
removeClass
(
'disabled'
)
$
(
ele
).
removeClass
(
'is-curr'
)
if
(
$
(
ele
).
find
(
'.is-leaff'
).
length
)
{
$
(
ele
).
addClass
(
'disabled'
)
}
else
{
$
(
ele
).
addClass
(
'hhover'
)
}
if
(
$
(
ele
).
find
(
'.is-curr'
).
length
)
{
$
(
ele
).
addClass
(
'is-curr'
)
}
})
})
}
},
statuwMbom
(
id
)
{
if
(
id
)
{
this
.
curId
=
id
}
const
that
=
this
if
(
that
.
isMbom
)
{
if
(
this
.
assembly
.
isActive
===
'ass'
)
{
this
.
handleNodeClick
(
that
.
data
[
0
].
children
[
0
],
this
.
froms
.
aoName
)
}
else
{
this
.
handleNodeClick
(
that
.
data
[
0
],
this
.
froms
.
aoName
)
}
}
this
.
highlightTreeRow
()
},
/**
* 获取树结构数据
*/
getTreeData
(
froms
)
{
// var that = this
if
(
froms
)
{
this
.
froms
=
froms
}
const
params
=
{
pageFrom
:
1
,
pageSize
:
9999
,
searchItems
:
{
children
:
[
{
items
:
[
{
fieldName
:
'aircraftSorties.id'
,
// 架次ID
operator
:
'EQ'
,
value
:
this
.
froms
.
sortie
}
],
operator
:
'AND'
}
],
items
:
[],
operator
:
'AND'
},
openProps
:
[],
sortItem
:
[
{
fieldName
:
'serialNumber'
,
sortOrder
:
'desc'
}
]
}
post
(
'/ExtPosition/searchBatchExaminePosition?taskDefinitionKey='
+
this
.
$route
.
query
.
taskDefinitionKey
,
params
)
.
then
((
res
)
=>
{
let
quantity
=
0
let
total
=
0
const
data
=
[{
title
:
this
.
froms
.
modelName
+
'-'
+
this
.
froms
.
sortieName
,
icon
:
'aircraft'
,
id
:
this
.
froms
.
sortie
,
serialNo
:
this
.
froms
.
sortieName
,
isLeaf
:
true
,
disabled
:
true
,
level
:
1
,
children
:
res
.
items
.
map
((
t
)
=>
{
quantity
+=
t
.
completeCount
total
+=
t
.
carryCount
return
{
serialNo
:
this
.
froms
.
sortieName
,
title
:
t
.
serialNumber
,
icon
:
'c-backups3'
,
id
:
t
.
id
,
quantity
:
t
.
completeCount
,
total
:
t
.
carryCount
}
}),
quantity
:
quantity
,
total
:
total
}]
this
.
treeData
=
data
this
.
handleNodeClick
(
data
[
0
])
this
.
currentNodekey
=
data
[
0
].
id
this
.
$nextTick
(()
=>
{
this
.
$refs
.
tree
.
setCurrentKey
(
this
.
currentNodekey
)
})
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{})
}
}
}
</
script
>
<
style
lang=
"scss"
>
::-webkit-scrollbar
{
width
:
6px
;
height
:
6px
;
}
::-webkit-scrollbar-thumb
{
border-radius
:
100px
;
background
:
#dcdfe6
;
}
.left-tree
{
margin-top
:
20px
;
border
:
1px
solid
#ccc
;
padding
:
20px
;
border-radius
:
5px
;
box-sizing
:
border-box
;
flex-grow
:
1
;
overflow
:
auto
;
>
.tree
{
//当前选中项
&
.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
{
// margin: 20px 0 !important;
.el-tree-node__content
{
height
:
40px
!
important
;
// &:hover {
// font-weight: bold;
// color: #000;
// }
i
{
display
:
inline-block
;
vertical-align
:
middle
;
margin
:
10px
;
}
.aircraft
{
background
:
url("/icons/aircraft.png")
no-repeat
;
width
:
32px
;
height
:
30px
;
}
.c-backups3
{
width
:
21px
;
height
:
21px
;
background
:
url("/icons/u513.png")
no-repeat
;
background-size
:
contain
;
}
.label
{
vertical-align
:
middle
;
}
}
}
}
overflow
:
hidden
;
&
:hover
{
overflow
:
auto
;
}
}
// .sidebar-container.sidebar-container{
// display: none;
// }
</
style
>
applications/dee-task-center/src/views/workflow/task-center/myPlanTask/instructionIdentificationBatch/components/right/index.vue
0 → 100644
View file @
12147b9a
<
template
>
<section
class=
"single-sortie-instruction-identification-right"
>
<div
class=
"header"
>
<div
class=
"tools"
>
<el-input
v-model=
"aoName"
size=
"mini"
clearable
placeholder=
"AO(号/名称)"
class=
"inputSearch"
>
<el-button
slot=
"append"
icon=
"el-icon-search"
@
click=
"getSearchTableData"
/>
</el-input>
<span
v-if=
"jurisdId !== 'Activity_0v2qfnh'"
>
提示:
<i
class=
"el-icon-edit-outline"
/>
可双击编辑列
</span>
<dee-tools
app-name=
"tf-mom"
:tools=
"tools"
mode=
"normal"
:collapse=
"false"
/>
</div>
</div>
<div
class=
"table"
>
<div>
<div>
<el-table
ref=
"table"
:data=
"tableData"
height=
"100%"
border
size=
"mini"
highlight-current-row
:cell-class-name=
"deeTableCellStyle"
@
row-click=
"rowInitClick"
@
selection-change=
"checkPreservation"
@
cell-click=
"deeTableEdit"
>
<el-table-column
type=
"selection"
:width=
"55"
align=
"center"
/>
<el-table-column
type=
"index"
:width=
"80"
label=
"序号"
align=
"center"
/>
<el-table-column
prop=
"number"
align=
"center"
label=
"AO号"
:min-width=
"250"
sortable
show-overflow-tooltip
/>
<el-table-column
prop=
"name"
align=
"center"
label=
"AO名称"
:min-width=
"120"
sortable
show-overflow-tooltip
/>
<el-table-column
prop=
"gaceVersion"
align=
"center"
label=
"版本"
:width=
"80"
sortable
/>
<el-table-column
prop=
"sorties"
align=
"center"
label=
"有效架次"
:width=
"120"
sortable
/>
<el-table-column
prop=
"firstCheckFlag"
align=
"center"
label=
"首件检验标识"
:width=
"135"
>
<template
slot=
"header"
>
<span>
首件检验标识
</span>
<i
v-if=
"jurisdId !== 'Activity_0v2qfnh'"
class=
"el-icon-edit-outline"
/>
</
template
>
<
template
slot-scope=
"scope"
>
<el-select
v-if=
"scope.row.firstCheckFlagSelect"
v-model=
"scope.row.firstCheckFlag"
placeholder=
"请选择"
@
change=
"deeTableBlur(scope.row, true)"
@
visible-change=
"visibleChange($event, scope.row)"
>
<el-option
:key=
"1"
label=
"是"
value=
"是"
/>
<el-option
:key=
"2"
label=
"否"
value=
"否"
/>
</el-select>
<span
v-else
>
{{
scope
.
row
[
scope
.
column
.
property
]
}}
</span>
<i
v-if=
"scope.row.firstCheckFlagLoading"
class=
"el-icon-loading"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"countWorkHour"
align=
"center"
label=
"定额工时(min)"
:width=
"150"
>
<
template
slot=
"header"
>
<span>
定额工时(min)
</span>
<i
v-if=
"jurisdId !== 'Activity_0v2qfnh'"
class=
"el-icon-edit-outline"
/>
</
template
>
<
template
slot-scope=
"scope"
>
<el-input
v-if=
"scope.row.countWorkHourSelect"
v-model=
"scope.row.countWorkHour"
type=
"number"
:min=
"0"
@
click
.
stop
.
native
@
focus=
"tableInputFocus($event, true)"
@
blur=
"deeTableBlur(scope.row, false)"
/>
<span
v-else
>
{{
scope
.
row
[
scope
.
column
.
property
]
}}
</span>
<i
v-if=
"scope.row.countWorkHourLoading"
class=
"el-icon-loading"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"workHour"
align=
"center"
label=
"工期(h)"
:width=
"120"
sortable
/>
<el-table-column
prop=
"stateDisplayName"
align=
"center"
label=
"状态"
:width=
"90"
sortable
:formatter=
"applyStatusFormatter"
/>
<el-table-column
prop=
"userName"
align=
"center"
label=
"编制者"
:width=
"130"
sortable
/>
<el-table-column
prop=
"createTime"
align=
"center"
label=
"接收时间"
:width=
"180"
sortable
/>
</el-table>
</div>
<el-pagination
:current-page=
"tablePagination.currentPage"
:page-sizes=
"tablePagination.pageSizes"
:page-size=
"tablePagination.pageSize"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"tablePagination.total"
@
size-change=
"setPage"
@
current-change=
"setPage($event, true)"
/>
</div>
<div>
<div>
<el-table
v-loading=
"workProcedureLoading"
:data=
"workProcedureData"
height=
"100%"
border
size=
"mini"
:cell-class-name=
"deeTableCellStyle"
@
cell-click=
"workProcedureEdit"
>
<el-table-column
type=
"index"
align=
"center"
label=
"序号"
:width=
"80"
/>
<el-table-column
prop=
"operationNumber"
align=
"center"
label=
"工序号"
show-overflow-tooltip
/>
<el-table-column
prop=
"operationName"
align=
"center"
label=
"工序名称"
show-overflow-tooltip
/>
<el-table-column
prop=
"checkFlag"
align=
"center"
label=
"是否检验"
show-overflow-tooltip
/>
<el-table-column
prop=
"keyOperation"
align=
"center"
label=
"关键标识"
:width=
"120"
/>
<el-table-column
prop=
"airFlag"
align=
"center"
label=
"适航标识"
:width=
"200"
>
<
template
slot=
"header"
>
<span>
适航标识
</span>
<i
v-if=
"jurisdId !== 'Activity_0v2qfnh'"
class=
"el-icon-edit-outline"
/>
</
template
>
<
template
slot-scope=
"scope"
>
<el-select
v-if=
"scope.row.airFlagSelect"
v-model=
"scope.row.airFlag"
placeholder=
"请选择"
@
change=
"workProcedureBlur(scope.row, true)"
@
visible-change=
"
visibleWorkProcedureChange($event, scope.row)
"
>
<el-option
:key=
"0"
label=
" "
value=
" "
/>
<el-option
:key=
"1"
label=
"目击"
value=
"目击"
/>
<el-option
:key=
"2"
label=
"AAD"
value=
"AAD"
/>
</el-select>
<span
v-else
>
{{
scope
.
row
[
scope
.
column
.
property
]
}}
</span>
<i
v-if=
"scope.row.airFlagLoading"
class=
"el-icon-loading"
/>
</
template
>
</el-table-column>
</el-table>
</div>
<el-pagination
:current-page=
"workProcedurePage.currentPage"
:page-sizes=
"workProcedurePage.pageSizes"
:page-size=
"workProcedurePage.pageSize"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"workProcedurePage.total"
@
size-change=
"workProcedureSetPage"
@
current-change=
"workProcedureSetPage($event, true)"
/>
</div>
</div>
</section>
</template>
<
script
>
import
{
post
,
downloadFile
}
from
'@/utils/http'
export
default
{
data
()
{
return
{
// 识别组件
name
:
'right'
,
// 工具栏
tools
:
[],
tablePagination
:
{
currentPage
:
1
,
pageSize
:
10
,
total
:
0
,
pageSizes
:
[
5
,
10
,
20
,
50
]
},
workProcedurePage
:
{
currentPage
:
1
,
pageSize
:
10
,
total
:
0
,
pageSizes
:
[
5
,
10
,
20
,
50
]
},
// 加载中
loading
:
false
,
curRowId
:
null
,
curTableId
:
null
,
// 选中数据
selctionDatas
:
[],
selctionData
:
''
,
// 表格数据
tableData
:
[],
aoLoading
:
false
,
workProcedureData
:
[],
workProcedureLoading
:
false
,
// 默认展示的表格列
deeColums
:
[],
treeData
:
[],
addLoading
:
false
,
timer
:
null
,
workProcedureTimer
:
null
,
aoName
:
''
,
countWorkHour
:
0
,
workProcedureWworkHour
:
0
,
sortiesData
:
[],
jurisdId
:
' '
,
stateDisplayName
:
true
,
seePdfShow
:
false
,
stateOption
:
[],
nodeData
:
{},
level
:
null
}
},
created
()
{
this
.
jurisdId
=
this
.
$route
.
query
.
taskDefinitionKey
this
.
getTools
()
},
mounted
()
{
this
.
$bus
.
$on
(
'getPlanData'
,
(
data
,
level
)
=>
{
this
.
$nextTick
(()
=>
{
this
.
nodeData
=
data
this
.
level
=
level
this
.
getTableData
(
data
,
level
)
})
})
this
.
getDicListByCode
()
},
methods
:
{
applyStatusFormatter
(
row
,
column
,
cellValue
,
index
)
{
const
obj
=
this
.
stateOption
.
find
(
m
=>
m
.
value
===
cellValue
)
return
obj
.
label
},
async
getDicListByCode
()
{
this
.
stateOption
=
await
this
.
$utils
.
getDicListByCode
(
'ObjStatus'
)
},
/**
* 工具栏
*/
getTools
()
{
const
that
=
this
if
(
that
.
jurisdId
===
'Activity_0z9axwg'
)
{
this
.
tools
=
[
{
name
:
'提交'
,
icon
:
'/icons/check.png'
,
handler
:
{
click
:
()
=>
this
.
submit
()
}
},
{
addRowTemplateDataPosition
:
'last'
,
btnStyle
:
''
,
btnValue
:
'importFile'
,
businessType
:
'importFile'
,
downloadAfter
:
'console.log(333, currentObject)
\
nthis.getData()
\
n'
,
downloadParams
:
'downloadParams = {}'
,
downloadRequestMethod
:
'get'
,
editTableShowMode
:
'alway'
,
icon
:
'/icons/c-Import.png'
,
importUrl
:
'/ExtProcessPlan/import/excel'
,
key
:
'importFile'
,
loadSelfComType
:
'privateComponents'
,
name
:
'导入'
,
notDetectionControl
:
false
,
rowEditSubmitAddress
:
'requestURL=""'
,
rowEditSubmitHttpType
:
'post'
,
rowEditSubmitParams
:
'requestParams = row'
,
rowEditSubmitReturnVal
:
'newRow = res.items'
,
selectNum
:
'one'
,
templateDataFun
:
'return {}'
},
{
name
:
'导出'
,
icon
:
'/icons/c-export.png'
,
handler
:
{
click
:
()
=>
{
this
.
handleExport
()
}
}
}
]
}
else
{
this
.
tools
=
[
{
name
:
'提交'
,
icon
:
'/icons/check.png'
,
handler
:
{
click
:
()
=>
this
.
submit
()
}
},
{
name
:
'驳回'
,
icon
:
'/icons/c-return.png'
,
handler
:
{
click
:
()
=>
this
.
reject
()
}
},
{
name
:
'作废'
,
icon
:
'/icons/c-export.png'
,
handler
:
{
click
:
()
=>
{
this
.
cancel
()
}
}
}
]
}
},
rowInitClick
(
row
,
column
,
event
)
{
this
.
workProcedurePage
.
currentPage
=
1
this
.
workProcedurePage
.
pageSize
=
10
this
.
rowClick
(
row
,
column
,
event
)
},
workProcedureSetPage
(
$event
,
state
)
{
if
(
state
)
{
this
.
workProcedurePage
.
currentPage
=
$event
}
else
{
this
.
workProcedurePage
.
currentPage
=
1
this
.
workProcedurePage
.
pageSize
=
$event
}
this
.
rowClick
()
},
/**
* 提交
*/
submit
()
{
if
(
!
this
.
selctionData
)
{
this
.
$message
({
showClose
:
true
,
message
:
'没有勾选数据'
,
type
:
'error'
})
return
}
this
.
aoLoading
=
true
const
ids
=
this
.
selctionDatas
.
map
(
item
=>
item
.
processTaskId
)
post
(
'DxWorkflowTask/apply/pass?taskIds='
+
ids
.
join
(
','
),
{}
)
.
then
((
res
)
=>
{
if
(
res
.
message
.
includes
(
'成功'
))
{
this
.
$bus
.
$emit
(
'getPositionData'
)
// this.$parent.$refs.left.$refs.tree.getTreeData()
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'success'
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
this
.
aoLoading
=
false
})
},
reject
()
{
if
(
!
this
.
selctionData
)
{
this
.
$message
({
showClose
:
true
,
message
:
'没有勾选数据'
,
type
:
'error'
})
return
}
this
.
aoLoading
=
true
const
ids
=
this
.
selctionDatas
.
map
(
item
=>
item
.
processTaskId
)
post
(
'DxWorkflowTask/apply/reject?taskIds='
+
ids
.
join
(
','
),
{}
)
.
then
((
res
)
=>
{
if
(
res
.
message
.
includes
(
'成功'
))
{
this
.
$bus
.
$emit
(
'getPositionData'
)
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'success'
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
this
.
aoLoading
=
false
})
},
cancel
()
{
if
(
!
this
.
selctionData
)
{
this
.
$message
({
showClose
:
true
,
message
:
'没有勾选数据'
,
type
:
'error'
})
return
}
this
.
aoLoading
=
true
const
ids
=
this
.
selctionDatas
.
map
(
item
=>
item
.
processTaskId
)
post
(
'DxWorkflowTask/apply/cancellation?taskIds='
+
ids
.
join
(
','
),
{}
)
.
then
((
res
)
=>
{
if
(
res
.
message
.
includes
(
'成功'
))
{
this
.
$bus
.
$emit
(
'getPositionData'
)
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'success'
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
this
.
aoLoading
=
false
})
},
// /**
// * 导入
// */
// handleImport() {
// this.HttpRequest(
// '/DxProcessOperation/importByExcel?id=196697352507000',
// {
// id: this.curRowId
// },
// 'post'
// )
// .then((res) => {
// })
// .catch((err) => console.error(err))
// .finally(() => {})
// },
/**
* 导出
*/
handleExport
()
{
const
params
=
{
pageFrom
:
this
.
tablePagination
.
currentPage
,
pageSize
:
this
.
tablePagination
.
pageSize
,
searchItems
:
{
items
:
[
{
fieldName
:
'sorties'
,
operator
:
'EQ'
,
value
:
this
.
nodeData
.
serialNo
}
],
operator
:
'AND'
},
openProps
:
[],
sortItem
:
[
{
fieldName
:
'serialNumber'
,
sortOrder
:
'desc'
}
]
}
if
(
this
.
level
===
2
)
{
params
.
searchItems
.
items
.
push
(
{
fieldName
:
'positionNumber'
,
operator
:
'EQ'
,
value
:
this
.
nodeData
.
title
})
}
const
downloadTitle
=
'单架次指令标识-'
+
this
.
nodeData
.
title
+
'.xlsx'
downloadFile
(
`ExtProcessPlan/download/excel?taskDefinitionKey=
${
this
.
$route
.
query
.
taskDefinitionKey
}
`
,
'post'
,
params
).
then
(
res
=>
{
this
.
$utils
.
downLoadFile
(
res
,
downloadTitle
)
})
},
getSearchTableData
()
{
this
.
getTableData
(
this
.
nodeData
,
this
.
level
)
},
/**
* 获取表格数据
*/
getTableData
(
data
,
level
)
{
const
that
=
this
that
.
aoLoading
=
true
that
.
tableData
=
[]
that
.
workProcedureData
=
[]
const
params
=
{
pageFrom
:
this
.
tablePagination
.
currentPage
,
pageSize
:
this
.
tablePagination
.
pageSize
,
searchItems
:
{
children
:
[
{
items
:
[
{
fieldName
:
'sorties'
,
operator
:
'EQ'
,
value
:
data
.
serialNo
}
],
operator
:
'AND'
},
{
'items'
:
[
{
'fieldName'
:
'serialNumber'
,
'operator'
:
'LIKE'
,
'value'
:
this
.
aoName
},
{
'fieldName'
:
'name'
,
'operator'
:
'LIKE'
,
'value'
:
this
.
aoName
}
],
'operator'
:
'OR'
}
]
},
openProps
:
[],
sortItem
:
[
{
fieldName
:
'serialNumber'
,
sortOrder
:
'desc'
}
]
}
if
(
level
===
2
)
{
params
.
searchItems
.
children
[
0
].
items
.
push
(
{
fieldName
:
'positionNumber'
,
operator
:
'EQ'
,
value
:
data
.
title
})
}
post
(
'/ExtProcessPlan/searchBatchExamineAo?taskDefinitionKey='
+
this
.
$route
.
query
.
taskDefinitionKey
,
params
)
.
then
((
res
)
=>
{
if
(
res
&&
res
.
items
&&
res
.
items
.
content
)
{
that
.
tablePagination
.
total
=
res
.
items
.
totalElements
that
.
tableData
=
res
.
items
.
content
.
map
((
p
,
index
)
=>
{
return
{
id
:
p
.
pbo
.
id
,
index
:
index
+
1
,
number
:
p
.
pbo
.
serialNumber
,
name
:
p
.
pbo
.
name
,
gaceVersion
:
p
.
pbo
.
gaceVersion
,
sorties
:
data
.
serialNo
,
firstCheckFlag
:
p
.
pbo
.
firstCheckFlag
,
firstCheckFlagSelect
:
false
,
workHour
:
p
.
pbo
.
workHour
,
subTypeName
:
p
.
pbo
.
subTypeName
,
firstCheckFlagLoading
:
false
,
countWorkHour
:
p
.
pbo
.
opHour
,
countWorkHourLoading
:
false
,
countWorkHourSelect
:
false
,
stateDisplayName
:
p
.
pbo
.
state
,
userName
:
p
.
pbo
.
noteName
,
createTime
:
p
.
pbo
.
createTime
,
processTaskId
:
p
.
processTask
.
id
}
})
that
.
tableData
.
length
&&
that
.
$nextTick
(()
=>
{
that
.
$refs
.
table
.
setCurrentRow
(
that
.
tableData
[
0
])
that
.
rowInitClick
(
that
.
tableData
[
0
])
})
that
.
getTools
()
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
'机型数据获取失败!'
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
that
.
aoLoading
=
false
})
},
// 行点击方法
rowClick
(
row
,
column
,
event
)
{
if
(
column
&&
column
.
property
&&
column
.
property
===
'firstCheckFlag'
)
{
return
}
if
(
column
&&
column
.
property
&&
column
.
property
===
'countWorkHour'
)
return
const
that
=
this
that
.
workProcedureData
=
[]
that
.
workProcedureLoading
=
true
if
(
row
&&
row
.
id
)
{
this
.
curTableId
=
row
.
id
this
.
stateDisplayName
=
row
.
stateDisplayName
}
const
params
=
{
pageFrom
:
this
.
workProcedurePage
.
currentPage
,
pageSize
:
this
.
workProcedurePage
.
pageSize
,
'searchItems'
:
{
'children'
:
[
{
'items'
:
[
{
'fieldName'
:
'targetExtProcessUsageLink.sourceId'
,
'operator'
:
'EQ'
,
'value'
:
this
.
curTableId
}
],
'operator'
:
'AND'
}
],
'items'
:
[],
'operator'
:
'AND'
},
'openProps'
:
[],
'sortItem'
:
[
{
'fieldName'
:
'modifyTime'
,
'sortOrder'
:
'desc'
}
]
}
this
.
$api
.
searchApi
(
'ExtProcessOperation'
,
params
)
.
then
((
res
)
=>
{
if
(
res
&&
res
.
items
&&
res
.
items
.
content
)
{
this
.
workProcedurePage
.
total
=
res
.
items
.
totalElements
this
.
workProcedureData
=
res
.
items
.
content
.
map
((
p
,
index
)
=>
{
return
{
key
:
index
+
1
,
id
:
p
.
id
,
index
:
index
+
1
,
operationNumber
:
p
.
code
,
operationName
:
p
.
name
,
keyOperation
:
p
.
keyOperation
?
'是'
:
'否'
,
airFlag
:
p
.
airFlag
,
checkFlag
:
p
.
checkFlag
===
'true'
?
'是'
:
'否'
,
airFlagSelect
:
false
,
airFlagLoading
:
false
,
subTypeName
:
p
.
subTypeName
}
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
'机型数据获取失败!'
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
that
.
workProcedureLoading
=
false
})
},
/**
* 页码触发
*/
setPage
(
$event
,
state
)
{
if
(
state
)
{
this
.
tablePagination
.
currentPage
=
$event
}
else
{
this
.
tablePagination
.
currentPage
=
1
this
.
tablePagination
.
pageSize
=
$event
}
this
.
getTableData
(
this
.
nodeData
,
this
.
level
)
},
/**
* 关闭
*/
close
()
{
var
row
=
this
.
tableData
.
filter
((
p
)
=>
p
.
id
===
this
.
curTableId
)[
0
]
if
(
row
.
subTypeName
!==
'DxProcessPlanAOR'
)
{
this
.
$message
({
message
:
'只有AOR才可关闭'
,
type
:
'warning'
})
return
}
this
.
aoLoading
=
true
post
(
'/DxProcessPlan/aor/close?id='
+
row
.
id
,
{},
'post'
)
.
then
((
res
)
=>
{
if
(
res
.
message
.
includes
(
'成功'
))
{
this
.
getTableData
()
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{})
},
/**
* 表一多选框
*/
checkPreservation
(
selection
)
{
this
.
selctionDatas
=
selection
if
(
selection
.
length
)
{
this
.
selctionData
=
selection
.
map
((
p
)
=>
p
.
id
).
join
(
','
)
}
else
{
this
.
selctionData
=
[]
}
},
deeTableEdit
(
row
,
column
,
cell
,
event
)
{
if
(
column
.
property
===
'number'
)
{
if
(
row
.
id
)
{
this
.
seePdf
(
row
.
id
)
}
else
{
this
.
$message
({
message
:
'该AO没有PDF'
,
type
:
'warning'
})
}
}
if
(
this
.
jurisdId
===
'Activity_0v2qfnh'
)
return
if
(
row
.
stateDisplayName
===
'Audited'
)
return
var
that
=
this
if
(
column
.
property
===
'firstCheckFlag'
)
{
row
.
firstCheckFlagSelect
=
true
}
else
if
(
column
.
property
===
'countWorkHour'
)
{
this
.
countWorkHour
=
row
.
countWorkHour
row
.
countWorkHourSelect
=
true
}
else
{
return
}
this
.
timer
=
setTimeout
(
function
()
{
if
(
column
.
property
===
'firstCheckFlag'
)
{
row
.
firstCheckFlagSelect
=
false
}
else
if
(
column
.
property
===
'countWorkHour'
)
{
row
.
countWorkHourSelect
=
false
}
clearTimeout
(
this
.
timer
)
that
.
timer
=
null
},
2000
)
},
visibleChange
(
event
,
row
)
{
if
(
event
)
{
clearTimeout
(
this
.
timer
)
this
.
timer
=
null
}
else
{
row
.
firstCheckFlagSelect
=
false
row
.
countWorkHourSelect
=
false
}
},
visibleWorkProcedureChange
(
event
,
row
)
{
if
(
event
)
{
clearTimeout
(
this
.
workProcedureTimer
)
this
.
workProcedureTimer
=
null
}
else
{
row
.
airFlagSelect
=
false
}
},
tableInputFocus
(
$event
,
status
)
{
if
(
status
)
{
clearTimeout
(
this
.
timer
)
this
.
timer
=
null
}
else
{
clearTimeout
(
this
.
workProcedureTimer
)
this
.
workProcedureTimer
=
null
}
},
workProcedureEdit
(
row
,
column
,
cell
,
event
)
{
if
(
this
.
jurisdId
===
'Activity_0v2qfnh'
)
return
var
that
=
this
if
(
that
.
stateDisplayName
===
'Audited'
)
return
if
(
column
.
property
===
'airFlag'
)
{
row
.
airFlagSelect
=
true
}
else
{
return
}
that
.
workProcedureTimer
=
setTimeout
(
function
()
{
if
(
column
.
property
===
'airFlag'
)
{
row
.
airFlagSelect
=
false
}
clearTimeout
(
that
.
workProcedureTimer
)
that
.
workProcedureTimer
=
null
},
2000
)
},
deeTableBlur
(
row
,
status
)
{
var
that
=
this
const
param
=
{
id
:
row
.
id
,
operator
:
'MODIFY'
,
opHour
:
row
.
countWorkHour
,
subTypeName
:
row
.
subTypeName
,
firstCheckFlag
:
row
.
firstCheckFlag
}
if
(
status
)
{
row
.
firstCheckFlagLoading
=
true
}
else
{
row
.
countWorkHourSelect
=
false
// 利用按值传递特性比较数值是否修改
if
(
this
.
countWorkHour
===
Number
(
row
.
countWorkHour
))
return
row
.
countWorkHourLoading
=
true
}
this
.
$api
.
recursion
(
'ExtProcessPlan'
,
param
)
.
then
((
res
)
=>
{
if
(
res
.
message
.
includes
(
'成功'
))
{
that
.
$message
({
showClose
:
true
,
message
:
'保存成功'
,
type
:
'success'
})
}
else
{
that
.
$message
({
showClose
:
true
,
message
:
'保存失败'
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
if
(
status
)
{
row
.
firstCheckFlagLoading
=
false
}
else
{
row
.
countWorkHourLoading
=
false
}
})
},
workProcedureBlur
(
row
,
status
)
{
row
.
airFlagSelect
=
false
var
that
=
this
const
param
=
{
operator
:
'MODIFY'
,
id
:
row
.
id
,
airFlag
:
row
.
airFlag
}
if
(
status
)
{
row
.
airFlagLoading
=
true
}
this
.
$api
.
recursion
(
'ExtProcessOperation'
,
param
)
.
then
((
res
)
=>
{
if
(
res
.
message
.
includes
(
'成功'
))
{
that
.
$message
({
showClose
:
true
,
message
:
'操作成功!'
,
type
:
'success'
})
}
else
{
that
.
$message
({
showClose
:
true
,
message
:
'保存失败!'
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
if
(
status
)
{
row
.
airFlagLoading
=
false
}
})
},
deeTableCellStyle
({
row
,
column
,
rowIndex
,
columnIndex
})
{
if
(
(
column
.
property
===
'firstCheckFlag'
&&
row
.
firstCheckFlagSelect
)
||
(
column
.
property
===
'airFlag'
&&
row
.
airFlagSelect
)
||
(
column
.
property
===
'countWorkHour'
&&
row
.
countWorkHourSelect
)
)
{
return
'highlight'
}
else
if
(
column
.
property
===
'number'
)
{
return
'seepdf'
}
},
async
seePdf
(
id
)
{
if
(
id
)
{
if
(
this
.
seePdfShow
)
{
return
}
const
notify
=
this
.
$notify
({
title
:
'提示'
,
message
:
'PDF正在加载中...,请稍后!'
,
duration
:
0
})
this
.
seePdfShow
=
true
downloadFile
(
`/ExtProcessPlan/createPDF?id=
${
id
}
`
,
'get'
).
then
(
res
=>
{
const
blob
=
new
Blob
([
res
.
data
],
{
type
:
'application/pdf'
})
if
(
window
.
navigator
.
msSaveOrOpenBlob
)
{
navigator
.
msSaveBlob
(
blob
)
}
else
{
var
openUrl
=
URL
.
createObjectURL
(
blob
)
this
.
seePdfShow
=
false
notify
.
close
()
window
.
open
(
openUrl
,
'_blank'
)
}
}).
catch
((
error
)
=>
{
console
.
log
(
error
)
notify
.
close
()
this
.
seePdfShow
=
false
})
}
else
{
this
.
$message
({
message
:
'该AO没有PDF'
,
type
:
'warning'
})
}
}
}
}
</
script
>
<
style
lang=
"scss"
>
.single-sortie-instruction-identification-right
{
padding-left
:
20px
;
display
:
flex
;
flex-direction
:
column
;
height
:
100%
;
>
.header
{
display
:
flex
;
width
:
100%
;
height
:
35px
;
justify-content
:
flex-end
;
.tools
{
display
:
flex
;
align-items
:
center
;
.inputSearch
{
width
:
300px
;
margin-right
:
20px
;
}
>
span
{
color
:
red
;
font-size
:
12px
;
}
.dee-tools
{
display
:
flex
;
margin-left
:
14px
;
.tools-block
>
.tool-item
{
padding-left
:
14px
;
padding-right
:
0
;
}
}
}
}
>
.table
{
height
:
20px
;
flex-grow
:
1
;
display
:
flex
;
flex-direction
:
column
;
>
div
{
flex
:
1
;
height
:
20px
;
flex-direction
:
column
;
display
:
flex
;
>
div
:first-child
{
flex-grow
:
1
;
height
:
20px
;
.el-table
thead
th
{
color
:
#2e2e2e
;
font-weight
:
700
;
font-size
:
14px
;
padding
:
0
;
background-color
:
#f3f6f7
;
line-height
:
46px
!
important
;
}
.el-table
.highlight
{
border
:
1px
solid
#1497f5
;
padding
:
0
;
.cell
{
padding
:
0
;
.el-select
{
width
:
100%
;
}
input
{
border
:
0
;
height
:
35px
;
background-color
:
transparent
;
text-align
:
center
;
padding-right
:
0
;
}
}
}
.el-table
.seepdf
{
color
:
#3a8ee6
;
cursor
:
pointer
;
}
.el-table
.cell
i
.el-icon-loading
{
font-size
:
16px
;
color
:
#ff0c00
;
font-weight
:
bold
;
position
:
absolute
;
right
:
10px
;
top
:
10px
;
}
}
.el-pagination
{
text-align
:
right
;
padding
:
10px
0
;
}
.el-loading-spinner
{
width
:
100%
;
}
}
}
.single-sortie-instruction-identification-right-dialog-add
{
.el-dialog__header
{
text-align
:
center
;
}
.el-dialog__body
{
.dee-table
{
height
:
200px
;
width
:
100%
;
}
>
div
>
div
:not
(
:first-child
)
{
margin-top
:
10px
;
display
:
flex
;
>
p
{
height
:
40px
;
flex
:
1
;
display
:
flex
;
align-items
:
center
;
>
span
{
width
:
70px
;
text-align
:
right
;
}
>
label
{
margin-left
:
30px
;
}
>
div
{
width
:
40px
;
flex-grow
:
1
;
>
input
{
padding-right
:
0
;
}
}
&
:last-child
{
margin-left
:
30px
;
}
}
}
}
.el-dialog__footer
{
text-align
:
center
;
padding
:
0
10px
10px
30px
;
}
}
.single-sortie-instruction-identification-right-dialog
.el-dialog__body
>
div
>
p
{
display
:
flex
;
align-items
:
center
;
>
span
{
width
:
140px
;
text-align
:
right
;
}
>
div
{
width
:
40px
;
flex-grow
:
1
;
>
input
{
padding-right
:
0
;
}
}
&
:first-child
{
margin-bottom
:
15px
;
}
}
.el-dialog__header
{
text-align
:
center
;
}
.el-dialog__footer
{
text-align
:
center
;
margin-right
:
10px
;
margin-bottom
:
10px
;
}
}
</
style
>
applications/dee-task-center/src/views/workflow/task-center/myPlanTask/instructionIdentificationBatch/index.vue
0 → 100644
View file @
12147b9a
<
template
>
<section
v-loading=
"instructionIdentificationShow"
class=
"single-sortie-instruction-identification"
>
<dee-fold-pane
:min-percent=
"18"
:default-percent=
"18"
split=
"vertical"
class=
"detail-pane"
>
<template
slot=
"paneL"
>
<div
class=
"left"
>
<left
ref=
"left"
:search-data=
"searchData"
@
handleTreeClick=
"handleTreeClick"
/>
</div>
</
template
>
<
template
slot=
"paneR"
>
<div
class=
"right"
>
<right
ref=
"right"
/>
</div>
</
template
>
</dee-fold-pane>
</section>
</template>
<
script
>
import
left
from
'./components/left/index'
import
right
from
'./components/right/index'
export
default
{
components
:
{
left
,
right
},
data
()
{
return
{
title
:
''
,
instructionIdentificationShow
:
false
,
jurisdId
:
null
,
searchData
:
{
model
:
[]
}
}
},
mounted
()
{
this
.
getModelData
()
},
created
()
{
},
methods
:
{
/**
* 获取机型数据
*/
getModelData
()
{
console
.
log
(
5555
)
const
param
=
{
searchItems
:
{
items
:
[{
fieldName
:
'id'
,
operator
:
'NEQ'
,
value
:
0
}]
},
sortItem
:
[{
fieldName
:
'modifyTime'
,
sortOrder
:
'asc'
}]
}
this
.
$api
.
searchApi
(
'AircraftType'
,
param
)
.
then
((
res
)
=>
{
if
(
res
&&
res
.
items
&&
res
.
items
.
content
)
{
this
.
searchData
.
model
=
res
.
items
.
content
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
'机型数据获取失败!'
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{
})
},
open
(
v
)
{
this
.
dialogCmp
=
{
typeName
:
'RequestOutStorageOut'
,
typeKey
:
'34fcf9f2-0ae6-47bb-920c-7c625d3e0937'
}
// this.$refs.dialog.open()
},
handleTreeClick
(
v
)
{
this
.
title
=
v
.
label
},
handleCollapse
(
v
)
{
}
}
}
</
script
>
<
style
lang=
"scss"
>
.single-sortie-instruction-identification
{
display
:
flex
;
height
:
100%
;
.detail-pane
{
width
:
100%
;
.left
{
height
:
100%
;
overflow-x
:
hidden
;
}
.right
{
height
:
100%
;
.table
{
margin-top
:
0
;
}
}
}
}
</
style
>
applications/dee-task-center/src/views/workflow/task-center/myPlanTask/taskList.vue
View file @
12147b9a
...
...
@@ -35,7 +35,9 @@ export default {
PlannerConfirm
:
()
=>
import
(
'./plannerConfirm'
),
// 计划员确认
WorkHourExamine
:
()
=>
import
(
'./workHourExamine'
),
// 工时审核
OutStorageMatchConfirm
:
()
=>
import
(
'./outStorageMatchConfirm'
),
// 配套出库确认
ProPreparateWorkerConfirm
:
()
=>
import
(
'./proPreparatWorkerConfirm'
)
// 生产准备工确认
ProPreparateWorkerConfirm
:
()
=>
import
(
'./proPreparatWorkerConfirm'
),
// 生产准备工确认
InstructionIdentificationBatch
:
()
=>
import
(
'./instructionIdentificationBatch'
),
// 指令标识
InstructionIdentificationBatchInfo
:
()
=>
import
(
'./instructionIdentificationBatch'
)
// 指令标识不编辑
},
props
:
{
selectData
:
{
...
...
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