aiccs/src/views/forceNotice/remove/handle.vue

668 lines
20 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>
<span class="step-description-value">{{ parseTime(step.createTime, 'yyyy-MM-dd hh:mm') }}</span>
</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'
import { createGlobalLoading, parseTime } from '@/utils'
import { findCurrentNode, findNextSequenceFlowList, taskInfo } from '@/api'
import {
xrForceDeregisterRemByBizSeqNo, xrForceDeregisterRemProcessControl,
getOrgunits,
xrAttachmentDelLawFile,
xrAttachmentListByBizSepNo,
xrOpinionListByBizSeqNo
} from '@/api/force'
export default {
data() {
return {
authItemMap: [],
parseTime,
action: process.env.VUE_APP_BASE_API + '/attachment/uploadFileByBizseq',
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: 'remType',
required: true,
span: 24,
options: [
{ label: '提出异议', value: '1' },
{ label: '已启动注销程序或已注销的', value: '2' }
],
isView: ({ formData }) => {
return formData.status !== '0' || this.readonly
}
},
{
type: 'radio',
label: '异议是否成立',
prop: 'isAccept',
// required: true,
span: 24,
options: [
{ label: '成立', value: '1' },
{ label: '不成立', value: '0', nextNodeID: 'replenish' }
],
showInForm: ({ formData }) => {
return formData.remType === '1'
},
isView: ({ formData }) => {
return (formData.status !== '0' && formData.remType === '1') || this.readonly
}
},
{
type: 'select',
label: '终止拟强制注销理由',
prop: 'endForceRra',
optionsBaseCode: 'C13043',
required: true,
span: 24,
showInForm: ({ formData }) => {
return formData.remType === '2' || (formData.remType === '1' && formData.isAccept === '1')
},
isView: ({ formData }) => {
return formData.status !== '0'
}
},
{
type: 'radio',
label: '选择操作',
prop: 'isAgree',
required: true,
span: 24,
options: ({ formData }) => {
return this.flowModel
},
showInForm: ({ formData }) => {
return !this.readonly && (formData.remType === '2' || (formData.remType === '1' && formData.isAccept === '1')) && formData.endForceRra
},
onChange: (scope, value, isFromUser) => {
if (isFromUser) {
scope.formData.opinionContent = ''
}
}
},
{
type: 'select',
beforeSlotName: 'upperDept',
label: '下一步处理人',
prop: 'nextPerformerIds',
span: 12,
required: true,
options: () => {
return this.nextPerformerMap
},
showInForm: ({ formData }) => {
return !this.readonly && (formData.remType === '2' || (formData.remType === '1' && formData.isAccept === '1')) && ['0', '1', '7'].includes(formData.status) && !['nullify', 'transfer', 'examineFinish', 'approveFinish', 'lawFinish', 'handleReturn', 'examineReturn', 'end', 'upApproveFinish'].includes(formData.isAgree) && formData.endForceRra
}
},
{
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.remType === '2' || (formData.remType === '1' && formData.isAccept === '1')) && formData.endForceRra
}
},
{
type: 'cascader',
label: '转办机关',
prop: 'nextOrgID',
required: true,
span: 24,
showInForm: ({ formData }) => {
return formData.isAgree === 'transfer' && formData.status === '0' && (formData.remType === '2' || (formData.remType === '1' && formData.isAccept === '1'))
},
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.remType === '2' || (formData.remType === '1' && formData.isAccept === '1'))
},
isView: ({ formData }) => {
return ['1', '2'].includes(formData.status) || this.readonly
}
},
{
type: 'input',
label: '退回理由',
prop: 'backProposal',
required: true,
span: 24,
showInForm: ({ formData }) => {
return formData.isAccept === '0'
},
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/remove/${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({
bizSeqNo: this.$route.query.bizSeqNo,
attachType: '1'
}).then((data) => {
this.data.fileList = data.map((item) => {
return {
...item,
name: item.fileName
}
})
}),
xrForceDeregisterRemByBizSeqNo({
bizSeqNo: this.$route.query.bizSeqNo
}).then((busInfo) => {
this.data.status = busInfo.status
this.data = busInfo
const permission = ({
'0': 'xrExamine',
'1': 'xrApprove'
})[busInfo.status]
const ps = []
if (permission) {
ps.push(getUsersWithPermission(
permission,
this.$store.getters.orgId
).then((data) => {
this.nextPerformerMap = data.data
}))
}
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: {
stepStatus2CN(opinionType, approve) {
return `${approve === '1' ? '上级' : ''}` + ({
'handle': '经办',
'examine': '审核',
'approve': '审批'
})[opinionType]
},
removeFile(file) {
return xrAttachmentDelLawFile({
id: file.attachmentId
})
},
previewFile(file) {
window.open(`${process.env.VUE_APP_BASE_API}/xrAttachment/getMaterial?id=${file.attachmentId || file?.response?.data?.attachmentId}&bizSeqNo=${file.bizSeqNo}&attachType=${file.attachType}`, '_blank')
},
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) => {
this.nextPerformerMap = data.data
}))
}
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>