[update] 联调企标计划立项、变更流程,画年度制修订计划-各部门主动上报流程页面

This commit is contained in:
lideqin
2023-10-17 18:04:50 +08:00
parent 4436670c21
commit 41adfa6baf
14 changed files with 1078 additions and 240 deletions
+5 -2
View File
@@ -13,13 +13,15 @@ const deleteFlowNode = (params) => postAction('/activitiModel/deleteTask', param
// 转办
const enterprisePlanApprovalTurnTo = (params) => postAction('/process/es/initChange/transfer', params)
// 同意
const enterprisePlanApprovalAgree = (params) => postAction('', params)
const enterprisePlanApprovalAgree = (params) => postAction('/process/es/initChange/agree', params)
// 驳回
const enterprisePlanApprovalReject = (params) => postAction('', params)
const enterprisePlanApprovalReject = (params) => postAction('/process/es/initChange/reject', params)
// 确定
const enterprisePlanApprovalDetermine = (params) => postAction('', params)
// 节点一的提交————发起流程
const enterprisePlanApproval = (params) => postAction('/process/es/initChange/start', params)
// 其他节点的提交
const enterprisePlanApprovalSubmit = (params) => postAction('', params)
// 保存
const enterprisePlanApprovalSave = (params) => postAction('/process/es/initChange/save', params)
// 根据三个编号和年代号获取企标编号
@@ -43,6 +45,7 @@ export {
enterprisePlanApprovalReject,
enterprisePlanApprovalDetermine,
enterprisePlanApproval,
enterprisePlanApprovalSubmit,
enterprisePlanApprovalSave,
getEnStandardNo,
getProcessDataById,
+1
View File
@@ -157,6 +157,7 @@ module.exports = {
addAtLeastOneRowOfData: 'Please Add At Least One Row Of Data',
mergeStandardInformation: '合并标准信息',
pleaseEnterPersonnelInfo: '请完整填写人员信息',
pleaseEnterRemarks: '请填写备注',
// 树右键
treeRight: {
addFolder: 'Create New Folder',
+2 -1
View File
@@ -90,7 +90,8 @@ module.exports = {
whetherToSendAContact: '是否下发联络人',
workingGroupContactPerson: '工作组/所联络人',
contactSupervisorSuperiorLeader: '联络人主管级上一级领导',
affiliatedWorkingGroup: '隶属工作组'
affiliatedWorkingGroup: '隶属工作组',
contactsSupervisorLevelLeaders: '收集联络人主管级领导'
},
// 流程配置
processConfig: {
+2 -1
View File
@@ -90,7 +90,8 @@ module.exports = {
whetherToSendAContact: '是否下发联络人',
workingGroupContactPerson: '工作组/所联络人',
contactSupervisorSuperiorLeader: '联络人主管级上一级领导',
affiliatedWorkingGroup: '隶属工作组'
affiliatedWorkingGroup: '隶属工作组',
contactsSupervisorLevelLeaders: '收集联络人主管级领导'
},
// 流程配置
processConfig: {
+2 -1
View File
@@ -160,6 +160,7 @@ module.exports = {
addAtLeastOneRowOfData: '请至少添加一行数据',
mergeStandardInformation: '合并标准信息',
pleaseEnterPersonnelInfo: '请完整填写人员信息',
pleaseEnterRemarks: '请填写备注',
// 树右键
treeRight: {
addFolder: '新增文件夹',
@@ -419,7 +420,7 @@ module.exports = {
changePermissions: '更改权限',
pleaseSelectUser: '请选择一个用户',
longTermEffectiveness: '是否长期有效',
selectFileType: '请选择文件类型',
onlyWord: '只能导入word文件',
fileType: '文件类型',
@@ -3,16 +3,18 @@
<!-- 标题右侧tab -->
<template v-slot:titleRightCustom>
<div class="table-operator-tab">
<!-- 基础信息 -->
<a class="switch-item" :class="switchValue === 'base' ? 'table-operator-tab-active' : ''"
@click="switchChange('base')">基础信息
@click="switchChange('base')">{{ $t('basicInformation') }}
</a>
<!-- 人员信息 -->
<a class="switch-item" :class="switchValue === 'user' ? 'table-operator-tab-active' : ''"
@click="switchChange('user')">人员信息
@click="switchChange('user')">{{ $t('personalInformation') }}
</a>
</div>
</template>
<!-- 基础信息 -->
<div v-if="switchValue === 'base'" class="scroll-content">
<div v-if="switchValue === 'base'" class="detail-page-scroll-content">
<!-- 流程信息 -->
<div class="process-part-title">{{ $t('processInformation') }}</div>
<a-form :form="processInfoForm">
@@ -47,6 +49,16 @@
v-decorator="['processExplain']" />
</a-form-item>
</a-col>
<a-col :span="24" v-if="[2, 3, 4, 5].includes(currentNode)">
<!-- 制修订计划说明 -->
<a-form-item :labelCol="longLabelCol" :wrapperCol="longWrapperCol" :label="$t('workCenter.revisionPlanActivelyReport.revisionPlanDesc')">
<a-textarea :placeholder="$t('pleaseEnter') + $t('workCenter.revisionPlanActivelyReport.revisionPlanDesc')"
:maxLength="500"
:rows="4"
disabled
v-decorator="['revisionPlanDesc']" />
</a-form-item>
</a-col>
</a-row>
</a-form>
@@ -56,6 +68,12 @@
<engineer-init-form v-if="currentNode === 1" ref="basicInfoFormRef"></engineer-init-form>
<!-- 节点2各部所联络人填写/下发任务 -->
<contact-enter-send-task-form v-if="currentNode === 2" ref="basicInfoFormRef"></contact-enter-send-task-form>
<!-- 节点3工作组所联络人填写企标-->
<contact-enter-standard-form v-if="currentNode === 3" ref="basicInfoFormRef"></contact-enter-standard-form>
<!-- 节点4收集联络人主管级领导审批 只有表格,不能操作 -->
<only-table-form v-if="[4, 6, 7].includes(currentNode)" disabled ref="basicInfoFormRef"></only-table-form>
<!-- 节点5各部所联络人汇总 只有表格可操作 -->
<only-table-form v-if="currentNode === 5" ref="basicInfoFormRef"></only-table-form>
<!-- 流程审批信息 -->
<div class="process-part-title">{{ $t('processApprovalInformation') }}</div>
@@ -75,11 +93,48 @@
</div>
<!-- 人员信息 -->
<div v-if="switchValue === 'user'" class="scroll-content">
<div v-if="switchValue === 'user'" class="detail-page-scroll-content p-0">
<process-detail-list :url="url">
<personnel-info slot="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].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 === 7">
<!-- 提交 -->
<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">{{ $t('agree') }}</a-button>
<!-- 驳回 -->
<a-button type="primary" :loading="loading" @click="handleReject" icon="close-circle">{{ $t('reject') }}</a-button>
</template>
</div>
<!-- 选人弹框 -->
<user-select-modal ref="userSelectModal" type="radio" @change="userSelectModalChange"></user-select-modal>
</internal-detail-page>
</template>
@@ -89,6 +144,9 @@ import InternalDetailPage from '@/components/InternalDetailPage'
import PersonnelInfo from '@/components/PersonnelInfo'
import ContactEnterSendTaskForm from './modules/ContactEnterSendTaskForm'
import ProcessDetailList from '../../../components/ProcessDetailList'
import ContactEnterStandardForm from './modules/ContactEnterStandardForm'
import OnlyTableForm from './modules/OnlyTableForm'
import UserSelectModal from '@/components/selection/UserSelectModal'
const personData = [
{
@@ -143,7 +201,16 @@ const personData = [
export default {
name: 'RevisionPlanActivelyReportFlow',
components: { ProcessDetailList, ContactEnterSendTaskForm, EngineerInitForm, InternalDetailPage, PersonnelInfo },
components: {
OnlyTableForm,
ContactEnterStandardForm,
ProcessDetailList,
ContactEnterSendTaskForm,
EngineerInitForm,
InternalDetailPage,
PersonnelInfo,
UserSelectModal
},
computed: {
pageTitle () {
return this.$t('flowCenter') + this.$route.meta.title
@@ -157,6 +224,11 @@ export default {
return { ...item, canChoose: false }
})
}
// 如果是查看进入的,不可编辑,不可操作
if (this.$route.query.onlyLook) {
this.onlyLook = this.$route.query.onlyLook
this.disabled = this.$route.query.onlyLook
}
},
data () {
return {
@@ -200,7 +272,7 @@ export default {
validateTrigger: 'blur'
}
},
currentNode: 2,
currentNode: 1,
approvalInfoForm: this.$form.createForm(this), // 审批信息表单
personnelInfoData: [], // 人员信息数据
url: {
@@ -212,32 +284,123 @@ export default {
methods: {
switchChange (value) {
this.switchValue = value
},
// 保存
handleSave () {
// 有任意一项填了即可
// 流程信息表单
const processInfoForm = this.processInfoForm.getFieldsValue()
// 业务基本信息
let ruleForm = {}
if ([1, 2, 3].includes(this.currentNode)) {
// 业务基本信息中有表单
ruleForm = this.$refs.basicInfoFormRef.formInline
}
if ([2, 3, 5].includes(this.currentNode)) {
// 业务基础信息中有可编辑表格 todo: 看后端要什么格式
}
// 流程审批信息
const approvalInfoForm = this.approvalInfoForm.getFieldsValue()
// 人员信息的数据, 处理成对象
const personnelInfo = this.$refs.personnelInfo.stepsData
const personnelObj = {}
for (const item of personnelInfo) {
if (item.fieldName) {
personnelObj[item.fieldName] = item.user
}
}
// 需要传给后端的
// 业务基本信息
if (this.$refs.basicInfoFormRef) {
} else {
// 需要外层信息至少填了一项
const param = { ...processInfoForm, ...ruleForm, ...approvalInfoForm, ...personnelObj }
const flag = Object.values(param).some(v => !!v || v === 0)
if (!flag) {
// 提示至少填写一项
this.$message.warning(this.$t('pleaseFillInAtLeastOneItem'))
return
}
}
// 保存到草稿
// enterprisePlanApprovalSave(arr).then(res => {
// if (res.success) {
// this.$message.success(res.message)
// } else {
// this.$message.warning(res.message)
// }
// })
},
// 节点一时候的提交,发起变更
handleStart () {
if (this.loading) return
// 人员信息的数据, 处理成对象
const personnelInfo = this.$refs.personnelInfo.stepsData
const personnelObj = {}
for (const item of personnelInfo) {
if (item.fieldName) {
personnelObj[item.fieldName] = item.user
}
}
// 校验是否填了所有能填的人员信息
if (!Object.values(personnelObj).every(v => !!v)) {
this.$message.warning(this.$t('pleaseEnterPersonnelInfo'))
return
}
this.processInfoForm.validateFields((err, values) => {
this.approvalInfoForm.validateFields((approvalErr, approvalValues) => {
})
})
},
// 转办
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
// enterprisePlanApprovalTurnTo(param).then(res => {
// if (res.success) {
// this.$message.success(res.message)
// } else {
// this.$message.warning(res.message)
// }
// }).finally(() => {
// this.loading = false
// })
}
})
},
// 提交
handleSubmit () {
},
// 同意
handleAgree () {
},
// 驳回
handleReject () {
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
/deep/ .ant-form-item-children {
width: 100%;
display: inline-block;
}
.bottom-operate-box {
height: 52px;
padding: 10px 32px;
text-align: right;
.ant-btn {
margin-left: 15px;
}
}
.scroll-content {
height: calc(100% - 52px);
box-sizing: border-box;
overflow: auto;
padding: 32px;
}
</style>
@@ -4,7 +4,7 @@
<div class="collapsible-panel-form">
<div class="form-flex-box collapsible-panel-form-content collapsible-content-no-head">
<!-- 是否下发联络人 -->
<div class="box-title-text form-flex-item-long">
<div class="box-title-text form-flex-item flex-item-small">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.revisionPlanActivelyReport.whetherToSendAContact')">
@@ -25,8 +25,8 @@
<!-- 是否下发联络人选了是不显示表格只显示完整表单 -->
<template v-if="formInline.whetherToSendAContact === 1">
<!-- 工作组/所联络人 -->
<div class="box-title-text form-flex-item-long">
<div class="title-text">
<div class="box-title-text form-flex-item flex-item-long">
<div class="title-text title-text-middle">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.revisionPlanActivelyReport.workingGroupContactPerson')">
{{ $t('workCenter.revisionPlanActivelyReport.workingGroupContactPerson') }}
@@ -43,8 +43,8 @@
</a-form-model-item>
</div>
<!-- 联络人主管级上一级领导 -->
<div class="box-title-text form-flex-item-long">
<div class="title-text">
<div class="box-title-text form-flex-item flex-item-long">
<div class="title-text title-text-long">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.revisionPlanActivelyReport.contactSupervisorSuperiorLeader')">
{{ $t('workCenter.revisionPlanActivelyReport.contactSupervisorSuperiorLeader') }}
@@ -188,6 +188,16 @@ export default {
]
},
columns: [
{
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
align: 'center',
width: 80,
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ // 制修订类型
title: this.$t('enterpriseStandardLibrary.plan.revisionType'),
align: 'center',
@@ -442,6 +452,30 @@ export default {
}
</script>
<style scoped>
<style scoped lang="less">
@import '~@assets/less/common.less';
.collapsible-content-no-head {
border-top: 1px solid #E5E6EB;
border-radius: 8px 8px 8px 8px;
}
/deep/ .ant-form-item-children {
width: 100%;
display: inline-block;
}
.title-text-middle {
width: 130px !important;
}
.title-text-long {
width: 220px !important;
}
.flex-item-small {
width: 300px !important;
}
.flex-item-long {
width: calc((100% - 300px) / 2) !important;
}
</style>
@@ -143,6 +143,7 @@
v-model="formInline.yearNumber"
:default-value="yearNumberDefaultValue"
date-format="YYYY"
@change="decadeCodeChange"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.yearNumber')" />
</a-form-model-item>
</div>
@@ -357,7 +358,7 @@
<a-form-model-item class="item-model" prop="affiliatedWorkingGroup">
<a-tree-select
tree-node-filter-prop="title"
v-model="formInline.workingGroupId"
v-model="formInline.affiliatedWorkingGroup"
:maxTagCount="1"
:show-search="true"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
@@ -482,7 +483,9 @@ import { StandardSource } from '@/enums/commonEnums'
import { getWorkGroupTreeList, getFormDictTreeList } from '@/api/api'
import UserSelection from '@/components/selection/UserSelection'
import StandardSelection from '@/components/selection/StandardSelection'
import { getTreeList } from '../../../../api/enterpriseStandardLibraryApi'
import { getTreeList } from '@/api/enterpriseStandardLibraryApi'
import Vue from 'vue'
import { USER_INFO } from '@/store/mutation-types'
export default {
name: 'ContactEnterSendTaskModal',
@@ -515,7 +518,7 @@ export default {
}
],
// 企标编号
enterpriseStandardPlanId: [
enterpriseStandardNum: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum') + this.$t('cannotEmpty'),
@@ -618,6 +621,22 @@ export default {
trigger: ['change', 'blur']
}
],
// 隶属工作组
affiliatedWorkingGroup: [
{
required: true,
message: this.$t('workCenter.revisionPlanActivelyReport.affiliatedWorkingGroup') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 零部件名称
partName: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.partName') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 授权部门
authorizationDepart: [
{
@@ -673,7 +692,17 @@ export default {
},
methods: {
add () {
this.edit({})
const userInfo = Vue.ls.get(USER_INFO)
const formInline = {}
// 初始化主起草人信息
formInline.mainDraftingUser = userInfo.id
formInline.mainDraftingUser_dictText = userInfo.realname
// 初始化主起草单位信息
formInline.mainDraftingUnit = userInfo.departIds
// 初始化起草单位负责人 todo: 看怎么获取当前登录人的上级
// 初始化年代号
formInline.decadeCode = new Date().getFullYear() + ''
this.edit(formInline)
},
edit (record) {
this.visible = true
@@ -706,7 +735,7 @@ export default {
}
})
},
// 处理左侧树数据结构
// 处理内部工作组数据结构
dealTreeData (treeData) {
return treeData.map(item => {
item.label = item.name
@@ -727,6 +756,7 @@ export default {
} else {
this.rules.enterpriseStandardName[0].required = false
}
this.formInline.decadeCode = new Date().getFullYear() + ''
},
// 选择用户得到用户名
userSelectNameChange (value, fieldName) {
@@ -5,19 +5,19 @@
<div class="form-flex-box collapsible-panel-form-content collapsible-content-no-head">
<!-- 收集联络人主管级领导 -->
<div class="box-title-text form-flex-item-long">
<div class="title-text">
<div class="title-text title-text-middle">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.revisionPlanActivelyReport.whetherToSendAContact')">
{{ $t('workCenter.revisionPlanActivelyReport.whetherToSendAContact') }}
<span class="title-text-text" :title="$t('workCenter.revisionPlanActivelyReport.contactsSupervisorLevelLeaders')">
{{ $t('workCenter.revisionPlanActivelyReport.contactsSupervisorLevelLeaders') }}
</span>
</div>
<a-form-model-item class="item-model" prop="whetherToSendAContact">
<user-selection :placeholder="$t('pleaseSelect')+$t('workCenter.revisionPlanActivelyReport.workingGroupContactPerson')"
v-model="formInline.revisionPlanActivelyReport"
<a-form-model-item class="item-model" prop="contactsSupervisorLevelLeaders">
<user-selection :placeholder="$t('pleaseSelect')+$t('workCenter.revisionPlanActivelyReport.contactsSupervisorLevelLeaders')"
v-model="formInline.contactsSupervisorLevelLeaders"
:disabled="disabled"
filedName="revisionPlanActivelyReport"
filedName="contactsSupervisorLevelLeaders"
@nameChange="userSelectNameChange"
:nameStr="formInline.revisionPlanActivelyReport_dictText"
:nameStr="formInline.contactsSupervisorLevelLeaders_dictText"
type="radio" />
</a-form-model-item>
</div>
@@ -71,15 +71,336 @@
</j-table>
</div>
<!-- 表格新增编辑弹框 -->
<contact-enter-send-task-modal ref="contactEnterSendTaskModal" @ok="modelFormOk"></contact-enter-send-task-modal>
</div>
</template>
<script>
import Vue from 'vue'
import { ACCESS_TOKEN, TENANT_ID } from '@/store/mutation-types'
import store from '@/store'
import UserSelection from '@/components/selection/UserSelection'
import JTable from '@/components/jero/JTable'
import ContactEnterSendTaskModal from './ContactEnterSendTaskModal'
// 导入的加载提示
let importModalLoading
export default {
name: 'ContactEnterStandardForm'
name: 'ContactEnterStandardForm',
components: { ContactEnterSendTaskModal, UserSelection, JTable },
props: {
disabled: {
type: Boolean,
required: false,
default: false
},
currentNode: {
type: Number,
required: false,
default: 1
}
},
computed: {
tokenHeader () {
const head = { 'X-Access-Token': Vue.ls.get(ACCESS_TOKEN) }
const tenantid = Vue.ls.get(TENANT_ID)
if (tenantid) {
head['tenant-id'] = tenantid
}
return head
},
importExcelUrl: function () {
return `${window._CONFIG.domianURL}/${this.url.importExcelUrl}`
}
},
data () {
return {
loading: false,
formInline: {},
rules: {
// 收集联络人主管级领导
contactsSupervisorLevelLeaders: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.contactsSupervisorLevelLeaders') + this.$t('cannotEmpty'),
trigger: 'change'
}
]
},
columns: [
{
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
align: 'center',
width: 80,
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ // 制修订类型
title: this.$t('enterpriseStandardLibrary.plan.revisionType'),
align: 'center',
width: 180,
dataIndex: 'applicationCategory_dictText',
scopedSlots: { customRender: 'text' }
},
{ // 原企标编号
title: this.$t('enterpriseStandardLibrary.plan.oldEnterpriseStandardNum'),
align: 'center',
width: 180,
dataIndex: 'originEnStandardNo',
scopedSlots: { customRender: 'toDetailOld' }
},
{ // 新企标编号
title: this.$t('enterpriseStandardLibrary.plan.newEnterpriseStandardNum'),
align: 'center',
width: 180,
dataIndex: 'newEnStandardNo',
scopedSlots: { customRender: 'toDetailNew' }
},
{ // 原企标名称
title: this.$t('enterpriseStandardLibrary.plan.oldEnterpriseStandardName'),
align: 'center',
width: 180,
dataIndex: 'originEnStandardName',
scopedSlots: { customRender: 'toDetailOld' }
},
{ // 新企标名称
title: this.$t('enterpriseStandardLibrary.plan.newEnterpriseStandardName'),
align: 'center',
width: 180,
dataIndex: 'newEnStandardName',
scopedSlots: { customRender: 'toDetailNew' }
},
{ // 授权部门
title: this.$t('enterpriseStandardLibrary.plan.authDepartment'),
align: 'center',
width: 180,
dataIndex: 'authDeparts',
scopedSlots: { customRender: 'text' }
},
{ // 企业标准代号
title: this.$t('enterpriseStandardLibrary.plan.enterpriseStandardCode'),
align: 'center',
width: 180,
dataIndex: 'enStandardCode',
scopedSlots: { customRender: 'text' }
},
{ // 配合单位
title: this.$t('enterpriseStandardLibrary.plan.suitUnit'),
align: 'center',
width: 180,
dataIndex: 'cooperateDeparts',
scopedSlots: { customRender: 'text' }
},
{ // 主起草人
title: this.$t('enterpriseStandardLibrary.plan.principalDrafter'),
align: 'center',
width: 180,
dataIndex: 'mainDraftingUser',
scopedSlots: { customRender: 'text' }
},
{ // 主起草单位
title: this.$t('enterpriseStandardLibrary.plan.mainDraftingUnit'),
align: 'center',
width: 180,
dataIndex: 'mainDraftingUnit',
scopedSlots: { customRender: 'text' }
},
{ // 主起草单位负责人
title: this.$t('enterpriseStandardLibrary.plan.headOfMainDraftingUnit'),
align: 'center',
width: 180,
dataIndex: 'mainDraftingUnitResponsiblePerson',
scopedSlots: { customRender: 'text' }
},
{ // 隶属工作组
title: this.$t('workCenter.revisionPlanActivelyReport.affiliatedWorkingGroup'),
align: 'center',
width: 180,
dataIndex: 'affiliatedWorkingGroup',
scopedSlots: { customRender: 'text' }
},
{ // 标准推进人
title: this.$t('enterpriseStandardLibrary.plan.standardPusher'),
align: 'center',
width: 180,
dataIndex: 'standardPromoter',
scopedSlots: { customRender: 'text' }
},
{ // 草稿计划完成日期
title: this.$t('enterpriseStandardLibrary.plan.draftPlanFinishDate'),
align: 'center',
width: 180,
dataIndex: 'draftPlannedCompleteDate',
scopedSlots: { customRender: 'specialDate' }
},
{ // 征求意见稿计划完成日期
title: this.$t('enterpriseStandardLibrary.plan.exposureDraftPlanFinishDate'),
align: 'center',
width: 200,
dataIndex: 'solicitationDraftPlanCompleteDate',
scopedSlots: { customRender: 'specialDate' }
},
{ // 计划报批日期
title: this.$t('enterpriseStandardLibrary.plan.planSubmissionDate'),
align: 'center',
width: 180,
dataIndex: 'planApprovalDate',
scopedSlots: { customRender: 'specialDate' }
},
{ // 变更状态
title: this.$t('enterpriseStandardLibrary.plan.changeState'),
align: 'center',
width: 180,
dataIndex: 'changeStatus_dictText',
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('operation'),
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 200
}
],
dataSource: [],
selectedRowKeys: [],
selectionRows: [],
url: {
list: ''
},
modalType: '' // 是在新增还是在编辑,编辑的时候放正在编辑的下标
}
},
methods: {
// 选择用户得到用户名
userSelectNameChange (value, fieldName) {
this.formInline[fieldName + '_dictText'] = value
},
// 企标编号,企标名称跳转详情
handleGoDetail (record) {
this.$openPageNewSheet({
path: '/enterpriseStandardLibrary/enterpriseStandardDetail',
query: {
standardNumber: record.standardNo
}
})
},
// 表格选中
onSelectChange (selectedRowKeys, selectionRows) {
this.selectedRowKeys = selectedRowKeys
this.selectionRows = selectionRows
},
// 新增或编辑完成
modelFormOk (value) {
console.log(value, this.modalType)
if (this.modalType === 'add') {
this.dataSource.push(value)
} else if (this.modalType && this.modalType.split(',')[0] === 'edit') {
this.dataSource.splice(Number(this.modalType.split(',')[1]), 1, value)
}
},
// 新增
handleAdd () {
this.modalType = 'add'
this.$refs.contactEnterSendTaskModal.add()
},
// 导入
handleImportExcel (info) {
// 加一个大的提示
if (!this.loading) {
importModalLoading = this.$info({
title: '提示',
content: <span>正在导入请稍候 <a-spin size="small" /></span>,
keyboard: false
})
}
this.loading = true
// 把知道了这个按钮去掉
this.$nextTick(() => {
document.getElementsByClassName('ant-modal-confirm-btns')[0].style = 'display:none'
})
if (info.file.status !== 'uploading') {
console.log(info.file, info.fileList)
}
if (info.file.status === 'done') {
// 销毁这个提示
importModalLoading && importModalLoading.destroy()
this.loading = false
if (info.file.response.success) {
// this.$message.success(`${info.file.name} 文件上传成功`);
if (info.file.response.code === 201) {
const { message, result: { msg, fileUrl, fileName } } = info.file.response
const href = window._CONFIG.domianURL + fileUrl
this.$warning({
title: message,
content: (<div>
<span>{msg}</span><br />
<span>具体详情请 <a href={href} target="_blank" download={fileName}>点击下载</a> </span>
</div>
)
})
} else {
this.$message.success(info.file.response.message || `${info.file.name} 文件上传成功`)
}
this.loadData()
} else {
this.$message.error(`${info.file.name} ${info.file.response.message}.`)
}
} else if (info.file.status === 'error') {
// 销毁这个提示
importModalLoading && importModalLoading.destroy()
this.loading = false
if (info.file.response.status === 500) {
const data = info.file.response
const token = Vue.ls.get(ACCESS_TOKEN)
if (token && data.message.includes('Token失效')) {
this.error({
title: '登录已过期',
content: '很抱歉,登录已过期,请重新登录',
okText: '重新登录',
mask: false,
onOk: () => {
store.dispatch('Logout').then(() => {
Vue.ls.remove(ACCESS_TOKEN)
window.location.reload()
})
}
})
}
} else {
this.$message.error(`文件上传失败: ${info.file.msg} `)
}
}
},
// 编辑
handleEdit (record, index) {
this.modalType = 'edit' + index
this.$refs.contactEnterSendTaskModal.edit(record)
},
// 删除
handleDelete (id, index) {
this.dataSource.splice(index, 1)
},
// 批量删除
batchDel () {
this.dataSource = this.dataSource.filter(item => !this.selectedRowKeys.includes(item.enterpriseStandardPlanId))
}
}
}
</script>
<style scoped>
<style scoped lang="less">
@import '~@assets/less/common.less';
.collapsible-content-no-head {
border-top: 1px solid #E5E6EB;
border-radius: 8px 8px 8px 8px;
}
.title-text-middle {
width: 130px !important;
}
</style>
@@ -0,0 +1,358 @@
<template>
<div>
<!-- 操作区域 -->
<div v-if="!disabled" class="table-operator">
<!-- 新增 -->
<a-button icon="plus" type="primary" @click="handleAdd" :disabled="disabled">
{{ $t('newlyAdded') }}
</a-button>
<!-- 导入 -->
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button icon="upload" type="primary" ghost>{{ $t('import') }}</a-button>
</a-upload>
<!-- 批量删除 -->
<a-button icon="delete" type="primary" ghost @click="batchDel" :disabled="disabled">
{{ $t('batchDelete') }}
</a-button>
</div>
<div>
<j-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="enterpriseStandardPlanId"
:columns="columns"
:dataSource="dataSource"
:pagination="false"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}">
<!-- 企标编号/企标名称 -->
<template v-slot:toDetail="{text, record}">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
<a v-if="text" class="link-a" @click="handleGoDetail(record)">{{ text }}</a>
<div v-else class="table-text">{{ global.emptyLine }}</div>
</a-tooltip>
</template>
<!-- 操作栏 -->
<div slot="action" slot-scope="{record, index}" class="action-span-cell">
<a @click="handleEdit(record, index)" class="table-ope-btn" :disabled="disabled">{{ $t('edit') }}</a>
<a-divider type="vertical" />
<a @click="handleDelete(record.id, index)" class="table-ope-btn" :disabled="disabled">{{ $t('delete') }}</a>
</div>
</j-table>
</div>
<!-- 表格新增编辑弹框 -->
<contact-enter-send-task-modal ref="contactEnterSendTaskModal" @ok="modelFormOk"></contact-enter-send-task-modal>
</div>
</template>
<script>
import Vue from 'vue'
import { ACCESS_TOKEN, TENANT_ID } from '@/store/mutation-types'
import store from '@/store'
import JTable from '@/components/jero/JTable'
import ContactEnterSendTaskModal from './ContactEnterSendTaskModal'
// 导入的加载提示
let importModalLoading
export default {
name: 'OnlyTableForm',
components: { ContactEnterSendTaskModal, JTable },
props: {
disabled: {
type: Boolean,
required: false,
default: false
}
},
computed: {
tokenHeader () {
const head = { 'X-Access-Token': Vue.ls.get(ACCESS_TOKEN) }
const tenantid = Vue.ls.get(TENANT_ID)
if (tenantid) {
head['tenant-id'] = tenantid
}
return head
},
importExcelUrl: function () {
return `${window._CONFIG.domianURL}/${this.url.importExcelUrl}`
}
},
mounted () {
if (this.disabled) {
this.columns.pop()
}
},
data () {
return {
loading: false,
columns: [
{
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
align: 'center',
width: 80,
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ // 制修订类型
title: this.$t('enterpriseStandardLibrary.plan.revisionType'),
align: 'center',
width: 180,
dataIndex: 'applicationCategory_dictText',
scopedSlots: { customRender: 'text' }
},
{ // 原企标编号
title: this.$t('enterpriseStandardLibrary.plan.oldEnterpriseStandardNum'),
align: 'center',
width: 180,
dataIndex: 'originEnStandardNo',
scopedSlots: { customRender: 'toDetailOld' }
},
{ // 新企标编号
title: this.$t('enterpriseStandardLibrary.plan.newEnterpriseStandardNum'),
align: 'center',
width: 180,
dataIndex: 'newEnStandardNo',
scopedSlots: { customRender: 'toDetailNew' }
},
{ // 原企标名称
title: this.$t('enterpriseStandardLibrary.plan.oldEnterpriseStandardName'),
align: 'center',
width: 180,
dataIndex: 'originEnStandardName',
scopedSlots: { customRender: 'toDetailOld' }
},
{ // 新企标名称
title: this.$t('enterpriseStandardLibrary.plan.newEnterpriseStandardName'),
align: 'center',
width: 180,
dataIndex: 'newEnStandardName',
scopedSlots: { customRender: 'toDetailNew' }
},
{ // 授权部门
title: this.$t('enterpriseStandardLibrary.plan.authDepartment'),
align: 'center',
width: 180,
dataIndex: 'authDeparts',
scopedSlots: { customRender: 'text' }
},
{ // 企业标准代号
title: this.$t('enterpriseStandardLibrary.plan.enterpriseStandardCode'),
align: 'center',
width: 180,
dataIndex: 'enStandardCode',
scopedSlots: { customRender: 'text' }
},
{ // 配合单位
title: this.$t('enterpriseStandardLibrary.plan.suitUnit'),
align: 'center',
width: 180,
dataIndex: 'cooperateDeparts',
scopedSlots: { customRender: 'text' }
},
{ // 主起草人
title: this.$t('enterpriseStandardLibrary.plan.principalDrafter'),
align: 'center',
width: 180,
dataIndex: 'mainDraftingUser',
scopedSlots: { customRender: 'text' }
},
{ // 主起草单位
title: this.$t('enterpriseStandardLibrary.plan.mainDraftingUnit'),
align: 'center',
width: 180,
dataIndex: 'mainDraftingUnit',
scopedSlots: { customRender: 'text' }
},
{ // 主起草单位负责人
title: this.$t('enterpriseStandardLibrary.plan.headOfMainDraftingUnit'),
align: 'center',
width: 180,
dataIndex: 'mainDraftingUnitResponsiblePerson',
scopedSlots: { customRender: 'text' }
},
{ // 隶属工作组
title: this.$t('workCenter.revisionPlanActivelyReport.affiliatedWorkingGroup'),
align: 'center',
width: 180,
dataIndex: 'affiliatedWorkingGroup',
scopedSlots: { customRender: 'text' }
},
{ // 标准推进人
title: this.$t('enterpriseStandardLibrary.plan.standardPusher'),
align: 'center',
width: 180,
dataIndex: 'standardPromoter',
scopedSlots: { customRender: 'text' }
},
{ // 草稿计划完成日期
title: this.$t('enterpriseStandardLibrary.plan.draftPlanFinishDate'),
align: 'center',
width: 180,
dataIndex: 'draftPlannedCompleteDate',
scopedSlots: { customRender: 'specialDate' }
},
{ // 征求意见稿计划完成日期
title: this.$t('enterpriseStandardLibrary.plan.exposureDraftPlanFinishDate'),
align: 'center',
width: 200,
dataIndex: 'solicitationDraftPlanCompleteDate',
scopedSlots: { customRender: 'specialDate' }
},
{ // 计划报批日期
title: this.$t('enterpriseStandardLibrary.plan.planSubmissionDate'),
align: 'center',
width: 180,
dataIndex: 'planApprovalDate',
scopedSlots: { customRender: 'specialDate' }
},
{ // 变更状态
title: this.$t('enterpriseStandardLibrary.plan.changeState'),
align: 'center',
width: 180,
dataIndex: 'changeStatus_dictText',
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('operation'),
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 200
}
],
dataSource: [],
selectedRowKeys: [],
selectionRows: [],
url: {
list: ''
},
modalType: '' // 是在新增还是在编辑,编辑的时候放正在编辑的下标
}
},
methods: {
// 企标编号,企标名称跳转详情
handleGoDetail (record) {
this.$openPageNewSheet({
path: '/enterpriseStandardLibrary/enterpriseStandardDetail',
query: {
standardNumber: record.standardNo
}
})
},
// 表格选中
onSelectChange (selectedRowKeys, selectionRows) {
this.selectedRowKeys = selectedRowKeys
this.selectionRows = selectionRows
},
// 新增或编辑完成
modelFormOk (value) {
console.log(value, this.modalType)
if (this.modalType === 'add') {
this.dataSource.push(value)
} else if (this.modalType && this.modalType.split(',')[0] === 'edit') {
this.dataSource.splice(Number(this.modalType.split(',')[1]), 1, value)
}
},
// 新增
handleAdd () {
this.modalType = 'add'
this.$refs.contactEnterSendTaskModal.add()
},
// 导入
handleImportExcel (info) {
// 加一个大的提示
if (!this.loading) {
importModalLoading = this.$info({
title: '提示',
content: <span>正在导入请稍候 <a-spin size="small" /></span>,
keyboard: false
})
}
this.loading = true
// 把知道了这个按钮去掉
this.$nextTick(() => {
document.getElementsByClassName('ant-modal-confirm-btns')[0].style = 'display:none'
})
if (info.file.status !== 'uploading') {
console.log(info.file, info.fileList)
}
if (info.file.status === 'done') {
// 销毁这个提示
importModalLoading && importModalLoading.destroy()
this.loading = false
if (info.file.response.success) {
// this.$message.success(`${info.file.name} 文件上传成功`);
if (info.file.response.code === 201) {
const { message, result: { msg, fileUrl, fileName } } = info.file.response
const href = window._CONFIG.domianURL + fileUrl
this.$warning({
title: message,
content: (<div>
<span>{msg}</span><br />
<span>具体详情请 <a href={href} target="_blank" download={fileName}>点击下载</a> </span>
</div>
)
})
} else {
this.$message.success(info.file.response.message || `${info.file.name} 文件上传成功`)
}
this.loadData()
} else {
this.$message.error(`${info.file.name} ${info.file.response.message}.`)
}
} else if (info.file.status === 'error') {
// 销毁这个提示
importModalLoading && importModalLoading.destroy()
this.loading = false
if (info.file.response.status === 500) {
const data = info.file.response
const token = Vue.ls.get(ACCESS_TOKEN)
if (token && data.message.includes('Token失效')) {
this.error({
title: '登录已过期',
content: '很抱歉,登录已过期,请重新登录',
okText: '重新登录',
mask: false,
onOk: () => {
store.dispatch('Logout').then(() => {
Vue.ls.remove(ACCESS_TOKEN)
window.location.reload()
})
}
})
}
} else {
this.$message.error(`文件上传失败: ${info.file.msg} `)
}
}
},
// 编辑
handleEdit (record, index) {
this.modalType = 'edit' + index
this.$refs.contactEnterSendTaskModal.edit(record)
},
// 删除
handleDelete (id, index) {
this.dataSource.splice(index, 1)
},
// 批量删除
batchDel () {
this.dataSource = this.dataSource.filter(item => !this.selectedRowKeys.includes(item.enterpriseStandardPlanId))
}
}
}
</script>
<style scoped>
</style>
@@ -12,7 +12,7 @@
</div>
</template>
<!-- 基础信息 -->
<div v-show="switchValue === 'base'" class="scroll-content">
<div v-show="switchValue === 'base'" class="detail-page-scroll-content">
<!-- 流程信息 -->
<div class="process-part-title">{{ $t('processInformation') }}</div>
<a-form :form="processInfoForm">
@@ -201,13 +201,13 @@
</a-form>
</div>
<!-- 人员信息 -->
<div v-show="switchValue === 'user'" class="scroll-content">
<div v-show="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="bottom-operate-box" v-if="!onlyLook">
<div class="detail-page-bottom-operate-box" v-if="!onlyLook">
<!-- 发起节点 -->
<template v-if="currentNode === 1">
<!-- 保存 -->
@@ -257,7 +257,8 @@ import {
enterprisePlanApprovalDetermine,
enterprisePlanApprovalSave,
enterprisePlanApproval,
getProcessDataById
getProcessDataById,
enterprisePlanApprovalSubmit
} from '@/api/workCenter'
import ApprovalBaseInfo from './modules/ApprovalBaseInfo'
import FinishTimeChangeBaseInfo from './modules/FinishTimeChangeBaseInfo'
@@ -285,7 +286,6 @@ const approvalPersonalInfo = [ // 人员信息的数据
nodeRoleName: '部所联络人',
canChoose: true,
chooseType: 'radio',
// todo: 还没有联络人管理模块,暂时用选用户
chooseSource: 'contactManage',
fieldName: 'contactUser'
},
@@ -337,7 +337,6 @@ const changePersonalInfo = [
nodeRoleName: '部所联络人',
canChoose: true,
chooseType: 'radio',
// todo: 还没有联络人管理模块,暂时用选用户
chooseSource: 'contactManage',
fieldName: 'contactUser'
},
@@ -478,6 +477,9 @@ export default {
}
if (this.currentNode === 1) {
this.personnelInfoData = approvalPersonalInfo
this.disabled = false
} else {
this.disabled = true
}
// 如果是查看进入的,不可编辑,不可操作
if (this.$route.query.onlyLook) {
@@ -577,8 +579,8 @@ export default {
this.$nextTick(() => {
// 初始化流程信息
this.processInfoForm.setFieldsValue(pick(this.model[0], 'processName', 'deadlineDate', 'processDescription'))
// 初始化流程审批信息
this.approvalInfoForm.setFieldsValue(pick(this.model[0], 'remarks', 'attachment'))
// 初始化流程审批信息,todo:需要判断是不是草稿进来的,草稿进来的才回显审批信息
// this.approvalInfoForm.setFieldsValue(pick(this.model[0], 'remarks', 'attachment'))
})
// 初始化业务基本信息的申请类型和项目类别
this.formInline.applicationCategory = this.model[0].applicationCategory
@@ -656,6 +658,8 @@ export default {
const ruleForm = this.formInline
// 流程审批信息
const approvalInfoForm = this.approvalInfoForm.getFieldsValue()
// 部分节点的选人表单
const userInfoForm = this.userForm.getFieldsValue()
// 人员信息的数据, 处理成对象
const personnelInfo = this.$refs.personnelInfo.stepsData
const personnelObj = {}
@@ -674,7 +678,7 @@ export default {
if (approvalBaseInfo.enStandardSystem && approvalBaseInfo.enStandardSystem.length > 0) {
approvalBaseInfo.enStandardSystem = approvalBaseInfo.enStandardSystem.map(item => item.value).join(',')
}
const param = { ...processInfoForm, ...ruleForm, ...approvalBaseInfo, ...approvalInfoForm, ...personnelObj }
const param = { ...processInfoForm, ...ruleForm, ...approvalBaseInfo, ...approvalInfoForm, ...personnelObj, ...userInfoForm }
const flag = Object.values(param).some(v => !!v || v === 0)
if (!flag) {
// 提示至少填写一项
@@ -684,7 +688,7 @@ export default {
arr.push(param)
} else if (this.formInline.projectType === ProjectType.COMPLETE_TIME_CHANGE.value) {
// 业务基本信息-变更-完成时间变更
const param = { ...processInfoForm, ...ruleForm, ...approvalInfoForm, ...personnelObj }
const param = { ...processInfoForm, ...ruleForm, ...approvalInfoForm, ...personnelObj, ...userInfoForm }
const flag = Object.values(param).some(v => !!v || v === 0)
if (!flag && this.$refs.changeBaseInfo.dataSource.length <= 0) {
// 提示至少填写一项
@@ -694,7 +698,7 @@ export default {
arr = this.$refs.changeBaseInfo.dataSource.map(item => { return { ...item, ...param } })
} else if (this.formInline.projectType === ProjectType.WORK_TERMINATE.value) {
// 业务基本信息-变更-工作终止
const param = { ...processInfoForm, ...ruleForm, ...approvalInfoForm, ...personnelObj }
const param = { ...processInfoForm, ...ruleForm, ...approvalInfoForm, ...personnelObj, ...userInfoForm }
const flag = Object.values(param).some(v => !!v || v === 0)
if (!flag && this.$refs.changeBaseInfo.dataSource.length <= 0) {
// 提示至少填写一项
@@ -708,7 +712,7 @@ export default {
if (this.$refs.changeBaseInfo) {
dutyDepartChangeForm = this.$refs.changeBaseInfo.formInline
}
const param = { ...processInfoForm, ...ruleForm, ...dutyDepartChangeForm, ...approvalInfoForm, ...personnelObj }
const param = { ...processInfoForm, ...ruleForm, ...dutyDepartChangeForm, ...approvalInfoForm, ...personnelObj, ...userInfoForm }
const flag = Object.values(param).some(v => !!v || v === 0)
if (!flag) {
// 提示至少填写一项
@@ -722,7 +726,7 @@ export default {
if (this.$refs.changeBaseInfo) {
mergeForm = this.$refs.changeBaseInfo.formInline
}
const param = { ...processInfoForm, ...ruleForm, ...mergeForm, ...approvalInfoForm, ...personnelObj }
const param = { ...processInfoForm, ...ruleForm, ...mergeForm, ...approvalInfoForm, ...personnelObj, ...userInfoForm }
const flag = Object.values(param).some(v => !!v || v === 0)
if (!flag) {
// 提示至少填写一项
@@ -732,7 +736,7 @@ export default {
arr.push(param)
} else {
// 还没有选择申请类型和项目类别,需要外层信息至少填了一项
const param = { ...processInfoForm, ...ruleForm, ...approvalBaseInfo, ...approvalInfoForm, ...personnelObj }
const param = { ...processInfoForm, ...ruleForm, ...approvalBaseInfo, ...approvalInfoForm, ...personnelObj, ...userInfoForm }
const flag = Object.values(param).some(v => !!v || v === 0)
if (!flag) {
// 提示至少填写一项
@@ -761,10 +765,10 @@ export default {
}
}
// 校验是否填了所有能填的人员信息
// if (!Object.values(personnelObj).every(v => !!v)) {
// this.$message.warning(this.$t('pleaseEnterPersonnelInfo'))
// return
// }
if (!Object.values(personnelObj).every(v => !!v)) {
this.$message.warning(this.$t('pleaseEnterPersonnelInfo'))
return
}
this.processInfoForm.validateFields((err, values) => {
this.$refs.ruleForm.validate(valid => {
this.approvalInfoForm.validateFields((approvalErr, approvalValues) => {
@@ -857,33 +861,45 @@ export default {
})
})
},
// 提交
// 其他节点的提交,校验部分节点需要选人的表单和审批信息即可
handleSubmit () {
if (this.loading) return
this.processInfoForm.validateFields((err, values) => {
this.$refs.ruleForm.validate(valid => {
this.approvalInfoForm.validateFields((approvalErr, approvalValues) => {
// 立项和变更的数据不一样,分开判断
if (this.formInline.applicationCategory === ApplicationCategory.INITIATION.value) {
// 是立项
this.$refs.approvalBaseInfo.$refs.ruleForm.validate(approvalBaseValid => {
if (valid && approvalBaseValid && !err && !approvalErr) {
this.loading = true
const param = Object.assign({}, this.$refs.approvalBaseInfo.formInline)
console.log(param)
}
})
} else {
// 是变更
this.userForm.validateFields((userErr, userValues) => {
if (valid && !err && !approvalErr && !userErr) {
this.loading = true
const param = this.$refs.changeBaseInfo.dataSource
console.log(param)
}
})
}
})
this.userForm.validateFields((err, values) => {
this.approvalInfoForm.validateFields((approvalErr, approvalValues) => {
if (!err && !approvalErr) {
this.loading = true
const param = Object.assign({}, values, approvalValues)
param.taskId = this.$route.query.taskId
enterprisePlanApprovalSubmit(param).then(res => {
if (res.success) {
this.$message.success(res.message)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
}
// // 立项和变更的数据不一样,分开判断
// if (this.formInline.applicationCategory === ApplicationCategory.INITIATION.value) {
// // 是立项
// this.$refs.approvalBaseInfo.$refs.ruleForm.validate(approvalBaseValid => {
// if (valid && approvalBaseValid && !err && !approvalErr) {
// this.loading = true
// const param = Object.assign({}, this.$refs.approvalBaseInfo.formInline)
// console.log(param)
// }
// })
// } else {
// // 是变更
// this.userForm.validateFields((userErr, userValues) => {
// if (valid && !err && !approvalErr && !userErr) {
// this.loading = true
// const param = this.$refs.changeBaseInfo.dataSource
// console.log(param)
// }
// })
// }
})
})
},
@@ -898,8 +914,7 @@ export default {
this.approvalInfoForm.validateFields((err, values) => {
if (!err) {
this.loading = true
let param = {}
param = Object.assign({}, values)
const param = Object.assign({}, values)
param.userId = userIds
// param.taskId = this.model[0].id
param.taskId = this.$route.query.taskId
@@ -921,9 +936,8 @@ export default {
this.approvalInfoForm.validateFields((err, values) => {
if (!err) {
this.loading = true
let param = {}
param = Object.assign({}, values)
param.processId = this.model.id
const param = Object.assign({}, values)
param.taskId = this.$route.query.taskId
enterprisePlanApprovalAgree(param).then(res => {
if (res.success) {
this.$message.success(res.message)
@@ -940,23 +954,27 @@ export default {
handleReject () {
if (this.loading) return
this.validatorRules.remarks.rules[0].required = true
this.approvalInfoForm.validateFields((err, values) => {
if (!err) {
this.loading = true
let param = {}
param = Object.assign({}, values)
param.processId = this.model.id
enterprisePlanApprovalReject(param).then(res => {
if (res.success) {
this.$message.success(res.message)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
this.validatorRules.remarks.rules[0].required = false
})
}
if (!this.approvalInfoForm.getFieldValue('remarks')) {
this.$message.warning(this.$t('pleaseEnterRemarks'))
}
this.$nextTick(() => {
this.approvalInfoForm.validateFields((err, values) => {
if (!err) {
this.loading = true
const param = Object.assign({}, values)
param.taskId = this.$route.query.id
enterprisePlanApprovalReject(param).then(res => {
if (res.success) {
this.$message.success(res.message)
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
this.validatorRules.remarks.rules[0].required = false
})
}
})
})
},
// 确定
@@ -965,9 +983,8 @@ export default {
this.approvalInfoForm.validateFields((err, values) => {
if (!err) {
this.loading = true
let param = {}
param = Object.assign({}, values)
param.processId = this.model.id
const param = Object.assign({}, values)
param.taskId = this.$route.query.taskId
enterprisePlanApprovalDetermine(param).then(res => {
if (res.success) {
this.$message.success(res.message)
@@ -976,7 +993,6 @@ export default {
}
}).finally(() => {
this.loading = false
this.validatorRules.remarks.rules[0].required = false
})
}
})
@@ -986,64 +1002,12 @@ export default {
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
/deep/ .ant-form-item-children {
width: 100%;
display: inline-block;
}
.form-flex-box {
display: flex;
flex-wrap: wrap;
}
.form-flex-item-line {
width: 100%;
}
.collapsible-panel-form {
margin-top: 20px;
&-header {
height: 56px;
line-height: 56px;
background: rgba(245, 245, 245, 0.6);
border-radius: 8px 8px 0 0;
border: 1px solid #E5E6EB;
padding: 0 20px;
font-size: 16px;
font-family: PingFang SC-Medium, PingFang SC, sans-serif;
font-weight: 600;
color: #1D2129;
display: flex;
justify-content: space-between;
.retractable-btn {
cursor: pointer;
font-size: 14px;
font-family: PingFang SC-Regular, PingFang SC, sans-serif;
color: @primary-color;
}
.anticon {
margin-right: 8px;
}
.pack-up-btn {
transform: rotate(-90deg);
}
.unfold-btn {
transform: rotate(90deg);
}
}
&-content {
border: 1px solid #E5E6EB;
border-top: none;
border-radius: 0 0 8px 8px;
padding: 20px;
}
}
.collapsible-content-no-head {
border-top: 1px solid #E5E6EB;
border-radius: 8px 8px 8px 8px;
@@ -1063,13 +1027,6 @@ export default {
}
}
.scroll-content {
height: calc(100% - 52px);
box-sizing: border-box;
overflow: auto;
padding: 32px;
}
.user-form {
margin-top: 24px;
/deep/ .ant-form-item {
@@ -213,6 +213,7 @@
v-model="formInline.enStandardSystem"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
style="width: 100%"
:disabled="disabled"
:tree-data="standardSystemOptions"
tree-checkable
treeCheckStrictly
@@ -235,60 +235,12 @@ export default {
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
/deep/ .ant-form-item-children {
width: 100%;
display: inline-block;
}
.form-flex-box {
display: flex;
flex-wrap: wrap;
}
.collapsible-panel-form {
margin-top: 20px;
&-header {
height: 56px;
line-height: 56px;
background: rgba(245, 245, 245, 0.6);
border-radius: 8px 8px 0 0;
border: 1px solid #E5E6EB;
padding: 0 20px;
font-size: 16px;
font-family: PingFang SC-Medium, PingFang SC, sans-serif;
font-weight: 600;
color: #1D2129;
display: flex;
justify-content: space-between;
.retractable-btn {
cursor: pointer;
font-size: 14px;
font-family: PingFang SC-Regular, PingFang SC, sans-serif;
color: @primary-color;
}
.anticon {
margin-right: 8px;
}
.pack-up-btn {
transform: rotate(-90deg);
}
.unfold-btn {
transform: rotate(90deg);
}
}
&-content {
border: 1px solid #E5E6EB;
border-top: none;
border-radius: 0 0 8px 8px;
padding: 20px;
}
}
.collapsible-content-no-head {
border-top: 1px solid #E5E6EB;
border-radius: 8px 8px 8px 8px;
@@ -232,6 +232,7 @@ export default {
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.draftPlanFinishDate') + this.$t('cannotEmpty'),
trigger: ['change', 'blur']
// trigger: 'change'
}
],
// 征求意见稿计划完成日期
@@ -240,6 +241,7 @@ export default {
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.exposureDraftPlanFinishDate') + this.$t('cannotEmpty'),
trigger: ['change', 'blur']
// trigger: 'change'
}
],
// 计划报批日期
@@ -248,6 +250,7 @@ export default {
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.planSubmissionDate') + this.$t('cannotEmpty'),
trigger: ['change', 'blur']
// trigger: 'change'
}
],
// 变更原因
@@ -279,19 +282,31 @@ export default {
// todo: 三个有校验的日期验证不会消失
console.log(value)
if (value && value.length > 0) {
this.$refs.ruleForm.clearValidate()
this.formInline.originEnStandardName = value[0].originEnStandardName
this.formInline.mainDraftingUser = value[0].mainDraftingUser
this.formInline.mainDraftingUser_dictText = value[0].mainDraftingUser_dictText
this.formInline.mainDraftingUnit = value[0].mainDraftingUnit
this.formInline.mainDraftingUnit_dictText = value[0].mainDraftingUnit_dictText
this.formInline.originDraftPlannedCompleteDate = value[0].draftPlannedCompleteDate
this.formInline.originSolicitationDraftPlanCompleteDate = value[0].solicitationDraftPlanCompleteDate
this.formInline.originPlanApprovalDate = value[0].planApprovalDate
this.formInline.draftPlannedCompleteDate = value[0].draftPlannedCompleteDate
this.formInline.solicitationDraftPlanCompleteDate = value[0].solicitationDraftPlanCompleteDate
this.formInline.planApprovalDate = value[0].planApprovalDate
this.$refs.ruleForm.validate()
// this.$refs.ruleForm.clearValidate()
const formInline = {}
// 企标名称
formInline.originEnStandardName = value[0].originEnStandardName
// 主起草人
formInline.mainDraftingUser = value[0].mainDraftingUser
formInline.mainDraftingUser_dictText = value[0].mainDraftingUser_dictText
// 主起草单位
formInline.mainDraftingUnit = value[0].mainDraftingUnit
formInline.mainDraftingUnit_dictText = value[0].mainDraftingUnit_dictText
// 原草稿计划完成日期
formInline.originDraftPlannedCompleteDate = value[0].draftPlannedCompleteDate
// 原征求意见稿计划完成日期
formInline.originSolicitationDraftPlanCompleteDate = value[0].solicitationDraftPlanCompleteDate
// 原计划报批日期
formInline.originPlanApprovalDate = value[0].planApprovalDate
// 草稿计划完成日期
formInline.draftPlannedCompleteDate = value[0].draftPlannedCompleteDate
// 征求意见稿计划完成日期
formInline.solicitationDraftPlanCompleteDate = value[0].solicitationDraftPlanCompleteDate
// 计划报批日期
formInline.planApprovalDate = value[0].planApprovalDate
this.formInline = Object.assign({}, this.formInline, formInline)
this.$forceUpdate()
// this.$refs.ruleForm.validate()
}
},
// 选择用户得到用户名