2026-01-05 10:52:46 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<div class="page">
|
|
|
|
|
|
<easy-form
|
|
|
|
|
|
ref="EasyForm"
|
|
|
|
|
|
v-model="data"
|
|
|
|
|
|
:fields="fields"
|
|
|
|
|
|
:form-config="formConfig"
|
|
|
|
|
|
:buttons="buttons"
|
|
|
|
|
|
>
|
|
|
|
|
|
<template v-slot:divider="scope">
|
|
|
|
|
|
<div class="divider">
|
|
|
|
|
|
<span class="text">{{ scope.getPropValue(scope.field.label) }}</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<template v-slot:uploader="scope">
|
|
|
|
|
|
<div class="uploader">
|
|
|
|
|
|
<el-upload
|
|
|
|
|
|
:action="action"
|
|
|
|
|
|
:data="{
|
|
|
|
|
|
attachType: '1',
|
|
|
|
|
|
bizSeqNo: scope.formData.bizSeqNo
|
|
|
|
|
|
}"
|
|
|
|
|
|
accept=".jpg,.png,.pdf,.doc,.docx,.xls,.xlsx,.rar,.zip,.7z"
|
|
|
|
|
|
multiple
|
|
|
|
|
|
:disabled="scope.isView"
|
|
|
|
|
|
:file-list="scope.formData[scope.field.prop]"
|
|
|
|
|
|
:before-remove="removeFile"
|
|
|
|
|
|
:on-preview="previewFile"
|
|
|
|
|
|
>
|
|
|
|
|
|
<el-button v-if="!scope.isView" size="small" plain type="primary">
|
|
|
|
|
|
<svg-icon icon-class="download" />
|
|
|
|
|
|
点击上传
|
|
|
|
|
|
</el-button>
|
|
|
|
|
|
<div v-if="!scope.isView" slot="tip" class="el-upload__tip">只能上传jpg/png/pdf/doc/docx/xls/xlsx/rar/zip/7z文件,且单个文件不能超过20M</div>
|
|
|
|
|
|
</el-upload>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<template v-slot:steps="scope">
|
|
|
|
|
|
<div class="steps">
|
|
|
|
|
|
<el-steps v-if="scope.formData[scope.field.prop].length > 0" :active="0" finish-status="success">
|
|
|
|
|
|
<el-step v-for="step in scope.formData[scope.field.prop]" :key="step.key">
|
|
|
|
|
|
<template v-slot:description>
|
|
|
|
|
|
<div class="step-description">
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<span class="step-description-label">{{ step.opinionType }}内容:</span>
|
|
|
|
|
|
<span class="step-description-value">{{ step.opinionContent }}</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<span class="step-description-label">{{ step.opinionType }}人:</span>
|
|
|
|
|
|
<span class="step-description-value">{{ step.handler }}</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<span class="step-description-label">{{ step.opinionType }}日期:</span>
|
2026-01-06 19:41:40 +08:00
|
|
|
|
<span class="step-description-value">{{ parseTime2(step.createTime, 'yyyy-MM-dd hh:mm') }}</span>
|
2026-01-05 10:52:46 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-step>
|
|
|
|
|
|
</el-steps>
|
|
|
|
|
|
<div v-else class="empty-tips">暂无历史信息</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<template v-slot:opinion="scope">
|
|
|
|
|
|
<div class="opinion-selector">
|
|
|
|
|
|
<span class="opinion-selector-text">常用语</span>
|
|
|
|
|
|
<el-select
|
|
|
|
|
|
v-model="scope.field.opinion"
|
|
|
|
|
|
size="medium"
|
|
|
|
|
|
placeholder="请选择常用语"
|
|
|
|
|
|
@change="(val)=>{
|
|
|
|
|
|
scope.formData[scope.field.prop] = val
|
|
|
|
|
|
scope.easyFormItemBindData.componentScope.formInstance.clearValidate(scope.field.prop)
|
|
|
|
|
|
}"
|
|
|
|
|
|
>
|
|
|
|
|
|
<el-option
|
|
|
|
|
|
v-for="item in scope.field.options"
|
|
|
|
|
|
:key="item"
|
|
|
|
|
|
:label="item"
|
|
|
|
|
|
:value="item"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</el-select>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<template v-slot:upperDept="scope">
|
|
|
|
|
|
<div class="opinion-selector">
|
|
|
|
|
|
<el-radio-group
|
|
|
|
|
|
v-model="localSelection"
|
|
|
|
|
|
@change="(val) => {
|
|
|
|
|
|
// 调用方法并传入 isUpper 参数
|
|
|
|
|
|
getUsersWithPermission(val === '上级部门处理人' ? 1 : 0);
|
|
|
|
|
|
scope.easyFormItemBindData.componentScope.formInstance.clearValidate(scope.field.prop);
|
|
|
|
|
|
}"
|
|
|
|
|
|
>
|
|
|
|
|
|
<el-radio label="当前部门处理人">当前部门处理人</el-radio>
|
|
|
|
|
|
<el-radio label="上级部门处理人">上级部门处理人</el-radio>
|
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</easy-form>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
import { getUsersWithPermission } from '@/api/user'
|
2026-01-06 19:41:40 +08:00
|
|
|
|
import { createGlobalLoading, parseTime2 } from '@/utils'
|
2026-01-05 10:52:46 +08:00
|
|
|
|
import { findCurrentNode, findNextSequenceFlowList, taskInfo } from '@/api'
|
|
|
|
|
|
import {
|
|
|
|
|
|
generateDecisionContent,
|
2026-01-06 11:45:17 +08:00
|
|
|
|
xrForceDeregisterRemByBizSeqNo, xrForceDeregisterRemProcessControl,
|
|
|
|
|
|
getOrgunits,
|
|
|
|
|
|
xrAttachmentDelLawFile,
|
|
|
|
|
|
xrAttachmentListByBizSepNo,
|
|
|
|
|
|
xrOpinionListByBizSeqNo
|
2026-01-05 10:52:46 +08:00
|
|
|
|
} from '@/api/force'
|
|
|
|
|
|
export default {
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
authItemMap: [],
|
2026-01-06 19:41:40 +08:00
|
|
|
|
parseTime2,
|
2026-01-06 15:49:39 +08:00
|
|
|
|
action: process.env.VUE_APP_BASE_API + '/attachment/uploadFileByBizseq',
|
2026-01-05 10:52:46 +08:00
|
|
|
|
nextPerformerMap: [],
|
|
|
|
|
|
generatingContent: false,
|
|
|
|
|
|
data: {},
|
|
|
|
|
|
status: '',
|
|
|
|
|
|
taskLikeId: '',
|
|
|
|
|
|
showFakeProgress: false,
|
|
|
|
|
|
type: this.$route.meta.type,
|
|
|
|
|
|
flowModel: [],
|
|
|
|
|
|
currentNodeID: '',
|
|
|
|
|
|
localSelection: '当前部门处理人', // 默认值
|
|
|
|
|
|
formConfig: {
|
|
|
|
|
|
labelPosition: 'right',
|
|
|
|
|
|
buttonPosition: 'right',
|
|
|
|
|
|
gutter: 0,
|
|
|
|
|
|
isView: () => {
|
|
|
|
|
|
return this.readonly
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
fields: [
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'divider',
|
|
|
|
|
|
label: '强制注销公告信息'
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'input',
|
|
|
|
|
|
label: '统一社会信用代码/注册号',
|
|
|
|
|
|
prop: 'uniscId',
|
|
|
|
|
|
span: 12,
|
|
|
|
|
|
isView: true
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'input',
|
|
|
|
|
|
label: '企业名称',
|
|
|
|
|
|
prop: 'entName',
|
|
|
|
|
|
span: 12,
|
|
|
|
|
|
isView: true
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'input',
|
|
|
|
|
|
label: '登记机关',
|
|
|
|
|
|
prop: 'regOrgCn',
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
isView: true
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'select',
|
|
|
|
|
|
label: '强制注销登记法定事由',
|
|
|
|
|
|
prop: 'forceRra',
|
|
|
|
|
|
optionsBaseCode: 'C13042',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
isView: true
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'date-picker',
|
|
|
|
|
|
label: '公告期自',
|
|
|
|
|
|
prop: 'noticeFrom',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
formProps: {
|
|
|
|
|
|
valueFormat: 'yyyy-MM-dd'
|
|
|
|
|
|
},
|
|
|
|
|
|
span: 12,
|
|
|
|
|
|
isView: true
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'date-picker',
|
|
|
|
|
|
label: '公告期至',
|
|
|
|
|
|
prop: 'noticeTo',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
formProps: {
|
|
|
|
|
|
valueFormat: 'yyyy-MM-dd'
|
|
|
|
|
|
},
|
|
|
|
|
|
span: 12,
|
|
|
|
|
|
isView: true
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'select',
|
|
|
|
|
|
label: '强制注销结果',
|
|
|
|
|
|
prop: 'forceRes',
|
|
|
|
|
|
optionsBaseCode: 'C13044',
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
isView: ({ formData }) => {
|
|
|
|
|
|
return formData.status !== '0'
|
|
|
|
|
|
},
|
|
|
|
|
|
showInForm: () => {
|
|
|
|
|
|
return this.readonly
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'date-picker',
|
|
|
|
|
|
label: '拟强制注销结果日期',
|
|
|
|
|
|
prop: 'forceResDate',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
formProps: {
|
|
|
|
|
|
valueFormat: 'yyyy-MM-dd'
|
|
|
|
|
|
},
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
isView: ({ formData }) => {
|
|
|
|
|
|
return formData.status !== '0'
|
|
|
|
|
|
},
|
|
|
|
|
|
showInForm: () => {
|
|
|
|
|
|
return this.readonly
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'input',
|
|
|
|
|
|
label: '公告标题',
|
|
|
|
|
|
prop: 'noticeTitle',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
isView: true
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'textarea',
|
|
|
|
|
|
label: '公告内容 ',
|
|
|
|
|
|
prop: 'noticeContent',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
isView: true
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'slot',
|
|
|
|
|
|
slotName: 'uploader',
|
|
|
|
|
|
label: '材料列表',
|
|
|
|
|
|
prop: 'fileList',
|
|
|
|
|
|
defaultValue: () => {
|
|
|
|
|
|
return []
|
|
|
|
|
|
},
|
|
|
|
|
|
span: 24
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'divider',
|
|
|
|
|
|
label: '历史处理信息'
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'slot',
|
|
|
|
|
|
slotName: 'steps',
|
|
|
|
|
|
label: '历史处理信息',
|
|
|
|
|
|
hiddenLabel: true,
|
|
|
|
|
|
prop: 'steps',
|
|
|
|
|
|
defaultValue: () => {
|
|
|
|
|
|
return []
|
|
|
|
|
|
},
|
|
|
|
|
|
span: 24
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'divider',
|
|
|
|
|
|
label: ({ formData }) => {
|
|
|
|
|
|
return ({
|
|
|
|
|
|
'0': '恢复登记经办意见',
|
|
|
|
|
|
'1': '恢复登记审核意见',
|
|
|
|
|
|
'2': '恢复登记审批意见',
|
|
|
|
|
|
'7': '恢复登记执法负责意见'
|
|
|
|
|
|
})[formData.status]
|
|
|
|
|
|
},
|
|
|
|
|
|
showInForm: () => {
|
|
|
|
|
|
return !this.readonly
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'radio',
|
|
|
|
|
|
label: '是否予以恢复',
|
|
|
|
|
|
prop: 'isAccept',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
options: [
|
|
|
|
|
|
{ label: '予以恢复', value: '1' },
|
|
|
|
|
|
{ label: '不予恢复', value: '0' }
|
|
|
|
|
|
],
|
|
|
|
|
|
isView: ({ formData }) => {
|
|
|
|
|
|
return formData.status !== '0' || this.readonly
|
|
|
|
|
|
},
|
|
|
|
|
|
onChange: ({ formData }, value, isFromUser) => {
|
|
|
|
|
|
if (isFromUser && formData.isAccept && !this.readonly) {
|
|
|
|
|
|
this.generateDecisionContent({
|
|
|
|
|
|
formData: formData,
|
|
|
|
|
|
field: { prop: 'decisionContent' }
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'textarea',
|
|
|
|
|
|
label: ({ formData }) => {
|
|
|
|
|
|
return formData.isAccept === '1' ? '予以恢复决定书内容' : formData.isAccept === '0' ? '不予恢复决定书内容' : '决定书内容'
|
|
|
|
|
|
},
|
|
|
|
|
|
prop: 'decisionContent',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
isView: ({ formData }) => {
|
|
|
|
|
|
return formData.status !== '0'
|
|
|
|
|
|
},
|
|
|
|
|
|
formProps: {
|
|
|
|
|
|
rows: 6,
|
|
|
|
|
|
autosize: {
|
|
|
|
|
|
minRows: 6,
|
|
|
|
|
|
maxRows: 12
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'radio',
|
|
|
|
|
|
label: '选择操作',
|
|
|
|
|
|
prop: 'isAgree',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
options: ({ formData }) => {
|
|
|
|
|
|
return this.flowModel
|
|
|
|
|
|
},
|
|
|
|
|
|
showInForm: ({ formData }) => {
|
|
|
|
|
|
return !this.readonly && formData.isAccept
|
|
|
|
|
|
},
|
|
|
|
|
|
onChange: (scope, value, isFromUser) => {
|
|
|
|
|
|
if (isFromUser) {
|
|
|
|
|
|
scope.formData.opinionContent = ''
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'select',
|
|
|
|
|
|
beforeSlotName: 'upperDept',
|
|
|
|
|
|
label: '下一步处理人',
|
|
|
|
|
|
prop: 'nextPerformerIds',
|
|
|
|
|
|
span: 12,
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
options: () => {
|
2026-01-06 18:40:02 +08:00
|
|
|
|
return this.nextPerformerMap.map((item) => {
|
|
|
|
|
|
return {
|
|
|
|
|
|
...item,
|
|
|
|
|
|
label: item.name,
|
|
|
|
|
|
value: item.primaryKey
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
2026-01-05 10:52:46 +08:00
|
|
|
|
},
|
|
|
|
|
|
showInForm: ({ formData }) => {
|
|
|
|
|
|
return !this.readonly && formData.isAccept && ['0', '1', '7'].includes(formData.status) && !['nullify', 'transfer', 'examineFinish', 'approveFinish', 'lawFinish', 'handleReturn', 'examineReturn', 'end', 'upApproveFinish'].includes(formData.isAgree)
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'textarea',
|
|
|
|
|
|
afterSlotName: 'opinion',
|
|
|
|
|
|
label: ({ formData }) => {
|
|
|
|
|
|
return ({
|
|
|
|
|
|
'0': '经办意见',
|
|
|
|
|
|
'1': '审核意见',
|
|
|
|
|
|
'2': '审批意见',
|
|
|
|
|
|
'7': '执法负责意见'
|
|
|
|
|
|
})[formData.status]
|
|
|
|
|
|
},
|
|
|
|
|
|
prop: 'opinionContent',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
opinion: '',
|
|
|
|
|
|
options: [
|
|
|
|
|
|
'同意',
|
|
|
|
|
|
'不同意'
|
|
|
|
|
|
],
|
|
|
|
|
|
showInForm: ({ formData }) => {
|
|
|
|
|
|
return !this.readonly && formData.isAgree !== 'transfer' && formData.isAccept
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'cascader',
|
|
|
|
|
|
label: '转办机关',
|
|
|
|
|
|
prop: 'nextOrgID',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
showInForm: ({ formData }) => {
|
|
|
|
|
|
return formData.isAgree === 'transfer' && formData.status === '0' && formData.isAccept
|
|
|
|
|
|
},
|
|
|
|
|
|
isView: ({ formData }) => {
|
|
|
|
|
|
return ['1', '2'].includes(formData.status) || this.readonly
|
|
|
|
|
|
},
|
|
|
|
|
|
formProps: {
|
|
|
|
|
|
props: { checkStrictly: true }
|
|
|
|
|
|
},
|
|
|
|
|
|
optionConfig: {
|
|
|
|
|
|
labelKeyName: 'label',
|
|
|
|
|
|
valueKeyName: 'orgUnitId'
|
|
|
|
|
|
},
|
|
|
|
|
|
options: () => {
|
|
|
|
|
|
return this.authItemMap
|
|
|
|
|
|
},
|
|
|
|
|
|
onCreated: ({ setOptionLoading }) => {
|
|
|
|
|
|
if (this.authItemMap.length === 0) {
|
|
|
|
|
|
setOptionLoading('authItem', getOrgunits().then((data) => {
|
|
|
|
|
|
this.authItemMap = data
|
|
|
|
|
|
}))
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'input',
|
|
|
|
|
|
label: '转办原因',
|
|
|
|
|
|
prop: 'transferReason',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
showInForm: ({ formData }) => {
|
|
|
|
|
|
return formData.isAgree === 'transfer' && formData.status === '0' && formData.isAccept === '1'
|
|
|
|
|
|
},
|
|
|
|
|
|
isView: ({ formData }) => {
|
|
|
|
|
|
return ['1', '2'].includes(formData.status) || this.readonly
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
type: 'input',
|
|
|
|
|
|
label: '退回理由',
|
|
|
|
|
|
prop: 'backProposal',
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
span: 24,
|
|
|
|
|
|
showInForm: false,
|
|
|
|
|
|
isView: ({ formData }) => {
|
|
|
|
|
|
return ['1', '2'].includes(formData.status) || this.readonly
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
buttons: [
|
|
|
|
|
|
{
|
|
|
|
|
|
label: '返回',
|
|
|
|
|
|
type: 'primary',
|
|
|
|
|
|
show: true,
|
|
|
|
|
|
buttonProps: {
|
|
|
|
|
|
plain: true
|
|
|
|
|
|
},
|
|
|
|
|
|
handler: (scope) => {
|
|
|
|
|
|
this.$router.back()
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
label: '提交',
|
|
|
|
|
|
type: 'primary',
|
|
|
|
|
|
show: () => {
|
|
|
|
|
|
return !this.readonly
|
|
|
|
|
|
},
|
|
|
|
|
|
handler: ({ formInstance, getOptionValue }) => {
|
|
|
|
|
|
return formInstance.submitForm().then((formData) => {
|
|
|
|
|
|
this.$confirm('是否继续提交', '提示', {
|
|
|
|
|
|
type: 'info',
|
|
|
|
|
|
customClass: 'type-1',
|
|
|
|
|
|
confirmHandlerPromise: () => {
|
|
|
|
|
|
const nextPerformer = getOptionValue('nextPerformerIds') ? [getOptionValue('nextPerformerIds')] : []
|
|
|
|
|
|
return xrForceDeregisterRemProcessControl({
|
|
|
|
|
|
xrForceDeregisterRem: { ...formData },
|
|
|
|
|
|
bizSeqNo: formData.bizSeqNo,
|
|
|
|
|
|
nextNodeID: formData.isAgree,
|
|
|
|
|
|
nextPerformerIds: nextPerformer.map((item) => {
|
|
|
|
|
|
return item.value
|
|
|
|
|
|
}),
|
|
|
|
|
|
nextPerformerNames: nextPerformer?.label,
|
|
|
|
|
|
opinion: {
|
|
|
|
|
|
opinionContent: formData.opinionContent
|
|
|
|
|
|
},
|
|
|
|
|
|
currentNodeID: this.currentNodeID
|
|
|
|
|
|
}).then((data) => {
|
|
|
|
|
|
this.$message.success(`已完成对“${formData.entName}”的业务办理!`)
|
|
|
|
|
|
this.$router.push({
|
|
|
|
|
|
path: `/forceNotice/recovery/${this.$route.meta.type}`
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
computed: {
|
|
|
|
|
|
readonly() {
|
|
|
|
|
|
return this.type === 'history'
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
created() {
|
|
|
|
|
|
createGlobalLoading(() => {
|
|
|
|
|
|
return Promise.all([
|
|
|
|
|
|
xrOpinionListByBizSeqNo({
|
|
|
|
|
|
bizSeqNo: this.$route.query.bizSeqNo
|
|
|
|
|
|
}).then((data) => {
|
|
|
|
|
|
this.data = {
|
|
|
|
|
|
...this.data,
|
|
|
|
|
|
steps: data.reverse()
|
|
|
|
|
|
}
|
|
|
|
|
|
}),
|
|
|
|
|
|
xrAttachmentListByBizSepNo({
|
2026-01-06 19:41:40 +08:00
|
|
|
|
bizseq: this.$route.query.bizSeqNo,
|
|
|
|
|
|
attachtype: '1'
|
2026-01-05 10:52:46 +08:00
|
|
|
|
}).then((data) => {
|
|
|
|
|
|
this.data.fileList = data.map((item) => {
|
|
|
|
|
|
return {
|
|
|
|
|
|
...item,
|
2026-01-06 20:25:46 +08:00
|
|
|
|
name: item.filename
|
2026-01-05 10:52:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}),
|
|
|
|
|
|
xrForceDeregisterRemByBizSeqNo({
|
|
|
|
|
|
bizSeqNo: this.$route.query.bizSeqNo
|
|
|
|
|
|
}).then((busInfo) => {
|
|
|
|
|
|
this.data.status = busInfo.status
|
2026-01-06 20:25:46 +08:00
|
|
|
|
this.data = {
|
|
|
|
|
|
...this.data,
|
|
|
|
|
|
...busInfo
|
|
|
|
|
|
}
|
2026-01-05 10:52:46 +08:00
|
|
|
|
const permission = ({
|
|
|
|
|
|
'0': 'xrExamine',
|
|
|
|
|
|
'1': 'xrApprove'
|
|
|
|
|
|
})[busInfo.status]
|
|
|
|
|
|
const ps = []
|
|
|
|
|
|
if (permission) {
|
|
|
|
|
|
ps.push(getUsersWithPermission(
|
|
|
|
|
|
permission,
|
|
|
|
|
|
this.$store.getters.orgId
|
|
|
|
|
|
).then((data) => {
|
2026-01-06 16:03:03 +08:00
|
|
|
|
this.nextPerformerMap = data.data
|
2026-01-05 10:52:46 +08:00
|
|
|
|
}))
|
|
|
|
|
|
}
|
|
|
|
|
|
return Promise.all(ps)
|
|
|
|
|
|
}),
|
|
|
|
|
|
taskInfo({
|
|
|
|
|
|
bizSeqNo: this.$route.query.bizSeqNo
|
|
|
|
|
|
}).then((data) => {
|
|
|
|
|
|
this.taskLikeId = data.taskLikeId
|
|
|
|
|
|
this.data = {
|
|
|
|
|
|
...this.data,
|
|
|
|
|
|
...data,
|
|
|
|
|
|
taskId: data.taskLikeId
|
|
|
|
|
|
}
|
|
|
|
|
|
findNextSequenceFlowList({
|
|
|
|
|
|
taskId: data.taskLikeId
|
|
|
|
|
|
}).then((data) => {
|
|
|
|
|
|
this.flowModel = data.map((item) => {
|
|
|
|
|
|
return {
|
|
|
|
|
|
label: item.name, value: item.nextNode.id
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|
|
|
|
|
|
findCurrentNode({
|
|
|
|
|
|
taskId: data.taskLikeId
|
|
|
|
|
|
}).then((activity) => {
|
|
|
|
|
|
this.currentNodeID = activity.linkType
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|
|
|
|
|
|
])
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
|
|
|
|
generateDecisionContent(scope) {
|
|
|
|
|
|
this.generatingContent = true
|
|
|
|
|
|
generateDecisionContent(
|
|
|
|
|
|
scope.formData
|
|
|
|
|
|
).then((data) => {
|
|
|
|
|
|
scope.formData[scope.field.prop] = data
|
|
|
|
|
|
this.generatingContent = false
|
|
|
|
|
|
}).catch(() => {
|
|
|
|
|
|
this.generatingContent = false
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
stepStatus2CN(opinionType, approve) {
|
|
|
|
|
|
return `${approve === '1' ? '上级' : ''}` + ({
|
|
|
|
|
|
'handle': '经办',
|
|
|
|
|
|
'examine': '审核',
|
|
|
|
|
|
'approve': '审批'
|
|
|
|
|
|
})[opinionType]
|
|
|
|
|
|
},
|
|
|
|
|
|
removeFile(file) {
|
|
|
|
|
|
return xrAttachmentDelLawFile({
|
|
|
|
|
|
id: file.attachmentId
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
previewFile(file) {
|
2026-01-06 20:28:27 +08:00
|
|
|
|
window.open(`${process.env.VUE_APP_BASE_API}/xrAttachment/getMaterial?id=${file.attachmentid || file?.response?.data?.attachmentid}&bizSeqNo=${file.bizseq}&attachType=${file.attachtype}`, '_blank')
|
2026-01-05 10:52:46 +08:00
|
|
|
|
},
|
|
|
|
|
|
getUsersWithPermission(isUpper) {
|
|
|
|
|
|
const ps = []
|
|
|
|
|
|
const status = this.data.status || '0'
|
|
|
|
|
|
const permission = ({
|
|
|
|
|
|
'0': 'xrExamine',
|
|
|
|
|
|
'1': 'xrApprove'
|
|
|
|
|
|
})[status]
|
|
|
|
|
|
if (permission) {
|
|
|
|
|
|
ps.push(getUsersWithPermission(
|
|
|
|
|
|
permission,
|
|
|
|
|
|
this.$store.getters.orgId,
|
|
|
|
|
|
isUpper
|
|
|
|
|
|
).then((data) => {
|
2026-01-06 16:03:03 +08:00
|
|
|
|
this.nextPerformerMap = data.data
|
2026-01-05 10:52:46 +08:00
|
|
|
|
}))
|
|
|
|
|
|
}
|
|
|
|
|
|
return Promise.all(ps)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
@import "~@/styles/abnormal-handle";
|
|
|
|
|
|
.opinion-selector{
|
|
|
|
|
|
margin-top: 18px;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
.opinion-selector-text{
|
|
|
|
|
|
margin-right: 16px;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.steps{
|
|
|
|
|
|
padding: 20px 24px;
|
|
|
|
|
|
overflow: auto;
|
|
|
|
|
|
.el-steps{
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
width: max-content;
|
|
|
|
|
|
min-width: 100%;
|
|
|
|
|
|
&::before{
|
|
|
|
|
|
content: "";
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
border: 2px solid #F5F5F5;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
top: 18px;
|
|
|
|
|
|
}
|
|
|
|
|
|
.el-step{
|
|
|
|
|
|
flex-basis: unset!important;
|
|
|
|
|
|
margin-right: 56px!important;
|
|
|
|
|
|
flex-shrink: 0;
|
|
|
|
|
|
/deep/ .el-step__head{
|
|
|
|
|
|
margin-bottom: 16px;
|
|
|
|
|
|
.el-step__line{
|
|
|
|
|
|
display: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
.el-step__icon{
|
|
|
|
|
|
width: 36px;
|
|
|
|
|
|
height: 36px;
|
|
|
|
|
|
border-color: #2A8CE3;
|
|
|
|
|
|
color: #2A8CE3;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/deep/ .el-step__description{
|
|
|
|
|
|
padding-right: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
.step-description{
|
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
|
max-width: 235px;
|
|
|
|
|
|
&>div{
|
|
|
|
|
|
margin-bottom: 8px;
|
|
|
|
|
|
}
|
|
|
|
|
|
.step-description-label{
|
|
|
|
|
|
color: #666666;
|
|
|
|
|
|
}
|
|
|
|
|
|
.step-description-value{
|
|
|
|
|
|
color: #333333;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.empty-tips{
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
color: #999999;
|
|
|
|
|
|
}
|
|
|
|
|
|
.notice-content-wrapper {
|
|
|
|
|
|
.button-group {
|
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
|
text-align: right;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|