[update] 新增流程中心页,企标计划立项/变更流程

This commit is contained in:
lideqin
2023-10-11 18:07:14 +08:00
parent 4d45b77827
commit 505c07fd88
23 changed files with 3007 additions and 139 deletions
+23 -2
View File
@@ -69,14 +69,19 @@ module.exports = {
uploadAttachment: '上传附件',
completionTimeChange: '完成时间变更',
terminationOfWork: '工作终止',
masterDraftingDepartmentChanges: '主起草部门变更',
dutyDepartChange: '责任部门变更',
merge: '合并',
originalDraftPlanFinishDate: '原草稿计划完成日期',
originalExposureDraftPlanFinishDate: '原征求意见稿计划完成日期',
originalPlanSubmissionDate: '原计划报批日期',
changeReason: '变更原因',
superintendent: '所长',
relatedPersonnel: '相关人员'
relatedPersonnel: '相关人员',
originPrincipalDrafter: '原主起草人',
originMainDraftUnit: '原主起草单位',
originHeadOfMainDraftingUnit: '原起草单位负责人',
typeOfRevision: '制修订类型',
scopeOfApplication: '标准适用范围'
},
// 年度制修订计划(各部门主动上报)
revisionPlanActivelyReport: {
@@ -102,5 +107,21 @@ module.exports = {
timeConsuming: '耗时',
approvalOpinion: '审批意见',
opinionContent: '意见内容'
},
// 流程中心
processCenter: {
todoProcess: '待办流程',
doneProcess: '已办流程',
sentProcess: '已发流程',
monitorProcess: '监控流程',
draft: '草稿',
processNumber: '流程编号',
processType: '流程类型',
initiator: '发起人',
receivingTaskTime: '接收任务时间',
currentProcessor: '当前处理人',
finishTime: '完成时间',
processState: '流程状态',
processTime: '流程耗时(小时)'
}
}
+2
View File
@@ -151,6 +151,8 @@ module.exports = {
basicInformation: '基础信息',
personalInformation: '人员信息',
rangeOfApplication: '适用范围',
transact: '办理',
compulsoryWithdrawal: '强制撤回',
// 树右键
treeRight: {
addFolder: '新增文件夹',
+258 -1
View File
@@ -1,20 +1,277 @@
<template>
<div>
<a-button @click="toSearchWindow">跳转一般检索</a-button>
<i class="iconfont icon-chexiao" style="color: #D52C26"></i>
<i class="iconfont icon-star" style="color: #D52C26"></i>
<i class="iconfont icon-water-drop-slash" style="color: #D52C26"></i>
<i class="iconfont icon-star1" style="color: #D52C26"></i>
<i class="iconfont icon-jiedian" style="color: #D52C26"></i>
<i class="iconfont icon-user" style="color: #D52C26"></i>
<i class="iconfont icon-bianji" style="color: #D52C26"></i>
<i class="iconfont icon-shanchu_" style="color: #D52C26"></i>
<i class="iconfont icon-chat" style="color: #D52C26"></i>
<i class="iconfont icon-edit-1" style="color: #D52C26"></i>
<i class="iconfont icon-fangxingfenxiang" style="color: #D52C26"></i>
<i class="iconfont icon-chart-pie" style="color: #D52C26"></i>
<i class="iconfont icon-root-list" style="color: #D52C26"></i>
<i class="iconfont icon-save" style="color: #D52C26"></i>
<i class="iconfont icon-share-internal" style="color: #D52C26"></i>
<i class="iconfont icon-aichegujiabeifen7" style="color: #D52C26"></i>
<i class="iconfont icon-kucun_crm" style="color: #D52C26"></i>
<i class="iconfont icon-24gf-folderOpen" style="color: #D52C26"></i>
<i class="iconfont icon-qicheweixiu" style="color: #D52C26"></i>
<i class="iconfont icon-yujing" style="color: #D52C26"></i>
<i class="iconfont icon-shezhi" style="color: #D52C26"></i>
<i class="iconfont icon-shouye" style="color: #D52C26"></i>
<i class="iconfont icon-file-star" style="color: #D52C26"></i>
<i class="iconfont icon-file-set" style="color: #D52C26"></i>
<i class="iconfont icon-yingyong" style="color: #D52C26"></i>
<!-- <j-expand-table-->
<!-- :columns="columns"-->
<!-- :dataSource="dataSource"-->
<!-- :extraForm="extraForm"-->
<!-- formIsDepend="feedback"-->
<!-- ref="jExpandTable">-->
<!-- <template slot="feedback" slot-scope="{text, record}">-->
<!-- <j-dict-select-tag style="width: 100%" dict-code="field_show_type" v-model="record.feedback"></j-dict-select-tag>-->
<!-- </template>-->
<!-- </j-expand-table>-->
<j-expand-table
:columns="columns"
:dataSource="dataSource"
:extraForm="extraForm"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
:formIsDepend="false"
:pagination="ipagination"
ref="jExpandTable">
<template slot="feedback" slot-scope="{text, record}">
<j-dict-select-tag style="width: 100%" dict-code="field_show_type" v-model="record.feedback"></j-dict-select-tag>
</template>
</j-expand-table>
<a-button @click="submit">提交</a-button>
</div>
</template>
<script>
import JExpandTable from '../../components/JExpandTable'
import JDictSelectTag from '../../components/dict/JDictSelectTag'
export default {
name: 'Analysis',
components: { JExpandTable, JDictSelectTag },
data () {
return {
ipagination: {
current: 1,
pageSize: 50,
pageSizeOptions: ['10', '50', '100', '150', '200'],
showTotal: (total, range) => {
return range[0] + '-' + range[1] + ' ' + this.$t('total') + ' ' + total + ' ' + this.$t('strip')
},
showQuickJumper: true,
showSizeChanger: true,
total: 0
},
selectedRowKeys: [],
columns: [
{
title: '标准号/条款号',
dataIndex: 'number',
key: 'number',
scopedSlots: {
customRender: 'text'
}
},
{
title: '标准名称/条款名称',
dataIndex: 'name',
key: 'name',
scopedSlots: {
customRender: 'text'
}
},
{
title: '条款内容',
dataIndex: 'content',
key: 'content',
scopedSlots: {
customRender: 'text'
}
},
{
title: '历史评估结果',
dataIndex: 'result',
key: 'result',
scopedSlots: {
customRender: 'text'
}
},
{
title: '上一节点处理人',
dataIndex: 'resulter',
key: 'resulter',
scopedSlots: {
customRender: 'text'
}
},
{
title: '评估反馈',
dataIndex: 'feedback',
key: 'feedback',
scopedSlots: {
customRender: 'feedback'
}
}
],
dataSource: [
{
key: 1,
name: 'John Brown',
number: 32,
content: 'New York No. 1 Lake Park',
result: 'My name is John Brown, I am 32 years old, living in New York No. 1 Lake Park.',
feedback: '1'
},
{
key: 2,
name: 'John Brown',
number: 32,
content: 'New York No. 1 Lake Park',
result: 'My name is John Brown, I am 32 years old, living in New York No. 1 Lake Park.',
feedback: '1'
}
],
// extraForm: {
// 1: {
// rules: {
// desc: { required: true, message: '请输入依据描述', trigger: 'blur' },
// file: { required: false, message: '请上传佐证材料', trigger: 'change' }
// },
// formArr: [
// {
// fieldShowType: 1,
// dbFieldTxt: '依据描述',
// dbFieldName: 'desc'
// },
// {
// fieldShowType: 2,
// dbFieldTxt: '佐证材料',
// dbFieldName: 'file'
// }
// ]
// },
// 2: {
// rules: {
// desc: { required: true, message: '请输入依据描述', trigger: 'blur' },
// finishDate: { required: true, message: '请选择预计整改完成时间', trigger: 'change' }
// },
// formArr: [
// {
// fieldShowType: 1,
// dbFieldTxt: '依据描述',
// fieldMustInput: true,
// dbFieldName: 'desc'
// },
// {
// fieldShowType: 3,
// dbFieldTxt: '预计整改完成时间',
// fieldMustInput: true,
// dbFieldName: 'finishDate'
// }
// ]
// },
// 3: {
// rules: {
// desc: { required: true, message: '请输入依据描述', trigger: 'blur' },
// finishDate: { required: true, message: '请选择预计整改完成时间', trigger: 'change' }
// },
// formArr: [
// {
// fieldShowType: 1,
// dbFieldTxt: '依据描述',
// fieldMustInput: true,
// dbFieldName: 'desc'
// },
// {
// fieldShowType: 3,
// dbFieldTxt: '预计整改完成时间',
// fieldMustInput: true,
// dbFieldName: 'finishDate'
// }
// ]
// },
// 4: {
// rules: {
// desc: { required: true, message: '请输入依据描述', trigger: 'blur' }
// },
// formArr: [
// {
// fieldShowType: 1,
// dbFieldTxt: '依据描述',
// fieldMustInput: true,
// dbFieldName: 'desc'
// }
// ]
// }
// },
extraForm: {
rules: {
desc: { required: false, message: '请输入依据描述', trigger: 'blur' },
file: { required: false, message: '请上传佐证材料', trigger: 'change' },
tokenNum: { required: true, message: '请输入工作令编号', trigger: 'blur' },
itemName: { required: true, message: '请输入项目名称', trigger: 'blur' }
},
formArr: [
{
fieldShowType: 1,
dbFieldTxt: '依据描述',
dbFieldName: 'desc',
isDisabled: true
},
{
fieldShowType: 2,
dbFieldTxt: '佐证材料',
dbFieldName: 'file',
isDisabled: true
},
{
fieldShowType: 4,
dbFieldTxt: '工作令编号',
dbFieldName: 'tokenNum'
},
{
fieldShowType: 4,
dbFieldTxt: '项目名称',
dbFieldName: 'itemName'
}
]
}
}
},
created () {
},
methods: {
// 点击跳转到检索页
toSearchWindow () {
const { href } = this.$router.resolve({
path: '/generalSearch'
})
window.open(href, '_blank')
},
onSelectChange (selectRowKeys) {
this.selectedRowKeys = selectRowKeys
},
submit () {
// 获取表格扩展部分的校验结果
const result = this.$refs.jExpandTable.submit()
if (result) {
// 每个表单校验都通过了
console.log('通过了', this.dataSource)
} else {
// 有表单没有通过
this.$message.warning('请输入必填项')
}
}
}
}
</script>
@@ -61,7 +61,7 @@
<a-col :span="6">
<a-form-item :label="$t('enterpriseStandardLibrary.plan.projectStatus')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag
:placeholder="$t('pleaseEnter')+$t('enterpriseStandardLibrary.plan.projectStatus')"
:placeholder="$t('pleaseSelect')+$t('enterpriseStandardLibrary.plan.projectStatus')"
dict-code="esp_project_status"
v-model="queryParam.projectStatus">
</j-dict-select-tag>
@@ -71,7 +71,7 @@
<a-col :span="6">
<a-form-item :label="$t('enterpriseStandardLibrary.plan.changeState')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag
:placeholder="$t('pleaseEnter')+$t('enterpriseStandardLibrary.plan.changeState')"
:placeholder="$t('pleaseSelect')+$t('enterpriseStandardLibrary.plan.changeState')"
dict-code="esp_change_status"
v-model="queryParam.changeStatus">
</j-dict-select-tag>
@@ -87,7 +87,7 @@
<a-col :span="6">
<a-form-item :label="$t('enterpriseStandardLibrary.plan.standardType')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag
:placeholder="$t('pleaseEnter')+$t('enterpriseStandardLibrary.plan.standardType')"
:placeholder="$t('pleaseSelect')+$t('enterpriseStandardLibrary.plan.standardType')"
dict-code="esp_standard_type"
v-model="queryParam.standardType">
</j-dict-select-tag>
@@ -97,7 +97,7 @@
<a-col :span="6">
<a-form-item :label="$t('enterpriseStandardLibrary.plan.revisionType')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag
:placeholder="$t('pleaseEnter')+$t('enterpriseStandardLibrary.plan.revisionType')"
:placeholder="$t('pleaseSelect')+$t('enterpriseStandardLibrary.plan.revisionType')"
dict-code="esp_application_category"
v-model="queryParam.applicationCategory">
</j-dict-select-tag>
@@ -111,7 +111,7 @@ export default {
],
url: {
list: '/personal/lawsStandardSharing/received/page',
deleteBatch: '/personal/lawsStandardSharing/deleteBatch'
deleteBatch: '/personal/lawsStandardSharing/batchDel'
}
}
},
@@ -75,8 +75,10 @@
</div>
<!-- 人员信息 -->
<div v-if="switchValue === 'user'" class="scroll-content personnel-info-wrapper">
<personnel-info :data="personnelInfoData" :currentNode="currentNode"></personnel-info>
<div v-if="switchValue === 'user'" class="scroll-content">
<process-detail-list :url="url">
<personnel-info slot="personnelInfo" :data="personnelInfoData" :currentNode="currentNode"></personnel-info>
</process-detail-list>
</div>
</internal-detail-page>
</template>
@@ -86,6 +88,7 @@ import EngineerInitForm from './modules/EngineerInitForm'
import InternalDetailPage from '@/components/InternalDetailPage'
import PersonnelInfo from '@/components/PersonnelInfo'
import ContactEnterSendTaskForm from './modules/ContactEnterSendTaskForm'
import ProcessDetailList from '../../../components/ProcessDetailList'
const personData = [
{
@@ -140,14 +143,20 @@ const personData = [
export default {
name: 'RevisionPlanActivelyReportFlow',
components: { ContactEnterSendTaskForm, EngineerInitForm, InternalDetailPage, PersonnelInfo },
components: { ProcessDetailList, ContactEnterSendTaskForm, EngineerInitForm, InternalDetailPage, PersonnelInfo },
computed: {
pageTitle () {
return this.$t('flowCenter') + this.$route.meta.title
}
},
mounted () {
this.personnelInfoData = personData
if (this.currentNode === 1) {
this.personnelInfoData = personData
} else {
this.personnelInfoData = personData.map(item => {
return { ...item, canChoose: false }
})
}
},
data () {
return {
@@ -195,7 +204,8 @@ export default {
approvalInfoForm: this.$form.createForm(this), // 审批信息表单
personnelInfoData: [], // 人员信息数据
url: {
importExcelUrl: ''
importExcelUrl: '',
list: '' // 人员信息右侧表的分页查询接口
}
}
},
@@ -230,10 +240,4 @@ export default {
padding: 32px;
}
// 人员信息
.personnel-info-wrapper {
/deep/ .ant-steps {
width: 400px;
}
}
</style>
@@ -14,7 +14,7 @@
<!-- 基础信息 -->
<div class="header-text">{{ $t('basicInformation') }}</div>
<div class="form-flex-box">
<!-- 申请类型 只有标准立项一条数据 -->
<!-- 申请类型 -->
<div class="box-title-text form-flex-item-half">
<div class="title-text">
<span class="required">*</span>
@@ -26,7 +26,6 @@
<a-select v-model="formInline.applicationType"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.applicationType')">
<a-select-option :value="1">{{ $t('workCenter.enterpriseInitChangePlan.standardProjectEstablishment') }}</a-select-option>
<a-select-option :value="2">{{ $t('workCenter.enterpriseInitChangePlan.change') }}</a-select-option>
</a-select>
</a-form-model-item>
</div>
@@ -39,21 +38,12 @@
</span>
</div>
<a-form-model-item class="item-model" prop="itemCategory">
<a-select v-if="formInline.applicationType === 1"
v-model="formInline.itemCategory"
<a-select v-model="formInline.itemCategory"
@change="itemCategoryChange"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.itemCategory')">
<a-select-option :value="1">{{ $t('workCenter.enterpriseInitChangePlan.formulate') }}</a-select-option>
<a-select-option :value="2">{{ $t('workCenter.enterpriseInitChangePlan.revise') }}</a-select-option>
</a-select>
<a-select v-else
v-model="formInline.itemCategory"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.itemCategory')">
<a-select-option :value="1">{{ $t('workCenter.enterpriseInitChangePlan.completionTimeChange') }}</a-select-option>
<a-select-option :value="2">{{ $t('workCenter.enterpriseInitChangePlan.terminationOfWork') }}</a-select-option>
<a-select-option :value="3">{{ $t('workCenter.enterpriseInitChangePlan.masterDraftingDepartmentChanges') }}</a-select-option>
<a-select-option :value="4">{{ $t('workCenter.enterpriseInitChangePlan.merge') }}</a-select-option>
</a-select>
</a-form-model-item>
</div>
<!-- 标准立项-制定 -->
@@ -245,12 +235,15 @@
</span>
</div>
<a-form-model-item class="item-model" prop="standardSystem">
<j-dict-select-tag class="box-input"
v-model="formInline.standardSystem"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.standardSystem')"
:type="'select'"
:triggerChange="false"
dictCode="standard_system" />
<a-tree-select
v-model="formInline.standardSystem"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
style="width: 100%"
:tree-data="standardSystemOptions"
tree-checkable
treeCheckStrictly
:label-in-value="false"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.standardSystem')" />
</a-form-model-item>
</div>
<!-- 标准类型 -->
@@ -489,6 +482,7 @@ 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'
export default {
name: 'ContactEnterSendTaskModal',
@@ -497,7 +491,8 @@ export default {
return {
StandardSource,
workingGroupTreeList: [], // 隶属工作组下拉框数据
partNameOptions: [], // 零部件名称下拉框数据
partNameOptions: [], // 零部件名称下拉框数据\
standardSystemOptions: [], // 企标体系下拉框数据
visible: false,
confirmLoading: false,
model: {},
@@ -564,7 +559,7 @@ export default {
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.yearNumber') + this.$t('cannotEmpty'),
trigger: ['change', 'blur']
trigger: 'change'
}
],
// 新企标名称
@@ -674,6 +669,7 @@ export default {
mounted () {
this.getWorkGroupTree()
this.initPartNameOptions()
this.initStandardSystemOptions()
},
methods: {
add () {
@@ -692,6 +688,14 @@ export default {
}
})
},
// 获取标准体系下拉框数据
initStandardSystemOptions () {
getTreeList({ option: 1 }).then(res => {
if (res.success) {
this.standardSystemOptions = res.result
}
})
},
// 获取内部工作组树
getWorkGroupTree () {
getWorkGroupTreeList().then((res) => {
@@ -0,0 +1,85 @@
<template>
<div>
<a-form-model :model="formInline" class="form-add" :rules="rules" ref="ruleForm">
<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="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.revisionPlanActivelyReport.whetherToSendAContact')">
{{ $t('workCenter.revisionPlanActivelyReport.whetherToSendAContact') }}
</span>
</div>
<a-form-model-item class="item-model" prop="whetherToSendAContact">
<user-selection :placeholder="$t('pleaseSelect')+$t('workCenter.revisionPlanActivelyReport.workingGroupContactPerson')"
v-model="formInline.revisionPlanActivelyReport"
:disabled="disabled"
filedName="revisionPlanActivelyReport"
@nameChange="userSelectNameChange"
:nameStr="formInline.revisionPlanActivelyReport_dictText"
type="radio" />
</a-form-model-item>
</div>
</div>
</div>
</a-form-model>
<!-- 操作区域 -->
<div 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>
<!-- 表格新增编辑弹框 -->
</div>
</template>
<script>
export default {
name: 'ContactEnterStandardForm'
}
</script>
<style scoped>
</style>
@@ -96,7 +96,7 @@
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.itemCategory')">
<a-select-option :value="1">{{ $t('workCenter.enterpriseInitChangePlan.completionTimeChange') }}</a-select-option>
<a-select-option :value="2">{{ $t('workCenter.enterpriseInitChangePlan.terminationOfWork') }}</a-select-option>
<a-select-option :value="3">{{ $t('workCenter.enterpriseInitChangePlan.masterDraftingDepartmentChanges') }}</a-select-option>
<a-select-option :value="3">{{ $t('workCenter.enterpriseInitChangePlan.dutyDepartChange') }}</a-select-option>
<a-select-option :value="4">{{ $t('workCenter.enterpriseInitChangePlan.merge') }}</a-select-option>
</a-select>
</a-form-model-item>
@@ -112,14 +112,36 @@
:currentNode="currentNode"
:itemCategory="formInline.itemCategory">
</approval-base-info>
<!-- 申请类型为变更时的业务基本信息部分组件 -->
<change-base-info
v-else-if="formInline.applicationType === 2"
<!-- 申请类型为变更,项目类型为完成时间变更时的业务基本信息部分组件 -->
<finish-time-change-base-info
v-else-if="formInline.applicationType === 2 && formInline.itemCategory === 1"
ref="changeBaseInfo"
:disabled="disabled"
:currentNode="currentNode"
>
</change-base-info>
</finish-time-change-base-info>
<!-- 申请类型为变更项目类型为工作终止时的业务基本信息部分组件 -->
<job-end-base-info
v-else-if="formInline.applicationType === 2 && formInline.itemCategory === 2"
ref="changeBaseInfo"
:disabled="disabled"
:currentNode="currentNode"
>
</job-end-base-info>
<!-- 申请类型为变更项目类型为责任部门变更的业务基本信息部分组件 -->
<duty-depart-change-base-info
v-else-if="formInline.applicationType === 2 && formInline.itemCategory === 3"
ref="changeBaseInfo"
:disabled="disabled"
>
</duty-depart-change-base-info>
<!-- 申请类型为变更项目类型为合并的业务基本信息部分组件 -->
<merge-base-info
v-else-if="formInline.applicationType === 2 && formInline.itemCategory === 4"
ref="changeBaseInfo"
:disabled="disabled"
>
</merge-base-info>
<!-- 部分节点需要选人 -->
<a-form v-if="formInline.applicationType === 2 && [6, 7].includes(currentNode)" class="user-form" :form="userForm">
@@ -146,8 +168,8 @@
</a-form>
<!-- 流程审批信息 -->
<div class="process-part-title">{{ $t('processApprovalInformation') }}</div>
<a-form :form="approvalInfoForm">
<div class="process-part-title" v-if="!onlyLook">{{ $t('processApprovalInformation') }}</div>
<a-form :form="approvalInfoForm" v-if="!onlyLook">
<!--备注-->
<a-form-item :labelCol="longLabelCol" :wrapperCol="longWrapperCol" :label="$t('remarks')">
<a-textarea :placeholder="$t('pleaseEnter') + $t('remarks')"
@@ -162,11 +184,13 @@
</a-form>
</div>
<!-- 人员信息 -->
<div v-if="switchValue === 'user'" class="scroll-content personnel-info-wrapper">
<personnel-info :data="personnelInfoData" :currentNode="currentNode"></personnel-info>
<div v-if="switchValue === 'user'" class="scroll-content">
<process-detail-list :url="url">
<personnel-info slot="personnelInfo" :data="personnelInfoData" :currentNode="currentNode"></personnel-info>
</process-detail-list>
</div>
<!-- 操作按钮 -->
<div class="bottom-operate-box">
<div class="bottom-operate-box" v-if="!onlyLook">
<!-- 发起节点 -->
<template v-if="currentNode === 1">
<!-- 保存 -->
@@ -177,7 +201,7 @@
<!-- 变更的新起草部门主管级上一级领导下发节点 -->
<template v-else-if="formInline.applicationType === 2 && [6, 7].includes(currentNode)">
<!-- 转办 -->
<a-button type="primary" ghost :loading="loading" @click="handleTurnTo" icon="upload">{{ $t('turnTo') }}</a-button>
<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>
<!-- 提交 -->
@@ -189,13 +213,13 @@
</template>
<template v-else>
<!-- 转办 -->
<a-button type="primary" ghost :loading="loading" @click="handleTurnTo" icon="upload">{{ $t('turnTo') }}</a-button>
<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="check-circle">{{ $t('reject') }}</a-button>
<a-button type="primary" :loading="loading" @click="handleReject" icon="close-circle">{{ $t('reject') }}</a-button>
</template>
</div>
@@ -216,7 +240,11 @@ import {
enterprisePlanApprovalDetermine
} from '@/api/workCenter'
import ApprovalBaseInfo from './modules/ApprovalBaseInfo'
import ChangeBaseInfo from './modules/ChangeBaseInfo'
import FinishTimeChangeBaseInfo from './modules/FinishTimeChangeBaseInfo'
import ProcessDetailList from '../../../components/ProcessDetailList'
import JobEndBaseInfo from './modules/JobEndBaseInfo'
import DutyDepartChangeBaseInfo from './modules/DutyDepartChangeBaseInfo'
import MergeBaseInfo from './modules/MergeBaseInfo'
// 标准立项的人员信息
const approvalPersonalInfo = [ // 人员信息的数据
@@ -338,7 +366,11 @@ const changePersonalInfo = [
export default {
name: 'PlanApprovalFlow',
components: {
ChangeBaseInfo,
MergeBaseInfo,
DutyDepartChangeBaseInfo,
JobEndBaseInfo,
ProcessDetailList,
FinishTimeChangeBaseInfo,
ApprovalBaseInfo,
UserSelectModal,
PersonnelInfo,
@@ -354,9 +386,21 @@ export default {
'formInline.applicationType' (value) {
if (value) {
if (this.formInline.applicationType === 1) {
this.personnelInfoData = approvalPersonalInfo
if (this.currentNode === 1) {
this.personnelInfoData = approvalPersonalInfo
} else {
this.personnelInfoData = approvalPersonalInfo.map(item => {
return { ...item, canChoose: false }
})
}
} else {
this.personnelInfoData = changePersonalInfo
if (this.currentNode === 1) {
this.personnelInfoData = changePersonalInfo
} else {
this.personnelInfoData = changePersonalInfo.map(item => {
return { ...item, canChoose: false }
})
}
}
}
if (this.formInline.itemCategory) {
@@ -365,14 +409,26 @@ export default {
}
},
mounted () {
this.personnelInfoData = approvalPersonalInfo
if (this.currentNode === 1) {
this.personnelInfoData = approvalPersonalInfo
} else {
this.personnelInfoData = approvalPersonalInfo.map(item => {
return { ...item, canChoose: false }
})
}
// 如果是查看进入的,不可编辑
if (this.$route.query.onlyLook) {
this.onlyLook = this.$route.query.onlyLook
this.disabled = this.$route.query.onlyLook
}
},
data () {
return {
loading: false,
switchValue: 'base', // 头部tab选中值
disabled: false,
currentNode: 1, // 当前节点
onlyLook: false, // 是否仅查看
currentNode: 2, // 当前节点
model: {},
processInfoForm: this.$form.createForm(this),
labelCol: {
@@ -441,7 +497,10 @@ export default {
},
userForm: this.$form.createForm(this), // 部分节点需要选人的表单
approvalInfoForm: this.$form.createForm(this), // 审批信息表单
personnelInfoData: []
personnelInfoData: [],
url: {
list: '' // 人员信息的右侧表格获取接口
}
}
},
methods: {
@@ -681,10 +740,4 @@ export default {
}
}
// 人员信息
.personnel-info-wrapper {
/deep/ .ant-steps {
width: 400px;
}
}
</style>
@@ -12,7 +12,7 @@
<div class="form-flex-box collapsible-panel-form-content" v-show="retractableFlag.baseInfo">
<!-- 标准立项-制定 -->
<template v-if="itemCategory && itemCategory === 1">
<!-- 编号 -->
<!-- 编号 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
@@ -28,7 +28,7 @@
:placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum')" />
</a-form-model-item>
</div>
<!-- 名称 -->
<!-- 名称 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
@@ -274,7 +274,7 @@
</span>
</div>
<a-form-model-item class="item-model" prop="compilationIllustration">
<a-button type="primary" class="button-text" :disabled="disabled" @click="clickButtonToUpload('compilationIllustration')">
<a-button type="primary" class="button-text" @click="clickButtonToUpload('compilationIllustration')">
{{
(formInline.compilationIllustration === 'null' || formInline.compilationIllustration === ''
|| formInline.compilationIllustration === null || formInline.compilationIllustration === undefined)
@@ -577,7 +577,7 @@
</span>
</div>
<a-form-model-item class="item-model" prop="uploadAttachment">
<a-button type="primary" :disabled="disabled" class="button-text" style="width: 200px" @click="clickButtonToUpload('uploadAttachment')">
<a-button type="primary" class="button-text" style="width: 200px" @click="clickButtonToUpload('uploadAttachment')">
{{
(formInline.uploadAttachment === 'null' || formInline.uploadAttachment === ''
|| formInline.uploadAttachment === null || formInline.uploadAttachment === undefined)
@@ -591,7 +591,7 @@
</div>
<!-- 上传文件弹框 -->
<upload-file ref="uploadFile" :file-max-size="fileMaxSize" @change="uploadFileChange" :return-url="false"></upload-file>
<upload-file ref="uploadFile" :file-max-size="fileMaxSize" @change="uploadFileChange" :return-url="false" :disabled="disabled"></upload-file>
</a-form-model>
</template>
@@ -862,73 +862,13 @@ 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;
}
.form-flex-item {
width: calc(100% / 3);
}
.form-flex-item-long {
width: 100%;
}
@@ -0,0 +1,314 @@
<template>
<a-form-model :model="formInline" class="form-add" :rules="rules" ref="ruleForm">
<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">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text"
:title="$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum')">
{{ $t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum') }}
</span>
</div>
<a-form-model-item class="item-model" prop="enterpriseStandardPlanId">
<enterprise-plan-selection type="radio"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum')"
v-model="formInline.enterpriseStandardPlanId"
:standard-number="formInline.standardNo"
@standardNumberChange="standardNumberChange"
@listChange="listChange"/>
</a-form-model-item>
</div>
<!-- 企标名称 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="title-text-text"
:title="$t('workCenter.enterpriseInitChangePlan.enterpriseStandardName')">
{{ $t('workCenter.enterpriseInitChangePlan.enterpriseStandardName') }}
</span>
</div>
<a-form-model-item class="item-model" prop="standardName">
<a-input class="box-input"
disabled
v-model="formInline.standardName"
:maxLength="50"
:placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.enterpriseStandardName')" />
</a-form-model-item>
</div>
<!-- 原主起草人 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.originPrincipalDrafter')">
{{ $t('workCenter.enterpriseInitChangePlan.originPrincipalDrafter') }}
</span>
</div>
<a-form-model-item class="item-model" prop="principalDrafter">
<user-selection :placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.originPrincipalDrafter')"
v-model="formInline.principalDrafter"
disabled
filedName="originPrincipalDrafter"
@nameChange="userSelectNameChange"
:nameStr="formInline.originPrincipalDrafter_dictText"
type="radio" />
</a-form-model-item>
</div>
<!-- 原主起草单位 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.originMainDraftUnit')">
{{ $t('workCenter.enterpriseInitChangePlan.originMainDraftUnit') }}
</span>
</div>
<a-form-model-item class="item-model" prop="originMainDraftUnit">
<j-select-depart v-model="formInline.originMainDraftUnit"
disabled
:backDepart="true" />
</a-form-model-item>
</div>
<!-- 原起草单位负责人 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.originHeadOfMainDraftingUnit')">
{{ $t('workCenter.enterpriseInitChangePlan.originHeadOfMainDraftingUnit') }}
</span>
</div>
<a-form-model-item class="item-model" prop="originHeadOfMainDraftingUnit">
<user-selection :placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.originHeadOfMainDraftingUnit')"
v-model="formInline.originHeadOfMainDraftingUnit"
disabled
filedName="originHeadOfMainDraftingUnit"
@nameChange="userSelectNameChange"
:nameStr="formInline.originHeadOfMainDraftingUnit_dictText"
type="radio" />
</a-form-model-item>
</div>
<!-- 主起草人 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.principalDrafter')">
{{ $t('workCenter.enterpriseInitChangePlan.principalDrafter') }}
</span>
</div>
<a-form-model-item class="item-model" prop="principalDrafter">
<user-selection :placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.principalDrafter')"
v-model="formInline.principalDrafter"
:disabled="disabled"
filedName="principalDrafter"
@nameChange="userSelectNameChange"
:nameStr="formInline.principalDrafter_dictText"
type="radio" />
</a-form-model-item>
</div>
<!-- 主起草单位 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.mainDraftUnit')">
{{ $t('workCenter.enterpriseInitChangePlan.mainDraftUnit') }}
</span>
</div>
<a-form-model-item class="item-model" prop="mainDraftUnit">
<j-select-depart v-model="formInline.mainDraftUnit"
:disabled="disabled"
:backDepart="true" />
</a-form-model-item>
</div>
<!-- 起草单位负责人 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.headOfMainDraftingUnit')">
{{ $t('workCenter.enterpriseInitChangePlan.headOfMainDraftingUnit') }}
</span>
</div>
<a-form-model-item class="item-model" prop="headOfMainDraftingUnit">
<user-selection :placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.headOfMainDraftingUnit')"
v-model="formInline.headOfMainDraftingUnit"
:disabled="disabled"
filedName="headOfMainDraftingUnit"
@nameChange="userSelectNameChange"
:nameStr="formInline.headOfMainDraftingUnit_dictText"
type="radio" />
</a-form-model-item>
</div>
<!-- 变更原因 -->
<div class="box-title-text form-flex-item form-flex-item-long">
<div class="title-text title-text-long">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.changeReason')">
{{ $t('workCenter.enterpriseInitChangePlan.changeReason') }}
</span>
</div>
<a-form-model-item class="item-model" prop="changeReason">
<a-textarea :placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.changeReason')"
:maxLength="500"
v-model="formInline.changeReason" :rows="4" />
</a-form-model-item>
</div>
</div>
</div>
</a-form-model>
</template>
<script>
import EnterprisePlanSelection from '@/components/selection/EnterprisePlanSelection'
import UserSelection from '@/components/selection/UserSelection'
export default {
name: 'DutyDepartChangeBaseInfo',
components: { EnterprisePlanSelection, UserSelection },
props: {
disabled: {
type: Boolean,
required: false,
default: false
}
},
data () {
return {
formInline: {},
rules: {
// 企标编号
enterpriseStandardPlanId: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 草稿计划完成日期
draftPlanFinishDate: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.draftPlanFinishDate') + this.$t('cannotEmpty'),
trigger: ['change', 'blur']
}
],
// 征求意见稿计划完成日期
exposureDraftPlanFinishDate: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.exposureDraftPlanFinishDate') + this.$t('cannotEmpty'),
trigger: ['change', 'blur']
}
],
// 计划报批日期
planSubmissionDate: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.planSubmissionDate') + this.$t('cannotEmpty'),
trigger: ['change', 'blur']
}
],
// 变更原因
changeReason: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.changeReason') + this.$t('cannotEmpty'),
trigger: 'blur'
}
]
}
}
},
methods: {
// 企标计划选择完成的企标编号回调
standardNumberChange (value) {
this.formInline.standardNo = value
},
// 企标选编号选择完成的回调
listChange (value) {
console.log(value)
if (value && value.length > 0) {
this.formInline.standardName = value[0].originEnStandardName
this.formInline.principalDrafter_dictText = value[0].mainDraftingUser
this.formInline.mainDraftUnit = value[0].mainDraftingUnit
this.formInline.originPrincipalDrafter_dictText = value[0].mainDraftingUser
this.formInline.originMainDraftUnit = value[0].mainDraftingUnit
}
},
// 选择用户得到用户名
userSelectNameChange (value, fieldName) {
this.formInline[fieldName + '_dictText'] = value
}
}
}
</script>
<style scoped lang="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;
}
.form-flex-item {
width: calc(100% / 3);
}
.form-flex-item-long {
width: 100%;
}
.title-text-long {
width: 114px;
}
</style>
@@ -42,17 +42,17 @@
</j-table>
</div>
<change-base-info-drawer ref="changeBaseInfoDrawer" @ok="changeBaseInfoDrawerOk"></change-base-info-drawer>
<finish-time-change-base-info-drawer ref="changeBaseInfoDrawer" @ok="changeBaseInfoDrawerOk"></finish-time-change-base-info-drawer>
</div>
</template>
<script>
import ChangeBaseInfoDrawer from './ChangeBaseInfoDrawer'
import FinishTimeChangeBaseInfoDrawer from './FinishTimeChangeBaseInfoDrawer'
import JTable from '@/components/jero/JTable'
export default {
name: 'ChangeBaseInfo',
components: { ChangeBaseInfoDrawer, JTable },
name: 'FinishTimeChangeBaseInfo',
components: { FinishTimeChangeBaseInfoDrawer, JTable },
props: {
disabled: {
type: Boolean,
@@ -196,16 +196,14 @@
</template>
<script>
import { StandardSource } from '@/enums/commonEnums'
import UserSelection from '@/components/selection/UserSelection'
import EnterprisePlanSelection from '@/components/selection/EnterprisePlanSelection'
export default {
name: 'ChangeBaseInfoDrawer',
name: 'FinishTimeChangeBaseInfoDrawer',
components: { EnterprisePlanSelection, UserSelection },
data () {
return {
StandardSource,
visible: false,
confirmLoading: false,
model: {},
@@ -0,0 +1,186 @@
<template>
<div class="change-base-info-wrapper">
<!-- 操作区域 -->
<div class="table-operator">
<!-- 新增 -->
<a-button icon="plus" type="primary" @click="handleAdd" :disabled="disabled">
{{ $t('newlyAdded') }}
</a-button>
<!-- 批量删除 -->
<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>
<job-end-base-info-drawer ref="jobEndBaseInfoDrawer" @ok="jobEndBaseInfoDrawerOk"></job-end-base-info-drawer>
</div>
</template>
<script>
import JTable from '@/components/jero/JTable'
import JobEndBaseInfoDrawer from './JobEndBaseInfoDrawer'
export default {
name: 'JobEndBaseInfo',
components: { JobEndBaseInfoDrawer, JTable },
props: {
disabled: {
type: Boolean,
required: false,
default: false
},
currentNode: {
type: Number,
required: false,
default: 1
}
},
data () {
return {
loading: false,
columns: [
{
title: this.$t('serialNumber'),
dataIndex: '',
key: 'rowIndex',
width: 80,
align: 'center',
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{ // 企标编号
title: this.$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum'),
align: 'center',
width: 180,
dataIndex: 'standardNo',
scopedSlots: { customRender: 'toDetail' }
},
{ // 企标名称
title: this.$t('workCenter.enterpriseInitChangePlan.enterpriseStandardName'),
align: 'center',
width: 180,
dataIndex: 'standardName',
scopedSlots: { customRender: 'toDetail' }
},
{ // 主起草人
title: this.$t('workCenter.enterpriseInitChangePlan.principalDrafter'),
align: 'center',
width: 180,
dataIndex: 'principalDrafter_dictText',
scopedSlots: { customRender: 'text' }
},
{ // 主起草单位
title: this.$t('workCenter.enterpriseInitChangePlan.mainDraftUnit'),
align: 'center',
width: 180,
dataIndex: 'mainDraftUnit',
scopedSlots: { customRender: 'text' }
},
{ // 变更原因
title: this.$t('workCenter.enterpriseInitChangePlan.changeReason'),
align: 'center',
width: 180,
dataIndex: 'changeReason',
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
},
// 新增或编辑完成
jobEndBaseInfoDrawerOk (value) {
console.log(value, this.modalType)
value.draftPlannedCompleteDate = value.originalDraftPlanFinishDate
value.solicitationDraftPlanCompleteDate = value.originalExposureDraftPlanFinishDate
value.planApprovalDate = value.originalPlanSubmissionDate
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.jobEndBaseInfoDrawer.add()
},
// 编辑
handleEdit (record, index) {
this.modalType = 'edit' + index
this.$refs.jobEndBaseInfoDrawer.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 lang="less">
.change-base-info-wrapper {
margin-top: 20px;
}
</style>
@@ -0,0 +1,212 @@
<template>
<a-drawer
:title="$t('standardSelect.standardSelection')"
:maskClosable="false"
:width="1000"
placement="right"
:closable="true"
@close="handleCancel"
:visible="visible"
class="custom-drawer-style">
<div class="custom-drawer-style-scroll">
<a-spin :spinning="confirmLoading">
<a-form-model :model="formInline" class="form-add" :rules="rules" ref="ruleForm">
<div class="form-flex-box">
<!-- 企标编号 -->
<div class="box-title-text form-flex-item-half">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text"
:title="$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum')">
{{ $t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum') }}
</span>
</div>
<a-form-model-item class="item-model" prop="enterpriseStandardPlanId">
<enterprise-plan-selection type="radio"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum')"
v-model="formInline.enterpriseStandardPlanId"
:standard-number="formInline.standardNo"
@standardNumberChange="standardNumberChange"
@listChange="listChange"/>
</a-form-model-item>
</div>
<!-- 企标名称 -->
<div class="box-title-text form-flex-item-half">
<div class="title-text">
<span class="title-text-text"
:title="$t('workCenter.enterpriseInitChangePlan.enterpriseStandardName')">
{{ $t('workCenter.enterpriseInitChangePlan.enterpriseStandardName') }}
</span>
</div>
<a-form-model-item class="item-model" prop="standardName">
<a-input class="box-input"
disabled
v-model="formInline.standardName"
:maxLength="50"
:placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.enterpriseStandardName')" />
</a-form-model-item>
</div>
<!-- 主起草人 -->
<div class="box-title-text form-flex-item-half">
<div class="title-text">
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.principalDrafter')">
{{ $t('workCenter.enterpriseInitChangePlan.principalDrafter') }}
</span>
</div>
<a-form-model-item class="item-model" prop="principalDrafter">
<user-selection :placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.principalDrafter')"
v-model="formInline.principalDrafter"
filedName="principalDrafter"
disabled
@nameChange="userSelectNameChange"
:nameStr="formInline.principalDrafter_dictText"
type="radio" />
</a-form-model-item>
</div>
<!-- 主起草单位 -->
<div class="box-title-text form-flex-item-half">
<div class="title-text">
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.mainDraftUnit')">
{{ $t('workCenter.enterpriseInitChangePlan.mainDraftUnit') }}
</span>
</div>
<a-form-model-item class="item-model" prop="mainDraftUnit">
<j-select-depart v-model="formInline.mainDraftUnit"
disabled
:backDepart="true" />
</a-form-model-item>
</div>
<!-- 变更原因 -->
<div class="box-title-text form-flex-item form-flex-item-long">
<div class="title-text title-text-long">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.changeReason')">
{{ $t('workCenter.enterpriseInitChangePlan.changeReason') }}
</span>
</div>
<a-form-model-item class="item-model" prop="changeReason">
<a-textarea :placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.changeReason')"
:maxLength="500"
v-model="formInline.changeReason" :rows="4" />
</a-form-model-item>
</div>
</div>
</a-form-model>
</a-spin>
</div>
<div class="custom-drawer-style-bottom-btn">
<a-button @click="handleCancel">{{ $t('cancel') }}</a-button>
<a-button @click="handleSubmit" type="primary" :loading="confirmLoading">{{ $t('submit') }}</a-button>
</div>
</a-drawer>
</template>
<script>
import UserSelection from '@/components/selection/UserSelection'
import EnterprisePlanSelection from '@/components/selection/EnterprisePlanSelection'
export default {
name: 'JobEndBaseInfoDrawer',
components: { EnterprisePlanSelection, UserSelection },
data () {
return {
visible: false,
confirmLoading: false,
model: {},
formInline: {},
rules: {
// 企标编号
enterpriseStandardPlanId: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 变更原因
changeReason: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.changeReason') + this.$t('cannotEmpty'),
trigger: 'blur'
}
]
}
}
},
methods: {
add () {
this.edit({})
},
edit (record) {
this.visible = true
this.model = Object.assign({}, record)
this.formInline = Object.assign({}, record)
},
// 企标计划选择完成的企标编号回调
standardNumberChange (value) {
this.formInline.standardNo = value
},
// 企标选编号选择完成的回调
listChange (value) {
console.log(value)
if (value && value.length > 0) {
this.formInline.standardName = value[0].originEnStandardName
this.formInline.principalDrafter_dictText = value[0].mainDraftingUser
this.formInline.mainDraftUnit = value[0].mainDraftingUnit
}
},
// 选择用户得到用户名
userSelectNameChange (value, fieldName) {
this.formInline[fieldName + '_dictText'] = value
},
// 取消
handleCancel () {
this.close()
},
close () {
this.model = {}
this.formInline = {}
this.visible = false
this.$refs.ruleForm.clearValidate()
},
// 提交
handleSubmit () {
if (this.confirmLoading) return
this.$refs.ruleForm.validate(valid => {
if (valid) {
this.confirmLoading = true
const formInline = JSON.parse(JSON.stringify(this.formInline))
this.$emit('ok', formInline)
this.close()
this.confirmLoading = false
}
})
}
}
}
</script>
<style scoped lang="less">
/deep/ .ant-form-item-children {
width: 100%;
display: inline-block;
}
.form-flex-box {
display: flex;
flex-wrap: wrap;
}
.form-flex-item-half {
width: 50%;
}
.form-flex-item-line {
width: 100%;
}
.form-flex-item-long {
width: 100%;
}
</style>
@@ -0,0 +1,701 @@
<template>
<a-form-model :model="formInline" class="form-add" :rules="rules" ref="ruleForm">
<!-- 合并标准信息 -->
<div class="collapsible-panel-form">
<div class="collapsible-panel-form-header">
<span>合并标准信息</span>
<div class="retractable-btn" @click="handleChangeRetractable('baseInfo')">
<a-icon type="double-right" :class="retractableFlag.baseInfo ? 'pack-up-btn' : 'unfold-btn'" />
{{ retractableFlag.baseInfo ? '收起' : '展开' }}
</div>
</div>
<div class="collapsible-panel-form">
<div class="form-flex-box collapsible-panel-form-content collapsible-content-no-head">
<!-- 企标编号1 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text"
:title="$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum') + '1'">
{{ $t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum') + '1' }}
</span>
</div>
<a-form-model-item class="item-model" prop="enterpriseStandardPlanIdOne">
<enterprise-plan-selection type="radio"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum')"
v-model="formInline.enterpriseStandardPlanIdOne"
:standard-number="formInline.standardNoOne"
@standardNumberChange="standardNumberChangeOne"
@listChange="listChange"/>
</a-form-model-item>
</div>
<!-- 企标名称1 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="title-text-text"
:title="$t('workCenter.enterpriseInitChangePlan.enterpriseStandardName') + '1'">
{{ $t('workCenter.enterpriseInitChangePlan.enterpriseStandardName') + '1' }}
</span>
</div>
<a-form-model-item class="item-model" prop="standardNameOne">
<a-input class="box-input"
disabled
v-model="formInline.standardNameOne"
:maxLength="50"
:placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.enterpriseStandardName')" />
</a-form-model-item>
</div>
<!-- 制修订类型1 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="title-text-text"
:title="$t('workCenter.enterpriseInitChangePlan.typeOfRevision') + '1'">
{{ $t('workCenter.enterpriseInitChangePlan.typeOfRevision') + '1' }}
</span>
</div>
<a-form-model-item class="item-model" prop="typeOfRevisionOne">
<a-input class="box-input"
disabled
v-model="formInline.typeOfRevisionOne_dictText"
:maxLength="50"
:placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.typeOfRevision')" />
</a-form-model-item>
</div>
<!-- 企标编号2 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text"
:title="$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum') + '2'">
{{ $t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum') + '2' }}
</span>
</div>
<a-form-model-item class="item-model" prop="enterpriseStandardPlanIdTwo">
<enterprise-plan-selection type="radio"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum')"
v-model="formInline.enterpriseStandardPlanIdTwo"
:standard-number="formInline.standardNoTwo"
@standardNumberChange="standardNumberChangeTwo"
@listChange="listChange"/>
</a-form-model-item>
</div>
<!-- 企标名称2 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="title-text-text"
:title="$t('workCenter.enterpriseInitChangePlan.enterpriseStandardName') + '2'">
{{ $t('workCenter.enterpriseInitChangePlan.enterpriseStandardName') + '2' }}
</span>
</div>
<a-form-model-item class="item-model" prop="standardNameTwo">
<a-input class="box-input"
disabled
v-model="formInline.standardNameTwo"
:maxLength="50"
:placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.enterpriseStandardName')" />
</a-form-model-item>
</div>
<!-- 制修订类型2 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="title-text-text"
:title="$t('workCenter.enterpriseInitChangePlan.typeOfRevision') + '1'">
{{ $t('workCenter.enterpriseInitChangePlan.typeOfRevision') + '1' }}
</span>
</div>
<a-form-model-item class="item-model" prop="typeOfRevisionTwo">
<a-input class="box-input"
disabled
v-model="formInline.typeOfRevisionTwo_dictText"
:maxLength="50"
:placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.typeOfRevision')" />
</a-form-model-item>
</div>
<!-- 新企标编号 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.newEnterpriseStandardNum')">
{{ $t('workCenter.enterpriseInitChangePlan.newEnterpriseStandardNum') }}
</span>
</div>
<a-form-model-item class="item-model" prop="newEnterpriseStandardNum">
<a-input class="box-input"
v-model="formInline.newEnterpriseStandardNum"
:maxLength="50"
disabled
:placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.newEnterpriseStandardNum')" />
</a-form-model-item>
</div>
<!-- 新企标名称 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.newEnterpriseStandardName')">
{{ $t('workCenter.enterpriseInitChangePlan.newEnterpriseStandardName') }}
</span>
</div>
<a-form-model-item class="item-model" prop="newEnterpriseStandardName">
<a-input class="box-input"
v-model="formInline.newEnterpriseStandardName"
:maxLength="50"
:placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.newEnterpriseStandardName')" />
</a-form-model-item>
</div>
<!-- 标准英文名称 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.standardEnglishName')">
{{ $t('workCenter.enterpriseInitChangePlan.standardEnglishName') }}
</span>
</div>
<a-form-model-item class="item-model" prop="standardEnglishName">
<a-input class="box-input"
v-model="formInline.standardEnglishName"
:maxLength="50"
:placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.standardEnglishName')" />
</a-form-model-item>
</div>
<!-- 标准体系 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.standardSystem')">
{{ $t('workCenter.enterpriseInitChangePlan.standardSystem') }}
</span>
</div>
<a-form-model-item class="item-model" prop="standardSystem">
<j-dict-select-tag class="box-input"
v-model="formInline.standardSystem"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.standardSystem')"
:type="'select'"
:triggerChange="false"
dictCode="standard_system" />
</a-form-model-item>
</div>
<!-- 企业标准代号 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.enterpriseStandardCode')">
{{ $t('workCenter.enterpriseInitChangePlan.enterpriseStandardCode') }}
</span>
</div>
<a-form-model-item class="item-model" prop="enterpriseStandardCode">
<j-dict-select-tag class="box-input"
v-model="formInline.enterpriseStandardCode"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.enterpriseStandardCode')"
:type="'select'"
:triggerChange="false"
dictCode="enterprise_standard_code" />
</a-form-model-item>
</div>
<!-- 企业名称代号 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.enterpriseNameCode')">
{{ $t('workCenter.enterpriseInitChangePlan.enterpriseNameCode') }}
</span>
</div>
<a-form-model-item class="item-model" prop="enterpriseNameCode">
<j-dict-select-tag class="box-input"
v-model="formInline.enterpriseNameCode"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.enterpriseNameCode')"
:type="'select'"
:triggerChange="false"
dictCode="enterprise_name_code" />
</a-form-model-item>
</div>
<!-- 标准类别代号 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.standardCategoryCode')">
{{ $t('workCenter.enterpriseInitChangePlan.standardCategoryCode') }}
</span>
</div>
<a-form-model-item class="item-model" prop="standardCategoryCode">
<j-dict-select-tag class="box-input"
v-model="formInline.standardCategoryCode"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.standardCategoryCode')"
:type="'select'"
:triggerChange="false"
dictCode="standard_category_code" />
</a-form-model-item>
</div>
<!-- 年代号 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.yearNumber')">
{{ $t('workCenter.enterpriseInitChangePlan.yearNumber') }}
</span>
</div>
<a-form-model-item class="item-model" prop="yearNumber">
<j-date show-type="year"
v-model="formInline.yearNumber"
:default-value="yearNumberDefaultValue"
date-format="YYYY"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.yearNumber')" />
</a-form-model-item>
</div>
<!-- 编制说明 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.compilationIllustration')">
{{ $t('workCenter.enterpriseInitChangePlan.compilationIllustration') }}
</span>
</div>
<a-form-model-item class="item-model" prop="compilationIllustration">
<a-button type="primary" class="button-text" @click="clickButtonToUpload('compilationIllustration')">
{{
(formInline.compilationIllustration === 'null' || formInline.compilationIllustration === ''
|| formInline.compilationIllustration === null || formInline.compilationIllustration === undefined)
? $t('uploadFile.clickUpload')
: $t('uploadFile.viewUploadedFiles')
}}
</a-button>
</a-form-model-item>
</div>
<!-- 标准等级分类 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.standardGradeClassification')">
{{ $t('workCenter.enterpriseInitChangePlan.standardGradeClassification') }}
</span>
</div>
<a-form-model-item class="item-model" prop="standardGradeClassification">
<j-dict-select-tag class="box-input"
:disabled="disabled"
v-model="formInline.standardGradeClassification"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.standardGradeClassification')"
:type="'select'"
:triggerChange="false"
dictCode="standard_grade_classify" />
</a-form-model-item>
</div>
</div>
</div>
<!-- 完成日期部分 -->
<div class="collapsible-panel-form">
<div class="collapsible-panel-form-header">
<span>完成日期</span>
<div class="retractable-btn" @click="handleChangeRetractable('finishDate')">
<a-icon type="double-right" :class="retractableFlag.finishDate ? 'pack-up-btn' : 'unfold-btn'" />
{{ retractableFlag.finishDate ? '收起' : '展开' }}
</div>
</div>
<div class="form-flex-box collapsible-panel-form-content" v-show="retractableFlag.finishDate">
<!-- 草稿计划完成日期 -->
<div class="box-title-text form-flex-item">
<div class="title-text title-text-long">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.draftPlanFinishDate')">
{{ $t('workCenter.enterpriseInitChangePlan.draftPlanFinishDate') }}
</span>
</div>
<a-form-model-item class="item-model" prop="draftPlanFinishDate">
<a-date-picker
v-model="formInline.draftPlanFinishDate"
:showTime="false"
:disabled="disabled"
value-format="YYYY-MM-DD">
</a-date-picker>
</a-form-model-item>
</div>
<!-- 征求意见稿计划完成日期 -->
<div class="box-title-text form-flex-item">
<div class="title-text title-text-long">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.exposureDraftPlanFinishDate')">
{{ $t('workCenter.enterpriseInitChangePlan.exposureDraftPlanFinishDate') }}
</span>
</div>
<a-form-model-item class="item-model" prop="exposureDraftPlanFinishDate">
<a-date-picker
v-model="formInline.exposureDraftPlanFinishDate"
:showTime="false"
:disabled="disabled"
value-format="YYYY-MM-DD">
</a-date-picker>
</a-form-model-item>
</div>
<!-- 计划报批日期 -->
<div class="box-title-text form-flex-item">
<div class="title-text title-text-long">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.planSubmissionDate')">
{{ $t('workCenter.enterpriseInitChangePlan.planSubmissionDate') }}
</span>
</div>
<a-form-model-item class="item-model" prop="planSubmissionDate">
<a-date-picker
v-model="formInline.planSubmissionDate"
:showTime="false"
:disabled="disabled"
value-format="YYYY-MM-DD">
</a-date-picker>
</a-form-model-item>
</div>
</div>
</div>
<!-- 适用范围部分 -->
<div class="collapsible-panel-form">
<div class="collapsible-panel-form-header">
<span>适用范围</span>
<div class="retractable-btn" @click="handleChangeRetractable('rangeOfApplication')">
<a-icon type="double-right" :class="retractableFlag.rangeOfApplication ? 'pack-up-btn' : 'unfold-btn'" />
{{ retractableFlag.rangeOfApplication ? '收起' : '展开' }}
</div>
</div>
<div class="form-flex-box collapsible-panel-form-content" v-show="retractableFlag.rangeOfApplication">
<!-- 零部件名称 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.partName')">
{{ $t('workCenter.enterpriseInitChangePlan.partName') }}
</span>
</div>
<a-form-model-item class="item-model" prop="partName">
<a-tree-select v-model="formInline.partName"
:disabled="disabled"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
style="width: 100%"
:tree-data="partNameOptions"
:label-in-value="false"
:placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.partName')" />
</a-form-model-item>
</div>
<!-- 主起草人 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.principalDrafter')">
{{ $t('workCenter.enterpriseInitChangePlan.principalDrafter') }}
</span>
</div>
<a-form-model-item class="item-model" prop="principalDrafter">
<user-selection :placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.principalDrafter')"
v-model="formInline.principalDrafter"
:disabled="disabled"
filedName="principalDrafter"
@nameChange="userSelectNameChange"
:nameStr="formInline.principalDrafter_dictText"
type="radio" />
</a-form-model-item>
</div>
<!-- 主起草单位 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.mainDraftUnit')">
{{ $t('workCenter.enterpriseInitChangePlan.mainDraftUnit') }}
</span>
</div>
<a-form-model-item class="item-model" prop="mainDraftUnit">
<j-select-depart v-model="formInline.mainDraftUnit"
:disabled="disabled"
:backDepart="true" />
</a-form-model-item>
</div>
<!-- 起草单位负责人 -->
<div class="box-title-text form-flex-item">
<div class="title-text">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.headOfMainDraftingUnit')">
{{ $t('workCenter.enterpriseInitChangePlan.headOfMainDraftingUnit') }}
</span>
</div>
<a-form-model-item class="item-model" prop="headOfMainDraftingUnit">
<user-selection :placeholder="$t('pleaseSelect')+$t('workCenter.enterpriseInitChangePlan.headOfMainDraftingUnit')"
v-model="formInline.headOfMainDraftingUnit"
:disabled="disabled"
filedName="headOfMainDraftingUnit"
@nameChange="userSelectNameChange"
:nameStr="formInline.headOfMainDraftingUnit_dictText"
type="radio" />
</a-form-model-item>
</div>
<!-- 标准适用范围 -->
<div class="box-title-text form-flex-item form-flex-item-long">
<div class="title-text title-text-long">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.scopeOfApplication')">
{{ $t('workCenter.enterpriseInitChangePlan.scopeOfApplication') }}
</span>
</div>
<a-form-model-item class="item-model" prop="scopeOfApplication">
<a-textarea :placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.scopeOfApplication')"
:maxLength="500"
v-model="formInline.scopeOfApplication" :rows="4" />
</a-form-model-item>
</div>
<!-- 变更原因 -->
<div class="box-title-text form-flex-item form-flex-item-long">
<div class="title-text title-text-long">
<span class="required">*</span>
<span class="title-text-text" :title="$t('workCenter.enterpriseInitChangePlan.changeReason')">
{{ $t('workCenter.enterpriseInitChangePlan.changeReason') }}
</span>
</div>
<a-form-model-item class="item-model" prop="changeReason">
<a-textarea :placeholder="$t('pleaseEnter')+$t('workCenter.enterpriseInitChangePlan.changeReason')"
:maxLength="500"
v-model="formInline.changeReason" :rows="4" />
</a-form-model-item>
</div>
</div>
</div>
</div>
<upload-file ref="uploadFile" @change="uploadFileChange" :return-url="false" :disabled="disabled"></upload-file>
</a-form-model>
</template>
<script>
import EnterprisePlanSelection from '@/components/selection/EnterprisePlanSelection'
import UserSelection from '@/components/selection/UserSelection'
import UploadFile from '@/components/UploadFile'
export default {
name: 'MergeBaseInfo',
components: { EnterprisePlanSelection, UserSelection, UploadFile },
props: {
disabled: {
type: Boolean,
required: false,
default: false
}
},
data () {
return {
formInline: {},
// 各模块的收齐和展开状态
retractableFlag: {
baseInfo: true, // 基础信息部分
finishDate: true, // 完成日期部分
rangeOfApplication: true // 适用范围部分
},
rules: {
// 企标编号1
enterpriseStandardPlanIdOne: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum') + '1' + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 企标编号2
enterpriseStandardPlanIdTwo: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.enterpriseStandardNum') + '1' + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 新企标名称
newEnterpriseStandardName: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.newEnterpriseStandardName') + this.$t('cannotEmpty'),
trigger: 'blur'
}
],
// 标准体系
standardSystem: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.standardSystem') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 企业标准代号
enterpriseStandardCode: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.enterpriseStandardCode') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 企业名称代号
enterpriseNameCode: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.enterpriseNameCode') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 标准类别代号
standardCategoryCode: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.standardCategoryCode') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 年代号
yearNumber: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.yearNumber') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 标准等级分类
standardGradeClassification: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.standardGradeClassification') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 草稿计划完成日期
draftPlanFinishDate: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.draftPlanFinishDate') + this.$t('cannotEmpty'),
trigger: ['change', 'blur']
}
],
// 征求意见稿计划完成日期
exposureDraftPlanFinishDate: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.exposureDraftPlanFinishDate') + this.$t('cannotEmpty'),
trigger: ['change', 'blur']
}
],
// 计划报批日期
planSubmissionDate: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.planSubmissionDate') + this.$t('cannotEmpty'),
trigger: ['change', 'blur']
}
],
// 零部件名称
partName: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.partName') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 主起草人
principalDrafter: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.principalDrafter') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 主起草单位
mainDraftUnit: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.mainDraftUnit') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 起草单位负责人
headOfMainDraftingUnit: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.headOfMainDraftingUnit') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
// 变更原因
changeReason: [
{
required: true,
message: this.$t('workCenter.enterpriseInitChangePlan.changeReason') + this.$t('cannotEmpty'),
trigger: 'blur'
}
]
}
}
},
methods: {
// 改变内容区域收起和展开
handleChangeRetractable (module) {
this.$set(this.retractableFlag, module, !this.retractableFlag[module])
this.$forceUpdate()
},
// 企标计划1选择完成的企标编号回调
standardNumberChangeOne (value) {
this.formInline.standardNoOne = value
},
// 企标计划2选择完成的企标编号的回调
standardNumberChangeTwo (value) {
this.formInline.standardNoTwo = value
},
// 企标选编号1选择完成的回调
listChange (value) {
console.log(value)
if (value && value.length > 0) {
// 企标名称1
this.formInline.standardNameOne = value[0].originEnStandardName
// 制修订类型1
this.formInline.typeOfRevisionOne = value[0].typeOfRevision
// 新企标名称
this.formInline.newEnterpriseStandardName = value[0].originEnStandardName
// 标准英文名称
this.formInline.standardEnglishName = value[0].originEnStandardName
// 标准体系
this.formInline.standardSystem = value[0].originEnStandardName
// 企业标准代号
this.formInline.enterpriseStandardCode = value[0].originEnStandardName
// 企业名称代号
this.formInline.enterpriseNameCode = value[0].originEnStandardName
// 标准类别代号
this.formInline.standardCategoryCode = value[0].originEnStandardName
// 年代号
this.formInline.yearNumber = value[0].originEnStandardName
// 编制说明
this.formInline.compilationIllustration = value[0].originEnStandardName
// 标准等级分类
this.formInline.standardGradeClassification = value[0].originEnStandardName
// 草稿计划完成日期
this.formInline.draftPlanFinishDate = value[0].originEnStandardName
// 征求意见稿计划完成日期
this.formInline.exposureDraftPlanFinishDate = value[0].originEnStandardName
// 计划报批日期
this.formInline.planSubmissionDate = value[0].originEnStandardName
// 零部件名称
this.formInline.partName = value[0].originEnStandardName
// 主起草人
this.formInline.principalDrafter_dictText = value[0].mainDraftingUser
// 主起草单位
this.formInline.mainDraftUnit = value[0].mainDraftingUnit
// 起草单位负责人
this.formInline.headOfMainDraftingUnit = value[0].mainDraftingUnit
// 标准适用范围
this.formInline.scopeOfApplication = value[0].mainDraftingUnit
// 变更原因
this.formInline.changeReason = value[0].mainDraftingUnit
}
},
// 选择用户得到用户名
userSelectNameChange (value, fieldName) {
this.formInline[fieldName + '_dictText'] = value
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
/deep/ .ant-form-item-children {
width: 100%;
display: inline-block;
}
.form-flex-item-long {
width: 100%;
}
.title-text-long {
width: 220px;
}
</style>
@@ -0,0 +1,87 @@
<template>
<a-card :bordered="false">
<a-tabs default-active-key="1" v-model="activeTab">
<template v-for="tab in tabList">
<a-tab-pane v-if="isHasPermission(tab.permission)" :key="tab.component">
<template v-slot:tab>
<div>
{{ tab.label }}
</div>
</template>
</a-tab-pane>
</template>
</a-tabs>
<div class="tabs-table-box">
<component
:is="comp"
ref="compModel"
v-if="comp">
</component>
</div>
</a-card>
</template>
<script>
import { isHasPermission } from '@/utils/hasPermission'
export default {
name: 'ProcessCenter',
data () {
return {
comp: null,
activeTab: '',
tabList: [
{ // 待办流程
component: 'TodoList',
label: this.$t('workCenter.processCenter.todoProcess'),
permission: 'workCenter:processCenter:todo'
},
{ // 已办流程
component: 'DoneList',
label: this.$t('workCenter.processCenter.doneProcess'),
permission: 'workCenter:processCenter:done'
},
{ // 已发流程
component: 'SentList',
label: this.$t('workCenter.processCenter.sentProcess'),
permission: 'workCenter:processCenter:sent'
},
{ // 监控流程
component: 'MonitorList',
label: this.$t('workCenter.processCenter.monitorProcess'),
permission: 'workCenter:processCenter:monitor'
},
{ // 草稿
component: 'DraftList',
label: this.$t('workCenter.processCenter.draft'),
permission: 'workCenter:processCenter:draft'
}
]
}
},
watch: {
activeTab () {
this.comp = resolve => require([`@views/workCenter/processCenter/table/${this.activeTab}.vue`], resolve)
}
},
created () {
// 获取有权限的第一个tab
this.activeTab = (this.tabList.find(item => isHasPermission(item.permission)) || {}).component
this.comp = resolve => require([`@views/workCenter/processCenter/table/${this.activeTab}.vue`], resolve)
},
mounted () {
window.reloadData = () => {
if (this.$refs.compModel && this.$refs.compModel.loadData) {
this.$refs.compModel.loadData()
}
}
},
methods: {
isHasPermission
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
</style>
@@ -0,0 +1,171 @@
<template>
<div>
<!-- 搜索区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<!-- 流程名称 -->
<a-col :span="6">
<a-form-item :label="$t('processName')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter')+$t('processName')" v-model="queryParam.processName"></a-input>
</a-form-item>
</a-col>
<!-- 流程编号 -->
<a-col :span="6">
<a-form-item :label="$t('workCenter.processCenter.processNumber')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter')+$t('workCenter.processCenter.processNumber')" v-model="queryParam.processNumber"></a-input>
</a-form-item>
</a-col>
<!-- 流程类型 -->
<a-col :span="6">
<a-form-item :label="$t('workCenter.processCenter.processType')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag
:placeholder="$t('pleaseSelect')+$t('workCenter.processCenter.processType')"
dict-code="esp_project_status"
v-model="queryParam.projectStatus">
</j-dict-select-tag>
</a-form-item>
</a-col>
<div style="float: right;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search" v-has="'workCenter:processCenter:doneSearch'" style="margin-left: 8px">{{ $t('query') }}</a-button>
<a-button type="primary" ghost @click="searchReset" icon="reload" style="margin-left: 8px">{{ $t('reset') }}</a-button>
</div>
</a-row>
</a-form>
</div>
<div>
<j-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
@change="handleTableChange">
<!-- 操作栏 -->
<div slot="action" slot-scope="{record}" class="action-span-cell">
<!-- 查看 -->
<a @click="handleDetail(record)" class="table-ope-btn" v-has="'workCenter:processCenter:doneDetail'">{{ $t('view') }}</a>
</div>
</j-table>
</div>
</div>
</template>
<script>
import JTable from '@/components/jero/JTable'
import { JeroListMixin } from '@/mixins/JeroListMixin'
export default {
name: 'DoneList',
components: { JTable },
mixins: [JeroListMixin],
data () {
return {
labelCol: {
span: 4
},
wrapperCol: {
span: 14
},
columns: [
{ // 流程编号
title: this.$t('workCenter.processCenter.processNumber'),
align: 'center',
width: 180,
dataIndex: 'processNumber',
scopedSlots: { customRender: 'text' }
},
{ // 流程类型
title: this.$t('workCenter.processCenter.processType'),
align: 'center',
width: 180,
dataIndex: 'processType_dictText',
scopedSlots: { customRender: 'text' }
},
{ // 流程名称
title: this.$t('processName'),
align: 'center',
width: 180,
dataIndex: 'processName',
scopedSlots: { customRender: 'text' }
},
{ // 发起人
title: this.$t('workCenter.processCenter.initiator'),
align: 'center',
width: 180,
dataIndex: 'initiator',
scopedSlots: { customRender: 'text' }
},
{ // 当前处理人
title: this.$t('workCenter.processCenter.currentProcessor'),
align: 'center',
width: 180,
dataIndex: 'currentProcessor',
scopedSlots: { customRender: 'text' }
},
{ // 接收任务时间
title: this.$t('workCenter.processCenter.receivingTaskTime'),
align: 'center',
width: 180,
dataIndex: 'receivingTaskTime',
scopedSlots: { customRender: 'text' }
},
{ // 完成时间
title: this.$t('workCenter.processCenter.finishTime'),
align: 'center',
width: 180,
dataIndex: 'finishTime',
scopedSlots: { customRender: 'text' }
},
{ // 流程状态
title: this.$t('workCenter.processCenter.processState'),
align: 'center',
width: 180,
dataIndex: 'processState_dictText',
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('operation'),
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 200
}
],
url: {
list: ''
}
}
},
methods: {
handleDetail (record) {
// 跳转到对应流程页面
let path = ''
switch (record.processType) {
case '':
path = ''
}
this.$router.push({
path: path,
query: {
processId: record.id,
onlyLook: true
}
})
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,132 @@
<template>
<div>
<!-- 搜索区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<!-- 流程类型 -->
<a-col :span="6">
<a-form-item :label="$t('workCenter.processCenter.processType')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag
:placeholder="$t('pleaseSelect')+$t('workCenter.processCenter.processType')"
dict-code="esp_project_status"
v-model="queryParam.projectStatus">
</j-dict-select-tag>
</a-form-item>
</a-col>
<div style="float: right;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search" v-has="'workCenter:processCenter:draftSearch'" style="margin-left: 8px">{{ $t('query') }}</a-button>
<a-button type="primary" ghost @click="searchReset" icon="reload" style="margin-left: 8px">{{ $t('reset') }}</a-button>
</div>
</a-row>
</a-form>
</div>
<div>
<j-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
@change="handleTableChange">
<!-- 操作栏 -->
<div slot="action" slot-scope="{record}" class="action-span-cell">
<!-- 办理 -->
<a @click="handleTransact(record)" class="table-ope-btn" v-has="'workCenter:processCenter:draftTransact'">{{ $t('transact') }}</a>
</div>
</j-table>
</div>
</div>
</template>
<script>
import JTable from '@/components/jero/JTable'
import { JeroListMixin } from '@/mixins/JeroListMixin'
export default {
name: 'DraftList',
components: { JTable },
mixins: [JeroListMixin],
data () {
return {
labelCol: {
span: 4
},
wrapperCol: {
span: 14
},
columns: [
{ // 流程类型
title: this.$t('workCenter.processCenter.processType'),
align: 'center',
width: 180,
dataIndex: 'processType_dictText',
scopedSlots: { customRender: 'text' }
},
{ // 流程名称
title: this.$t('processName'),
align: 'center',
width: 180,
dataIndex: 'processName',
scopedSlots: { customRender: 'text' }
},
{ // 发起人
title: this.$t('workCenter.processCenter.initiator'),
align: 'center',
width: 180,
dataIndex: 'initiator',
scopedSlots: { customRender: 'text' }
},
{ // 创建时间
title: this.$t('createTime'),
align: 'center',
width: 180,
dataIndex: 'createTime',
sort: true,
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('operation'),
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 200
}
],
url: {
list: ''
}
}
},
methods: {
// 办理
handleTransact (record) {
// 跳转到对应流程页面
let path = ''
switch (record.processType) {
case '':
path = ''
}
this.$router.push({
path: path,
query: {
currentNode: record.currentNode
}
})
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,195 @@
<template>
<div>
<!-- 搜索区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<!-- 流程名称 -->
<a-col :span="6">
<a-form-item :label="$t('processName')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter')+$t('processName')" v-model="queryParam.processName"></a-input>
</a-form-item>
</a-col>
<!-- 流程编号 -->
<a-col :span="6">
<a-form-item :label="$t('workCenter.processCenter.processNumber')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter')+$t('workCenter.processCenter.processNumber')" v-model="queryParam.processNumber"></a-input>
</a-form-item>
</a-col>
<!-- 流程类型 -->
<a-col :span="6">
<a-form-item :label="$t('workCenter.processCenter.processType')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag
:placeholder="$t('pleaseSelect')+$t('workCenter.processCenter.processType')"
dict-code="esp_project_status"
v-model="queryParam.processType">
</j-dict-select-tag>
</a-form-item>
</a-col>
<div style="float: right;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search" v-has="'workCenter:processCenter:monitorSearch'" style="margin-left: 8px">{{ $t('query') }}</a-button>
<a-button type="primary" ghost @click="searchReset" icon="reload" style="margin-left: 8px">{{ $t('reset') }}</a-button>
</div>
</a-row>
</a-form>
</div>
<div>
<j-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
@change="handleTableChange">
<!-- 操作栏 -->
<div slot="action" slot-scope="{record}" class="action-span-cell">
<!-- 查看 -->
<a @click="handleDetail(record)" class="table-ope-btn" v-has="'workCenter:processCenter:monitorDetail'">{{ $t('view') }}</a>
<a-divider type="vertical" />
<!-- 强制撤回 -->
<a @click="handleWithdrawal(record)" class="table-ope-btn" v-has="'workCenter:processCenter:todoWithdrawal'">{{ $t('compulsoryWithdrawal') }}</a>
</div>
</j-table>
</div>
</div>
</template>
<script>
import JTable from '@/components/jero/JTable'
import { JeroListMixin } from '@/mixins/JeroListMixin'
import { compulsoryWithdrawal } from '@/api/workCenter'
export default {
name: 'MonitorList',
components: { JTable },
mixins: [JeroListMixin],
data () {
return {
labelCol: {
span: 4
},
wrapperCol: {
span: 14
},
columns: [
{ // 流程编号
title: this.$t('workCenter.processCenter.processNumber'),
align: 'center',
width: 180,
dataIndex: 'processNumber',
scopedSlots: { customRender: 'text' }
},
{ // 流程类型
title: this.$t('workCenter.processCenter.processType'),
align: 'center',
width: 180,
dataIndex: 'processType_dictText',
scopedSlots: { customRender: 'text' }
},
{ // 流程名称
title: this.$t('processName'),
align: 'center',
width: 180,
dataIndex: 'processName',
scopedSlots: { customRender: 'text' }
},
{ // 发起人
title: this.$t('workCenter.processCenter.initiator'),
align: 'center',
width: 180,
dataIndex: 'initiator',
scopedSlots: { customRender: 'text' }
},
{ // 当前处理人
title: this.$t('workCenter.processCenter.currentProcessor'),
align: 'center',
width: 180,
dataIndex: 'currentProcessor',
scopedSlots: { customRender: 'text' }
},
{ // 接收任务时间
title: this.$t('workCenter.processCenter.receivingTaskTime'),
align: 'center',
width: 180,
dataIndex: 'receivingTaskTime',
scopedSlots: { customRender: 'text' }
},
{ // 完成时间
title: this.$t('workCenter.processCenter.finishTime'),
align: 'center',
width: 180,
dataIndex: 'finishTime',
scopedSlots: { customRender: 'text' }
},
{ // 流程耗时(小时)
title: this.$t('workCenter.processCenter.processTime'),
align: 'center',
width: 180,
dataIndex: 'processTime',
scopedSlots: { customRender: 'text' }
},
{ // 流程状态
title: this.$t('workCenter.processCenter.processState'),
align: 'center',
width: 180,
dataIndex: 'processState_dictText',
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('operation'),
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 200
}
],
url: {
list: ''
}
}
},
methods: {
// 查看
handleDetail (record) {
// 跳转到对应流程页面
let path = ''
switch (record.processType) {
case '':
path = ''
}
this.$router.push({
path: path,
query: {
processId: record.id
}
})
},
// 强制撤回
handleWithdrawal (record) {
const params = {}
params.processId = this.currentTurnTo.id
compulsoryWithdrawal(params).then(res => {
if (res.success) {
this.$message.success(res.message)
this.loadData()
} else {
this.$message.warning(res.message)
}
})
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,205 @@
<template>
<div>
<!-- 搜索区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<!-- 流程名称 -->
<a-col :span="6">
<a-form-item :label="$t('processName')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter')+$t('processName')" v-model="queryParam.processName"></a-input>
</a-form-item>
</a-col>
<!-- 流程编号 -->
<a-col :span="6">
<a-form-item :label="$t('workCenter.processCenter.processNumber')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter')+$t('workCenter.processCenter.processNumber')" v-model="queryParam.processNumber"></a-input>
</a-form-item>
</a-col>
<!-- 流程类型 -->
<a-col :span="6">
<a-form-item :label="$t('workCenter.processCenter.processType')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag
:placeholder="$t('pleaseSelect')+$t('workCenter.processCenter.processType')"
dict-code="esp_project_status"
v-model="queryParam.processType">
</j-dict-select-tag>
</a-form-item>
</a-col>
<template v-if="toggleSearchStatus">
<!-- 流程状态 -->
<a-col :span="6">
<a-form-item :label="$t('workCenter.processCenter.processState')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag
:placeholder="$t('pleaseSelect')+$t('workCenter.processCenter.processState')"
dict-code="esp_project_status"
v-model="queryParam.processState">
</j-dict-select-tag>
</a-form-item>
</a-col>
</template>
<div style="float: right;overflow: hidden;" class="table-page-search-submitButtons">
<a @click="handleToggleSearch">
{{ toggleSearchStatus ? $t('putAway') : $t('open') }}
<a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
</a>
<a-button type="primary" @click="searchQuery" icon="search" v-has="'workCenter:processCenter:sentSearch'" style="margin-left: 8px">{{ $t('query') }}</a-button>
<a-button type="primary" ghost @click="searchReset" icon="reload" style="margin-left: 8px">{{ $t('reset') }}</a-button>
</div>
</a-row>
</a-form>
</div>
<div>
<j-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
@change="handleTableChange">
<!-- 操作栏 -->
<div slot="action" slot-scope="{record}" class="action-span-cell">
<!-- 查看 -->
<a @click="handleDetail(record)" class="table-ope-btn" v-has="'workCenter:processCenter:sentDetail'">{{ $t('view') }}</a>
<a-divider type="vertical" />
<!-- 强制撤回 -->
<a @click="handleWithdrawal(record)" class="table-ope-btn" v-has="'workCenter:processCenter:sentWithdrawal'">{{ $t('compulsoryWithdrawal') }}</a>
</div>
</j-table>
</div>
</div>
</template>
<script>
import JTable from '@/components/jero/JTable'
import { JeroListMixin } from '@/mixins/JeroListMixin'
import { compulsoryWithdrawal } from '@/api/workCenter'
export default {
name: 'SentList',
components: { JTable },
mixins: [JeroListMixin],
data () {
return {
labelCol: {
span: 4
},
wrapperCol: {
span: 14
},
columns: [
{ // 流程编号
title: this.$t('workCenter.processCenter.processNumber'),
align: 'center',
width: 180,
dataIndex: 'processNumber',
scopedSlots: { customRender: 'text' }
},
{ // 流程类型
title: this.$t('workCenter.processCenter.processType'),
align: 'center',
width: 180,
dataIndex: 'processType_dictText',
scopedSlots: { customRender: 'text' }
},
{ // 流程名称
title: this.$t('processName'),
align: 'center',
width: 180,
dataIndex: 'processName',
scopedSlots: { customRender: 'text' }
},
{ // 发起人
title: this.$t('workCenter.processCenter.initiator'),
align: 'center',
width: 180,
dataIndex: 'initiator',
scopedSlots: { customRender: 'text' }
},
{ // 当前处理人
title: this.$t('workCenter.processCenter.currentProcessor'),
align: 'center',
width: 180,
dataIndex: 'currentProcessor',
scopedSlots: { customRender: 'text' }
},
{ // 接收任务时间
title: this.$t('workCenter.processCenter.receivingTaskTime'),
align: 'center',
width: 180,
dataIndex: 'receivingTaskTime',
scopedSlots: { customRender: 'text' }
},
{ // 完成时间
title: this.$t('workCenter.processCenter.finishTime'),
align: 'center',
width: 180,
dataIndex: 'finishTime',
scopedSlots: { customRender: 'text' }
},
{ // 流程状态
title: this.$t('workCenter.processCenter.processState'),
align: 'center',
width: 180,
dataIndex: 'processState_dictText',
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('operation'),
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 200
}
],
url: {
list: ''
}
}
},
methods: {
// 查看
handleDetail (record) {
// 跳转到对应流程页面
let path = ''
switch (record.processType) {
case '':
path = ''
}
this.$router.push({
path: path,
query: {
processId: record.id,
onlyLook: true
}
})
},
// 强制撤回
handleWithdrawal (record) {
const params = {}
params.processId = this.currentTurnTo.id
compulsoryWithdrawal(params).then(res => {
if (res.success) {
this.$message.success(res.message)
this.loadData()
} else {
this.$message.warning(res.message)
}
})
}
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,180 @@
<template>
<div>
<!-- 搜索区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<!-- 流程名称 -->
<a-col :span="6">
<a-form-item :label="$t('processName')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter')+$t('processName')" v-model="queryParam.processName"></a-input>
</a-form-item>
</a-col>
<!-- 流程编号 -->
<a-col :span="6">
<a-form-item :label="$t('workCenter.processCenter.processNumber')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter')+$t('workCenter.processCenter.processNumber')" v-model="queryParam.processNumber"></a-input>
</a-form-item>
</a-col>
<!-- 流程类型 -->
<a-col :span="6">
<a-form-item :label="$t('workCenter.processCenter.processType')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag
:placeholder="$t('pleaseSelect')+$t('workCenter.processCenter.processType')"
dict-code="esp_project_status"
v-model="queryParam.projectStatus">
</j-dict-select-tag>
</a-form-item>
</a-col>
<div style="float: right;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search" v-has="'workCenter:processCenter:todoSearch'" style="margin-left: 8px">{{ $t('query') }}</a-button>
<a-button type="primary" ghost @click="searchReset" icon="reload" style="margin-left: 8px">{{ $t('reset') }}</a-button>
</div>
</a-row>
</a-form>
</div>
<div>
<j-table
:can-drag="true"
:scroll="{x: '100%'}"
ref="table"
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
@change="handleTableChange">
<!-- 操作栏 -->
<div slot="action" slot-scope="{record}" class="action-span-cell">
<!-- 办理 -->
<a @click="handleTransact(record)" class="table-ope-btn" v-has="'workCenter:processCenter:todoTransact'">{{ $t('transact') }}</a>
<a-divider type="vertical" />
<!-- 转办 -->
<a @click="handleTurnTo(record)" class="table-ope-btn" v-has="'workCenter:processCenter:todoTurnTo'">{{ $t('turnTo') }}</a>
</div>
</j-table>
</div>
<!-- 转办需要选人 -->
<user-select-modal ref="userSelectModal" type="radio" @change="userSelectChange"></user-select-modal>
</div>
</template>
<script>
import JTable from '@/components/jero/JTable'
import { JeroListMixin } from '@/mixins/JeroListMixin'
import UserSelectModal from '@/components/selection/UserSelectModal'
import { toDoTurnTo } from '@/api/workCenter'
export default {
name: 'TodoList',
components: { JTable, UserSelectModal },
mixins: [JeroListMixin],
data () {
return {
labelCol: {
span: 4
},
wrapperCol: {
span: 14
},
columns: [
{ // 流程编号
title: this.$t('workCenter.processCenter.processNumber'),
align: 'center',
width: 180,
dataIndex: 'processNumber',
scopedSlots: { customRender: 'text' }
},
{ // 流程类型
title: this.$t('workCenter.processCenter.processType'),
align: 'center',
width: 180,
dataIndex: 'processType_dictText',
scopedSlots: { customRender: 'text' }
},
{ // 流程名称
title: this.$t('processName'),
align: 'center',
width: 180,
dataIndex: 'processName',
scopedSlots: { customRender: 'text' }
},
{ // 发起人
title: this.$t('workCenter.processCenter.initiator'),
align: 'center',
width: 180,
dataIndex: 'initiator',
scopedSlots: { customRender: 'text' }
},
{ // 接收任务时间
title: this.$t('workCenter.processCenter.receivingTaskTime'),
align: 'center',
width: 180,
dataIndex: 'receivingTaskTime',
sort: true,
scopedSlots: { customRender: 'text' }
},
{
title: this.$t('operation'),
scopedSlots: { customRender: 'action' },
align: 'center',
fixed: 'right',
width: 200
}
],
url: {
list: '/process/center/todoTaskList'
},
currentTurnTo: {} // 当前转办
}
},
methods: {
// 办理
handleTransact (record) {
// 跳转到对应流程页面
let path = ''
switch (record.processType) {
case '':
path = ''
}
this.$router.push({
path: path,
query: {
currentNode: record.currentNode
}
})
},
// 转办
handleTurnTo (record) {
this.currentTurnTo = record
this.$refs.userSelectModal.open()
},
// 转办选完人的回调
userSelectChange (value) {
if (value) {
const params = {}
params.processId = this.currentTurnTo.id
params.person = value
toDoTurnTo(params).then(res => {
if (res.success) {
this.$message.success(res.message)
this.loadData()
} else {
this.$message.warning(res.message)
}
})
}
}
}
}
</script>
<style scoped>
</style>
+121
View File
@@ -301,6 +301,82 @@
dependencies:
"@antv/g6-pc" "0.8.22"
"@antv/g6-core@0.8.21":
version "0.8.21"
resolved "https://registry.yarnpkg.com/@antv/g6-core/-/g6-core-0.8.21.tgz#efb55365e047f304a178eccc1249cd4feedb30c4"
integrity sha512-zgOn/OW6/RSCPopiNseiLJc0oVV10yoJYS6phcQxceQQHSfwofFkEN2OQvpCCCQ2aMZ9rOkeYNvSdLnAzYyCKg==
dependencies:
"@antv/algorithm" "^0.1.8"
"@antv/dom-util" "^2.0.1"
"@antv/event-emitter" "~0.1.0"
"@antv/g-base" "^0.5.1"
"@antv/g-math" "^0.1.1"
"@antv/matrix-util" "^3.1.0-beta.3"
"@antv/path-util" "^2.0.3"
"@antv/util" "~2.0.5"
ml-matrix "^6.5.0"
tslib "^2.1.0"
"@antv/g6-element@0.8.21":
version "0.8.21"
resolved "https://registry.yarnpkg.com/@antv/g6-element/-/g6-element-0.8.21.tgz#a1406a4afc203d6de7fa4d81b70acd5633547f24"
integrity sha512-tf+aHYUdbmF1qCCKf15HXJnyV0VZHaE5sxG04caKkF3AB5gXjvYCp+f9cD1lKVy1nfZHUcGCPaWPK8lz/H/9gQ==
dependencies:
"@antv/g-base" "^0.5.1"
"@antv/g6-core" "0.8.21"
"@antv/util" "~2.0.5"
"@antv/g6-pc@0.8.21":
version "0.8.21"
resolved "https://registry.yarnpkg.com/@antv/g6-pc/-/g6-pc-0.8.21.tgz#5d25d60d740c74d5fe6f3a641eec337d0a4db256"
integrity sha512-x2+JcLkjToZ4U06aa1W9qJHB3UERqYPqUsFs/POSsFtwF80HmG7iBKeu53k3XfqZ9N2/W4WeoDvx20/NgLolCg==
dependencies:
"@ant-design/colors" "^4.0.5"
"@antv/algorithm" "^0.1.8"
"@antv/dom-util" "^2.0.1"
"@antv/event-emitter" "~0.1.0"
"@antv/g-base" "^0.5.1"
"@antv/g-canvas" "^0.5.2"
"@antv/g-math" "^0.1.1"
"@antv/g-svg" "^0.5.1"
"@antv/g6-core" "0.8.21"
"@antv/g6-element" "0.8.21"
"@antv/g6-plugin" "0.8.21"
"@antv/hierarchy" "^0.6.10"
"@antv/layout" "^0.3.0"
"@antv/matrix-util" "^3.1.0-beta.3"
"@antv/path-util" "^2.0.3"
"@antv/util" "~2.0.5"
color "^3.1.3"
d3-force "^2.0.1"
dagre "^0.8.5"
insert-css "^2.0.0"
ml-matrix "^6.5.0"
"@antv/g6-plugin@0.8.21":
version "0.8.21"
resolved "https://registry.yarnpkg.com/@antv/g6-plugin/-/g6-plugin-0.8.21.tgz#ac35eeba410573d87eeb1e49915f5595cdaedab6"
integrity sha512-gRRR8d+F/8CChwwH1rPkAESwLlW8c+ZbuszFn3WOiu7SjSQqNk4LGoNAHgCEUO+jDvAj4xeRZDGl0vlY2oqaSQ==
dependencies:
"@antv/dom-util" "^2.0.2"
"@antv/g-base" "^0.5.1"
"@antv/g-canvas" "^0.5.2"
"@antv/g-svg" "^0.5.2"
"@antv/g6-core" "0.8.21"
"@antv/g6-element" "0.8.21"
"@antv/matrix-util" "^3.1.0-beta.3"
"@antv/path-util" "^2.0.3"
"@antv/scale" "^0.3.4"
"@antv/util" "^2.0.9"
insert-css "^2.0.0"
"@antv/g6@^4.8.21":
version "4.8.21"
resolved "https://registry.yarnpkg.com/@antv/g6/-/g6-4.8.21.tgz#a79b0692c0debe0331e0c02af0b420c9aec06c93"
integrity sha512-0MQT9cU3bKTpFTzcZsR2tQAsDy/FGIzQwCiSR9BhVkDgtwg6bs176ZdWia+/QflWOAg5tQ/C82wnqBXAzpGZnQ==
dependencies:
"@antv/g6-pc" "0.8.21"
"@antv/g@~3.3.5":
version "3.3.6"
resolved "https://registry.npmmirror.com/@antv/g/-/g-3.3.6.tgz#11fed9ddc9ed4e5a2aa244b7c8abb982a003f201"
@@ -417,6 +493,15 @@
gl-matrix "^3.3.0"
tslib "^2.3.1"
"@antv/util@^3.3.2":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@antv/util/-/util-3.3.4.tgz#305090df484a45f3c6fbab1c80a2e1885a452fab"
integrity sha512-NGRjPCPje8GIC14Ye7sjebamFIjxoZ+mCIqfXz6wD/M6fA9SgJivzmLB3Ry01Wq8PI36oOVv9BwrAGV1JD8vjA==
dependencies:
fast-deep-equal "^3.1.3"
gl-matrix "^3.3.0"
tslib "^2.3.1"
"@antv/util@~1.3.1":
version "1.3.1"
resolved "https://registry.npmmirror.com/@antv/util/-/util-1.3.1.tgz#30a34b201ff9126ec0d58c72c8166a9c3e644ccd"
@@ -7034,6 +7119,11 @@ is-any-array@^2.0.0, is-any-array@^2.0.1:
resolved "https://registry.yarnpkg.com/is-any-array/-/is-any-array-2.0.1.tgz#9233242a9c098220290aa2ec28f82ca7fa79899e"
integrity sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==
is-any-array@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-any-array/-/is-any-array-2.0.1.tgz#9233242a9c098220290aa2ec28f82ca7fa79899e"
integrity sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==
is-arguments@^1.0.4:
version "1.1.1"
resolved "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
@@ -8371,6 +8461,37 @@ ml-matrix@^6.5.0:
is-any-array "^2.0.1"
ml-array-rescale "^1.3.7"
ml-array-max@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/ml-array-max/-/ml-array-max-1.2.4.tgz#2373e2b7e51c8807e456cc0ef364c5863713623b"
integrity sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==
dependencies:
is-any-array "^2.0.0"
ml-array-min@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/ml-array-min/-/ml-array-min-1.2.3.tgz#662f027c400105816b849cc3cd786915d0801495"
integrity sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==
dependencies:
is-any-array "^2.0.0"
ml-array-rescale@^1.3.7:
version "1.3.7"
resolved "https://registry.yarnpkg.com/ml-array-rescale/-/ml-array-rescale-1.3.7.tgz#c4d129320d113a732e62dd963dc1695bba9a5340"
integrity sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==
dependencies:
is-any-array "^2.0.0"
ml-array-max "^1.2.4"
ml-array-min "^1.2.3"
ml-matrix@^6.5.0:
version "6.10.4"
resolved "https://registry.yarnpkg.com/ml-matrix/-/ml-matrix-6.10.4.tgz#babee344b20062d9c123aa801c2e5d0d0c7477f6"
integrity sha512-rUyEhfNPzqFsltYwvjNeYQXlYEaVea3KgzcJKJteQUj2WVAGFx9fLNRjtMR9mg2B6bd5buxlmkZmxM4hmO+SKg==
dependencies:
is-any-array "^2.0.0"
ml-array-rescale "^1.3.7"
moment-timezone@^0.5.31:
version "0.5.43"
resolved "https://registry.npmmirror.com/moment-timezone/-/moment-timezone-0.5.43.tgz#3dd7f3d0c67f78c23cd1906b9b2137a09b3c4790"