Files
laws-sinotruk-client/src/views/workCenter/enterpriseStandardRevision/EnterpriseStandardRevisionFlow.vue
T

590 lines
24 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>
<internal-detail-page :title="pageTitle" :content-padding="0">
<!-- 标题右侧tab -->
<template v-slot:titleRightCustom>
<div class="table-operator-tab">
<!-- 基础信息 -->
<a class="switch-item" :class="switchValue === 'base' ? 'table-operator-tab-active' : ''"
@click="switchChange('base')">{{ $t('basicInformation') }}
</a>
<!-- 人员信息 -->
<a class="switch-item" :class="switchValue === 'user' ? 'table-operator-tab-active' : ''"
@click="switchChange('user')">{{ $t('personalInformation') }}
</a>
</div>
</template>
<!-- 基础信息 -->
<div v-if="switchValue === 'base'" class="detail-page-scroll-content">
<!-- 流程信息 -->
<div class="process-part-title">{{ $t('processInformation') }}</div>
<a-form :form="processInfoForm">
<a-row>
<a-col :span="12">
<!-- 流程名称 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('processName')" :colon="formItemColon">
<a-input :placeholder="$t('pleaseEnter') + $t('processName')"
@change="event => event.target.value = event.target.value.trim()"
disabled
:maxLength="50"
v-decorator="['prcName', validatorRules.prcName]" />
</a-form-item>
</a-col>
<a-col :span="12">
<!-- 截止日期 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('expirationDate')" :colon="formItemColon">
<a-date-picker :placeholder="$t('pleaseSelect') + $t('expirationDate')"
style="width: 100%"
:disabled="disabled"
value-format="YYYY-MM-DD"
v-decorator="['dueTime']" />
</a-form-item>
</a-col>
<a-col :span="24">
<!-- 流程说明 -->
<a-form-item :labelCol="longLabelCol" :wrapperCol="longWrapperCol" :label="$t('processExplain')" :colon="formItemColon">
<a-textarea :placeholder="$t('pleaseEnter') + $t('processExplain')"
:maxLength="500"
:rows="4"
:disabled="disabled"
v-decorator="['prcMes']" />
</a-form-item>
</a-col>
</a-row>
</a-form>
<!-- 业务基本信息 -->
<div class="process-part-title">{{ $t('basicServiceInformation') }}</div>
<!-- 节点1主起草人起草分发 -->
<main-drafter-sent-base-info v-if="currentNode === 1" :flowInitType="flowInitType" :disabled="disabled" ref="baseInfoRef"></main-drafter-sent-base-info>
<!-- 节点2其他起草人上传企标 -->
<other-drafter-upload-standard-base-info v-if="currentNode === 2" :disabled="disabled" ref="baseInfoRef"></other-drafter-upload-standard-base-info>
<!-- 节点3主起草人汇总上传会议纪要 -->
<main-drafter-collect-upload-minute-base-info v-if="currentNode === 3" :disabled="disabled" ref="baseInfoRef"></main-drafter-collect-upload-minute-base-info>
<!-- 节点4标准化审核 -->
<standardization-audit-base-info v-if="currentNode === 4" :disabled="disabled" ref="baseInfoRef" @standardizationAuditIsMeeting="standardizationAuditIsMeeting"></standardization-audit-base-info>
<!-- 节点5评分人打分 -->
<scorer-mark-base-info v-if="currentNode === 5" :disabled="disabled" ref="baseInfoRef"></scorer-mark-base-info>
<!-- 节点6标准化确认是否开启征求意见 -->
<confirm-whether-comment-base-info v-if="currentNode === 6" :disabled="disabled" ref="baseInfoRef"></confirm-whether-comment-base-info>
<!-- 节点7部所联络人下发 -->
<depart-liaison-issue-base-info v-if="currentNode === 7" :disabled="disabled" ref="baseInfoRef"></depart-liaison-issue-base-info>
<!-- 节点8征求意见对象填写意见 -->
<comment-object-enter-base-info v-if="currentNode === 8" :disabled="disabled" ref="baseInfoRef"></comment-object-enter-base-info>
<!-- 节点9部所联络人汇总数据 -->
<depart-liaison-collect-base-info v-if="currentNode === 9" :disabled="disabled" ref="baseInfoRef"></depart-liaison-collect-base-info>
<!-- 节点10部所联络人主管级领导审批 -->
<depart-liaison-leader-approve-base-info v-if="currentNode === 10" :disabled="disabled" ref="baseInfoRef"></depart-liaison-leader-approve-base-info>
<!-- 节点11主起草人汇总 -->
<main-drafter-collect-base-info v-if="currentNode === 11" :disabled="disabled" ref="baseInfoRef"></main-drafter-collect-base-info>
<!-- 节点12主起草人上传会议纪要 -->
<main-drafter-upload-minute-base-info v-if="currentNode === 12" :disabled="disabled" ref="baseInfoRef"></main-drafter-upload-minute-base-info>
<!-- 节点13其他起草人校对 -->
<!-- 节点14主管级领导审批 -->
<!-- 节点15标准化审批 -->
<!-- 节点16相关部门领导会签 -->
<!-- 节点17总工程师审批 -->
<!-- 只有标准文本 -->
<other-drafter-proofread-base-info v-if="[13, 14, 15, 16, 17].includes(currentNode)" :disabled="disabled" ref="baseInfoRef"></other-drafter-proofread-base-info>
<!-- 节点18主起草人发布 -->
<main-drafter-publish-base-info v-if="currentNode === 18" :disabled="disabled" ref="baseInfoRef"></main-drafter-publish-base-info>
<!-- 流程审批信息 -->
<div class="process-part-title">{{ $t('processApprovalInformation') }}</div>
<a-form :form="approvalInfoForm">
<!--备注-->
<a-form-item :labelCol="longLabelCol" :wrapperCol="longWrapperCol" :label="$t('remarks')" :colon="formItemColon">
<a-textarea :placeholder="$t('pleaseEnter') + $t('remarks')"
:maxLength="500"
:rows="4"
v-decorator="['commitText', validatorRules.commitText]" />
</a-form-item>
<!--附件-->
<a-form-item :labelCol="longLabelCol" :wrapperCol="longWrapperCol" :label="$t('attach')" :colon="formItemColon">
<j-upload v-decorator="['commitFile']" return-id />
</a-form-item>
</a-form>
</div>
<!-- 人员信息 -->
<div v-if="switchValue === 'user'" class="detail-page-scroll-content p-0">
<process-detail-list :url="url">
<personnel-info slot="personnelInfo" ref="personnelInfo" :data="personnelInfoData" :currentNode="currentNode"></personnel-info>
</process-detail-list>
</div>
<!-- 操作按钮 -->
<div class="detail-page-bottom-operate-box" v-if="!onlyLook">
<!-- 发起节点 -->
<template v-if="currentNode === 1">
<!-- 保存 -->
<a-button type="primary" ghost :loading="loading" @click="handleSave"><i class="iconfont icon-save"></i> {{ $t('preservation') }}</a-button>
<!-- 提交 -->
<a-button type="primary" :loading="loading" @click="handleStart" icon="upload">{{ $t('submit') }}</a-button>
</template>
<!-- 各部所联络人填写/下发任务 -->
<template v-else-if="[2, 3, 5, 6, 7, 8, 9, 11, 12].includes(currentNode)">
<!-- 转办 -->
<a-button type="primary" ghost :loading="loading" @click="handleTurnTo" icon="arrow-up">{{ $t('turnTo') }}</a-button>
<!-- 保存 -->
<a-button type="primary" ghost :loading="loading" @click="handleSave"><i class="iconfont icon-save"></i> {{ $t('preservation') }}</a-button>
<!-- 提交 -->
<a-button type="primary" :loading="loading" @click="handleSubmit" icon="upload">{{ $t('submit') }}</a-button>
</template>
<template v-else-if="currentNode === 18">
<!-- 提交 -->
<a-button type="primary" :loading="loading" @click="handleSubmit" icon="upload">{{ $t('submit') }}</a-button>
</template>
<template v-else>
<!-- 转办 -->
<a-button type="primary" ghost :loading="loading" @click="handleTurnTo" icon="arrow-up">{{ $t('turnTo') }}</a-button>
<!-- 保存 -->
<a-button type="primary" ghost :loading="loading" @click="handleSave"><i class="iconfont icon-save"></i> {{ $t('preservation') }}</a-button>
<!-- 同意 -->
<a-button type="primary" :loading="loading" @click="handleAgree" icon="check-circle" :disabled="agreeBtnDisabled">{{ $t('agree') }}</a-button>
<!-- 驳回 -->
<a-button type="primary" :loading="loading" @click="handleReject" icon="close-circle" :disabled="rejectBtnDisabled">{{ $t('reject') }}</a-button>
</template>
</div>
<!-- 选人弹框 -->
<user-select-modal ref="userSelectModal" type="radio" @change="userSelectModalChange"></user-select-modal>
</internal-detail-page>
</template>
<script>
import pick from 'lodash.pick'
import InternalDetailPage from '@/components/InternalDetailPage'
import UserSelectModal from '@/components/selection/UserSelectModal'
import ProcessDetailList from '@/components/ProcessDetailList'
import PersonnelInfo from '@/components/PersonnelInfo'
import MainDrafterSentBaseInfo from './modules/MainDrafterSentBaseInfo'
import OtherDrafterUploadStandardBaseInfo from './modules/OtherDrafterUploadStandardBaseInfo'
import StandardizationAuditBaseInfo from './modules/StandardizationAuditBaseInfo'
import ScorerMarkBaseInfo from './modules/ScorerMarkBaseInfo'
import ConfirmWhetherCommentBaseInfo from './modules/ConfirmWhetherCommentBaseInfo'
import DepartLiaisonIssueBaseInfo from './modules/DepartLiaisonIssueBaseInfo'
import CommentObjectEnterBaseInfo from './modules/CommentObjectEnterBaseInfo'
import DepartLiaisonCollectBaseInfo from './modules/DepartLiaisonCollectBaseInfo'
import DepartLiaisonLeaderApproveBaseInfo from './modules/DepartLiaisonLeaderApproveBaseInfo'
import MainDrafterCollectBaseInfo from './modules/MainDrafterCollectBaseInfo'
import MainDrafterCollectUploadMinuteBaseInfo from './modules/MainDrafterCollectUploadMinuteBaseInfo'
import MainDrafterUploadMinuteBaseInfo from './modules/MainDrafterUploadMinuteBaseInfo'
import OtherDrafterProofreadBaseInfo from './modules/OtherDrafterProofreadBaseInfo'
import MainDrafterPublishBaseInfo from './modules/MainDrafterPublishBaseInfo'
import { ProcessKey } from '../../../enums/commonEnums'
import {
enStandardEditAgree,
enStandardEditApproval,
enStandardEditGetDataById,
enStandardEditReject,
enStandardEditSave,
enStandardEditTurnTo
} from '@/api/workCenter'
import { WorkCenterMixin } from '@/mixins/WorkCenterMixin'
export default {
name: 'EnterpriseStandardRevisionFlow',
components: {
MainDrafterPublishBaseInfo,
OtherDrafterProofreadBaseInfo,
MainDrafterUploadMinuteBaseInfo,
MainDrafterCollectUploadMinuteBaseInfo,
MainDrafterCollectBaseInfo,
DepartLiaisonLeaderApproveBaseInfo,
DepartLiaisonCollectBaseInfo,
CommentObjectEnterBaseInfo,
DepartLiaisonIssueBaseInfo,
ConfirmWhetherCommentBaseInfo,
ScorerMarkBaseInfo,
StandardizationAuditBaseInfo,
OtherDrafterUploadStandardBaseInfo,
MainDrafterSentBaseInfo,
InternalDetailPage,
UserSelectModal,
ProcessDetailList,
PersonnelInfo
},
mixins: [WorkCenterMixin],
computed: {
pageTitle () {
return this.$t('flowCenter') + this.$route.meta.title + '' + this.currentNodeName + ''
}
},
mounted () {
// 初始化节点
const taskName = this.$route.query.taskName
if (taskName) {
if (taskName === '主起草人起草分发') {
this.currentNode = 1
} else if (taskName === '其他起草人上传企标') {
this.currentNode = 2
} else if (taskName === '主起草人汇总上传会议纪要') {
this.currentNode = 3
} else if (taskName === '标准化审核') {
this.currentNode = 4
} else if (taskName === '评分人评分') {
this.currentNode = 5
} else if (taskName === '标准化确认是否开启征求意见') {
this.currentNode = 6
} else if (taskName === '部所联络人下发') {
this.currentNode = 7
} else if (taskName === '征求意见对象填写意见') {
this.currentNode = 8
} else if (taskName === '部所联络人汇总数据') {
this.currentNode = 9
} else if (taskName === '部门联络人主管级领导审批') {
this.currentNode = 10
} else if (taskName === '主起草人汇总') {
this.currentNode = 11
} else if (taskName === '主起草人上传会议纪要') {
this.currentNode = 12
} else if (taskName === '其他起草人校对') {
this.currentNode = 13
} else if (taskName === '主管级领导审批') {
this.currentNode = 14
} else if (taskName === '标准化审批') {
this.currentNode = 15
} else if (taskName === '相关部门领导会签') {
this.currentNode = 16
} else if (taskName === '总工程师审批') {
this.currentNode = 17
} else if (taskName === '主起草人发布') {
this.currentNode = 18
} else {
// 预留加签节点
this.currentNode = 999
}
}
// 获取人员信息结构
this.getPersonInfoStructure(ProcessKey.ES_EDIT.value, () => {
if (this.$route.query.processInstanceId) {
if (this.currentNode === 1) {
this.initPersonInfoData(true)
} else {
this.initPersonInfoData(false)
}
}
})
if (this.$route.query.taskId) {
this.currentNodeName = this.$route.query.taskName
// 有流程id说明是从流程中心来的,需要初始化数据
this.getProcessData(this.$route.query.taskId)
} else {
this.currentNodeName = '主起草人起草分发'
}
// 如果是查看进入的,不可编辑,不可操作
if (this.$route.query.onlyLook) {
this.onlyLook = this.$route.query.onlyLook
this.disabled = this.$route.query.onlyLook
}
},
data () {
return {
loading: false,
switchValue: 'base',
processInfoForm: this.$form.createForm(this),
labelCol: {
xs: { span: 24 },
sm: { span: 4 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 20 }
},
longLabelCol: {
xs: { span: 24 },
sm: { span: 2 }
},
longWrapperCol: {
xs: { span: 24 },
sm: { span: 22 }
},
disabled: false,
onlyLook: false,
validatorRules: {
// 流程名称
prcName: {
rules: [
{
required: true,
message: this.$t('pleaseEnter') + this.$t('processName')
}
],
validateTrigger: 'blur'
},
// 备注
commitText: {
rules: [
{
required: false,
message: this.$t('pleaseEnter') + this.$t('remarks')
}
],
validateTrigger: 'blur'
}
},
model: {},
currentNode: 1,
currentNodeName: '', // 当前节点名称
approvalInfoForm: this.$form.createForm(this), // 审批信息表单
personnelInfoData: [], // 人员信息数据
url: {
list: '' // 人员信息右侧表的分页查询接口
},
flowInitType: 'newProcess', // 流程发起类型,是自动发起(auto)的还是从新建流程发起的(newProcess)
rejectBtnDisabled: false, // 驳回按钮是否置灰
agreeBtnDisabled: false // 同意按钮是否置灰
}
},
methods: {
// 根据流程id获取数据并回显
getProcessData (taskId) {
enStandardEditGetDataById(taskId).then(res => {
if (res.success) {
this.model = res.result
this.$nextTick(() => {
// 初始化流程信息
this.processInfoForm.setFieldsValue(pick(this.model[0], 'prcName', 'dueTime', 'prcMes'))
// 初始化流程审批信息,todo:需要判断是不是草稿进来的,草稿进来的才回显审批信息
// this.approvalInfoForm.setFieldsValue(pick(this.model[0], 'commitText', 'commitFile'))
})
// 初始化业务基本信息中组件内容
} else {
this.$message.warning(res.message)
}
})
},
switchChange (value) {
this.switchValue = value
},
// 标准化审核节点是否可进行评审会修改,需要修改备注的是否必填和同意、驳回按钮是否可用
standardizationAuditIsMeeting (value) {
// 选是的话,驳回按钮置灰,不可点击;选否,备注变成必填,内容自动带入“驳回”,下方同意按钮置灰,不可点击
if (value === 1) {
// 选了是
this.validatorRules.commitText.rules[0].required = false
this.rejectBtnDisabled = true
this.agreeBtnDisabled = false
} else {
// 选了否
this.validatorRules.commitText.rules[0].required = true
const obj = {}
obj.commitText = '驳回' + this.processInfoForm.getFieldValue('commitText')
this.$nextTick(() => {
this.processInfoForm.setFieldsValue(pick(obj, 'commitText'))
})
this.rejectBtnDisabled = false
this.agreeBtnDisabled = true
}
},
// 保存
handleSave () {
// 有任意一项填了即可
// 流程信息表单
const processInfoForm = this.processInfoForm.getFieldsValue()
// 流程审批信息
const approvalInfoForm = this.approvalInfoForm.getFieldsValue()
// 人员信息的数据, 处理成对象
const personnelObj = this.$refs.personnelInfo.getDataObj()
// 需要传给后端的
const paramObj = {}
paramObj.common = { ...processInfoForm, ...approvalInfoForm }
paramObj.flowUser = personnelObj
// 业务基本信息
if (this.$refs.baseInfoRef) {
// 业务基本信息
const baseInfo = this.$refs.baseInfoRef.getData()
const param = { ...processInfoForm, ...approvalInfoForm, ...personnelObj, ...baseInfo.formInline }
const flag = Object.values(param).some(v => !!v || v === 0)
if (!flag || (baseInfo.dataSource && baseInfo.dataSource.length <= 0)) {
// 提示至少填写一项
this.$message.warning(this.$t('pleaseFillInAtLeastOneItem'))
return
}
if (baseInfo.dataSource) {
paramObj.dataList = baseInfo.dataSource.map(item => {
return { ...item, ...baseInfo.formInline }
})
} else {
paramObj.dataList = [baseInfo.formInline]
}
} else {
// 需要外层信息至少填了一项
const param = { ...processInfoForm, ...approvalInfoForm, ...personnelObj }
const flag = Object.values(param).some(v => !!v || v === 0)
if (!flag) {
// 提示至少填写一项
this.$message.warning(this.$t('pleaseFillInAtLeastOneItem'))
return
}
}
this.loading = true
// 保存到草稿
enStandardEditSave(paramObj).then(res => {
if (res.success) {
this.$message.success(res.message)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
},
// 节点一时候的提交,发起变更
handleStart () {
if (this.loading) return
// 人员信息的数据, 处理成对象
const personnelObj = this.$refs.personnelInfo.getDataObjVerify()
if (!personnelObj) {
return
}
this.processInfoForm.validateFields((err, values) => {
this.approvalInfoForm.validateFields(async (approvalErr, approvalValues) => {
const data = await this.$refs.baseInfoRef.getDataValidate()
if (!err && !approvalErr && data) {
const param = {} // 需要传给后端的数据
param.common = { ...values, ...approvalValues }
param.flowUser = personnelObj
if (data.dataSource && data.dataSource.length > 0) {
param.dataList = data.dataSource.map(item => {
return { ...item, ...data.formInline }
})
} else {
param.dataList = [data.formInline]
}
let func
if (this.$route.query.taskId) {
// 有taskId说明是驳回的提交
func = enStandardEditAgree
param.common.taskId = this.$route.query.taskId
} else {
func = enStandardEditApproval
}
func(param).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
}
})
})
},
// 转办
handleTurnTo () {
if (this.loading) return
// 点击显示选人组件
this.$refs.userSelectModal.open()
},
// 转办选完人的回调
userSelectModalChange (userIds) {
this.approvalInfoForm.validateFields((err, values) => {
if (!err) {
this.loading = true
const param = Object.assign({}, values)
param.userId = userIds
param.taskId = this.$route.query.taskId
enStandardEditTurnTo(param).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
}
})
},
// 提交
handleSubmit () {
if (this.loading) return
this.approvalInfoForm.validateFields(async (approvalErr, approvalValues) => {
const data = await this.$refs.baseInfoRef.getDataValidate()
if (!approvalErr && data) {
const param = {} // 需要传给后端的数据
param.common = approvalValues
if (data.dataSource && data.dataSource.length > 0) {
param.dataList = data.dataSource.map(item => {
return { ...item, ...data.formInline }
})
} else {
param.dataList = [data.formInline]
}
enStandardEditAgree(param).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
}
})
},
// 同意
handleAgree () {
if (this.loading) return
this.approvalInfoForm.validateFields((err, values) => {
if (!err) {
this.loading = true
const param = {}
param.common = Object.assign({}, values)
param.common.taskId = this.$route.query.taskId
enStandardEditAgree(param).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
}
})
},
// 驳回
handleReject () {
if (this.loading) return
this.validatorRules.commitText.rules[0].required = true
if (!this.approvalInfoForm.getFieldValue('commitText')) {
this.$message.warning(this.$t('pleaseEnterRemarks'))
}
this.$nextTick(() => {
this.approvalInfoForm.validateFields((err, values) => {
if (!err) {
this.loading = true
const param = {}
param.common = Object.assign({}, values)
param.common.taskId = this.$route.query.taskId
enStandardEditReject(param).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
this.validatorRules.commitText.rules[0].required = false
})
}
})
})
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
</style>