update 权限申请流程

This commit is contained in:
danshihao
2023-12-01 15:28:36 +08:00
parent 94c3a20ac5
commit 281938eb7b
18 changed files with 537 additions and 192 deletions
+25 -1
View File
@@ -294,6 +294,22 @@ const saveInspectRectify = (params) => postAction('/process/esInspectRectifyFlow
// 企标稽查整改业务数据 // 企标稽查整改业务数据
const getInspectRectifyDataById = (params) => getAction('/esinspectreport/processEsInspectRectify/queryByProjectId', params) const getInspectRectifyDataById = (params) => getAction('/esinspectreport/processEsInspectRectify/queryByProjectId', params)
/* 权限申请流程 */
// 生成项目id
const getPermissionApplyProjectId = (params) => getAction('/process/esPermissionApplyFlow/getProjectId', params)
// 详情信息
const getPermissionApplyDetail = (params) => getAction('/process/esPermissionApplyFlow/queryDetailByProjectId', params)
// 发起
const startPermissionApply = (params) => postAction('/process/esPermissionApplyFlow/flowStart', params)
// 审批
const approvalPermissionApply = (params) => postAction('/process/esPermissionApplyFlow/flowApproval', params)
// 转办
const transferPermissionApply = (params) => getAction('/process/esPermissionApplyFlow/flowTransfer', params)
// 保存
const savePermissionApply = (params) => postAction('/process/esPermissionApplyFlow/flowSave', params)
// 权限申请流程业务数据
const getPermissionApplyDataById = (params) => getAction('/espermissionapply/processEsPermissionApply/queryByProjectId', params)
export { export {
getProcessNodeList, getProcessNodeList,
@@ -441,5 +457,13 @@ export {
approvalInspectRectify, approvalInspectRectify,
transferInspectRectify, transferInspectRectify,
saveInspectRectify, saveInspectRectify,
getInspectRectifyDataById getInspectRectifyDataById,
getPermissionApplyProjectId,
getPermissionApplyDetail,
startPermissionApply,
approvalPermissionApply,
transferPermissionApply,
savePermissionApply,
getPermissionApplyDataById
} }
+25 -1
View File
@@ -198,7 +198,13 @@ export const ProcessKey = {
// 稽查延期申请流程 // 稽查延期申请流程
INSPECTION_EXTENSION_REQUEST_PROCESS: { text: 'inspect_delay_apply_process', value: 'inspect_delay_apply_process' }, INSPECTION_EXTENSION_REQUEST_PROCESS: { text: 'inspect_delay_apply_process', value: 'inspect_delay_apply_process' },
// 企标稽查整改 // 企标稽查整改
ES_INSPECTION_RECTIFICATION: { text: 'inspect_rectify', value: 'inspect_rectify' } ES_INSPECTION_RECTIFICATION: { text: 'inspect_rectify', value: 'inspect_rectify' },
// 权限申请流程
PERMISSION_APPLY: { text: 'permission_apply_process', value: 'permission_apply_process' },
// 标准宣贯流程
STANDARD_PROMOTION: { text: 'standard_declare', value: 'standard_declare' },
// 会后管理流程
POST_MEETING_MANAGE: { text: 'permission_apply_process', value: 'permission_apply_process' }
} }
// 标准性质 // 标准性质
@@ -290,6 +296,24 @@ export const EsInspectionRectification = new EsEnums({
directorToExamine: { text: '稽查负责人审核', value: 'responsible_approval', btn: 6 } directorToExamine: { text: '稽查负责人审核', value: 'responsible_approval', btn: 6 }
}) })
// 权限申请流程
export const PermissionApply = new EsEnums({
initiate: { text: '发起人申请', value: 'initiator_start', btn: 6 },
leaderApproval: { text: '发起人领导审批', value: 'leader_approval', btn: 27 },
standardApproval: { text: '标准化审批', value: 'standard_approval', btn: 27 }
})
// 标准宣贯流程
export const StandardPromotion = new EsEnums({
initiate: { text: '发起并归档', value: 'initiator_start', btn: 6 }
})
// 会后管理流程
export const PostMeetingManage = new EsEnums({
initiate: { text: '法规工程师发起', value: 'initiator_start', btn: 6 },
leaderApproval: { text: '参会人员上传材料', value: 'leader_approval', btn: 7 }
})
// 项目评估结果类型 // 项目评估结果类型
export const EvaluationResultType = new EsEnums({ export const EvaluationResultType = new EsEnums({
accordWith: { text: '符合', value: '1' }, accordWith: { text: '符合', value: '1' },
+4 -4
View File
@@ -97,10 +97,10 @@ export default {
title: this.$t('workCenter.newProcess.auditExtensionApplicationProcess'), title: this.$t('workCenter.newProcess.auditExtensionApplicationProcess'),
path: '/workCenter/InspectionExtensionRequestProcess' path: '/workCenter/InspectionExtensionRequestProcess'
}, },
{ // 企标稽查整改 // { // 企标稽查整改
title: this.$t('workCenter.newProcess.enterpriseStandardInspectionAndRectification'), // title: this.$t('workCenter.newProcess.enterpriseStandardInspectionAndRectification'),
path: '/workCenter/EnterpriseStandardInspectionRectification' // path: '/workCenter/EnterpriseStandardInspectionRectification'
}, // },
{ // 权限申请流程 { // 权限申请流程
title: this.$t('workCenter.newProcess.permissionApplicationProcess'), title: this.$t('workCenter.newProcess.permissionApplicationProcess'),
path: '/workCenter/PermissionApplicationProcess' path: '/workCenter/PermissionApplicationProcess'
@@ -55,7 +55,7 @@
<!-- 业务基本信息 --> <!-- 业务基本信息 -->
<div class="process-part-title">{{ $t('basicServiceInformation') }}</div> <div class="process-part-title">{{ $t('basicServiceInformation') }}</div>
<inspection-plan-table class="form-add" ref="inspectionPlanTable" :current-node="currentNode" :project-id="projectId"/> <inspection-plan-table style="margin-bottom: 40px;" ref="inspectionPlanTable" :current-node="currentNode" :project-id="projectId"/>
<!-- 会签表单 --> <!-- 会签表单 -->
<a-form :form="countersignForm" v-if="currentNode === EsInspectionPlan.liaisonCollect.value"> <a-form :form="countersignForm" v-if="currentNode === EsInspectionPlan.liaisonCollect.value">
<div class="form-flex-box"> <div class="form-flex-box">
@@ -426,19 +426,15 @@ export default {
*/ */
handleSubmit () { handleSubmit () {
if (this.loading) return if (this.loading) return
this.loading = true // 发起流程并且没有被驳回,调发起接口,否则调审批接口
let fn if (this.currentNode === EsInspectionPlan.initiate.value && this.$route.query.taskId) {
switch (this.currentNode) { this.handleAgree()
case EsInspectionPlan.initiate.value: return
fn = startInspectPlan
break
default:
fn = approvalInspectPlan
break
} }
this.loading = true
this.getPageParams().then(res => { this.getPageParams().then(res => {
console.log(res) console.log(res)
return fn && fn(res) return startInspectPlan(res)
}).then(res => { }).then(res => {
if (res.success) { if (res.success) {
this.$message.success(res.message) this.$message.success(res.message)
@@ -16,7 +16,7 @@
<!-- 稽查依据标准号 --> <!-- 稽查依据标准号 -->
<a-form-item :label="$t('workCenter.esInspectionPlan.inspectionBasisStandardNumber')" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item :label="$t('workCenter.esInspectionPlan.inspectionBasisStandardNumber')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<standard-selection :placeholder="$t('pleaseSelect') + $t('workCenter.esInspectionPlan.inspectionBasisStandardNumber')" <standard-selection :placeholder="$t('pleaseSelect') + $t('workCenter.esInspectionPlan.inspectionBasisStandardNumber')"
disabledSourceSearch source="3" @nameChange="changeStandardName" type="radio" disabledSourceSearch :source="StandardSource.ENTERPRISE.value" @nameChange="changeStandardName" type="radio"
v-decorator="['inspectNo', validatorRules.inspectionBasisStandardNumber]" /> v-decorator="['inspectNo', validatorRules.inspectionBasisStandardNumber]" />
</a-form-item> </a-form-item>
<!-- 稽查依据标准名称 --> <!-- 稽查依据标准名称 -->
@@ -105,6 +105,7 @@ import UserSelection from '@comp/selection/UserSelection'
import { getWorkGroupTreeList } from '@api/api' import { getWorkGroupTreeList } from '@api/api'
import WorkGroupSelection from '@comp/selection/WorkGroupSelection' import WorkGroupSelection from '@comp/selection/WorkGroupSelection'
import { addInspectPlanTable, editInspectPlanTable } from '@api/workCenter' import { addInspectPlanTable, editInspectPlanTable } from '@api/workCenter'
import { StandardSource } from '@/enums/commonEnums'
export default { export default {
name: 'InspectionPlanDrawer', name: 'InspectionPlanDrawer',
@@ -118,6 +119,7 @@ export default {
components: { WorkGroupSelection, UserSelection, StandardSelection }, components: { WorkGroupSelection, UserSelection, StandardSelection },
data () { data () {
return { return {
StandardSource,
width: 800, width: 800,
title: this.$t('workCenter.esInspectionPlan.inspectionPlan'), title: this.$t('workCenter.esInspectionPlan.inspectionPlan'),
visible: false, visible: false,
@@ -2,13 +2,13 @@
<div> <div>
<div class="table-operator" v-if="hasTableOperator"> <div class="table-operator" v-if="hasTableOperator">
<!-- 新增 --> <!-- 新增 -->
<a-button icon="plus" type="primary" @click="handleAdd" v-has="'enterpriseStandard:add'">{{ $t('newlyAdded') }}</a-button> <a-button icon="plus" type="primary" @click="handleAdd">{{ $t('newlyAdded') }}</a-button>
<!-- 导入 --> <!-- 导入 -->
<a-upload name="file" :data="{projectId}" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-upload name="file" :data="{projectId}" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button icon="upload" type="primary" ghost v-has="'enterpriseStandard:upload'">{{ $t('import') }}</a-button> <a-button icon="upload" type="primary" ghost>{{ $t('import') }}</a-button>
</a-upload> </a-upload>
<!-- 批量删除 --> <!-- 批量删除 -->
<a-button icon="delete" type="primary" ghost @click="batchDel" v-has="'enterpriseStandard:batchDel'">{{ $t('batchDelete') }}</a-button> <a-button icon="delete" type="primary" ghost @click="batchDel">{{ $t('batchDelete') }}</a-button>
</div> </div>
<div> <div>
<j-table <j-table
@@ -370,25 +370,15 @@ export default {
*/ */
handleSubmit () { handleSubmit () {
if (this.loading) return if (this.loading) return
this.loading = true // 发起流程并且没有被驳回,调发起接口,否则调审批接口
let fn if (this.currentNode === EsInspectionProcess.initiate.value && this.$route.query.taskId) {
let pass this.handleAgree()
switch (this.currentNode) { return
case EsInspectionProcess.initiate.value:
fn = startInspectProcess
break
default:
fn = approvalInspectProcess
pass = true
break
} }
this.loading = true
this.getPageParams().then(res => { this.getPageParams().then(res => {
console.log(res) console.log(res)
// 如果是审批,就默认pass为true return startInspectProcess(res)
if (pass && res.map) {
res.map.pass = pass
}
return fn && fn(res)
}).then(res => { }).then(res => {
if (res.success) { if (res.success) {
this.$message.success(res.message) this.$message.success(res.message)
@@ -11,7 +11,7 @@
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<div class="table-operator" v-if="!disabled"> <div class="table-operator" v-if="!disabled">
<!-- 新增 --> <!-- 新增 -->
<a-button icon="plus" type="primary" @click="handleAdd" v-has="'enterpriseStandard:add'">{{ $t('newlyAdded') }}</a-button> <a-button icon="plus" type="primary" @click="handleAdd">{{ $t('newlyAdded') }}</a-button>
</div> </div>
<j-table <j-table
v-if="columns && columns.length > 0" v-if="columns && columns.length > 0"
@@ -16,7 +16,7 @@
</p> </p>
<div class="table-operator" v-if="!disabled"> <div class="table-operator" v-if="!disabled">
<!-- 新增 --> <!-- 新增 -->
<a-button icon="plus" type="primary" @click="handleAdd" v-has="'enterpriseStandard:add'">{{ $t('newlyAdded') }}</a-button> <a-button icon="plus" type="primary" @click="handleAdd">{{ $t('newlyAdded') }}</a-button>
</div> </div>
<j-table <j-table
v-if="columns && columns.length > 0" v-if="columns && columns.length > 0"
@@ -16,7 +16,7 @@
</p> </p>
<div class="table-operator" v-if="!disabled"> <div class="table-operator" v-if="!disabled">
<!-- 新增 --> <!-- 新增 -->
<a-button icon="plus" type="primary" @click="handleAdd" v-has="'enterpriseStandard:add'">{{ $t('newlyAdded') }}</a-button> <a-button icon="plus" type="primary" @click="handleAdd">{{ $t('newlyAdded') }}</a-button>
</div> </div>
<j-table <j-table
v-if="columns && columns.length > 0" v-if="columns && columns.length > 0"
@@ -2,7 +2,7 @@
<div> <div>
<div class="table-operator" v-if="isInitiate"> <div class="table-operator" v-if="isInitiate">
<!-- 新增 --> <!-- 新增 -->
<a-button icon="plus" type="primary" @click="handleAdd" v-has="'enterpriseStandard:add'">{{ $t('newlyAdded') }}</a-button> <a-button icon="plus" type="primary" @click="handleAdd">{{ $t('newlyAdded') }}</a-button>
</div> </div>
<div> <div>
<j-table <j-table
@@ -348,7 +348,7 @@ export default {
*/ */
handleSave () { handleSave () {
if (this.loading) return if (this.loading) return
// this.loading = true this.loading = true
this.getPageParams(false).then(res => { this.getPageParams(false).then(res => {
console.log(res) console.log(res)
return saveInspectRectify(res) return saveInspectRectify(res)
@@ -370,7 +370,7 @@ export default {
*/ */
handleSubmit () { handleSubmit () {
if (this.loading) return if (this.loading) return
// this.loading = true this.loading = true
this.getPageParams().then(res => { this.getPageParams().then(res => {
console.log(res) console.log(res)
res.map.pass = true res.map.pass = true
@@ -371,24 +371,15 @@ export default {
*/ */
handleSubmit () { handleSubmit () {
if (this.loading) return if (this.loading) return
this.loading = true // 发起流程并且没有被驳回,调发起接口,否则调审批接口
let fn if (this.currentNode === InspectionExtensionRequestProcess.initiate.value && this.$route.query.taskId) {
let pass this.handleAgree()
switch (this.currentNode) { return
case InspectionExtensionRequestProcess.initiate.value:
fn = startInspectExtension
break
default:
fn = approvalInspectExtension
pass = true
break
} }
this.loading = true
this.getPageParams().then(res => { this.getPageParams().then(res => {
if (pass) {
res.map.pass = pass
}
console.log(res) console.log(res)
return fn && fn(res) return startInspectExtension(res)
}).then(res => { }).then(res => {
if (res.success) { if (res.success) {
this.$message.success(res.message) this.$message.success(res.message)
@@ -2,7 +2,7 @@
<div> <div>
<div class="table-operator" v-if="isInitiate"> <div class="table-operator" v-if="isInitiate">
<!-- 新增 --> <!-- 新增 -->
<a-button icon="plus" type="primary" @click="handleAdd" v-has="'enterpriseStandard:add'">{{ $t('newlyAdded') }}</a-button> <a-button icon="plus" type="primary" @click="handleAdd">{{ $t('newlyAdded') }}</a-button>
</div> </div>
<div> <div>
<j-table <j-table
@@ -1,5 +1,5 @@
<template> <template>
<internal-detail-page :title="pageTitle" :content-padding="0"> <internal-detail-page :title="pageTitle" :content-padding="0" :loading="loading">
<!-- 标题右侧tab --> <!-- 标题右侧tab -->
<template v-slot:titleRightCustom> <template v-slot:titleRightCustom>
<div class="table-operator-tab"> <div class="table-operator-tab">
@@ -27,7 +27,7 @@
@change="event => event.target.value = event.target.value.trim()" @change="event => event.target.value = event.target.value.trim()"
:maxLength="50" :maxLength="50"
:disabled="disabled || processDisabled" :disabled="disabled || processDisabled"
v-decorator="['processName', validatorRules.processName]" /> v-decorator="['prcName', validatorRules.processName]" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
@@ -36,8 +36,8 @@
<a-date-picker :placeholder="$t('pleaseSelect') + $t('expirationDate')" <a-date-picker :placeholder="$t('pleaseSelect') + $t('expirationDate')"
style="width: 100%" style="width: 100%"
:disabled="disabled || processDisabled" :disabled="disabled || processDisabled"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD hh:mm:ss"
v-decorator="['expirationDate']" /> v-decorator="['dueTime']" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
@@ -47,7 +47,7 @@
:maxLength="500" :maxLength="500"
:rows="4" :rows="4"
:disabled="disabled || processDisabled" :disabled="disabled || processDisabled"
v-decorator="['processExplain']" /> v-decorator="['prcMes']" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
@@ -57,48 +57,48 @@
<div class="process-part-title">{{ $t('basicServiceInformation') }}</div> <div class="process-part-title">{{ $t('basicServiceInformation') }}</div>
<!-- 标准表格 --> <!-- 标准表格 -->
<base-info-table v-if="currentNode === '1'" ref="baseInfoTable"></base-info-table> <base-info-table v-if="isInitiate" ref="baseInfoTable" style="margin-bottom: 40px;"></base-info-table>
<!-- 表单 --> <!-- 表单 -->
<a-form :form="baseInfoForm"> <a-form :form="baseInfoForm">
<a-row> <a-row>
<a-col :span="12" v-if="currentNode === '1'"> <a-col :span="8" v-if="isInitiate">
<!-- 授权到期日期 --> <!-- 授权到期日期 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.permissionApplicationProcess.authExpirationDate')"> <a-form-item :labelCol="labelColBaseInfo" :wrapperCol="wrapperColBaseInfo" :label="$t('workCenter.permissionApplicationProcess.authExpirationDate')">
<j-date date-format="YYYY-MM-DD" style="width: 100%" showType="day" :disabled="disabled" <j-date date-format="YYYY-MM-DD" style="width: 100%" showType="day" :disabled="disabled"
:placeholder="$t('pleaseSelect') + $t('workCenter.permissionApplicationProcess.authExpirationDate')" :placeholder="$t('pleaseSelect') + $t('workCenter.permissionApplicationProcess.authExpirationDate')"
v-decorator="['authExpirationDate', validatorRules.authExpirationDate]" /> v-decorator="['expirationDate', validatorRules.authExpirationDate]" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<template v-if="currentNode > 1"> <template v-if="!isInitiate">
<a-col :span="12"> <a-col :span="8">
<!-- 申请人 --> <!-- 申请人 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.permissionApplicationProcess.applicant')"> <a-form-item :labelCol="labelColBaseInfo" :wrapperCol="wrapperColBaseInfo" :label="$t('workCenter.permissionApplicationProcess.applicant')">
<a-input :placeholder="$t('pleaseEnter') + $t('workCenter.permissionApplicationProcess.applicant')" <a-input :placeholder="$t('pleaseEnter') + $t('workCenter.permissionApplicationProcess.applicant')"
@change="event => event.target.value = event.target.value.trim()" @change="event => event.target.value = event.target.value.trim()"
:maxLength="50" :maxLength="50"
:disabled="disabled" :disabled="disabled"
v-decorator="['applicant', validatorRules.applicant]" /> v-decorator="['userIdDictText', validatorRules.applicant]" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="8">
<!-- 申请权限 --> <!-- 申请权限 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.permissionApplicationProcess.applyForPermission')"> <a-form-item :labelCol="labelColBaseInfo" :wrapperCol="wrapperColBaseInfo" :label="$t('workCenter.permissionApplicationProcess.applyForPermission')">
<a-input :placeholder="$t('pleaseEnter') + $t('workCenter.permissionApplicationProcess.applyForPermission')" <a-input :placeholder="$t('pleaseEnter') + $t('workCenter.permissionApplicationProcess.applyForPermission')"
@change="event => event.target.value = event.target.value.trim()" @change="event => event.target.value = event.target.value.trim()"
:maxLength="50" :maxLength="50"
:disabled="disabled" :disabled="disabled"
v-decorator="['applyForPermission', validatorRules.applyForPermission]" /> v-decorator="['standardNumbers', validatorRules.applyForPermission]" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</template> </template>
<a-col :span="12"> <a-col :span="8">
<!-- 申请说明 --> <!-- 申请说明 -->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.permissionApplicationProcess.applicationDescription')"> <a-form-item :labelCol="labelColBaseInfo" :wrapperCol="wrapperColBaseInfo" :label="$t('workCenter.permissionApplicationProcess.applicationDescription')">
<a-textarea :placeholder="$t('pleaseSelect') + $t('workCenter.permissionApplicationProcess.applicationDescription')" <a-textarea :placeholder="$t('pleaseSelect') + $t('workCenter.permissionApplicationProcess.applicationDescription')"
:maxLength="500" :maxLength="500"
:rows="4" :rows="4"
:disabled="disabled" :disabled="disabled"
v-decorator="['applicationDescription', validatorRules.applicationDescription]" /> v-decorator="['applyDetail', validatorRules.applicationDescription]" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
@@ -111,73 +111,65 @@
<a-textarea :placeholder="$t('pleaseEnter') + $t('remarks')" <a-textarea :placeholder="$t('pleaseEnter') + $t('remarks')"
:maxLength="500" :maxLength="500"
:rows="4" :rows="4"
v-decorator="['remarks', validatorRules.remarks]" /> v-decorator="['commitText', validatorRules.remarks]" />
</a-form-item> </a-form-item>
<!--附件--> <!--附件-->
<a-form-item :labelCol="longLabelCol" :wrapperCol="longWrapperCol" :label="$t('businessSupport.questionAnswer.attach')"> <a-form-item :labelCol="longLabelCol" :wrapperCol="longWrapperCol" :label="$t('businessSupport.questionAnswer.attach')">
<j-upload v-decorator="['file']" return-id /> <j-upload v-decorator="['commitFile']" return-id />
</a-form-item> </a-form-item>
</a-form> </a-form>
</div> </div>
<!-- 人员信息 --> <!-- 人员信息 -->
<div v-if="switchValue === 'user'" class="detail-page-scroll-content p-0"> <div v-show="switchValue === 'user'" class="detail-page-scroll-content p-0">
<process-detail-list :url="url"> <process-detail-list :process-key="processKey">
<personnel-info slot="personnelInfo" :data="personnelInfoData" :currentNode="currentNode"></personnel-info> <template #personnelInfo>
<personnel-info ref="personnelInfo" :data="personnelInfoData" :current-node="currentNodeName" />
</template>
</process-detail-list> </process-detail-list>
</div> </div>
<div class="detail-page-bottom-operate-box"> <div class="detail-page-bottom-operate-box">
<a-button type="primary" :loading="loading" @click="handleSave" ghost><i class="iconfont icon-save" />{{ $t('preservation') }}</a-button> <!--转办-->
<a-button type="primary" :loading="loading" @click="handleSubmit" icon="upload">{{ $t('submit') }}</a-button> <a-button v-if="1 & btn" type="primary" :loading="loading" @click="handleTurnTo" ghost icon="arrow-up">{{ $t('turnTo') }}</a-button>
<a-button type="primary" :loading="loading" @click="handleAgree" icon="check-circle">{{ $t('agree') }}</a-button> <!--保存-->
<a-button v-if="2 & btn" type="primary" :loading="loading" @click="handleSave" ghost><i class="iconfont icon-save" />{{ $t('preservation') }}</a-button>
<!--提交-->
<a-button v-if="4 & btn" type="primary" :loading="loading" @click="handleSubmit" icon="upload">{{ $t('submit') }}</a-button>
<!--同意-->
<a-button v-if="8 & btn" type="primary" :loading="loading" @click="handleAgree" icon="check-circle">{{ $t('agree') }}</a-button>
<!--驳回-->
<a-button v-if="16 & btn" type="primary" :loading="loading" @click="handleReject" icon="close-circle">{{ $t('reject') }}</a-button>
</div> </div>
<!--转办选人-->
<user-select-modal ref="userSelectModal" check-required @change="continueTurnTo" />
</internal-detail-page> </internal-detail-page>
</template> </template>
<script> <script>
import '@assets/less/common.less'
import InternalDetailPage from '@comp/InternalDetailPage' import InternalDetailPage from '@comp/InternalDetailPage'
import ProcessDetailList from '@comp/ProcessDetailList' import ProcessDetailList from '@comp/ProcessDetailList'
import PersonnelInfo from '@comp/PersonnelInfo' import PersonnelInfo from '@comp/PersonnelInfo'
import BaseInfoTable from '@views/workCenter/permissionApplicationProcess/modules/BaseInfoTable' import BaseInfoTable from '@views/workCenter/permissionApplicationProcess/modules/BaseInfoTable'
import UserSelectModal from '@comp/selection/UserSelectModal'
// 标准立项的人员信息 import { WorkCenterMixin } from '@/mixins/WorkCenterMixin'
const approvalPersonalInfo = [ // 人员信息的数据 import { PermissionApply, ProcessKey } from '@/enums/commonEnums'
{ import {
id: 1, approvalPermissionApply, getPermissionApplyDataById,
nodeName: '稽查负责人申请延期', getPermissionApplyDetail,
nodeRoleName: '稽查负责人', getPermissionApplyProjectId,
canChoose: false, savePermissionApply, startPermissionApply,
userList: `系统管理员` transferPermissionApply
}, } from '@api/workCenter'
{
id: 2,
nodeName: '负责人主管级领导审批',
nodeRoleName: '负责人主管级领导',
canChoose: true,
chooseType: 'radio',
// chooseSource: 'contactManage',
fieldName: 'contactUser'
},
{
id: 3,
nodeName: '稽查联络人评估',
nodeRoleName: '稽查联络人',
canChoose: false,
chooseType: 'checkbox',
// chooseSource: 'contactManage',
fieldName: 'contactUser'
}
]
export default { export default {
name: 'PermissionApplicationProcess', name: 'PermissionApplicationProcess',
components: { BaseInfoTable, PersonnelInfo, ProcessDetailList, InternalDetailPage }, components: { UserSelectModal, BaseInfoTable, PersonnelInfo, ProcessDetailList, InternalDetailPage },
mixins: [WorkCenterMixin],
data () { data () {
return { return {
loading: false, loading: false,
switchValue: 'base', switchValue: 'base',
disabled: false,
labelCol: { labelCol: {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 4 } sm: { span: 4 }
@@ -194,8 +186,25 @@ export default {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 22 } sm: { span: 22 }
}, },
currentNode: '1', labelColBaseInfo: {
personnelInfoData: [], // 人员信息数据 xs: { span: 24 },
sm: { span: 8 }
},
wrapperColBaseInfo: {
xs: { span: 24 },
sm: { span: 16 }
},
// 流程key
processKey: ProcessKey.PERMISSION_APPLY.value,
// 当前流程信息
PermissionApply,
info: {},
formInfo: {},
currentNode: '',
currentNodeName: '',
// 项目id
projectId: '',
btn: 0,
validatorRules: { validatorRules: {
// 流程名称 // 流程名称
processName: { processName: {
@@ -219,41 +228,345 @@ export default {
validateTrigger: 'blur' validateTrigger: 'blur'
} }
}, },
// 流程表单
processInfoForm: this.$form.createForm(this), processInfoForm: this.$form.createForm(this),
// 业务表单
baseInfoForm: this.$form.createForm(this), baseInfoForm: this.$form.createForm(this),
approvalInfoForm: this.$form.createForm(this), // 流程审批信息表单
url: { approvalInfoForm: this.$form.createForm(this)
list: '' // 人员信息右侧表的分页查询接口
}
} }
}, },
computed: { computed: {
pageTitle () { pageTitle () {
return this.$t('flowCenter') + this.$route.meta.title return this.$t('flowCenter') + this.$route.meta.title + '(' + this.nodeTitle + ')'
}, },
// 节点标题
nodeTitle () {
return this.$route.query.taskName || PermissionApply.initiate.text
},
// 禁用业务表单
disabled () {
return !this.isInitiate
},
// 流程信息禁用
processDisabled () { processDisabled () {
return +this.currentNode > 1 return this.currentNode !== PermissionApply.initiate.value
},
// 是否发起节点(节点1)
isInitiate () {
return this.currentNode === PermissionApply.initiate.value
} }
// leaderApproval
// standardApproval
},
created () {
const { projectId, nodeId, taskName } = this.$route.query
// 发起、草稿进来没有nodeId,就默认发起节点
this.currentNode = nodeId || PermissionApply.initiate.value
this.currentNodeName = taskName || PermissionApply.initiate.text
this.projectId = projectId
this.btn = PermissionApply.propertyOfValue('btn', this.currentNode) || 0
// 如果有nodeId,但是匹配不到任何节点,就是是增加的审批节点
if (nodeId && !PermissionApply.keyOfValue(nodeId)) {
// 审批和同意按钮
this.btn = 24
}
// 查询人员信息
this.getPersonInfoStructure(this.processKey, () => {
this.initPersonInfoData(this.currentNode === PermissionApply.initiate.value)
})
// 如果是待办进来,就获取详情数据
if (this.$route.query.projectId) {
this.loadPage()
return
}
// 如果是新建进来,就获取项目id
this.getProjectId()
}, },
methods: { methods: {
switchChange (value) { /**
this.switchValue = value * 获取项目id
*/
getProjectId () {
this.loading = true
// 否则就是创建一个新的流程
getPermissionApplyProjectId().then(res => {
if (res) {
this.projectId = res + ''
}
}).finally(() => {
this.loading = false
})
}, },
handleSave () { /**
// if (this.loading) return * 获取页面详情
*/
loadPage () {
const { projectId, taskId } = this.$route.query
this.loading = true
// 获取业务数据
getPermissionApplyDataById({ projectId: this.projectId }).then(res => {
if (res.success) {
const data = res.result || {}
if (this.isInitiate) {
// 节点一保存时回显表格
this.$refs.baseInfoTable.setData(data.lawsEnterpriseStandardList || [])
}
// 保存并回显表单信息
this.formInfo = data
this.baseInfoForm.setFieldsValue({
expirationDate: data.expirationDate,
userIdDictText: data.userIdDictText,
standardNumbers: data.standardNumbers,
applyDetail: data.applyDetail
})
}
})
// 获取流程数据
getPermissionApplyDetail({
projectId,
taskId
}).then(res => {
if (res.success) {
const data = res.result || {}
const processAll = data.processAll || {}
const processApprovalRecord = data.processApprovalRecord || {}
this.info = data
// 页面回显
this.processInfoForm && this.processInfoForm.setFieldsValue({
prcName: processAll.prcName,
dueTime: processAll.dueTime,
prcMes: processAll.prcMes
})
this.approvalInfoForm && this.approvalInfoForm.setFieldsValue({
commitText: processApprovalRecord.commitText,
commitFile: processApprovalRecord.commitFile
})
}
}).finally(() => {
this.loading = false
})
},
// 获取人员信息
getPersonInfo (isValidate = true) {
let personnelObj = {}
const funName = isValidate ? 'getDataObjVerify' : 'getDataObj'
// 节点1:所有的人员信息
if (this.currentNode === PermissionApply.initiate.value) {
// 人员信息的数据, 处理成对象
personnelObj = this.$refs.personnelInfo[funName]()
if (!personnelObj) {
return false
}
// List拆成数组
for (const key in personnelObj) {
if (personnelObj[key] && key.includes('List')) {
personnelObj[key] = personnelObj[key].split(',')
}
}
}
return personnelObj
},
// 获取页面参数
async getPageParams (isValidate = true) {
// 节点1判断表格是否有数据
if (this.isInitiate && this.$refs.baseInfoTable.dataSource.length === 0) {
this.$message.warning(this.$t('addAtLeastOneRowOfData'))
throw new Error('base')
}
const params = {}
// 收集所有表单信息
let formDataList = []
if (isValidate) {
formDataList = await this.validateFormList(this.processInfoForm, this.approvalInfoForm, this.baseInfoForm)
} else {
formDataList = [
this.processInfoForm.getFieldsValue(),
this.approvalInfoForm.getFieldsValue(),
this.baseInfoForm.getFieldsValue()
]
}
// 收集人员信息
const getPersonInfo = this.getPersonInfo(isValidate)
if (!getPersonInfo) {
throw new Error('user')
}
// 开始处理信息
// 流程信息
params.processAll = Object.assign({}, this.info.processAll, formDataList[0], {
projectId: this.projectId,
taskId: this.$route.query.taskId
})
// 处理其他参数
params.map = Object.assign({}, getPersonInfo)
// 流程审批信息
params.processApprovalRecord = Object.assign({}, this.info.processApprovalRecord, formDataList[1], {
projectId: this.projectId
})
// 处理业务信息
params.processEsPermissionApply = Object.assign({}, formDataList[2], {
projectId: this.projectId,
id: this.formInfo.id
})
// 节点1带上表格中的所有标准号和当前登录人(申请人)
if (this.isInitiate) {
params.processEsPermissionApply.standardNumbers = this.$refs.baseInfoTable.getStandardNumbers()
params.processEsPermissionApply.userId = this.$store.getters.userInfo.id
}
return params
}, },
/**
* 转办弹框
*/
handleTurnTo () {
this.$refs.userSelectModal.open()
},
/**
* 转办
*/
continueTurnTo (userId) {
if (this.loading) return
this.loading = true
const params = {
taskId: this.$route.query.taskId,
userId
}
transferPermissionApply(params).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warn(res.message)
}
}).finally(() => {
this.loading = false
})
},
/**
* 保存
*/
handleSave () {
if (this.loading) return
this.loading = true
this.getPageParams(false).then(res => {
console.log(res)
return savePermissionApply(res)
}).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warn(res.message)
}
}).catch((err) => {
console.log(err)
}).finally(() => {
this.loading = false
})
},
/**
* 提交
*/
handleSubmit () { handleSubmit () {
if (this.loading) return if (this.loading) return
this.currentNode = +this.currentNode + 1 + '' // 发起流程并且没有被驳回,调发起接口,否则调审批接口
if (this.currentNode === PermissionApply.initiate.value && this.$route.query.taskId) {
this.handleAgree()
return
}
this.loading = true
this.getPageParams().then(res => {
console.log(res)
return startPermissionApply(res)
}).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warn(res.message)
}
}).catch((err) => {
this.switchChange(err.message)
}).finally(() => {
this.loading = false
})
}, },
/**
* 同意
*/
handleAgree () { handleAgree () {
if (this.loading) return if (this.loading) return
this.currentNode = +this.currentNode + 1 + '' this.loading = true
this.getPageParams().then(res => {
res.map.pass = true
return approvalPermissionApply(res)
}).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warn(res.message)
}
}).catch((err) => {
this.switchChange(err.message)
}).finally(() => {
this.loading = false
})
},
/**
* 驳回
*/
handleReject () {
if (this.loading) return
// 驳回需要填写备注
if (!this.approvalInfoForm.getFieldValue('commitText')) {
this.$message.warning(this.$t('pleaseEnterRemarks'))
return
}
this.loading = true
this.getPageParams().then(res => {
res.map.pass = false
return approvalPermissionApply(res)
}).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warn(res.message)
}
}).catch((err) => {
this.switchChange(err.message)
}).finally(() => {
this.loading = false
})
},
/**
* 验证所有表单
* @param formList - 多个需要校验的表单实例
*/
validateFormList (...formList) {
const promiseList = []
for (const form of formList) {
promiseList.push(
new Promise((resolve, reject) => {
form.validateFields((err, val) => {
if (!err) {
resolve(val)
} else {
reject(err)
}
})
})
)
}
return Promise.all(promiseList).catch(() => {
throw new Error('base')
})
} }
},
mounted () {
this.personnelInfoData = approvalPersonalInfo
} }
} }
</script> </script>
@@ -2,7 +2,7 @@
<div> <div>
<div class="table-operator"> <div class="table-operator">
<!-- 新增 --> <!-- 新增 -->
<a-button icon="plus" type="primary" @click="handleAdd" v-has="'enterpriseStandard:add'">{{ $t('newlyAdded') }}</a-button> <a-button icon="plus" type="primary" @click="handleAdd">{{ $t('newlyAdded') }}</a-button>
</div> </div>
<div> <div>
<j-table <j-table
@@ -11,75 +11,35 @@
:dataSource="dataSource" :dataSource="dataSource"
:can-drag="true" :can-drag="true"
rowKey="id" rowKey="id"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" :row-selection="null"
:pagination="ipagination" :pagination="false"
:scroll="{x: '100%'}" :scroll="{x: '100%'}"
@change="tableOnChange"> @change="tableOnChange">
<!-- 企标号、企标名称 -->
<template v-slot:standard="{text, record}">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
<a class="table-text can-click-table-text" @click="detailClick(record)" v-if="(text || text === 0) && record.detailFlag">{{ text }}</a>
<div class="table-text" v-else-if="(text || text === 0) && !record.detailFlag">{{ text }}</div>
<div class="table-text" v-else>{{ global.emptyLine }}</div>
</a-tooltip>
</template>
<!-- 操作 --> <!-- 操作 -->
<template slot="action" slot-scope="{text, record, index}"> <template slot="action" slot-scope="{text, record, index}">
<a @click="handleDelete(record, index)" >{{ $t('delete') }}</a> <a @click="handleDelete(index)" >{{ $t('delete') }}</a>
</template> </template>
</j-table> </j-table>
</div> </div>
<standard-selection v-show="false" ref="standardSelection" @change="changeStandardSelect"/> <standard-selection v-show="false" :source="StandardSource.ENTERPRISE.value" disabledSourceSearch ref="standardSelection" :excludeStandardNumbers="excludeStandardNumbers" @listChange="changeStandardSelect"/>
</div> </div>
</template> </template>
<script> <script>
import { JeroListMixin } from '@/mixins/JeroListMixin'
import JTable from '@comp/jero/JTable' import JTable from '@comp/jero/JTable'
import StandardSelection from '@comp/selection/StandardSelection' import StandardSelection from '@comp/selection/StandardSelection'
import { StandardSource } from '@/enums/commonEnums'
export default { export default {
name: 'BaseInfoTable', name: 'BaseInfoTable',
components: { StandardSelection, JTable }, components: { StandardSelection, JTable },
mixins: [JeroListMixin],
data () { data () {
return { return {
url: { StandardSource,
list: ''
},
model: {}, model: {},
dataSource: [ dataSource: [],
{
id: 1,
inspectionBasisStandardName: '123',
inspectionBasisStandardNumber: '123',
detailFlag: true,
departOpinion: '123',
mainDutyStandardizationGroup: '1699358097292472322'
},
{
id: 3,
inspectionBasisStandardName: 'qaaa',
inspectionBasisStandardNumber: '12asdasdas3',
detailFlag: true,
departOpinion: '123',
opinion: [],
mainDutyStandardizationGroup: '1699358097292472322'
},
{
id: 2,
inspectionBasisStandardName: '123',
inspectionBasisStandardNumber: '123',
detailFlag: true,
departOpinion: '123',
userId: 'e9ca23d68d884d4ebb19d07889727dae'
// mainDutyStandardizationGroup: '1699358097292472322'
}
],
columns: [ columns: [
{ {
title: this.$t('serialNumber'), title: this.$t('serialNumber'),
@@ -95,21 +55,20 @@ export default {
title: this.$t('workCenter.esInspectionPlan.inspectionBasisStandardNumber'), title: this.$t('workCenter.esInspectionPlan.inspectionBasisStandardNumber'),
align: 'center', align: 'center',
width: 180, width: 180,
dataIndex: 'inspectionBasisStandardNumber', dataIndex: 'standardName',
scopedSlots: { customRender: 'standard' } scopedSlots: { customRender: 'text' }
}, },
{ // 企标名称 { // 企标名称
title: this.$t('workCenter.esInspectionPlan.inspectionBasisStandardName'), title: this.$t('workCenter.esInspectionPlan.inspectionBasisStandardName'),
align: 'center', align: 'center',
width: 180, width: 180,
dataIndex: 'inspectionBasisStandardName', dataIndex: 'standardNumber',
scopedSlots: { customRender: 'standard' } scopedSlots: { customRender: 'text' }
}, },
{ {
// 操作 // 操作
fixed: 'right',
title: this.$t('operation'), title: this.$t('operation'),
// dataIndex: 'action', dataIndex: 'action',
align: 'center', align: 'center',
width: 100, width: 100,
scopedSlots: { customRender: 'action' } scopedSlots: { customRender: 'action' }
@@ -117,13 +76,34 @@ export default {
] ]
} }
}, },
computed: {
// 已选的标准编号
excludeStandardNumbers () {
return this.dataSource.map(item => item.standardNumber).join(',')
}
},
methods: { methods: {
// 回显表格数据
setData (data) {
this.dataSource = data
},
// 新增 // 新增
handleAdd () { handleAdd () {
this.$refs.standardSelection.standardClick() this.$refs.standardSelection.standardClick()
}, },
// 删除
handleDelete (index) {
this.$confirm({
title: this.$t('confirmDeletion'),
content: this.$t('areYouSure'),
onOk: () => {
this.dataSource.splice(index, 1)
}
})
},
// 添加标准回调
changeStandardSelect (val) { changeStandardSelect (val) {
console.log(val) this.dataSource = [...this.dataSource, ...val]
}, },
// 跳转详情 // 跳转详情
detailClick (record) { detailClick (record) {
@@ -140,8 +120,9 @@ export default {
this.ipagination = pagination this.ipagination = pagination
this.getTableList() this.getTableList()
}, },
getIds () { // 获取所有标准号
return this.dataSource.map(item => item.id).join(',') getStandardNumbers () {
return this.dataSource.map(item => item.standardNumber).join(',')
} }
} }
} }
@@ -177,6 +177,18 @@ export default {
case '19': case '19':
path = '/workCenter/EnterpriseStandardInspectionRectification' path = '/workCenter/EnterpriseStandardInspectionRectification'
break break
// 权限申请流程
case '20':
path = '/workCenter/PermissionApplicationProcess'
break
// 标准宣贯流程
case '21':
path = '/workCenter/StandardPromotionProcess'
break
// 会后管理流程
case '22':
path = '/workCenter/PostMeetingManageProcess'
break
} }
this.$router.push({ this.$router.push({
path: path, path: path,
@@ -216,6 +216,18 @@ export default {
case '19': case '19':
path = '/workCenter/EnterpriseStandardInspectionRectification' path = '/workCenter/EnterpriseStandardInspectionRectification'
break break
// 权限申请流程
case '20':
path = '/workCenter/PermissionApplicationProcess'
break
// 标准宣贯流程
case '21':
path = '/workCenter/StandardPromotionProcess'
break
// 会后管理流程
case '22':
path = '/workCenter/PostMeetingManageProcess'
break
} }
this.$router.push({ this.$router.push({
path: path, path: path,