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
5185ca3a
Commit
5185ca3a
authored
Sep 19, 2023
by
旭艳
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
任务接收页面开发
parent
ef1d7fbf
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1809 additions
and
1 deletion
+1809
-1
menu.js
applications/architecture-dee/src/store/modules/menu.js
+1
-1
MyCustomModule.vue
...re-dee/src/views/navigation/components/MyCustomModule.vue
+1
-0
dialog.vue
...views/taskReception/components/taskReceiveCard/dialog.vue
+314
-0
index.vue
.../views/taskReception/components/taskReceiveCard/index.vue
+708
-0
index.vue
...views/taskReception/components/taskReceiveTable/index.vue
+267
-0
table.vue
...views/taskReception/components/taskReceiveTable/table.vue
+334
-0
index.vue
applications/dee-mes/src/views/taskReception/index.vue
+43
-0
workspace.js
applications/dee-task-center/src/api/workspace.js
+5
-0
index.vue
...cations/dee-task-center/src/views/myTaskReceive/index.vue
+136
-0
No files found.
applications/architecture-dee/src/store/modules/menu.js
View file @
5185ca3a
...
...
@@ -97,7 +97,7 @@ const mutations = {
const
actions
=
{
activeModel
({
commit
,
state
},
model
)
{
// if (!state.activeModel || model.appId !== state.activeModel.id || (model.appId === 'todoTask' && state.activeModel.id !== 'todoTask')) {
if
(
model
.
appId
===
'todoTask'
||
model
.
appId
===
'myMessage'
)
{
// 待办任务页特殊处理
if
(
model
.
appId
===
'todoTask'
||
model
.
appId
===
'myMessage'
||
model
.
appId
===
'myTaskReceive'
||
model
.
appId
===
'myCheckTaskReceive'
||
model
.
appId
===
'myAirTaskReceive'
)
{
// 待办任务页特殊处理
commit
(
'SET_ACTIVE_MODEL'
,
{
id
:
model
.
appId
,
path
:
{
...
model
.
pageInfo
}
...
...
applications/architecture-dee/src/views/navigation/components/MyCustomModule.vue
View file @
5185ca3a
...
...
@@ -7,6 +7,7 @@
>
<component
:is=
"componentName"
:module=
"module"
/>
<div
:class=
"['delete-box', showDelete && 'show']"
>
<img
src=
"/images/navagations/delete-icon.png"
alt=
""
@
click
.
stop=
"remove"
>
...
...
applications/dee-mes/src/views/taskReception/components/taskReceiveCard/dialog.vue
0 → 100644
View file @
5185ca3a
<
template
>
<dee-dialog
id=
"dee-dialog"
title=
"设备使用登记"
:dialog-visible
.
sync=
"visible"
width=
"90%"
custom-class=
"mobile-dialog"
:before-close=
"handleClose"
>
<dee-form
ref=
"form"
:form=
"form"
:form-data=
"formFileds"
:rules=
"rules"
form-btn-position=
"center"
label-width=
"110px"
/>
<section
class=
"btn"
>
<el-button
:disabled=
"disabled"
type=
"primary"
size=
"medium"
@
click=
"save"
>
确定
</el-button>
<el-button
:disabled=
"disabled"
size=
"medium"
@
click=
"handleClose"
>
取消
</el-button>
</section>
</dee-dialog>
</
template
>
<
script
>
export
default
{
components
:
{
},
props
:
{
rowId
:
{
type
:
Number
,
default
:
()
=>
{}
}
},
data
()
{
var
validateAssemblyStartTime
=
(
rule
,
value
,
callback
)
=>
{
// 开始年份验证
if
(
value
===
undefined
)
{
callback
(
new
Error
(
'请选择开始时间'
))
}
else
{
if
(
this
.
form
.
assemblyEndTime
!==
undefined
)
{
if
(
value
>
this
.
form
.
assemblyEndTime
)
{
callback
(
new
Error
(
'开始时间不能大于结束时间'
))
}
callback
()
}
}
}
var
validateassemblyEndTime
=
(
rule
,
value
,
callback
)
=>
{
// 结束年份验证
if
(
value
===
undefined
)
{
callback
(
new
Error
(
'请选择结束时间'
))
}
else
{
callback
()
}
}
return
{
visible
:
false
,
disabled
:
false
,
rowData
:
null
,
form
:
{},
rules
:
{
jobNo
:
[{
required
:
true
,
message
:
'请输入作业令号'
,
trigger
:
'change'
}],
assemblyStartTime
:
[{
validator
:
validateAssemblyStartTime
,
required
:
true
,
trigger
:
'change'
}],
assemblyEndTime
:
[{
validator
:
validateassemblyEndTime
,
required
:
true
,
trigger
:
'change'
}]
},
formFileds
:
[
{
split
:
1
,
data
:
[
{
title
:
'设备型号'
,
key
:
'facilityNum'
,
component
:
{
name
:
'el-select'
,
clearable
:
true
,
placeholder
:
'请选择设备型号'
,
options
:
[
{
label
:
'未下达'
,
value
:
'N'
},
{
label
:
'己下达'
,
value
:
'Y'
},
{
label
:
'执行中'
,
value
:
'Running'
},
{
label
:
'已完工'
,
value
:
'Finish'
}
]
}
},
{
title
:
'设备名称'
,
key
:
'facilityName'
,
component
:
{
name
:
'el-input'
,
clearable
:
true
,
placeholder
:
'请输入设备名称'
}
},
{
title
:
'设备编码'
,
key
:
'facilityEncipher'
,
component
:
{
name
:
'el-input'
,
clearable
:
true
,
placeholder
:
'请输入设备名称'
}
},
{
title
:
'设备使用开始时间'
,
key
:
'assemblyStartTime'
,
component
:
{
disabled
:
false
,
clearable
:
true
,
name
:
'el-date-picker'
,
placeholder
:
'请选择开始时间'
,
type
:
'date'
,
format
:
'yyyy 年 MM 月 dd 日'
,
'value-format'
:
'yyyy-MM-dd'
}
},
{
title
:
'设备使用结束时间'
,
key
:
'assemblyEndTime'
,
component
:
{
clearable
:
true
,
name
:
'el-date-picker'
,
placeholder
:
'请选择完成时间'
,
type
:
'date'
,
format
:
'yyyy 年 MM 月 dd 日'
,
'value-format'
:
'yyyy-MM-dd'
}
}
]
}
]
}
},
created
()
{
},
methods
:
{
// 打开弹出框
open
(
row
=
{})
{
this
.
visible
=
true
this
.
form
=
{
...
row
}
if
(
row
.
id
)
{
this
.
form
.
supplier
=
this
.
form
.
supplier
&&
this
.
form
.
supplier
.
id
?
this
.
form
.
supplier
.
id
:
''
}
this
.
$refs
.
form
&&
this
.
$refs
.
form
.
reset
()
},
/**
* 保存功能
* 根据是否有id处理创建和编辑逻辑
*/
save
()
{
this
.
$refs
.
form
.
validate
((
valid
)
=>
{
if
(
!
valid
)
{
// this.$utils.showMessageWarning('请完整填写表单')
return
false
}
console
.
log
(
this
.
rowData
)
if
(
this
.
form
.
id
===
undefined
)
{
if
(
this
.
rowData
===
null
)
{
this
.
$message
({
message
:
'请选择表格里的数据'
,
type
:
'warning'
})
return
}
this
.
form
.
airModelId
=
this
.
rowData
.
dxProcessMaterialId
this
.
form
.
sortiesId
=
this
.
rowData
.
id
const
params
=
{
operator
:
'ADD'
,
dxClassname
:
'com.tf.mes.vo.schedule.ORProductionVo'
,
id
:
''
,
subTypeName
:
'OrProduction'
,
jobNo
:
this
.
form
.
jobNo
,
statusCode
:
'N'
,
assemblyStartTime
:
this
.
form
.
assemblyStartTime
,
assemblyEndTime
:
this
.
form
.
assemblyEndTime
,
airModelId
:
this
.
form
.
airModelId
,
isValid
:
'Y'
,
airModelIdType
:
this
.
rowData
.
dxProcessMaterialIdType
,
sortiesId
:
this
.
form
.
sortiesId
,
sortiesIdType
:
this
.
rowData
.
subTypeName
}
this
.
disabled
=
true
this
.
HttpRequest
(
'/ORProduction/recursion'
,
params
,
'post'
).
then
(
res
=>
{
this
.
reset
(
'创建'
)
this
.
rowData
=
null
}).
catch
(
err
=>
{
console
.
log
(
err
)
this
.
$set
(
this
.
form
,
'airModelId'
,
this
.
rowData
.
dxProcessMaterial
.
resName
)
this
.
$set
(
this
.
form
,
'sortiesId'
,
this
.
rowData
.
serialNo
)
}).
finally
(()
=>
{
this
.
disabled
=
false
})
}
else
{
const
params
=
{
'operator'
:
'MODIFY'
,
'id'
:
this
.
form
.
id
,
'jobNo'
:
this
.
form
.
jobNo
,
'assemblyStartTime'
:
this
.
form
.
assemblyStartTime
,
'assemblyEndTime'
:
this
.
form
.
assemblyEndTime
}
this
.
disabled
=
true
this
.
HttpRequest
(
'/ORProduction/recursion'
,
params
,
'post'
).
then
(
res
=>
{
this
.
reset
(
'编辑'
)
}).
catch
(
err
=>
{
console
.
log
(
err
)
}).
finally
(()
=>
{
this
.
disabled
=
false
})
}
})
},
// 删除接口
remove
(
row
)
{
const
params
=
{
operator
:
'REMOVE'
,
id
:
row
.
id
}
this
.
$confirm
(
'确定删除此条数据?'
,
'删除确认'
,
{
type
:
'error'
})
.
then
(()
=>
{
this
.
HttpRequest
(
`/ORProduction/recursion`
,
params
,
'POST'
)
.
then
((
res
)
=>
{
console
.
log
(
res
)
this
.
reset
(
'删除'
)
})
.
catch
((
err
)
=>
console
.
log
(
err
))
.
finally
(()
=>
{})
})
.
catch
(()
=>
{})
},
// 重置弹出框
reset
(
message
)
{
this
.
visible
=
false
this
.
$message
({
message
:
`
${
message
}
成功`
,
type
:
'success'
})
this
.
$emit
(
'reload'
)
},
// 取消
handleClose
()
{
this
.
$refs
.
form
.
reset
()
this
.
visible
=
false
this
.
rowData
=
null
},
// 弹框里的表格行点击
rowClick
(
row
)
{
this
.
$set
(
this
.
form
,
'airModelId'
,
row
.
dxProcessMaterial
.
resName
)
this
.
$set
(
this
.
form
,
'sortiesId'
,
row
.
serialNo
)
this
.
rowData
=
row
},
/**
* 下达
*/
transmit
()
{
if
(
this
.
rowId
===
null
)
{
this
.
$message
({
message
:
'请选择表格里的数据'
,
type
:
'warning'
})
return
}
this
.
HttpRequest
(
`/ORProduction/production/release?id=
${
this
.
rowId
}
`
,
{},
'post'
).
then
(
res
=>
{
this
.
reset
(
'下达'
)
}).
catch
(
err
=>
{
console
.
log
(
err
)
}).
finally
(()
=>
{
})
}
}
}
</
script
>
<
style
lang=
"scss"
>
#dee-dialog
{
.el-form-item__label
{
width
:
140px
!
important
;
// background: red;
}
.el-form-item__content
{
margin-left
:
150px
!
important
;
}
.dialogTable
{
height
:
168px
;
overflow
:
auto
;
margin-bottom
:
29px
;
.el-table
{
height
:
100%
;
}
}
.btn
{
text-align
:
center
;
margin-bottom
:
20px
;
}
}
</
style
>
applications/dee-mes/src/views/taskReception/components/taskReceiveCard/index.vue
0 → 100644
View file @
5185ca3a
<
template
>
<div
class=
"process-page"
>
<div
v-loading=
"processLoading"
class=
"ipad-body"
>
<el-row
v-if=
"processData.length"
:gutter=
"10"
>
<el-col
v-for=
"item in processData"
:key=
"item.id"
:lg=
"8"
:md=
"12"
>
<div
class=
"p-item"
@
click=
"routerAssemblyExecution(item)"
>
<a
:name=
"item.code"
/>
<div
class=
"process-header"
>
<div
class=
"status-box"
:class=
"item.status"
>
{{
item
.
status
|
statusFilters
(
joExecutePlanStateData
)
}}
</div>
<div
class=
"h-title"
>
<div
class=
"t-text"
:title=
"item.code"
>
{{
item
.
code
}}{{
item
.
gaceVersion
|
gaceVersionFilters
}}
</div>
<div
class=
"sub-t-text"
>
{{
item
.
task
}}
</div>
</div>
<div
class=
"h-percent"
>
{{
item
.
percent
|
proporFilters
}}
</div>
</div>
<div
class=
"process-body"
>
<div
class=
"top-content"
>
<div>
<div>
架次:
{{
item
.
sortie
}}
</div>
<div>
<!--
<div
:title=
"item.operator | userFilters"
>
-->
操作工:
<span
v-show=
"item.masterOprName"
style=
"color:red"
>
{{
item
.
masterOprName
}}
</span>
<!--
{{
item
.
operator
|
userFiltersName
(
item
.
masterOprName
)
}}
-->
{{
item
.
operator
}}
</div>
<div
:class=
"[item.priorCompletion === '是' ? 'blue' : 'red']"
>
前置完成情况:
{{
item
.
priorCompletion
}}
</div>
<div>
开始计划时间:
{{
item
.
start
}}
</div>
<div>
结束计划时间:
{{
item
.
end
}}
</div>
<!--
<div
:title=
"item.inspector | userFilters"
>
检验员:
{{
item
.
inspector
|
userFilters
}}
</div>
-->
<div
:title=
"item.inspector"
>
检验员:
{{
item
.
inspector
}}
</div>
<!--
<div>
配套率:
{{
item
.
ready
|
proporFilters
}}
</div>
-->
<div>
配套状态:
{{
item
.
outStatus
|
outStatusFilters
}}
</div>
<div
v-show=
"!item.isOK"
class=
"upgrade"
>
升版中
</div>
</div>
<div>
<div
v-show=
"item.firstCheckFlag === '是'"
>
<span>
首件检验
</span>
</div>
<div
v-show=
"item.isQualified"
>
<span>
不合格品
</span>
</div>
<div
v-show=
"item.isExit === '是'"
>
<span>
AAD CONF INSP REQ' D
</span>
</div>
<div
v-show=
"item.isException"
>
<span>
例外放行
</span>
</div>
</div>
</div>
<div
class=
"bottom-content"
>
当前第
<span
style=
"color: rgb(203, 144, 127)"
>
{{
item
.
step
}}
</span>
步 共
{{
item
.
countStep
}}
步
</div>
</div>
</div>
</el-col>
</el-row>
<div
v-else
class=
"process-page-not"
>
暂无数据
</div>
</div>
</div>
</
template
>
<
script
>
// import Dialog from './dialog'
// import TimeToSee from '@/views/mes/programExecutionManagement/assemblyPerform/components/TimeToSee/index'
// import $ from 'jquery'
import
{
post
}
from
'@/utils/http'
export
default
{
name
:
'TaskReceiveCard'
,
// components: { Dialog },
filters
:
{
gaceVersionFilters
(
version
)
{
if
(
version
)
{
return
'/'
+
version
}
return
''
},
statusFilters
:
function
(
status
,
joExecutePlanStateData
)
{
var
row
=
joExecutePlanStateData
.
filter
((
p
)
=>
p
.
value
===
status
)
if
(
row
&&
row
.
length
)
{
return
row
[
0
].
label
}
return
''
},
outStatusFilters
:
function
(
str
)
{
var
text
=
''
switch
(
str
)
{
case
'NotMatch'
:
text
=
'未配套'
break
case
'PartMatch'
:
text
=
'部分配套'
break
case
'AllMatch'
:
text
=
'已配套'
break
default
:
text
=
''
}
return
text
},
proporFilters
:
function
(
number
)
{
if
(
!
number
)
return
0
+
'%'
return
Math
.
round
(
number
*
1000
)
/
10
+
'%'
},
userFilters
:
function
(
arr
)
{
if
(
!
arr
||
!
arr
.
length
)
return
''
return
arr
.
map
((
p
)
=>
p
.
userName
).
join
(
'、'
)
},
userFiltersName
:
function
(
arr
,
name
)
{
if
(
!
arr
||
!
arr
.
length
)
return
''
var
vice
=
arr
.
filter
((
t
)
=>
t
.
userName
!==
name
)
.
map
((
p
)
=>
p
.
userName
)
.
join
(
'、'
)
||
''
return
name
&&
vice
?
', '
+
vice
:
vice
}
},
data
()
{
return
{
joExecutePlanStateData
:
[],
colorObj
:
{
1
:
'#6BA8E6'
,
2
:
'#65B46D'
},
processData
:
[],
processLoading
:
true
,
timer
:
null
,
transverse
:
false
,
openShow
:
true
,
isDrag
:
false
,
aoName
:
''
,
searchElement
:
[]
}
},
computed
:
{},
watch
:
{
$route
:
{
handler
(
to
,
from
)
{
if
(
to
&&
to
.
name
===
'taskReceive'
&&
from
&&
from
.
name
===
'assemblyPerform'
)
{
this
.
getTaskAcceptance
()
}
},
// deep: true,
immediate
:
true
}
},
created
()
{
this
.
getJoExecutePlanState
()
},
// mounted() {
// this.getTaskAcceptance()
// },
methods
:
{
routerAssemblyExecution
(
item
)
{
// if (!item.isOK) {
// this.$message({
// message: '版本不一致,等待计划更新!',
// type: 'warning'
// })
// return
// }
this
.
$router
.
push
({
name
:
'assemblyPerform'
,
query
:
{
id
:
item
.
id
,
materNo
:
item
.
materNo
,
airModelId
:
item
.
airModelId
,
sortiesId
:
item
.
sortiesId
,
isOK
:
item
.
isOK
}
})
},
getTaskAcceptance
()
{
const
that
=
this
var
param
=
{
'searchQueryCondition'
:
{
'searchItems'
:
{
'children'
:
[
{
'items'
:
[
{
'fieldName'
:
'planState'
,
'operator'
:
'IN'
,
'value'
:
[
'Delivery'
,
'Run'
]
},
{
'fieldName'
:
'prodTask.extProcessSkillUser.dxUserInfoId'
,
'operator'
:
'EQ'
,
'value'
:
1626781927440
}
],
'operator'
:
'AND'
},
{
'items'
:
[
{
'fieldName'
:
'extProcessPlan.serialNumber'
,
'operator'
:
'LIKE'
,
'value'
:
''
},
{
'fieldName'
:
'extProcessPlan.name'
,
'operator'
:
'LIKE'
,
'value'
:
''
}
],
'operator'
:
'OR'
}
],
'items'
:
[],
'operator'
:
'AND'
},
'openProps'
:
[
{
'name'
:
'extProcessPlan'
},
{
'name'
:
'prodTask'
,
'openProps'
:
[
{
'name'
:
'extProcessSkillUser'
}
]
}
],
'sortItem'
:
[
{
'fieldName'
:
'modifyTime'
,
'sortOrder'
:
'desc'
}
],
'toValidateKeys'
:
''
},
'searchItem'
:
{
'fieldName'
:
'joExecuteOpPlan.status'
,
'operator'
:
'IN'
,
'value'
:
[
'Yes'
,
'UnderTest'
]
},
'operator'
:
'NEQ'
}
that
.
processLoading
=
true
post
(
'/JoExecutePlan/getTaskAcceptance'
,
param
)
.
then
((
res
)
=>
{
if
(
res
&&
res
.
items
)
{
const
operator
=
[]
const
inspector
=
[]
console
.
log
(
res
.
items
)
if
(
res
.
items
)
{
res
.
items
.
forEach
(
item
=>
{
if
(
item
.
prodTask
)
{
item
.
prodTask
.
forEach
(
element
=>
{
if
(
element
.
subTypeName
===
'CheckOut'
)
{
inspector
.
push
(
element
.
extProcessSkillUser
.
dxUserInfo
.
name
)
}
else
if
(
element
.
subTypeName
===
'FitOut'
)
{
operator
.
push
(
element
.
extProcessSkillUser
.
dxUserInfo
.
name
)
}
})
}
})
}
console
.
log
(
operator
,
inspector
)
that
.
processData
=
res
.
items
.
map
((
p
)
=>
{
return
{
id
:
p
.
id
,
status
:
p
.
planState
,
code
:
p
.
extProcessPlan
.
serialNumber
,
sortie
:
p
.
extProcessPlan
.
sorties
,
// percent:
// p.isOkOpPlan && p.allOpPlan ? p.isOkOpPlan / p.allOpPlan : 0,
operator
:
operator
.
join
(
' '
),
priorCompletion
:
p
.
preIsAccomplish
,
start
:
p
.
scheduledStart
,
end
:
p
.
scheduledEnd
,
inspector
:
inspector
.
join
(
' '
),
task
:
p
.
extProcessPlan
.
materName
,
gaceVersion
:
p
.
extProcessPlan
.
gaceVersion
,
ready
:
p
.
extProcessPlan
.
fitRates
,
// outStatus: p.outStatus,
// step: p.isOkOpPlan,
// countStep: p.allOpPlan,
firstCheckFlag
:
p
.
extProcessPlan
.
firstCheckFlag
,
// // 不合格产品
// isQualified: p.isQualified,
isExit
:
p
.
isExit
// isOK: p.isOK,
// // 例外放行
// isException: p.isException
}
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
that
.
processLoading
=
false
})
},
/**
* 获取作业计划状态
*/
getJoExecutePlanState
()
{
const
that
=
this
that
.
processData
=
[]
this
.
$utils
.
getDicListByCode
(
'PlanState'
).
then
(
res
=>
{
that
.
joExecutePlanStateData
=
res
that
.
getTaskAcceptance
()
})
}
}
}
</
script
>
<
style
lang=
"scss"
>
// @import "../../../../../../icons/app/iconfont.css";
@keyframes
glow
{
0
%
{
box-shadow
:
2px
3px
16px
0px
rgba
(
208
,
208
,
208
,
0
.5
);
border
:
1px
solid
rgba
(
213
,
217
,
220
,
1
);
}
100
%
{
// border: 1px solid #73b9ec;
// box-shadow: 2px 3px 16px 0px rgb(177, 220, 241);
border
:
1px
solid
red
;
box-shadow
:
2px
3px
16px
0px
red
;
}
}
.process-page
{
height
:
20px
;
flex-grow
:
1
;
width
:
100%
;
box-sizing
:
border-box
;
display
:
flex
;
flex-direction
:
column
;
background-color
:
#f2f1f1
;
.process-page-not
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
height
:
100%
;
}
.ipad-body
{
height
:
20px
;
margin
:
20px
20px
0
20px
;
flex-grow
:
1
;
overflow
:
hidden
;
.el-row
{
height
:
100%
;
margin-right
:
0px
!
important
;
overflow
:
auto
;
.p-item
{
width
:
100%
;
height
:
300px
;
background
:
rgba
(
244
,
247
,
248
,
1
);
box-shadow
:
2px
3px
16px
0px
rgba
(
208
,
208
,
208
,
0
.5
);
border-radius
:
6px
;
overflow
:
hidden
;
border
:
1px
solid
rgba
(
213
,
217
,
220
,
1
);
margin-bottom
:
10px
;
display
:
flex
;
flex-direction
:
column
;
cursor
:
pointer
;
&
:hover
{
border
:
1px
solid
#73b9ec
;
box-shadow
:
2px
3px
16px
0px
rgb
(
177
,
220
,
241
);
}
.process-header
{
height
:
70px
;
background
:
#fff
;
position
:
relative
;
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
.status-box
{
position
:
absolute
;
left
:
0px
;
top
:
12px
;
height
:
30px
;
line-height
:
30px
;
padding-left
:
10px
;
width
:
74px
;
background
:
rgba
(
90
,
195
,
140
,
1
);
box-shadow
:
1px
1px
5px
0px
rgba
(
184
,
193
,
186
,
0
.99
);
border-radius
:
2px
;
color
:
#fff
;
&
.Finish
{
background-color
:
#97b552
;
border
:
1px
solid
#97b552
;
}
&
.Not
{
background-color
:
#cccccc
;
border
:
1px
solid
#cccccc
;
}
&
.levelNew
{
background-color
:
#59c4e6
;
border
:
1px
solid
#59c4e6
;
}
&
.Reserved
{
background-color
:
#c1232b
;
border
:
1px
solid
#c1232b
;
}
&
.Delivery
{
background-color
:
#65b46d
;
border
:
1px
solid
#65b46d
;
}
&
.Run
{
background-color
:
#37a2da
;
border
:
1px
solid
#37a2da
;
}
&
.Paused
{
background-color
:
#8a7ca8
;
border
:
1px
solid
#8a7ca8
;
}
&
.Issued
{
background-color
:
#f160c1
;
border
:
1px
solid
#f160c1
;
}
}
.h-title
{
padding-left
:
92px
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
.t-text
{
font-size
:
20px
;
color
:
#5c5c5c
;
overflow
:
hidden
;
/* 超出部分隐藏 */
white-space
:
nowrap
;
/* 文本不换行 */
text-overflow
:
ellipsis
;
/* 省略的文本用省略号表示 */
}
.sub-t-text
{
color
:
#8a8a8a
;
font-size
:
16px
;
overflow
:
hidden
;
/* 超出部分隐藏 */
white-space
:
nowrap
;
/* 文本不换行 */
text-overflow
:
ellipsis
;
/* 省略的文本用省略号表示 */
}
}
.h-percent
{
color
:
#e68c5c
;
padding-right
:
10px
;
font-size
:
30px
;
font-weight
:
normal
;
}
}
.process-body
{
flex
:
1
;
position
:
relative
;
background-image
:
url(/images/plane-bac.png)
;
background-repeat
:
no-repeat
;
background-position
:
bottom
left
;
display
:
flex
;
flex-direction
:
column
;
&
:
:
after
{
content
:
""
;
position
:
absolute
;
left
:
20px
;
right
:
20px
;
bottom
:
51px
;
border-top
:
1px
dotted
#c8d1db
;
}
.top-content
{
padding-left
:
20px
;
display
:
flex
;
justify-content
:
space-between
;
position
:
relative
;
>
div
:first-child
{
display
:
flex
;
justify-content
:
center
;
flex-direction
:
column
;
line-height
:
28px
;
font-size
:
12px
;
overflow
:
hidden
;
/* 超出部分隐藏 */
white-space
:
nowrap
;
/* 文本不换行 */
text-overflow
:
ellipsis
;
/* 省略的文本用省略号表示 */
.blue
{
color
:
blue
;
}
.red
{
color
:
red
;
}
.upgrade
{
position
:
absolute
;
border
:
4px
solid
red
;
width
:
150px
;
height
:
150px
;
border-radius
:
50%
;
text-align
:
center
;
line-height
:
150px
;
z-index
:
55
;
color
:
red
;
margin-left
:
25px
;
font-size
:
24px
;
font-weight
:
bold
;
background
:
linear-gradient
(
135deg
,
transparent
49
.5%
,
transparent
49
.5%
,
red
52%
,
transparent
50
.5%
);
}
}
>
div
:last-child
{
display
:
flex
;
flex-direction
:
column
;
justify-content
:
space-evenly
;
font-size
:
12px
;
position
:
absolute
;
height
:
100%
;
right
:
0
;
>
div
{
&
:not
(
:nth-child
(
3
))
{
margin-right
:
30px
;
}
>
span
{
white-space
:
nowrap
;
background-color
:
#fff
;
border
:
3px
solid
red
;
color
:
red
;
font-weight
:
bold
;
padding
:
3px
6px
;
}
&
:nth-child
(
3
)
{
span
{
border-bottom-right-radius
:
50%
;
border-top-right-radius
:
50%
;
}
}
}
}
}
.bottom-content
{
height
:
50px
;
display
:
flex
;
justify-content
:
flex-end
;
align-items
:
center
;
padding-right
:
50px
;
}
}
}
.p-item.arrow_box
{
animation
:
glow
800ms
ease-out
infinite
alternate
;
}
}
}
.ipad-footer
{
height
:
58px
;
background
:
#fff
;
border-top
:
1px
solid
#dadada
;
display
:
flex
;
justify-content
:
center
;
z-index
:
2001
;
.btn-box
{
position
:
relative
;
.btn-box-content
{
background-image
:
url(/images/footline.png)
;
background-repeat
:
no-repeat
;
position
:
absolute
;
height
:
92px
;
background-size
:
contain
;
width
:
140px
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
z-index
:
10
;
left
:
-70px
;
bottom
:
0
;
.scan-btn
{
width
:
70px
;
height
:
70px
;
background
:
linear-gradient
(
192deg
,
rgba
(
52
,
159
,
49
,
1
)
0%
,
rgba
(
79
,
108
,
187
,
1
)
100%
);
border-radius
:
35px
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
img
{
width
:
40px
;
height
:
40px
;
}
}
}
}
}
.right-side
{
position
:
fixed
;
right
:
0px
;
bottom
:
0px
;
background-color
:
#fff
;
text-align
:
center
;
line-height
:
29px
;
z-index
:
10
;
overflow
:
auto
;
// &:hover {
// overflow: auto;
// right: 6px;
// }
dd
.el-popover__reference
{
padding
:
10px
;
font-size
:
14px
;
color
:
#666
;
cursor
:
pointer
;
i
{
font-size
:
30px
;
color
:
#409eff
;
}
p
{
white-space
:
nowrap
;
display
:
flow-root
;
text-align
:
center
;
}
&
:hover
i
{
color
:
#fff
;
}
&
:hover
{
color
:
#fff
;
background-color
:
#409eff
;
}
}
>
dd
{
padding
:
10px
;
display
:
inherit
;
cursor
:
pointer
;
color
:
#666
;
font-size
:
14px
;
p
{
white-space
:
nowrap
;
display
:
flow-root
;
text-align
:
center
;
}
.icon
{
width
:
1em
;
height
:
1em
;
vertical-align
:
-0
.15em
;
fill
:
currentColor
;
overflow
:
hidden
;
font-size
:
30px
;
color
:
#409eff
;
}
.icon
,
.iconfont
{
font-size
:
30px
;
color
:
#409eff
;
}
&
:hover
{
color
:
#fff
;
background-color
:
#409eff
;
}
&
:hover
.iconfont
{
color
:
#fff
;
}
}
}
}
.fuzzy-search-popper
>
.body
>
footer
{
margin-top
:
15px
;
text-align
:
right
;
>
a
{
margin-left
:
15px
;
&
:hover
{
color
:
#409eff
;
}
}
}
</
style
>
applications/dee-mes/src/views/taskReception/components/taskReceiveTable/index.vue
0 → 100644
View file @
5185ca3a
<!--
* @Author: ljm
* @Date: 2021-04-15
* @LastEditTime:
* @Description: 任务接收
* @FilePath: applications/dee-mes/src/viewsapplications/dee-mes/src/views/mes/programExecutionManagement/taskReceive/components/taskReceiveTable/index
-->
<
template
>
<section
class=
"taskReceiveTable"
>
<div
class=
"header"
>
<div>
<div>
机型:
<el-select
v-model=
"model"
size=
"small"
placeholder=
"请选择"
:loading=
"modelLoading"
clearable
@
change=
"getAddRecursion"
>
<el-option
v-for=
"item in modelData"
:key=
"item.id"
:label=
"item.resName"
:value=
"item.id"
/>
</el-select>
</div>
<div>
架次:
<el-select
v-model=
"sorties"
size=
"small"
clearable
placeholder=
"请选择"
:loading=
"sortiesLoading"
>
<el-option
v-for=
"item in sortiesData"
:key=
"item.id"
:label=
"item.serialNo"
:value=
"item.id"
/>
</el-select>
</div>
<div>
关键字:
<el-input
v-model=
"aoName"
clearable
size=
"small"
placeholder=
"请输入内容"
/>
</div>
<div>
<el-button
size=
"small"
type=
"primary"
@
click=
"getTableData"
>
查询
</el-button>
<el-button
size=
"small"
@
click=
"resetForm"
>
重置
</el-button>
</div>
</div>
<span>
<el-button
size=
"small"
@
click=
"$parent.isShow = true"
>
视图切换
</el-button>
</span>
</div>
<Table
ref=
"table"
/>
</section>
</
template
>
<
script
>
import
Table
from
'./table'
export
default
{
name
:
'TaskReceiveTable'
,
components
:
{
Table
},
data
()
{
return
{
model
:
null
,
modelLoading
:
false
,
modelData
:
[],
sorties
:
null
,
sortiesLoading
:
false
,
sortiesData
:
[],
aoName
:
null
}
},
created
()
{},
mounted
()
{
this
.
getAddModel
(
true
)
},
methods
:
{
/**
* 获取新增机型
*/
getAddModel
(
status
)
{
const
param
=
{
indices
:
[
'DxProcessProduct'
],
sortItem
:
[
{
fieldName
:
'modifyTime'
,
sortOrder
:
'desc'
}
]
}
this
.
HttpRequest
(
'/DxProcessProduct/find/recursion'
,
param
,
'post'
)
.
then
((
res
)
=>
{
this
.
modelData
=
[]
if
(
res
.
items
&&
res
.
items
.
content
)
{
this
.
modelData
=
res
.
items
.
content
this
.
$nextTick
(()
=>
{
if
(
this
.
modelData
.
length
)
{
this
.
model
=
this
.
modelData
[
0
].
id
this
.
getAddRecursion
(
status
)
}
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
this
.
$nextTick
(()
=>
{
this
.
modelLoading
=
false
})
})
},
/**
* 获取架次数据
*/
getAddRecursion
(
status
)
{
this
.
sortiesLoading
=
true
if
(
!
this
.
model
)
{
this
.
sortiesData
=
[]
this
.
sorties
=
null
}
const
param
=
{
indices
:
[
'DxProcessMaterialLot'
],
openProps
:
[
{
name
:
'dxProcessMaterial'
,
searchItems
:
{
items
:
[
{
fieldName
:
'id'
,
operator
:
'EQ'
,
value
:
this
.
model
}
],
operator
:
'AND'
},
parentFilter
:
true
}
],
searchItems
:
{
items
:
[
{
fieldName
:
'dxProcessPlanIdType'
,
operator
:
'EQ'
,
value
:
'DxProcessPlan'
}
],
operator
:
'AND'
},
sortItem
:
[
{
fieldName
:
'modifyTime'
,
sortOrder
:
'desc'
}
]
}
this
.
HttpRequest
(
'/DxProcessMaterialLot/find/recursion'
,
param
,
'post'
)
.
then
((
res
)
=>
{
this
.
sortiesData
=
[]
if
(
res
)
{
this
.
sortiesData
=
res
&&
res
.
items
&&
res
.
items
.
content
this
.
$nextTick
(()
=>
{
if
(
this
.
sortiesData
.
length
)
{
this
.
sorties
=
this
.
sortiesData
[
0
].
id
if
(
status
)
{
this
.
getTableData
()
}
}
})
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
this
.
$nextTick
(()
=>
{
this
.
sortiesLoading
=
false
})
})
},
resetForm
()
{
this
.
model
=
this
.
modelData
[
0
].
id
this
.
aoName
=
null
this
.
getAddRecursion
(
true
)
},
getTableData
()
{
this
.
$nextTick
(()
=>
{
this
.
$refs
.
table
.
getTableData
()
})
}
}
}
</
script
>
<
style
lang=
"scss"
>
.taskReceiveTable
{
width
:
100%
;
box-sizing
:
border-box
;
padding
:
20px
;
height
:
20px
;
flex-grow
:
1
;
.header
{
display
:
flex
;
justify-content
:
space-between
;
white-space
:
nowrap
;
margin-bottom
:
15px
;
>
div
:first-child
{
display
:
flex
;
>
div
{
margin-right
:
40px
;
align-items
:
center
;
display
:
flex
;
>
.el-select
{
width
:
150px
;
}
>
.el-input
{
width
:
260px
;
}
}
}
}
>
section
{
height
:
calc
(
100%
-
45px
);
.el-table
td
.el-button
{
padding
:
0
;
}
.el-table
thead
th
{
color
:
#2e2e2e
;
font-weight
:
700
;
font-size
:
14px
;
padding
:
0
;
background-color
:
#f3f6f7
;
line-height
:
46px
!
important
;
}
.el-pagination
{
margin
:
10px
;
padding
:
0
;
text-align
:
right
;
}
}
}
</
style
>
applications/dee-mes/src/views/taskReception/components/taskReceiveTable/table.vue
0 → 100644
View file @
5185ca3a
<
template
>
<section>
<!-- 表格 -->
<el-table
v-loading=
"loading"
:data=
"tableData"
border
height=
"100%"
size=
"mini"
>
<el-table-column
type=
"index"
width=
"60"
align=
"center"
label=
"序号"
/>
<el-table-column
prop=
"dxProcessPlanAssemblyUnitNo"
label=
"装配单元"
min-width=
"120"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"serialNumber"
label=
"AO号"
min-width=
"220"
align=
"center"
show-overflow-tooltip
>
<template
slot-scope=
"scope"
>
<el-button
type=
"text"
@
click=
"routerAssemblyExecution(scope.row)"
>
{{
scope
.
row
.
serialNumber
}}
</el-button>
</
template
>
</el-table-column>
<el-table-column
v-for=
"item in tableColums1"
:key=
"item.key"
:prop=
"item.key"
:label=
"item.title"
:min-width=
"item.width"
:sortable=
"item.sortable"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"operating"
label=
"操作者"
:min-width=
"100"
sortable
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<span
style=
"color:red"
>
{{
scope
.
row
.
operating
.
main
}}
</span>
<span>
{{
scope
.
row
.
operating
.
vice
}}
</span>
</
template
>
</el-table-column>
<el-table-column
v-for=
"item in tableColums2"
:key=
"item.key"
:prop=
"item.key"
:label=
"item.title"
:min-width=
"item.width"
:sortable=
"item.sortable"
align=
"center"
show-overflow-tooltip
/>
</el-table>
<!-- <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)"
/> -->
</section>
</template>
<
script
>
export
default
{
components
:
{},
data
()
{
return
{
// 加载中
loading
:
false
,
// 分页
tablePagination
:
{
currentPage
:
1
,
pageSize
:
20
,
total
:
0
,
pageSizes
:
[
10
,
20
,
50
,
100
]
},
// 所有可动态配置的表格列
tableColums1
:
[
// {
// title: 'AO号',
// show: true,
// key: 'serialNumber',
// sortable: true,
// width: '120'
// },
{
title
:
'AO名称'
,
show
:
true
,
key
:
'materName'
,
sortable
:
true
,
width
:
'180'
},
{
title
:
'版本'
,
show
:
true
,
key
:
'gaceVersion'
,
sortable
:
true
,
width
:
'80'
},
{
title
:
'计划开始时间'
,
show
:
true
,
key
:
'scheduledStart'
,
sortable
:
true
,
width
:
'180'
},
{
title
:
'计划结束时间'
,
show
:
true
,
key
:
'scheduledEnd'
,
sortable
:
true
,
width
:
'180'
},
{
title
:
'定额工时'
,
show
:
true
,
key
:
'allWorkHour'
,
sortable
:
true
,
width
:
'120'
}],
tableColums2
:
[
{
title
:
'检验员'
,
show
:
true
,
key
:
'operatorUser'
,
sortable
:
true
,
width
:
'120'
},
{
title
:
'任务状态'
,
show
:
true
,
key
:
'planStateCode'
,
sortable
:
true
,
width
:
'120'
},
{
title
:
'完成百分比'
,
show
:
true
,
key
:
'percentage'
,
sortable
:
true
,
width
:
'120'
}
],
// 表格数据
tableData
:
[],
joExecutePlanStateData
:
[]
}
},
created
()
{
Promise
.
all
([
this
.
getJoExecutePlanState
(),
this
.
getTableData
()])
// this.getJoExecutePlanState()
},
mounted
()
{
// this.getTableData()
},
methods
:
{
/**
* 获取作业计划状态
*/
getJoExecutePlanState
()
{
const
that
=
this
var
param
=
{
pageFrom
:
1
,
pageSize
:
100000
,
searchItems
:
{
items
:
[
{
fieldName
:
'dictState'
,
operator
:
'EQ'
,
value
:
'ENABLE'
},
{
fieldName
:
'dictCode'
,
operator
:
'EQ'
,
value
:
'JoExecutePlanState'
}
]
},
sortItem
:
[{
fieldName
:
'dictSeq'
,
sortOrder
:
'asc'
}]
}
this
.
HttpRequest
(
'DictData/search'
,
param
,
'post'
)
.
then
((
res
)
=>
{
if
(
res
)
{
if
(
res
.
items
&&
res
.
items
.
content
.
length
)
{
that
.
joExecutePlanStateData
=
res
.
items
.
content
}
else
{
that
.
joExecutePlanStateData
=
[]
}
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{})
},
/**
* 页码触发
*/
setPage
(
$event
,
state
)
{
if
(
state
)
{
this
.
tablePagination
.
currentPage
=
$event
}
else
{
this
.
tablePagination
.
currentPage
=
1
this
.
tablePagination
.
pageSize
=
$event
}
this
.
getTableData
()
},
getTableData
()
{
const
that
=
this
var
param
=
{
indices
:
[
'DxProcessPlan'
],
pageFrom
:
that
.
tablePagination
.
currentPage
,
pageSize
:
that
.
tablePagination
.
pageSize
,
searchItems
:
{
items
:
[
{
fieldName
:
'id'
,
operator
:
'EQ'
,
value
:
localStorage
.
getItem
(
'userId'
)
},
{
fieldName
:
'serialId'
,
operator
:
'LIKE'
,
value
:
this
.
$parent
.
sorties
},
{
fieldName
:
'aoName'
,
operator
:
'LIKE'
,
value
:
this
.
$parent
.
aoName
},
{
fieldName
:
'isView'
,
operator
:
'LIKE'
,
value
:
'Y'
}
],
operator
:
'AND'
},
sortItem
:
[
{
fieldName
:
'modifyTime'
,
sortOrder
:
'desc'
}
]
}
that
.
processLoading
=
true
this
.
HttpRequest
(
'/JoExecutePlan/getTaskAcceptance'
,
param
,
'post'
)
.
then
((
res
)
=>
{
if
(
res
&&
res
.
items
)
{
that
.
tableData
=
res
.
items
.
map
((
p
)
=>
{
var
vice
=
(
p
.
operating
&&
p
.
operating
.
filter
(
t
=>
t
.
userName
!==
p
.
masterOprName
)
.
map
((
q
)
=>
{
return
q
.
userName
})
.
join
(
','
))
||
''
return
{
id
:
p
.
id
,
dxProcessPlanAssemblyUnitNo
:
p
.
dxProcessPlanAssemblyUnitNo
,
serialNumber
:
p
.
ao
.
serialNumber
,
materName
:
p
.
ao
.
materName
,
isOK
:
p
.
isOK
,
gaceVersion
:
p
.
ao
.
gaceVersion
,
scheduledStart
:
p
.
scheduledStart
,
scheduledEnd
:
p
.
scheduledEnd
,
allWorkHour
:
p
.
ao
.
countWorkHour
,
operating
:
{
main
:
p
.
masterOprName
||
''
,
vice
:
p
.
masterOprName
&&
vice
?
', '
+
vice
:
vice
},
operatorUser
:
(
p
.
examines
&&
p
.
examines
.
map
((
q
)
=>
{
return
q
.
userName
})
.
join
(
','
))
||
''
,
planStateCode
:
(
p
.
planStateCode
&&
that
.
joExecutePlanStateData
.
filter
(
(
q
)
=>
q
.
dictKey
===
p
.
planStateCode
)[
0
].
dictValue
)
||
''
,
percentage
:
(
p
.
isOkOpPlan
&&
p
.
allOpPlan
?
Math
.
round
((
p
.
isOkOpPlan
/
p
.
allOpPlan
)
*
1000
)
/
10
:
0
)
+
'%'
}
})
that
.
tablePagination
.
total
=
res
.
items
.
total
}
else
{
this
.
$message
({
showClose
:
true
,
message
:
res
.
message
,
type
:
'error'
})
}
})
.
catch
((
err
)
=>
console
.
error
(
err
))
.
finally
(()
=>
{
that
.
processLoading
=
false
})
},
routerAssemblyExecution
(
item
)
{
if
(
!
item
.
isOK
)
return
this
.
$router
.
push
({
name
:
'assemblyPerform'
,
query
:
{
id
:
item
.
id
,
materNo
:
item
.
materNo
,
airModelId
:
item
.
airModelId
,
sortiesId
:
item
.
sortiesId
,
isOK
:
item
.
isOK
}
})
}
}
}
</
script
>
applications/dee-mes/src/views/taskReception/index.vue
0 → 100644
View file @
5185ca3a
<
template
>
<section
class=
"taskReceive"
>
<!--
<IpadHeader
/>
-->
<TaskReceiveCard
v-if=
"isShow"
/>
<TaskReceiveTable
v-else
/>
</section>
</
template
>
<
script
>
// import IpadHeader from '../ipadHeader'
import
TaskReceiveCard
from
'./components/taskReceiveCard/index'
import
TaskReceiveTable
from
'./components/taskReceiveTable/index'
export
default
{
name
:
'TaskReceive'
,
components
:
{
// IpadHeader,
TaskReceiveCard
,
TaskReceiveTable
},
data
()
{
return
{
isShow
:
true
}
}
}
</
script
>
<
style
lang=
"scss"
>
// @import "/icons/app/iconfont.css";
.taskReceive
{
// position: fixed;
// left: 0;
// top: 0px;
// z-index: 1111;
background-color
:
#fff
;
height
:
100%
;
//calc(100vh);
width
:
100%
;
//calc(100vw);
box-sizing
:
border-box
;
display
:
flex
;
flex-direction
:
column
;
}
</
style
>
applications/dee-task-center/src/api/workspace.js
View file @
5185ca3a
...
...
@@ -7,3 +7,8 @@ export function countOfType(params) {
export
function
getMessageNum
(
params
)
{
return
get
(
`/Notify/findIsReadNum`
,
params
)
}
export
function
getTaskCount
(
params
)
{
return
get
(
`/indexTask/task/fitOut`
,
params
)
}
applications/dee-task-center/src/views/myTaskReceive/index.vue
0 → 100644
View file @
5185ca3a
<
template
>
<div
v-if=
"show&&module.total>0"
class=
"my-custom-module"
@
click=
"goModule(module)"
>
<div
class=
"custom-module-title"
>
{{
module
.
name
}}
</div>
<div
class=
"custom-module-content"
>
<div
class=
"custom-module-content-item"
>
<img
:src=
"module.icon"
alt=
""
>
</div>
<div
class=
"custom-module-content-item custom-module-content-item-total"
>
{{
module
.
total
}}
</div>
</div>
<div
v-if=
"module.list"
class=
"custom-module-bottom"
>
<div
v-for=
"item in module.list"
:key=
"item.name"
class=
"custom-module-bottom-item"
style=
"justify-content: flex-end;"
>
<span
class=
"custom-module-bottom-item-name"
>
{{
item
.
name
}}
</span><span>
{{
item
.
value
}}
</span>
</div>
</div>
</div>
</
template
>
<
script
>
import
{
getTaskCount
}
from
'@/api/workspace.js'
export
default
{
props
:
{
module
:
{
type
:
Object
,
default
:
null
}
},
data
()
{
return
{
show
:
false
}
},
watch
:
{
'module.name'
:
{
immediate
:
true
,
handler
:
function
(
val
)
{
if
(
val
)
{
this
.
getCustomModules
(
val
)
}
}
}
},
// mounted() {
// this.getCustomModules()
// },
methods
:
{
getCustomModules
(
data
)
{
const
params
=
{}
if
(
data
===
'装配任务'
)
{
params
.
type
=
'FitOut'
this
.
module
.
appId
=
'myTaskReceive'
}
else
if
(
data
===
'检验任务'
)
{
params
.
type
=
'CheckOut'
this
.
module
.
appId
=
'myCheckTaskReceive'
}
else
{
params
.
type
=
'DMIR'
this
.
module
.
appId
=
'myAirTaskReceive'
}
getTaskCount
(
params
).
then
(
res
=>
{
this
.
module
.
icon
=
'/images/navagations/task-icon.png'
this
.
module
.
total
=
res
.
items
.
count
this
.
module
.
list
=
[{
name
:
'待办'
,
value
:
res
.
items
.
count
}]
this
.
module
.
serverOriginName
=
'dee-mes'
this
.
module
.
originRoute
=
'dee-mes/taskReception'
this
.
module
.
showMenu
=
false
this
.
show
=
true
})
},
async
goModule
(
module
)
{
this
.
$router
.
push
({
path
:
module
.
originRoute
,
// meta: { disnav: false },
query
:
{
title
:
module
.
name
,
showMenu
:
module
.
showMenu
}
})
this
.
$store
.
dispatch
(
'menu/activeModel'
,
{
appId
:
this
.
module
.
appId
,
pageInfo
:
{
title
:
this
.
module
.
name
,
path
:
'/dee-mes/taskReception'
}
})
this
.
$store
.
dispatch
(
'app/toggleSideBar'
)
}
}
}
</
script
>
<
style
lang=
"scss"
>
.my-custom-module
{
height
:
173px
;
min-width
:
179px
;
background-color
:
#fff
;
padding
:
20px
;
box-sizing
:
border-box
;
display
:
flex
;
flex-direction
:
column
;
justify-content
:
space-between
;
position
:
relative
;
overflow
:
hidden
;
border-radius
:
4px
;
.custom-module-title
{
color
:
#6f6f6f
;
font-size
:
24px
;
font-weight
:
500
;
text-align
:
left
;
}
.custom-module-content
{
display
:
flex
;
align-items
:
center
;
.custom-module-content-item
{
flex
:
1
;
text-align
:
right
;
img
{
height
:
28px
;
}
}
.custom-module-content-item-total
{
color
:
#329d25
;
font-size
:
38px
;
font-weight
:
500
;
}
}
}
</
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