fix:重新发起
This commit is contained in:
parent
3d7ee782b1
commit
d53901e00a
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -220,7 +220,10 @@ export default {
|
||||
url: '/custom/responsible/getImportTemplate',
|
||||
method: 'get'
|
||||
},
|
||||
|
||||
GET_MODEL_BY_ID: {
|
||||
url: '/custom/template/getTemplateById',
|
||||
method: 'get'
|
||||
},
|
||||
// 修改流程主题
|
||||
EDIT_DATA_PROCESS_TITLE: {
|
||||
url: '/custom/activiti/updateFlowTitle',
|
||||
|
||||
@ -105,10 +105,7 @@ export default {
|
||||
url: '/custom/approval/directSendingApproval',
|
||||
method: 'get'
|
||||
},
|
||||
GET_MODEL_BY_ID: {
|
||||
url: '/custom/template/getTemplateById',
|
||||
method: 'get'
|
||||
},
|
||||
|
||||
GET_CAN_RETURN_NODE: {
|
||||
url: '/custom/approval/getReturnNodes',
|
||||
method: 'get'
|
||||
@ -124,5 +121,13 @@ export default {
|
||||
EDIT_APPROVAL_PROCESS_TITLE: {
|
||||
url: '/custom/approval/updateFlowTitle',
|
||||
method: 'get'
|
||||
},
|
||||
EDIT_APPROVAL_PROCESS: {
|
||||
url: '/custom/approval/updateNode',
|
||||
method: 'post'
|
||||
},
|
||||
CONTINUE_APPROVAL_PROCESS: {
|
||||
url: '/custom/approval/continueApproval',
|
||||
method: 'get'
|
||||
}
|
||||
}
|
||||
|
||||
@ -62,5 +62,9 @@ export default {
|
||||
GET_REPORT_APPROVAL_USERS: {
|
||||
url: '/custom/benchmark/getApprovalUsers',
|
||||
method: 'get'
|
||||
},
|
||||
CONTINUE_REPORT_APPROVAL: {
|
||||
url: '/custom/benchmark/continueApproval',
|
||||
method: 'get'
|
||||
}
|
||||
}
|
||||
|
||||
@ -1557,22 +1557,21 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
.return-opinion-section {
|
||||
margin-top: 16px;
|
||||
padding-top: 16px;
|
||||
|
||||
}
|
||||
}
|
||||
.return-opinion-section {
|
||||
margin-top: 16px !important;
|
||||
border-top: 1px solid #ebeef5;
|
||||
|
||||
.opinion-label {
|
||||
margin-bottom: 8px;
|
||||
margin-top: 8px;
|
||||
margin-bottom: 5px !important;
|
||||
margin-top: 5px !important;
|
||||
font-size: 14px;
|
||||
color: #606266;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.approval-progress-fade-enter-active,
|
||||
.approval-progress-fade-leave-active {
|
||||
transition: opacity 0.2s ease;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2841,11 +2841,10 @@ export default {
|
||||
// 如果是重新发起模式(fromTodo 且有 flowId,或者 canResend 为 true),先调用 GET_DATA_APPROVAL_USERS 接口获取人员信息
|
||||
if (this.shouldShowResendButton) {
|
||||
this.isResendMode = true
|
||||
const flowId = this.engineModelID
|
||||
const request = {
|
||||
...api.GET_DATA_APPROVAL_USERS,
|
||||
params: {
|
||||
templateId: flowId
|
||||
templateId: this.flowId
|
||||
},
|
||||
disableSuccessMsg: true
|
||||
}
|
||||
|
||||
@ -77,7 +77,7 @@
|
||||
type="primary"
|
||||
@click="handleResendApproval"
|
||||
>
|
||||
重新发起
|
||||
发起
|
||||
</el-button>
|
||||
</template>
|
||||
<template v-else-if="isMaintainMode">
|
||||
@ -323,12 +323,41 @@
|
||||
<div class="approval-process-title">
|
||||
<div class="description-label">
|
||||
流程主题 <span class="required-mark">*</span>
|
||||
<div v-if="isResendModeFilled && !isProcessTitleEditing" class="step-actions">
|
||||
<el-button
|
||||
type="text"
|
||||
size="small"
|
||||
class="edit-step-btn"
|
||||
@click="handleEditProcessTitle"
|
||||
>
|
||||
修改
|
||||
</el-button>
|
||||
</div>
|
||||
<div v-else-if="isResendModeFilled && isProcessTitleEditing" class="step-actions">
|
||||
<el-button
|
||||
type="text"
|
||||
size="small"
|
||||
class="save-step-btn"
|
||||
@click="handleSaveProcessTitle"
|
||||
>
|
||||
保存
|
||||
</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
size="small"
|
||||
class="cancel-step-btn"
|
||||
@click="handleCancelEditProcessTitle"
|
||||
>
|
||||
返回
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<el-input
|
||||
v-model="approvalFormData.processTitle"
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
placeholder="请输入流程主题"
|
||||
:disabled="isResendModeFilled && !isProcessTitleEditing"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@ -365,6 +394,7 @@
|
||||
placeholder="请选择"
|
||||
:remote-method="(query) => handleRemoteSearch(query, index)"
|
||||
:loading="step.loading"
|
||||
:disabled="isResendModeFilled && !isProcessTitleEditing"
|
||||
class="handler-select"
|
||||
@change="(value) => handleHandlerChange(index, value)"
|
||||
>
|
||||
@ -680,35 +710,47 @@ export default {
|
||||
approvalSubmitting: false, // 审批提交loading状态
|
||||
resending: false, // 直送提交loading状态
|
||||
isResendMode: false, // 是否为重新发起模式
|
||||
isResendModeFilled: false, // 重新发起模式且已填充数据(用于控制编辑状态)
|
||||
resendApprovalData: null, // 重新发起时保存的审批流程数据
|
||||
resendFlowId: null, // 重新发起时的流程ID(从 resendApprovalData 中提取)
|
||||
isProcessTitleEditing: false, // 流程主题是否处于编辑状态
|
||||
originalProcessTitle: '', // 流程主题原始数据备份
|
||||
approvalWorkflowSteps: [
|
||||
{
|
||||
name: '校对',
|
||||
required: true,
|
||||
handlers: [],
|
||||
options: [],
|
||||
loading: false
|
||||
loading: false,
|
||||
isEditing: false, // 是否处于编辑状态
|
||||
originalData: null // 原始数据备份(用于取消编辑时恢复)
|
||||
},
|
||||
{
|
||||
name: '审核',
|
||||
required: true,
|
||||
handlers: [],
|
||||
options: [],
|
||||
loading: false
|
||||
loading: false,
|
||||
isEditing: false,
|
||||
originalData: null
|
||||
},
|
||||
{
|
||||
name: '会签',
|
||||
required: false,
|
||||
handlers: [],
|
||||
options: [],
|
||||
loading: false
|
||||
loading: false,
|
||||
isEditing: false,
|
||||
originalData: null
|
||||
},
|
||||
{
|
||||
name: '批准',
|
||||
required: true,
|
||||
handlers: [],
|
||||
options: [],
|
||||
loading: false
|
||||
loading: false,
|
||||
isEditing: false,
|
||||
originalData: null
|
||||
}
|
||||
],
|
||||
nextLocalId: 1,
|
||||
@ -1416,7 +1458,6 @@ export default {
|
||||
console.log('获取审批流程信息:', resp)
|
||||
// 保存整个响应对象,fillResendApprovalData 会从中提取节点列表、流程主题和说明
|
||||
this.resendApprovalData = resp
|
||||
|
||||
// 调用 getApprovalChange 进入审批模式(在获取审批流程信息成功后)
|
||||
this.getApprovalChange()
|
||||
})
|
||||
@ -2076,28 +2117,36 @@ export default {
|
||||
required: true,
|
||||
handlers: [],
|
||||
options: [],
|
||||
loading: false
|
||||
loading: false,
|
||||
isEditing: false,
|
||||
originalData: null
|
||||
},
|
||||
{
|
||||
name: '审核',
|
||||
required: true,
|
||||
handlers: [],
|
||||
options: [],
|
||||
loading: false
|
||||
loading: false,
|
||||
isEditing: false,
|
||||
originalData: null
|
||||
},
|
||||
{
|
||||
name: '会签',
|
||||
required: false,
|
||||
handlers: [],
|
||||
options: [],
|
||||
loading: false
|
||||
loading: false,
|
||||
isEditing: false,
|
||||
originalData: null
|
||||
},
|
||||
{
|
||||
name: '批准',
|
||||
required: true,
|
||||
handlers: [],
|
||||
options: [],
|
||||
loading: false
|
||||
loading: false,
|
||||
isEditing: false,
|
||||
originalData: null
|
||||
}
|
||||
]
|
||||
|
||||
@ -2282,6 +2331,25 @@ export default {
|
||||
} else {
|
||||
console.log('节点列表为空,无法填充人员信息')
|
||||
}
|
||||
|
||||
// 提取并保存 flowId(从 dataObj 中提取)
|
||||
if (dataObj && !Array.isArray(dataObj)) {
|
||||
this.resendFlowId = dataObj.flowId || dataObj.id || null
|
||||
console.log('提取的 flowId:', this.resendFlowId)
|
||||
}
|
||||
|
||||
// 填充完数据后,设置重新发起模式已填充标志,并备份原始数据
|
||||
this.isResendModeFilled = true
|
||||
// 备份流程主题
|
||||
this.originalProcessTitle = this.approvalFormData.processTitle || ''
|
||||
// 备份每个环节的原始数据
|
||||
this.approvalWorkflowSteps.forEach((step) => {
|
||||
step.originalData = {
|
||||
handlers: JSON.parse(JSON.stringify(step.handlers || [])),
|
||||
options: JSON.parse(JSON.stringify(step.options || []))
|
||||
}
|
||||
step.isEditing = false
|
||||
})
|
||||
},
|
||||
handleApprovalCancel() {
|
||||
// 取消审批,退出审批模式
|
||||
@ -2312,32 +2380,280 @@ export default {
|
||||
required: true,
|
||||
handlers: [],
|
||||
options: [],
|
||||
loading: false
|
||||
loading: false,
|
||||
isEditing: false,
|
||||
originalData: null
|
||||
},
|
||||
{
|
||||
name: '审核',
|
||||
required: true,
|
||||
handlers: [],
|
||||
options: [],
|
||||
loading: false
|
||||
loading: false,
|
||||
isEditing: false,
|
||||
originalData: null
|
||||
},
|
||||
{
|
||||
name: '会签',
|
||||
required: false,
|
||||
handlers: [],
|
||||
options: [],
|
||||
loading: false
|
||||
loading: false,
|
||||
isEditing: false,
|
||||
originalData: null
|
||||
},
|
||||
{
|
||||
name: '批准',
|
||||
required: true,
|
||||
handlers: [],
|
||||
options: [],
|
||||
loading: false
|
||||
loading: false,
|
||||
isEditing: false,
|
||||
originalData: null
|
||||
}
|
||||
]
|
||||
// 重置重新发起模式相关状态
|
||||
this.isResendModeFilled = false
|
||||
this.resendFlowId = null
|
||||
this.isProcessTitleEditing = false
|
||||
this.originalProcessTitle = ''
|
||||
},
|
||||
// 编辑审批环节
|
||||
handleEditStep(stepIndex) {
|
||||
const step = this.approvalWorkflowSteps[stepIndex]
|
||||
if (!step) {
|
||||
return
|
||||
}
|
||||
// 备份当前数据
|
||||
step.originalData = {
|
||||
handlers: JSON.parse(JSON.stringify(step.handlers || [])),
|
||||
options: JSON.parse(JSON.stringify(step.options || []))
|
||||
}
|
||||
// 设置为编辑状态
|
||||
step.isEditing = true
|
||||
},
|
||||
// 保存审批环节编辑
|
||||
handleSaveStep(stepIndex) {
|
||||
const step = this.approvalWorkflowSteps[stepIndex]
|
||||
if (!step) {
|
||||
return
|
||||
}
|
||||
const userIds = (step.handlers || []).filter(Boolean)
|
||||
if (userIds.length === 0) {
|
||||
this.$message.warning('请至少选择一位处理人')
|
||||
return
|
||||
}
|
||||
// 获取 flowId:优先从 detail 中获取,如果没有则从 resendFlowId 中获取
|
||||
let flowId = null
|
||||
if (this.detail && this.detail.flowId) {
|
||||
flowId = this.detail.flowId
|
||||
} else if (this.resendFlowId) {
|
||||
flowId = this.resendFlowId
|
||||
}
|
||||
if (!flowId) {
|
||||
this.$message.error('缺少流程ID,无法保存')
|
||||
return
|
||||
}
|
||||
const request = {
|
||||
...api.EDIT_APPROVAL_PROCESS,
|
||||
params: {
|
||||
flowId: flowId,
|
||||
nodeName: step.name,
|
||||
userIds
|
||||
},
|
||||
disableSuccessMsg: true
|
||||
}
|
||||
step.loading = true
|
||||
this.$request(request)
|
||||
.asyncThen(() => {
|
||||
// 更新原始数据备份
|
||||
step.originalData = {
|
||||
handlers: JSON.parse(JSON.stringify(step.handlers || [])),
|
||||
options: JSON.parse(JSON.stringify(step.options || []))
|
||||
}
|
||||
// 退出编辑状态
|
||||
step.isEditing = false
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '保存成功'
|
||||
})
|
||||
})
|
||||
.asyncErrorCatch((err) => {
|
||||
console.error('保存环节编辑失败:', err)
|
||||
this.$message({
|
||||
type: 'error',
|
||||
message: err?.message || '保存失败,请重试'
|
||||
})
|
||||
})
|
||||
.finally(() => {
|
||||
step.loading = false
|
||||
})
|
||||
},
|
||||
// 取消审批环节编辑
|
||||
handleCancelEditStep(stepIndex) {
|
||||
const step = this.approvalWorkflowSteps[stepIndex]
|
||||
if (!step || !step.originalData) {
|
||||
return
|
||||
}
|
||||
// 恢复原始数据
|
||||
step.handlers = JSON.parse(JSON.stringify(step.originalData.handlers || []))
|
||||
step.options = JSON.parse(JSON.stringify(step.originalData.options || []))
|
||||
// 退出编辑状态
|
||||
step.isEditing = false
|
||||
},
|
||||
// 编辑流程主题(统一控制所有环节的编辑状态)
|
||||
handleEditProcessTitle() {
|
||||
// 备份当前流程主题
|
||||
this.originalProcessTitle = this.approvalFormData.processTitle || ''
|
||||
// 备份所有环节的原始数据
|
||||
this.approvalWorkflowSteps.forEach((step) => {
|
||||
step.originalData = {
|
||||
handlers: JSON.parse(JSON.stringify(step.handlers || [])),
|
||||
options: JSON.parse(JSON.stringify(step.options || []))
|
||||
}
|
||||
})
|
||||
// 设置为编辑状态(统一控制所有环节)
|
||||
this.isProcessTitleEditing = true
|
||||
},
|
||||
// 保存流程主题编辑(统一保存流程主题和所有环节)
|
||||
handleSaveProcessTitle() {
|
||||
const newTitle = (this.approvalFormData.processTitle || '').trim()
|
||||
if (!newTitle) {
|
||||
this.$message.warning('流程主题不能为空')
|
||||
return
|
||||
}
|
||||
// 获取 flowId:优先从 detail 中获取,如果没有则从 resendFlowId 中获取
|
||||
let flowId = null
|
||||
if (this.detail && this.detail.flowId) {
|
||||
flowId = this.detail.flowId
|
||||
} else if (this.resendFlowId) {
|
||||
flowId = this.resendFlowId
|
||||
}
|
||||
|
||||
if (!flowId) {
|
||||
this.$message.error('缺少流程ID,无法保存')
|
||||
return
|
||||
}
|
||||
|
||||
// 构建 nodeList:从审批环节中提取(和发起审批一样)
|
||||
const nodeList = this.approvalWorkflowSteps.map((step, index) => ({
|
||||
nodeName: step.name,
|
||||
assignees: step.handlers,
|
||||
nodeOrder: index + 1
|
||||
}))
|
||||
|
||||
// 调用编辑审批流程接口,传参:nodeList, flowId, title, userId
|
||||
const request = {
|
||||
...api.EDIT_APPROVAL_PROCESS,
|
||||
params: {
|
||||
nodeList: nodeList,
|
||||
flowId: flowId,
|
||||
title: newTitle,
|
||||
userId: getUserId()
|
||||
},
|
||||
disableSuccessMsg: true
|
||||
}
|
||||
|
||||
this.$request(request)
|
||||
.asyncThen(() => {
|
||||
// 更新原始数据备份
|
||||
this.originalProcessTitle = newTitle
|
||||
// 更新所有环节的原始数据备份
|
||||
this.approvalWorkflowSteps.forEach((step) => {
|
||||
step.originalData = {
|
||||
handlers: JSON.parse(JSON.stringify(step.handlers || [])),
|
||||
options: JSON.parse(JSON.stringify(step.options || []))
|
||||
}
|
||||
})
|
||||
// 退出编辑状态
|
||||
this.isProcessTitleEditing = false
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '保存成功'
|
||||
})
|
||||
// 重新拉取流程节点,保持数据同步
|
||||
if (flowId) {
|
||||
// 如果 detail 中没有 flowId,更新它
|
||||
if (!this.detail) {
|
||||
this.detail = {}
|
||||
}
|
||||
if (!this.detail.flowId) {
|
||||
this.detail.flowId = flowId
|
||||
}
|
||||
this.getApprovalSpet()
|
||||
}
|
||||
})
|
||||
.asyncErrorCatch((err) => {
|
||||
console.error('保存失败:', err)
|
||||
this.$message({
|
||||
type: 'error',
|
||||
message: err?.message || '保存失败,请重试'
|
||||
})
|
||||
})
|
||||
},
|
||||
// 取消流程主题编辑(统一恢复流程主题和所有环节)
|
||||
handleCancelEditProcessTitle() {
|
||||
// 恢复原始流程主题
|
||||
this.approvalFormData.processTitle = this.originalProcessTitle || ''
|
||||
// 恢复所有环节的原始数据
|
||||
this.approvalWorkflowSteps.forEach((step) => {
|
||||
if (step.originalData) {
|
||||
step.handlers = JSON.parse(JSON.stringify(step.originalData.handlers || []))
|
||||
step.options = JSON.parse(JSON.stringify(step.originalData.options || []))
|
||||
}
|
||||
})
|
||||
// 退出编辑状态
|
||||
this.isProcessTitleEditing = false
|
||||
},
|
||||
handleApprovalFormSubmit() {
|
||||
// 判断是否是重新发起状态
|
||||
if (this.isResendModeFilled) {
|
||||
// 重新发起状态:调用 CONTINUE_APPROVAL_PROCESS 接口
|
||||
// 从 resendFlowId 中获取 flowId
|
||||
const flowId = this.resendFlowId
|
||||
if (!flowId) {
|
||||
this.$message.error('缺少流程ID,无法继续审批')
|
||||
return
|
||||
}
|
||||
|
||||
const request = {
|
||||
...api.CONTINUE_APPROVAL_PROCESS,
|
||||
params: {
|
||||
flowId: flowId,
|
||||
userId: getUserId()
|
||||
},
|
||||
disableSuccessMsg: true
|
||||
}
|
||||
|
||||
this.approvalSubmitting = true
|
||||
this.$request(request)
|
||||
.asyncThen((resp) => {
|
||||
console.log('审批提交成功')
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '审批提交成功'
|
||||
})
|
||||
this.isApprovalMode = false
|
||||
this.isResendModeFilled = false
|
||||
this.resendFlowId = null
|
||||
this.approvalSubmitting = false
|
||||
// 清空保存的审批模式前的数据(因为审批已提交,不需要还原)
|
||||
this.originalTableDataForApproval = []
|
||||
this.originalPaginationForApproval = null
|
||||
this.handleBack()
|
||||
})
|
||||
.asyncErrorCatch((err) => {
|
||||
console.error('审批提交失败:', err)
|
||||
this.$message({
|
||||
type: 'error',
|
||||
message: err?.message || '审批提交失败,请重试'
|
||||
})
|
||||
})
|
||||
.finally(() => {
|
||||
this.approvalSubmitting = false
|
||||
})
|
||||
} else {
|
||||
// 正常发起审批:调用 START_APPROVAL 接口
|
||||
// 获取模板ID
|
||||
const templateRowId = this.getDetailTemplateId()
|
||||
if (!templateRowId) {
|
||||
@ -2395,6 +2711,7 @@ export default {
|
||||
.finally(() => {
|
||||
this.approvalSubmitting = false
|
||||
})
|
||||
}
|
||||
},
|
||||
handleRemoteSearch(query, stepIndex) {
|
||||
const step = this.approvalWorkflowSteps[stepIndex]
|
||||
@ -3793,11 +4110,57 @@ export default {
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
font-weight: bolder;
|
||||
margin-bottom: 8px;
|
||||
margin-bottom: 8px !important;
|
||||
color: #303133;
|
||||
}
|
||||
}
|
||||
|
||||
.approval-process-title {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
margin-bottom: 16px;
|
||||
|
||||
.description-label {
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
font-weight: bolder;
|
||||
margin-bottom: 8px !important;
|
||||
color: #303133;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 12px;
|
||||
|
||||
.step-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
flex-shrink: 0;
|
||||
|
||||
.edit-step-btn,
|
||||
.save-step-btn,
|
||||
.cancel-step-btn {
|
||||
padding: 0;
|
||||
font-size: 12px;
|
||||
color: #409eff;
|
||||
|
||||
&:hover {
|
||||
color: #66b1ff;
|
||||
}
|
||||
}
|
||||
|
||||
.cancel-step-btn {
|
||||
color: #909399;
|
||||
|
||||
&:hover {
|
||||
color: #a6a9ad;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.approval-workflow {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@ -3807,7 +4170,6 @@ export default {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #303133;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.workflow-table {
|
||||
|
||||
@ -110,7 +110,9 @@
|
||||
v-for="(colConfig, index) in tableConfig.colConfigs"
|
||||
v-slot:[colConfig.customHeadSlot]="{ column }"
|
||||
>
|
||||
<div v-if="colConfig.customHeadSlot" :key="index"> {{ column }} {{ colConfig }} </div>
|
||||
<div v-if="colConfig.customHeadSlot" :key="index">
|
||||
{{ column }} {{ colConfig }}
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template
|
||||
@ -166,16 +168,7 @@
|
||||
>
|
||||
修改
|
||||
</a>
|
||||
<span style="width: 6px; display: inline-block"></span>
|
||||
<a
|
||||
v-if="row.status === 'DRAFT' && hasReportEditPermission() && row.returnNum > 0"
|
||||
href="javascript:void(0)"
|
||||
class="el-link el-link--primary"
|
||||
@click.stop="handleEdit(row)"
|
||||
>
|
||||
重新发起
|
||||
</a>
|
||||
<span style="width: 6px; display: inline-block"></span>
|
||||
<span v-if="row.status === 'DRAFT' && hasReportEditPermission() && row.returnNum === 0" style="width: 6px; display: inline-block"></span>
|
||||
<!-- <a
|
||||
v-if="row.status === 'APPROVING'"
|
||||
href="javascript:void(0)"
|
||||
@ -464,7 +457,9 @@
|
||||
>
|
||||
<div class="dialog-body-wrapper">
|
||||
<div class="approval-process-title">
|
||||
<div class="description-label"> 流程主题 <span class="required-mark">*</span> </div>
|
||||
<div class="description-label">
|
||||
流程主题 <span class="required-mark">*</span>
|
||||
</div>
|
||||
<el-input
|
||||
v-model="launchProcessTitle"
|
||||
maxlength="100"
|
||||
@ -1858,10 +1853,13 @@ export default {
|
||||
this.showReportDetail = false
|
||||
this.currentReportDetail = null
|
||||
},
|
||||
handleReportDetailRefresh() {
|
||||
handleReportDetailRefresh(payload) {
|
||||
// 刷新列表数据
|
||||
this.loadData()
|
||||
// 关闭详情页
|
||||
// 默认关闭详情页;保存场景需要停留在详情页
|
||||
if (payload && payload.keepOpen) {
|
||||
return
|
||||
}
|
||||
this.closeReportDetail()
|
||||
},
|
||||
currentChange(currentPage) {
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
>
|
||||
直送
|
||||
</el-button>
|
||||
<el-button v-else @click="handleLaunch">
|
||||
<el-button @click="handleLaunch">
|
||||
发起
|
||||
</el-button>
|
||||
<el-button type="primary" @click="handleEdit">
|
||||
@ -42,7 +42,7 @@
|
||||
直送
|
||||
</el-button>
|
||||
<el-button @click="handleResendApproval">
|
||||
重新发起
|
||||
发起
|
||||
</el-button>
|
||||
<el-button type="primary" @click="handleEdit">
|
||||
修改
|
||||
@ -53,10 +53,7 @@
|
||||
<el-button @click="handleCancelEdit">
|
||||
返回
|
||||
</el-button>
|
||||
<el-button v-if="canResend" type="primary" @click="handleResendApproval">
|
||||
重新发起
|
||||
</el-button>
|
||||
<el-button v-else type="primary" :loading="saving" @click="handleSave">
|
||||
<el-button type="primary" :loading="saving" @click="handleSave">
|
||||
保存
|
||||
</el-button>
|
||||
</template>
|
||||
@ -331,7 +328,7 @@
|
||||
</section>
|
||||
|
||||
<!-- 审批流程 -->
|
||||
<section v-if="reportDetail.status && reportDetail.status !== 'DRAFT' && detail.flowId" class="block-section">
|
||||
<section v-if="reportDetail.status && reportDetail.status !== 'DRAFT' && detail.flowId && !isEditMode" class="block-section">
|
||||
<div class="section-title">
|
||||
审批流程
|
||||
</div>
|
||||
@ -372,7 +369,7 @@
|
||||
</section>
|
||||
|
||||
<!-- 审批环节(草稿状态下显示) -->
|
||||
<section v-if="reportDetail.status === 'DRAFT'" class="block-section">
|
||||
<section v-if="reportDetail.status === 'DRAFT' || reportDetail.status === 'REJECTED'" class="block-section">
|
||||
<div class="section-title">
|
||||
审批环节
|
||||
</div>
|
||||
@ -395,6 +392,7 @@
|
||||
maxlength="100"
|
||||
show-word-limit
|
||||
placeholder="请输入流程主题"
|
||||
@change="handleProcessTitleChange"
|
||||
/>
|
||||
</div>
|
||||
<div class="workflow-table">
|
||||
@ -629,6 +627,10 @@ export default {
|
||||
saving: false, // 保存中状态
|
||||
isEditingProcessTitle: false, // 是否正在编辑流程主题
|
||||
editingProcessTitle: '', // 正在编辑的流程主题值
|
||||
approvalFlowIdFromUsers: '', // 从审批人员接口获取的流程ID
|
||||
approvalCanSend: false, // 审批人员接口返回的是否可继续发起标识
|
||||
// 保存时对比快照(不依赖watch/change)
|
||||
originalEditSnapshot: null, // 进入编辑态并完成回填后的快照
|
||||
approvalWorkflowSteps: [
|
||||
{
|
||||
name: '校对',
|
||||
@ -684,7 +686,7 @@ export default {
|
||||
let processedNodes = this.flowNodes
|
||||
if (rejectIndex !== -1) {
|
||||
// 如果有 REJECT 节点,删除该节点后面的所有节点
|
||||
processedNodes = this.flowNodes.slice(0, rejectIndex + 1)
|
||||
// processedNodes = this.flowNodes.slice(0, rejectIndex + 1)
|
||||
} else {
|
||||
// 如果没有 REJECT,将第一个 result 是"待审批"的节点改为 APPROVING
|
||||
const stayIndex = processedNodes.findIndex((node) => node.result === '待审批')
|
||||
@ -745,22 +747,6 @@ export default {
|
||||
opinion: opinion
|
||||
})
|
||||
})
|
||||
} else if (this.progress && this.progress.length > 0) {
|
||||
// 兼容旧逻辑:如果没有 flowNodes,则使用原来的 progress 数据
|
||||
this.progress.forEach((stage) => {
|
||||
if (stage.steps && stage.steps.length > 0) {
|
||||
stage.steps.forEach((step) => {
|
||||
nodes.push({
|
||||
title: stage.title || '审批节点',
|
||||
userName: step.userName,
|
||||
operateTime: step.approvalTime || step.handleTime || step.createTime,
|
||||
result: step.result || step.status,
|
||||
status: step.result || step.status,
|
||||
opinion: step.opinion || step.remark || step.comment || null
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return nodes
|
||||
@ -981,11 +967,16 @@ export default {
|
||||
templateVersion: data.templateVersion || '',
|
||||
contentName: data.contentName || ''
|
||||
}
|
||||
this.reportDetail.processTitle = data.progressTitle
|
||||
// 如果 flowStatus 是 REJECTED,强制设置当前环节为"草稿",当前处理人为创建人
|
||||
const flowStatus = data.flowStatus || ''
|
||||
const createBy = data.createBy || ''
|
||||
if (flowStatus) {
|
||||
// 将报告状态与流程状态保持一致
|
||||
this.$set(this.reportDetail, 'status', flowStatus)
|
||||
}
|
||||
this.showTopDetail = {
|
||||
processTitle: data.progressTitle || '',
|
||||
processTitle: data.progressTitle,
|
||||
createBy: createBy,
|
||||
createTime: data.createTime || '',
|
||||
currentNode: flowStatus === 'REJECTED' ? '编制' : (data.currentNode || ''),
|
||||
@ -1374,7 +1365,8 @@ export default {
|
||||
// 发起功能:直接调用发起接口(按照report.vue的方式)
|
||||
handleLaunch() {
|
||||
const reportId = this.reportDetail.reportId || this.reportDetail.id || this.detail.reportId || this.detail.id
|
||||
const flowId = this.detail.flowId || this.reportDetail.flowId
|
||||
const flowId = this.approvalFlowIdFromUsers || this.detail.flowId || this.reportDetail.flowId
|
||||
const canSend = this.canResend
|
||||
|
||||
if (!reportId) {
|
||||
this.$message.error('缺少报告ID,无法发起审批')
|
||||
@ -1392,16 +1384,34 @@ export default {
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
let request = null
|
||||
if (canSend) {
|
||||
// 可继续发起时,调用继续审批接口,使用审批人员接口返回的 flowId
|
||||
const continueFlowId = this.approvalFlowIdFromUsers || flowId
|
||||
if (!continueFlowId) {
|
||||
this.$message.error('缺少流程ID,无法继续发起审批')
|
||||
return
|
||||
}
|
||||
request = {
|
||||
...api.CONTINUE_REPORT_APPROVAL,
|
||||
params: {
|
||||
flowId: continueFlowId,
|
||||
userId: getUserId()
|
||||
},
|
||||
disableSuccessMsg: true
|
||||
}
|
||||
} else {
|
||||
const submitData = {
|
||||
reportId: reportId,
|
||||
flowId: flowId,
|
||||
userId: getUserId()
|
||||
}
|
||||
const request = {
|
||||
request = {
|
||||
...api.ADD_REPORT,
|
||||
params: submitData,
|
||||
disableSuccessMsg: true
|
||||
}
|
||||
}
|
||||
|
||||
this.launching = true
|
||||
this.$request(request)
|
||||
@ -1499,7 +1509,7 @@ export default {
|
||||
// 加载审批人(用于草稿状态显示和编辑模式)
|
||||
loadApprovalUsers(flowId) {
|
||||
if (!flowId) {
|
||||
return
|
||||
return Promise.resolve()
|
||||
}
|
||||
const request = {
|
||||
...api.GET_REPORT_APPROVAL_USERS,
|
||||
@ -1508,15 +1518,47 @@ export default {
|
||||
},
|
||||
disableSuccessMsg: true
|
||||
}
|
||||
this.$request(request)
|
||||
return this.$request(request)
|
||||
.asyncThen((resp) => {
|
||||
console.log('获取审批流程信息:', resp)
|
||||
// 记录可继续发起的标识及流程ID
|
||||
const meta = this.parseApprovalUsersMeta(resp)
|
||||
this.approvalCanSend = !!meta.canSend
|
||||
this.approvalFlowIdFromUsers = meta.flowId || flowId || ''
|
||||
// 同步流程主题(接口返回为准)
|
||||
if (meta.title) {
|
||||
this.reportDetail.processTitle = meta.title
|
||||
this.showTopDetail.processTitle = meta.title
|
||||
// 编辑态下也同步到表单,避免保存后显示旧值
|
||||
if (this.isEditMode) {
|
||||
this.editFormData.processTitle = meta.title
|
||||
}
|
||||
}
|
||||
this.fillApprovalUsersData(resp, this.approvalWorkflowSteps)
|
||||
})
|
||||
.asyncErrorCatch((err) => {
|
||||
console.error('获取审批流程信息失败:', err)
|
||||
throw err
|
||||
})
|
||||
},
|
||||
// 提取审批人员接口返回的流程ID/流程主题与可发起标识
|
||||
parseApprovalUsersMeta(resp) {
|
||||
const meta = { flowId: '', canSend: false, title: '' }
|
||||
const candidate = resp?.data ?? resp
|
||||
const pickFrom = (obj) => {
|
||||
if (!obj || Array.isArray(obj)) return
|
||||
meta.flowId = meta.flowId || obj.flowId || obj.id || obj.flowid || ''
|
||||
meta.canSend = meta.canSend || obj.canSend || obj.canResend || false
|
||||
meta.title = meta.title || obj.progressTitle || obj.processTitle || obj.title || ''
|
||||
}
|
||||
if (candidate && !Array.isArray(candidate)) {
|
||||
pickFrom(candidate)
|
||||
if (candidate.data && !Array.isArray(candidate.data)) {
|
||||
pickFrom(candidate.data)
|
||||
}
|
||||
}
|
||||
return meta
|
||||
},
|
||||
// 填充审批人数据(按照report.vue的逻辑)
|
||||
fillApprovalUsersData(resp, workflowSteps) {
|
||||
// 提取节点列表
|
||||
@ -1669,13 +1711,16 @@ export default {
|
||||
},
|
||||
// 处理人员选择变化(用于编辑模式)
|
||||
handleHandlerChange(stepIndex, selectedIds) {
|
||||
// 处理人员选择变化
|
||||
// 提交时通过快照对比判断是否变化
|
||||
},
|
||||
// 处理重新发起按钮点击(已拒绝状态)
|
||||
handleResendApproval() {
|
||||
// 直接调用重新发起接口(
|
||||
this.handleResatrtLaunch()
|
||||
},
|
||||
handleProcessTitleChange() {
|
||||
// 提交时通过快照对比判断是否变化
|
||||
},
|
||||
// 加载审批人(用于发起弹窗,草稿和已拒绝状态)
|
||||
loadLaunchApprovalUsers(flowId) {
|
||||
if (!flowId) {
|
||||
@ -1700,7 +1745,7 @@ export default {
|
||||
})
|
||||
},
|
||||
// 修改功能:进入编辑模式
|
||||
handleEdit() {
|
||||
async handleEdit() {
|
||||
// 保存原始数据
|
||||
this.originalReportDetail = JSON.parse(JSON.stringify(this.reportDetail))
|
||||
// 填充表单数据
|
||||
@ -1735,14 +1780,19 @@ export default {
|
||||
this.fileList = []
|
||||
}
|
||||
this.selectedFile = null
|
||||
// 如果是草稿状态,确保审批人员已加载(如果还没有加载)
|
||||
this.isEditMode = true
|
||||
// 如果是草稿状态,确保审批人员/流程主题已回填后再记录快照(避免回填触发“误判修改”)
|
||||
if (this.reportDetail.status === 'DRAFT') {
|
||||
const flowId = this.detail.flowId || this.reportDetail.flowId
|
||||
if (flowId && (!this.approvalWorkflowSteps[0].handlers || this.approvalWorkflowSteps[0].handlers.length === 0)) {
|
||||
this.loadApprovalUsers(flowId)
|
||||
if (flowId) {
|
||||
try {
|
||||
await this.loadApprovalUsers(flowId)
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
this.isEditMode = true
|
||||
}
|
||||
this.originalEditSnapshot = this.buildEditSnapshot()
|
||||
},
|
||||
// 取消编辑:恢复只读状态
|
||||
handleCancelEdit() {
|
||||
@ -1770,6 +1820,7 @@ export default {
|
||||
}
|
||||
this.fileList = []
|
||||
this.selectedFile = null
|
||||
this.originalEditSnapshot = null
|
||||
this.isEditMode = false
|
||||
// 清除表单验证
|
||||
if (this.$refs.editForm) {
|
||||
@ -1862,20 +1913,73 @@ export default {
|
||||
this.submitEdit()
|
||||
}
|
||||
},
|
||||
buildEditSnapshot() {
|
||||
const normalize = (v) => (v == null ? '' : v)
|
||||
const normalizeSteps = (steps) =>
|
||||
(steps || []).map((s) => ({
|
||||
name: s.name,
|
||||
handlers: (s.handlers || []).filter(Boolean).slice().sort()
|
||||
}))
|
||||
// 仅用于对比的字段集合
|
||||
return {
|
||||
form: {
|
||||
title: normalize(this.editFormData?.title),
|
||||
manufacturerName: normalize(this.editFormData?.manufacturerName),
|
||||
modelName: normalize(this.editFormData?.modelName),
|
||||
manufacturerAbbreviation: normalize(this.editFormData?.manufacturerAbbreviation),
|
||||
modelAbbreviation: normalize(this.editFormData?.modelAbbreviation),
|
||||
productNumber: normalize(this.editFormData?.productNumber),
|
||||
module: normalize(this.editFormData?.module),
|
||||
plate: normalize(this.editFormData?.plate),
|
||||
platform: normalize(this.editFormData?.platform),
|
||||
series: normalize(this.editFormData?.series),
|
||||
marketSegment: normalize(this.editFormData?.marketSegment),
|
||||
projectName: normalize(this.editFormData?.projectName),
|
||||
projectNumber: normalize(this.editFormData?.projectNumber),
|
||||
explanation: normalize(this.editFormData?.explanation),
|
||||
fileUrl: normalize(this.editFormData?.fileUrl),
|
||||
fileName: normalize(this.editFormData?.fileName)
|
||||
},
|
||||
processTitle: (this.editFormData?.processTitle || '').trim(),
|
||||
steps: normalizeSteps(this.approvalWorkflowSteps)
|
||||
}
|
||||
},
|
||||
diffEditSnapshot(original, current) {
|
||||
const isSame = (a, b) => JSON.stringify(a) === JSON.stringify(b)
|
||||
const baseChanged =
|
||||
!original ||
|
||||
!isSame(original.form, current.form) ||
|
||||
!!this.selectedFile // 新选中文件一定算基础变更
|
||||
const approvalChanged =
|
||||
!original ||
|
||||
original.processTitle !== current.processTitle ||
|
||||
!isSame(original.steps, current.steps)
|
||||
return { baseChanged, approvalChanged }
|
||||
},
|
||||
hasAnyEditChange() {
|
||||
const current = this.buildEditSnapshot()
|
||||
const { baseChanged, approvalChanged } = this.diffEditSnapshot(this.originalEditSnapshot, current)
|
||||
return baseChanged || approvalChanged
|
||||
},
|
||||
// 提交编辑
|
||||
submitEdit() {
|
||||
const submitData = async () => {
|
||||
try {
|
||||
// 没有任何修改时,不调用接口
|
||||
if (!this.hasAnyEditChange()) {
|
||||
this.isEditMode = false
|
||||
this.$message({
|
||||
type: 'info',
|
||||
message: '未修改,无需保存'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 如果有新文件,先上传文件获取文件路径
|
||||
if (this.selectedFile) {
|
||||
try {
|
||||
const fileUrl = await this.handleFileUpload()
|
||||
this.editFormData.fileUrl = fileUrl || ''
|
||||
this.editFormData.fileName = this.selectedFile.name
|
||||
} catch (err) {
|
||||
console.error('文件上传失败:', err)
|
||||
this.$message.error('文件上传失败,请重试')
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
const reportId = this.reportDetail.reportId || this.reportDetail.id
|
||||
@ -1884,54 +1988,119 @@ export default {
|
||||
return
|
||||
}
|
||||
|
||||
// 如果是草稿状态,需要提交审批环节数据
|
||||
const includeApprovalInSave = !this.canResend
|
||||
const shouldUpdateApprovalProcess = this.canResend
|
||||
|
||||
const { processTitle, ...restForm } = this.editFormData
|
||||
const params = {
|
||||
reportId: reportId,
|
||||
flowId: this.detail.flowId,
|
||||
...this.editFormData,
|
||||
...restForm,
|
||||
createBy: getUserId(),
|
||||
userId: getUserId()
|
||||
}
|
||||
|
||||
// 如果是草稿状态,添加审批环节数据
|
||||
if (this.reportDetail.status === 'DRAFT') {
|
||||
const nodeList = this.approvalWorkflowSteps.map((step, index) => ({
|
||||
if (includeApprovalInSave) {
|
||||
params.processTitle = processTitle || ''
|
||||
params.nodeList = this.approvalWorkflowSteps.map((step, index) => ({
|
||||
nodeName: step.name,
|
||||
assignees: step.handlers,
|
||||
nodeOrder: index + 1
|
||||
}))
|
||||
params.nodeList = nodeList
|
||||
}
|
||||
|
||||
this.saving = true
|
||||
// 提交时对比快照判断是否有变化(不依赖watch/change)
|
||||
const currentSnap = this.buildEditSnapshot()
|
||||
const { baseChanged, approvalChanged } = this.diffEditSnapshot(this.originalEditSnapshot, currentSnap)
|
||||
// 当 canResend 为 true 时(shouldUpdateApprovalProcess 为 true),审批环节和流程主题的修改应该走 updateApprovalProcess
|
||||
// 当 canResend 为 false 时(includeApprovalInSave 为 true),审批环节和流程主题的修改应该包含在 EDIT_REPORT 中
|
||||
const needUpdateApprovalProcess =
|
||||
shouldUpdateApprovalProcess && approvalChanged
|
||||
// 判断是否需要调用 EDIT_REPORT:
|
||||
// 1. 如果有基础变化(文件或表单字段),需要调用 EDIT_REPORT
|
||||
// 2. 如果 includeApprovalInSave 为 true 且有审批变化,需要调用 EDIT_REPORT(将审批数据包含在保存中)
|
||||
// 3. 如果 shouldUpdateApprovalProcess 为 true 且只有审批变化(没有基础变化),不应该调用 EDIT_REPORT
|
||||
const shouldOnlyUpdateApprovalProcess = shouldUpdateApprovalProcess && approvalChanged && !baseChanged
|
||||
const needUpdateReportBase =
|
||||
!shouldOnlyUpdateApprovalProcess && (
|
||||
baseChanged ||
|
||||
(includeApprovalInSave && approvalChanged)
|
||||
)
|
||||
if (needUpdateReportBase) {
|
||||
console.log('needUpdateReportBase', needUpdateReportBase)
|
||||
const request = {
|
||||
...api.EDIT_REPORT,
|
||||
params: params,
|
||||
disableSuccessMsg: true
|
||||
}
|
||||
await this.$request(request).asyncThen(() => {})
|
||||
}
|
||||
|
||||
if (needUpdateApprovalProcess) {
|
||||
console.log('needUpdateApprovalProcess', needUpdateApprovalProcess)
|
||||
await this.updateApprovalProcess()
|
||||
}
|
||||
|
||||
this.saving = true
|
||||
this.$request(request)
|
||||
.asyncThen((resp) => {
|
||||
this.saving = false
|
||||
this.isEditMode = false
|
||||
// 重新加载详情
|
||||
this.loadReportDetailFromApi(reportId, this.detail.flowId)
|
||||
// 重新加载详情 + 草稿时刷新审批环节/流程主题(对齐 handleResatrtLaunch 的“重新获取”效果)
|
||||
const currentFlowId = this.detail.flowId || this.reportDetail.flowId
|
||||
this.loadReportDetailFromApi(reportId, currentFlowId)
|
||||
if (this.reportDetail.status === 'DRAFT' && currentFlowId) {
|
||||
// 重新获取审批环节与流程主题
|
||||
this.loadApprovalUsers(currentFlowId)
|
||||
}
|
||||
// 更新快照(保存后以当前值为基准)
|
||||
this.originalEditSnapshot = this.buildEditSnapshot()
|
||||
this.$message({
|
||||
type: 'success',
|
||||
message: '保存成功'
|
||||
})
|
||||
// 触发刷新事件
|
||||
this.$emit('refresh')
|
||||
})
|
||||
.asyncErrorCatch((err) => {
|
||||
// 触发刷新事件(保存后不返回上一级)
|
||||
this.$emit('refresh', { keepOpen: true })
|
||||
} catch (err) {
|
||||
console.error('保存失败:', err)
|
||||
this.$message.error(err?.message || '保存失败,请重试')
|
||||
} finally {
|
||||
this.saving = false
|
||||
this.$message.error('保存失败,请重试')
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
submitData()
|
||||
},
|
||||
// 更新审批环节(直送模式下单独调用流程修改接口)
|
||||
updateApprovalProcess() {
|
||||
const flowId = this.detail.flowId || this.reportDetail.flowId
|
||||
if (!flowId) {
|
||||
this.$message.error('缺少流程ID,无法保存审批环节')
|
||||
return Promise.reject(new Error('缺少流程ID'))
|
||||
}
|
||||
|
||||
const nodeList = this.approvalWorkflowSteps.map((step, index) => ({
|
||||
nodeName: step.name,
|
||||
assignees: step.handlers,
|
||||
nodeOrder: index + 1
|
||||
}))
|
||||
|
||||
const request = {
|
||||
...api.EDIT_APPROVAL_PROCESS,
|
||||
params: {
|
||||
nodeList: nodeList,
|
||||
flowId: flowId,
|
||||
title: this.editFormData.processTitle || '',
|
||||
userId: getUserId()
|
||||
},
|
||||
disableSuccessMsg: true
|
||||
}
|
||||
|
||||
return this.$request(request)
|
||||
.asyncThen(() => {})
|
||||
.asyncErrorCatch((err) => {
|
||||
console.error('更新审批环节失败:', err)
|
||||
this.$message.error(err?.message || '更新审批环节失败,请重试')
|
||||
throw err
|
||||
})
|
||||
},
|
||||
// 开始编辑流程主题
|
||||
handleEditProcessTitle() {
|
||||
this.isEditingProcessTitle = true
|
||||
|
||||
@ -43,24 +43,6 @@
|
||||
v-for="(colConfig, index) in tableConfig.colConfigs"
|
||||
v-slot:[colConfig.customSlot]="{ row, rowIndex }"
|
||||
>
|
||||
<div v-if="colConfig.customSlot === 'options'" :key="'op' + index + '' + rowIndex">
|
||||
<a
|
||||
href="javascript:void(0)"
|
||||
class="el-link el-link--primary"
|
||||
@click.stop="handleRowView(row)"
|
||||
>查看</a
|
||||
>
|
||||
<!-- <span
|
||||
v-if="row.dataType === '数据维护'"
|
||||
style="width: 6px; display: inline-block"
|
||||
></span>
|
||||
<a
|
||||
href="javascript:void(0)"
|
||||
class="el-link el-link--primary"
|
||||
@click.stop="handleRowBack(row)"
|
||||
>退回</a
|
||||
> -->
|
||||
</div>
|
||||
<div v-if="colConfig.customSlot === 'processTitle'" :key="'pt' + index + '' + rowIndex">
|
||||
<a
|
||||
href="javascript:void(0)"
|
||||
@ -157,7 +139,7 @@ import ApprovalProgressDetail from './approvalProgressDetail.vue'
|
||||
import ReportDetail from './reportDetail.vue'
|
||||
import ModelDetail from './modelDetail.vue'
|
||||
import { getUserId } from '@/utils'
|
||||
import api from '@/api/demo'
|
||||
import api from '@/api'
|
||||
export default {
|
||||
name: 'TodoPage',
|
||||
components: {
|
||||
@ -229,14 +211,6 @@ export default {
|
||||
minWidth: '150',
|
||||
align: 'center',
|
||||
formatter: this.formatDateTime
|
||||
},
|
||||
{
|
||||
prop: 'options',
|
||||
label: '操作',
|
||||
customSlot: 'options',
|
||||
align: 'center',
|
||||
width: '100',
|
||||
fixed: 'right'
|
||||
}
|
||||
],
|
||||
seqType: '',
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user