Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
db_qms_wx
Project
Project
Details
Activity
Releases
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
刘怀志
db_qms_wx
Commits
072e77a0
Commit
072e77a0
authored
Mar 31, 2025
by
刘怀志
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(审批详情):追溯审批1
parent
106e6be8
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
531 additions
and
245 deletions
+531
-245
approve.js
api/system/approve.js
+16
-0
production-approval.vue
components/home-approval/production-approval.vue
+4
-4
drawerShow.vue
pages/approval_detail/drawerShow.vue
+3
-3
drawerShowTraceError.vue
pages/approval_detail/drawerShowTraceError.vue
+508
-238
fileIcon.png
static/images/fileIcon.png
+0
-0
No files found.
api/system/approve.js
View file @
072e77a0
...
@@ -153,3 +153,19 @@ export function getTpmProcessDetail(businessId) {
...
@@ -153,3 +153,19 @@ export function getTpmProcessDetail(businessId) {
}
}
})
})
}
}
export
function
getCompletionDetail
(
businessId
)
{
return
request
({
url
:
'/traceability/getCompletion/'
+
businessId
,
method
:
'get'
,
})
}
export
function
processCompletionApproval
(
approve
)
{
return
request
({
url
:
'/traceability/processCompletionApproval'
,
method
:
'post'
,
data
:
approve
,
headers
:
{
'Content-Type'
:
'application/json;charset=UTF-8'
// 接口修改传参类型
}
})
}
\ No newline at end of file
components/home-approval/production-approval.vue
View file @
072e77a0
...
@@ -96,7 +96,7 @@ export default {
...
@@ -96,7 +96,7 @@ export default {
page
:
1
,
page
:
1
,
rows
:
10
,
rows
:
10
,
mesType
:
'1'
,
mesType
:
'1'
,
processGroup
:
'1'
,
processGroup
:
'1'
}
,
}
,
defaultPageSize
:
10
,
defaultPageSize
:
10
,
// 底部加载
// 底部加载
...
@@ -129,14 +129,14 @@ export default {
...
@@ -129,14 +129,14 @@ export default {
methods
:
{
methods
:
{
goDetail
(
processId
,
processCode
,
processStatus
,
allowApprove
,
processName
)
{
goDetail
(
processId
,
processCode
,
processStatus
,
allowApprove
,
processName
)
{
let
path
=
''
let
path
=
''
if
(
this
.
processCode
===
'00016'
||
this
.
processCode
===
'00017'
)
{
if
(
processCode
===
'00016'
||
processCode
===
'00017'
)
{
// 00016(铸造科对发动机装配科发起追溯) 00017(机加工科对发动机装配科发起追溯) => drawerShowEngineTrace
// 00016(铸造科对发动机装配科发起追溯) 00017(机加工科对发动机装配科发起追溯) => drawerShowEngineTrace
path
=
'drawerShowEngineTrace'
path
=
'drawerShowEngineTrace'
}
else
if
(
this
.
processCode
!==
'00019'
)
{
}
else
if
(
processCode
!==
'00019'
)
{
// processCode.value !== '00019' =>drawerShow
// processCode.value !== '00019' =>drawerShow
path
=
'drawerShow'
path
=
'drawerShow'
}
else
{
}
else
{
console
.
log
(
'3'
,
this
.
processCode
)
console
.
log
(
'3'
,
processCode
)
// 00019(追溯完成度异常提醒) => drawerShowTraceError
// 00019(追溯完成度异常提醒) => drawerShowTraceError
path
=
'drawerShowTraceError'
path
=
'drawerShowTraceError'
}
}
...
...
pages/approval_detail/drawerShow.vue
View file @
072e77a0
...
@@ -423,8 +423,8 @@
...
@@ -423,8 +423,8 @@
></u-datetime-picker>
></u-datetime-picker>
<!-- 按钮区域 -->
<!-- 按钮区域 -->
<view
class=
"btns-container"
>
<view
class=
"btns-container"
>
<view
class=
"btn reject-btn"
@
click=
"handleClose('REJECT')"
>
反
回
</view>
<view
class=
"btn reject-btn"
v-if=
"processStatus && isUpdate"
@
click=
"handleClose('REJECT')"
>
返
回
</view>
<view
class=
"btn approve-btn"
:loading=
"btnLoading"
@
click=
"handleConfirm('CONSENT')"
>
确定
</view>
<view
class=
"btn approve-btn"
v-if=
"processStatus && isUpdate"
:loading=
"btnLoading"
@
click=
"handleConfirm('CONSENT')"
>
确定
</view>
</view>
</view>
</view>
</view>
</view>
</view>
...
@@ -453,7 +453,7 @@
...
@@ -453,7 +453,7 @@
this
.
processId
=
option
.
processId
;
this
.
processId
=
option
.
processId
;
this
.
processCode
=
option
.
processCode
;
this
.
processCode
=
option
.
processCode
;
this
.
processStatus
=
option
.
processStatus
;
this
.
processStatus
=
option
.
processStatus
;
this
.
isUpdate
=
option
.
allowApprove
;
this
.
isUpdate
=
option
.
allowApprove
&&
option
.
processStatus
===
'0'
;
this
.
processName
=
option
.
processName
;
this
.
processName
=
option
.
processName
;
this
.
getList
();
this
.
getList
();
this
.
getInstanceDetail
();
this
.
getInstanceDetail
();
...
...
pages/approval_detail/drawerShowTraceError.vue
View file @
072e77a0
<!-- 00019(追溯完成度异常提醒) 审批详情 -->
<!-- 00019(追溯完成度异常提醒) 审批详情 -->
<
template
>
<
template
>
<view
class=
"base-detail"
>
<view
class=
"base-detail"
>
<ya-navbar
title=
"审批详情drawerShowTraceError"
:left-icon-color=
"'#fff'"
:bg-style=
"'#333399'"
<ya-navbar
:title-style=
"'color: #fff;font-weight: 500;font-size: 35rpx;'"
/>
title=
"审批详情"
:left-icon-color=
"'#fff'"
:bg-style=
"'#333399'"
:title-style=
"'color: #fff;font-weight: 500;font-size: 35rpx;'"
/>
<view
class=
"container"
>
<view
class=
"container"
>
<view
class=
"title"
>
<view
class=
"title"
>
基础数据变更(
{{
label
}}
)
{{
processName
}}
</view>
</view>
<!-- 步骤图区 -->
<!-- 步骤图区 -->
<view
class=
"step-container"
>
<view
class=
"step-container"
>
<vertical-steps
:steps=
"steps"
:current-step=
"1"
>
<vertical-steps
:steps=
"steps"
:current-step=
"1"
>
<!-- 自定义内容 -->
<!-- 自定义内容 -->
<template
v-for=
"(step, index) in steps"
#[`
content-
$
{index}`]>
<template
v-for=
"(step, index) in steps"
#[`
content-
$
{index}`]>
<!-- 发起人 -->
<!-- 发起人 -->
...
@@ -18,27 +21,33 @@
...
@@ -18,27 +21,33 @@
<view
class=
"custom-table"
>
<view
class=
"custom-table"
>
<view
class=
"subTitleClass"
>
<view
class=
"subTitleClass"
>
<view
class=
"subRow"
>
<view
class=
"subRow"
>
<view
class=
"subTitle"
>
<view
class=
"subTitle"
>
追溯批次号
</view>
员工姓名
</view>
<view
class=
"subContent"
>
<view
class=
"subContent"
>
{{
step
.
content
.
userName
}}
{{
instanceDetail
.
formDto
.
traceableNumber
||
'-'
}}
</view>
</view>
</view>
</view>
<view
class=
"subRow"
>
<view
class=
"subRow"
>
<view
class=
"subTitle"
>
<view
class=
"subTitle"
>
发起科室
</view>
员工职级
</view>
<view
class=
"subContent"
>
<view
class=
"subContent"
>
{{
getLabelByValue
(
jobLevelList
,
step
.
content
.
rank
)
}}
{{
getLabelByValue
(
initiateDepartmentList
,
instanceDetail
.
formDto
.
initiateDepartment
)
||
'-'
}}
</view>
</view>
</view>
</view>
<view
class=
"subRow"
>
<view
class=
"subRow"
>
<view
class=
"subTitle"
>
<view
class=
"subTitle"
>
发起人
</view>
创建日期
<view
class=
"subContent"
>
{{
instanceDetail
.
formDto
.
initiateUserName
}}
</view>
</view>
</view>
<view
class=
"subRow"
>
<view
class=
"subTitle"
>
追溯部品类型
</view>
<view
class=
"subContent"
>
<view
class=
"subContent"
>
{{
parseTimeA
(
step
.
content
.
createTime
,
'YYYY/MM/DD HH:mm'
)
}}
{{
getLabelByValue
(
traceablePartsTypeList
,
instanceDetail
.
formDto
.
partType
)
}}
</view>
</view>
</view>
</view>
</view>
</view>
...
@@ -46,95 +55,155 @@
...
@@ -46,95 +55,155 @@
</
template
>
</
template
>
<!-- 审批人 -->
<!-- 审批人 -->
<
template
v-else
>
<
template
v-else
>
<view
class=
"custom-table"
>
<u-collapse
<view
class=
"subTitleClass"
>
:border=
"false"
<view
class=
"subRow"
>
@
change=
"change"
<view
class=
"subTitle"
>
@
close=
"close"
部门
@
open=
"open"
</view>
>
<u-collapse-item
:title=
"step.content.configApproveUserName"
name=
"configApproveUserName"
>
<view
class=
"custom-table-collapse"
>
<view
class=
"subTitleClass-collapse"
>
<view
class=
"subRow-collapse"
>
<view
class=
"subTitle"
>
部门
</view>
<view
class=
"subContent"
>
<view
class=
"subContent"
>
{{
step
.
content
.
approveDeptName
}}
{{
step
.
content
.
configApproveDeptName
}}
</view>
</view>
</view>
<view
class=
"subRow"
>
<view
class=
"subTitle"
>
生产角色
</view>
</view>
<view
class=
"subRow-collapse"
>
<view
class=
"subTitle"
>
生产角色
</view>
<view
class=
"subContent"
>
<view
class=
"subContent"
>
{{
step
.
content
.
approveRoleName
||
'无'
}}
{{
step
.
content
.
configApproveRoleName
||
'无'
}}
</view>
</view>
</view>
<view
class=
"subRow"
>
<view
class=
"subTitle"
>
员工姓名
</view>
</view>
<view
class=
"subRow-collapse"
>
<view
class=
"subTitle"
>
处理结果
</view>
<view
class=
"subContent"
>
<view
class=
"subContent"
>
{{
step
.
content
.
approveUser
||
'无'
}}
{{
step
.
content
.
approveResult
||
'无'
}}
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</u-collapse-item>
</u-collapse>
</
template
>
</
template
>
</template>
</template>
</vertical-steps>
</vertical-steps>
</view>
</view>
<!-- 步骤图完成 -->
<!-- 步骤图完成 -->
<!-- 备注区 -->
<!-- 备注区 -->
<view
class=
"title"
>
备注信息
</view>
<view
class=
"remark-container"
>
<view
class=
"remark-container"
>
<u-form
:model=
"instanceDetail"
>
<u-upload
<u-form-item
label=
"访问区域"
prop=
"remark"
labelPosition=
"top"
labelWidth=
"80"
>
v-if=
"processStatus && isUpdate"
<u-textarea
disabled
v-model=
"instanceDetail.remarks"
placeholder=
"-"
></u-textarea>
:fileList=
"fileList"
</u-form-item>
@
afterRead=
"afterRead"
</u-form>
@
delete=
"deletePic"
</view>
name=
"6"
<!-- 备注区完成 -->
multiple
<!-- 变更内容区 -->
:maxCount=
"1"
<view
class=
"title"
>
width=
"250"
变更内容
height=
"150"
</view>
:previewImage=
"false"
<view
class=
"change-container"
>
>
<view
class=
"change-item"
>
<image
请登录PC端查看变更详情
:src=
"fileIcon"
mode=
"widthFix"
style=
"width: 80rpx;height: 80rpx;"
></image>
<text
style=
"font-size: 28rpx;color: #333399;"
>
点击上传
</text>
</u-upload>
<view
class=
"upload-finish"
v-if=
" processStatus && isUpdate && this.fileList.length > 0"
>
<div
class=
"file-title"
>
{{this.fileList[0].name}}
</div>
<!-- 新增删除图标 -->
<u-icon
name=
"close-circle-fill"
color=
"#ff4444"
size=
"20"
@
click=
"deletePic"
style=
"position: absolute; right: 20rpx;"
></u-icon>
</view>
<view
class=
"upload-finish"
v-if=
"!(processStatus && isUpdate)"
>
<image
:src=
"fileIcon"
mode=
"widthFix"
style=
"width: 80rpx;height: 80rpx;"
></image>
<div
class=
"file-title"
>
{{this.fileList.length > 0 ? this.fileList[0].name : '无'}}
</div>
<div
class=
"file-status"
>
{{this.fileList.length > 0 ? '已上传' : '未上传' }}
</div>
</view>
</view>
</view>
</view>
<!-- 按钮区域 -->
<!-- 按钮区域 -->
<view
v-if=
"isView === '0' && status === 'true'"
class=
"btns-container"
>
<view
class=
"btns-container"
>
<view
class=
"btn reject-btn"
@
click=
"approveByAdmin('REJECT')"
>
<view
class=
"btn reject-btn"
v-if=
"processStatus && isUpdate"
@
click=
"handleClose('REJECT')"
>
返回
</view>
驳回
<view
class=
"btn approve-btn"
v-if=
"processStatus && isUpdate"
:loading=
"btnLoading"
@
click=
"handleConfirm('CONSENT')"
>
确定
</view>
</view>
<view
class=
"btn approve-btn"
@
click=
"approveByAdmin('CONSENT')"
>
通过
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
</template>
<
script
>
<
script
>
import
VerticalSteps
from
'@/components/vertical-steps/vertical-steps'
import
VerticalSteps
from
'@/components/vertical-steps/vertical-steps'
;
import
{
getProcessNodeByInstanceId
,
approveByAdmin
,
getProcessInstanceStatus
}
from
'../../api/system/approve'
import
{
import
{
parseTime
}
from
'../../api/utils/ruoyi'
getCompletionDetail
,
import
{
getDicts
}
from
"../../api/system/baseConfig"
;
processCompletionApproval
,
import
{
toast
}
from
'../../utils/common'
}
from
'../../api/system/approve'
;
import
{
parseTime
}
from
'../../api/utils/ruoyi'
;
import
{
getDicts
}
from
'../../api/system/baseConfig'
;
import
{
baseUrl
}
from
'../../config'
import
{
getToken
}
from
'@/utils/auth'
export
default
{
export
default
{
name
:
"baseDetail"
,
name
:
'baseDetail'
,
onLoad
:
function
(
option
)
{
//option为object类型,会序列化上个页面传递的参数
onLoad
:
function
(
option
)
{
//option为object类型,会序列化上个页面传递的参数
// processId, processCode, processStatus, allowApprove, processName
// processId, processCode, processStatus, allowApprove, processName
this
.
processId
=
option
.
processId
;
this
.
processId
=
option
.
processId
;
this
.
processCode
=
option
.
processCode
;
this
.
processCode
=
option
.
processCode
;
this
.
processStatus
=
option
.
processStatus
;
this
.
processStatus
=
option
.
processStatus
;
this
.
isUpdate
=
option
.
allowApprove
;
this
.
isUpdate
=
option
.
allowApprove
&&
option
.
processStatus
===
'0'
;
this
.
processName
=
option
.
processName
;
this
.
processName
=
option
.
processName
;
this
.
getList
();
this
.
getList
();
this
.
toProcessInstanceInfo
();
this
.
getInstanceDetail
();
},
},
components
:
{
VerticalSteps
},
components
:
{
VerticalSteps
},
data
()
{
data
()
{
return
{
return
{
// 文件上传路径前缀
temp
:
'project'
,
// 水桶
bucket
:
'qms-ae'
,
baseUrl
,
fileIcon
:
require
(
'../../static/images/fileIcon.png'
),
initiateDepartmentList
:
[],
traceablePartsTypeList
:
[],
fileList
:
[],
traceabilityVos
:
null
,
btnLoading
:
false
,
rules
:
{
formResultOne
:
[
{
required
:
true
,
message
:
'请选择日期'
},
],
},
showApproval
:
false
,
selectOptions
:
[
{
label
:
'本次强制开机'
,
value
:
'本次强制开机'
},
{
label
:
'本次禁止开机'
,
value
:
'本次禁止开机'
},
{
label
:
'改正后开机'
,
value
:
'改正后开机'
},
],
tpmOptions
:
[
{
label
:
'本次强制开机'
,
value
:
'本次强制开机'
},
{
label
:
'本次禁止开机'
,
value
:
'本次禁止开机'
},
{
label
:
'改正后开机'
,
value
:
'改正后开机'
},
],
formResultOne
:
null
,
showFormResultOne
:
false
,
isLoading
:
false
,
processId
:
''
,
processId
:
''
,
processCode
:
''
,
processCode
:
''
,
processStatus
:
''
,
processStatus
:
''
,
...
@@ -142,180 +211,225 @@ export default {
...
@@ -142,180 +211,225 @@ export default {
processName
:
''
,
processName
:
''
,
processType
:
''
,
processType
:
''
,
label
:
''
,
label
:
''
,
instanceDetail
:
{},
instanceDetail
:
{
approves
:
[],
toolCheckDto
:
{},
materialDto
:
{},
tmpInfoDTO
:
{},
},
// 发起时间
initiateDate
:
''
,
approve
:
{
processInstanceId
:
null
,
instanceApproveId
:
null
,
hasConfirm
:
true
,
formResult
:
null
,
formResultOne
:
null
,
formResultTwo
:
null
,
approveOpinion
:
1
,
selectOption
:
null
,
},
// 流程实例详情列表
instanceDetailList
:
[],
formData
:
{
formData
:
{
remark
:
''
remark
:
''
,
},
},
steps
:
[],
steps
:
[],
jobLevelList
:
[],
jobLevelList
:
[],
isView
:
''
,
isView
:
''
,
status
:
''
,
status
:
''
,
// url
};
urlList
:
[
{
value
:
'0001'
,
url
:
'/staff/processApproval'
},
{
value
:
'1001'
,
url
:
'/aeclassesinfo/processApproval'
},
{
value
:
'1002'
,
url
:
'/accreditpostvalidity/processPostApproval'
},
{
value
:
'0002'
,
url
:
'/sysRoleMamager/processApproval'
},
{
value
:
'0004'
,
url
:
'/sysRoleMamager/non_processApproval'
},
{
value
:
'0003'
,
url
:
'/organization/processApproval'
},
{
value
:
'1020'
,
url
:
'/aeequipmenttype/processApproval'
},
{
value
:
'1030'
,
url
:
'/aeenginemodel/processApproval'
},
{
value
:
'1031'
,
url
:
'/aeenginemodelextend/processApproval'
},
{
value
:
'1032'
,
url
:
'/aemodelgx/processApproval'
},
{
value
:
'1043'
,
url
:
'/aeunit/processApproval'
},
},
{
computed
:
{
value
:
'1042'
,
url
:
'/aepartinformation/processApproval'
// 根据processCode进行动态页面渲染
},
// 所有预警告警不显示处理结果
{
getFlag
()
{
value
:
'1040'
,
return
!
(
url
:
'/aetool/processApproval'
this
.
processCode
===
'00003'
||
},
this
.
processCode
===
'00006'
||
{
this
.
processCode
===
'00010'
||
value
:
'1004'
,
this
.
processCode
===
'00013'
||
url
:
'/aeprolineinfo/processApproval'
this
.
processCode
===
'00002'
||
},
this
.
processCode
===
'00005'
||
{
this
.
processCode
===
'00009'
||
value
:
'1005'
,
this
.
processCode
===
'00012'
url
:
'/aeprolinesegment/processApproval'
);
},
},
{
// 计算属性
value
:
'1006'
,
parseTimeA
()
{
url
:
'/aeprolinegx/processGxApproval'
return
(
time
,
format
)
=>
{
return
parseTime
(
time
,
format
||
'{m}-{d} {h}:{i}:{s}'
);
};
},
},
{
value
:
'1041'
,
url
:
'/aeauxiliarymaterial/processApproval'
},
},
{
methods
:
{
value
:
'1009'
,
afterRead
(
event
)
{
url
:
'/aeprolinetray/processApproval'
console
.
log
(
'event'
,
event
);
console
.
log
(
'this.baseUrl'
,
this
.
baseUrl
);
const
uploadFileUrl
=
`
${
this
.
baseUrl
}
/common/fileUpload?temp=
${
this
.
temp
}
&bucket=
${
this
.
bucket
}
`
;
const
file
=
event
.
file
[
0
];
// 获取上传的文件对象
uni
.
uploadFile
({
url
:
uploadFileUrl
,
//仅为示例,非真实的接口地址
filePath
:
file
.
url
,
name
:
'file'
,
// 与后端约定的文件字段名
header
:
{
Authorization
:
'Bearer '
+
getToken
()
},
success
:
(
res
)
=>
{
const
data
=
JSON
.
parse
(
res
.
data
);
if
(
data
.
code
===
200
)
{
const
{
data
:
{
url
,
path
,
originalName
,
businessId
}
}
=
data
this
.
fileList
.
push
({
url
,
path
,
name
:
originalName
,
businessId
})
uni
.
$u
.
toast
(
'上传成功'
)
}
else
{
uni
.
$u
.
toast
(
'上传文件失败,请重试'
)
}
}
});
},
},
{
// 删除图片
value
:
'1007'
,
deletePic
()
{
url
:
'/aetechequipment/processApproval'
this
.
fileList
=
[];
},
},
{
blur
()
{
value
:
'1008'
,
this
.
approve
.
formResult
=
this
.
approve
.
formResultTwo
url
:
'/aetechassembly/processApproval'
},
},
{
formResultOneConfirm
(
e
)
{
value
:
'1010'
,
this
.
showFormResultOne
=
false
;
url
:
'/aetechequipment/all/processApproval'
this
.
approve
.
formResultOne
=
uni
.
$u
.
timeFormat
(
e
.
value
,
'yyyy-mm-dd'
);
this
.
approve
.
formResult
=
this
.
approve
.
formResultOne
;
},
},
{
formResultOneClose
()
{
value
:
'1011'
,
this
.
showFormResultOne
=
false
;
url
:
'/aetechassembly/all/processApproval'
},
},
{
hideKeyboard
()
{
value
:
'1021'
,
uni
.
hideKeyboard
();
url
:
'/aeequipmentinfo/processApproval'
},
},
{
getProcessType
()
{
value
:
'1044'
,
if
(
url
:
'/aegroupproject/processApproval'
this
.
processCode
===
'00002'
||
this
.
processCode
===
'00003'
||
this
.
processCode
===
'00004'
)
{
return
'标定'
;
}
}
]
if
(
this
.
processCode
===
'00005'
||
this
.
processCode
===
'00006'
||
this
.
processCode
===
'00007'
)
{
return
'TPM'
;
}
}
},
if
(
this
.
processCode
===
'00009'
||
this
.
processCode
===
'00010'
)
{
computed
:
{
return
'工具'
;
// 计算属性
}
parseTimeA
()
{
if
(
this
.
processCode
===
'00012'
||
this
.
processCode
===
'00013'
)
{
return
(
time
,
format
)
=>
{
return
'辅材'
;
return
parseTime
(
time
,
format
||
'{m}-{d} {h}:{i}:{s}'
)
}
}
},
},
},
methods
:
{
/**
/**
* 获取审批url
* 获取流程实例详情
* @returns {string}
*/
*/
getUrl
()
{
async
getInstanceDetail
()
{
const
type
=
this
.
instanceDetail
.
processType
this
.
isLoading
=
true
let
url
=
''
getCompletionDetail
(
this
.
processId
).
then
(
res
=>
{
this
.
urlList
.
forEach
(
item
=>
{
if
(
res
.
code
===
200
)
{
if
(
item
.
value
===
type
)
{
this
.
instanceDetail
=
res
.
data
url
=
item
.
url
this
.
instanceDetailList
.
push
(
res
.
data
.
formDto
)
this
.
processName
=
res
.
data
.
formDto
.
processName
this
.
initiateDate
=
res
.
data
.
formDto
.
initiateDate
this
.
traceabilityVos
=
res
.
data
.
traceabilityVos
this
.
fileList
=
res
.
data
.
formDto
.
attachment
?
[
JSON
.
parse
(
res
.
data
.
formDto
.
attachment
)]
:
[]
// 统一处理步骤生成
if
(
res
.
data
)
{
this
.
steps
=
[
{
title
:
'发起'
,
content
:
{}
},
...
this
.
instanceDetail
.
approves
.
map
((
item
,
index
)
=>
({
title
:
`综合审批`
,
content
:
item
,
})),
];
}
}
}
})
})
return
url
this
.
isLoading
=
false
},
},
async
approveByAdmin
(
type
)
{
/**
* 审批
* @returns {Promise<void>}
*/
async
handleConfirm
()
{
console
.
log
(
'this.fileList'
,
this
.
fileList
)
if
(
this
.
fileList
.
length
<
1
)
{
uni
.
$u
.
toast
(
'请上传附件'
)
}
else
{
this
.
btnLoading
=
true
this
.
btnLoading
=
true
// 审批
await
approveByAdmin
({
this
.
instanceDetail
.
approves
.
forEach
(
item
=>
{
instanceId
:
this
.
processId
,
if
(
item
.
currentNode
===
'1'
)
{
approveId
:
this
.
instanceDetail
.
currentApprove
.
businessId
,
this
.
approve
.
instanceApproveId
=
item
.
businessId
approveControl
:
type
,
this
.
approve
.
processInstanceId
=
item
.
instanceId
url
:
this
.
getUrl
(),
}
processGroup
:
'1'
}).
catch
(()
=>
{
this
.
isView
=
''
})
})
// 回调获取流程实例的状态
this
.
approve
[
'map'
]
=
this
.
fileList
[
0
]
const
{
data
}
=
await
getProcessInstanceStatus
(
this
.
processId
)
console
.
log
(
'this.approve'
,
this
.
approve
)
// 异常结束
await
processCompletionApproval
(
this
.
approve
)
if
(
data
===
'6'
)
{
.
then
(
res
=>
{
toast
(
'流程异常结束,请检查对应流程'
)
if
(
res
.
code
===
200
)
{
uni
.
$u
.
toast
(
'审批成功'
)
}
else
{
}
else
{
toast
(
'审批成功'
)
uni
.
$u
.
toast
(
res
.
message
)
this
.
$tab
.
reLaunch
(
'/pages/index'
)
}
})
.
catch
(()
=>
{
this
.
isUpdate
=
false
this
.
btnLoading
=
false
})
this
.
handleClose
()
// 关闭所有的loading
this
.
btnLoading
=
false
this
.
isUpdate
=
false
}
}
},
},
handleClose
()
{
this
.
$tab
.
reLaunch
(
'/pages/index'
)
},
/** 查询字典数据列表 */
/** 查询字典数据列表 */
getList
()
{
getList
()
{
getDicts
(
'
sys_job_level
'
).
then
(
response
=>
{
getDicts
(
'
initiate_department
'
).
then
(
response
=>
{
// console.log("查询数据字段狗",response)
// console.log("查询数据字段狗",response)
const
jobLevelForm
=
response
.
data
const
jobLevelForm
=
response
.
data
;
for
(
const
item
of
jobLevelForm
)
{
for
(
const
item
of
jobLevelForm
)
{
const
result
=
{
const
result
=
{
value
:
item
.
dictValue
,
value
:
item
.
dictValue
,
label
:
item
.
dictLabel
label
:
item
.
dictLabel
,
};
this
.
initiateDepartmentList
.
push
(
result
);
}
}
this
.
jobLevelList
.
push
(
result
)
});
getDicts
(
'traceable_parts_type'
).
then
(
response
=>
{
// console.log("查询数据字段狗",response)
const
jobLevelForm
=
response
.
data
;
for
(
const
item
of
jobLevelForm
)
{
const
result
=
{
value
:
item
.
dictValue
,
label
:
item
.
dictLabel
,
};
this
.
traceablePartsTypeList
.
push
(
result
);
}
}
})
})
;
},
},
/**
/**
* 指定列表,根据值,取label
* 指定列表,根据值,取label
*/
*/
getLabelByValue
(
list
,
value
,
key
=
'value'
,
label
=
'label'
)
{
getLabelByValue
(
list
,
value
,
key
=
'value'
,
label
=
'label'
)
{
const
item
=
list
.
find
(
item
=>
item
[
key
]
===
value
)
const
item
=
list
.
find
(
item
=>
item
[
key
]
===
value
)
;
return
item
?
item
[
label
]
:
'-'
return
item
?
item
[
label
]
:
'-'
;
},
},
/**
/**
* 获取审批节点详情
* 获取审批节点详情
...
@@ -323,41 +437,43 @@ export default {
...
@@ -323,41 +437,43 @@ export default {
toProcessInstanceInfo
()
{
toProcessInstanceInfo
()
{
// 非追溯完成度异常
// 非追溯完成度异常
if
(
this
.
processCode
===
'00016'
||
this
.
processCode
===
'00017'
)
{
if
(
this
.
processCode
===
'00016'
||
this
.
processCode
===
'00017'
)
{
console
.
log
(
'1'
,
this
.
processCode
)
console
.
log
(
'1'
,
this
.
processCode
)
;
drawerShowEngineTrace
.
value
=
true
drawerShowEngineTrace
.
value
=
true
;
}
else
if
(
this
.
processCode
!==
'00019'
)
{
}
else
if
(
this
.
processCode
!==
'00019'
)
{
console
.
log
(
'2'
,
this
.
processCode
)
console
.
log
(
'2'
,
this
.
processCode
)
;
drawerShow
.
value
=
true
drawerShow
.
value
=
true
;
// drawerShowTraceError.value = true
// drawerShowTraceError.value = true
}
else
{
}
else
{
console
.
log
(
'3'
,
this
.
processCode
)
console
.
log
(
'3'
,
this
.
processCode
)
;
// 追溯完成度异常
// 追溯完成度异常
drawerShowTraceError
.
value
=
true
drawerShowTraceError
.
value
=
true
;
}
}
}
}
}
},
},
};
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
.base-detail
{
.base-detail
{
background
:
#
FFFFFF
;
background
:
#
ffffff
;
min-height
:
100vh
;
min-height
:
100vh
;
// height: 100vh;
// height: 100vh;
.container
{
.container
{
.title
{
.title
{
font-family
:
PingFangSC
,
PingFang
SC
;
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
500
;
font-weight
:
500
;
font-size
:
40rpx
;
font-size
:
40rpx
;
color
:
#0
B0B0B
;
color
:
#0
b0b0b
;
text-align
:
left
;
text-align
:
left
;
font-style
:
normal
;
font-style
:
normal
;
text-transform
:
none
;
text-transform
:
none
;
padding
:
52rpx
32rpx
20rpx
32rpx
;
padding
:
52rpx
32rpx
20rpx
32rpx
;
border-bottom
:
2rpx
solid
#
F2F2F
2
;
border-bottom
:
2rpx
solid
#
f2f2f
2
;
}
}
}
}
...
@@ -367,16 +483,18 @@ export default {
...
@@ -367,16 +483,18 @@ export default {
}
}
.custom-table
{
.custom-table
{
background
:
#
F9F9F
9
;
background
:
#
f9f9f
9
;
border-radius
:
10rpx
;
border-radius
:
10rpx
;
padding
:
32rpx
;
padding
:
32rpx
;
}
}
.subTitleClass
{
.subTitleClass
{
font-family
:
PingFangSC
,
PingFang
SC
;
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
400
;
font-weight
:
400
;
font-size
:
28rpx
;
font-size
:
28rpx
;
color
:
#9
A9A9A
;
color
:
#9
a9a9a
;
text-align
:
left
;
text-align
:
left
;
font-style
:
normal
;
font-style
:
normal
;
text-transform
:
none
;
text-transform
:
none
;
...
@@ -388,10 +506,12 @@ export default {
...
@@ -388,10 +506,12 @@ export default {
margin-bottom
:
12rpx
;
margin-bottom
:
12rpx
;
.subTitle
{
.subTitle
{
font-family
:
PingFangSC
,
PingFang
SC
;
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
400
;
font-weight
:
400
;
font-size
:
28rpx
;
font-size
:
28rpx
;
color
:
#9
A9A9A
;
color
:
#9
a9a9a
;
text-align
:
left
;
text-align
:
left
;
font-style
:
normal
;
font-style
:
normal
;
text-transform
:
none
;
text-transform
:
none
;
...
@@ -399,7 +519,9 @@ export default {
...
@@ -399,7 +519,9 @@ export default {
}
}
.subContent
{
.subContent
{
font-family
:
PingFangSC
,
PingFang
SC
;
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
400
;
font-weight
:
400
;
font-size
:
28rpx
;
font-size
:
28rpx
;
color
:
#222222
;
color
:
#222222
;
...
@@ -408,12 +530,99 @@ export default {
...
@@ -408,12 +530,99 @@ export default {
text-transform
:
none
;
text-transform
:
none
;
}
}
}
}
.custom-table-collapse
{
padding
:
32rpx
;
}
.subTitleClass-collapse
{
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
400
;
font-size
:
28rpx
;
color
:
#9a9a9a
;
text-align
:
left
;
font-style
:
normal
;
text-transform
:
none
;
}
.subRow-collapse
{
display
:
flex
;
justify-content
:
space-between
;
margin-bottom
:
12rpx
;
.subTitle
{
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
400
;
font-size
:
28rpx
;
color
:
#9a9a9a
;
text-align
:
left
;
font-style
:
normal
;
text-transform
:
none
;
min-width
:
120rpx
;
}
.subContent
{
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
400
;
font-size
:
28rpx
;
color
:
#222222
;
text-align
:
right
;
font-style
:
normal
;
text-transform
:
none
;
}
}
::v-deep
.u-collapse-item__content__text
{
padding
:
0
;
}
::v-deep
.u-collapse-item
{
background
:
#f9f9f9
;
border-radius
:
10rpx
;
}
.remark-container
{
.remark-container
{
padding
:
28rpx
46rpx
0
48rpx
;
padding
:
28rpx
46rpx
0
48rpx
;
background
:
#f9f9f9
;
border-radius
:
10rpx
;
width
:
684rpx
;
height
:
180rpx
;
margin
:
0
auto
;
.upload-finish
{
display
:
flex
;
justify-content
:
center
;
flex-direction
:
column
;
align-items
:
center
;
.file-title
{
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
500
;
color
:
#333399
;
font-style
:
normal
;
}
.file-status
{
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
400
;
color
:
#999999
;
font-style
:
normal
;
}
}
// 新增卡片间距
&
>
view
{
margin-bottom
:
20rpx
;
&
:last-child
{
margin-bottom
:
0
;
}
}
::v-deep
.u-form-item__body__left__content__label
{
::v-deep
.u-form-item__body__left__content__label
{
font-family
:
PingFangSC
,
PingFang
SC
;
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
500
;
font-weight
:
500
;
font-size
:
28rpx
;
font-size
:
28rpx
;
color
:
#111111
;
color
:
#111111
;
...
@@ -422,6 +631,57 @@ export default {
...
@@ -422,6 +631,57 @@ export default {
text-transform
:
none
;
text-transform
:
none
;
margin-bottom
:
14rpx
;
margin-bottom
:
14rpx
;
}
}
.rmark-card
{
background
:
#f9f9f9
;
border-radius
:
20rpx
;
padding
:
0rpx
40rpx
0
38rpx
;
.subRow
{
display
:
flex
;
justify-content
:
space-between
;
margin-bottom
:
12rpx
;
border-bottom
:
2rpx
solid
#e9e9e9
;
padding-bottom
:
12rpx
;
align-items
:
center
;
&
:last-child
{
border-bottom
:
none
;
padding-bottom
:
0
;
}
height
:
96rpx
;
.subTitle
{
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
400
;
font-size
:
28rpx
;
color
:
#666666
;
text-align
:
left
;
font-style
:
normal
;
text-transform
:
none
;
min-width
:
120rpx
;
}
.subContent
{
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
400
;
font-size
:
28rpx
;
color
:
#111111
;
text-align
:
right
;
font-style
:
normal
;
text-transform
:
none
;
}
.expire-color
{
color
:
red
!
important
;
}
}
}
}
}
.change-container
{
.change-container
{
...
@@ -433,15 +693,23 @@ export default {
...
@@ -433,15 +693,23 @@ export default {
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
justify-content
:
center
;
justify-content
:
center
;
background
:
#FFFBF0
;
background
:
#fffbf0
;
font-family
:
PingFangSC
,
PingFang
SC
;
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
400
;
font-weight
:
400
;
font-size
:
28rpx
;
font-size
:
28rpx
;
color
:
#
F4850E
;
color
:
#
f4850e
;
line-height
:
36rpx
;
line-height
:
36rpx
;
font-style
:
normal
;
font-style
:
normal
;
}
}
}
}
::v-deep
.u-upload__wrap
{
justify-content
:
center
;
uni-view
{
align-items
:
center
;
}
}
}
}
.btns-container
{
.btns-container
{
...
@@ -454,7 +722,9 @@ export default {
...
@@ -454,7 +722,9 @@ export default {
width
:
312rpx
;
width
:
312rpx
;
height
:
96rpx
;
height
:
96rpx
;
border-radius
:
56rpx
;
border-radius
:
56rpx
;
font-family
:
PingFangSC
,
PingFang
SC
;
font-family
:
PingFangSC
,
PingFang
SC
;
font-weight
:
400
;
font-weight
:
400
;
font-size
:
34rpx
;
font-size
:
34rpx
;
line-height
:
48rpx
;
line-height
:
48rpx
;
...
@@ -472,7 +742,7 @@ export default {
...
@@ -472,7 +742,7 @@ export default {
.approve-btn
{
.approve-btn
{
background
:
#333399
;
background
:
#333399
;
color
:
#
FFFFFF
;
color
:
#
ffffff
;
}
}
}
}
</
style
>
</
style
>
static/images/fileIcon.png
0 → 100644
View file @
072e77a0
529 Bytes
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